ERC-20
Overview
Max Total Supply
95,000,000 RPG
Holders
71
Total Transfers
-
Market
Price
$0.00 @ 0.000000 POL
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
Contract Name:
RPG
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity Multiple files format)
pragma solidity ^0.8.0; import "./LERC20.sol"; import "./Address.sol"; import "./SafeMath.sol"; contract RPG is LERC20 { using SafeMath for uint; using Address for address; address public _pool; address public _treasury; mapping(address => bool) public freeOfCharge; mapping(address => bool) public trustedAddresses; mapping(address => bool) public allowedContracts; uint256 public _stakingFee; uint256 public _treasuryFee; uint256 public constant maxFee = 1500; uint256 public constant percentageConst = 10000; bool public feeEnabled; modifier onlyAllowedContracts() { require(address(msg.sender).isContract() && allowedContracts[msg.sender] || !address(msg.sender).isContract(), "Address: should be allowed"); _; } modifier onlyTrusted() { require(trustedAddresses[msg.sender], "Address: should be allowed"); _; } constructor(uint256 totalSupply_, string memory name_, string memory symbol_, address admin_, address recoveryAdmin_, uint256 timelockPeriod_, address lossless_, address stakingPool, address treasuryPool) LERC20(totalSupply_, name_, symbol_, admin_, recoveryAdmin_, timelockPeriod_, lossless_) { _setStakingPool(stakingPool); _setTreasury(treasuryPool); _setFees(300, 100); feeEnabled = false; } function updateStakingPool(address pool) external onlyOwner { _setStakingPool(pool); } function updateTreasury(address treasury) external onlyOwner { _setTreasury(treasury); } function addFreeOfChargeAddress(address _free) external onlyOwner { freeOfCharge[_free] = true; } function deleteFreeOfChargeAddress(address _free) external onlyOwner { freeOfCharge[_free] = false; } function addTrustedAddress(address _free) external onlyOwner { trustedAddresses[_free] = true; } function deleteTrustedAddress(address _free) external onlyOwner { trustedAddresses[_free] = false; } function enableFee(bool status) external onlyOwner { feeEnabled = status; } function updateFee(uint256 fee, uint256 treasury) onlyOwner external { _setFees(fee, treasury); } function addAllowedContract(address _contract) external onlyOwner returns (bool) { require(_contract.isContract(), "Address: is not contract or not deployed"); allowedContracts[_contract] = true; return true; } function removeAllowedContract(address _contract) external onlyOwner returns (bool) { require(_contract.isContract(), "Address: is not contract or not deployed"); allowedContracts[_contract] = false; return true; } function transferValueToSend(address sender, uint256 amount) public view returns (uint256){ return freeOfCharge[sender] ? amount : amount.sub(amount.mul(_stakingFee.add(_treasuryFee)).div(percentageConst)); } function transfer(address recipient, uint256 amount) override public onlyAllowedContracts returns (bool) { if (freeOfCharge[msg.sender] || !feeEnabled) { require(super.transfer(recipient, amount)); } else { require(balanceOf(msg.sender) >= amount, "Insufficient balance"); uint256 feeAmount; uint256 sendingAmount; feeAmount = amount.mul(_stakingFee).div(percentageConst); sendingAmount = amount.sub(feeAmount); if (_treasuryFee > 0) { uint256 treasuryAmount = amount.mul(_treasuryFee).div(percentageConst); sendingAmount = sendingAmount.sub(treasuryAmount); require(super.transfer(_treasury, treasuryAmount)); } require(super.transfer(recipient, sendingAmount)); require(super.transfer(_pool, feeAmount)); } return true; } function transferFrom(address sender, address recipient, uint256 amount) override public onlyAllowedContracts returns (bool) { if (freeOfCharge[sender] || !feeEnabled) { require(super.transferFrom(sender, recipient, amount)); } else { require(balanceOf(sender) >= amount, "Insufficient balance"); uint256 feeAmount; uint256 sendingAmount; feeAmount = amount.mul(_stakingFee).div(percentageConst); sendingAmount = amount.sub(feeAmount); if (_treasuryFee > 0) { uint256 treasuryAmount = amount.mul(_treasuryFee).div(percentageConst); sendingAmount = sendingAmount.sub(treasuryAmount); require(super.transferFrom(sender, _treasury, treasuryAmount)); } require(super.transferFrom(sender, recipient, sendingAmount)); require(super.transferFrom(sender, _pool, feeAmount)); } return true; } function transferTrusted(address recipient, uint256 amount) public onlyTrusted returns (bool) { require(super.transfer(recipient, amount)); return true; } function transferFromTrusted(address sender, address recipient, uint256 amount) public onlyTrusted returns (bool) { require(super.transferFrom(sender, recipient, amount)); return true; } function _setFees(uint256 fee, uint256 treasury) internal { require(fee + treasury <= maxFee, "Fee: value exceeded limit"); _stakingFee = fee; _treasuryFee = treasury; } function _setStakingPool(address pool) internal { _pool = pool; } function _setTreasury(address pool) internal { _treasury = pool; } }
pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } }
pragma solidity ^0.8.0; /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with 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) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
pragma solidity ^0.8.0; import "./Context.sol"; import "./IERC20.sol"; import "./SafeMath.sol"; import "./Address.sol"; /** * @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}. */ 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 { } }
pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); }
pragma solidity ^0.8.0; import "./Ownable.sol"; interface IERC20 { function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address recipient, uint256 amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); } interface ILosslessController { function beforeTransfer(address sender, address recipient, uint256 amount) external; function beforeTransferFrom(address msgSender, address sender, address recipient, uint256 amount) external; function beforeApprove(address sender, address spender, uint256 amount) external; function beforeIncreaseAllowance(address msgSender, address spender, uint256 addedValue) external; function beforeDecreaseAllowance(address msgSender, address spender, uint256 subtractedValue) external; function afterApprove(address sender, address spender, uint256 amount) external; function afterTransfer(address sender, address recipient, uint256 amount) external; function afterTransferFrom(address msgSender, address sender, address recipient, uint256 amount) external; function afterIncreaseAllowance(address sender, address spender, uint256 addedValue) external; function afterDecreaseAllowance(address sender, address spender, uint256 subtractedValue) external; } contract LERC20 is Ownable, IERC20 { mapping (address => uint256) private _balances; mapping (address => mapping (address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; address public recoveryAdmin; address private recoveryAdminCanditate; bytes32 private recoveryAdminKeyHash; address public admin; uint256 public timelockPeriod; uint256 public losslessTurnOffTimestamp; bool public isLosslessTurnOffProposed; bool public isLosslessOn = true; ILosslessController private lossless; event AdminChanged(address indexed previousAdmin, address indexed newAdmin); event RecoveryAdminChangeProposed(address indexed candidate); event RecoveryAdminChanged(address indexed previousAdmin, address indexed newAdmin); event LosslessTurnOffProposed(uint256 turnOffDate); event LosslessTurnedOff(); event LosslessTurnedOn(); constructor(uint256 totalSupply_, string memory name_, string memory symbol_, address admin_, address recoveryAdmin_, uint256 timelockPeriod_, address lossless_) { _mint(_msgSender(), totalSupply_); _name = name_; _symbol = symbol_; admin = admin_; recoveryAdmin = recoveryAdmin_; timelockPeriod = timelockPeriod_; lossless = ILosslessController(lossless_); } // --- LOSSLESS modifiers --- modifier lssAprove(address spender, uint256 amount) { if (isLosslessOn) { lossless.beforeApprove(_msgSender(), spender, amount); _; lossless.afterApprove(_msgSender(), spender, amount); } else { _; } } modifier lssTransfer(address recipient, uint256 amount) { if (isLosslessOn) { lossless.beforeTransfer(_msgSender(), recipient, amount); _; lossless.afterTransfer(_msgSender(), recipient, amount); } else { _; } } modifier lssTransferFrom(address sender, address recipient, uint256 amount) { if (isLosslessOn) { lossless.beforeTransferFrom(_msgSender(),sender, recipient, amount); _; lossless.afterTransferFrom(_msgSender(), sender, recipient, amount); } else { _; } } modifier lssIncreaseAllowance(address spender, uint256 addedValue) { if (isLosslessOn) { lossless.beforeIncreaseAllowance(_msgSender(), spender, addedValue); _; lossless.afterIncreaseAllowance(_msgSender(), spender, addedValue); } else { _; } } modifier lssDecreaseAllowance(address spender, uint256 subtractedValue) { if (isLosslessOn) { lossless.beforeDecreaseAllowance(_msgSender(), spender, subtractedValue); _; lossless.afterDecreaseAllowance(_msgSender(), spender, subtractedValue); } else { _; } } modifier onlyRecoveryAdmin() { require(_msgSender() == recoveryAdmin, "LERC20: Must be recovery admin"); _; } // --- LOSSLESS management --- function getAdmin() external view returns (address) { return admin; } function transferOutBlacklistedFunds(address[] calldata from) external { require(_msgSender() == address(lossless), "LERC20: Only lossless contract"); for (uint i = 0; i < from.length; i++) { _transfer(from[i], address(lossless), balanceOf(from[i])); } } function setLosslessAdmin(address newAdmin) public onlyRecoveryAdmin { emit AdminChanged(admin, newAdmin); admin = newAdmin; } function transferRecoveryAdminOwnership(address candidate, bytes32 keyHash) public onlyRecoveryAdmin { recoveryAdminCanditate = candidate; recoveryAdminKeyHash = keyHash; emit RecoveryAdminChangeProposed(candidate); } function acceptRecoveryAdminOwnership(bytes memory key) external { require(_msgSender() == recoveryAdminCanditate, "LERC20: Must be canditate"); require(keccak256(key) == recoveryAdminKeyHash, "LERC20: Invalid key"); emit RecoveryAdminChanged(recoveryAdmin, recoveryAdminCanditate); recoveryAdmin = recoveryAdminCanditate; } function proposeLosslessTurnOff() public onlyRecoveryAdmin { losslessTurnOffTimestamp = block.timestamp + timelockPeriod; isLosslessTurnOffProposed = true; emit LosslessTurnOffProposed(losslessTurnOffTimestamp); } function executeLosslessTurnOff() public onlyRecoveryAdmin { require(isLosslessTurnOffProposed, "LERC20: TurnOff not proposed"); require(losslessTurnOffTimestamp <= block.timestamp, "LERC20: Time lock in progress"); isLosslessOn = false; isLosslessTurnOffProposed = false; emit LosslessTurnedOff(); } function executeLosslessTurnOn() public onlyRecoveryAdmin { isLosslessTurnOffProposed = false; isLosslessOn = true; emit LosslessTurnedOn(); } // --- ERC20 methods --- function name() public view virtual returns (string memory) { return _name; } function symbol() public view virtual returns (string memory) { return _symbol; } function decimals() public view virtual returns (uint8) { return 18; } function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } function transfer(address recipient, uint256 amount) public virtual override lssTransfer(recipient, amount) returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public virtual override lssAprove(spender, amount) returns (bool) { require((amount == 0) || (_allowances[_msgSender()][spender] == 0), "LERC20: Cannot change non zero allowance"); _approve(_msgSender(), spender, amount); return true; } function transferFrom(address sender, address recipient, uint256 amount) public virtual override lssTransferFrom(sender, recipient, amount) returns (bool) { _transfer(sender, recipient, amount); uint256 currentAllowance = _allowances[sender][_msgSender()]; require(currentAllowance >= amount, "LERC20: transfer amount exceeds allowance"); _approve(sender, _msgSender(), currentAllowance - amount); return true; } function increaseAllowance(address spender, uint256 addedValue) public virtual lssIncreaseAllowance(spender, addedValue) returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual lssDecreaseAllowance(spender, subtractedValue) returns (bool) { uint256 currentAllowance = _allowances[_msgSender()][spender]; require(currentAllowance >= subtractedValue, "LERC20: decreased allowance below zero"); _approve(_msgSender(), spender, currentAllowance - subtractedValue); return true; } function _transfer(address sender, address recipient, uint256 amount) internal virtual { require(sender != address(0), "LERC20: transfer from the zero address"); require(recipient != address(0), "LERC20: transfer to the zero address"); uint256 senderBalance = _balances[sender]; require(senderBalance >= amount, "LERC20: transfer amount exceeds balance"); _balances[sender] = senderBalance - amount; _balances[recipient] += amount; emit Transfer(sender, recipient, amount); } function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "LERC20: mint to the zero address"); _totalSupply += amount; _balances[account] += amount; emit Transfer(address(0), account, amount); } function _approve(address owner, address spender, uint256 amount) internal virtual { require(owner != address(0), "LERC20: approve from the zero address"); require(spender != address(0), "LERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _setOwner(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"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
pragma solidity ^0.8.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; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"uint256","name":"totalSupply_","type":"uint256"},{"internalType":"string","name":"name_","type":"string"},{"internalType":"string","name":"symbol_","type":"string"},{"internalType":"address","name":"admin_","type":"address"},{"internalType":"address","name":"recoveryAdmin_","type":"address"},{"internalType":"uint256","name":"timelockPeriod_","type":"uint256"},{"internalType":"address","name":"lossless_","type":"address"},{"internalType":"address","name":"stakingPool","type":"address"},{"internalType":"address","name":"treasuryPool","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousAdmin","type":"address"},{"indexed":true,"internalType":"address","name":"newAdmin","type":"address"}],"name":"AdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"turnOffDate","type":"uint256"}],"name":"LosslessTurnOffProposed","type":"event"},{"anonymous":false,"inputs":[],"name":"LosslessTurnedOff","type":"event"},{"anonymous":false,"inputs":[],"name":"LosslessTurnedOn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"candidate","type":"address"}],"name":"RecoveryAdminChangeProposed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousAdmin","type":"address"},{"indexed":true,"internalType":"address","name":"newAdmin","type":"address"}],"name":"RecoveryAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_pool","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_stakingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_treasury","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_treasuryFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"key","type":"bytes"}],"name":"acceptRecoveryAdminOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_contract","type":"address"}],"name":"addAllowedContract","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_free","type":"address"}],"name":"addFreeOfChargeAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_free","type":"address"}],"name":"addTrustedAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"admin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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":"","type":"address"}],"name":"allowedContracts","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_free","type":"address"}],"name":"deleteFreeOfChargeAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_free","type":"address"}],"name":"deleteTrustedAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"status","type":"bool"}],"name":"enableFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"executeLosslessTurnOff","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"executeLosslessTurnOn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"freeOfCharge","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"isLosslessOn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isLosslessTurnOffProposed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"losslessTurnOffTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxFee","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":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"percentageConst","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proposeLosslessTurnOff","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"recoveryAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_contract","type":"address"}],"name":"removeAllowedContract","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAdmin","type":"address"}],"name":"setLosslessAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"timelockPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFromTrusted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"from","type":"address[]"}],"name":"transferOutBlacklistedFunds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"candidate","type":"address"},{"internalType":"bytes32","name":"keyHash","type":"bytes32"}],"name":"transferRecoveryAdminOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferTrusted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferValueToSend","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"trustedAddresses","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"fee","type":"uint256"},{"internalType":"uint256","name":"treasury","type":"uint256"}],"name":"updateFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"updateStakingPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"treasury","type":"address"}],"name":"updateTreasury","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526001600c60016101000a81548160ff0219169083151502179055503480156200002c57600080fd5b5060405162005d1638038062005d16833981810160405281019062000052919062000667565b88888888888888620000796200006d620001fe60201b60201c565b6200020660201b60201c565b6200009a6200008d620001fe60201b60201c565b88620002ca60201b60201c565b8560049080519060200190620000b29291906200050b565b508460059080519060200190620000cb9291906200050b565b5083600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600a8190555080600c60026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050505050620001ae826200041c60201b60201c565b620001bf816200046060201b60201c565b620001d461012c6064620004a460201b60201c565b6000601460006101000a81548160ff02191690831515021790555050505050505050505062000b29565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156200033d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003349062000805565b60405180910390fd5b8060036000828254620003519190620008b4565b9250508190555080600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620003a99190620008b4565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000410919062000827565b60405180910390a35050565b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b80600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6105dc8183620004b59190620008b4565b1115620004f9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004f090620007e3565b60405180910390fd5b81601281905550806013819055505050565b828054620005199062000985565b90600052602060002090601f0160209004810192826200053d576000855562000589565b82601f106200055857805160ff191683800117855562000589565b8280016001018555821562000589579182015b82811115620005885782518255916020019190600101906200056b565b5b5090506200059891906200059c565b5090565b5b80821115620005b75760008160009055506001016200059d565b5090565b6000620005d2620005cc846200086d565b62000844565b905082815260208101848484011115620005f157620005f062000a83565b5b620005fe8482856200094f565b509392505050565b600081519050620006178162000af5565b92915050565b600082601f83011262000635576200063462000a7e565b5b815162000647848260208601620005bb565b91505092915050565b600081519050620006618162000b0f565b92915050565b60008060008060008060008060006101208a8c0312156200068d576200068c62000a8d565b5b60006200069d8c828d0162000650565b99505060208a015167ffffffffffffffff811115620006c157620006c062000a88565b5b620006cf8c828d016200061d565b98505060408a015167ffffffffffffffff811115620006f357620006f262000a88565b5b620007018c828d016200061d565b9750506060620007148c828d0162000606565b9650506080620007278c828d0162000606565b95505060a06200073a8c828d0162000650565b94505060c06200074d8c828d0162000606565b93505060e0620007608c828d0162000606565b925050610100620007748c828d0162000606565b9150509295985092959850929598565b600062000793601983620008a3565b9150620007a08262000aa3565b602082019050919050565b6000620007ba602083620008a3565b9150620007c78262000acc565b602082019050919050565b620007dd8162000945565b82525050565b60006020820190508181036000830152620007fe8162000784565b9050919050565b600060208201905081810360008301526200082081620007ab565b9050919050565b60006020820190506200083e6000830184620007d2565b92915050565b60006200085062000863565b90506200085e8282620009bb565b919050565b6000604051905090565b600067ffffffffffffffff8211156200088b576200088a62000a4f565b5b620008968262000a92565b9050602081019050919050565b600082825260208201905092915050565b6000620008c18262000945565b9150620008ce8362000945565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620009065762000905620009f1565b5b828201905092915050565b60006200091e8262000925565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b838110156200096f57808201518184015260208101905062000952565b838111156200097f576000848401525b50505050565b600060028204905060018216806200099e57607f821691505b60208210811415620009b557620009b462000a20565b5b50919050565b620009c68262000a92565b810181811067ffffffffffffffff82111715620009e857620009e762000a4f565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4665653a2076616c7565206578636565646564206c696d697400000000000000600082015250565b7f4c45524332303a206d696e7420746f20746865207a65726f2061646472657373600082015250565b62000b008162000911565b811462000b0c57600080fd5b50565b62000b1a8162000945565b811462000b2657600080fd5b50565b6151dd8062000b396000396000f3fe608060405234801561001057600080fd5b50600436106102f15760003560e01c8063715018a61161019d578063a99bc409116100e9578063d6e242b8116100a2578063efab831c1161007c578063efab831c14610920578063f2fde38b1461093e578063f851a4401461095a578063fe62150514610978576102f1565b8063d6e242b8146108c8578063dd62ed3e146108d2578063e319a3d914610902576102f1565b8063a99bc4091461082c578063acb3f63714610848578063ae85028114610866578063b38fe95714610884578063b5c228771461088e578063ccfa214f146108aa576102f1565b806395d89b4111610156578063a17c36d411610130578063a17c36d41461077e578063a457c2d7146107ae578063a771ebc7146107de578063a9059cbb146107fc576102f1565b806395d89b41146107145780639800fc16146107325780639f1b53b714610762576102f1565b8063715018a61461067c5780637f51bb1f146106865780638d49ad75146106a25780638da5cb5b146106be57806393310ffe146106dc578063936af911146106f8576102f1565b80632baa3c9e1161025c5780635b8a194a11610215578063636fc28b116101ef578063636fc28b146105e05780636b094113146105fe5780636e9960c31461062e57806370a082311461064c576102f1565b80635b8a194a1461059a5780635f6529a3146105a457806361086b00146105c2576102f1565b80632baa3c9e146104b25780632c56462f146104ce5780632ecaf675146104fe578063313ce5671461051c578063395093511461053a57806351e0e26b1461056a576102f1565b806318160ddd116102ae57806318160ddd146103de5780631e5e7e85146103fc57806323b872dd1461042c5780632740c1971461045c578063275822431461047857806328f0b25714610494576102f1565b806301f59d16146102f657806306fdde0314610314578063095ea7b3146103325780630a3a77d514610362578063158b417214610392578063179fc75d146103ae575b600080fd5b6102fe610994565b60405161030b91906147ff565b60405180910390f35b61031c61099a565b604051610329919061451d565b60405180910390f35b61034c60048036038101906103479190613fb1565b610a2c565b6040516103599190614502565b60405180910390f35b61037c60048036038101906103779190613eb1565b610d51565b6040516103899190614502565b60405180910390f35b6103ac60048036038101906103a7919061403e565b610d71565b005b6103c860048036038101906103c39190613fb1565b610e0a565b6040516103d591906147ff565b60405180910390f35b6103e6610ebb565b6040516103f391906147ff565b60405180910390f35b61041660048036038101906104119190613f1e565b610ec5565b6040516104239190614502565b60405180910390f35b61044660048036038101906104419190613f1e565b610f72565b6040516104539190614502565b60405180910390f35b610476600480360381019061047191906140b4565b61123c565b005b610492600480360381019061048d9190613eb1565b6112c6565b005b61049c61139d565b6040516104a991906147ff565b60405180910390f35b6104cc60048036038101906104c79190613eb1565b6113a3565b005b6104e860048036038101906104e39190613eb1565b6114fa565b6040516104f59190614502565b60405180910390f35b610506611637565b60405161051391906147ff565b60405180910390f35b61052461163d565b604051610531919061481a565b60405180910390f35b610554600480360381019061054f9190613fb1565b611646565b6040516105619190614502565b60405180910390f35b610584600480360381019061057f9190613eb1565b6118e5565b6040516105919190614502565b60405180910390f35b6105a2611905565b005b6105ac611a00565b6040516105b9919061446b565b60405180910390f35b6105ca611a26565b6040516105d791906147ff565b60405180910390f35b6105e8611a2c565b6040516105f5919061446b565b60405180910390f35b61061860048036038101906106139190613eb1565b611a52565b6040516106259190614502565b60405180910390f35b610636611a72565b604051610643919061446b565b60405180910390f35b61066660048036038101906106619190613eb1565b611a9c565b60405161067391906147ff565b60405180910390f35b610684611ae5565b005b6106a0600480360381019061069b9190613eb1565b611b6d565b005b6106bc60048036038101906106b79190613eb1565b611bf5565b005b6106c6611ccc565b6040516106d3919061446b565b60405180910390f35b6106f660048036038101906106f19190613f71565b611cf5565b005b610712600480360381019061070d9190613ff1565b611e1b565b005b61071c611f5b565b604051610729919061451d565b60405180910390f35b61074c60048036038101906107479190613eb1565b611fed565b6040516107599190614502565b60405180910390f35b61077c60048036038101906107779190613eb1565b61212a565b005b61079860048036038101906107939190613fb1565b612201565b6040516107a59190614502565b60405180910390f35b6107c860048036038101906107c39190613fb1565b6122ac565b6040516107d59190614502565b60405180910390f35b6107e66125dd565b6040516107f39190614502565b60405180910390f35b61081660048036038101906108119190613fb1565b6125f0565b6040516108239190614502565b60405180910390f35b61084660048036038101906108419190613eb1565b6128b5565b005b61085061293d565b60405161085d91906147ff565b60405180910390f35b61086e612943565b60405161087b91906147ff565b60405180910390f35b61088c612949565b005b6108a860048036038101906108a3919061406b565b612ad8565b005b6108b2612cbe565b6040516108bf9190614502565b60405180910390f35b6108d0612cd1565b005b6108ec60048036038101906108e79190613ede565b612dd2565b6040516108f991906147ff565b60405180910390f35b61090a612e59565b604051610917919061446b565b60405180910390f35b610928612e7f565b6040516109359190614502565b60405180910390f35b61095860048036038101906109539190613eb1565b612e92565b005b610962612f8a565b60405161096f919061446b565b60405180910390f35b610992600480360381019061098d9190613eb1565b612fb0565b005b6105dc81565b6060600480546109a990614a5d565b80601f01602080910402602001604051908101604052809291908181526020018280546109d590614a5d565b8015610a225780601f106109f757610100808354040283529160200191610a22565b820191906000526020600020905b815481529060010190602001808311610a0557829003601f168201915b5050505050905090565b60008282600c60019054906101000a900460ff1615610c6157600c60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166347abf3be610a8b613087565b84846040518463ffffffff1660e01b8152600401610aab939291906144cb565b600060405180830381600087803b158015610ac557600080fd5b505af1158015610ad9573d6000803e3d6000fd5b505050506000841480610b6f5750600060026000610af5613087565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054145b610bae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba59061477f565b60405180910390fd5b610bc0610bb9613087565b868661308f565b60019250600c60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663900f66ef610c0a613087565b84846040518463ffffffff1660e01b8152600401610c2a939291906144cb565b600060405180830381600087803b158015610c4457600080fd5b505af1158015610c58573d6000803e3d6000fd5b50505050610d49565b6000841480610cf35750600060026000610c79613087565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054145b610d32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d299061477f565b60405180910390fd5b610d44610d3d613087565b868661308f565b600192505b505092915050565b600f6020528060005260406000206000915054906101000a900460ff1681565b610d79613087565b73ffffffffffffffffffffffffffffffffffffffff16610d97611ccc565b73ffffffffffffffffffffffffffffffffffffffff1614610ded576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de4906146ff565b60405180910390fd5b80601460006101000a81548160ff02191690831515021790555050565b6000600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610eb157610eac610e9d612710610e8f610e8060135460125461325a90919063ffffffff16565b866132b890919063ffffffff16565b61333390919063ffffffff16565b8361337d90919063ffffffff16565b610eb3565b815b905092915050565b6000600354905090565b6000601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610f53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4a906145df565b60405180910390fd5b610f5e8484846133c7565b610f6757600080fd5b600190509392505050565b6000610f933373ffffffffffffffffffffffffffffffffffffffff16613715565b8015610fe85750601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b8061100f575061100d3373ffffffffffffffffffffffffffffffffffffffff16613715565b155b61104e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611045906145df565b60405180910390fd5b600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806110b35750601460009054906101000a900460ff16155b156110d1576110c38484846133c7565b6110cc57600080fd5b611231565b816110db85611a9c565b101561111c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111139061465f565b60405180910390fd5b60008061114861271061113a601254876132b890919063ffffffff16565b61333390919063ffffffff16565b915061115d828561337d90919063ffffffff16565b9050600060135411156111e4576000611195612710611187601354886132b890919063ffffffff16565b61333390919063ffffffff16565b90506111aa818361337d90919063ffffffff16565b91506111d987600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836133c7565b6111e257600080fd5b505b6111ef8686836133c7565b6111f857600080fd5b61122586600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846133c7565b61122e57600080fd5b50505b600190509392505050565b611244613087565b73ffffffffffffffffffffffffffffffffffffffff16611262611ccc565b73ffffffffffffffffffffffffffffffffffffffff16146112b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112af906146ff565b60405180910390fd5b6112c28282613728565b5050565b6112ce613087565b73ffffffffffffffffffffffffffffffffffffffff166112ec611ccc565b73ffffffffffffffffffffffffffffffffffffffff1614611342576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611339906146ff565b60405180910390fd5b6000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60135481565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166113e4613087565b73ffffffffffffffffffffffffffffffffffffffff161461143a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114319061473f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f60405160405180910390a380600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000611504613087565b73ffffffffffffffffffffffffffffffffffffffff16611522611ccc565b73ffffffffffffffffffffffffffffffffffffffff1614611578576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156f906146ff565b60405180910390fd5b6115978273ffffffffffffffffffffffffffffffffffffffff16613715565b6115d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115cd9061457f565b60405180910390fd5b6001601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060019050919050565b600a5481565b60006012905090565b60008282600c60019054906101000a900460ff161561183857600c60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cf5961bb6116a5613087565b84846040518463ffffffff1660e01b81526004016116c5939291906144cb565b600060405180830381600087803b1580156116df57600080fd5b505af11580156116f3573d6000803e3d6000fd5b50505050611797611702613087565b868660026000611710613087565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461179291906148a7565b61308f565b60019250600c60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166334d01aa86117e1613087565b84846040518463ffffffff1660e01b8152600401611801939291906144cb565b600060405180830381600087803b15801561181b57600080fd5b505af115801561182f573d6000803e3d6000fd5b505050506118dd565b6118d8611843613087565b868660026000611851613087565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546118d391906148a7565b61308f565b600192505b505092915050565b60116020528060005260406000206000915054906101000a900460ff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611946613087565b73ffffffffffffffffffffffffffffffffffffffff161461199c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119939061473f565b60405180910390fd5b6000600c60006101000a81548160ff0219169083151502179055506001600c60016101000a81548160ff0219169083151502179055507fa4a40bdd0a809720a61b44f1b3497ce7dad87741a0ba3b961c2e65e645060e7060405160405180910390a1565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b5481565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60106020528060005260406000206000915054906101000a900460ff1681565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611aed613087565b73ffffffffffffffffffffffffffffffffffffffff16611b0b611ccc565b73ffffffffffffffffffffffffffffffffffffffff1614611b61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b58906146ff565b60405180910390fd5b611b6b600061378a565b565b611b75613087565b73ffffffffffffffffffffffffffffffffffffffff16611b93611ccc565b73ffffffffffffffffffffffffffffffffffffffff1614611be9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be0906146ff565b60405180910390fd5b611bf28161384e565b50565b611bfd613087565b73ffffffffffffffffffffffffffffffffffffffff16611c1b611ccc565b73ffffffffffffffffffffffffffffffffffffffff1614611c71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c68906146ff565b60405180910390fd5b6001600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611d36613087565b73ffffffffffffffffffffffffffffffffffffffff1614611d8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d839061473f565b60405180910390fd5b81600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550806008819055508173ffffffffffffffffffffffffffffffffffffffff167fc5666bfdfb79a4b0b4abdbc565d6e9937a263233b2b378c55132d34dc5784a3660405160405180910390a25050565b600c60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611e5c613087565b73ffffffffffffffffffffffffffffffffffffffff1614611eb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea99061475f565b60405180910390fd5b60005b82829050811015611f5657611f43838383818110611ed657611ed5614b96565b5b9050602002016020810190611eeb9190613eb1565b600c60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611f3e868686818110611f2457611f23614b96565b5b9050602002016020810190611f399190613eb1565b611a9c565b613892565b8080611f4e90614ac0565b915050611eb5565b505050565b606060058054611f6a90614a5d565b80601f0160208091040260200160405190810160405280929190818152602001828054611f9690614a5d565b8015611fe35780601f10611fb857610100808354040283529160200191611fe3565b820191906000526020600020905b815481529060010190602001808311611fc657829003601f168201915b5050505050905090565b6000611ff7613087565b73ffffffffffffffffffffffffffffffffffffffff16612015611ccc565b73ffffffffffffffffffffffffffffffffffffffff161461206b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612062906146ff565b60405180910390fd5b61208a8273ffffffffffffffffffffffffffffffffffffffff16613715565b6120c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c09061457f565b60405180910390fd5b6000601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060019050919050565b612132613087565b73ffffffffffffffffffffffffffffffffffffffff16612150611ccc565b73ffffffffffffffffffffffffffffffffffffffff16146121a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219d906146ff565b60405180910390fd5b6000601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661228f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612286906145df565b60405180910390fd5b6122998383613b09565b6122a257600080fd5b6001905092915050565b60008282600c60019054906101000a900460ff16156124e757600c60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663568c75a961230b613087565b84846040518463ffffffff1660e01b815260040161232b939291906144cb565b600060405180830381600087803b15801561234557600080fd5b505af1158015612359573d6000803e3d6000fd5b5050505060006002600061236b613087565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905084811015612428576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241f906147bf565b60405180910390fd5b612445612433613087565b8787846124409190614988565b61308f565b6001935050600c60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ded1f4d0612490613087565b84846040518463ffffffff1660e01b81526004016124b0939291906144cb565b600060405180830381600087803b1580156124ca57600080fd5b505af11580156124de573d6000803e3d6000fd5b505050506125d5565b6000600260006124f5613087565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050848110156125b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a9906147bf565b60405180910390fd5b6125cf6125bd613087565b8787846125ca9190614988565b61308f565b60019350505b505092915050565b601460009054906101000a900460ff1681565b60006126113373ffffffffffffffffffffffffffffffffffffffff16613715565b80156126665750601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b8061268d575061268b3373ffffffffffffffffffffffffffffffffffffffff16613715565b155b6126cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c3906145df565b60405180910390fd5b600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806127315750601460009054906101000a900460ff16155b1561274e576127408383613b09565b61274957600080fd5b6128ab565b8161275833611a9c565b1015612799576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127909061465f565b60405180910390fd5b6000806127c56127106127b7601254876132b890919063ffffffff16565b61333390919063ffffffff16565b91506127da828561337d90919063ffffffff16565b905060006013541115612860576000612812612710612804601354886132b890919063ffffffff16565b61333390919063ffffffff16565b9050612827818361337d90919063ffffffff16565b9150612855600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682613b09565b61285e57600080fd5b505b61286a8582613b09565b61287357600080fd5b61289f600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683613b09565b6128a857600080fd5b50505b6001905092915050565b6128bd613087565b73ffffffffffffffffffffffffffffffffffffffff166128db611ccc565b73ffffffffffffffffffffffffffffffffffffffff1614612931576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612928906146ff565b60405180910390fd5b61293a81613c8c565b50565b61271081565b60125481565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661298a613087565b73ffffffffffffffffffffffffffffffffffffffff16146129e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129d79061473f565b60405180910390fd5b600c60009054906101000a900460ff16612a2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a269061467f565b60405180910390fd5b42600b541115612a74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6b9061455f565b60405180910390fd5b6000600c60016101000a81548160ff0219169083151502179055506000600c60006101000a81548160ff0219169083151502179055507f5b534e2716e5ad68b9f67521378f8199a7ceb9d3f6f354275dad33fe42cf710a60405160405180910390a1565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612b19613087565b73ffffffffffffffffffffffffffffffffffffffff1614612b6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b66906146bf565b60405180910390fd5b600854818051906020012014612bba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bb19061463f565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f1c7f382531621f02aefb4212478bba8871ffad078202bdbba87f3e21d639aebb60405160405180910390a3600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600c60019054906101000a900460ff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612d12613087565b73ffffffffffffffffffffffffffffffffffffffff1614612d68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d5f9061473f565b60405180910390fd5b600a5442612d7691906148a7565b600b819055506001600c60006101000a81548160ff0219169083151502179055507f88e0be0448355c71674462d3cb36342f0d085f7b43a1deab03052c95eb158709600b54604051612dc891906147ff565b60405180910390a1565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c60009054906101000a900460ff1681565b612e9a613087565b73ffffffffffffffffffffffffffffffffffffffff16612eb8611ccc565b73ffffffffffffffffffffffffffffffffffffffff1614612f0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f05906146ff565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612f7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f759061459f565b60405180910390fd5b612f878161378a565b50565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612fb8613087565b73ffffffffffffffffffffffffffffffffffffffff16612fd6611ccc565b73ffffffffffffffffffffffffffffffffffffffff161461302c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613023906146ff565b60405180910390fd5b6001601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156130ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130f69061479f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561316f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613166906147df565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161324d91906147ff565b60405180910390a3505050565b600080828461326991906148a7565b9050838110156132ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132a59061461f565b60405180910390fd5b8091505092915050565b6000808314156132cb576000905061332d565b600082846132d9919061492e565b90508284826132e891906148fd565b14613328576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161331f906146df565b60405180910390fd5b809150505b92915050565b600061337583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613cd0565b905092915050565b60006133bf83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613d33565b905092915050565b6000838383600c60019054906101000a900460ff161561361257600c60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663379f5c69613427613087565b8585856040518563ffffffff1660e01b81526004016134499493929190614486565b600060405180830381600087803b15801561346357600080fd5b505af1158015613477573d6000803e3d6000fd5b50505050613486878787613892565b6000600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006134d1613087565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905085811015613551576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613548906145ff565b60405180910390fd5b61356e8861355d613087565b88846135699190614988565b61308f565b6001945050600c60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a56e8adf6135b9613087565b8585856040518563ffffffff1660e01b81526004016135db9493929190614486565b600060405180830381600087803b1580156135f557600080fd5b505af1158015613609573d6000803e3d6000fd5b5050505061370b565b61361d878787613892565b6000600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000613668613087565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050858110156136e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136df906145ff565b60405180910390fd5b613705886136f4613087565b88846137009190614988565b61308f565b60019450505b5050509392505050565b600080823b905060008111915050919050565b6105dc818361373791906148a7565b1115613778576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161376f9061471f565b60405180910390fd5b81601281905550806013819055505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613902576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138f99061469f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613972576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139699061453f565b60405180910390fd5b6000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156139f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139f0906145bf565b60405180910390fd5b8181613a059190614988565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613a9791906148a7565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613afb91906147ff565b60405180910390a350505050565b60008282600c60019054906101000a900460ff1615613c6d57600c60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631ffb811f613b68613087565b84846040518463ffffffff1660e01b8152600401613b88939291906144cb565b600060405180830381600087803b158015613ba257600080fd5b505af1158015613bb6573d6000803e3d6000fd5b50505050613bcc613bc5613087565b8686613892565b60019250600c60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f49062ca613c16613087565b84846040518463ffffffff1660e01b8152600401613c36939291906144cb565b600060405180830381600087803b158015613c5057600080fd5b505af1158015613c64573d6000803e3d6000fd5b50505050613c84565b613c7f613c78613087565b8686613892565b600192505b505092915050565b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008083118290613d17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d0e919061451d565b60405180910390fd5b5060008385613d2691906148fd565b9050809150509392505050565b6000838311158290613d7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d72919061451d565b60405180910390fd5b5060008385613d8a9190614988565b9050809150509392505050565b6000613daa613da58461485a565b614835565b905082815260208101848484011115613dc657613dc5614c03565b5b613dd1848285614a1b565b509392505050565b600081359050613de88161514b565b92915050565b60008083601f840112613e0457613e03614bf9565b5b8235905067ffffffffffffffff811115613e2157613e20614bf4565b5b602083019150836020820283011115613e3d57613e3c614bfe565b5b9250929050565b600081359050613e5381615162565b92915050565b600081359050613e6881615179565b92915050565b600082601f830112613e8357613e82614bf9565b5b8135613e93848260208601613d97565b91505092915050565b600081359050613eab81615190565b92915050565b600060208284031215613ec757613ec6614c0d565b5b6000613ed584828501613dd9565b91505092915050565b60008060408385031215613ef557613ef4614c0d565b5b6000613f0385828601613dd9565b9250506020613f1485828601613dd9565b9150509250929050565b600080600060608486031215613f3757613f36614c0d565b5b6000613f4586828701613dd9565b9350506020613f5686828701613dd9565b9250506040613f6786828701613e9c565b9150509250925092565b60008060408385031215613f8857613f87614c0d565b5b6000613f9685828601613dd9565b9250506020613fa785828601613e59565b9150509250929050565b60008060408385031215613fc857613fc7614c0d565b5b6000613fd685828601613dd9565b9250506020613fe785828601613e9c565b9150509250929050565b6000806020838503121561400857614007614c0d565b5b600083013567ffffffffffffffff81111561402657614025614c08565b5b61403285828601613dee565b92509250509250929050565b60006020828403121561405457614053614c0d565b5b600061406284828501613e44565b91505092915050565b60006020828403121561408157614080614c0d565b5b600082013567ffffffffffffffff81111561409f5761409e614c08565b5b6140ab84828501613e6e565b91505092915050565b600080604083850312156140cb576140ca614c0d565b5b60006140d985828601613e9c565b92505060206140ea85828601613e9c565b9150509250929050565b6140fd816149bc565b82525050565b61410c816149ce565b82525050565b600061411d8261488b565b6141278185614896565b9350614137818560208601614a2a565b61414081614c12565b840191505092915050565b6000614158602483614896565b915061416382614c23565b604082019050919050565b600061417b601d83614896565b915061418682614c72565b602082019050919050565b600061419e602883614896565b91506141a982614c9b565b604082019050919050565b60006141c1602683614896565b91506141cc82614cea565b604082019050919050565b60006141e4602783614896565b91506141ef82614d39565b604082019050919050565b6000614207601a83614896565b915061421282614d88565b602082019050919050565b600061422a602983614896565b915061423582614db1565b604082019050919050565b600061424d601b83614896565b915061425882614e00565b602082019050919050565b6000614270601383614896565b915061427b82614e29565b602082019050919050565b6000614293601483614896565b915061429e82614e52565b602082019050919050565b60006142b6601c83614896565b91506142c182614e7b565b602082019050919050565b60006142d9602683614896565b91506142e482614ea4565b604082019050919050565b60006142fc601983614896565b915061430782614ef3565b602082019050919050565b600061431f602183614896565b915061432a82614f1c565b604082019050919050565b6000614342602083614896565b915061434d82614f6b565b602082019050919050565b6000614365601983614896565b915061437082614f94565b602082019050919050565b6000614388601e83614896565b915061439382614fbd565b602082019050919050565b60006143ab601e83614896565b91506143b682614fe6565b602082019050919050565b60006143ce602883614896565b91506143d98261500f565b604082019050919050565b60006143f1602583614896565b91506143fc8261505e565b604082019050919050565b6000614414602683614896565b915061441f826150ad565b604082019050919050565b6000614437602383614896565b9150614442826150fc565b604082019050919050565b61445681614a04565b82525050565b61446581614a0e565b82525050565b600060208201905061448060008301846140f4565b92915050565b600060808201905061449b60008301876140f4565b6144a860208301866140f4565b6144b560408301856140f4565b6144c2606083018461444d565b95945050505050565b60006060820190506144e060008301866140f4565b6144ed60208301856140f4565b6144fa604083018461444d565b949350505050565b60006020820190506145176000830184614103565b92915050565b600060208201905081810360008301526145378184614112565b905092915050565b600060208201905081810360008301526145588161414b565b9050919050565b600060208201905081810360008301526145788161416e565b9050919050565b6000602082019050818103600083015261459881614191565b9050919050565b600060208201905081810360008301526145b8816141b4565b9050919050565b600060208201905081810360008301526145d8816141d7565b9050919050565b600060208201905081810360008301526145f8816141fa565b9050919050565b600060208201905081810360008301526146188161421d565b9050919050565b6000602082019050818103600083015261463881614240565b9050919050565b6000602082019050818103600083015261465881614263565b9050919050565b6000602082019050818103600083015261467881614286565b9050919050565b60006020820190508181036000830152614698816142a9565b9050919050565b600060208201905081810360008301526146b8816142cc565b9050919050565b600060208201905081810360008301526146d8816142ef565b9050919050565b600060208201905081810360008301526146f881614312565b9050919050565b6000602082019050818103600083015261471881614335565b9050919050565b6000602082019050818103600083015261473881614358565b9050919050565b600060208201905081810360008301526147588161437b565b9050919050565b600060208201905081810360008301526147788161439e565b9050919050565b60006020820190508181036000830152614798816143c1565b9050919050565b600060208201905081810360008301526147b8816143e4565b9050919050565b600060208201905081810360008301526147d881614407565b9050919050565b600060208201905081810360008301526147f88161442a565b9050919050565b6000602082019050614814600083018461444d565b92915050565b600060208201905061482f600083018461445c565b92915050565b600061483f614850565b905061484b8282614a8f565b919050565b6000604051905090565b600067ffffffffffffffff82111561487557614874614bc5565b5b61487e82614c12565b9050602081019050919050565b600081519050919050565b600082825260208201905092915050565b60006148b282614a04565b91506148bd83614a04565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156148f2576148f1614b09565b5b828201905092915050565b600061490882614a04565b915061491383614a04565b92508261492357614922614b38565b5b828204905092915050565b600061493982614a04565b915061494483614a04565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561497d5761497c614b09565b5b828202905092915050565b600061499382614a04565b915061499e83614a04565b9250828210156149b1576149b0614b09565b5b828203905092915050565b60006149c7826149e4565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b83811015614a48578082015181840152602081019050614a2d565b83811115614a57576000848401525b50505050565b60006002820490506001821680614a7557607f821691505b60208210811415614a8957614a88614b67565b5b50919050565b614a9882614c12565b810181811067ffffffffffffffff82111715614ab757614ab6614bc5565b5b80604052505050565b6000614acb82614a04565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614afe57614afd614b09565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4c45524332303a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4c45524332303a2054696d65206c6f636b20696e2070726f6772657373000000600082015250565b7f416464726573733a206973206e6f7420636f6e7472616374206f72206e6f742060008201527f6465706c6f796564000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4c45524332303a207472616e7366657220616d6f756e7420657863656564732060008201527f62616c616e636500000000000000000000000000000000000000000000000000602082015250565b7f416464726573733a2073686f756c6420626520616c6c6f776564000000000000600082015250565b7f4c45524332303a207472616e7366657220616d6f756e7420657863656564732060008201527f616c6c6f77616e63650000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f4c45524332303a20496e76616c6964206b657900000000000000000000000000600082015250565b7f496e73756666696369656e742062616c616e6365000000000000000000000000600082015250565b7f4c45524332303a205475726e4f6666206e6f742070726f706f73656400000000600082015250565b7f4c45524332303a207472616e736665722066726f6d20746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4c45524332303a204d7573742062652063616e64697461746500000000000000600082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4665653a2076616c7565206578636565646564206c696d697400000000000000600082015250565b7f4c45524332303a204d757374206265207265636f766572792061646d696e0000600082015250565b7f4c45524332303a204f6e6c79206c6f73736c65737320636f6e74726163740000600082015250565b7f4c45524332303a2043616e6e6f74206368616e6765206e6f6e207a65726f206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b7f4c45524332303a20617070726f76652066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f4c45524332303a2064656372656173656420616c6c6f77616e63652062656c6f60008201527f77207a65726f0000000000000000000000000000000000000000000000000000602082015250565b7f4c45524332303a20617070726f766520746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b615154816149bc565b811461515f57600080fd5b50565b61516b816149ce565b811461517657600080fd5b50565b615182816149da565b811461518d57600080fd5b50565b61519981614a04565b81146151a457600080fd5b5056fea2646970667358221220040a4bc43f32164f30ea4de06de908ca57db07617c79a30ebeea3bbc5cbc855e64736f6c634300080700330000000000000000000000000000000000000000004e950851be0c2ebf00000000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000160000000000000000000000000854caf3214906c02e61748bcfe7f1208f8993a02000000000000000000000000854caf3214906c02e61748bcfe7f1208f8993a020000000000000000000000000000000000000000000000000000000000014ff000000000000000000000000066622e2c1b991983e88132da19b2c31f7100903500000000000000000000000097b44f5cfa48b5a5a0c11120934f56db213f7ae50000000000000000000000002643a63e1044305bf9c62f433feb4cd2bc7fd66d000000000000000000000000000000000000000000000000000000000000000d5245564f4c56455f47414d45530000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035250470000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102f15760003560e01c8063715018a61161019d578063a99bc409116100e9578063d6e242b8116100a2578063efab831c1161007c578063efab831c14610920578063f2fde38b1461093e578063f851a4401461095a578063fe62150514610978576102f1565b8063d6e242b8146108c8578063dd62ed3e146108d2578063e319a3d914610902576102f1565b8063a99bc4091461082c578063acb3f63714610848578063ae85028114610866578063b38fe95714610884578063b5c228771461088e578063ccfa214f146108aa576102f1565b806395d89b4111610156578063a17c36d411610130578063a17c36d41461077e578063a457c2d7146107ae578063a771ebc7146107de578063a9059cbb146107fc576102f1565b806395d89b41146107145780639800fc16146107325780639f1b53b714610762576102f1565b8063715018a61461067c5780637f51bb1f146106865780638d49ad75146106a25780638da5cb5b146106be57806393310ffe146106dc578063936af911146106f8576102f1565b80632baa3c9e1161025c5780635b8a194a11610215578063636fc28b116101ef578063636fc28b146105e05780636b094113146105fe5780636e9960c31461062e57806370a082311461064c576102f1565b80635b8a194a1461059a5780635f6529a3146105a457806361086b00146105c2576102f1565b80632baa3c9e146104b25780632c56462f146104ce5780632ecaf675146104fe578063313ce5671461051c578063395093511461053a57806351e0e26b1461056a576102f1565b806318160ddd116102ae57806318160ddd146103de5780631e5e7e85146103fc57806323b872dd1461042c5780632740c1971461045c578063275822431461047857806328f0b25714610494576102f1565b806301f59d16146102f657806306fdde0314610314578063095ea7b3146103325780630a3a77d514610362578063158b417214610392578063179fc75d146103ae575b600080fd5b6102fe610994565b60405161030b91906147ff565b60405180910390f35b61031c61099a565b604051610329919061451d565b60405180910390f35b61034c60048036038101906103479190613fb1565b610a2c565b6040516103599190614502565b60405180910390f35b61037c60048036038101906103779190613eb1565b610d51565b6040516103899190614502565b60405180910390f35b6103ac60048036038101906103a7919061403e565b610d71565b005b6103c860048036038101906103c39190613fb1565b610e0a565b6040516103d591906147ff565b60405180910390f35b6103e6610ebb565b6040516103f391906147ff565b60405180910390f35b61041660048036038101906104119190613f1e565b610ec5565b6040516104239190614502565b60405180910390f35b61044660048036038101906104419190613f1e565b610f72565b6040516104539190614502565b60405180910390f35b610476600480360381019061047191906140b4565b61123c565b005b610492600480360381019061048d9190613eb1565b6112c6565b005b61049c61139d565b6040516104a991906147ff565b60405180910390f35b6104cc60048036038101906104c79190613eb1565b6113a3565b005b6104e860048036038101906104e39190613eb1565b6114fa565b6040516104f59190614502565b60405180910390f35b610506611637565b60405161051391906147ff565b60405180910390f35b61052461163d565b604051610531919061481a565b60405180910390f35b610554600480360381019061054f9190613fb1565b611646565b6040516105619190614502565b60405180910390f35b610584600480360381019061057f9190613eb1565b6118e5565b6040516105919190614502565b60405180910390f35b6105a2611905565b005b6105ac611a00565b6040516105b9919061446b565b60405180910390f35b6105ca611a26565b6040516105d791906147ff565b60405180910390f35b6105e8611a2c565b6040516105f5919061446b565b60405180910390f35b61061860048036038101906106139190613eb1565b611a52565b6040516106259190614502565b60405180910390f35b610636611a72565b604051610643919061446b565b60405180910390f35b61066660048036038101906106619190613eb1565b611a9c565b60405161067391906147ff565b60405180910390f35b610684611ae5565b005b6106a0600480360381019061069b9190613eb1565b611b6d565b005b6106bc60048036038101906106b79190613eb1565b611bf5565b005b6106c6611ccc565b6040516106d3919061446b565b60405180910390f35b6106f660048036038101906106f19190613f71565b611cf5565b005b610712600480360381019061070d9190613ff1565b611e1b565b005b61071c611f5b565b604051610729919061451d565b60405180910390f35b61074c60048036038101906107479190613eb1565b611fed565b6040516107599190614502565b60405180910390f35b61077c60048036038101906107779190613eb1565b61212a565b005b61079860048036038101906107939190613fb1565b612201565b6040516107a59190614502565b60405180910390f35b6107c860048036038101906107c39190613fb1565b6122ac565b6040516107d59190614502565b60405180910390f35b6107e66125dd565b6040516107f39190614502565b60405180910390f35b61081660048036038101906108119190613fb1565b6125f0565b6040516108239190614502565b60405180910390f35b61084660048036038101906108419190613eb1565b6128b5565b005b61085061293d565b60405161085d91906147ff565b60405180910390f35b61086e612943565b60405161087b91906147ff565b60405180910390f35b61088c612949565b005b6108a860048036038101906108a3919061406b565b612ad8565b005b6108b2612cbe565b6040516108bf9190614502565b60405180910390f35b6108d0612cd1565b005b6108ec60048036038101906108e79190613ede565b612dd2565b6040516108f991906147ff565b60405180910390f35b61090a612e59565b604051610917919061446b565b60405180910390f35b610928612e7f565b6040516109359190614502565b60405180910390f35b61095860048036038101906109539190613eb1565b612e92565b005b610962612f8a565b60405161096f919061446b565b60405180910390f35b610992600480360381019061098d9190613eb1565b612fb0565b005b6105dc81565b6060600480546109a990614a5d565b80601f01602080910402602001604051908101604052809291908181526020018280546109d590614a5d565b8015610a225780601f106109f757610100808354040283529160200191610a22565b820191906000526020600020905b815481529060010190602001808311610a0557829003601f168201915b5050505050905090565b60008282600c60019054906101000a900460ff1615610c6157600c60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166347abf3be610a8b613087565b84846040518463ffffffff1660e01b8152600401610aab939291906144cb565b600060405180830381600087803b158015610ac557600080fd5b505af1158015610ad9573d6000803e3d6000fd5b505050506000841480610b6f5750600060026000610af5613087565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054145b610bae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba59061477f565b60405180910390fd5b610bc0610bb9613087565b868661308f565b60019250600c60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663900f66ef610c0a613087565b84846040518463ffffffff1660e01b8152600401610c2a939291906144cb565b600060405180830381600087803b158015610c4457600080fd5b505af1158015610c58573d6000803e3d6000fd5b50505050610d49565b6000841480610cf35750600060026000610c79613087565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054145b610d32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d299061477f565b60405180910390fd5b610d44610d3d613087565b868661308f565b600192505b505092915050565b600f6020528060005260406000206000915054906101000a900460ff1681565b610d79613087565b73ffffffffffffffffffffffffffffffffffffffff16610d97611ccc565b73ffffffffffffffffffffffffffffffffffffffff1614610ded576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de4906146ff565b60405180910390fd5b80601460006101000a81548160ff02191690831515021790555050565b6000600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610eb157610eac610e9d612710610e8f610e8060135460125461325a90919063ffffffff16565b866132b890919063ffffffff16565b61333390919063ffffffff16565b8361337d90919063ffffffff16565b610eb3565b815b905092915050565b6000600354905090565b6000601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610f53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4a906145df565b60405180910390fd5b610f5e8484846133c7565b610f6757600080fd5b600190509392505050565b6000610f933373ffffffffffffffffffffffffffffffffffffffff16613715565b8015610fe85750601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b8061100f575061100d3373ffffffffffffffffffffffffffffffffffffffff16613715565b155b61104e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611045906145df565b60405180910390fd5b600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806110b35750601460009054906101000a900460ff16155b156110d1576110c38484846133c7565b6110cc57600080fd5b611231565b816110db85611a9c565b101561111c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111139061465f565b60405180910390fd5b60008061114861271061113a601254876132b890919063ffffffff16565b61333390919063ffffffff16565b915061115d828561337d90919063ffffffff16565b9050600060135411156111e4576000611195612710611187601354886132b890919063ffffffff16565b61333390919063ffffffff16565b90506111aa818361337d90919063ffffffff16565b91506111d987600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836133c7565b6111e257600080fd5b505b6111ef8686836133c7565b6111f857600080fd5b61122586600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846133c7565b61122e57600080fd5b50505b600190509392505050565b611244613087565b73ffffffffffffffffffffffffffffffffffffffff16611262611ccc565b73ffffffffffffffffffffffffffffffffffffffff16146112b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112af906146ff565b60405180910390fd5b6112c28282613728565b5050565b6112ce613087565b73ffffffffffffffffffffffffffffffffffffffff166112ec611ccc565b73ffffffffffffffffffffffffffffffffffffffff1614611342576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611339906146ff565b60405180910390fd5b6000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60135481565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166113e4613087565b73ffffffffffffffffffffffffffffffffffffffff161461143a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114319061473f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f60405160405180910390a380600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000611504613087565b73ffffffffffffffffffffffffffffffffffffffff16611522611ccc565b73ffffffffffffffffffffffffffffffffffffffff1614611578576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156f906146ff565b60405180910390fd5b6115978273ffffffffffffffffffffffffffffffffffffffff16613715565b6115d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115cd9061457f565b60405180910390fd5b6001601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060019050919050565b600a5481565b60006012905090565b60008282600c60019054906101000a900460ff161561183857600c60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cf5961bb6116a5613087565b84846040518463ffffffff1660e01b81526004016116c5939291906144cb565b600060405180830381600087803b1580156116df57600080fd5b505af11580156116f3573d6000803e3d6000fd5b50505050611797611702613087565b868660026000611710613087565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461179291906148a7565b61308f565b60019250600c60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166334d01aa86117e1613087565b84846040518463ffffffff1660e01b8152600401611801939291906144cb565b600060405180830381600087803b15801561181b57600080fd5b505af115801561182f573d6000803e3d6000fd5b505050506118dd565b6118d8611843613087565b868660026000611851613087565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546118d391906148a7565b61308f565b600192505b505092915050565b60116020528060005260406000206000915054906101000a900460ff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611946613087565b73ffffffffffffffffffffffffffffffffffffffff161461199c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119939061473f565b60405180910390fd5b6000600c60006101000a81548160ff0219169083151502179055506001600c60016101000a81548160ff0219169083151502179055507fa4a40bdd0a809720a61b44f1b3497ce7dad87741a0ba3b961c2e65e645060e7060405160405180910390a1565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b5481565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60106020528060005260406000206000915054906101000a900460ff1681565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611aed613087565b73ffffffffffffffffffffffffffffffffffffffff16611b0b611ccc565b73ffffffffffffffffffffffffffffffffffffffff1614611b61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b58906146ff565b60405180910390fd5b611b6b600061378a565b565b611b75613087565b73ffffffffffffffffffffffffffffffffffffffff16611b93611ccc565b73ffffffffffffffffffffffffffffffffffffffff1614611be9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be0906146ff565b60405180910390fd5b611bf28161384e565b50565b611bfd613087565b73ffffffffffffffffffffffffffffffffffffffff16611c1b611ccc565b73ffffffffffffffffffffffffffffffffffffffff1614611c71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c68906146ff565b60405180910390fd5b6001600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611d36613087565b73ffffffffffffffffffffffffffffffffffffffff1614611d8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d839061473f565b60405180910390fd5b81600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550806008819055508173ffffffffffffffffffffffffffffffffffffffff167fc5666bfdfb79a4b0b4abdbc565d6e9937a263233b2b378c55132d34dc5784a3660405160405180910390a25050565b600c60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611e5c613087565b73ffffffffffffffffffffffffffffffffffffffff1614611eb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea99061475f565b60405180910390fd5b60005b82829050811015611f5657611f43838383818110611ed657611ed5614b96565b5b9050602002016020810190611eeb9190613eb1565b600c60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611f3e868686818110611f2457611f23614b96565b5b9050602002016020810190611f399190613eb1565b611a9c565b613892565b8080611f4e90614ac0565b915050611eb5565b505050565b606060058054611f6a90614a5d565b80601f0160208091040260200160405190810160405280929190818152602001828054611f9690614a5d565b8015611fe35780601f10611fb857610100808354040283529160200191611fe3565b820191906000526020600020905b815481529060010190602001808311611fc657829003601f168201915b5050505050905090565b6000611ff7613087565b73ffffffffffffffffffffffffffffffffffffffff16612015611ccc565b73ffffffffffffffffffffffffffffffffffffffff161461206b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612062906146ff565b60405180910390fd5b61208a8273ffffffffffffffffffffffffffffffffffffffff16613715565b6120c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c09061457f565b60405180910390fd5b6000601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060019050919050565b612132613087565b73ffffffffffffffffffffffffffffffffffffffff16612150611ccc565b73ffffffffffffffffffffffffffffffffffffffff16146121a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219d906146ff565b60405180910390fd5b6000601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661228f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612286906145df565b60405180910390fd5b6122998383613b09565b6122a257600080fd5b6001905092915050565b60008282600c60019054906101000a900460ff16156124e757600c60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663568c75a961230b613087565b84846040518463ffffffff1660e01b815260040161232b939291906144cb565b600060405180830381600087803b15801561234557600080fd5b505af1158015612359573d6000803e3d6000fd5b5050505060006002600061236b613087565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905084811015612428576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241f906147bf565b60405180910390fd5b612445612433613087565b8787846124409190614988565b61308f565b6001935050600c60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ded1f4d0612490613087565b84846040518463ffffffff1660e01b81526004016124b0939291906144cb565b600060405180830381600087803b1580156124ca57600080fd5b505af11580156124de573d6000803e3d6000fd5b505050506125d5565b6000600260006124f5613087565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050848110156125b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a9906147bf565b60405180910390fd5b6125cf6125bd613087565b8787846125ca9190614988565b61308f565b60019350505b505092915050565b601460009054906101000a900460ff1681565b60006126113373ffffffffffffffffffffffffffffffffffffffff16613715565b80156126665750601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b8061268d575061268b3373ffffffffffffffffffffffffffffffffffffffff16613715565b155b6126cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c3906145df565b60405180910390fd5b600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806127315750601460009054906101000a900460ff16155b1561274e576127408383613b09565b61274957600080fd5b6128ab565b8161275833611a9c565b1015612799576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127909061465f565b60405180910390fd5b6000806127c56127106127b7601254876132b890919063ffffffff16565b61333390919063ffffffff16565b91506127da828561337d90919063ffffffff16565b905060006013541115612860576000612812612710612804601354886132b890919063ffffffff16565b61333390919063ffffffff16565b9050612827818361337d90919063ffffffff16565b9150612855600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682613b09565b61285e57600080fd5b505b61286a8582613b09565b61287357600080fd5b61289f600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683613b09565b6128a857600080fd5b50505b6001905092915050565b6128bd613087565b73ffffffffffffffffffffffffffffffffffffffff166128db611ccc565b73ffffffffffffffffffffffffffffffffffffffff1614612931576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612928906146ff565b60405180910390fd5b61293a81613c8c565b50565b61271081565b60125481565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661298a613087565b73ffffffffffffffffffffffffffffffffffffffff16146129e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129d79061473f565b60405180910390fd5b600c60009054906101000a900460ff16612a2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a269061467f565b60405180910390fd5b42600b541115612a74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6b9061455f565b60405180910390fd5b6000600c60016101000a81548160ff0219169083151502179055506000600c60006101000a81548160ff0219169083151502179055507f5b534e2716e5ad68b9f67521378f8199a7ceb9d3f6f354275dad33fe42cf710a60405160405180910390a1565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612b19613087565b73ffffffffffffffffffffffffffffffffffffffff1614612b6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b66906146bf565b60405180910390fd5b600854818051906020012014612bba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bb19061463f565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f1c7f382531621f02aefb4212478bba8871ffad078202bdbba87f3e21d639aebb60405160405180910390a3600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600c60019054906101000a900460ff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612d12613087565b73ffffffffffffffffffffffffffffffffffffffff1614612d68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d5f9061473f565b60405180910390fd5b600a5442612d7691906148a7565b600b819055506001600c60006101000a81548160ff0219169083151502179055507f88e0be0448355c71674462d3cb36342f0d085f7b43a1deab03052c95eb158709600b54604051612dc891906147ff565b60405180910390a1565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c60009054906101000a900460ff1681565b612e9a613087565b73ffffffffffffffffffffffffffffffffffffffff16612eb8611ccc565b73ffffffffffffffffffffffffffffffffffffffff1614612f0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f05906146ff565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612f7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f759061459f565b60405180910390fd5b612f878161378a565b50565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612fb8613087565b73ffffffffffffffffffffffffffffffffffffffff16612fd6611ccc565b73ffffffffffffffffffffffffffffffffffffffff161461302c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613023906146ff565b60405180910390fd5b6001601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156130ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130f69061479f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561316f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613166906147df565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161324d91906147ff565b60405180910390a3505050565b600080828461326991906148a7565b9050838110156132ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132a59061461f565b60405180910390fd5b8091505092915050565b6000808314156132cb576000905061332d565b600082846132d9919061492e565b90508284826132e891906148fd565b14613328576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161331f906146df565b60405180910390fd5b809150505b92915050565b600061337583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613cd0565b905092915050565b60006133bf83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613d33565b905092915050565b6000838383600c60019054906101000a900460ff161561361257600c60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663379f5c69613427613087565b8585856040518563ffffffff1660e01b81526004016134499493929190614486565b600060405180830381600087803b15801561346357600080fd5b505af1158015613477573d6000803e3d6000fd5b50505050613486878787613892565b6000600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006134d1613087565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905085811015613551576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613548906145ff565b60405180910390fd5b61356e8861355d613087565b88846135699190614988565b61308f565b6001945050600c60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a56e8adf6135b9613087565b8585856040518563ffffffff1660e01b81526004016135db9493929190614486565b600060405180830381600087803b1580156135f557600080fd5b505af1158015613609573d6000803e3d6000fd5b5050505061370b565b61361d878787613892565b6000600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000613668613087565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050858110156136e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136df906145ff565b60405180910390fd5b613705886136f4613087565b88846137009190614988565b61308f565b60019450505b5050509392505050565b600080823b905060008111915050919050565b6105dc818361373791906148a7565b1115613778576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161376f9061471f565b60405180910390fd5b81601281905550806013819055505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613902576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138f99061469f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613972576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139699061453f565b60405180910390fd5b6000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156139f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139f0906145bf565b60405180910390fd5b8181613a059190614988565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613a9791906148a7565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613afb91906147ff565b60405180910390a350505050565b60008282600c60019054906101000a900460ff1615613c6d57600c60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631ffb811f613b68613087565b84846040518463ffffffff1660e01b8152600401613b88939291906144cb565b600060405180830381600087803b158015613ba257600080fd5b505af1158015613bb6573d6000803e3d6000fd5b50505050613bcc613bc5613087565b8686613892565b60019250600c60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f49062ca613c16613087565b84846040518463ffffffff1660e01b8152600401613c36939291906144cb565b600060405180830381600087803b158015613c5057600080fd5b505af1158015613c64573d6000803e3d6000fd5b50505050613c84565b613c7f613c78613087565b8686613892565b600192505b505092915050565b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008083118290613d17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d0e919061451d565b60405180910390fd5b5060008385613d2691906148fd565b9050809150509392505050565b6000838311158290613d7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d72919061451d565b60405180910390fd5b5060008385613d8a9190614988565b9050809150509392505050565b6000613daa613da58461485a565b614835565b905082815260208101848484011115613dc657613dc5614c03565b5b613dd1848285614a1b565b509392505050565b600081359050613de88161514b565b92915050565b60008083601f840112613e0457613e03614bf9565b5b8235905067ffffffffffffffff811115613e2157613e20614bf4565b5b602083019150836020820283011115613e3d57613e3c614bfe565b5b9250929050565b600081359050613e5381615162565b92915050565b600081359050613e6881615179565b92915050565b600082601f830112613e8357613e82614bf9565b5b8135613e93848260208601613d97565b91505092915050565b600081359050613eab81615190565b92915050565b600060208284031215613ec757613ec6614c0d565b5b6000613ed584828501613dd9565b91505092915050565b60008060408385031215613ef557613ef4614c0d565b5b6000613f0385828601613dd9565b9250506020613f1485828601613dd9565b9150509250929050565b600080600060608486031215613f3757613f36614c0d565b5b6000613f4586828701613dd9565b9350506020613f5686828701613dd9565b9250506040613f6786828701613e9c565b9150509250925092565b60008060408385031215613f8857613f87614c0d565b5b6000613f9685828601613dd9565b9250506020613fa785828601613e59565b9150509250929050565b60008060408385031215613fc857613fc7614c0d565b5b6000613fd685828601613dd9565b9250506020613fe785828601613e9c565b9150509250929050565b6000806020838503121561400857614007614c0d565b5b600083013567ffffffffffffffff81111561402657614025614c08565b5b61403285828601613dee565b92509250509250929050565b60006020828403121561405457614053614c0d565b5b600061406284828501613e44565b91505092915050565b60006020828403121561408157614080614c0d565b5b600082013567ffffffffffffffff81111561409f5761409e614c08565b5b6140ab84828501613e6e565b91505092915050565b600080604083850312156140cb576140ca614c0d565b5b60006140d985828601613e9c565b92505060206140ea85828601613e9c565b9150509250929050565b6140fd816149bc565b82525050565b61410c816149ce565b82525050565b600061411d8261488b565b6141278185614896565b9350614137818560208601614a2a565b61414081614c12565b840191505092915050565b6000614158602483614896565b915061416382614c23565b604082019050919050565b600061417b601d83614896565b915061418682614c72565b602082019050919050565b600061419e602883614896565b91506141a982614c9b565b604082019050919050565b60006141c1602683614896565b91506141cc82614cea565b604082019050919050565b60006141e4602783614896565b91506141ef82614d39565b604082019050919050565b6000614207601a83614896565b915061421282614d88565b602082019050919050565b600061422a602983614896565b915061423582614db1565b604082019050919050565b600061424d601b83614896565b915061425882614e00565b602082019050919050565b6000614270601383614896565b915061427b82614e29565b602082019050919050565b6000614293601483614896565b915061429e82614e52565b602082019050919050565b60006142b6601c83614896565b91506142c182614e7b565b602082019050919050565b60006142d9602683614896565b91506142e482614ea4565b604082019050919050565b60006142fc601983614896565b915061430782614ef3565b602082019050919050565b600061431f602183614896565b915061432a82614f1c565b604082019050919050565b6000614342602083614896565b915061434d82614f6b565b602082019050919050565b6000614365601983614896565b915061437082614f94565b602082019050919050565b6000614388601e83614896565b915061439382614fbd565b602082019050919050565b60006143ab601e83614896565b91506143b682614fe6565b602082019050919050565b60006143ce602883614896565b91506143d98261500f565b604082019050919050565b60006143f1602583614896565b91506143fc8261505e565b604082019050919050565b6000614414602683614896565b915061441f826150ad565b604082019050919050565b6000614437602383614896565b9150614442826150fc565b604082019050919050565b61445681614a04565b82525050565b61446581614a0e565b82525050565b600060208201905061448060008301846140f4565b92915050565b600060808201905061449b60008301876140f4565b6144a860208301866140f4565b6144b560408301856140f4565b6144c2606083018461444d565b95945050505050565b60006060820190506144e060008301866140f4565b6144ed60208301856140f4565b6144fa604083018461444d565b949350505050565b60006020820190506145176000830184614103565b92915050565b600060208201905081810360008301526145378184614112565b905092915050565b600060208201905081810360008301526145588161414b565b9050919050565b600060208201905081810360008301526145788161416e565b9050919050565b6000602082019050818103600083015261459881614191565b9050919050565b600060208201905081810360008301526145b8816141b4565b9050919050565b600060208201905081810360008301526145d8816141d7565b9050919050565b600060208201905081810360008301526145f8816141fa565b9050919050565b600060208201905081810360008301526146188161421d565b9050919050565b6000602082019050818103600083015261463881614240565b9050919050565b6000602082019050818103600083015261465881614263565b9050919050565b6000602082019050818103600083015261467881614286565b9050919050565b60006020820190508181036000830152614698816142a9565b9050919050565b600060208201905081810360008301526146b8816142cc565b9050919050565b600060208201905081810360008301526146d8816142ef565b9050919050565b600060208201905081810360008301526146f881614312565b9050919050565b6000602082019050818103600083015261471881614335565b9050919050565b6000602082019050818103600083015261473881614358565b9050919050565b600060208201905081810360008301526147588161437b565b9050919050565b600060208201905081810360008301526147788161439e565b9050919050565b60006020820190508181036000830152614798816143c1565b9050919050565b600060208201905081810360008301526147b8816143e4565b9050919050565b600060208201905081810360008301526147d881614407565b9050919050565b600060208201905081810360008301526147f88161442a565b9050919050565b6000602082019050614814600083018461444d565b92915050565b600060208201905061482f600083018461445c565b92915050565b600061483f614850565b905061484b8282614a8f565b919050565b6000604051905090565b600067ffffffffffffffff82111561487557614874614bc5565b5b61487e82614c12565b9050602081019050919050565b600081519050919050565b600082825260208201905092915050565b60006148b282614a04565b91506148bd83614a04565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156148f2576148f1614b09565b5b828201905092915050565b600061490882614a04565b915061491383614a04565b92508261492357614922614b38565b5b828204905092915050565b600061493982614a04565b915061494483614a04565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561497d5761497c614b09565b5b828202905092915050565b600061499382614a04565b915061499e83614a04565b9250828210156149b1576149b0614b09565b5b828203905092915050565b60006149c7826149e4565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b83811015614a48578082015181840152602081019050614a2d565b83811115614a57576000848401525b50505050565b60006002820490506001821680614a7557607f821691505b60208210811415614a8957614a88614b67565b5b50919050565b614a9882614c12565b810181811067ffffffffffffffff82111715614ab757614ab6614bc5565b5b80604052505050565b6000614acb82614a04565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614afe57614afd614b09565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4c45524332303a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4c45524332303a2054696d65206c6f636b20696e2070726f6772657373000000600082015250565b7f416464726573733a206973206e6f7420636f6e7472616374206f72206e6f742060008201527f6465706c6f796564000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4c45524332303a207472616e7366657220616d6f756e7420657863656564732060008201527f62616c616e636500000000000000000000000000000000000000000000000000602082015250565b7f416464726573733a2073686f756c6420626520616c6c6f776564000000000000600082015250565b7f4c45524332303a207472616e7366657220616d6f756e7420657863656564732060008201527f616c6c6f77616e63650000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f4c45524332303a20496e76616c6964206b657900000000000000000000000000600082015250565b7f496e73756666696369656e742062616c616e6365000000000000000000000000600082015250565b7f4c45524332303a205475726e4f6666206e6f742070726f706f73656400000000600082015250565b7f4c45524332303a207472616e736665722066726f6d20746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4c45524332303a204d7573742062652063616e64697461746500000000000000600082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4665653a2076616c7565206578636565646564206c696d697400000000000000600082015250565b7f4c45524332303a204d757374206265207265636f766572792061646d696e0000600082015250565b7f4c45524332303a204f6e6c79206c6f73736c65737320636f6e74726163740000600082015250565b7f4c45524332303a2043616e6e6f74206368616e6765206e6f6e207a65726f206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b7f4c45524332303a20617070726f76652066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f4c45524332303a2064656372656173656420616c6c6f77616e63652062656c6f60008201527f77207a65726f0000000000000000000000000000000000000000000000000000602082015250565b7f4c45524332303a20617070726f766520746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b615154816149bc565b811461515f57600080fd5b50565b61516b816149ce565b811461517657600080fd5b50565b615182816149da565b811461518d57600080fd5b50565b61519981614a04565b81146151a457600080fd5b5056fea2646970667358221220040a4bc43f32164f30ea4de06de908ca57db07617c79a30ebeea3bbc5cbc855e64736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000004e950851be0c2ebf00000000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000160000000000000000000000000854caf3214906c02e61748bcfe7f1208f8993a02000000000000000000000000854caf3214906c02e61748bcfe7f1208f8993a020000000000000000000000000000000000000000000000000000000000014ff000000000000000000000000066622e2c1b991983e88132da19b2c31f7100903500000000000000000000000097b44f5cfa48b5a5a0c11120934f56db213f7ae50000000000000000000000002643a63e1044305bf9c62f433feb4cd2bc7fd66d000000000000000000000000000000000000000000000000000000000000000d5245564f4c56455f47414d45530000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035250470000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : totalSupply_ (uint256): 95000000000000000000000000
Arg [1] : name_ (string): REVOLVE_GAMES
Arg [2] : symbol_ (string): RPG
Arg [3] : admin_ (address): 0x854Caf3214906C02E61748BcFE7f1208f8993A02
Arg [4] : recoveryAdmin_ (address): 0x854Caf3214906C02E61748BcFE7f1208f8993A02
Arg [5] : timelockPeriod_ (uint256): 86000
Arg [6] : lossless_ (address): 0x66622e2C1b991983e88132da19b2C31f71009035
Arg [7] : stakingPool (address): 0x97b44F5cfa48B5A5a0C11120934f56Db213f7AE5
Arg [8] : treasuryPool (address): 0x2643a63e1044305BF9C62f433FEB4CD2Bc7FD66D
-----Encoded View---------------
13 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000004e950851be0c2ebf000000
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000120
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000160
Arg [3] : 000000000000000000000000854caf3214906c02e61748bcfe7f1208f8993a02
Arg [4] : 000000000000000000000000854caf3214906c02e61748bcfe7f1208f8993a02
Arg [5] : 0000000000000000000000000000000000000000000000000000000000014ff0
Arg [6] : 00000000000000000000000066622e2c1b991983e88132da19b2c31f71009035
Arg [7] : 00000000000000000000000097b44f5cfa48b5a5a0c11120934f56db213f7ae5
Arg [8] : 0000000000000000000000002643a63e1044305bf9c62f433feb4cd2bc7fd66d
Arg [9] : 000000000000000000000000000000000000000000000000000000000000000d
Arg [10] : 5245564f4c56455f47414d455300000000000000000000000000000000000000
Arg [11] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [12] : 5250470000000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
98:5576:5:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;470:37;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6881:89:4;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7770:314;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;246:44:5;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2064:87;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2764:220;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7163:106:4;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5096:206:5;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3923:987;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2157:109;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1713:113;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;437:27;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5309:146:4;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2272:238:5;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2155:29:4;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7075:82;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8554:254;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;350:48:5;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6675:170:4;;;:::i;:::-;;2009:28;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2190:39;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;189:20:5;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;296:48;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4922:81:4;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7275:125;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1597:92:6;;;:::i;:::-;;1492:100:5;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1598:109;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;965:85:6;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5461:245:4;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5009:294;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6976:93;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2516:242:5;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1946:112;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4916:174;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8814:419:4;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;566:22:5;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2990:927;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1388:98;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;513:47;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;405:26;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6325:344:4;;;:::i;:::-;;5712:360;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2278:31;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6078:241;;;:::i;:::-;;7615:149;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;215:24:5;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2235:37:4;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1838:189:6;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2129:20:4;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1832:108:5;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;470:37;503:4;470:37;:::o;6881:89:4:-;6926:13;6958:5;6951:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6881:89;:::o;7770:314::-;7880:4;7854:7;7863:6;3238:12;;;;;;;;;;;3234:209;;;3266:8;;;;;;;;;;;:22;;;3289:12;:10;:12::i;:::-;3303:7;3312:6;3266:53;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7915:1:::1;7905:6;:11;7904:58;;;;7960:1;7922:11;:25;7934:12;:10;:12::i;:::-;7922:25;;;;;;;;;;;;;;;:34;7948:7;7922:34;;;;;;;;;;;;;;;;:39;7904:58;7896:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;8017:39;8026:12;:10;:12::i;:::-;8040:7;8049:6;8017:8;:39::i;:::-;8073:4;8066:11;;3348:8:::0;;;;;;;;;;;:21;;;3370:12;:10;:12::i;:::-;3384:7;3393:6;3348:52;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3234:209;;;7915:1:::1;7905:6;:11;7904:58;;;;7960:1;7922:11;:25;7934:12;:10;:12::i;:::-;7922:25;;;;;;;;;;;;;;;:34;7948:7;7922:34;;;;;;;;;;;;;;;;:39;7904:58;7896:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;8017:39;8026:12;:10;:12::i;:::-;8040:7;8049:6;8017:8;:39::i;:::-;8073:4;8066:11;;3234:209:::0;7770:314;;;;;;:::o;246:44:5:-;;;;;;;;;;;;;;;;;;;;;;:::o;2064:87::-;1188:12:6;:10;:12::i;:::-;1177:23;;:7;:5;:7::i;:::-;:23;;;1169:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2138:6:5::1;2125:10;;:19;;;;;;;;;;;;;;;;;;2064:87:::0;:::o;2764:220::-;2846:7;2871:12;:20;2884:6;2871:20;;;;;;;;;;;;;;;;;;;;;;;;;:106;;2903:74;2914:62;555:5;2914:41;2925:29;2941:12;;2925:11;;:15;;:29;;;;:::i;:::-;2914:6;:10;;:41;;;;:::i;:::-;:45;;:62;;;;:::i;:::-;2903:6;:10;;:74;;;;:::i;:::-;2871:106;;;2894:6;2871:106;2864:113;;2764:220;;;;:::o;7163:106:4:-;7224:7;7250:12;;7243:19;;7163:106;:::o;5096:206:5:-;5204:4;854:16;:28;871:10;854:28;;;;;;;;;;;;;;;;;;;;;;;;;846:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;5228:45:::1;5247:6;5255:9;5266:6;5228:18;:45::i;:::-;5220:54;;;::::0;::::1;;5291:4;5284:11;;5096:206:::0;;;;;:::o;3923:987::-;4042:4;645:32;653:10;645:30;;;:32::i;:::-;:64;;;;;681:16;:28;698:10;681:28;;;;;;;;;;;;;;;;;;;;;;;;;645:64;:101;;;;714:32;722:10;714:30;;;:32::i;:::-;713:33;645:101;637:152;;;;;;;;;;;;:::i;:::-;;;;;;;;;4062:12:::1;:20;4075:6;4062:20;;;;;;;;;;;;;;;;;;;;;;;;;:35;;;;4087:10;;;;;;;;;;;4086:11;4062:35;4058:825;;;4121:45;4140:6;4148:9;4159:6;4121:18;:45::i;:::-;4113:54;;;::::0;::::1;;4058:825;;;4227:6;4206:17;4216:6;4206:9;:17::i;:::-;:27;;4198:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;4272:17;4303:21:::0;4350:44:::1;555:5;4350:23;4361:11;;4350:6;:10;;:23;;;;:::i;:::-;:27;;:44;;;;:::i;:::-;4338:56;;4424:21;4435:9;4424:6;:10;;:21;;;;:::i;:::-;4408:37;;4478:1;4463:12;;:16;4459:272;;;4499:22;4524:45;555:5;4524:24;4535:12;;4524:6;:10;;:24;;;;:::i;:::-;:28;;:45;;;;:::i;:::-;4499:70;;4603:33;4621:14;4603:13;:17;;:33;;;;:::i;:::-;4587:49;;4662:53;4681:6;4689:9;;;;;;;;;;;4700:14;4662:18;:53::i;:::-;4654:62;;;::::0;::::1;;4481:250;4459:272;4752:52;4771:6;4779:9;4790:13;4752:18;:52::i;:::-;4744:61;;;::::0;::::1;;4827:44;4846:6;4854:5;;;;;;;;;;;4861:9;4827:18;:44::i;:::-;4819:53;;;::::0;::::1;;4184:699;;4058:825;4899:4;4892:11;;3923:987:::0;;;;;:::o;2157:109::-;1188:12:6;:10;:12::i;:::-;1177:23;;:7;:5;:7::i;:::-;:23;;;1169:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2236:23:5::1;2245:3;2250:8;2236;:23::i;:::-;2157:109:::0;;:::o;1713:113::-;1188:12:6;:10;:12::i;:::-;1177:23;;:7;:5;:7::i;:::-;:23;;;1169:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1814:5:5::1;1792:12;:19;1805:5;1792:19;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;1713:113:::0;:::o;437:27::-;;;;:::o;5309:146:4:-;4814:13;;;;;;;;;;;4798:29;;:12;:10;:12::i;:::-;:29;;;4790:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;5413:8:::1;5393:29;;5406:5;;;;;;;;;;;5393:29;;;;;;;;;;;;5440:8;5432:5;;:16;;;;;;;;;;;;;;;;;;5309:146:::0;:::o;2272:238:5:-;2347:4;1188:12:6;:10;:12::i;:::-;1177:23;;:7;:5;:7::i;:::-;:23;;;1169:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2371:22:5::1;:9;:20;;;:22::i;:::-;2363:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;2478:4;2448:16;:27;2465:9;2448:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;2499:4;2492:11;;2272:238:::0;;;:::o;2155:29:4:-;;;;:::o;7075:82::-;7124:5;7148:2;7141:9;;7075:82;:::o;8554:254::-;8684:4;8654:7;8663:10;4165:12;;;;;;;;;;;4161:237;;;4193:8;;;;;;;;;;;:32;;;4226:12;:10;:12::i;:::-;4240:7;4249:10;4193:67;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8700:80:::1;8709:12;:10;:12::i;:::-;8723:7;8769:10;8732:11;:25;8744:12;:10;:12::i;:::-;8732:25;;;;;;;;;;;;;;;:34;8758:7;8732:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;8700:8;:80::i;:::-;8797:4;8790:11;;4289:8:::0;;;;;;;;;;;:31;;;4321:12;:10;:12::i;:::-;4335:7;4344:10;4289:66;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4161:237;;;8700:80:::1;8709:12;:10;:12::i;:::-;8723:7;8769:10;8732:11;:25;8744:12;:10;:12::i;:::-;8732:25;;;;;;;;;;;;;;;:34;8758:7;8732:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;8700:8;:80::i;:::-;8797:4;8790:11;;4161:237:::0;8554:254;;;;;;:::o;350:48:5:-;;;;;;;;;;;;;;;;;;;;;;:::o;6675:170:4:-;4814:13;;;;;;;;;;;4798:29;;:12;:10;:12::i;:::-;:29;;;4790:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;6771:5:::1;6743:25;;:33;;;;;;;;;;;;;;;;;;6801:4;6786:12;;:19;;;;;;;;;;;;;;;;;;6820:18;;;;;;;;;;6675:170::o:0;2009:28::-;;;;;;;;;;;;;:::o;2190:39::-;;;;:::o;189:20:5:-;;;;;;;;;;;;;:::o;296:48::-;;;;;;;;;;;;;;;;;;;;;;:::o;4922:81:4:-;4965:7;4991:5;;;;;;;;;;;4984:12;;4922:81;:::o;7275:125::-;7349:7;7375:9;:18;7385:7;7375:18;;;;;;;;;;;;;;;;7368:25;;7275:125;;;:::o;1597:92:6:-;1188:12;:10;:12::i;:::-;1177:23;;:7;:5;:7::i;:::-;:23;;;1169:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1661:21:::1;1679:1;1661:9;:21::i;:::-;1597:92::o:0;1492:100:5:-;1188:12:6;:10;:12::i;:::-;1177:23;;:7;:5;:7::i;:::-;:23;;;1169:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1563:22:5::1;1576:8;1563:12;:22::i;:::-;1492:100:::0;:::o;1598:109::-;1188:12:6;:10;:12::i;:::-;1177:23;;:7;:5;:7::i;:::-;:23;;;1169:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1696:4:5::1;1674:12;:19;1687:5;1674:19;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;1598:109:::0;:::o;965:85:6:-;1011:7;1037:6;;;;;;;;;;;1030:13;;965:85;:::o;5461:245:4:-;4814:13;;;;;;;;;;;4798:29;;:12;:10;:12::i;:::-;:29;;;4790:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;5597:9:::1;5572:22;;:34;;;;;;;;;;;;;;;;;;5639:7;5616:20;:30;;;;5689:9;5661:38;;;;;;;;;;;;5461:245:::0;;:::o;5009:294::-;5122:8;;;;;;;;;;;5098:33;;:12;:10;:12::i;:::-;:33;;;5090:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;5181:6;5176:121;5197:4;;:11;;5193:1;:15;5176:121;;;5229:57;5239:4;;5244:1;5239:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;5256:8;;;;;;;;;;;5267:18;5277:4;;5282:1;5277:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;5267:9;:18::i;:::-;5229:9;:57::i;:::-;5210:3;;;;;:::i;:::-;;;;5176:121;;;;5009:294;;:::o;6976:93::-;7023:13;7055:7;7048:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6976:93;:::o;2516:242:5:-;2594:4;1188:12:6;:10;:12::i;:::-;1177:23;;:7;:5;:7::i;:::-;:23;;;1169:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2618:22:5::1;:9;:20;;;:22::i;:::-;2610:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;2725:5;2695:16;:27;2712:9;2695:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;2747:4;2740:11;;2516:242:::0;;;:::o;1946:112::-;1188:12:6;:10;:12::i;:::-;1177:23;;:7;:5;:7::i;:::-;:23;;;1169:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2046:5:5::1;2020:16;:23;2037:5;2020:23;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;1946:112:::0;:::o;4916:174::-;5004:4;854:16;:28;871:10;854:28;;;;;;;;;;;;;;;;;;;;;;;;;846:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;5028:33:::1;5043:9;5054:6;5028:14;:33::i;:::-;5020:42;;;::::0;::::1;;5079:4;5072:11;;4916:174:::0;;;;:::o;8814:419:4:-;8954:4;8919:7;8928:15;4496:12;;;;;;;;;;;4492:247;;;4524:8;;;;;;;;;;;:32;;;4557:12;:10;:12::i;:::-;4571:7;4580:15;4524:72;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8970:24:::1;8997:11;:25;9009:12;:10;:12::i;:::-;8997:25;;;;;;;;;;;;;;;:34;9023:7;8997:34;;;;;;;;;;;;;;;;8970:61;;9069:15;9049:16;:35;;9041:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;9137:67;9146:12;:10;:12::i;:::-;9160:7;9188:15;9169:16;:34;;;;:::i;:::-;9137:8;:67::i;:::-;9222:4;9215:11;;;4625:8:::0;;;;;;;;;;;:31;;;4657:12;:10;:12::i;:::-;4671:7;4680:15;4625:71;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4492:247;;;8970:24:::1;8997:11;:25;9009:12;:10;:12::i;:::-;8997:25;;;;;;;;;;;;;;;:34;9023:7;8997:34;;;;;;;;;;;;;;;;8970:61;;9069:15;9049:16;:35;;9041:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;9137:67;9146:12;:10;:12::i;:::-;9160:7;9188:15;9169:16;:34;;;;:::i;:::-;9137:8;:67::i;:::-;9222:4;9215:11;;;4492:247:::0;8814:419;;;;;;:::o;566:22:5:-;;;;;;;;;;;;;:::o;2990:927::-;3089:4;645:32;653:10;645:30;;;:32::i;:::-;:64;;;;;681:16;:28;698:10;681:28;;;;;;;;;;;;;;;;;;;;;;;;;645:64;:101;;;;714:32;722:10;714:30;;;:32::i;:::-;713:33;645:101;637:152;;;;;;;;;;;;:::i;:::-;;;;;;;;;3109:12:::1;:24;3122:10;3109:24;;;;;;;;;;;;;;;;;;;;;;;;;:39;;;;3138:10;;;;;;;;;;;3137:11;3109:39;3105:785;;;3172:33;3187:9;3198:6;3172:14;:33::i;:::-;3164:42;;;::::0;::::1;;3105:785;;;3270:6;3245:21;3255:10;3245:9;:21::i;:::-;:31;;3237:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;3315:17;3346:21:::0;3393:44:::1;555:5;3393:23;3404:11;;3393:6;:10;;:23;;;;:::i;:::-;:27;;:44;;;;:::i;:::-;3381:56;;3467:21;3478:9;3467:6;:10;;:21;;;;:::i;:::-;3451:37;;3521:1;3506:12;;:16;3502:260;;;3542:22;3567:45;555:5;3567:24;3578:12;;3567:6;:10;;:24;;;;:::i;:::-;:28;;:45;;;;:::i;:::-;3542:70;;3646:33;3664:14;3646:13;:17;;:33;;;;:::i;:::-;3630:49;;3705:41;3720:9;;;;;;;;;;;3731:14;3705;:41::i;:::-;3697:50;;;::::0;::::1;;3524:238;3502:260;3783:40;3798:9;3809:13;3783:14;:40::i;:::-;3775:49;;;::::0;::::1;;3846:32;3861:5;;;;;;;;;;;3868:9;3846:14;:32::i;:::-;3838:41;;;::::0;::::1;;3223:667;;3105:785;3906:4;3899:11;;2990:927:::0;;;;:::o;1388:98::-;1188:12:6;:10;:12::i;:::-;1177:23;;:7;:5;:7::i;:::-;:23;;;1169:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1458:21:5::1;1474:4;1458:15;:21::i;:::-;1388:98:::0;:::o;513:47::-;555:5;513:47;:::o;405:26::-;;;;:::o;6325:344:4:-;4814:13;;;;;;;;;;;4798:29;;:12;:10;:12::i;:::-;:29;;;4790:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;6402:25:::1;;;;;;;;;;;6394:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;6506:15;6478:24;;:43;;6470:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;6580:5;6565:12;;:20;;;;;;;;;;;;;;;;;;6623:5;6595:25;;:33;;;;;;;;;;;;;;;;;;6643:19;;;;;;;;;;6325:344::o:0;5712:360::-;5811:22;;;;;;;;;;;5795:38;;:12;:10;:12::i;:::-;:38;;;5787:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;5899:20;;5891:3;5881:14;;;;;;:38;5873:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;5994:22;;;;;;;;;;;5958:59;;5979:13;;;;;;;;;;;5958:59;;;;;;;;;;;;6043:22;;;;;;;;;;;6027:13;;:38;;;;;;;;;;;;;;;;;;5712:360;:::o;2278:31::-;;;;;;;;;;;;;:::o;6078:241::-;4814:13;;;;;;;;;;;4798:29;;:12;:10;:12::i;:::-;:29;;;4790:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;6192:14:::1;;6174:15;:32;;;;:::i;:::-;6147:24;:59;;;;6244:4;6216:25;;:32;;;;;;;;;;;;;;;;;;6263:49;6287:24;;6263:49;;;;;;:::i;:::-;;;;;;;;6078:241::o:0;7615:149::-;7704:7;7730:11;:18;7742:5;7730:18;;;;;;;;;;;;;;;:27;7749:7;7730:27;;;;;;;;;;;;;;;;7723:34;;7615:149;;;;:::o;215:24:5:-;;;;;;;;;;;;;:::o;2235:37:4:-;;;;;;;;;;;;;:::o;1838:189:6:-;1188:12;:10;:12::i;:::-;1177:23;;:7;:5;:7::i;:::-;:23;;;1169:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1946:1:::1;1926:22;;:8;:22;;;;1918:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2001:19;2011:8;2001:9;:19::i;:::-;1838:189:::0;:::o;2129:20:4:-;;;;;;;;;;;;;:::o;1832:108:5:-;1188:12:6;:10;:12::i;:::-;1177:23;;:7;:5;:7::i;:::-;:23;;;1169:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1929:4:5::1;1903:16;:23;1920:5;1903:23;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;1832:108:::0;:::o;557:96:1:-;610:7;636:10;629:17;;557:96;:::o;10059:342:4:-;10177:1;10160:19;;:5;:19;;;;10152:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;10258:1;10239:21;;:7;:21;;;;10231:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;10341:6;10311:11;:18;10323:5;10311:18;;;;;;;;;;;;;;;:27;10330:7;10311:27;;;;;;;;;;;;;;;:36;;;;10378:7;10362:32;;10371:5;10362:32;;;10387:6;10362:32;;;;;;:::i;:::-;;;;;;;;10059:342;;;:::o;841:176:7:-;899:7;918:9;934:1;930;:5;;;;:::i;:::-;918:17;;958:1;953;:6;;945:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;1009:1;1002:8;;;841:176;;;;:::o;2147:459::-;2205:7;2451:1;2446;:6;2442:45;;;2475:1;2468:8;;;;2442:45;2497:9;2513:1;2509;:5;;;;:::i;:::-;2497:17;;2541:1;2536;2532;:5;;;;:::i;:::-;:10;2524:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;2598:1;2591:8;;;2147:459;;;;;:::o;3068:130::-;3126:7;3152:39;3156:1;3159;3152:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;3145:46;;3068:130;;;;:::o;1288:134::-;1346:7;1372:43;1376:1;1379;1372:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1365:50;;1288:134;;;;:::o;8090:458:4:-;8239:4;8203:6;8211:9;8222:6;3838:12;;;;;;;;;;;3834:238;;;3866:8;;;;;;;;;;;:27;;;3894:12;:10;:12::i;:::-;3907:6;3915:9;3926:6;3866:67;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8255:36:::1;8265:6;8273:9;8284:6;8255:9;:36::i;:::-;8302:24;8329:11;:19;8341:6;8329:19;;;;;;;;;;;;;;;:33;8349:12;:10;:12::i;:::-;8329:33;;;;;;;;;;;;;;;;8302:60;;8400:6;8380:16;:26;;8372:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;8462:57;8471:6;8479:12;:10;:12::i;:::-;8512:6;8493:16;:25;;;;:::i;:::-;8462:8;:57::i;:::-;8537:4;8530:11;;;3962:8:::0;;;;;;;;;;;:26;;;3989:12;:10;:12::i;:::-;4003:6;4011:9;4022:6;3962:67;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3834:238;;;8255:36:::1;8265:6;8273:9;8284:6;8255:9;:36::i;:::-;8302:24;8329:11;:19;8341:6;8329:19;;;;;;;;;;;;;;;:33;8349:12;:10;:12::i;:::-;8329:33;;;;;;;;;;;;;;;;8302:60;;8400:6;8380:16;:26;;8372:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;8462:57;8471:6;8479:12;:10;:12::i;:::-;8512:6;8493:16;:25;;;;:::i;:::-;8462:8;:57::i;:::-;8537:4;8530:11;;;3834:238:::0;8090:458;;;;;;;;:::o;685:377:0:-;745:4;948:12;1013:7;1001:20;993:28;;1054:1;1047:4;:8;1040:15;;;685:377;;;:::o;5308:197:5:-;503:4;5390:8;5384:3;:14;;;;:::i;:::-;:24;;5376:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;5462:3;5448:11;:17;;;;5490:8;5475:12;:23;;;;5308:197;;:::o;2033:169:6:-;2088:16;2107:6;;;;;;;;;;;2088:25;;2132:8;2123:6;;:17;;;;;;;;;;;;;;;;;;2186:8;2155:40;;2176:8;2155:40;;;;;;;;;;;;2078:124;2033:169;:::o;5594:78:5:-;5661:4;5649:9;;:16;;;;;;;;;;;;;;;;;;5594:78;:::o;9239:537:4:-;9362:1;9344:20;;:6;:20;;;;9336:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;9446:1;9425:23;;:9;:23;;;;9417:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;9500:21;9524:9;:17;9534:6;9524:17;;;;;;;;;;;;;;;;9500:41;;9576:6;9559:13;:23;;9551:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;9672:6;9656:13;:22;;;;:::i;:::-;9636:9;:17;9646:6;9636:17;;;;;;;;;;;;;;;:42;;;;9712:6;9688:9;:20;9698:9;9688:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;9751:9;9734:35;;9743:6;9734:35;;;9762:6;9734:35;;;;;;:::i;:::-;;;;;;;;9326:450;9239:537;;;:::o;7406:203::-;7523:4;7495:9;7506:6;3525:12;;;;;;;;;;;3521:215;;;3553:8;;;;;;;;;;;:23;;;3577:12;:10;:12::i;:::-;3591:9;3602:6;3553:56;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7539:42:::1;7549:12;:10;:12::i;:::-;7563:9;7574:6;7539:9;:42::i;:::-;7598:4;7591:11;;3638:8:::0;;;;;;;;;;;:22;;;3661:12;:10;:12::i;:::-;3675:9;3686:6;3638:55;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3521:215;;;7539:42:::1;7549:12;:10;:12::i;:::-;7563:9;7574:6;7539:9;:42::i;:::-;7598:4;7591:11;;3521:215:::0;7406:203;;;;;;:::o;5511:77:5:-;5577:4;5569:5;;:12;;;;;;;;;;;;;;;;;;5511:77;:::o;3680:272:7:-;3766:7;3797:1;3793;:5;3800:12;3785:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;3823:9;3839:1;3835;:5;;;;:::i;:::-;3823:17;;3944:1;3937:8;;;3680:272;;;;;:::o;1713:187::-;1799:7;1831:1;1826;:6;;1834:12;1818:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1857:9;1873:1;1869;:5;;;;:::i;:::-;1857:17;;1892:1;1885:8;;;1713:187;;;;;:::o;7:410:8:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:139::-;469:5;507:6;494:20;485:29;;523:33;550:5;523:33;:::i;:::-;423:139;;;;:::o;585:568::-;658:8;668:6;718:3;711:4;703:6;699:17;695:27;685:122;;726:79;;:::i;:::-;685:122;839:6;826:20;816:30;;869:18;861:6;858:30;855:117;;;891:79;;:::i;:::-;855:117;1005:4;997:6;993:17;981:29;;1059:3;1051:4;1043:6;1039:17;1029:8;1025:32;1022:41;1019:128;;;1066:79;;:::i;:::-;1019:128;585:568;;;;;:::o;1159:133::-;1202:5;1240:6;1227:20;1218:29;;1256:30;1280:5;1256:30;:::i;:::-;1159:133;;;;:::o;1298:139::-;1344:5;1382:6;1369:20;1360:29;;1398:33;1425:5;1398:33;:::i;:::-;1298:139;;;;:::o;1456:338::-;1511:5;1560:3;1553:4;1545:6;1541:17;1537:27;1527:122;;1568:79;;:::i;:::-;1527:122;1685:6;1672:20;1710:78;1784:3;1776:6;1769:4;1761:6;1757:17;1710:78;:::i;:::-;1701:87;;1517:277;1456:338;;;;:::o;1800:139::-;1846:5;1884:6;1871:20;1862:29;;1900:33;1927:5;1900:33;:::i;:::-;1800:139;;;;:::o;1945:329::-;2004:6;2053:2;2041:9;2032:7;2028:23;2024:32;2021:119;;;2059:79;;:::i;:::-;2021:119;2179:1;2204:53;2249:7;2240:6;2229:9;2225:22;2204:53;:::i;:::-;2194:63;;2150:117;1945:329;;;;:::o;2280:474::-;2348:6;2356;2405:2;2393:9;2384:7;2380:23;2376:32;2373:119;;;2411:79;;:::i;:::-;2373:119;2531:1;2556:53;2601:7;2592:6;2581:9;2577:22;2556:53;:::i;:::-;2546:63;;2502:117;2658:2;2684:53;2729:7;2720:6;2709:9;2705:22;2684:53;:::i;:::-;2674:63;;2629:118;2280:474;;;;;:::o;2760:619::-;2837:6;2845;2853;2902:2;2890:9;2881:7;2877:23;2873:32;2870:119;;;2908:79;;:::i;:::-;2870:119;3028:1;3053:53;3098:7;3089:6;3078:9;3074:22;3053:53;:::i;:::-;3043:63;;2999:117;3155:2;3181:53;3226:7;3217:6;3206:9;3202:22;3181:53;:::i;:::-;3171:63;;3126:118;3283:2;3309:53;3354:7;3345:6;3334:9;3330:22;3309:53;:::i;:::-;3299:63;;3254:118;2760:619;;;;;:::o;3385:474::-;3453:6;3461;3510:2;3498:9;3489:7;3485:23;3481:32;3478:119;;;3516:79;;:::i;:::-;3478:119;3636:1;3661:53;3706:7;3697:6;3686:9;3682:22;3661:53;:::i;:::-;3651:63;;3607:117;3763:2;3789:53;3834:7;3825:6;3814:9;3810:22;3789:53;:::i;:::-;3779:63;;3734:118;3385:474;;;;;:::o;3865:::-;3933:6;3941;3990:2;3978:9;3969:7;3965:23;3961:32;3958:119;;;3996:79;;:::i;:::-;3958:119;4116:1;4141:53;4186:7;4177:6;4166:9;4162:22;4141:53;:::i;:::-;4131:63;;4087:117;4243:2;4269:53;4314:7;4305:6;4294:9;4290:22;4269:53;:::i;:::-;4259:63;;4214:118;3865:474;;;;;:::o;4345:559::-;4431:6;4439;4488:2;4476:9;4467:7;4463:23;4459:32;4456:119;;;4494:79;;:::i;:::-;4456:119;4642:1;4631:9;4627:17;4614:31;4672:18;4664:6;4661:30;4658:117;;;4694:79;;:::i;:::-;4658:117;4807:80;4879:7;4870:6;4859:9;4855:22;4807:80;:::i;:::-;4789:98;;;;4585:312;4345:559;;;;;:::o;4910:323::-;4966:6;5015:2;5003:9;4994:7;4990:23;4986:32;4983:119;;;5021:79;;:::i;:::-;4983:119;5141:1;5166:50;5208:7;5199:6;5188:9;5184:22;5166:50;:::i;:::-;5156:60;;5112:114;4910:323;;;;:::o;5239:507::-;5307:6;5356:2;5344:9;5335:7;5331:23;5327:32;5324:119;;;5362:79;;:::i;:::-;5324:119;5510:1;5499:9;5495:17;5482:31;5540:18;5532:6;5529:30;5526:117;;;5562:79;;:::i;:::-;5526:117;5667:62;5721:7;5712:6;5701:9;5697:22;5667:62;:::i;:::-;5657:72;;5453:286;5239:507;;;;:::o;5752:474::-;5820:6;5828;5877:2;5865:9;5856:7;5852:23;5848:32;5845:119;;;5883:79;;:::i;:::-;5845:119;6003:1;6028:53;6073:7;6064:6;6053:9;6049:22;6028:53;:::i;:::-;6018:63;;5974:117;6130:2;6156:53;6201:7;6192:6;6181:9;6177:22;6156:53;:::i;:::-;6146:63;;6101:118;5752:474;;;;;:::o;6232:118::-;6319:24;6337:5;6319:24;:::i;:::-;6314:3;6307:37;6232:118;;:::o;6356:109::-;6437:21;6452:5;6437:21;:::i;:::-;6432:3;6425:34;6356:109;;:::o;6471:364::-;6559:3;6587:39;6620:5;6587:39;:::i;:::-;6642:71;6706:6;6701:3;6642:71;:::i;:::-;6635:78;;6722:52;6767:6;6762:3;6755:4;6748:5;6744:16;6722:52;:::i;:::-;6799:29;6821:6;6799:29;:::i;:::-;6794:3;6790:39;6783:46;;6563:272;6471:364;;;;:::o;6841:366::-;6983:3;7004:67;7068:2;7063:3;7004:67;:::i;:::-;6997:74;;7080:93;7169:3;7080:93;:::i;:::-;7198:2;7193:3;7189:12;7182:19;;6841:366;;;:::o;7213:::-;7355:3;7376:67;7440:2;7435:3;7376:67;:::i;:::-;7369:74;;7452:93;7541:3;7452:93;:::i;:::-;7570:2;7565:3;7561:12;7554:19;;7213:366;;;:::o;7585:::-;7727:3;7748:67;7812:2;7807:3;7748:67;:::i;:::-;7741:74;;7824:93;7913:3;7824:93;:::i;:::-;7942:2;7937:3;7933:12;7926:19;;7585:366;;;:::o;7957:::-;8099:3;8120:67;8184:2;8179:3;8120:67;:::i;:::-;8113:74;;8196:93;8285:3;8196:93;:::i;:::-;8314:2;8309:3;8305:12;8298:19;;7957:366;;;:::o;8329:::-;8471:3;8492:67;8556:2;8551:3;8492:67;:::i;:::-;8485:74;;8568:93;8657:3;8568:93;:::i;:::-;8686:2;8681:3;8677:12;8670:19;;8329:366;;;:::o;8701:::-;8843:3;8864:67;8928:2;8923:3;8864:67;:::i;:::-;8857:74;;8940:93;9029:3;8940:93;:::i;:::-;9058:2;9053:3;9049:12;9042:19;;8701:366;;;:::o;9073:::-;9215:3;9236:67;9300:2;9295:3;9236:67;:::i;:::-;9229:74;;9312:93;9401:3;9312:93;:::i;:::-;9430:2;9425:3;9421:12;9414:19;;9073:366;;;:::o;9445:::-;9587:3;9608:67;9672:2;9667:3;9608:67;:::i;:::-;9601:74;;9684:93;9773:3;9684:93;:::i;:::-;9802:2;9797:3;9793:12;9786:19;;9445:366;;;:::o;9817:::-;9959:3;9980:67;10044:2;10039:3;9980:67;:::i;:::-;9973:74;;10056:93;10145:3;10056:93;:::i;:::-;10174:2;10169:3;10165:12;10158:19;;9817:366;;;:::o;10189:::-;10331:3;10352:67;10416:2;10411:3;10352:67;:::i;:::-;10345:74;;10428:93;10517:3;10428:93;:::i;:::-;10546:2;10541:3;10537:12;10530:19;;10189:366;;;:::o;10561:::-;10703:3;10724:67;10788:2;10783:3;10724:67;:::i;:::-;10717:74;;10800:93;10889:3;10800:93;:::i;:::-;10918:2;10913:3;10909:12;10902:19;;10561:366;;;:::o;10933:::-;11075:3;11096:67;11160:2;11155:3;11096:67;:::i;:::-;11089:74;;11172:93;11261:3;11172:93;:::i;:::-;11290:2;11285:3;11281:12;11274:19;;10933:366;;;:::o;11305:::-;11447:3;11468:67;11532:2;11527:3;11468:67;:::i;:::-;11461:74;;11544:93;11633:3;11544:93;:::i;:::-;11662:2;11657:3;11653:12;11646:19;;11305:366;;;:::o;11677:::-;11819:3;11840:67;11904:2;11899:3;11840:67;:::i;:::-;11833:74;;11916:93;12005:3;11916:93;:::i;:::-;12034:2;12029:3;12025:12;12018:19;;11677:366;;;:::o;12049:::-;12191:3;12212:67;12276:2;12271:3;12212:67;:::i;:::-;12205:74;;12288:93;12377:3;12288:93;:::i;:::-;12406:2;12401:3;12397:12;12390:19;;12049:366;;;:::o;12421:::-;12563:3;12584:67;12648:2;12643:3;12584:67;:::i;:::-;12577:74;;12660:93;12749:3;12660:93;:::i;:::-;12778:2;12773:3;12769:12;12762:19;;12421:366;;;:::o;12793:::-;12935:3;12956:67;13020:2;13015:3;12956:67;:::i;:::-;12949:74;;13032:93;13121:3;13032:93;:::i;:::-;13150:2;13145:3;13141:12;13134:19;;12793:366;;;:::o;13165:::-;13307:3;13328:67;13392:2;13387:3;13328:67;:::i;:::-;13321:74;;13404:93;13493:3;13404:93;:::i;:::-;13522:2;13517:3;13513:12;13506:19;;13165:366;;;:::o;13537:::-;13679:3;13700:67;13764:2;13759:3;13700:67;:::i;:::-;13693:74;;13776:93;13865:3;13776:93;:::i;:::-;13894:2;13889:3;13885:12;13878:19;;13537:366;;;:::o;13909:::-;14051:3;14072:67;14136:2;14131:3;14072:67;:::i;:::-;14065:74;;14148:93;14237:3;14148:93;:::i;:::-;14266:2;14261:3;14257:12;14250:19;;13909:366;;;:::o;14281:::-;14423:3;14444:67;14508:2;14503:3;14444:67;:::i;:::-;14437:74;;14520:93;14609:3;14520:93;:::i;:::-;14638:2;14633:3;14629:12;14622:19;;14281:366;;;:::o;14653:::-;14795:3;14816:67;14880:2;14875:3;14816:67;:::i;:::-;14809:74;;14892:93;14981:3;14892:93;:::i;:::-;15010:2;15005:3;15001:12;14994:19;;14653:366;;;:::o;15025:118::-;15112:24;15130:5;15112:24;:::i;:::-;15107:3;15100:37;15025:118;;:::o;15149:112::-;15232:22;15248:5;15232:22;:::i;:::-;15227:3;15220:35;15149:112;;:::o;15267:222::-;15360:4;15398:2;15387:9;15383:18;15375:26;;15411:71;15479:1;15468:9;15464:17;15455:6;15411:71;:::i;:::-;15267:222;;;;:::o;15495:553::-;15672:4;15710:3;15699:9;15695:19;15687:27;;15724:71;15792:1;15781:9;15777:17;15768:6;15724:71;:::i;:::-;15805:72;15873:2;15862:9;15858:18;15849:6;15805:72;:::i;:::-;15887;15955:2;15944:9;15940:18;15931:6;15887:72;:::i;:::-;15969;16037:2;16026:9;16022:18;16013:6;15969:72;:::i;:::-;15495:553;;;;;;;:::o;16054:442::-;16203:4;16241:2;16230:9;16226:18;16218:26;;16254:71;16322:1;16311:9;16307:17;16298:6;16254:71;:::i;:::-;16335:72;16403:2;16392:9;16388:18;16379:6;16335:72;:::i;:::-;16417;16485:2;16474:9;16470:18;16461:6;16417:72;:::i;:::-;16054:442;;;;;;:::o;16502:210::-;16589:4;16627:2;16616:9;16612:18;16604:26;;16640:65;16702:1;16691:9;16687:17;16678:6;16640:65;:::i;:::-;16502:210;;;;:::o;16718:313::-;16831:4;16869:2;16858:9;16854:18;16846:26;;16918:9;16912:4;16908:20;16904:1;16893:9;16889:17;16882:47;16946:78;17019:4;17010:6;16946:78;:::i;:::-;16938:86;;16718:313;;;;:::o;17037:419::-;17203:4;17241:2;17230:9;17226:18;17218:26;;17290:9;17284:4;17280:20;17276:1;17265:9;17261:17;17254:47;17318:131;17444:4;17318:131;:::i;:::-;17310:139;;17037:419;;;:::o;17462:::-;17628:4;17666:2;17655:9;17651:18;17643:26;;17715:9;17709:4;17705:20;17701:1;17690:9;17686:17;17679:47;17743:131;17869:4;17743:131;:::i;:::-;17735:139;;17462:419;;;:::o;17887:::-;18053:4;18091:2;18080:9;18076:18;18068:26;;18140:9;18134:4;18130:20;18126:1;18115:9;18111:17;18104:47;18168:131;18294:4;18168:131;:::i;:::-;18160:139;;17887:419;;;:::o;18312:::-;18478:4;18516:2;18505:9;18501:18;18493:26;;18565:9;18559:4;18555:20;18551:1;18540:9;18536:17;18529:47;18593:131;18719:4;18593:131;:::i;:::-;18585:139;;18312:419;;;:::o;18737:::-;18903:4;18941:2;18930:9;18926:18;18918:26;;18990:9;18984:4;18980:20;18976:1;18965:9;18961:17;18954:47;19018:131;19144:4;19018:131;:::i;:::-;19010:139;;18737:419;;;:::o;19162:::-;19328:4;19366:2;19355:9;19351:18;19343:26;;19415:9;19409:4;19405:20;19401:1;19390:9;19386:17;19379:47;19443:131;19569:4;19443:131;:::i;:::-;19435:139;;19162:419;;;:::o;19587:::-;19753:4;19791:2;19780:9;19776:18;19768:26;;19840:9;19834:4;19830:20;19826:1;19815:9;19811:17;19804:47;19868:131;19994:4;19868:131;:::i;:::-;19860:139;;19587:419;;;:::o;20012:::-;20178:4;20216:2;20205:9;20201:18;20193:26;;20265:9;20259:4;20255:20;20251:1;20240:9;20236:17;20229:47;20293:131;20419:4;20293:131;:::i;:::-;20285:139;;20012:419;;;:::o;20437:::-;20603:4;20641:2;20630:9;20626:18;20618:26;;20690:9;20684:4;20680:20;20676:1;20665:9;20661:17;20654:47;20718:131;20844:4;20718:131;:::i;:::-;20710:139;;20437:419;;;:::o;20862:::-;21028:4;21066:2;21055:9;21051:18;21043:26;;21115:9;21109:4;21105:20;21101:1;21090:9;21086:17;21079:47;21143:131;21269:4;21143:131;:::i;:::-;21135:139;;20862:419;;;:::o;21287:::-;21453:4;21491:2;21480:9;21476:18;21468:26;;21540:9;21534:4;21530:20;21526:1;21515:9;21511:17;21504:47;21568:131;21694:4;21568:131;:::i;:::-;21560:139;;21287:419;;;:::o;21712:::-;21878:4;21916:2;21905:9;21901:18;21893:26;;21965:9;21959:4;21955:20;21951:1;21940:9;21936:17;21929:47;21993:131;22119:4;21993:131;:::i;:::-;21985:139;;21712:419;;;:::o;22137:::-;22303:4;22341:2;22330:9;22326:18;22318:26;;22390:9;22384:4;22380:20;22376:1;22365:9;22361:17;22354:47;22418:131;22544:4;22418:131;:::i;:::-;22410:139;;22137:419;;;:::o;22562:::-;22728:4;22766:2;22755:9;22751:18;22743:26;;22815:9;22809:4;22805:20;22801:1;22790:9;22786:17;22779:47;22843:131;22969:4;22843:131;:::i;:::-;22835:139;;22562:419;;;:::o;22987:::-;23153:4;23191:2;23180:9;23176:18;23168:26;;23240:9;23234:4;23230:20;23226:1;23215:9;23211:17;23204:47;23268:131;23394:4;23268:131;:::i;:::-;23260:139;;22987:419;;;:::o;23412:::-;23578:4;23616:2;23605:9;23601:18;23593:26;;23665:9;23659:4;23655:20;23651:1;23640:9;23636:17;23629:47;23693:131;23819:4;23693:131;:::i;:::-;23685:139;;23412:419;;;:::o;23837:::-;24003:4;24041:2;24030:9;24026:18;24018:26;;24090:9;24084:4;24080:20;24076:1;24065:9;24061:17;24054:47;24118:131;24244:4;24118:131;:::i;:::-;24110:139;;23837:419;;;:::o;24262:::-;24428:4;24466:2;24455:9;24451:18;24443:26;;24515:9;24509:4;24505:20;24501:1;24490:9;24486:17;24479:47;24543:131;24669:4;24543:131;:::i;:::-;24535:139;;24262:419;;;:::o;24687:::-;24853:4;24891:2;24880:9;24876:18;24868:26;;24940:9;24934:4;24930:20;24926:1;24915:9;24911:17;24904:47;24968:131;25094:4;24968:131;:::i;:::-;24960:139;;24687:419;;;:::o;25112:::-;25278:4;25316:2;25305:9;25301:18;25293:26;;25365:9;25359:4;25355:20;25351:1;25340:9;25336:17;25329:47;25393:131;25519:4;25393:131;:::i;:::-;25385:139;;25112:419;;;:::o;25537:::-;25703:4;25741:2;25730:9;25726:18;25718:26;;25790:9;25784:4;25780:20;25776:1;25765:9;25761:17;25754:47;25818:131;25944:4;25818:131;:::i;:::-;25810:139;;25537:419;;;:::o;25962:::-;26128:4;26166:2;26155:9;26151:18;26143:26;;26215:9;26209:4;26205:20;26201:1;26190:9;26186:17;26179:47;26243:131;26369:4;26243:131;:::i;:::-;26235:139;;25962:419;;;:::o;26387:222::-;26480:4;26518:2;26507:9;26503:18;26495:26;;26531:71;26599:1;26588:9;26584:17;26575:6;26531:71;:::i;:::-;26387:222;;;;:::o;26615:214::-;26704:4;26742:2;26731:9;26727:18;26719:26;;26755:67;26819:1;26808:9;26804:17;26795:6;26755:67;:::i;:::-;26615:214;;;;:::o;26835:129::-;26869:6;26896:20;;:::i;:::-;26886:30;;26925:33;26953:4;26945:6;26925:33;:::i;:::-;26835:129;;;:::o;26970:75::-;27003:6;27036:2;27030:9;27020:19;;26970:75;:::o;27051:307::-;27112:4;27202:18;27194:6;27191:30;27188:56;;;27224:18;;:::i;:::-;27188:56;27262:29;27284:6;27262:29;:::i;:::-;27254:37;;27346:4;27340;27336:15;27328:23;;27051:307;;;:::o;27364:99::-;27416:6;27450:5;27444:12;27434:22;;27364:99;;;:::o;27469:169::-;27553:11;27587:6;27582:3;27575:19;27627:4;27622:3;27618:14;27603:29;;27469:169;;;;:::o;27644:305::-;27684:3;27703:20;27721:1;27703:20;:::i;:::-;27698:25;;27737:20;27755:1;27737:20;:::i;:::-;27732:25;;27891:1;27823:66;27819:74;27816:1;27813:81;27810:107;;;27897:18;;:::i;:::-;27810:107;27941:1;27938;27934:9;27927:16;;27644:305;;;;:::o;27955:185::-;27995:1;28012:20;28030:1;28012:20;:::i;:::-;28007:25;;28046:20;28064:1;28046:20;:::i;:::-;28041:25;;28085:1;28075:35;;28090:18;;:::i;:::-;28075:35;28132:1;28129;28125:9;28120:14;;27955:185;;;;:::o;28146:348::-;28186:7;28209:20;28227:1;28209:20;:::i;:::-;28204:25;;28243:20;28261:1;28243:20;:::i;:::-;28238:25;;28431:1;28363:66;28359:74;28356:1;28353:81;28348:1;28341:9;28334:17;28330:105;28327:131;;;28438:18;;:::i;:::-;28327:131;28486:1;28483;28479:9;28468:20;;28146:348;;;;:::o;28500:191::-;28540:4;28560:20;28578:1;28560:20;:::i;:::-;28555:25;;28594:20;28612:1;28594:20;:::i;:::-;28589:25;;28633:1;28630;28627:8;28624:34;;;28638:18;;:::i;:::-;28624:34;28683:1;28680;28676:9;28668:17;;28500:191;;;;:::o;28697:96::-;28734:7;28763:24;28781:5;28763:24;:::i;:::-;28752:35;;28697:96;;;:::o;28799:90::-;28833:7;28876:5;28869:13;28862:21;28851:32;;28799:90;;;:::o;28895:77::-;28932:7;28961:5;28950:16;;28895:77;;;:::o;28978:126::-;29015:7;29055:42;29048:5;29044:54;29033:65;;28978:126;;;:::o;29110:77::-;29147:7;29176:5;29165:16;;29110:77;;;:::o;29193:86::-;29228:7;29268:4;29261:5;29257:16;29246:27;;29193:86;;;:::o;29285:154::-;29369:6;29364:3;29359;29346:30;29431:1;29422:6;29417:3;29413:16;29406:27;29285:154;;;:::o;29445:307::-;29513:1;29523:113;29537:6;29534:1;29531:13;29523:113;;;29622:1;29617:3;29613:11;29607:18;29603:1;29598:3;29594:11;29587:39;29559:2;29556:1;29552:10;29547:15;;29523:113;;;29654:6;29651:1;29648:13;29645:101;;;29734:1;29725:6;29720:3;29716:16;29709:27;29645:101;29494:258;29445:307;;;:::o;29758:320::-;29802:6;29839:1;29833:4;29829:12;29819:22;;29886:1;29880:4;29876:12;29907:18;29897:81;;29963:4;29955:6;29951:17;29941:27;;29897:81;30025:2;30017:6;30014:14;29994:18;29991:38;29988:84;;;30044:18;;:::i;:::-;29988:84;29809:269;29758:320;;;:::o;30084:281::-;30167:27;30189:4;30167:27;:::i;:::-;30159:6;30155:40;30297:6;30285:10;30282:22;30261:18;30249:10;30246:34;30243:62;30240:88;;;30308:18;;:::i;:::-;30240:88;30348:10;30344:2;30337:22;30127:238;30084:281;;:::o;30371:233::-;30410:3;30433:24;30451:5;30433:24;:::i;:::-;30424:33;;30479:66;30472:5;30469:77;30466:103;;;30549:18;;:::i;:::-;30466:103;30596:1;30589:5;30585:13;30578:20;;30371:233;;;:::o;30610:180::-;30658:77;30655:1;30648:88;30755:4;30752:1;30745:15;30779:4;30776:1;30769:15;30796:180;30844:77;30841:1;30834:88;30941:4;30938:1;30931:15;30965:4;30962:1;30955:15;30982:180;31030:77;31027:1;31020:88;31127:4;31124:1;31117:15;31151:4;31148:1;31141:15;31168:180;31216:77;31213:1;31206:88;31313:4;31310:1;31303:15;31337:4;31334:1;31327:15;31354:180;31402:77;31399:1;31392:88;31499:4;31496:1;31489:15;31523:4;31520:1;31513:15;31540:117;31649:1;31646;31639:12;31663:117;31772:1;31769;31762:12;31786:117;31895:1;31892;31885:12;31909:117;32018:1;32015;32008:12;32032:117;32141:1;32138;32131:12;32155:117;32264:1;32261;32254:12;32278:102;32319:6;32370:2;32366:7;32361:2;32354:5;32350:14;32346:28;32336:38;;32278:102;;;:::o;32386:223::-;32526:34;32522:1;32514:6;32510:14;32503:58;32595:6;32590:2;32582:6;32578:15;32571:31;32386:223;:::o;32615:179::-;32755:31;32751:1;32743:6;32739:14;32732:55;32615:179;:::o;32800:227::-;32940:34;32936:1;32928:6;32924:14;32917:58;33009:10;33004:2;32996:6;32992:15;32985:35;32800:227;:::o;33033:225::-;33173:34;33169:1;33161:6;33157:14;33150:58;33242:8;33237:2;33229:6;33225:15;33218:33;33033:225;:::o;33264:226::-;33404:34;33400:1;33392:6;33388:14;33381:58;33473:9;33468:2;33460:6;33456:15;33449:34;33264:226;:::o;33496:176::-;33636:28;33632:1;33624:6;33620:14;33613:52;33496:176;:::o;33678:228::-;33818:34;33814:1;33806:6;33802:14;33795:58;33887:11;33882:2;33874:6;33870:15;33863:36;33678:228;:::o;33912:177::-;34052:29;34048:1;34040:6;34036:14;34029:53;33912:177;:::o;34095:169::-;34235:21;34231:1;34223:6;34219:14;34212:45;34095:169;:::o;34270:170::-;34410:22;34406:1;34398:6;34394:14;34387:46;34270:170;:::o;34446:178::-;34586:30;34582:1;34574:6;34570:14;34563:54;34446:178;:::o;34630:225::-;34770:34;34766:1;34758:6;34754:14;34747:58;34839:8;34834:2;34826:6;34822:15;34815:33;34630:225;:::o;34861:175::-;35001:27;34997:1;34989:6;34985:14;34978:51;34861:175;:::o;35042:220::-;35182:34;35178:1;35170:6;35166:14;35159:58;35251:3;35246:2;35238:6;35234:15;35227:28;35042:220;:::o;35268:182::-;35408:34;35404:1;35396:6;35392:14;35385:58;35268:182;:::o;35456:175::-;35596:27;35592:1;35584:6;35580:14;35573:51;35456:175;:::o;35637:180::-;35777:32;35773:1;35765:6;35761:14;35754:56;35637:180;:::o;35823:::-;35963:32;35959:1;35951:6;35947:14;35940:56;35823:180;:::o;36009:227::-;36149:34;36145:1;36137:6;36133:14;36126:58;36218:10;36213:2;36205:6;36201:15;36194:35;36009:227;:::o;36242:224::-;36382:34;36378:1;36370:6;36366:14;36359:58;36451:7;36446:2;36438:6;36434:15;36427:32;36242:224;:::o;36472:225::-;36612:34;36608:1;36600:6;36596:14;36589:58;36681:8;36676:2;36668:6;36664:15;36657:33;36472:225;:::o;36703:222::-;36843:34;36839:1;36831:6;36827:14;36820:58;36912:5;36907:2;36899:6;36895:15;36888:30;36703:222;:::o;36931:122::-;37004:24;37022:5;37004:24;:::i;:::-;36997:5;36994:35;36984:63;;37043:1;37040;37033:12;36984:63;36931:122;:::o;37059:116::-;37129:21;37144:5;37129:21;:::i;:::-;37122:5;37119:32;37109:60;;37165:1;37162;37155:12;37109:60;37059:116;:::o;37181:122::-;37254:24;37272:5;37254:24;:::i;:::-;37247:5;37244:35;37234:63;;37293:1;37290;37283:12;37234:63;37181:122;:::o;37309:::-;37382:24;37400:5;37382:24;:::i;:::-;37375:5;37372:35;37362:63;;37421:1;37418;37411:12;37362:63;37309:122;:::o
Swarm Source
ipfs://040a4bc43f32164f30ea4de06de908ca57db07617c79a30ebeea3bbc5cbc855e
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.