Token Boom
Overview ERC-20
Total Supply:
5,000,000,000 BOOM
Holders:
6 addresses
Profile Summary
Contract:
Decimals:
2
Balance
847,786,836.3 BOOM
[ Download CSV Export ]
[ Download CSV Export ]
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Boom
Compiler Version
v0.8.14+commit.80d49f37
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-06-12 */ // File: @openzeppelin/[email protected]/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/[email protected]/security/Pausable.sol // OpenZeppelin Contracts v4.4.1 (security/Pausable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract Pausable is Context { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor() { _paused = false; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { require(!paused(), "Pausable: paused"); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { require(paused(), "Pausable: not paused"); _; } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } } // File: @openzeppelin/[email protected]/access/Ownable.sol // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: Blacklist.sol pragma solidity ^0.8.10; /** * @title Blacklist * @dev The Blacklist contract has a blacklist of addresses, and provides basic authorization control functions. * @dev This simplifies the implementation of "user permissions". */ contract Blacklist is Ownable { mapping(address => bool) blacklist; address[] public blacklistAddresses; event BlacklistedAddressAdded(address addr); event BlacklistedAddressRemoved(address addr); /** * @dev Throws if called by any account that's whitelist (a.k.a not blacklist) */ modifier isBlacklisted() { require(blacklist[msg.sender]); _; } /** * @dev Throws if called by any account that's blacklist. */ modifier isNotBlacklisted() { require(!blacklist[msg.sender]); _; } /** * @dev Add an address to the blacklist * @param addr address * @return success true if the address was added to the blacklist, false if the address was already in the blacklist */ function addAddressToBlacklist(address addr) public onlyOwner returns (bool success) { if (!blacklist[addr]) { blacklistAddresses.push(addr); blacklist[addr] = true; emit BlacklistedAddressAdded(addr); success = true; } } /** * @dev Add addresses to the blacklist * @param addrs addresses * @return success true if at least one address was added to the blacklist, * false if all addresses were already in the blacklist */ function addAddressesToBlacklist(address[] memory addrs) public onlyOwner returns (bool success) { for (uint256 i = 0; i < addrs.length; i++) { if (addAddressToBlacklist(addrs[i])) { success = true; } } } /** * @dev Remove an address from the blacklist * @param addr address * @return success true if the address was removed from the blacklist, * false if the address wasn't in the blacklist in the first place */ function removeAddressFromBlacklist(address addr) public onlyOwner returns (bool success) { if (blacklist[addr]) { blacklist[addr] = false; for (uint256 i = 0; i < blacklistAddresses.length; i++) { if (addr == blacklistAddresses[i]) { delete blacklistAddresses[i]; } } emit BlacklistedAddressRemoved(addr); success = true; } } /** * @dev Remove addresses from the blacklist * @param addrs addresses * @return success true if at least one address was removed from the blacklist, * false if all addresses weren't in the blacklist in the first place */ function removeAddressesFromBlacklist(address[] memory addrs) public onlyOwner returns (bool success) { for (uint256 i = 0; i < addrs.length; i++) { if (removeAddressFromBlacklist(addrs[i])) { success = true; } } } /** * @dev Get all blacklist wallet addresses */ function getBlacklist() public view returns (address[] memory) { return blacklistAddresses; } } // File: @openzeppelin/[email protected]/token/ERC20/IERC20.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev 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 `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, 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 `from` to `to` 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 from, address to, uint256 amount ) external returns (bool); } // File: @openzeppelin/[email protected]/token/ERC20/extensions/IERC20Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol) pragma solidity ^0.8.0; /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } // File: @openzeppelin/[email protected]/token/ERC20/ERC20.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/ERC20.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin Contracts guidelines: functions revert * instead 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, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override 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 this function is * overridden; * * 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 virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `to` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address to, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _transfer(owner, to, 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}. * * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on * `transferFrom`. This is semantically equivalent to an infinite approval. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _approve(owner, 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}. * * NOTE: Does not update the allowance if the current allowance * is the maximum `uint256`. * * Requirements: * * - `from` and `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. * - the caller must have allowance for ``from``'s tokens of at least * `amount`. */ function transferFrom( address from, address to, uint256 amount ) public virtual override returns (bool) { address spender = _msgSender(); _spendAllowance(from, spender, amount); _transfer(from, to, amount); 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) { address owner = _msgSender(); _approve(owner, spender, allowance(owner, spender) + 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) { address owner = _msgSender(); uint256 currentAllowance = allowance(owner, spender); require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(owner, spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `sender` to `recipient`. * * This 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: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. */ function _transfer( address from, address to, uint256 amount ) internal virtual { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(from, to, amount); uint256 fromBalance = _balances[from]; require(fromBalance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { _balances[from] = fromBalance - amount; } _balances[to] += amount; emit Transfer(from, to, amount); _afterTokenTransfer(from, to, 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: * * - `account` 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 += amount; _balances[account] += amount; emit Transfer(address(0), account, amount); _afterTokenTransfer(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); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; } _totalSupply -= amount; emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This 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 Updates `owner` s allowance for `spender` based on spent `amount`. * * Does not update the allowance amount in case of infinite allowance. * Revert if not enough allowance is available. * * Might emit an {Approval} event. */ function _spendAllowance( address owner, address spender, uint256 amount ) internal virtual { uint256 currentAllowance = allowance(owner, spender); if (currentAllowance != type(uint256).max) { require(currentAllowance >= amount, "ERC20: insufficient allowance"); unchecked { _approve(owner, spender, currentAllowance - amount); } } } /** * @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 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 {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * has been transferred to `to`. * - when `from` is zero, `amount` tokens have been minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens have been 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 _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } // File: @openzeppelin/[email protected]/token/ERC20/extensions/ERC20Burnable.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/extensions/ERC20Burnable.sol) pragma solidity ^0.8.0; /** * @dev Extension of {ERC20} that allows token holders to destroy both their own * tokens and those that they have an allowance for, in a way that can be * recognized off-chain (via event analysis). */ abstract contract ERC20Burnable is Context, ERC20 { /** * @dev Destroys `amount` tokens from the caller. * * See {ERC20-_burn}. */ function burn(uint256 amount) public virtual { _burn(_msgSender(), amount); } /** * @dev Destroys `amount` tokens from `account`, deducting from the caller's * allowance. * * See {ERC20-_burn} and {ERC20-allowance}. * * Requirements: * * - the caller must have allowance for ``accounts``'s tokens of at least * `amount`. */ function burnFrom(address account, uint256 amount) public virtual { _spendAllowance(account, _msgSender(), amount); _burn(account, amount); } } // File: Boomv2.sol pragma solidity ^0.8.4; uint8 constant NUM_DECIMALS = 2; // This way it is not possible to have decimals. If we wanted more decimals // we could increase BASE_PRECISION to 100_000 to have 3 decimals. uint256 constant BASE_PRECISION = 100; uint256 constant INITIAL_SUPPLY = 5_000_000_000 * 10**NUM_DECIMALS; contract Boom is ERC20, ERC20Burnable, Ownable, Blacklist { mapping (address => bool) private _isExcludedSender; mapping (address => bool) private _isExcludedReceiver; address[] private _excludedSender; address[] private _excludedReceiver; uint256 private _feeTotal; uint256 private _contributionRate = 15; // out of BASE_PRECISION address private _contributionAddress; constructor() ERC20("Boom", "BOOM") { _mint(msg.sender, INITIAL_SUPPLY); _contributionAddress = owner(); } function _beforeTokenTransfer(address from, address to, uint256 amount) internal override(ERC20) { // This blocks transfer, transferFrom, burn and burnFrom calls from and // to blacklisted addresses require(!blacklist[from], "From address is blacklisted"); require(!blacklist[to], "To address is blacklisted"); super._beforeTokenTransfer(from, to, amount); } function transfer( address to, uint256 amount ) public override returns(bool success) { if (isExcluded(msg.sender, true) || isExcluded(to, false)) { super.transfer(to, amount); } else { // Calculate and spend the tax uint256 contributionAmt = (amount * _contributionRate) / BASE_PRECISION; super.transfer(_contributionAddress, contributionAmt); // Send rest to the recipient super.transfer(to, amount - contributionAmt); } return true; } function transferFrom( address from, address to, uint256 amount ) public override returns(bool success) { if (isExcluded(from, true) || isExcluded(to, false)) { return super.transferFrom(from, to, amount); } else { // Calculate and spend the tax uint256 contributionAmt = (amount * _contributionRate) / BASE_PRECISION; super.transferFrom(from, _contributionAddress, contributionAmt); // Send rest to the recipient super.transferFrom(from, to, amount - contributionAmt); } return true; } function decimals() public view virtual override returns (uint8) { return NUM_DECIMALS; } function getContributionRate() public view returns(uint256) { return _contributionRate; } function setContributionRate(uint256 rate) external onlyOwner() { require(((rate <= BASE_PRECISION) && (rate >= 0)) , "Rate should be be between 0 and 100"); _contributionRate = rate; } function getContributionAddress() public view returns(address) { return _contributionAddress; } function setContributionAddress(address _target) external onlyOwner() { _contributionAddress = _target; } function isExcluded(address account, bool isSender) public view returns (bool) { if (isSender) { return _isExcludedSender[account]; } else { return _isExcludedReceiver[account]; } } function excludeAccount(address account, bool isSender) external onlyOwner() { if (isSender) { require(!_isExcludedSender[account], "Sender account is already excluded"); _isExcludedSender[account] = true; _excludedSender.push(account); } else { require(!_isExcludedReceiver[account], "Receiver account is already excluded"); _isExcludedReceiver[account] = true; _excludedReceiver.push(account); } } function includeAccount(address account, bool isSender) external onlyOwner() { if (isSender) { require(_isExcludedSender[account], "Sender account is already included"); for (uint256 i = 0; i < _excludedSender.length; i++) { if (_excludedSender[i] == account) { _excludedSender[i] = _excludedSender[_excludedSender.length - 1]; _isExcludedSender[account] = false; _excludedSender.pop(); break; } } } else { require(_isExcludedReceiver[account], "Account is already included"); for (uint256 i = 0; i < _excludedReceiver.length; i++) { if (_excludedReceiver[i] == account) { _excludedReceiver[i] = _excludedReceiver[_excludedReceiver.length - 1]; _isExcludedReceiver[account] = false; _excludedReceiver.pop(); break; } } } } }
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"addr","type":"address"}],"name":"BlacklistedAddressAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"addr","type":"address"}],"name":"BlacklistedAddressRemoved","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":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"addAddressToBlacklist","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addrs","type":"address[]"}],"name":"addAddressesToBlacklist","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"blacklistAddresses","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"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":"account","type":"address"},{"internalType":"bool","name":"isSender","type":"bool"}],"name":"excludeAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getBlacklist","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getContributionAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getContributionRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"isSender","type":"bool"}],"name":"includeAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"isSender","type":"bool"}],"name":"isExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[{"internalType":"address","name":"addr","type":"address"}],"name":"removeAddressFromBlacklist","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addrs","type":"address[]"}],"name":"removeAddressesFromBlacklist","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_target","type":"address"}],"name":"setContributionAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"rate","type":"uint256"}],"name":"setContributionRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6080604052600f600d553480156200001657600080fd5b506040518060400160405280600481526020017f426f6f6d000000000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f424f4f4d0000000000000000000000000000000000000000000000000000000081525081600390805190602001906200009b92919062000517565b508060049080519060200190620000b492919062000517565b505050620000d7620000cb6200016060201b60201c565b6200016860201b60201c565b6200010a336002600a620000ec919062000761565b64012a05f200620000fe9190620007b2565b6200022e60201b60201c565b6200011a620003a660201b60201c565b600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000a69565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620002a0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002979062000874565b60405180910390fd5b620002b460008383620003d060201b60201c565b8060026000828254620002c8919062000896565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546200031f919062000896565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000386919062000904565b60405180910390a3620003a2600083836200050d60201b60201c565b5050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161562000460576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004579062000971565b60405180910390fd5b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615620004f0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004e790620009e3565b60405180910390fd5b620005088383836200051260201b62001d7c1760201c565b505050565b505050565b505050565b828054620005259062000a34565b90600052602060002090601f01602090048101928262000549576000855562000595565b82601f106200056457805160ff191683800117855562000595565b8280016001018555821562000595579182015b828111156200059457825182559160200191906001019062000577565b5b509050620005a49190620005a8565b5090565b5b80821115620005c3576000816000905550600101620005a9565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000655578086048111156200062d576200062c620005c7565b5b60018516156200063d5780820291505b80810290506200064d85620005f6565b94506200060d565b94509492505050565b60008262000670576001905062000743565b8162000680576000905062000743565b8160018114620006995760028114620006a457620006da565b600191505062000743565b60ff841115620006b957620006b8620005c7565b5b8360020a915084821115620006d357620006d2620005c7565b5b5062000743565b5060208310610133831016604e8410600b8410161715620007145782820a9050838111156200070e576200070d620005c7565b5b62000743565b62000723848484600162000603565b925090508184048111156200073d576200073c620005c7565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b60006200076e826200074a565b91506200077b8362000754565b9250620007aa7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846200065e565b905092915050565b6000620007bf826200074a565b9150620007cc836200074a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615620008085762000807620005c7565b5b828202905092915050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b60006200085c601f8362000813565b9150620008698262000824565b602082019050919050565b600060208201905081810360008301526200088f816200084d565b9050919050565b6000620008a3826200074a565b9150620008b0836200074a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620008e857620008e7620005c7565b5b828201905092915050565b620008fe816200074a565b82525050565b60006020820190506200091b6000830184620008f3565b92915050565b7f46726f6d206164647265737320697320626c61636b6c69737465640000000000600082015250565b600062000959601b8362000813565b9150620009668262000921565b602082019050919050565b600060208201905081810360008301526200098c816200094a565b9050919050565b7f546f206164647265737320697320626c61636b6c697374656400000000000000600082015250565b6000620009cb60198362000813565b9150620009d88262000993565b602082019050919050565b60006020820190508181036000830152620009fe81620009bc565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000a4d57607f821691505b60208210810362000a635762000a6262000a05565b5b50919050565b6138dd8062000a796000396000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c8063715018a611610104578063af330cda116100a2578063d8c9538b11610071578063d8c9538b1461056a578063dd62ed3e14610586578063f2c816ae146105b6578063f2fde38b146105e6576101cf565b8063af330cda146104e2578063b41e35ec146104fe578063ca73419e1461051c578063d172b9e71461054c576101cf565b806395d89b41116100de57806395d89b4114610434578063976d450814610452578063a457c2d714610482578063a9059cbb146104b2576101cf565b8063715018a6146103f057806379cc6790146103fa5780638da5cb5b14610416576101cf565b8063338c0e0111610171578063395093511161014b578063395093511461035857806342966c68146103885780635215fbf7146103a457806370a08231146103c0576101cf565b8063338c0e01146102ee578063338d6c301461030a57806335e82f3a14610328576101cf565b80631e55a376116101ad5780631e55a3761461024057806323b872dd14610270578063313ce567146102a057806332258794146102be576101cf565b806306fdde03146101d4578063095ea7b3146101f257806318160ddd14610222575b600080fd5b6101dc610602565b6040516101e99190612713565b60405180910390f35b61020c600480360381019061020791906127dd565b610694565b6040516102199190612838565b60405180910390f35b61022a6106b7565b6040516102379190612862565b60405180910390f35b61025a6004803603810190610255919061287d565b6106c1565b60405161026791906128b9565b60405180910390f35b61028a600480360381019061028591906128d4565b610700565b6040516102979190612838565b60405180910390f35b6102a86107a6565b6040516102b59190612943565b60405180910390f35b6102d860048036038101906102d39190612aa6565b6107af565b6040516102e59190612838565b60405180910390f35b61030860048036038101906103039190612b1b565b61087f565b005b610312610ded565b60405161031f9190612c19565b60405180910390f35b610342600480360381019061033d9190612c3b565b610e7b565b60405161034f9190612838565b60405180910390f35b610372600480360381019061036d91906127dd565b6110bb565b60405161037f9190612838565b60405180910390f35b6103a2600480360381019061039d919061287d565b6110f2565b005b6103be60048036038101906103b99190612c3b565b611106565b005b6103da60048036038101906103d59190612c3b565b6111c6565b6040516103e79190612862565b60405180910390f35b6103f861120e565b005b610414600480360381019061040f91906127dd565b611296565b005b61041e6112b6565b60405161042b91906128b9565b60405180910390f35b61043c6112e0565b6040516104499190612713565b60405180910390f35b61046c60048036038101906104679190612b1b565b611372565b6040516104799190612838565b60405180910390f35b61049c600480360381019061049791906127dd565b611424565b6040516104a99190612838565b60405180910390f35b6104cc60048036038101906104c791906127dd565b61149b565b6040516104d99190612838565b60405180910390f35b6104fc60048036038101906104f7919061287d565b61153c565b005b610506611613565b60405161051391906128b9565b60405180910390f35b61053660048036038101906105319190612aa6565b61163d565b6040516105439190612838565b60405180910390f35b61055461170d565b6040516105619190612862565b60405180910390f35b610584600480360381019061057f9190612b1b565b611717565b005b6105a0600480360381019061059b9190612c68565b611a33565b6040516105ad9190612862565b60405180910390f35b6105d060048036038101906105cb9190612c3b565b611aba565b6040516105dd9190612838565b60405180910390f35b61060060048036038101906105fb9190612c3b565b611c85565b005b60606003805461061190612cd7565b80601f016020809104026020016040519081016040528092919081815260200182805461063d90612cd7565b801561068a5780601f1061065f5761010080835404028352916020019161068a565b820191906000526020600020905b81548152906001019060200180831161066d57829003601f168201915b5050505050905090565b60008061069f611d81565b90506106ac818585611d89565b600191505092915050565b6000600254905090565b600781815481106106d157600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600061070d846001611372565b8061071f575061071e836000611372565b5b156107365761072f848484611f52565b905061079f565b60006064600d54846107489190612d37565b6107529190612dc0565b905061078185600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683611f52565b50610798858583866107939190612df1565b611f52565b5050600190505b9392505050565b60006002905090565b60006107b9611d81565b73ffffffffffffffffffffffffffffffffffffffff166107d76112b6565b73ffffffffffffffffffffffffffffffffffffffff161461082d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082490612e71565b60405180910390fd5b60005b82518110156108795761085c83828151811061084f5761084e612e91565b5b6020026020010151610e7b565b1561086657600191505b808061087190612ec0565b915050610830565b50919050565b610887611d81565b73ffffffffffffffffffffffffffffffffffffffff166108a56112b6565b73ffffffffffffffffffffffffffffffffffffffff16146108fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108f290612e71565b60405180910390fd5b8015610b7757600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661098d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098490612f7a565b60405180910390fd5b60005b600a80549050811015610b71578273ffffffffffffffffffffffffffffffffffffffff16600a82815481106109c8576109c7612e91565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603610b5e57600a6001600a80549050610a229190612df1565b81548110610a3357610a32612e91565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600a8281548110610a7257610a71612e91565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600a805480610b2457610b23612f9a565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055610b71565b8080610b6990612ec0565b915050610990565b50610de9565b600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610c03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bfa90613015565b60405180910390fd5b60005b600b80549050811015610de7578273ffffffffffffffffffffffffffffffffffffffff16600b8281548110610c3e57610c3d612e91565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603610dd457600b6001600b80549050610c989190612df1565b81548110610ca957610ca8612e91565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600b8281548110610ce857610ce7612e91565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600b805480610d9a57610d99612f9a565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055610de7565b8080610ddf90612ec0565b915050610c06565b505b5050565b60606007805480602002602001604051908101604052809291908181526020018280548015610e7157602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311610e27575b5050505050905090565b6000610e85611d81565b73ffffffffffffffffffffffffffffffffffffffff16610ea36112b6565b73ffffffffffffffffffffffffffffffffffffffff1614610ef9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef090612e71565b60405180910390fd5b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156110b6576000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060005b6007805490508110156110795760078181548110610fc757610fc6612e91565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611066576007818154811061103857611037612e91565b5b9060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690555b808061107190612ec0565b915050610fa6565b507fb9b02d6ef3069c468ac99865bad0d84ec0cf34671cb26053e5e47d415ae17564826040516110a991906128b9565b60405180910390a1600190505b919050565b6000806110c6611d81565b90506110e78185856110d88589611a33565b6110e29190613035565b611d89565b600191505092915050565b6111036110fd611d81565b82611f81565b50565b61110e611d81565b73ffffffffffffffffffffffffffffffffffffffff1661112c6112b6565b73ffffffffffffffffffffffffffffffffffffffff1614611182576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117990612e71565b60405180910390fd5b80600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611216611d81565b73ffffffffffffffffffffffffffffffffffffffff166112346112b6565b73ffffffffffffffffffffffffffffffffffffffff161461128a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128190612e71565b60405180910390fd5b6112946000612157565b565b6112a8826112a2611d81565b8361221d565b6112b28282611f81565b5050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546112ef90612cd7565b80601f016020809104026020016040519081016040528092919081815260200182805461131b90612cd7565b80156113685780601f1061133d57610100808354040283529160200191611368565b820191906000526020600020905b81548152906001019060200180831161134b57829003601f168201915b5050505050905090565b600081156113ce57600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905061141e565b600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1690505b92915050565b60008061142f611d81565b9050600061143d8286611a33565b905083811015611482576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611479906130fd565b60405180910390fd5b61148f8286868403611d89565b60019250505092915050565b60006114a8336001611372565b806114ba57506114b9836000611372565b5b156114cf576114c983836122a9565b50611532565b60006064600d54846114e19190612d37565b6114eb9190612dc0565b9050611519600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826122a9565b5061152f84828561152a9190612df1565b6122a9565b50505b6001905092915050565b611544611d81565b73ffffffffffffffffffffffffffffffffffffffff166115626112b6565b73ffffffffffffffffffffffffffffffffffffffff16146115b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115af90612e71565b60405180910390fd5b606481111580156115ca575060008110155b611609576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116009061318f565b60405180910390fd5b80600d8190555050565b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000611647611d81565b73ffffffffffffffffffffffffffffffffffffffff166116656112b6565b73ffffffffffffffffffffffffffffffffffffffff16146116bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b290612e71565b60405180910390fd5b60005b8251811015611707576116ea8382815181106116dd576116dc612e91565b5b6020026020010151611aba565b156116f457600191505b80806116ff90612ec0565b9150506116be565b50919050565b6000600d54905090565b61171f611d81565b73ffffffffffffffffffffffffffffffffffffffff1661173d6112b6565b73ffffffffffffffffffffffffffffffffffffffff1614611793576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178a90612e71565b60405180910390fd5b80156118e657600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611826576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181d90613221565b60405180910390fd5b6001600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600a829080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611a2f565b600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611973576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196a906132b3565b60405180910390fd5b6001600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600b829080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000611ac4611d81565b73ffffffffffffffffffffffffffffffffffffffff16611ae26112b6565b73ffffffffffffffffffffffffffffffffffffffff1614611b38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2f90612e71565b60405180910390fd5b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611c80576007829080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507fee71faa2d1e96ac74ee4023d6ffa8abfa43b7648f51e3dbd8ec561823e9df13282604051611c7391906128b9565b60405180910390a1600190505b919050565b611c8d611d81565b73ffffffffffffffffffffffffffffffffffffffff16611cab6112b6565b73ffffffffffffffffffffffffffffffffffffffff1614611d01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf890612e71565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611d70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6790613345565b60405180910390fd5b611d7981612157565b50565b505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611df8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611def906133d7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5e90613469565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611f459190612862565b60405180910390a3505050565b600080611f5d611d81565b9050611f6a85828561221d565b611f758585856122cc565b60019150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611ff0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe7906134fb565b60405180910390fd5b611ffc8260008361254b565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612082576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120799061358d565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282546120d99190612df1565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161213e9190612862565b60405180910390a361215283600084612675565b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006122298484611a33565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146122a35781811015612295576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228c906135f9565b60405180910390fd5b6122a28484848403611d89565b5b50505050565b6000806122b4611d81565b90506122c18185856122cc565b600191505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361233b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123329061368b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036123aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a19061371d565b60405180910390fd5b6123b583838361254b565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561243b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612432906137af565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124ce9190613035565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516125329190612862565b60405180910390a3612545848484612675565b50505050565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156125d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125cf9061381b565b60405180910390fd5b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612665576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265c90613887565b60405180910390fd5b612670838383611d7c565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156126b4578082015181840152602081019050612699565b838111156126c3576000848401525b50505050565b6000601f19601f8301169050919050565b60006126e58261267a565b6126ef8185612685565b93506126ff818560208601612696565b612708816126c9565b840191505092915050565b6000602082019050818103600083015261272d81846126da565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061277482612749565b9050919050565b61278481612769565b811461278f57600080fd5b50565b6000813590506127a18161277b565b92915050565b6000819050919050565b6127ba816127a7565b81146127c557600080fd5b50565b6000813590506127d7816127b1565b92915050565b600080604083850312156127f4576127f361273f565b5b600061280285828601612792565b9250506020612813858286016127c8565b9150509250929050565b60008115159050919050565b6128328161281d565b82525050565b600060208201905061284d6000830184612829565b92915050565b61285c816127a7565b82525050565b60006020820190506128776000830184612853565b92915050565b6000602082840312156128935761289261273f565b5b60006128a1848285016127c8565b91505092915050565b6128b381612769565b82525050565b60006020820190506128ce60008301846128aa565b92915050565b6000806000606084860312156128ed576128ec61273f565b5b60006128fb86828701612792565b935050602061290c86828701612792565b925050604061291d868287016127c8565b9150509250925092565b600060ff82169050919050565b61293d81612927565b82525050565b60006020820190506129586000830184612934565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61299b826126c9565b810181811067ffffffffffffffff821117156129ba576129b9612963565b5b80604052505050565b60006129cd612735565b90506129d98282612992565b919050565b600067ffffffffffffffff8211156129f9576129f8612963565b5b602082029050602081019050919050565b600080fd5b6000612a22612a1d846129de565b6129c3565b90508083825260208201905060208402830185811115612a4557612a44612a0a565b5b835b81811015612a6e5780612a5a8882612792565b845260208401935050602081019050612a47565b5050509392505050565b600082601f830112612a8d57612a8c61295e565b5b8135612a9d848260208601612a0f565b91505092915050565b600060208284031215612abc57612abb61273f565b5b600082013567ffffffffffffffff811115612ada57612ad9612744565b5b612ae684828501612a78565b91505092915050565b612af88161281d565b8114612b0357600080fd5b50565b600081359050612b1581612aef565b92915050565b60008060408385031215612b3257612b3161273f565b5b6000612b4085828601612792565b9250506020612b5185828601612b06565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612b9081612769565b82525050565b6000612ba28383612b87565b60208301905092915050565b6000602082019050919050565b6000612bc682612b5b565b612bd08185612b66565b9350612bdb83612b77565b8060005b83811015612c0c578151612bf38882612b96565b9750612bfe83612bae565b925050600181019050612bdf565b5085935050505092915050565b60006020820190508181036000830152612c338184612bbb565b905092915050565b600060208284031215612c5157612c5061273f565b5b6000612c5f84828501612792565b91505092915050565b60008060408385031215612c7f57612c7e61273f565b5b6000612c8d85828601612792565b9250506020612c9e85828601612792565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612cef57607f821691505b602082108103612d0257612d01612ca8565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612d42826127a7565b9150612d4d836127a7565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612d8657612d85612d08565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612dcb826127a7565b9150612dd6836127a7565b925082612de657612de5612d91565b5b828204905092915050565b6000612dfc826127a7565b9150612e07836127a7565b925082821015612e1a57612e19612d08565b5b828203905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612e5b602083612685565b9150612e6682612e25565b602082019050919050565b60006020820190508181036000830152612e8a81612e4e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000612ecb826127a7565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612efd57612efc612d08565b5b600182019050919050565b7f53656e646572206163636f756e7420697320616c726561647920696e636c756460008201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b6000612f64602283612685565b9150612f6f82612f08565b604082019050919050565b60006020820190508181036000830152612f9381612f57565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4163636f756e7420697320616c726561647920696e636c756465640000000000600082015250565b6000612fff601b83612685565b915061300a82612fc9565b602082019050919050565b6000602082019050818103600083015261302e81612ff2565b9050919050565b6000613040826127a7565b915061304b836127a7565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156130805761307f612d08565b5b828201905092915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006130e7602583612685565b91506130f28261308b565b604082019050919050565b60006020820190508181036000830152613116816130da565b9050919050565b7f526174652073686f756c64206265206265206265747765656e203020616e642060008201527f3130300000000000000000000000000000000000000000000000000000000000602082015250565b6000613179602383612685565b91506131848261311d565b604082019050919050565b600060208201905081810360008301526131a88161316c565b9050919050565b7f53656e646572206163636f756e7420697320616c7265616479206578636c756460008201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b600061320b602283612685565b9150613216826131af565b604082019050919050565b6000602082019050818103600083015261323a816131fe565b9050919050565b7f5265636569766572206163636f756e7420697320616c7265616479206578636c60008201527f7564656400000000000000000000000000000000000000000000000000000000602082015250565b600061329d602483612685565b91506132a882613241565b604082019050919050565b600060208201905081810360008301526132cc81613290565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061332f602683612685565b915061333a826132d3565b604082019050919050565b6000602082019050818103600083015261335e81613322565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006133c1602483612685565b91506133cc82613365565b604082019050919050565b600060208201905081810360008301526133f0816133b4565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613453602283612685565b915061345e826133f7565b604082019050919050565b6000602082019050818103600083015261348281613446565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006134e5602183612685565b91506134f082613489565b604082019050919050565b60006020820190508181036000830152613514816134d8565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b6000613577602283612685565b91506135828261351b565b604082019050919050565b600060208201905081810360008301526135a68161356a565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b60006135e3601d83612685565b91506135ee826135ad565b602082019050919050565b60006020820190508181036000830152613612816135d6565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613675602583612685565b915061368082613619565b604082019050919050565b600060208201905081810360008301526136a481613668565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613707602383612685565b9150613712826136ab565b604082019050919050565b60006020820190508181036000830152613736816136fa565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000613799602683612685565b91506137a48261373d565b604082019050919050565b600060208201905081810360008301526137c88161378c565b9050919050565b7f46726f6d206164647265737320697320626c61636b6c69737465640000000000600082015250565b6000613805601b83612685565b9150613810826137cf565b602082019050919050565b60006020820190508181036000830152613834816137f8565b9050919050565b7f546f206164647265737320697320626c61636b6c697374656400000000000000600082015250565b6000613871601983612685565b915061387c8261383b565b602082019050919050565b600060208201905081810360008301526138a081613864565b905091905056fea2646970667358221220de62304a45cefd1d0b0893b741fed3d248e22279b7742fd89ca8f89b40a084c964736f6c634300080e0033
Deployed ByteCode Sourcemap
26952:4683:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14631:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16982:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15751:108;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6103:35;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28526:613;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29147:101;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8411:268;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30592:1040;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8745:101;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7756:403;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18467:238;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26015:91;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29708:127;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15922;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4942:103;;;:::i;:::-;;26425:164;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4291:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14850:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29843:236;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19208:436;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27954:564;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29367:216;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29591:109;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7278:240;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29256:103;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30087:497;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16511:151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6787:262;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5200:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14631:100;14685:13;14718:5;14711:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14631:100;:::o;16982:201::-;17065:4;17082:13;17098:12;:10;:12::i;:::-;17082:28;;17121:32;17130:5;17137:7;17146:6;17121:8;:32::i;:::-;17171:4;17164:11;;;16982:201;;;;:::o;15751:108::-;15812:7;15839:12;;15832:19;;15751:108;:::o;6103:35::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;28526:613::-;28644:12;28673:22;28684:4;28690;28673:10;:22::i;:::-;:47;;;;28699:21;28710:2;28714:5;28699:10;:21::i;:::-;28673:47;28669:443;;;28740:36;28759:4;28765:2;28769:6;28740:18;:36::i;:::-;28733:43;;;;28669:443;28843:23;26875:3;28879:17;;28870:6;:26;;;;:::i;:::-;28869:45;;;;:::i;:::-;28843:71;;28925:63;28944:4;28950:20;;;;;;;;;;;28972:15;28925:18;:63::i;:::-;;29048:54;29067:4;29073:2;29086:15;29077:6;:24;;;;:::i;:::-;29048:18;:54::i;:::-;;28792:320;29127:4;29120:11;;28526:613;;;;;;:::o;29147:101::-;29205:5;26688:1;29221:19;;29147:101;:::o;8411:268::-;8514:12;4522;:10;:12::i;:::-;4511:23;;:7;:5;:7::i;:::-;:23;;;4503:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8543:9:::1;8538:136;8562:5;:12;8558:1;:16;8538:136;;;8594:36;8621:5;8627:1;8621:8;;;;;;;;:::i;:::-;;;;;;;;8594:26;:36::i;:::-;8590:77;;;8653:4;8643:14;;8590:77;8576:3;;;;;:::i;:::-;;;;8538:136;;;;8411:268:::0;;;:::o;30592:1040::-;4522:12;:10;:12::i;:::-;4511:23;;:7;:5;:7::i;:::-;:23;;;4503:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30684:8:::1;30680:937;;;30715:17;:26;30733:7;30715:26;;;;;;;;;;;;;;;;;;;;;;;;;30707:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;30798:9;30793:344;30817:15;:22;;;;30813:1;:26;30793:344;;;30889:7;30867:29;;:15;30883:1;30867:18;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:29;;::::0;30863:261:::1;;30940:15;30981:1;30956:15;:22;;;;:26;;;;:::i;:::-;30940:43;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;30919:15;30935:1;30919:18;;;;;;;;:::i;:::-;;;;;;;;;;:64;;;;;;;;;;;;;;;;;;31033:5;31004:17;:26;31022:7;31004:26;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;31059:15;:21;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;31101:5;;30863:261;30841:3;;;;;:::i;:::-;;;;30793:344;;;;30680:937;;;31175:19;:28;31195:7;31175:28;;;;;;;;;;;;;;;;;;;;;;;;;31167:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31253:9;31248:358;31272:17;:24;;;;31268:1;:28;31248:358;;;31348:7;31324:31;;:17;31342:1;31324:20;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:31;;::::0;31320:273:::1;;31401:17;31446:1;31419:17;:24;;;;:28;;;;:::i;:::-;31401:47;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;31378:17;31396:1;31378:20;;;;;;;;:::i;:::-;;;;;;;;;;:70;;;;;;;;;;;;;;;;;;31500:5;31469:19;:28;31489:7;31469:28;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;31526:17;:23;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;31570:5;;31320:273;31298:3;;;;;:::i;:::-;;;;31248:358;;;;30680:937;30592:1040:::0;;:::o;8745:101::-;8790:16;8822:18;8815:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8745:101;:::o;7756:403::-;7832:12;4522;:10;:12::i;:::-;4511:23;;:7;:5;:7::i;:::-;:23;;;4503:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7857:9:::1;:15;7867:4;7857:15;;;;;;;;;;;;;;;;;;;;;;;;;7853:301;;;7901:5;7883:9;:15;7893:4;7883:15;;;;;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;7920:9;7915:164;7939:18;:25;;;;7935:1;:29;7915:164;;;7994:18;8013:1;7994:21;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;7986:29;;:4;:29;;::::0;7982:88:::1;;8037:18;8056:1;8037:21;;;;;;;;:::i;:::-;;;;;;;;;;8030:28;;;;;;;;;;;7982:88;7966:3;;;;;:::i;:::-;;;;7915:164;;;;8092:31;8118:4;8092:31;;;;;;:::i;:::-;;;;;;;;8142:4;8132:14;;7853:301;7756:403:::0;;;:::o;18467:238::-;18555:4;18572:13;18588:12;:10;:12::i;:::-;18572:28;;18611:64;18620:5;18627:7;18664:10;18636:25;18646:5;18653:7;18636:9;:25::i;:::-;:38;;;;:::i;:::-;18611:8;:64::i;:::-;18693:4;18686:11;;;18467:238;;;;:::o;26015:91::-;26071:27;26077:12;:10;:12::i;:::-;26091:6;26071:5;:27::i;:::-;26015:91;:::o;29708:127::-;4522:12;:10;:12::i;:::-;4511:23;;:7;:5;:7::i;:::-;:23;;;4503:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29820:7:::1;29797:20;;:30;;;;;;;;;;;;;;;;;;29708:127:::0;:::o;15922:::-;15996:7;16023:9;:18;16033:7;16023:18;;;;;;;;;;;;;;;;16016:25;;15922:127;;;:::o;4942:103::-;4522:12;:10;:12::i;:::-;4511:23;;:7;:5;:7::i;:::-;:23;;;4503:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5007:30:::1;5034:1;5007:18;:30::i;:::-;4942:103::o:0;26425:164::-;26502:46;26518:7;26527:12;:10;:12::i;:::-;26541:6;26502:15;:46::i;:::-;26559:22;26565:7;26574:6;26559:5;:22::i;:::-;26425:164;;:::o;4291:87::-;4337:7;4364:6;;;;;;;;;;;4357:13;;4291:87;:::o;14850:104::-;14906:13;14939:7;14932:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14850:104;:::o;29843:236::-;29916:4;29937:8;29933:138;;;29967:17;:26;29985:7;29967:26;;;;;;;;;;;;;;;;;;;;;;;;;29960:33;;;;29933:138;30031:19;:28;30051:7;30031:28;;;;;;;;;;;;;;;;;;;;;;;;;30024:35;;29843:236;;;;;:::o;19208:436::-;19301:4;19318:13;19334:12;:10;:12::i;:::-;19318:28;;19357:24;19384:25;19394:5;19401:7;19384:9;:25::i;:::-;19357:52;;19448:15;19428:16;:35;;19420:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;19541:60;19550:5;19557:7;19585:15;19566:16;:34;19541:8;:60::i;:::-;19632:4;19625:11;;;;19208:436;;;;:::o;27954:564::-;28046:12;28079:28;28090:10;28102:4;28079:10;:28::i;:::-;:53;;;;28111:21;28122:2;28126:5;28111:10;:21::i;:::-;28079:53;28075:416;;;28145:26;28160:2;28164:6;28145:14;:26::i;:::-;;28075:416;;;28238:23;26875:3;28274:17;;28265:6;:26;;;;:::i;:::-;28264:45;;;;:::i;:::-;28238:71;;28320:53;28335:20;;;;;;;;;;;28357:15;28320:14;:53::i;:::-;;28433:44;28448:2;28461:15;28452:6;:24;;;;:::i;:::-;28433:14;:44::i;:::-;;28187:304;28075:416;28506:4;28499:11;;27954:564;;;;:::o;29367:216::-;4522:12;:10;:12::i;:::-;4511:23;;:7;:5;:7::i;:::-;:23;;;4503:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26875:3:::1;29452:4;:22;;29451:39;;;;;29488:1;29480:4;:9;;29451:39;29442:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;29571:4;29551:17;:24;;;;29367:216:::0;:::o;29591:109::-;29645:7;29672:20;;;;;;;;;;;29665:27;;29591:109;:::o;7278:240::-;7361:12;4522;:10;:12::i;:::-;4511:23;;:7;:5;:7::i;:::-;:23;;;4503:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7387:9:::1;7382:131;7406:5;:12;7402:1;:16;7382:131;;;7438:31;7460:5;7466:1;7460:8;;;;;;;;:::i;:::-;;;;;;;;7438:21;:31::i;:::-;7434:72;;;7492:4;7482:14;;7434:72;7420:3;;;;;:::i;:::-;;;;7382:131;;;;7278:240:::0;;;:::o;29256:103::-;29307:7;29334:17;;29327:24;;29256:103;:::o;30087:497::-;4522:12;:10;:12::i;:::-;4511:23;;:7;:5;:7::i;:::-;:23;;;4503:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30179:8:::1;30175:402;;;30211:17;:26;30229:7;30211:26;;;;;;;;;;;;;;;;;;;;;;;;;30210:27;30202:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;30318:4;30289:17;:26;30307:7;30289:26;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;30335:15;30356:7;30335:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30175:402;;;30404:19;:28;30424:7;30404:28;;;;;;;;;;;;;;;;;;;;;;;;;30403:29;30395:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;30517:4;30486:19;:28;30506:7;30486:28;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;30534:17;30557:7;30534:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30175:402;30087:497:::0;;:::o;16511:151::-;16600:7;16627:11;:18;16639:5;16627:18;;;;;;;;;;;;;;;:27;16646:7;16627:27;;;;;;;;;;;;;;;;16620:34;;16511:151;;;;:::o;6787:262::-;6858:12;4522;:10;:12::i;:::-;4511:23;;:7;:5;:7::i;:::-;:23;;;4503:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6884:9:::1;:15;6894:4;6884:15;;;;;;;;;;;;;;;;;;;;;;;;;6879:165;;6910:18;6934:4;6910:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6966:4;6948:9;:15;6958:4;6948:15;;;;;;;;;;;;;;;;:22;;;;;;;;;;;;;;;;;;6984:29;7008:4;6984:29;;;;;;:::i;:::-;;;;;;;;7032:4;7022:14;;6879:165;6787:262:::0;;;:::o;5200:201::-;4522:12;:10;:12::i;:::-;4511:23;;:7;:5;:7::i;:::-;:23;;;4503:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5309:1:::1;5289:22;;:8;:22;;::::0;5281:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;5365:28;5384:8;5365:18;:28::i;:::-;5200:201:::0;:::o;24566:125::-;;;;:::o;685:98::-;738:7;765:10;758:17;;685:98;:::o;22842:380::-;22995:1;22978:19;;:5;:19;;;22970:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23076:1;23057:21;;:7;:21;;;23049:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23160:6;23130:11;:18;23142:5;23130:18;;;;;;;;;;;;;;;:27;23149:7;23130:27;;;;;;;;;;;;;;;:36;;;;23198:7;23182:32;;23191:5;23182:32;;;23207:6;23182:32;;;;;;:::i;:::-;;;;;;;;22842:380;;;:::o;17763:295::-;17894:4;17911:15;17929:12;:10;:12::i;:::-;17911:30;;17952:38;17968:4;17974:7;17983:6;17952:15;:38::i;:::-;18001:27;18011:4;18017:2;18021:6;18001:9;:27::i;:::-;18046:4;18039:11;;;17763:295;;;;;:::o;21813:591::-;21916:1;21897:21;;:7;:21;;;21889:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21969:49;21990:7;22007:1;22011:6;21969:20;:49::i;:::-;22031:22;22056:9;:18;22066:7;22056:18;;;;;;;;;;;;;;;;22031:43;;22111:6;22093:14;:24;;22085:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;22230:6;22213:14;:23;22192:9;:18;22202:7;22192:18;;;;;;;;;;;;;;;:44;;;;22274:6;22258:12;;:22;;;;;;;:::i;:::-;;;;;;;;22324:1;22298:37;;22307:7;22298:37;;;22328:6;22298:37;;;;;;:::i;:::-;;;;;;;;22348:48;22368:7;22385:1;22389:6;22348:19;:48::i;:::-;21878:526;21813:591;;:::o;5561:191::-;5635:16;5654:6;;;;;;;;;;;5635:25;;5680:8;5671:6;;:17;;;;;;;;;;;;;;;;;;5735:8;5704:40;;5725:8;5704:40;;;;;;;;;;;;5624:128;5561:191;:::o;23513:453::-;23648:24;23675:25;23685:5;23692:7;23675:9;:25::i;:::-;23648:52;;23735:17;23715:16;:37;23711:248;;23797:6;23777:16;:26;;23769:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23881:51;23890:5;23897:7;23925:6;23906:16;:25;23881:8;:51::i;:::-;23711:248;23637:329;23513:453;;;:::o;16255:193::-;16334:4;16351:13;16367:12;:10;:12::i;:::-;16351:28;;16390;16400:5;16407:2;16411:6;16390:9;:28::i;:::-;16436:4;16429:11;;;16255:193;;;;:::o;20123:671::-;20270:1;20254:18;;:4;:18;;;20246:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20347:1;20333:16;;:2;:16;;;20325:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;20402:38;20423:4;20429:2;20433:6;20402:20;:38::i;:::-;20453:19;20475:9;:15;20485:4;20475:15;;;;;;;;;;;;;;;;20453:37;;20524:6;20509:11;:21;;20501:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;20641:6;20627:11;:20;20609:9;:15;20619:4;20609:15;;;;;;;;;;;;;;;:38;;;;20686:6;20669:9;:13;20679:2;20669:13;;;;;;;;;;;;;;;;:23;;;;;;;:::i;:::-;;;;;;;;20725:2;20710:26;;20719:4;20710:26;;;20729:6;20710:26;;;;;;:::i;:::-;;;;;;;;20749:37;20769:4;20775:2;20779:6;20749:19;:37::i;:::-;20235:559;20123:671;;;:::o;27509:437::-;27767:9;:15;27777:4;27767:15;;;;;;;;;;;;;;;;;;;;;;;;;27766:16;27758:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;27834:9;:13;27844:2;27834:13;;;;;;;;;;;;;;;;;;;;;;;;;27833:14;27825:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;27894:44;27921:4;27927:2;27931:6;27894:26;:44::i;:::-;27509:437;;;:::o;25295:124::-;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1397:75::-;1430:6;1463:2;1457:9;1447:19;;1397:75;:::o;1478:117::-;1587:1;1584;1577:12;1601:117;1710:1;1707;1700:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:118::-;3581:24;3599:5;3581:24;:::i;:::-;3576:3;3569:37;3494:118;;:::o;3618:222::-;3711:4;3749:2;3738:9;3734:18;3726:26;;3762:71;3830:1;3819:9;3815:17;3806:6;3762:71;:::i;:::-;3618:222;;;;:::o;3846:329::-;3905:6;3954:2;3942:9;3933:7;3929:23;3925:32;3922:119;;;3960:79;;:::i;:::-;3922:119;4080:1;4105:53;4150:7;4141:6;4130:9;4126:22;4105:53;:::i;:::-;4095:63;;4051:117;3846:329;;;;:::o;4181:118::-;4268:24;4286:5;4268:24;:::i;:::-;4263:3;4256:37;4181:118;;:::o;4305:222::-;4398:4;4436:2;4425:9;4421:18;4413:26;;4449:71;4517:1;4506:9;4502:17;4493:6;4449:71;:::i;:::-;4305:222;;;;:::o;4533:619::-;4610:6;4618;4626;4675:2;4663:9;4654:7;4650:23;4646:32;4643:119;;;4681:79;;:::i;:::-;4643:119;4801:1;4826:53;4871:7;4862:6;4851:9;4847:22;4826:53;:::i;:::-;4816:63;;4772:117;4928:2;4954:53;4999:7;4990:6;4979:9;4975:22;4954:53;:::i;:::-;4944:63;;4899:118;5056:2;5082:53;5127:7;5118:6;5107:9;5103:22;5082:53;:::i;:::-;5072:63;;5027:118;4533:619;;;;;:::o;5158:86::-;5193:7;5233:4;5226:5;5222:16;5211:27;;5158:86;;;:::o;5250:112::-;5333:22;5349:5;5333:22;:::i;:::-;5328:3;5321:35;5250:112;;:::o;5368:214::-;5457:4;5495:2;5484:9;5480:18;5472:26;;5508:67;5572:1;5561:9;5557:17;5548:6;5508:67;:::i;:::-;5368:214;;;;:::o;5588:117::-;5697:1;5694;5687:12;5711:180;5759:77;5756:1;5749:88;5856:4;5853:1;5846:15;5880:4;5877:1;5870:15;5897:281;5980:27;6002:4;5980:27;:::i;:::-;5972:6;5968:40;6110:6;6098:10;6095:22;6074:18;6062:10;6059:34;6056:62;6053:88;;;6121:18;;:::i;:::-;6053:88;6161:10;6157:2;6150:22;5940:238;5897:281;;:::o;6184:129::-;6218:6;6245:20;;:::i;:::-;6235:30;;6274:33;6302:4;6294:6;6274:33;:::i;:::-;6184:129;;;:::o;6319:311::-;6396:4;6486:18;6478:6;6475:30;6472:56;;;6508:18;;:::i;:::-;6472:56;6558:4;6550:6;6546:17;6538:25;;6618:4;6612;6608:15;6600:23;;6319:311;;;:::o;6636:117::-;6745:1;6742;6735:12;6776:710;6872:5;6897:81;6913:64;6970:6;6913:64;:::i;:::-;6897:81;:::i;:::-;6888:90;;6998:5;7027:6;7020:5;7013:21;7061:4;7054:5;7050:16;7043:23;;7114:4;7106:6;7102:17;7094:6;7090:30;7143:3;7135:6;7132:15;7129:122;;;7162:79;;:::i;:::-;7129:122;7277:6;7260:220;7294:6;7289:3;7286:15;7260:220;;;7369:3;7398:37;7431:3;7419:10;7398:37;:::i;:::-;7393:3;7386:50;7465:4;7460:3;7456:14;7449:21;;7336:144;7320:4;7315:3;7311:14;7304:21;;7260:220;;;7264:21;6878:608;;6776:710;;;;;:::o;7509:370::-;7580:5;7629:3;7622:4;7614:6;7610:17;7606:27;7596:122;;7637:79;;:::i;:::-;7596:122;7754:6;7741:20;7779:94;7869:3;7861:6;7854:4;7846:6;7842:17;7779:94;:::i;:::-;7770:103;;7586:293;7509:370;;;;:::o;7885:539::-;7969:6;8018:2;8006:9;7997:7;7993:23;7989:32;7986:119;;;8024:79;;:::i;:::-;7986:119;8172:1;8161:9;8157:17;8144:31;8202:18;8194:6;8191:30;8188:117;;;8224:79;;:::i;:::-;8188:117;8329:78;8399:7;8390:6;8379:9;8375:22;8329:78;:::i;:::-;8319:88;;8115:302;7885:539;;;;:::o;8430:116::-;8500:21;8515:5;8500:21;:::i;:::-;8493:5;8490:32;8480:60;;8536:1;8533;8526:12;8480:60;8430:116;:::o;8552:133::-;8595:5;8633:6;8620:20;8611:29;;8649:30;8673:5;8649:30;:::i;:::-;8552:133;;;;:::o;8691:468::-;8756:6;8764;8813:2;8801:9;8792:7;8788:23;8784:32;8781:119;;;8819:79;;:::i;:::-;8781:119;8939:1;8964:53;9009:7;9000:6;8989:9;8985:22;8964:53;:::i;:::-;8954:63;;8910:117;9066:2;9092:50;9134:7;9125:6;9114:9;9110:22;9092:50;:::i;:::-;9082:60;;9037:115;8691:468;;;;;:::o;9165:114::-;9232:6;9266:5;9260:12;9250:22;;9165:114;;;:::o;9285:184::-;9384:11;9418:6;9413:3;9406:19;9458:4;9453:3;9449:14;9434:29;;9285:184;;;;:::o;9475:132::-;9542:4;9565:3;9557:11;;9595:4;9590:3;9586:14;9578:22;;9475:132;;;:::o;9613:108::-;9690:24;9708:5;9690:24;:::i;:::-;9685:3;9678:37;9613:108;;:::o;9727:179::-;9796:10;9817:46;9859:3;9851:6;9817:46;:::i;:::-;9895:4;9890:3;9886:14;9872:28;;9727:179;;;;:::o;9912:113::-;9982:4;10014;10009:3;10005:14;9997:22;;9912:113;;;:::o;10061:732::-;10180:3;10209:54;10257:5;10209:54;:::i;:::-;10279:86;10358:6;10353:3;10279:86;:::i;:::-;10272:93;;10389:56;10439:5;10389:56;:::i;:::-;10468:7;10499:1;10484:284;10509:6;10506:1;10503:13;10484:284;;;10585:6;10579:13;10612:63;10671:3;10656:13;10612:63;:::i;:::-;10605:70;;10698:60;10751:6;10698:60;:::i;:::-;10688:70;;10544:224;10531:1;10528;10524:9;10519:14;;10484:284;;;10488:14;10784:3;10777:10;;10185:608;;;10061:732;;;;:::o;10799:373::-;10942:4;10980:2;10969:9;10965:18;10957:26;;11029:9;11023:4;11019:20;11015:1;11004:9;11000:17;10993:47;11057:108;11160:4;11151:6;11057:108;:::i;:::-;11049:116;;10799:373;;;;:::o;11178:329::-;11237:6;11286:2;11274:9;11265:7;11261:23;11257:32;11254:119;;;11292:79;;:::i;:::-;11254:119;11412:1;11437:53;11482:7;11473:6;11462:9;11458:22;11437:53;:::i;:::-;11427:63;;11383:117;11178:329;;;;:::o;11513:474::-;11581:6;11589;11638:2;11626:9;11617:7;11613:23;11609:32;11606:119;;;11644:79;;:::i;:::-;11606:119;11764:1;11789:53;11834:7;11825:6;11814:9;11810:22;11789:53;:::i;:::-;11779:63;;11735:117;11891:2;11917:53;11962:7;11953:6;11942:9;11938:22;11917:53;:::i;:::-;11907:63;;11862:118;11513:474;;;;;:::o;11993:180::-;12041:77;12038:1;12031:88;12138:4;12135:1;12128:15;12162:4;12159:1;12152:15;12179:320;12223:6;12260:1;12254:4;12250:12;12240:22;;12307:1;12301:4;12297:12;12328:18;12318:81;;12384:4;12376:6;12372:17;12362:27;;12318:81;12446:2;12438:6;12435:14;12415:18;12412:38;12409:84;;12465:18;;:::i;:::-;12409:84;12230:269;12179:320;;;:::o;12505:180::-;12553:77;12550:1;12543:88;12650:4;12647:1;12640:15;12674:4;12671:1;12664:15;12691:348;12731:7;12754:20;12772:1;12754:20;:::i;:::-;12749:25;;12788:20;12806:1;12788:20;:::i;:::-;12783:25;;12976:1;12908:66;12904:74;12901:1;12898:81;12893:1;12886:9;12879:17;12875:105;12872:131;;;12983:18;;:::i;:::-;12872:131;13031:1;13028;13024:9;13013:20;;12691:348;;;;:::o;13045:180::-;13093:77;13090:1;13083:88;13190:4;13187:1;13180:15;13214:4;13211:1;13204:15;13231:185;13271:1;13288:20;13306:1;13288:20;:::i;:::-;13283:25;;13322:20;13340:1;13322:20;:::i;:::-;13317:25;;13361:1;13351:35;;13366:18;;:::i;:::-;13351:35;13408:1;13405;13401:9;13396:14;;13231:185;;;;:::o;13422:191::-;13462:4;13482:20;13500:1;13482:20;:::i;:::-;13477:25;;13516:20;13534:1;13516:20;:::i;:::-;13511:25;;13555:1;13552;13549:8;13546:34;;;13560:18;;:::i;:::-;13546:34;13605:1;13602;13598:9;13590:17;;13422:191;;;;:::o;13619:182::-;13759:34;13755:1;13747:6;13743:14;13736:58;13619:182;:::o;13807:366::-;13949:3;13970:67;14034:2;14029:3;13970:67;:::i;:::-;13963:74;;14046:93;14135:3;14046:93;:::i;:::-;14164:2;14159:3;14155:12;14148:19;;13807:366;;;:::o;14179:419::-;14345:4;14383:2;14372:9;14368:18;14360:26;;14432:9;14426:4;14422:20;14418:1;14407:9;14403:17;14396:47;14460:131;14586:4;14460:131;:::i;:::-;14452:139;;14179:419;;;:::o;14604:180::-;14652:77;14649:1;14642:88;14749:4;14746:1;14739:15;14773:4;14770:1;14763:15;14790:233;14829:3;14852:24;14870:5;14852:24;:::i;:::-;14843:33;;14898:66;14891:5;14888:77;14885:103;;14968:18;;:::i;:::-;14885:103;15015:1;15008:5;15004:13;14997:20;;14790:233;;;:::o;15029:221::-;15169:34;15165:1;15157:6;15153:14;15146:58;15238:4;15233:2;15225:6;15221:15;15214:29;15029:221;:::o;15256:366::-;15398:3;15419:67;15483:2;15478:3;15419:67;:::i;:::-;15412:74;;15495:93;15584:3;15495:93;:::i;:::-;15613:2;15608:3;15604:12;15597:19;;15256:366;;;:::o;15628:419::-;15794:4;15832:2;15821:9;15817:18;15809:26;;15881:9;15875:4;15871:20;15867:1;15856:9;15852:17;15845:47;15909:131;16035:4;15909:131;:::i;:::-;15901:139;;15628:419;;;:::o;16053:180::-;16101:77;16098:1;16091:88;16198:4;16195:1;16188:15;16222:4;16219:1;16212:15;16239:177;16379:29;16375:1;16367:6;16363:14;16356:53;16239:177;:::o;16422:366::-;16564:3;16585:67;16649:2;16644:3;16585:67;:::i;:::-;16578:74;;16661:93;16750:3;16661:93;:::i;:::-;16779:2;16774:3;16770:12;16763:19;;16422:366;;;:::o;16794:419::-;16960:4;16998:2;16987:9;16983:18;16975:26;;17047:9;17041:4;17037:20;17033:1;17022:9;17018:17;17011:47;17075:131;17201:4;17075:131;:::i;:::-;17067:139;;16794:419;;;:::o;17219:305::-;17259:3;17278:20;17296:1;17278:20;:::i;:::-;17273:25;;17312:20;17330:1;17312:20;:::i;:::-;17307:25;;17466:1;17398:66;17394:74;17391:1;17388:81;17385:107;;;17472:18;;:::i;:::-;17385:107;17516:1;17513;17509:9;17502:16;;17219:305;;;;:::o;17530:224::-;17670:34;17666:1;17658:6;17654:14;17647:58;17739:7;17734:2;17726:6;17722:15;17715:32;17530:224;:::o;17760:366::-;17902:3;17923:67;17987:2;17982:3;17923:67;:::i;:::-;17916:74;;17999:93;18088:3;17999:93;:::i;:::-;18117:2;18112:3;18108:12;18101:19;;17760:366;;;:::o;18132:419::-;18298:4;18336:2;18325:9;18321:18;18313:26;;18385:9;18379:4;18375:20;18371:1;18360:9;18356:17;18349:47;18413:131;18539:4;18413:131;:::i;:::-;18405:139;;18132:419;;;:::o;18557:222::-;18697:34;18693:1;18685:6;18681:14;18674:58;18766:5;18761:2;18753:6;18749:15;18742:30;18557:222;:::o;18785:366::-;18927:3;18948:67;19012:2;19007:3;18948:67;:::i;:::-;18941:74;;19024:93;19113:3;19024:93;:::i;:::-;19142:2;19137:3;19133:12;19126:19;;18785:366;;;:::o;19157:419::-;19323:4;19361:2;19350:9;19346:18;19338:26;;19410:9;19404:4;19400:20;19396:1;19385:9;19381:17;19374:47;19438:131;19564:4;19438:131;:::i;:::-;19430:139;;19157:419;;;:::o;19582:221::-;19722:34;19718:1;19710:6;19706:14;19699:58;19791:4;19786:2;19778:6;19774:15;19767:29;19582:221;:::o;19809:366::-;19951:3;19972:67;20036:2;20031:3;19972:67;:::i;:::-;19965:74;;20048:93;20137:3;20048:93;:::i;:::-;20166:2;20161:3;20157:12;20150:19;;19809:366;;;:::o;20181:419::-;20347:4;20385:2;20374:9;20370:18;20362:26;;20434:9;20428:4;20424:20;20420:1;20409:9;20405:17;20398:47;20462:131;20588:4;20462:131;:::i;:::-;20454:139;;20181:419;;;:::o;20606:223::-;20746:34;20742:1;20734:6;20730:14;20723:58;20815:6;20810:2;20802:6;20798:15;20791:31;20606:223;:::o;20835:366::-;20977:3;20998:67;21062:2;21057:3;20998:67;:::i;:::-;20991:74;;21074:93;21163:3;21074:93;:::i;:::-;21192:2;21187:3;21183:12;21176:19;;20835:366;;;:::o;21207:419::-;21373:4;21411:2;21400:9;21396:18;21388:26;;21460:9;21454:4;21450:20;21446:1;21435:9;21431:17;21424:47;21488:131;21614:4;21488:131;:::i;:::-;21480:139;;21207:419;;;:::o;21632:225::-;21772:34;21768:1;21760:6;21756:14;21749:58;21841:8;21836:2;21828:6;21824:15;21817:33;21632:225;:::o;21863:366::-;22005:3;22026:67;22090:2;22085:3;22026:67;:::i;:::-;22019:74;;22102:93;22191:3;22102:93;:::i;:::-;22220:2;22215:3;22211:12;22204:19;;21863:366;;;:::o;22235:419::-;22401:4;22439:2;22428:9;22424:18;22416:26;;22488:9;22482:4;22478:20;22474:1;22463:9;22459:17;22452:47;22516:131;22642:4;22516:131;:::i;:::-;22508:139;;22235:419;;;:::o;22660:223::-;22800:34;22796:1;22788:6;22784:14;22777:58;22869:6;22864:2;22856:6;22852:15;22845:31;22660:223;:::o;22889:366::-;23031:3;23052:67;23116:2;23111:3;23052:67;:::i;:::-;23045:74;;23128:93;23217:3;23128:93;:::i;:::-;23246:2;23241:3;23237:12;23230:19;;22889:366;;;:::o;23261:419::-;23427:4;23465:2;23454:9;23450:18;23442:26;;23514:9;23508:4;23504:20;23500:1;23489:9;23485:17;23478:47;23542:131;23668:4;23542:131;:::i;:::-;23534:139;;23261:419;;;:::o;23686:221::-;23826:34;23822:1;23814:6;23810:14;23803:58;23895:4;23890:2;23882:6;23878:15;23871:29;23686:221;:::o;23913:366::-;24055:3;24076:67;24140:2;24135:3;24076:67;:::i;:::-;24069:74;;24152:93;24241:3;24152:93;:::i;:::-;24270:2;24265:3;24261:12;24254:19;;23913:366;;;:::o;24285:419::-;24451:4;24489:2;24478:9;24474:18;24466:26;;24538:9;24532:4;24528:20;24524:1;24513:9;24509:17;24502:47;24566:131;24692:4;24566:131;:::i;:::-;24558:139;;24285:419;;;:::o;24710:220::-;24850:34;24846:1;24838:6;24834:14;24827:58;24919:3;24914:2;24906:6;24902:15;24895:28;24710:220;:::o;24936:366::-;25078:3;25099:67;25163:2;25158:3;25099:67;:::i;:::-;25092:74;;25175:93;25264:3;25175:93;:::i;:::-;25293:2;25288:3;25284:12;25277:19;;24936:366;;;:::o;25308:419::-;25474:4;25512:2;25501:9;25497:18;25489:26;;25561:9;25555:4;25551:20;25547:1;25536:9;25532:17;25525:47;25589:131;25715:4;25589:131;:::i;:::-;25581:139;;25308:419;;;:::o;25733:221::-;25873:34;25869:1;25861:6;25857:14;25850:58;25942:4;25937:2;25929:6;25925:15;25918:29;25733:221;:::o;25960:366::-;26102:3;26123:67;26187:2;26182:3;26123:67;:::i;:::-;26116:74;;26199:93;26288:3;26199:93;:::i;:::-;26317:2;26312:3;26308:12;26301:19;;25960:366;;;:::o;26332:419::-;26498:4;26536:2;26525:9;26521:18;26513:26;;26585:9;26579:4;26575:20;26571:1;26560:9;26556:17;26549:47;26613:131;26739:4;26613:131;:::i;:::-;26605:139;;26332:419;;;:::o;26757:179::-;26897:31;26893:1;26885:6;26881:14;26874:55;26757:179;:::o;26942:366::-;27084:3;27105:67;27169:2;27164:3;27105:67;:::i;:::-;27098:74;;27181:93;27270:3;27181:93;:::i;:::-;27299:2;27294:3;27290:12;27283:19;;26942:366;;;:::o;27314:419::-;27480:4;27518:2;27507:9;27503:18;27495:26;;27567:9;27561:4;27557:20;27553:1;27542:9;27538:17;27531:47;27595:131;27721:4;27595:131;:::i;:::-;27587:139;;27314:419;;;:::o;27739:224::-;27879:34;27875:1;27867:6;27863:14;27856:58;27948:7;27943:2;27935:6;27931:15;27924:32;27739:224;:::o;27969:366::-;28111:3;28132:67;28196:2;28191:3;28132:67;:::i;:::-;28125:74;;28208:93;28297:3;28208:93;:::i;:::-;28326:2;28321:3;28317:12;28310:19;;27969:366;;;:::o;28341:419::-;28507:4;28545:2;28534:9;28530:18;28522:26;;28594:9;28588:4;28584:20;28580:1;28569:9;28565:17;28558:47;28622:131;28748:4;28622:131;:::i;:::-;28614:139;;28341:419;;;:::o;28766:222::-;28906:34;28902:1;28894:6;28890:14;28883:58;28975:5;28970:2;28962:6;28958:15;28951:30;28766:222;:::o;28994:366::-;29136:3;29157:67;29221:2;29216:3;29157:67;:::i;:::-;29150:74;;29233:93;29322:3;29233:93;:::i;:::-;29351:2;29346:3;29342:12;29335:19;;28994:366;;;:::o;29366:419::-;29532:4;29570:2;29559:9;29555:18;29547:26;;29619:9;29613:4;29609:20;29605:1;29594:9;29590:17;29583:47;29647:131;29773:4;29647:131;:::i;:::-;29639:139;;29366:419;;;:::o;29791:225::-;29931:34;29927:1;29919:6;29915:14;29908:58;30000:8;29995:2;29987:6;29983:15;29976:33;29791:225;:::o;30022:366::-;30164:3;30185:67;30249:2;30244:3;30185:67;:::i;:::-;30178:74;;30261:93;30350:3;30261:93;:::i;:::-;30379:2;30374:3;30370:12;30363:19;;30022:366;;;:::o;30394:419::-;30560:4;30598:2;30587:9;30583:18;30575:26;;30647:9;30641:4;30637:20;30633:1;30622:9;30618:17;30611:47;30675:131;30801:4;30675:131;:::i;:::-;30667:139;;30394:419;;;:::o;30819:177::-;30959:29;30955:1;30947:6;30943:14;30936:53;30819:177;:::o;31002:366::-;31144:3;31165:67;31229:2;31224:3;31165:67;:::i;:::-;31158:74;;31241:93;31330:3;31241:93;:::i;:::-;31359:2;31354:3;31350:12;31343:19;;31002:366;;;:::o;31374:419::-;31540:4;31578:2;31567:9;31563:18;31555:26;;31627:9;31621:4;31617:20;31613:1;31602:9;31598:17;31591:47;31655:131;31781:4;31655:131;:::i;:::-;31647:139;;31374:419;;;:::o;31799:175::-;31939:27;31935:1;31927:6;31923:14;31916:51;31799:175;:::o;31980:366::-;32122:3;32143:67;32207:2;32202:3;32143:67;:::i;:::-;32136:74;;32219:93;32308:3;32219:93;:::i;:::-;32337:2;32332:3;32328:12;32321:19;;31980:366;;;:::o;32352:419::-;32518:4;32556:2;32545:9;32541:18;32533:26;;32605:9;32599:4;32595:20;32591:1;32580:9;32576:17;32569:47;32633:131;32759:4;32633:131;:::i;:::-;32625:139;;32352:419;;;:::o
Swarm Source
ipfs://de62304a45cefd1d0b0893b741fed3d248e22279b7742fd89ca8f89b40a084c9