Contract Overview
Balance:
0 ETH
ETH Value:
$0.00
My Name Tag:
Not Available
[ Download CSV Export ]
Latest 25 internal transaction
[ Download CSV Export ]
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Contract Source Code Verified (Exact Match)
Contract Name:
Treasury
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity)
/** *Submitted for verification at Arbiscan on 2023-01-10 */ // SPDX-License-Identifier: MIT // File: @openzeppelin/contracts/utils/math/SafeMath.sol // OpenZeppelin Contracts (last updated v4.6.0) (utils/math/SafeMath.sol) pragma solidity ^0.8.0; // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the subtraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol // OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/draft-IERC20Permit.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612]. * * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't * need to send a transaction, and thus is not required to hold Ether at all. */ interface IERC20Permit { /** * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens, * given ``owner``'s signed approval. * * IMPORTANT: The same issues {IERC20-approve} has related to transaction * ordering also apply here. * * Emits an {Approval} event. * * Requirements: * * - `spender` cannot be the zero address. * - `deadline` must be a timestamp in the future. * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner` * over the EIP712-formatted function arguments. * - the signature must use ``owner``'s current nonce (see {nonces}). * * For more information on the signature format, see the * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP * section]. */ function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; /** * @dev Returns the current nonce for `owner`. This value must be * included whenever a signature is generated for {permit}. * * Every successful call to {permit} increases ``owner``'s nonce by one. This * prevents a signature from being used multiple times. */ function nonces(address owner) external view returns (uint256); /** * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}. */ // solhint-disable-next-line func-name-mixedcase function DOMAIN_SEPARATOR() external view returns (bytes32); } // File: @openzeppelin/contracts/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/contracts/token/ERC20/utils/SafeERC20.sol // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC20/utils/SafeERC20.sol) pragma solidity ^0.8.0; /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { using Address for address; function safeTransfer( IERC20 token, address to, uint256 value ) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom( IERC20 token, address from, address to, uint256 value ) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } /** * @dev Deprecated. This function has issues similar to the ones found in * {IERC20-approve}, and its usage is discouraged. * * Whenever possible, use {safeIncreaseAllowance} and * {safeDecreaseAllowance} instead. */ function safeApprove( IERC20 token, address spender, uint256 value ) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' require( (value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance( IERC20 token, address spender, uint256 value ) internal { uint256 newAllowance = token.allowance(address(this), spender) + value; _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance( IERC20 token, address spender, uint256 value ) internal { unchecked { uint256 oldAllowance = token.allowance(address(this), spender); require(oldAllowance >= value, "SafeERC20: decreased allowance below zero"); uint256 newAllowance = oldAllowance - value; _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } } function safePermit( IERC20Permit token, address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) internal { uint256 nonceBefore = token.nonces(owner); token.permit(owner, spender, value, deadline, v, r, s); uint256 nonceAfter = token.nonces(owner); require(nonceAfter == nonceBefore + 1, "SafeERC20: permit did not succeed"); } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function _callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that // the target address contains contract code and also asserts for success in the low-level call. bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } } // File: @openzeppelin/contracts/security/ReentrancyGuard.sol // OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol) pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } // File: utils/Math.sol pragma solidity ^0.8.0; library Math { /** * @dev Returns the largest of two numbers. */ function max(uint256 a, uint256 b) internal pure returns (uint256) { return a >= b ? a : b; } /** * @dev Returns the smallest of two numbers. */ function min(uint256 a, uint256 b) internal pure returns (uint256) { return a < b ? a : b; } /** * @dev Returns the average of two numbers. The result is rounded towards * zero. */ function average(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b) / 2 can overflow, so we distribute return (a / 2) + (b / 2) + ((a % 2 + b % 2) / 2); } } // File: @openzeppelin/contracts/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/contracts/access/Ownable.sol // OpenZeppelin Contracts (last updated v4.7.0) (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 Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { 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: utils/Operator.sol pragma solidity ^0.8.0; contract Operator is Context, Ownable { address private _operator; event OperatorTransferred(address indexed previousOperator, address indexed newOperator); constructor() { _operator = _msgSender(); emit OperatorTransferred(address(0), _operator); } function operator() public view returns (address) { return _operator; } modifier onlyOperator() { require(_operator == msg.sender, "operator: caller is not the operator"); _; } function isOperator() public view returns (bool) { return _msgSender() == _operator; } function transferOperator(address newOperator_) public onlyOwner { _transferOperator(newOperator_); } function _transferOperator(address newOperator_) internal { require(newOperator_ != address(0), "operator: zero address given for new operator"); emit OperatorTransferred(address(0), newOperator_); _operator = newOperator_; } } // File: interfaces/IOracle.sol pragma solidity ^0.8.0; interface IOracle { function update() external; function consult(address _token, uint256 _amountIn) external view returns (uint144 amountOut); function twap(address _token, uint256 _amountIn) external view returns (uint144 _amountOut); } // File: interfaces/IBasisAsset.sol pragma solidity ^0.8.0; interface IBasisAsset { function mint(address recipient, uint256 amount) external; function burn(uint256 amount) external; function burnFrom(address from, uint256 amount) external; function isOperator() external returns (bool); function operator() external view returns (address); function transferOperator(address newOperator_) external; } // File: utils/IBoardroom.sol pragma solidity ^0.8.0; interface IBoardroom { function balanceOf(address _mason) external view returns (uint256); function earned(address _mason) external view returns (uint256); function canWithdraw(address _mason) external view returns (bool); function canClaimReward(address _mason) external view returns (bool); function epoch() external view returns (uint256); function nextEpochPoint() external view returns (uint256); function getRarePrice() external view returns (uint256); function setOperator(address _operator) external; function setLockUp(uint256 _withdrawLockupEpochs, uint256 _rewardLockupEpochs) external; function stake(uint256 _amount) external; function withdraw(uint256 _amount) external; function exit() external; function claimReward() external; function allocateSeigniorage(uint256 _amount) external; function governanceRecoverUnsupported(address _token, uint256 _amount, address _to) external; } // File: utils/ContractGuard.sol pragma solidity ^0.8.0; contract ContractGuard { mapping(uint256 => mapping(address => bool)) private _status; function checkSameOriginReentranted() internal view returns (bool) { return _status[block.number][tx.origin]; } function checkSameSenderReentranted() internal view returns (bool) { return _status[block.number][msg.sender]; } modifier onlyOneBlock() { require(!checkSameOriginReentranted(), "ContractGuard: one block, one function"); require(!checkSameSenderReentranted(), "ContractGuard: one block, one function"); _; _status[block.number][tx.origin] = true; _status[block.number][msg.sender] = true; } } pragma solidity ^0.8.0; contract Treasury is ContractGuard, ReentrancyGuard { using SafeERC20 for IERC20; using Address for address; using SafeMath for uint256; /* ========= CONSTANT VARIABLES ======== */ uint256 public constant PERIOD = 6 hours; /* ========== STATE VARIABLES ========== */ // governance address public operator; // flags bool public initialized = false; // epoch uint256 public startTime; uint256 public epoch = 0; uint256 public epochSupplyContractionLeft = 0; // exclusions from total supply address[] public excludedFromTotalSupply = [ address(0x563719A32aC21FcC047E1F13fcE88C8931419737) ]; // core components address public peg_; address public bfish_; address public whale_; address public boardroom; address public pegOracle; // price uint256 public pegPriceOne; uint256 public pegPriceCeiling; uint256 public seigniorageSaved; uint256[] public supplyTiers; uint256[] public maxExpansionTiers; uint256 public maxSupplyExpansionPercent; uint256 public bondDepletionFloorPercent; uint256 public seigniorageExpansionFloorPercent; uint256 public maxSupplyContractionPercent; uint256 public maxDebtRatioPercent; // 28 first epochs (1 week) with 4.5% expansion regardless of whale price uint256 public bootstrapEpochs; uint256 public bootstrapSupplyExpansionPercent; /* =================== Added variables =================== */ uint256 public previousEpochPegPrice; uint256 public maxDiscountRate; // when purchasing bond uint256 public maxPremiumRate; // when redeeming bond uint256 public discountPercent; uint256 public premiumThreshold; uint256 public premiumPercent; uint256 public mintingFactorForPayingDebt; // print extra whale during debt phase address public daoFund; uint256 public daoFundSharedPercent; address public devFund; uint256 public devFundSharedPercent; /* =================== Events =================== */ event Initialized(address indexed executor, uint256 at); event Burnebfishs(address indexed from, uint256 bondAmount); event Redeemebfishs(address indexed from, uint256 pegAmount, uint256 bondAmount); event BoughtBonds(address indexed from, uint256 pegAmount, uint256 bondAmount); event TreasuryFunded(uint256 timestamp, uint256 seigniorage); event BoardroomFunded(uint256 timestamp, uint256 seigniorage); event DaoFundFunded(uint256 timestamp, uint256 seigniorage); event DevFundFunded(uint256 timestamp, uint256 seigniorage); /* =================== Modifier =================== */ modifier onlyOperator() { require(operator == msg.sender, "Treasury: caller is not the operator"); _; } modifier checkCondition { require(block.timestamp >= startTime, "Treasury: not started yet"); _; } modifier checkEpoch { require(block.timestamp >= nextEpochPoint(), "Treasury: not opened yet"); _; epoch = epoch.add(1); epochSupplyContractionLeft = (getPegPrice() > pegPriceCeiling) ? 0 : getPegCirculatingSupply().mul(maxSupplyContractionPercent).div(10000); } modifier checkOperator { require( IBasisAsset(bfish_).operator() == address(this) && IBasisAsset(whale_).operator() == address(this) && Operator(boardroom).operator() == address(this), "Treasury: need more permission" ); _; } modifier notInitialized { require(!initialized, "Treasury: already initialized"); _; } /* ========== VIEW FUNCTIONS ========== */ function isInitialized() public view returns (bool) { return initialized; } // epoch function nextEpochPoint() public view returns (uint256) { return startTime.add(epoch.mul(PERIOD)); } // oracle function getPegPrice() public view returns (uint256 pegPrice) { try IOracle(pegOracle).consult(peg_, 1e18) returns (uint144 price) { return uint256(price); } catch { revert("getPegPrice() Treasury: failed to consult whale price from the oracle"); } } function getPegUpdatedPrice() public view returns (uint256 _pegPrice) { try IOracle(pegOracle).twap(peg_, 1e18) returns (uint144 price) { return uint256(price); } catch { revert("getUpdatedPegPrice() Treasury: failed to consult whale price from the oracle"); } } // budget function getReserve() public view returns (uint256) { return seigniorageSaved; } function getBurnablePegLeft() public view returns (uint256 _burnablePegLeft) { uint256 _pegPrice = getPegPrice(); if (_pegPrice <= pegPriceOne) { uint256 _pegSupply = getPegCirculatingSupply(); uint256 _bondMaxSupply = _pegSupply.mul(maxDebtRatioPercent).div(10000); uint256 _bondSupply = IERC20(bfish_).totalSupply(); if (_bondMaxSupply > _bondSupply) { uint256 _maxMintableBond = _bondMaxSupply.sub(_bondSupply); uint256 _maxBurnablePeg = _maxMintableBond.mul(_pegPrice).div(1e18); _burnablePegLeft = Math.min(epochSupplyContractionLeft, _maxBurnablePeg); } } } function getRedeemableBonds() public view returns (uint256 _redeemableBonds) { uint256 _pegPrice = getPegPrice(); if (_pegPrice > pegPriceCeiling) { uint256 _totalPeg = IERC20(peg_).balanceOf(address(this)); uint256 _rate = getBondPremiumRate(); if (_rate > 0) { _redeemableBonds = _totalPeg.mul(1e18).div(_rate); } } } function getBondDiscountRate() public view returns (uint256 _rate) { uint256 _pegPrice = getPegPrice(); if (_pegPrice <= pegPriceOne) { if (discountPercent == 0) { // no discount _rate = pegPriceOne.mul(2); } else { uint256 _bondAmount = pegPriceOne.mul(1e18).div(_pegPrice); // to burn 1 whale uint256 _discountAmount = _bondAmount.sub(pegPriceOne).mul(discountPercent).div(10000); _rate = pegPriceOne.add(_discountAmount).mul(2); if (maxDiscountRate > 0 && _rate > maxDiscountRate) { _rate = maxDiscountRate; } } } } function getBondPremiumRate() public view returns (uint256 _rate) { uint256 _pegPrice = getPegPrice(); if (_pegPrice > pegPriceCeiling) { uint256 _pegPricePremiumThreshold = pegPriceOne.mul(premiumThreshold).div(100); if (_pegPrice >= _pegPricePremiumThreshold) { //Price > $1.10 uint256 _premiumAmount = _pegPrice.sub(pegPriceOne).mul(premiumPercent).div(10000); _rate = pegPriceOne.add(_premiumAmount).mul(2); if (maxPremiumRate > pegPriceOne && _rate > maxPremiumRate) { _rate = maxPremiumRate; } } else { // no premium bonus _rate = pegPriceOne.mul(2); } } } /* ========== GOVERNENCE ========== */ function initialize( address _peg, address _bfish, address _whale, address _pegOracle, address _boardroom, uint256 _startTime ) public notInitialized { peg_ = _peg; bfish_ = _bfish; whale_ = _whale; pegOracle = _pegOracle; boardroom = _boardroom; startTime = _startTime; pegPriceOne = (10**18); pegPriceCeiling = pegPriceOne.mul(101).div(100); // Dynamic max expansion percent supplyTiers = [0 ether, 500000 ether, 1000000 ether, 1500000 ether, 2000000 ether, 5000000 ether, 10000000 ether, 20000000 ether, 50000000 ether]; maxExpansionTiers = [450, 400, 350, 300, 250, 200, 150, 125, 100]; maxSupplyExpansionPercent = 400; // Upto 3.0% supply for expansion bondDepletionFloorPercent = 10000; // 100% of Bond supply for depletion floor seigniorageExpansionFloorPercent = 3500; // At least 35% of expansion reserved for boardroom maxSupplyContractionPercent = 300; // Upto 3.0% supply for contraction (to burn whale and mint bfish) maxDebtRatioPercent = 3500; // Upto 35% supply of bfish to purchase premiumThreshold = 110; premiumPercent = 7000; // First 28 epochs with 4.5% expansion bootstrapEpochs = 12; bootstrapSupplyExpansionPercent = 500; // set seigniorageSaved to it's balance seigniorageSaved = IERC20(peg_).balanceOf(address(this)); initialized = true; operator = msg.sender; emit Initialized(msg.sender, block.number); } function setOperator(address _operator) external onlyOperator { operator = _operator; } function setBoardoom(address _boardroom) external onlyOperator { boardroom = _boardroom; } function setPegToken(address _peg) external onlyOperator { peg_ = _peg; } function setPegOracle(address _pegOracle) external onlyOperator { pegOracle = _pegOracle; } function setPegPriceCeiling(uint256 _pegPriceCeiling) external onlyOperator { require(_pegPriceCeiling <= pegPriceOne.mul(120).div(100), "out of range"); // [$1.0, $1.2] pegPriceOne = _pegPriceCeiling; pegPriceCeiling = _pegPriceCeiling; } function setMaxSupplyExpansionPercents(uint256 _maxSupplyExpansionPercent) external onlyOperator { require(_maxSupplyExpansionPercent >= 10 && _maxSupplyExpansionPercent <= 1000, "_maxSupplyExpansionPercent: out of range"); // [0.1%, 10%] maxSupplyExpansionPercent = _maxSupplyExpansionPercent; } function setSupplyTiersEntry(uint8 _index, uint256 _value) external onlyOperator returns (bool) { require(_index >= 0, "Index has to be higher than 0"); require(_index < 7, "Index has to be lower than count of tiers"); if (_index > 0) { require(_value > supplyTiers[_index - 1], "Value has to be higher than previous tier's value"); } if (_index < 6) { require(_value < supplyTiers[_index + 1], "Value has to be lower than next tier's value"); } supplyTiers[_index] = _value; return true; } function setMaxExpansionTiersEntry(uint8 _index, uint256 _value) external onlyOperator returns (bool) { require(_index >= 0, "Index has to be higher than 0"); require(_index < 7, "Index has to be lower than count of tiers"); require(_value >= 10 && _value <= 1000, "_value: out of range"); // [0.1%, 10%] maxExpansionTiers[_index] = _value; return true; } function setBondDepletionFloorPercent(uint256 _bondDepletionFloorPercent) external onlyOperator { require(_bondDepletionFloorPercent >= 500 && _bondDepletionFloorPercent <= 10000, "out of range"); // [5%, 100%] bondDepletionFloorPercent = _bondDepletionFloorPercent; } function setMaxSupplyContractionPercent(uint256 _maxSupplyContractionPercent) external onlyOperator { require(_maxSupplyContractionPercent >= 100 && _maxSupplyContractionPercent <= 1500, "out of range"); // [0.1%, 15%] maxSupplyContractionPercent = _maxSupplyContractionPercent; } function setMaxDebtRatioPercent(uint256 _maxDebtRatioPercent) external onlyOperator { require(_maxDebtRatioPercent >= 1000 && _maxDebtRatioPercent <= 10000, "out of range"); // [10%, 100%] maxDebtRatioPercent = _maxDebtRatioPercent; } function setBootstrap(uint256 _bootstrapEpochs, uint256 _bootstrapSupplyExpansionPercent) external onlyOperator { require(_bootstrapEpochs <= 120, "_bootstrapEpochs: out of range"); // <= 1 month require(_bootstrapSupplyExpansionPercent >= 100 && _bootstrapSupplyExpansionPercent <= 1000, "_bootstrapSupplyExpansionPercent: out of range"); // [1%, 10%] bootstrapEpochs = _bootstrapEpochs; bootstrapSupplyExpansionPercent = _bootstrapSupplyExpansionPercent; } function setExtraFunds( address _daoFund, uint256 _daoFundSharedPercent, address _devFund, uint256 _devFundSharedPercent ) external onlyOperator { require(_daoFund != address(0), "zero"); require(_daoFundSharedPercent <= 4000, "out of range"); // <= 40% require(_devFund != address(0), "zero"); require(_devFundSharedPercent <= 1000, "out of range"); // <= 10% daoFund = _daoFund; daoFundSharedPercent = _daoFundSharedPercent; devFund = _devFund; devFundSharedPercent = _devFundSharedPercent; } function setMaxDiscountRate(uint256 _maxDiscountRate) external onlyOperator { maxDiscountRate = _maxDiscountRate; } function setMaxPremiumRate(uint256 _maxPremiumRate) external onlyOperator { maxPremiumRate = _maxPremiumRate; } function setDiscountPercent(uint256 _discountPercent) external onlyOperator { require(_discountPercent <= 20000, "_discountPercent is over 200%"); discountPercent = _discountPercent; } function setPremiumThreshold(uint256 _premiumThreshold) external onlyOperator { require(_premiumThreshold >= pegPriceCeiling, "_premiumThreshold exceeds pegPriceCeiling"); require(_premiumThreshold <= 150, "_premiumThreshold is higher than 1.5"); premiumThreshold = _premiumThreshold; } function setPremiumPercent(uint256 _premiumPercent) external onlyOperator { require(_premiumPercent <= 20000, "_premiumPercent is over 200%"); premiumPercent = _premiumPercent; } function setMintingFactorForPayingDebt(uint256 _mintingFactorForPayingDebt) external onlyOperator { require(_mintingFactorForPayingDebt >= 10000 && _mintingFactorForPayingDebt <= 20000, "_mintingFactorForPayingDebt: out of range"); // [100%, 200%] mintingFactorForPayingDebt = _mintingFactorForPayingDebt; } /* ========== MUTABLE FUNCTIONS ========== */ function _updatePegPrice() internal { try IOracle(pegOracle).update() {} catch {} } function getPegCirculatingSupply() public view returns (uint256) { IERC20 pegErc20 = IERC20(peg_); uint256 totalSupply = pegErc20.totalSupply(); uint256 balanceExcluded = 0; for (uint8 entryId = 0; entryId < excludedFromTotalSupply.length; ++entryId) { balanceExcluded = balanceExcluded.add(pegErc20.balanceOf(excludedFromTotalSupply[entryId])); } return totalSupply.sub(balanceExcluded); } function buyBonds(uint256 _pegAmount, uint256 targetPrice) external onlyOneBlock checkCondition checkOperator nonReentrant { require(_pegAmount > 0, "Treasury: cannot purchase bonds with zero amount"); uint256 pegPrice = getPegPrice(); require(pegPrice == targetPrice, "Treasury: whale price moved"); require( pegPrice < pegPriceOne, // price < $0.5 "Treasury: pegPrice not eligible for bond purchase" ); require(_pegAmount <= epochSupplyContractionLeft, "Treasury: not enough bond left to purchase"); uint256 _rate = getBondDiscountRate(); require(_rate > 0, "Treasury: invalid bond rate"); uint256 _bondAmount = _pegAmount.mul(_rate).div(1e18); uint256 pegSupply = getPegCirculatingSupply(); uint256 newBondSupply = IERC20(bfish_).totalSupply().add(_bondAmount); require(newBondSupply <= pegSupply.mul(maxDebtRatioPercent).div(10000), "over max debt ratio"); IBasisAsset(peg_).burnFrom(msg.sender, _pegAmount); try IBasisAsset(bfish_).mint(msg.sender, _bondAmount) { } catch { revert("Treasury: bond minting failed"); } epochSupplyContractionLeft = epochSupplyContractionLeft.sub(_pegAmount); _updatePegPrice(); emit BoughtBonds(msg.sender, _pegAmount, _bondAmount); } function redeemBonds(uint256 _bondAmount, uint256 targetPrice) external onlyOneBlock checkCondition checkOperator { require(_bondAmount > 0, "Treasury: cannot redeem bonds with zero amount"); uint256 pegPrice = getPegPrice(); require(pegPrice == targetPrice, "Treasury: whale price moved"); require( pegPrice > pegPriceCeiling, // price > $1.01 "Treasury: pegPrice not eligible for bond redeem" ); uint256 _rate = getBondPremiumRate(); require(_rate > 0, "Treasury: invalid bond rate"); uint256 _pegAmount = _bondAmount.mul(_rate).div(1e18); require(IERC20(peg_).balanceOf(address(this)) >= _pegAmount, "Treasury: treasury has no more budget"); seigniorageSaved = seigniorageSaved.sub(Math.min(seigniorageSaved, _pegAmount)); IBasisAsset(bfish_).burnFrom(msg.sender, _bondAmount); IERC20(peg_).safeTransfer(msg.sender, _pegAmount); _updatePegPrice(); emit Redeemebfishs(msg.sender, _pegAmount, _bondAmount); } function _sendToBoardroom(uint256 _amount) internal { try IBasisAsset(peg_).mint(address(this), _amount) { } catch { revert("_sendToBoardroom: failed to mint peg"); } uint256 _daoFundSharedAmount = 0; if (daoFundSharedPercent > 0) { _daoFundSharedAmount = _amount.mul(daoFundSharedPercent).div(10000); IERC20(peg_).transfer(daoFund, _daoFundSharedAmount); emit DaoFundFunded(block.timestamp, _daoFundSharedAmount); } uint256 _devFundSharedAmount = 0; if (devFundSharedPercent > 0) { _devFundSharedAmount = _amount.mul(devFundSharedPercent).div(10000); IERC20(peg_).transfer(devFund, _devFundSharedAmount); emit DevFundFunded(block.timestamp, _devFundSharedAmount); } _amount = _amount.sub(_daoFundSharedAmount).sub(_devFundSharedAmount); IERC20(peg_).safeDecreaseAllowance(boardroom, 0); IERC20(peg_).safeIncreaseAllowance(boardroom, _amount); IBoardroom(boardroom).allocateSeigniorage(_amount); emit BoardroomFunded(block.timestamp, _amount); } function _calculateMaxSupplyExpansionPercent(uint256 _pegSupply) internal returns (uint256) { for (uint8 tierId = 6; tierId >= 0; --tierId) { if (_pegSupply >= supplyTiers[tierId]) { maxSupplyExpansionPercent = maxExpansionTiers[tierId]; break; } } return maxSupplyExpansionPercent; } function allocateSeigniorage() external onlyOneBlock checkCondition checkEpoch checkOperator { _updatePegPrice(); previousEpochPegPrice = getPegPrice(); uint256 pegSupply = getPegCirculatingSupply().sub(seigniorageSaved); if (epoch < bootstrapEpochs) { // 14 first epochs with 4.5% expansion _sendToBoardroom(pegSupply.mul(bootstrapSupplyExpansionPercent).div(10000)); } else { if (previousEpochPegPrice > pegPriceCeiling) { // Expansion ($whale Price > 1 $USDC): there is some seigniorage to be allocated uint256 bondSupply = IERC20(bfish_).totalSupply(); uint256 _percentage = previousEpochPegPrice.sub(pegPriceOne); uint256 _savedForBond; uint256 _savedForBoardroom; uint256 _mse = _calculateMaxSupplyExpansionPercent(pegSupply).mul(1e14); if (_percentage > _mse) { _percentage = _mse; } if (seigniorageSaved >= bondSupply.mul(bondDepletionFloorPercent).div(10000)) { // saved enough to pay debt, mint as usual rate _savedForBoardroom = pegSupply.mul(_percentage).div(1e18); } else { // have not saved enough to pay debt, mint more uint256 _seigniorage = pegSupply.mul(_percentage).div(1e18); _savedForBoardroom = _seigniorage.mul(seigniorageExpansionFloorPercent).div(10000); _savedForBond = _seigniorage.sub(_savedForBoardroom); if (mintingFactorForPayingDebt > 0) { _savedForBond = _savedForBond.mul(mintingFactorForPayingDebt).div(10000); } } if (_savedForBoardroom > 0) { _sendToBoardroom(_savedForBoardroom); } if (_savedForBond > 0) { seigniorageSaved = seigniorageSaved.add(_savedForBond); try IBasisAsset(peg_).mint(address(this), _savedForBond) {} catch { revert("Treasury: peg minting failed"); } emit TreasuryFunded(block.timestamp, _savedForBond); } } } } function addExcludedAddress(address _exclude) external onlyOperator { excludedFromTotalSupply.push(_exclude); } function governanceRecoverUnsupported( IERC20 _token, uint256 _amount, address _to ) external onlyOperator { // do not allow to drain core tokens require(address(_token) != address(peg_), "peg"); require(address(_token) != address(bfish_), "bond"); require(address(_token) != address(whale_), "share"); _token.safeTransfer(_to, _amount); } function boardroomSetOperator(address _operator) external onlyOperator { IBoardroom(boardroom).setOperator(_operator); } function boardroomSetLockUp(uint256 _withdrawLockupEpochs, uint256 _rewardLockupEpochs) external onlyOperator { IBoardroom(boardroom).setLockUp(_withdrawLockupEpochs, _rewardLockupEpochs); } function boardroomAllocateSeigniorage(uint256 amount) external onlyOperator { IBoardroom(boardroom).allocateSeigniorage(amount); } function boardroomGovernanceRecoverUnsupported( address _token, uint256 _amount, address _to ) external onlyOperator { IBoardroom(boardroom).governanceRecoverUnsupported(_token, _amount, _to); } function pegTransferOwnership(address _owner) external onlyOperator { require(_owner != address(0), "transfer to null address"); Ownable(peg_).transferOwnership(_owner); } }
[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"seigniorage","type":"uint256"}],"name":"BoardroomFunded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"pegAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bondAmount","type":"uint256"}],"name":"BoughtBonds","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"bondAmount","type":"uint256"}],"name":"Burnebfishs","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"seigniorage","type":"uint256"}],"name":"DaoFundFunded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"seigniorage","type":"uint256"}],"name":"DevFundFunded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"executor","type":"address"},{"indexed":false,"internalType":"uint256","name":"at","type":"uint256"}],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"pegAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bondAmount","type":"uint256"}],"name":"Redeemebfishs","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"seigniorage","type":"uint256"}],"name":"TreasuryFunded","type":"event"},{"inputs":[],"name":"PERIOD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_exclude","type":"address"}],"name":"addExcludedAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"allocateSeigniorage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"bfish_","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"boardroom","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"boardroomAllocateSeigniorage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_to","type":"address"}],"name":"boardroomGovernanceRecoverUnsupported","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_withdrawLockupEpochs","type":"uint256"},{"internalType":"uint256","name":"_rewardLockupEpochs","type":"uint256"}],"name":"boardroomSetLockUp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_operator","type":"address"}],"name":"boardroomSetOperator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"bondDepletionFloorPercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bootstrapEpochs","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bootstrapSupplyExpansionPercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pegAmount","type":"uint256"},{"internalType":"uint256","name":"targetPrice","type":"uint256"}],"name":"buyBonds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"daoFund","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"daoFundSharedPercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devFund","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devFundSharedPercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"discountPercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"epoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"epochSupplyContractionLeft","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"excludedFromTotalSupply","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBondDiscountRate","outputs":[{"internalType":"uint256","name":"_rate","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBondPremiumRate","outputs":[{"internalType":"uint256","name":"_rate","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBurnablePegLeft","outputs":[{"internalType":"uint256","name":"_burnablePegLeft","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPegCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPegPrice","outputs":[{"internalType":"uint256","name":"pegPrice","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPegUpdatedPrice","outputs":[{"internalType":"uint256","name":"_pegPrice","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRedeemableBonds","outputs":[{"internalType":"uint256","name":"_redeemableBonds","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getReserve","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_to","type":"address"}],"name":"governanceRecoverUnsupported","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_peg","type":"address"},{"internalType":"address","name":"_bfish","type":"address"},{"internalType":"address","name":"_whale","type":"address"},{"internalType":"address","name":"_pegOracle","type":"address"},{"internalType":"address","name":"_boardroom","type":"address"},{"internalType":"uint256","name":"_startTime","type":"uint256"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"initialized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isInitialized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxDebtRatioPercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxDiscountRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"maxExpansionTiers","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPremiumRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupplyContractionPercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupplyExpansionPercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintingFactorForPayingDebt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextEpochPoint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"operator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pegOracle","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pegPriceCeiling","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pegPriceOne","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"pegTransferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"peg_","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"premiumPercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"premiumThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"previousEpochPegPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_bondAmount","type":"uint256"},{"internalType":"uint256","name":"targetPrice","type":"uint256"}],"name":"redeemBonds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"seigniorageExpansionFloorPercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"seigniorageSaved","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_boardroom","type":"address"}],"name":"setBoardoom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_bondDepletionFloorPercent","type":"uint256"}],"name":"setBondDepletionFloorPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_bootstrapEpochs","type":"uint256"},{"internalType":"uint256","name":"_bootstrapSupplyExpansionPercent","type":"uint256"}],"name":"setBootstrap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_discountPercent","type":"uint256"}],"name":"setDiscountPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_daoFund","type":"address"},{"internalType":"uint256","name":"_daoFundSharedPercent","type":"uint256"},{"internalType":"address","name":"_devFund","type":"address"},{"internalType":"uint256","name":"_devFundSharedPercent","type":"uint256"}],"name":"setExtraFunds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxDebtRatioPercent","type":"uint256"}],"name":"setMaxDebtRatioPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxDiscountRate","type":"uint256"}],"name":"setMaxDiscountRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_index","type":"uint8"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"setMaxExpansionTiersEntry","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxPremiumRate","type":"uint256"}],"name":"setMaxPremiumRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxSupplyContractionPercent","type":"uint256"}],"name":"setMaxSupplyContractionPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxSupplyExpansionPercent","type":"uint256"}],"name":"setMaxSupplyExpansionPercents","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintingFactorForPayingDebt","type":"uint256"}],"name":"setMintingFactorForPayingDebt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_operator","type":"address"}],"name":"setOperator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_pegOracle","type":"address"}],"name":"setPegOracle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pegPriceCeiling","type":"uint256"}],"name":"setPegPriceCeiling","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_peg","type":"address"}],"name":"setPegToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_premiumPercent","type":"uint256"}],"name":"setPremiumPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_premiumThreshold","type":"uint256"}],"name":"setPremiumThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_index","type":"uint8"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"setSupplyTiersEntry","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"supplyTiers","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"whale_","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
6002805460ff60a01b191690556000600481905560055560a060405273563719a32ac21fcc047e1f13fce88c89314197376080908152620000459060069060016200005e565b503480156200005357600080fd5b5060018055620000df565b828054828255906000526020600020908101928215620000b6579160200282015b82811115620000b657825182546001600160a01b0319166001600160a01b039091161782556020909201916001909101906200007f565b50620000c4929150620000c8565b5090565b5b80821115620000c45760008155600101620000c9565b61433280620000ef6000396000f3fe608060405234801561001057600080fd5b50600436106104495760003560e01c80636ed480e111610241578063a9b54bcd1161013b578063cecce38e116100c3578063ee52f86011610087578063ee52f86014610888578063f14698de1461089b578063f8cd4d72146108a4578063fcb6f008146108b7578063fd2b1c80146108c057600080fd5b8063cecce38e14610847578063d4b149441461085a578063d98f24951461086d578063da3ed41914610876578063e90b24541461087f57600080fd5b8063b8a878f91161010a578063b8a878f914610811578063bcc81f191461081a578063c5967c261461082d578063c8412d0214610835578063c8f987f31461083e57600080fd5b8063a9b54bcd146107cf578063b06ce14a146107e2578063b3ab15fb146107f5578063b4d1d7951461080857600080fd5b80638d934f74116101c957806398b762a11161018d57806398b762a1146107705780639982002514610783578063a0487eea14610796578063a204452b146107a9578063a3ec30fe146107bc57600080fd5b80638d934f741461071b578063900cf0cf1461072e57806391bbfed514610737578063940e60641461074a57806395b6ef0c1461075d57600080fd5b80637f1b518a116102105780637f1b518a146106da57806381d11eaf146106e357806382cad838146106ec578063874106cc146106ff5780638c664db61461070857600080fd5b80636ed480e1146106a357806372c054f9146106b657806378e97925146106be5780637d8f1d01146106c757600080fd5b80632e9c7b651161035257806354f04a11116102da57806359bf5d391161029e57806359bf5d39146106645780635a0fc79c1461066c5780635b756179146106755780635e02c51e1461067d5780636a3538be1461069057600080fd5b806354f04a111461061a578063554c478e1461062d57806355ebdeef14610635578063570ca7351461063e578063591663e11461065157600080fd5b806340af7ba51161032157806340af7ba5146105bb5780634157877b146105ce5780634390d2a8146105e1578063499f3f19146105f457806354575af41461060757600080fd5b80632e9c7b6514610584578063392e53cd1461058d5780633d906f6b1461059f5780634013a08e146105b257600080fd5b8063158ef93e116103d5578063254f2577116103a4578063254f25771461052c578063270ec0cc1461055757806328e1b8801461055f57806329ef1919146105725780632cac83c41461057b57600080fd5b8063158ef93e146104e45780631e9872281461050857806322f832cd1461051b578063235a0c9a1461052457600080fd5b80630b5bcec71161041c5780630b5bcec71461049b5780630cf60175146104ae5780630db7eb0b146104b6578063118ebbf9146104be578063154ec2db146104d157600080fd5b806301a937831461044e57806303be7e761461046357806304e5c7b11461047f578063077084ac14610492575b600080fd5b61046161045c366004613ded565b6108c8565b005b61046c60225481565b6040519081526020015b60405180910390f35b61046161048d366004613ded565b61095d565b61046c600d5481565b6104616104a9366004613ded565b610a4d565b61046c610aec565b61046c610bb7565b6104616104cc366004613e06565b610c6f565b6104616104df366004613ded565b61121a565b6002546104f890600160a01b900460ff1681565b6040519015158152602001610476565b610461610516366004613ded565b61129b565b61046c60135481565b61046c611309565b60085461053f906001600160a01b031681565b6040516001600160a01b039091168152602001610476565b61046c611456565b61046161056d366004613e3d565b61155f565b61046c601b5481565b61046c60185481565b61046c601a5481565b600254600160a01b900460ff166104f8565b6104616105ad366004613e3d565b6115ab565b61046c601e5481565b6104616105c9366004613ded565b61165d565b60095461053f906001600160a01b031681565b60215461053f906001600160a01b031681565b610461610602366004613ded565b6116de565b610461610615366004613e5a565b61177f565b610461610628366004613e06565b611893565b61046c611faa565b61046c60205481565b60025461053f906001600160a01b031681565b61046161065f366004613ded565b6120ae565b600e5461046c565b61046c600e5481565b61046161210d565b600a5461053f906001600160a01b031681565b61046161069e366004613e3d565b6126dd565b6104616106b1366004613e3d565b612729565b61046c612775565b61046c60035481565b60075461053f906001600160a01b031681565b61046c600c5481565b61046c60125481565b61053f6106fa366004613ded565b612823565b61046c60175481565b610461610716366004613ded565b61284d565b601f5461053f906001600160a01b031681565b61046c60045481565b610461610745366004613e06565b6128ac565b6104f8610758366004613e9c565b6129a8565b61046161076b366004613ece565b612b5b565b61046161077e366004613ded565b612e2f565b61046c610791366004613ded565b612e5e565b61046c6107a4366004613ded565b612e7f565b6104616107b7366004613ded565b612e8f565b6104616107ca366004613e5a565b612ebe565b6104616107dd366004613e3d565b612f5b565b6104616107f0366004613e3d565b612fd7565b610461610803366004613e3d565b613033565b61046c61546081565b61046c60195481565b610461610828366004613f47565b61307f565b61046c6131a3565b61046c601d5481565b61046c601c5481565b610461610855366004613ded565b6131cd565b6104f8610868366004613e9c565b61322b565b61046c60115481565b61046c60155481565b61046c60145481565b600b5461053f906001600160a01b031681565b61046c60165481565b6104616108b2366004613e06565b6132e8565b61046c60055481565b61046c61337b565b6002546001600160a01b031633146108fb5760405162461bcd60e51b81526004016108f290613f8f565b60405180910390fd5b600a546040516397ffe1d760e01b8152600481018390526001600160a01b03909116906397ffe1d7906024015b600060405180830381600087803b15801561094257600080fd5b505af1158015610956573d6000803e3d6000fd5b5050505050565b6002546001600160a01b031633146109875760405162461bcd60e51b81526004016108f290613f8f565b600d548110156109eb5760405162461bcd60e51b815260206004820152602960248201527f5f7072656d69756d5468726573686f6c6420657863656564732070656750726960448201526863654365696c696e6760b81b60648201526084016108f2565b6096811115610a485760405162461bcd60e51b8152602060048201526024808201527f5f7072656d69756d5468726573686f6c6420697320686967686572207468616e60448201526320312e3560e01b60648201526084016108f2565b601c55565b6002546001600160a01b03163314610a775760405162461bcd60e51b81526004016108f290613f8f565b600a8110158015610a8a57506103e88111155b610ae75760405162461bcd60e51b815260206004820152602860248201527f5f6d6178537570706c79457870616e73696f6e50657263656e743a206f7574206044820152676f662072616e676560c01b60648201526084016108f2565b601155565b600080610af7611456565b9050600c548111610bb357601b54600003610b2057600c54610b1a90600261347d565b91505090565b6000610b4982610b43670de0b6b3a7640000600c5461347d90919063ffffffff16565b90613490565b90506000610b74612710610b43601b54610b6e600c548761349c90919063ffffffff16565b9061347d565b9050610b906002610b6e83600c546134a890919063ffffffff16565b93506000601954118015610ba5575060195484115b15610bb05760195493505b50505b5090565b600080610bc2611456565b9050600d54811115610bb3576000610bec6064610b43601c54600c5461347d90919063ffffffff16565b9050808210610c5a576000610c18612710610b43601d54610b6e600c548861349c90919063ffffffff16565b9050610c346002610b6e83600c546134a890919063ffffffff16565b9350600c54601a54118015610c4a5750601a5484115b15610bb057601a54935050505090565b600c54610c6890600261347d565b9250505090565b4360009081526020818152604080832032845290915290205460ff1615610ca85760405162461bcd60e51b81526004016108f290613fd3565b4360009081526020818152604080832033845290915290205460ff1615610ce15760405162461bcd60e51b81526004016108f290613fd3565b600354421015610d035760405162461bcd60e51b81526004016108f290614019565b6008546040805163570ca73560e01b8152905130926001600160a01b03169163570ca7359160048083019260209291908290030181865afa158015610d4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d709190614050565b6001600160a01b0316148015610df957506009546040805163570ca73560e01b8152905130926001600160a01b03169163570ca7359160048083019260209291908290030181865afa158015610dca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dee9190614050565b6001600160a01b0316145b8015610e785750600a546040805163570ca73560e01b8152905130926001600160a01b03169163570ca7359160048083019260209291908290030181865afa158015610e49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e6d9190614050565b6001600160a01b0316145b610e945760405162461bcd60e51b81526004016108f29061406d565b60008211610efb5760405162461bcd60e51b815260206004820152602e60248201527f54726561737572793a2063616e6e6f742072656465656d20626f6e647320776960448201526d1d1a081e995c9bc8185b5bdd5b9d60921b60648201526084016108f2565b6000610f05611456565b9050818114610f565760405162461bcd60e51b815260206004820152601b60248201527f54726561737572793a207768616c65207072696365206d6f766564000000000060448201526064016108f2565b600d548111610fbf5760405162461bcd60e51b815260206004820152602f60248201527f54726561737572793a207065675072696365206e6f7420656c696769626c652060448201526e666f7220626f6e642072656465656d60881b60648201526084016108f2565b6000610fc9610bb7565b90506000811161101b5760405162461bcd60e51b815260206004820152601b60248201527f54726561737572793a20696e76616c696420626f6e642072617465000000000060448201526064016108f2565b6000611033670de0b6b3a7640000610b43878561347d565b6007546040516370a0823160e01b815230600482015291925082916001600160a01b03909116906370a0823190602401602060405180830381865afa158015611080573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110a491906140a4565b10156111005760405162461bcd60e51b815260206004820152602560248201527f54726561737572793a20747265617375727920686173206e6f206d6f726520626044820152641d5919d95d60da1b60648201526084016108f2565b61111861110f600e54836134b4565b600e549061349c565b600e5560085460405163079cc67960e41b81526001600160a01b03909116906379cc67909061114d90339089906004016140bd565b600060405180830381600087803b15801561116757600080fd5b505af115801561117b573d6000803e3d6000fd5b505060075461119792506001600160a01b0316905033836134ca565b61119f613520565b604080518281526020810187905233917ff0589159c1f93e7a0b8a5e034b457dd56b375935a92811bb10e0008a193a3d9b910160405180910390a25050436000908152602081815260408083203284529091528082208054600160ff1991821681179092553384529190922080549091169091179055505050565b6002546001600160a01b031633146112445760405162461bcd60e51b81526004016108f290613f8f565b614e208111156112965760405162461bcd60e51b815260206004820152601d60248201527f5f646973636f756e7450657263656e74206973206f766572203230302500000060448201526064016108f2565b601b55565b6002546001600160a01b031633146112c55760405162461bcd60e51b81526004016108f290613f8f565b6112e06064610b436078600c5461347d90919063ffffffff16565b8111156112ff5760405162461bcd60e51b81526004016108f2906140d6565b600c819055600d55565b600754604080516318160ddd60e01b815290516000926001600160a01b031691839183916318160ddd9160048083019260209291908290030181865afa158015611357573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061137b91906140a4565b90506000805b60065460ff8216101561144357611431846001600160a01b03166370a0823160068460ff16815481106113b6576113b66140fc565b60009182526020909120015460405160e083901b6001600160e01b03191681526001600160a01b039091166004820152602401602060405180830381865afa158015611406573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061142a91906140a4565b83906134a8565b915061143c81614128565b9050611381565b5061144e828261349c565b935050505090565b600b54600754604051633ddac95360e01b81526000926001600160a01b0390811692633ddac953926114989290911690670de0b6b3a7640000906004016140bd565b602060405180830381865afa9250505080156114d1575060408051601f3d908101601f191682019092526114ce91810190614147565b60015b6115515760405162461bcd60e51b815260206004820152604560248201527f676574506567507269636528292054726561737572793a206661696c6564207460448201527f6f20636f6e73756c74207768616c652070726963652066726f6d20746865206f6064820152647261636c6560d81b608482015260a4016108f2565b6001600160901b0316919050565b6002546001600160a01b031633146115895760405162461bcd60e51b81526004016108f290613f8f565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b6002546001600160a01b031633146115d55760405162461bcd60e51b81526004016108f290613f8f565b6001600160a01b03811661162b5760405162461bcd60e51b815260206004820152601860248201527f7472616e7366657220746f206e756c6c2061646472657373000000000000000060448201526064016108f2565b60075460405163f2fde38b60e01b81526001600160a01b0383811660048301529091169063f2fde38b90602401610928565b6002546001600160a01b031633146116875760405162461bcd60e51b81526004016108f290613f8f565b614e208111156116d95760405162461bcd60e51b815260206004820152601c60248201527f5f7072656d69756d50657263656e74206973206f76657220323030250000000060448201526064016108f2565b601d55565b6002546001600160a01b031633146117085760405162461bcd60e51b81526004016108f290613f8f565b612710811015801561171c5750614e208111155b61177a5760405162461bcd60e51b815260206004820152602960248201527f5f6d696e74696e67466163746f72466f72506179696e67446562743a206f7574604482015268206f662072616e676560b81b60648201526084016108f2565b601e55565b6002546001600160a01b031633146117a95760405162461bcd60e51b81526004016108f290613f8f565b6007546001600160a01b03908116908416036117ed5760405162461bcd60e51b815260206004820152600360248201526270656760e81b60448201526064016108f2565b6008546001600160a01b03908116908416036118345760405162461bcd60e51b81526004016108f290602080825260049082015263189bdb9960e21b604082015260600190565b6009546001600160a01b039081169084160361187a5760405162461bcd60e51b8152602060048201526005602482015264736861726560d81b60448201526064016108f2565b61188e6001600160a01b03841682846134ca565b505050565b4360009081526020818152604080832032845290915290205460ff16156118cc5760405162461bcd60e51b81526004016108f290613fd3565b4360009081526020818152604080832033845290915290205460ff16156119055760405162461bcd60e51b81526004016108f290613fd3565b6003544210156119275760405162461bcd60e51b81526004016108f290614019565b6008546040805163570ca73560e01b8152905130926001600160a01b03169163570ca7359160048083019260209291908290030181865afa158015611970573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119949190614050565b6001600160a01b0316148015611a1d57506009546040805163570ca73560e01b8152905130926001600160a01b03169163570ca7359160048083019260209291908290030181865afa1580156119ee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a129190614050565b6001600160a01b0316145b8015611a9c5750600a546040805163570ca73560e01b8152905130926001600160a01b03169163570ca7359160048083019260209291908290030181865afa158015611a6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a919190614050565b6001600160a01b0316145b611ab85760405162461bcd60e51b81526004016108f29061406d565b600260015403611b0a5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108f2565b600260015581611b755760405162461bcd60e51b815260206004820152603060248201527f54726561737572793a2063616e6e6f7420707572636861736520626f6e64732060448201526f1dda5d1a081e995c9bc8185b5bdd5b9d60821b60648201526084016108f2565b6000611b7f611456565b9050818114611bd05760405162461bcd60e51b815260206004820152601b60248201527f54726561737572793a207768616c65207072696365206d6f766564000000000060448201526064016108f2565b600c548110611c3b5760405162461bcd60e51b815260206004820152603160248201527f54726561737572793a207065675072696365206e6f7420656c696769626c6520604482015270666f7220626f6e6420707572636861736560781b60648201526084016108f2565b600554831115611ca05760405162461bcd60e51b815260206004820152602a60248201527f54726561737572793a206e6f7420656e6f75676820626f6e64206c65667420746044820152696f20707572636861736560b01b60648201526084016108f2565b6000611caa610aec565b905060008111611cfc5760405162461bcd60e51b815260206004820152601b60248201527f54726561737572793a20696e76616c696420626f6e642072617465000000000060448201526064016108f2565b6000611d14670de0b6b3a7640000610b43878561347d565b90506000611d20611309565b90506000611da583600860009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d7b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d9f91906140a4565b906134a8565b9050611dc2612710610b436015548561347d90919063ffffffff16565b811115611e075760405162461bcd60e51b81526020600482015260136024820152726f766572206d6178206465627420726174696f60681b60448201526064016108f2565b60075460405163079cc67960e41b81526001600160a01b03909116906379cc679090611e399033908b906004016140bd565b600060405180830381600087803b158015611e5357600080fd5b505af1158015611e67573d6000803e3d6000fd5b50506008546040516340c10f1960e01b81526001600160a01b0390911692506340c10f199150611e9d90339087906004016140bd565b600060405180830381600087803b158015611eb757600080fd5b505af1925050508015611ec8575060015b611f145760405162461bcd60e51b815260206004820152601d60248201527f54726561737572793a20626f6e64206d696e74696e67206661696c656400000060448201526064016108f2565b600554611f21908861349c565b600555611f2c613520565b604080518881526020810185905233917f73017f1b70789e2e66759eeb3c7ec11f59e6eedb55d921cfaec5410dd42a4799910160405180910390a25050600180805543600090815260208181526040808320328452909152808220805460ff1990811685179091553383529120805490911690911790555050505050565b600080611fb5611456565b9050600c548111610bb3576000611fca611309565b90506000611fe9612710610b436015548561347d90919063ffffffff16565b90506000600860009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612040573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061206491906140a4565b9050808211156120a757600061207a838361349c565b90506000612094670de0b6b3a7640000610b43848961347d565b90506120a2600554826134b4565b965050505b5050505090565b6002546001600160a01b031633146120d85760405162461bcd60e51b81526004016108f290613f8f565b6103e881101580156120ec57506127108111155b6121085760405162461bcd60e51b81526004016108f2906140d6565b601555565b4360009081526020818152604080832032845290915290205460ff16156121465760405162461bcd60e51b81526004016108f290613fd3565b4360009081526020818152604080832033845290915290205460ff161561217f5760405162461bcd60e51b81526004016108f290613fd3565b6003544210156121a15760405162461bcd60e51b81526004016108f290614019565b6121a96131a3565b4210156121f85760405162461bcd60e51b815260206004820152601860248201527f54726561737572793a206e6f74206f70656e656420796574000000000000000060448201526064016108f2565b6008546040805163570ca73560e01b8152905130926001600160a01b03169163570ca7359160048083019260209291908290030181865afa158015612241573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122659190614050565b6001600160a01b03161480156122ee57506009546040805163570ca73560e01b8152905130926001600160a01b03169163570ca7359160048083019260209291908290030181865afa1580156122bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122e39190614050565b6001600160a01b0316145b801561236d5750600a546040805163570ca73560e01b8152905130926001600160a01b03169163570ca7359160048083019260209291908290030181865afa15801561233e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123629190614050565b6001600160a01b0316145b6123895760405162461bcd60e51b81526004016108f29061406d565b612391613520565b612399611456565b601855600e546000906123b4906123ae611309565b9061349c565b905060165460045410156123ea576123e56123e0612710610b436017548561347d90919063ffffffff16565b613584565b612661565b600d54601854111561266157600854604080516318160ddd60e01b815290516000926001600160a01b0316916318160ddd9160048083019260209291908290030181865afa158015612440573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061246491906140a4565b9050600061247f600c5460185461349c90919063ffffffff16565b90506000806000612499655af3107a4000610b6e886138da565b9050808411156124a7578093505b6124c2612710610b436012548861347d90919063ffffffff16565b600e54106124e7576124e0670de0b6b3a7640000610b43888761347d565b9150612553565b60006124ff670de0b6b3a7640000610b43898861347d565b905061251c612710610b436013548461347d90919063ffffffff16565b9250612528818461349c565b601e54909450156125515761254e612710610b43601e548761347d90919063ffffffff16565b93505b505b81156125625761256282613584565b821561265b57600e5461257590846134a8565b600e556007546040516340c10f1960e01b81526001600160a01b03909116906340c10f19906125aa90309087906004016140bd565b600060405180830381600087803b1580156125c457600080fd5b505af19250505080156125d5575060015b6126215760405162461bcd60e51b815260206004820152601c60248201527f54726561737572793a20706567206d696e74696e67206661696c65640000000060448201526064016108f2565b60408051428152602081018590527ff705142bf09f04297640495ddf7c59b7fd6f51894c5aea9602d631cf05f0efc2910160405180910390a15b50505050505b506004546126709060016134a8565b600455600d5461267e611456565b1161269c57612697612710610b43601454610b6e611309565b61269f565b60005b600555436000908152602081815260408083203284529091528082208054600160ff1991821681179092553384529190922080549091169091179055565b6002546001600160a01b031633146127075760405162461bcd60e51b81526004016108f290613f8f565b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b6002546001600160a01b031633146127535760405162461bcd60e51b81526004016108f290613f8f565b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b600080612780611456565b9050600d54811115610bb3576007546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa1580156127d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127f991906140a4565b90506000612805610bb7565b90508015610bb05761144e81610b4384670de0b6b3a764000061347d565b6006818154811061283357600080fd5b6000918252602090912001546001600160a01b0316905081565b6002546001600160a01b031633146128775760405162461bcd60e51b81526004016108f290613f8f565b6101f4811015801561288b57506127108111155b6128a75760405162461bcd60e51b81526004016108f2906140d6565b601255565b6002546001600160a01b031633146128d65760405162461bcd60e51b81526004016108f290613f8f565b60788211156129275760405162461bcd60e51b815260206004820152601e60248201527f5f626f6f74737472617045706f6368733a206f7574206f662072616e6765000060448201526064016108f2565b6064811015801561293a57506103e88111155b61299d5760405162461bcd60e51b815260206004820152602e60248201527f5f626f6f747374726170537570706c79457870616e73696f6e50657263656e7460448201526d3a206f7574206f662072616e676560901b60648201526084016108f2565b601691909155601755565b6002546000906001600160a01b031633146129d55760405162461bcd60e51b81526004016108f290613f8f565b60078360ff16106129f85760405162461bcd60e51b81526004016108f290614170565b60ff831615612a9457600f612a0e6001856141b9565b60ff1681548110612a2157612a216140fc565b90600052602060002001548211612a945760405162461bcd60e51b815260206004820152603160248201527f56616c75652068617320746f20626520686967686572207468616e2070726576604482015270696f7573207469657227732076616c756560781b60648201526084016108f2565b60068360ff161015612b2e57600f612aad8460016141d2565b60ff1681548110612ac057612ac06140fc565b90600052602060002001548210612b2e5760405162461bcd60e51b815260206004820152602c60248201527f56616c75652068617320746f206265206c6f776572207468616e206e6578742060448201526b7469657227732076616c756560a01b60648201526084016108f2565b81600f8460ff1681548110612b4557612b456140fc565b6000918252602090912001555060015b92915050565b600254600160a01b900460ff1615612bb55760405162461bcd60e51b815260206004820152601d60248201527f54726561737572793a20616c726561647920696e697469616c697a656400000060448201526064016108f2565b600780546001600160a01b03199081166001600160a01b0389811691909117909255600880548216888416179055600980548216878416179055600b80548216868416179055600a80549091169184169190911790556003819055670de0b6b3a7640000600c819055612c3090606490610b4390606561347d565b600d556040805161012081018252600081526969e10de76676d0800000602082015269d3c21bcecceda1000000918101919091526a013da329b633647180000060608201526a01a784379d99db4200000060808201526a0422ca8b0a00a42500000060a08201526a084595161401484a00000060c08201526a108b2a2c2802909400000060e08201526a295be96e64066972000000610100820152612cd990600f906009613d41565b5060408051610120810182526101c28152610190602082015261015e9181019190915261012c606082015260fa608082015260c860a0820152609660c0820152607d60e08201526064610100820152612d36906010906009613d97565b50610190601155612710601255610dac601381905561012c601455601555606e601c55611b58601d55600c6016556101f46017556007546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015612db2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dd691906140a4565b600e55600280546001600160a81b03191633908117600160a01b179091556040514381527f25ff68dd81b34665b5ba7e553ee5511bf6812e12adb4a7e2c0d9e26b3099ce799060200160405180910390a2505050505050565b6002546001600160a01b03163314612e595760405162461bcd60e51b81526004016108f290613f8f565b601955565b600f8181548110612e6e57600080fd5b600091825260209091200154905081565b60108181548110612e6e57600080fd5b6002546001600160a01b03163314612eb95760405162461bcd60e51b81526004016108f290613f8f565b601a55565b6002546001600160a01b03163314612ee85760405162461bcd60e51b81526004016108f290613f8f565b600a54604051631515d6bd60e21b81526001600160a01b038581166004830152602482018590528381166044830152909116906354575af490606401600060405180830381600087803b158015612f3e57600080fd5b505af1158015612f52573d6000803e3d6000fd5b50505050505050565b6002546001600160a01b03163314612f855760405162461bcd60e51b81526004016108f290613f8f565b600680546001810182556000919091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b0319166001600160a01b0392909216919091179055565b6002546001600160a01b031633146130015760405162461bcd60e51b81526004016108f290613f8f565b600a5460405163b3ab15fb60e01b81526001600160a01b0383811660048301529091169063b3ab15fb90602401610928565b6002546001600160a01b0316331461305d5760405162461bcd60e51b81526004016108f290613f8f565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6002546001600160a01b031633146130a95760405162461bcd60e51b81526004016108f290613f8f565b6001600160a01b0384166130e85760405162461bcd60e51b81526004016108f2906020808252600490820152637a65726f60e01b604082015260600190565b610fa083111561310a5760405162461bcd60e51b81526004016108f2906140d6565b6001600160a01b0382166131495760405162461bcd60e51b81526004016108f2906020808252600490820152637a65726f60e01b604082015260600190565b6103e881111561316b5760405162461bcd60e51b81526004016108f2906140d6565b601f80546001600160a01b03199081166001600160a01b03968716179091556020939093556021805490931691909316179055602255565b60006131c86131bf61546060045461347d90919063ffffffff16565b600354906134a8565b905090565b6002546001600160a01b031633146131f75760405162461bcd60e51b81526004016108f290613f8f565b6064811015801561320a57506105dc8111155b6132265760405162461bcd60e51b81526004016108f2906140d6565b601455565b6002546000906001600160a01b031633146132585760405162461bcd60e51b81526004016108f290613f8f565b60078360ff161061327b5760405162461bcd60e51b81526004016108f290614170565b600a821015801561328e57506103e88211155b6132d15760405162461bcd60e51b81526020600482015260146024820152735f76616c75653a206f7574206f662072616e676560601b60448201526064016108f2565b8160108460ff1681548110612b4557612b456140fc565b6002546001600160a01b031633146133125760405162461bcd60e51b81526004016108f290613f8f565b600a54604051632ffaaa0960e01b815260048101849052602481018390526001600160a01b0390911690632ffaaa0990604401600060405180830381600087803b15801561335f57600080fd5b505af1158015613373573d6000803e3d6000fd5b505050505050565b600b54600754604051630d01142560e31b81526000926001600160a01b0390811692636808a128926133bd9290911690670de0b6b3a7640000906004016140bd565b602060405180830381865afa9250505080156133f6575060408051601f3d908101601f191682019092526133f391810190614147565b60015b6115515760405162461bcd60e51b815260206004820152604c60248201527f67657455706461746564506567507269636528292054726561737572793a206660448201527f61696c656420746f20636f6e73756c74207768616c652070726963652066726f60648201526b6d20746865206f7261636c6560a01b608482015260a4016108f2565b600061348982846141eb565b9392505050565b60006134898284614202565b60006134898284614224565b60006134898284614237565b60008183106134c35781613489565b5090919050565b61188e8363a9059cbb60e01b84846040516024016134e99291906140bd565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915261394a565b600b60009054906101000a90046001600160a01b03166001600160a01b031663a2e620456040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561357057600080fd5b505af1925050508015613581575060015b50565b6007546040516340c10f1960e01b81526001600160a01b03909116906340c10f19906135b690309085906004016140bd565b600060405180830381600087803b1580156135d057600080fd5b505af19250505080156135e1575060015b6136395760405162461bcd60e51b8152602060048201526024808201527f5f73656e64546f426f617264726f6f6d3a206661696c656420746f206d696e746044820152632070656760e01b60648201526084016108f2565b602054600090156137155761365f612710610b436020548561347d90919063ffffffff16565b600754601f5460405163a9059cbb60e01b81529293506001600160a01b039182169263a9059cbb9261369792169085906004016140bd565b6020604051808303816000875af11580156136b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136da919061424a565b5060408051428152602081018390527fcb3f34aaa3445b461e6da5492dc89e5c257a59fa598131f3b6bbc97a3638e409910160405180910390a15b602254600090156137f15761373b612710610b436022548661347d90919063ffffffff16565b60075460215460405163a9059cbb60e01b81529293506001600160a01b039182169263a9059cbb9261377392169085906004016140bd565b6020604051808303816000875af1158015613792573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137b6919061424a565b5060408051428152602081018390527fdc8b715b18523e58b7fd0da53259dfa91efd91df4a854d94b136e3333a3b9395910160405180910390a15b6137ff816123ae858561349c565b600a54600754919450613820916001600160a01b0390811691166000613a1c565b600a5460075461383d916001600160a01b03918216911685613b1a565b600a546040516397ffe1d760e01b8152600481018590526001600160a01b03909116906397ffe1d790602401600060405180830381600087803b15801561388357600080fd5b505af1158015613897573d6000803e3d6000fd5b505060408051428152602081018790527f03ca7276ab7799bf73fb79d27ff0610cd7049574f2508ef8445162833d439aea935001905060405180910390a1505050565b600060065b600f8160ff16815481106138f5576138f56140fc565b906000526020600020015483106139305760108160ff168154811061391c5761391c6140fc565b600091825260209091200154601155613940565b6139398161426c565b90506138df565b5050601154919050565b600061399f826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316613bc09092919063ffffffff16565b80519091501561188e57808060200190518101906139bd919061424a565b61188e5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016108f2565b604051636eb1769f60e11b81523060048201526001600160a01b0383811660248301526000919085169063dd62ed3e90604401602060405180830381865afa158015613a6c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a9091906140a4565b905081811015613af45760405162461bcd60e51b815260206004820152602960248201527f5361666545524332303a2064656372656173656420616c6c6f77616e63652062604482015268656c6f77207a65726f60b81b60648201526084016108f2565b6040518282039061095690869063095ea7b360e01b906134e990889086906024016140bd565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa158015613b6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b8f91906140a4565b613b999190614237565b9050613bba8463095ea7b360e01b85846040516024016134e99291906140bd565b50505050565b6060613bcf8484600085613bd7565b949350505050565b606082471015613c385760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016108f2565b6001600160a01b0385163b613c8f5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016108f2565b600080866001600160a01b03168587604051613cab91906142ad565b60006040518083038185875af1925050503d8060008114613ce8576040519150601f19603f3d011682016040523d82523d6000602084013e613ced565b606091505b5091509150613cfd828286613d08565b979650505050505050565b60608315613d17575081613489565b825115613d275782518084602001fd5b8160405162461bcd60e51b81526004016108f291906142c9565b828054828255906000526020600020908101928215613d8b579160200282015b82811115613d8b57825182906affffffffffffffffffffff16905591602001919060010190613d61565b50610bb3929150613dd8565b828054828255906000526020600020908101928215613d8b579160200282015b82811115613d8b578251829061ffff16905591602001919060010190613db7565b5b80821115610bb35760008155600101613dd9565b600060208284031215613dff57600080fd5b5035919050565b60008060408385031215613e1957600080fd5b50508035926020909101359150565b6001600160a01b038116811461358157600080fd5b600060208284031215613e4f57600080fd5b813561348981613e28565b600080600060608486031215613e6f57600080fd5b8335613e7a81613e28565b9250602084013591506040840135613e9181613e28565b809150509250925092565b60008060408385031215613eaf57600080fd5b823560ff81168114613ec057600080fd5b946020939093013593505050565b60008060008060008060c08789031215613ee757600080fd5b8635613ef281613e28565b95506020870135613f0281613e28565b94506040870135613f1281613e28565b93506060870135613f2281613e28565b92506080870135613f3281613e28565b8092505060a087013590509295509295509295565b60008060008060808587031215613f5d57600080fd5b8435613f6881613e28565b9350602085013592506040850135613f7f81613e28565b9396929550929360600135925050565b60208082526024908201527f54726561737572793a2063616c6c6572206973206e6f7420746865206f70657260408201526330ba37b960e11b606082015260800190565b60208082526026908201527f436f6e747261637447756172643a206f6e6520626c6f636b2c206f6e652066756040820152653731ba34b7b760d11b606082015260800190565b60208082526019908201527f54726561737572793a206e6f7420737461727465642079657400000000000000604082015260600190565b60006020828403121561406257600080fd5b815161348981613e28565b6020808252601e908201527f54726561737572793a206e656564206d6f7265207065726d697373696f6e0000604082015260600190565b6000602082840312156140b657600080fd5b5051919050565b6001600160a01b03929092168252602082015260400190565b6020808252600c908201526b6f7574206f662072616e676560a01b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060ff821660ff810361413e5761413e614112565b60010192915050565b60006020828403121561415957600080fd5b81516001600160901b038116811461348957600080fd5b60208082526029908201527f496e6465782068617320746f206265206c6f776572207468616e20636f756e74604082015268206f6620746965727360b81b606082015260800190565b60ff8281168282160390811115612b5557612b55614112565b60ff8181168382160190811115612b5557612b55614112565b8082028115828204841417612b5557612b55614112565b60008261421f57634e487b7160e01b600052601260045260246000fd5b500490565b81810381811115612b5557612b55614112565b80820180821115612b5557612b55614112565b60006020828403121561425c57600080fd5b8151801515811461348957600080fd5b600060ff82168061427f5761427f614112565b6000190192915050565b60005b838110156142a457818101518382015260200161428c565b50506000910152565b600082516142bf818460208701614289565b9190910192915050565b60208152600082518060208401526142e8816040850160208701614289565b601f01601f1916919091016040019291505056fea2646970667358221220925a509f332f0a091675d0de269ecc86b157601ec862d733c5dbd33cefbef7d364736f6c63430008110033
Deployed ByteCode Sourcemap
36207:23119:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;58729:144;;;;;;:::i;:::-;;:::i;:::-;;38229:35;;;;;;;;;345:25:1;;;333:2;318:18;38229:35:0;;;;;;;;49969:318;;;;;;:::i;:::-;;:::i;37129:30::-;;;;;;46141:319;;;;;;:::i;:::-;;:::i;42200:729::-;;;:::i;42937:786::-;;;:::i;52846:1080::-;;;;;;:::i;:::-;;:::i;49754:207::-;;;;;;:::i;:::-;;:::i;36582:31::-;;;;;-1:-1:-1;;;36582:31:0;;;;;;;;;799:14:1;;792:22;774:41;;762:2;747:18;36582:31:0;634:187:1;45862:271:0;;;;;;:::i;:::-;;:::i;37380:47::-;;;;;;51000:462;;;:::i;36960:21::-;;;;;-1:-1:-1;;;;;36960:21:0;;;;;;-1:-1:-1;;;;;990:32:1;;;972:51;;960:2;945:18;36960:21:0;826:203:1;40292:308:0;;;:::i;45654:87::-;;;;;;:::i;:::-;;:::i;37927:30::-;;;;;;37764:36;;;;;;37868:29;;;;;;40044:89;40114:11;;-1:-1:-1;;;40114:11:0;;;;40044:89;;59129:194;;;;;;:::i;:::-;;:::i;38038:41::-;;;;;;50295:201;;;;;;:::i;:::-;;:::i;36988:21::-;;;;;-1:-1:-1;;;;;36988:21:0;;;38200:22;;;;;-1:-1:-1;;;;;38200:22:0;;;50504:330;;;;;;:::i;:::-;;:::i;57946:421::-;;;;;;:::i;:::-;;:::i;51470:1368::-;;;;;;:::i;:::-;;:::i;41053:711::-;;;:::i;38156:35::-;;;;;;36536:23;;;;;-1:-1:-1;;;;;36536:23:0;;;48092:257;;;;;;:::i;:::-;;:::i;40951:94::-;41021:16;;40951:94;;37168:31;;;;;;55470:2335;;;:::i;37018:24::-;;;;;-1:-1:-1;;;;;37018:24:0;;;45542:104;;;;;;:::i;:::-;;:::i;45749:105::-;;;;;;:::i;:::-;;:::i;41772:420::-;;;:::i;36636:24::-;;;;;;36934:19;;;;;-1:-1:-1;;;;;36934:19:0;;;37096:26;;;;;;37333:40;;;;;;36789:112;;;;;;:::i;:::-;;:::i;37642:46::-;;;;;;47482:291;;;;;;:::i;:::-;;:::i;38127:22::-;;;;;-1:-1:-1;;;;;38127:22:0;;;36667:24;;;;;;48357:499;;;;;;:::i;:::-;;:::i;46468:593::-;;;;;;:::i;:::-;;:::i;43777:1648::-;;;;;;:::i;:::-;;:::i;49484:129::-;;;;;;:::i;:::-;;:::i;37208:28::-;;;;;;:::i;:::-;;:::i;37243:34::-;;;;;;:::i;:::-;;:::i;49621:125::-;;;;;;:::i;:::-;;:::i;58881:240::-;;;;;;:::i;:::-;;:::i;57813:125::-;;;;;;:::i;:::-;;:::i;58375:134::-;;;;;;:::i;:::-;;:::i;45433:101::-;;;;;;:::i;:::-;;:::i;36417:40::-;;36450:7;36417:40;;37807:30;;;;;;48864:612;;;;;;:::i;:::-;;:::i;40155:114::-;;;:::i;38002:29::-;;;;;;37964:31;;;;;;47781:303;;;;;;:::i;:::-;;:::i;47069:405::-;;;;;;:::i;:::-;;:::i;37286:40::-;;;;;;37483:34;;;;;;37434:42;;;;;;37049:24;;;;;-1:-1:-1;;;;;37049:24:0;;;37605:30;;;;;;58517:204;;;;;;:::i;:::-;;:::i;36698:45::-;;;;;;40608:320;;;:::i;58729:144::-;39007:8;;-1:-1:-1;;;;;39007:8:0;39019:10;39007:22;38999:71;;;;-1:-1:-1;;;38999:71:0;;;;;;;:::i;:::-;;;;;;;;;58827:9:::1;::::0;58816:49:::1;::::0;-1:-1:-1;;;58816:49:0;;::::1;::::0;::::1;345:25:1::0;;;-1:-1:-1;;;;;58827:9:0;;::::1;::::0;58816:41:::1;::::0;318:18:1;;58816:49:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;58729:144:::0;:::o;49969:318::-;39007:8;;-1:-1:-1;;;;;39007:8:0;39019:10;39007:22;38999:71;;;;-1:-1:-1;;;38999:71:0;;;;;;;:::i;:::-;50087:15:::1;;50066:17;:36;;50058:90;;;::::0;-1:-1:-1;;;50058:90:0;;4724:2:1;50058:90:0::1;::::0;::::1;4706:21:1::0;4763:2;4743:18;;;4736:30;4802:34;4782:18;;;4775:62;-1:-1:-1;;;4853:18:1;;;4846:39;4902:19;;50058:90:0::1;4522:405:1::0;50058:90:0::1;50188:3;50167:17;:24;;50159:73;;;::::0;-1:-1:-1;;;50159:73:0;;5134:2:1;50159:73:0::1;::::0;::::1;5116:21:1::0;5173:2;5153:18;;;5146:30;5212:34;5192:18;;;5185:62;-1:-1:-1;;;5263:18:1;;;5256:34;5307:19;;50159:73:0::1;4932:400:1::0;50159:73:0::1;50243:16;:36:::0;49969:318::o;46141:319::-;39007:8;;-1:-1:-1;;;;;39007:8:0;39019:10;39007:22;38999:71;;;;-1:-1:-1;;;38999:71:0;;;;;;;:::i;:::-;46287:2:::1;46257:26;:32;;:70;;;;;46323:4;46293:26;:34;;46257:70;46249:123;;;::::0;-1:-1:-1;;;46249:123:0;;5539:2:1;46249:123:0::1;::::0;::::1;5521:21:1::0;5578:2;5558:18;;;5551:30;5617:34;5597:18;;;5590:62;-1:-1:-1;;;5668:18:1;;;5661:38;5716:19;;46249:123:0::1;5337:404:1::0;46249:123:0::1;46398:25;:54:::0;46141:319::o;42200:729::-;42252:13;42278:17;42298:13;:11;:13::i;:::-;42278:33;;42339:11;;42326:9;:24;42322:600;;42371:15;;42390:1;42371:20;42367:544;;42452:11;;:18;;42468:1;42452:15;:18::i;:::-;42444:26;;42267:662;42200:729;:::o;42367:544::-;42511:19;42533:36;42559:9;42533:21;42549:4;42533:11;;:15;;:21;;;;:::i;:::-;:25;;:36::i;:::-;42511:58;;42607:23;42633:60;42687:5;42633:49;42666:15;;42633:28;42649:11;;42633;:15;;:28;;;;:::i;:::-;:32;;:49::i;:60::-;42607:86;;42720:39;42757:1;42720:32;42736:15;42720:11;;:15;;:32;;;;:::i;:39::-;42712:47;;42800:1;42782:15;;:19;:46;;;;;42813:15;;42805:5;:23;42782:46;42778:118;;;42861:15;;42853:23;;42778:118;42492:419;;42367:544;42267:662;42200:729;:::o;42937:786::-;42988:13;43014:17;43034:13;:11;:13::i;:::-;43014:33;;43074:15;;43062:9;:27;43058:658;;;43106:33;43142:42;43180:3;43142:33;43158:16;;43142:11;;:15;;:33;;;;:::i;:42::-;43106:78;;43216:25;43203:9;:38;43199:506;;43295:22;43320:57;43371:5;43320:46;43351:14;;43320:26;43334:11;;43320:9;:13;;:26;;;;:::i;:57::-;43295:82;;43404:38;43440:1;43404:31;43420:14;43404:11;;:15;;:31;;;;:::i;:38::-;43396:46;;43482:11;;43465:14;;:28;:54;;;;;43505:14;;43497:5;:22;43465:54;43461:125;;;43552:14;;43544:22;;43243:358;43091:625;43003:720;42937:786;:::o;43199:506::-;43671:11;;:18;;43687:1;43671:15;:18::i;:::-;43663:26;;43091:625;43003:720;42937:786;:::o;52846:1080::-;35668:12;35636:4;35660:21;;;;;;;;;;;35682:9;35660:32;;;;;;;;;;35885:29;35877:80;;;;-1:-1:-1;;;35877:80:0;;;;;;;:::i;:::-;35801:12;35769:4;35793:21;;;;;;;;;;;35815:10;35793:33;;;;;;;;;;35976:29;35968:80;;;;-1:-1:-1;;;35968:80:0;;;;;;;:::i;:::-;39160:9:::1;;39141:15;:28;;39133:66;;;;-1:-1:-1::0;;;39133:66:0::1;;;;;;;:::i;:::-;39616:6:::2;::::0;39604:30:::2;::::0;;-1:-1:-1;;;39604:30:0;;;;39646:4:::2;::::0;-1:-1:-1;;;;;39616:6:0::2;::::0;39604:28:::2;::::0;:30:::2;::::0;;::::2;::::0;::::2;::::0;;;;;;;;39616:6;39604:30:::2;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;39604:47:0::2;;:115;;;;-1:-1:-1::0;39684:6:0::2;::::0;39672:30:::2;::::0;;-1:-1:-1;;;39672:30:0;;;;39714:4:::2;::::0;-1:-1:-1;;;;;39684:6:0::2;::::0;39672:28:::2;::::0;:30:::2;::::0;;::::2;::::0;::::2;::::0;;;;;;;;39684:6;39672:30:::2;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;39672:47:0::2;;39604:115;:183;;;;-1:-1:-1::0;39749:9:0::2;::::0;39740:30:::2;::::0;;-1:-1:-1;;;39740:30:0;;;;39782:4:::2;::::0;-1:-1:-1;;;;;39749:9:0::2;::::0;39740:28:::2;::::0;:30:::2;::::0;;::::2;::::0;::::2;::::0;;;;;;;;39749:9;39740:30:::2;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;39740:47:0::2;;39604:183;39578:267;;;;-1:-1:-1::0;;;39578:267:0::2;;;;;;;:::i;:::-;52993:1:::3;52979:11;:15;52971:74;;;::::0;-1:-1:-1;;;52971:74:0;;7324:2:1;52971:74:0::3;::::0;::::3;7306:21:1::0;7363:2;7343:18;;;7336:30;7402:34;7382:18;;;7375:62;-1:-1:-1;;;7453:18:1;;;7446:44;7507:19;;52971:74:0::3;7122:410:1::0;52971:74:0::3;53058:16;53077:13;:11;:13::i;:::-;53058:32;;53121:11;53109:8;:23;53101:63;;;::::0;-1:-1:-1;;;53101:63:0;;7739:2:1;53101:63:0::3;::::0;::::3;7721:21:1::0;7778:2;7758:18;;;7751:30;7817:29;7797:18;;;7790:57;7864:18;;53101:63:0::3;7537:351:1::0;53101:63:0::3;53208:15;;53197:8;:26;53175:140;;;::::0;-1:-1:-1;;;53175:140:0;;8095:2:1;53175:140:0::3;::::0;::::3;8077:21:1::0;8134:2;8114:18;;;8107:30;8173:34;8153:18;;;8146:62;-1:-1:-1;;;8224:18:1;;;8217:45;8279:19;;53175:140:0::3;7893:411:1::0;53175:140:0::3;53328:13;53344:20;:18;:20::i;:::-;53328:36;;53391:1;53383:5;:9;53375:49;;;::::0;-1:-1:-1;;;53375:49:0;;8511:2:1;53375:49:0::3;::::0;::::3;8493:21:1::0;8550:2;8530:18;;;8523:30;8589:29;8569:18;;;8562:57;8636:18;;53375:49:0::3;8309:351:1::0;53375:49:0::3;53437:18;53458:32;53485:4;53458:22;:11:::0;53474:5;53458:15:::3;:22::i;:32::-;53516:4;::::0;53509:37:::3;::::0;-1:-1:-1;;;53509:37:0;;53540:4:::3;53509:37;::::0;::::3;972:51:1::0;53437:53:0;;-1:-1:-1;53437:53:0;;-1:-1:-1;;;;;53516:4:0;;::::3;::::0;53509:22:::3;::::0;945:18:1;;53509:37:0::3;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:51;;53501:101;;;::::0;-1:-1:-1;;;53501:101:0;;9056:2:1;53501:101:0::3;::::0;::::3;9038:21:1::0;9095:2;9075:18;;;9068:30;9134:34;9114:18;;;9107:62;-1:-1:-1;;;9185:18:1;;;9178:35;9230:19;;53501:101:0::3;8854:401:1::0;53501:101:0::3;53634:60;53655:38;53664:16;;53682:10;53655:8;:38::i;:::-;53634:16;::::0;;:20:::3;:60::i;:::-;53615:16;:79:::0;53719:6:::3;::::0;53707:53:::3;::::0;-1:-1:-1;;;53707:53:0;;-1:-1:-1;;;;;53719:6:0;;::::3;::::0;53707:28:::3;::::0;:53:::3;::::0;53736:10:::3;::::0;53748:11;;53707:53:::3;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;-1:-1:-1::0;;53778:4:0::3;::::0;53771:49:::3;::::0;-1:-1:-1;;;;;;53778:4:0::3;::::0;-1:-1:-1;53797:10:0::3;53809::::0;53771:25:::3;:49::i;:::-;53833:17;:15;:17::i;:::-;53868:50;::::0;;9713:25:1;;;9769:2;9754:18;;9747:34;;;53882:10:0::3;::::0;53868:50:::3;::::0;9686:18:1;53868:50:0::3;;;;;;;-1:-1:-1::0;;36083:12:0;36075:7;:21;;;;;;;;;;;36097:9;36075:32;;;;;;;;:39;;36110:4;-1:-1:-1;;36075:39:0;;;;;;;;36147:10;36125:33;;;;;;:40;;;;;;;;;;-1:-1:-1;;;52846:1080:0:o;49754:207::-;39007:8;;-1:-1:-1;;;;;39007:8:0;39019:10;39007:22;38999:71;;;;-1:-1:-1;;;38999:71:0;;;;;;;:::i;:::-;49869:5:::1;49849:16;:25;;49841:67;;;::::0;-1:-1:-1;;;49841:67:0;;9994:2:1;49841:67:0::1;::::0;::::1;9976:21:1::0;10033:2;10013:18;;;10006:30;10072:31;10052:18;;;10045:59;10121:18;;49841:67:0::1;9792:353:1::0;49841:67:0::1;49919:15;:34:::0;49754:207::o;45862:271::-;39007:8;;-1:-1:-1;;;;;39007:8:0;39019:10;39007:22;38999:71;;;;-1:-1:-1;;;38999:71:0;;;;;;;:::i;:::-;45977:29:::1;46002:3;45977:20;45993:3;45977:11;;:15;;:20;;;;:::i;:29::-;45957:16;:49;;45949:74;;;;-1:-1:-1::0;;;45949:74:0::1;;;;;;;:::i;:::-;46050:11;:30:::0;;;46091:15:::1;:34:::0;45862:271::o;51000:462::-;51101:4;;51139:22;;;-1:-1:-1;;;51139:22:0;;;;51056:7;;-1:-1:-1;;;;;51101:4:0;;51056:7;;51101:4;;51139:20;;:22;;;;;;;;;;;;;;51101:4;51139:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;51117:44;;51172:23;51215:13;51210:195;51244:23;:30;51234:40;;;;51210:195;;;51320:73;51340:8;-1:-1:-1;;;;;51340:18:0;;51359:23;51383:7;51359:32;;;;;;;;;;:::i;:::-;;;;;;;;;;;51340:52;;;;;;-1:-1:-1;;;;;;51340:52:0;;;-1:-1:-1;;;;;51359:32:0;;;51340:52;;;972:51:1;945:18;;51340:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;51320:15;;:19;:73::i;:::-;51302:91;-1:-1:-1;51276:9:0;;;:::i;:::-;;;51210:195;;;-1:-1:-1;51422:32:0;:11;51438:15;51422;:32::i;:::-;51415:39;;;;;51000:462;:::o;40292:308::-;40377:9;;40396:4;;40369:38;;-1:-1:-1;;;40369:38:0;;40336:16;;-1:-1:-1;;;;;40377:9:0;;;;40369:26;;:38;;40396:4;;;;40402;;40369:38;;;:::i;:::-;;;;;;;;;;;;;;;;;;;-1:-1:-1;40369:38:0;;;;;;;;-1:-1:-1;;40369:38:0;;;;;;;;;;;;:::i;:::-;;;40365:228;;40502:79;;-1:-1:-1;;;40502:79:0;;11756:2:1;40502:79:0;;;11738:21:1;11795:2;11775:18;;;11768:30;11834:34;11814:18;;;11807:62;11905:34;11885:18;;;11878:62;-1:-1:-1;;;11956:19:1;;;11949:36;12002:19;;40502:79:0;11554:473:1;40365:228:0;-1:-1:-1;;;;;40454:14:0;;40292:308;-1:-1:-1;40292:308:0:o;45654:87::-;39007:8;;-1:-1:-1;;;;;39007:8:0;39019:10;39007:22;38999:71;;;;-1:-1:-1;;;38999:71:0;;;;;;;:::i;:::-;45722:4:::1;:11:::0;;-1:-1:-1;;;;;;45722:11:0::1;-1:-1:-1::0;;;;;45722:11:0;;;::::1;::::0;;;::::1;::::0;;45654:87::o;59129:194::-;39007:8;;-1:-1:-1;;;;;39007:8:0;39019:10;39007:22;38999:71;;;;-1:-1:-1;;;38999:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;59216:20:0;::::1;59208:57;;;::::0;-1:-1:-1;;;59208:57:0;;12234:2:1;59208:57:0::1;::::0;::::1;12216:21:1::0;12273:2;12253:18;;;12246:30;12312:26;12292:18;;;12285:54;12356:18;;59208:57:0::1;12032:348:1::0;59208:57:0::1;59284:4;::::0;59276:39:::1;::::0;-1:-1:-1;;;59276:39:0;;-1:-1:-1;;;;;990:32:1;;;59276:39:0::1;::::0;::::1;972:51:1::0;59284:4:0;;::::1;::::0;59276:31:::1;::::0;945:18:1;;59276:39:0::1;826:203:1::0;50295:201:0;39007:8;;-1:-1:-1;;;;;39007:8:0;39019:10;39007:22;38999:71;;;;-1:-1:-1;;;38999:71:0;;;;;;;:::i;:::-;50407:5:::1;50388:15;:24;;50380:65;;;::::0;-1:-1:-1;;;50380:65:0;;12587:2:1;50380:65:0::1;::::0;::::1;12569:21:1::0;12626:2;12606:18;;;12599:30;12665;12645:18;;;12638:58;12713:18;;50380:65:0::1;12385:352:1::0;50380:65:0::1;50456:14;:32:::0;50295:201::o;50504:330::-;39007:8;;-1:-1:-1;;;;;39007:8:0;39019:10;39007:22;38999:71;;;;-1:-1:-1;;;38999:71:0;;;;;;;:::i;:::-;50652:5:::1;50621:27;:36;;:76;;;;;50692:5;50661:27;:36;;50621:76;50613:130;;;::::0;-1:-1:-1;;;50613:130:0;;12944:2:1;50613:130:0::1;::::0;::::1;12926:21:1::0;12983:2;12963:18;;;12956:30;13022:34;13002:18;;;12995:62;-1:-1:-1;;;13073:18:1;;;13066:39;13122:19;;50613:130:0::1;12742:405:1::0;50613:130:0::1;50770:26;:56:::0;50504:330::o;57946:421::-;39007:8;;-1:-1:-1;;;;;39007:8:0;39019:10;39007:22;38999:71;;;;-1:-1:-1;;;38999:71:0;;;;;;;:::i;:::-;58177:4:::1;::::0;-1:-1:-1;;;;;58177:4:0;;::::1;58150:32:::0;;::::1;::::0;58142:48:::1;;;::::0;-1:-1:-1;;;58142:48:0;;13354:2:1;58142:48:0::1;::::0;::::1;13336:21:1::0;13393:1;13373:18;;;13366:29;-1:-1:-1;;;13411:18:1;;;13404:33;13454:18;;58142:48:0::1;13152:326:1::0;58142:48:0::1;58236:6;::::0;-1:-1:-1;;;;;58236:6:0;;::::1;58209:34:::0;;::::1;::::0;58201:51:::1;;;;-1:-1:-1::0;;;58201:51:0::1;;;;;;13685:2:1::0;13667:21;;;13724:1;13704:18;;;13697:29;-1:-1:-1;;;13757:2:1;13742:18;;13735:34;13801:2;13786:18;;13483:327;58201:51:0::1;58298:6;::::0;-1:-1:-1;;;;;58298:6:0;;::::1;58271:34:::0;;::::1;::::0;58263:52:::1;;;::::0;-1:-1:-1;;;58263:52:0;;14017:2:1;58263:52:0::1;::::0;::::1;13999:21:1::0;14056:1;14036:18;;;14029:29;-1:-1:-1;;;14074:18:1;;;14067:35;14119:18;;58263:52:0::1;13815:328:1::0;58263:52:0::1;58326:33;-1:-1:-1::0;;;;;58326:19:0;::::1;58346:3:::0;58351:7;58326:19:::1;:33::i;:::-;57946:421:::0;;;:::o;51470:1368::-;35668:12;35636:4;35660:21;;;;;;;;;;;35682:9;35660:32;;;;;;;;;;35885:29;35877:80;;;;-1:-1:-1;;;35877:80:0;;;;;;;:::i;:::-;35801:12;35769:4;35793:21;;;;;;;;;;;35815:10;35793:33;;;;;;;;;;35976:29;35968:80;;;;-1:-1:-1;;;35968:80:0;;;;;;;:::i;:::-;39160:9:::1;;39141:15;:28;;39133:66;;;;-1:-1:-1::0;;;39133:66:0::1;;;;;;;:::i;:::-;39616:6:::2;::::0;39604:30:::2;::::0;;-1:-1:-1;;;39604:30:0;;;;39646:4:::2;::::0;-1:-1:-1;;;;;39616:6:0::2;::::0;39604:28:::2;::::0;:30:::2;::::0;;::::2;::::0;::::2;::::0;;;;;;;;39616:6;39604:30:::2;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;39604:47:0::2;;:115;;;;-1:-1:-1::0;39684:6:0::2;::::0;39672:30:::2;::::0;;-1:-1:-1;;;39672:30:0;;;;39714:4:::2;::::0;-1:-1:-1;;;;;39684:6:0::2;::::0;39672:28:::2;::::0;:30:::2;::::0;;::::2;::::0;::::2;::::0;;;;;;;;39684:6;39672:30:::2;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;39672:47:0::2;;39604:115;:183;;;;-1:-1:-1::0;39749:9:0::2;::::0;39740:30:::2;::::0;;-1:-1:-1;;;39740:30:0;;;;39782:4:::2;::::0;-1:-1:-1;;;;;39749:9:0::2;::::0;39740:28:::2;::::0;:30:::2;::::0;;::::2;::::0;::::2;::::0;;;;;;;;39749:9;39740:30:::2;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;39740:47:0::2;;39604:183;39578:267;;;;-1:-1:-1::0;;;39578:267:0::2;;;;;;;:::i;:::-;27189:1:::3;27787:7;;:19:::0;27779:63:::3;;;::::0;-1:-1:-1;;;27779:63:0;;14350:2:1;27779:63:0::3;::::0;::::3;14332:21:1::0;14389:2;14369:18;;;14362:30;14428:33;14408:18;;;14401:61;14479:18;;27779:63:0::3;14148:355:1::0;27779:63:0::3;27189:1;27920:7;:18:::0;51612:14;51604:75:::4;;;::::0;-1:-1:-1;;;51604:75:0;;14710:2:1;51604:75:0::4;::::0;::::4;14692:21:1::0;14749:2;14729:18;;;14722:30;14788:34;14768:18;;;14761:62;-1:-1:-1;;;14839:18:1;;;14832:46;14895:19;;51604:75:0::4;14508:412:1::0;51604:75:0::4;51692:16;51711:13;:11;:13::i;:::-;51692:32;;51755:11;51743:8;:23;51735:63;;;::::0;-1:-1:-1;;;51735:63:0;;7739:2:1;51735:63:0::4;::::0;::::4;7721:21:1::0;7778:2;7758:18;;;7751:30;7817:29;7797:18;;;7790:57;7864:18;;51735:63:0::4;7537:351:1::0;51735:63:0::4;51842:11;;51831:8;:22;51809:137;;;::::0;-1:-1:-1;;;51809:137:0;;15127:2:1;51809:137:0::4;::::0;::::4;15109:21:1::0;15166:2;15146:18;;;15139:30;15205:34;15185:18;;;15178:62;-1:-1:-1;;;15256:18:1;;;15249:47;15313:19;;51809:137:0::4;14925:413:1::0;51809:137:0::4;51981:26;;51967:10;:40;;51959:95;;;::::0;-1:-1:-1;;;51959:95:0;;15545:2:1;51959:95:0::4;::::0;::::4;15527:21:1::0;15584:2;15564:18;;;15557:30;15623:34;15603:18;;;15596:62;-1:-1:-1;;;15674:18:1;;;15667:40;15724:19;;51959:95:0::4;15343:406:1::0;51959:95:0::4;52067:13;52083:21;:19;:21::i;:::-;52067:37;;52131:1;52123:5;:9;52115:49;;;::::0;-1:-1:-1;;;52115:49:0;;8511:2:1;52115:49:0::4;::::0;::::4;8493:21:1::0;8550:2;8530:18;;;8523:30;8589:29;8569:18;;;8562:57;8636:18;;52115:49:0::4;8309:351:1::0;52115:49:0::4;52177:19;52199:31;52225:4;52199:21;:10:::0;52214:5;52199:14:::4;:21::i;:31::-;52177:53;;52241:17;52261:25;:23;:25::i;:::-;52241:45;;52297:21;52321:45;52354:11;52328:6;;;;;;;;;-1:-1:-1::0;;;;;52328:6:0::4;-1:-1:-1::0;;;;;52321:26:0::4;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:32:::0;::::4;:45::i;:::-;52297:69;;52402:45;52441:5;52402:34;52416:19;;52402:9;:13;;:34;;;;:::i;:45::-;52385:13;:62;;52377:94;;;::::0;-1:-1:-1;;;52377:94:0;;15956:2:1;52377:94:0::4;::::0;::::4;15938:21:1::0;15995:2;15975:18;;;15968:30;-1:-1:-1;;;16014:18:1;;;16007:49;16073:18;;52377:94:0::4;15754:343:1::0;52377:94:0::4;52496:4;::::0;52484:50:::4;::::0;-1:-1:-1;;;52484:50:0;;-1:-1:-1;;;;;52496:4:0;;::::4;::::0;52484:26:::4;::::0;:50:::4;::::0;52511:10:::4;::::0;52523;;52484:50:::4;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::4;;;;;;;;;;;;::::0;::::4;;;;;-1:-1:-1::0;;52561:6:0::4;::::0;52549:49:::4;::::0;-1:-1:-1;;;52549:49:0;;-1:-1:-1;;;;;52561:6:0;;::::4;::::0;-1:-1:-1;52549:24:0::4;::::0;-1:-1:-1;52549:49:0::4;::::0;52574:10:::4;::::0;52586:11;;52549:49:::4;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::4;;;;;;;;;;;;;;;;52545:108;;52611:39;::::0;-1:-1:-1;;;52611:39:0;;16304:2:1;52611:39:0::4;::::0;::::4;16286:21:1::0;16343:2;16323:18;;;16316:30;16382:31;16362:18;;;16355:59;16431:18;;52611:39:0::4;16102:353:1::0;52545:108:0::4;52694:26;::::0;:42:::4;::::0;52725:10;52694:30:::4;:42::i;:::-;52665:26;:71:::0;52747:17:::4;:15;:17::i;:::-;52782:48;::::0;;9713:25:1;;;9769:2;9754:18;;9747:34;;;52794:10:0::4;::::0;52782:48:::4;::::0;9686:18:1;52782:48:0::4;;;;;;;-1:-1:-1::0;;27145:1:0::3;28099:22:::0;;;36083:12;36075:7;:21;;;;;;;;;;;36097:9;36075:32;;;;;;;;:39;;-1:-1:-1;;36075:39:0;;;;;;;;36147:10;36125:33;;;;:40;;;;;;;;;;-1:-1:-1;;;;;51470:1368:0:o;41053:711::-;41104:24;41141:17;41161:13;:11;:13::i;:::-;41141:33;;41202:11;;41189:9;:24;41185:572;;41230:18;41251:25;:23;:25::i;:::-;41230:46;;41291:22;41316:46;41356:5;41316:35;41331:19;;41316:10;:14;;:35;;;;:::i;:46::-;41291:71;;41377:19;41406:6;;;;;;;;;-1:-1:-1;;;;;41406:6:0;-1:-1:-1;;;;;41399:26:0;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41377:50;;41463:11;41446:14;:28;41442:304;;;41495:24;41522:31;:14;41541:11;41522:18;:31::i;:::-;41495:58;-1:-1:-1;41572:23:0;41598:41;41634:4;41598:31;41495:58;41619:9;41598:20;:31::i;:41::-;41572:67;;41677:53;41686:26;;41714:15;41677:8;:53::i;:::-;41658:72;;41476:270;;41442:304;41215:542;;;41130:634;41053:711;:::o;48092:257::-;39007:8;;-1:-1:-1;;;;;39007:8:0;39019:10;39007:22;38999:71;;;;-1:-1:-1;;;38999:71:0;;;;;;;:::i;:::-;48219:4:::1;48195:20;:28;;:61;;;;;48251:5;48227:20;:29;;48195:61;48187:86;;;;-1:-1:-1::0;;;48187:86:0::1;;;;;;;:::i;:::-;48299:19;:42:::0;48092:257::o;55470:2335::-;35668:12;35636:4;35660:21;;;;;;;;;;;35682:9;35660:32;;;;;;;;;;35885:29;35877:80;;;;-1:-1:-1;;;35877:80:0;;;;;;;:::i;:::-;35801:12;35769:4;35793:21;;;;;;;;;;;35815:10;35793:33;;;;;;;;;;35976:29;35968:80;;;;-1:-1:-1;;;35968:80:0;;;;;;;:::i;:::-;39160:9:::1;;39141:15;:28;;39133:66;;;;-1:-1:-1::0;;;39133:66:0::1;;;;;;;:::i;:::-;39287:16:::2;:14;:16::i;:::-;39268:15;:35;;39260:72;;;::::0;-1:-1:-1;;;39260:72:0;;16662:2:1;39260:72:0::2;::::0;::::2;16644:21:1::0;16701:2;16681:18;;;16674:30;16740:26;16720:18;;;16713:54;16784:18;;39260:72:0::2;16460:348:1::0;39260:72:0::2;39616:6:::3;::::0;39604:30:::3;::::0;;-1:-1:-1;;;39604:30:0;;;;39646:4:::3;::::0;-1:-1:-1;;;;;39616:6:0::3;::::0;39604:28:::3;::::0;:30:::3;::::0;;::::3;::::0;::::3;::::0;;;;;;;;39616:6;39604:30:::3;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;39604:47:0::3;;:115;;;;-1:-1:-1::0;39684:6:0::3;::::0;39672:30:::3;::::0;;-1:-1:-1;;;39672:30:0;;;;39714:4:::3;::::0;-1:-1:-1;;;;;39684:6:0::3;::::0;39672:28:::3;::::0;:30:::3;::::0;;::::3;::::0;::::3;::::0;;;;;;;;39684:6;39672:30:::3;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;39672:47:0::3;;39604:115;:183;;;;-1:-1:-1::0;39749:9:0::3;::::0;39740:30:::3;::::0;;-1:-1:-1;;;39740:30:0;;;;39782:4:::3;::::0;-1:-1:-1;;;;;39749:9:0::3;::::0;39740:28:::3;::::0;:30:::3;::::0;;::::3;::::0;::::3;::::0;;;;;;;;39749:9;39740:30:::3;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;39740:47:0::3;;39604:183;39578:267;;;;-1:-1:-1::0;;;39578:267:0::3;;;;;;;:::i;:::-;55574:17:::4;:15;:17::i;:::-;55626:13;:11;:13::i;:::-;55602:21;:37:::0;55700:16:::4;::::0;55650:17:::4;::::0;55670:47:::4;::::0;:25:::4;:23;:25::i;:::-;:29:::0;::::4;:47::i;:::-;55650:67;;55740:15;;55732:5;;:23;55728:2070;;;55824:75;55841:57;55892:5;55841:46;55855:31;;55841:9;:13;;:46;;;;:::i;:57::-;55824:16;:75::i;:::-;55728:2070;;;55960:15;;55936:21;;:39;55932:1855;;;56122:6;::::0;56115:28:::4;::::0;;-1:-1:-1;;;56115:28:0;;;;56094:18:::4;::::0;-1:-1:-1;;;;;56122:6:0::4;::::0;56115:26:::4;::::0;:28:::4;::::0;;::::4;::::0;::::4;::::0;;;;;;;;56122:6;56115:28:::4;;;;;;;;;::::0;::::4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;56094:49;;56162:19;56184:38;56210:11;;56184:21;;:25;;:38;;;;:::i;:::-;56162:60;;56241:21;56281:26:::0;56326:12:::4;56341:56;56392:4;56341:46;56377:9;56341:35;:46::i;:56::-;56326:71;;56434:4;56420:11;:18;56416:85;;;56477:4;56463:18;;56416:85;56543:52;56589:5;56543:41;56558:25;;56543:10;:14;;:41;;;;:::i;:52::-;56523:16;;:72;56519:785;;56710:36;56741:4;56710:26;:9:::0;56724:11;56710:13:::4;:26::i;:36::-;56689:57;;56519:785;;;56864:20;56887:36;56918:4;56887:26;:9:::0;56901:11;56887:13:::4;:26::i;:36::-;56864:59;;56967:61;57022:5;56967:50;56984:32;;56967:12;:16;;:50;;;;:::i;:61::-;56946:82:::0;-1:-1:-1;57067:36:0::4;:12:::0;56946:82;57067:16:::4;:36::i;:::-;57130:26;::::0;57051:52;;-1:-1:-1;57130:30:0;57126:159:::4;;57205:56;57255:5;57205:45;57223:26;;57205:13;:17;;:45;;;;:::i;:56::-;57189:72;;57126:159;56772:532;56519:785;57326:22:::0;;57322:107:::4;;57373:36;57390:18;57373:16;:36::i;:::-;57451:17:::0;;57447:325:::4;;57512:16;::::0;:35:::4;::::0;57533:13;57512:20:::4;:35::i;:::-;57493:16;:54:::0;57586:4:::4;::::0;57574:52:::4;::::0;-1:-1:-1;;;57574:52:0;;-1:-1:-1;;;;;57586:4:0;;::::4;::::0;57574:22:::4;::::0;:52:::4;::::0;57605:4:::4;::::0;57612:13;;57574:52:::4;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::4;;;;;;;;;;;;;;;;57570:109;;57638:38;::::0;-1:-1:-1;;;57638:38:0;;17015:2:1;57638:38:0::4;::::0;::::4;16997:21:1::0;17054:2;17034:18;;;17027:30;17093;17073:18;;;17066:58;17141:18;;57638:38:0::4;16813:352:1::0;57570:109:0::4;57706:46;::::0;;57721:15:::4;9713:25:1::0;;9769:2;9754:18;;9747:34;;;57706:46:0::4;::::0;9686:18:1;57706:46:0::4;;;;;;;57447:325;55977:1810;;;;;55932:1855;-1:-1:-1::0;39367:5:0::2;::::0;:12:::2;::::0;39377:1:::2;39367:9;:12::i;:::-;39359:5;:20:::0;39436:15:::2;::::0;39420:13:::2;:11;:13::i;:::-;:31;39419:109;;39459:69;39522:5;39459:58;39489:27;;39459:25;:23;:25::i;:69::-;39419:109;;;39455:1;39419:109;39390:26;:138:::0;36083:12;36075:7;:21;;;;;;;;;;;36097:9;36075:32;;;;;;;;:39;;36110:4;-1:-1:-1;;36075:39:0;;;;;;;;36147:10;36125:33;;;;;;:40;;;;;;;;;;55470:2335::o;45542:104::-;39007:8;;-1:-1:-1;;;;;39007:8:0;39019:10;39007:22;38999:71;;;;-1:-1:-1;;;38999:71:0;;;;;;;:::i;:::-;45616:9:::1;:22:::0;;-1:-1:-1;;;;;;45616:22:0::1;-1:-1:-1::0;;;;;45616:22:0;;;::::1;::::0;;;::::1;::::0;;45542:104::o;45749:105::-;39007:8;;-1:-1:-1;;;;;39007:8:0;39019:10;39007:22;38999:71;;;;-1:-1:-1;;;38999:71:0;;;;;;;:::i;:::-;45824:9:::1;:22:::0;;-1:-1:-1;;;;;;45824:22:0::1;-1:-1:-1::0;;;;;45824:22:0;;;::::1;::::0;;;::::1;::::0;;45749:105::o;41772:420::-;41823:24;41860:17;41880:13;:11;:13::i;:::-;41860:33;;41920:15;;41908:9;:27;41904:281;;;41979:4;;41972:37;;-1:-1:-1;;;41972:37:0;;42003:4;41972:37;;;972:51:1;41952:17:0;;-1:-1:-1;;;;;41979:4:0;;41972:22;;945:18:1;;41972:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41952:57;;42024:13;42040:20;:18;:20::i;:::-;42024:36;-1:-1:-1;42079:9:0;;42075:99;;42128:30;42152:5;42128:19;:9;42142:4;42128:13;:19::i;36789:112::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;36789:112:0;;-1:-1:-1;36789:112:0;:::o;47482:291::-;39007:8;;-1:-1:-1;;;;;39007:8:0;39019:10;39007:22;38999:71;;;;-1:-1:-1;;;38999:71:0;;;;;;;:::i;:::-;47627:3:::1;47597:26;:33;;:72;;;;;47664:5;47634:26;:35;;47597:72;47589:97;;;;-1:-1:-1::0;;;47589:97:0::1;;;;;;;:::i;:::-;47711:25;:54:::0;47482:291::o;48357:499::-;39007:8;;-1:-1:-1;;;;;39007:8:0;39019:10;39007:22;38999:71;;;;-1:-1:-1;;;38999:71:0;;;;;;;:::i;:::-;48508:3:::1;48488:16;:23;;48480:66;;;::::0;-1:-1:-1;;;48480:66:0;;17372:2:1;48480:66:0::1;::::0;::::1;17354:21:1::0;17411:2;17391:18;;;17384:30;17450:32;17430:18;;;17423:60;17500:18;;48480:66:0::1;17170:354:1::0;48480:66:0::1;48615:3;48579:32;:39;;:83;;;;;48658:4;48622:32;:40;;48579:83;48571:142;;;::::0;-1:-1:-1;;;48571:142:0;;17731:2:1;48571:142:0::1;::::0;::::1;17713:21:1::0;17770:2;17750:18;;;17743:30;17809:34;17789:18;;;17782:62;-1:-1:-1;;;17860:18:1;;;17853:44;17914:19;;48571:142:0::1;17529:410:1::0;48571:142:0::1;48737:15;:34:::0;;;;48782:31:::1;:66:::0;48357:499::o;46468:593::-;39007:8;;46558:4;;-1:-1:-1;;;;;39007:8:0;39019:10;39007:22;38999:71;;;;-1:-1:-1;;;38999:71:0;;;;;;;:::i;:::-;46656:1:::1;46647:6;:10;;;46639:64;;;;-1:-1:-1::0;;;46639:64:0::1;;;;;;;:::i;:::-;46718:10;::::0;::::1;::::0;46714:137:::1;;46762:11;46774:10;46783:1;46774:6:::0;:10:::1;:::i;:::-;46762:23;;;;;;;;;;:::i;:::-;;;;;;;;;46753:6;:32;46745:94;;;::::0;-1:-1:-1;;;46745:94:0;;19070:2:1;46745:94:0::1;::::0;::::1;19052:21:1::0;19109:2;19089:18;;;19082:30;19148:34;19128:18;;;19121:62;-1:-1:-1;;;19199:18:1;;;19192:47;19256:19;;46745:94:0::1;18868:413:1::0;46745:94:0::1;46874:1;46865:6;:10;;;46861:132;;;46909:11;46921:10;:6:::0;46930:1:::1;46921:10;:::i;:::-;46909:23;;;;;;;;;;:::i;:::-;;;;;;;;;46900:6;:32;46892:89;;;::::0;-1:-1:-1;;;46892:89:0;;19641:2:1;46892:89:0::1;::::0;::::1;19623:21:1::0;19680:2;19660:18;;;19653:30;19719:34;19699:18;;;19692:62;-1:-1:-1;;;19770:18:1;;;19763:42;19822:19;;46892:89:0::1;19439:408:1::0;46892:89:0::1;47025:6;47003:11;47015:6;47003:19;;;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;:28:::0;-1:-1:-1;47049:4:0::1;39081:1;46468:593:::0;;;;:::o;43777:1648::-;39919:11;;-1:-1:-1;;;39919:11:0;;;;39918:12;39910:54;;;;-1:-1:-1;;;39910:54:0;;20054:2:1;39910:54:0;;;20036:21:1;20093:2;20073:18;;;20066:30;20132:31;20112:18;;;20105:59;20181:18;;39910:54:0;19852:353:1;39910:54:0;43997:4:::1;:11:::0;;-1:-1:-1;;;;;;43997:11:0;;::::1;-1:-1:-1::0;;;;;43997:11:0;;::::1;::::0;;;::::1;::::0;;;44019:6:::1;:15:::0;;;::::1;::::0;;::::1;;::::0;;44045:6:::1;:15:::0;;;::::1;::::0;;::::1;;::::0;;44071:9:::1;:22:::0;;;::::1;::::0;;::::1;;::::0;;44104:9:::1;:22:::0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;44137:9:::1;:22:::0;;;44187:6:::1;44172:11;:22:::0;;;44223:29:::1;::::0;44248:3:::1;::::0;44223:20:::1;::::0;44239:3:::1;44223:15;:20::i;:29::-;44205:15;:47:::0;44307:145:::1;::::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;44307:145:0;;44331:12:::1;44307:145;::::0;::::1;::::0;44345:13:::1;44307:145:::0;;;;;;;44360:13:::1;44307:145:::0;;;;44375:13:::1;44307:145:::0;;;;44390:13:::1;44307:145:::0;;;;44405:14:::1;44307:145:::0;;;;44421:14:::1;44307:145:::0;;;;44437:14:::1;44307:145:::0;;;;::::1;::::0;:11:::1;::::0;:145:::1;;:::i;:::-;-1:-1:-1::0;44463:65:0::1;::::0;;::::1;::::0;::::1;::::0;;44484:3:::1;44463:65:::0;;44489:3:::1;44463:65;::::0;::::1;::::0;44494:3:::1;44463:65:::0;;;;;;;44499:3:::1;44463:65:::0;;;;44504:3:::1;44463:65:::0;;;;44509:3:::1;44463:65:::0;;;;44514:3:::1;44463:65:::0;;;;44519:3:::1;44463:65:::0;;;;44524:3:::1;44463:65:::0;;;;::::1;::::0;:17:::1;::::0;:65:::1;;:::i;:::-;-1:-1:-1::0;44569:3:0::1;44541:25;:31:::0;44647:5:::1;44619:25;:33:::0;44741:4:::1;44706:32;:39:::0;;;44838:3:::1;44808:27;:33:::0;44919:19:::1;:26:::0;45017:3:::1;44998:16;:22:::0;45048:4:::1;45031:14;:21:::0;45131:2:::1;45113:15;:20:::0;45180:3:::1;45146:31;:37:::0;-1:-1:-1;45271:4:0;45264:37:::1;::::0;-1:-1:-1;;;45264:37:0;;45295:4:::1;45264:37;::::0;::::1;972:51:1::0;-1:-1:-1;;;;;45271:4:0;;::::1;::::0;45264:22:::1;::::0;945:18:1;;45264:37:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45245:16;:56:::0;45314:11:::1;:18:::0;;-1:-1:-1;;;;;;45343:21:0;45354:10:::1;45343:21:::0;;;-1:-1:-1;;;45343:21:0;;;;45380:37:::1;::::0;45404:12:::1;345:25:1::0;;45380:37:0::1;::::0;333:2:1;318:18;45380:37:0::1;;;;;;;43777:1648:::0;;;;;;:::o;49484:129::-;39007:8;;-1:-1:-1;;;;;39007:8:0;39019:10;39007:22;38999:71;;;;-1:-1:-1;;;38999:71:0;;;;;;;:::i;:::-;49571:15:::1;:34:::0;49484:129::o;37208:28::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37208:28:0;:::o;37243:34::-;;;;;;;;;;;;49621:125;39007:8;;-1:-1:-1;;;;;39007:8:0;39019:10;39007:22;38999:71;;;;-1:-1:-1;;;38999:71:0;;;;;;;:::i;:::-;49706:14:::1;:32:::0;49621:125::o;58881:240::-;39007:8;;-1:-1:-1;;;;;39007:8:0;39019:10;39007:22;38999:71;;;;-1:-1:-1;;;38999:71:0;;;;;;;:::i;:::-;59052:9:::1;::::0;59041:72:::1;::::0;-1:-1:-1;;;59041:72:0;;-1:-1:-1;;;;;20468:15:1;;;59041:72:0::1;::::0;::::1;20450:34:1::0;20500:18;;;20493:34;;;20563:15;;;20543:18;;;20536:43;59052:9:0;;::::1;::::0;59041:50:::1;::::0;20385:18:1;;59041:72:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;58881:240:::0;;;:::o;57813:125::-;39007:8;;-1:-1:-1;;;;;39007:8:0;39019:10;39007:22;38999:71;;;;-1:-1:-1;;;38999:71:0;;;;;;;:::i;:::-;57892:23:::1;:38:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;57892:38:0;;;;;::::1;::::0;;-1:-1:-1;;;;;;57892:38:0::1;-1:-1:-1::0;;;;;57892:38:0;;;::::1;::::0;;;::::1;::::0;;57813:125::o;58375:134::-;39007:8;;-1:-1:-1;;;;;39007:8:0;39019:10;39007:22;38999:71;;;;-1:-1:-1;;;38999:71:0;;;;;;;:::i;:::-;58468:9:::1;::::0;58457:44:::1;::::0;-1:-1:-1;;;58457:44:0;;-1:-1:-1;;;;;990:32:1;;;58457:44:0::1;::::0;::::1;972:51:1::0;58468:9:0;;::::1;::::0;58457:33:::1;::::0;945:18:1;;58457:44:0::1;826:203:1::0;45433:101:0;39007:8;;-1:-1:-1;;;;;39007:8:0;39019:10;39007:22;38999:71;;;;-1:-1:-1;;;38999:71:0;;;;;;;:::i;:::-;45506:8:::1;:20:::0;;-1:-1:-1;;;;;;45506:20:0::1;-1:-1:-1::0;;;;;45506:20:0;;;::::1;::::0;;;::::1;::::0;;45433:101::o;48864:612::-;39007:8;;-1:-1:-1;;;;;39007:8:0;39019:10;39007:22;38999:71;;;;-1:-1:-1;;;38999:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;49069:22:0;::::1;49061:39;;;;-1:-1:-1::0;;;49061:39:0::1;;;;;;20792:2:1::0;20774:21;;;20831:1;20811:18;;;20804:29;-1:-1:-1;;;20864:2:1;20849:18;;20842:34;20908:2;20893:18;;20590:327;49061:39:0::1;49144:4;49119:21;:29;;49111:54;;;;-1:-1:-1::0;;;49111:54:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;49194:22:0;::::1;49186:39;;;;-1:-1:-1::0;;;49186:39:0::1;;;;;;20792:2:1::0;20774:21;;;20831:1;20811:18;;;20804:29;-1:-1:-1;;;20864:2:1;20849:18;;20842:34;20908:2;20893:18;;20590:327;49186:39:0::1;49269:4;49244:21;:29;;49236:54;;;;-1:-1:-1::0;;;49236:54:0::1;;;;;;;:::i;:::-;49311:7;:18:::0;;-1:-1:-1;;;;;;49311:18:0;;::::1;-1:-1:-1::0;;;;;49311:18:0;;::::1;;::::0;;;49340:20:::1;:44:::0;;;;49395:7:::1;:18:::0;;;;::::1;::::0;;;::::1;;::::0;;49424:20:::1;:44:::0;48864:612::o;40155:114::-;40202:7;40229:32;40243:17;36450:7;40243:5;;:9;;:17;;;;:::i;:::-;40229:9;;;:13;:32::i;:::-;40222:39;;40155:114;:::o;47781:303::-;39007:8;;-1:-1:-1;;;;;39007:8:0;39019:10;39007:22;38999:71;;;;-1:-1:-1;;;38999:71:0;;;;;;;:::i;:::-;47932:3:::1;47900:28;:35;;:75;;;;;47971:4;47939:28;:36;;47900:75;47892:100;;;;-1:-1:-1::0;;;47892:100:0::1;;;;;;;:::i;:::-;48018:27;:58:::0;47781:303::o;47069:405::-;39007:8;;47165:4;;-1:-1:-1;;;;;39007:8:0;39019:10;39007:22;38999:71;;;;-1:-1:-1;;;38999:71:0;;;;;;;:::i;:::-;47263:1:::1;47254:6;:10;;;47246:64;;;;-1:-1:-1::0;;;47246:64:0::1;;;;;;;:::i;:::-;47339:2;47329:6;:12;;:30;;;;;47355:4;47345:6;:14;;47329:30;47321:63;;;::::0;-1:-1:-1;;;47321:63:0;;21124:2:1;47321:63:0::1;::::0;::::1;21106:21:1::0;21163:2;21143:18;;;21136:30;-1:-1:-1;;;21182:18:1;;;21175:50;21242:18;;47321:63:0::1;20922:344:1::0;47321:63:0::1;47438:6;47410:17;47428:6;47410:25;;;;;;;;;;:::i;58517:204::-:0;39007:8;;-1:-1:-1;;;;;39007:8:0;39019:10;39007:22;38999:71;;;;-1:-1:-1;;;38999:71:0;;;;;;;:::i;:::-;58649:9:::1;::::0;58638:75:::1;::::0;-1:-1:-1;;;58638:75:0;;::::1;::::0;::::1;9713:25:1::0;;;9754:18;;;9747:34;;;-1:-1:-1;;;;;58649:9:0;;::::1;::::0;58638:31:::1;::::0;9686:18:1;;58638:75:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;58517:204:::0;;:::o;40608:320::-;40701:9;;40717:4;;40693:35;;-1:-1:-1;;;40693:35:0;;40659:17;;-1:-1:-1;;;;;40701:9:0;;;;40693:23;;:35;;40717:4;;;;40723;;40693:35;;;:::i;:::-;;;;;;;;;;;;;;;;;;;-1:-1:-1;40693:35:0;;;;;;;;-1:-1:-1;;40693:35:0;;;;;;;;;;;;:::i;:::-;;;40689:232;;40823:86;;-1:-1:-1;;;40823:86:0;;21473:2:1;40823:86:0;;;21455:21:1;21512:2;21492:18;;;21485:30;21551:34;21531:18;;;21524:62;21622:34;21602:18;;;21595:62;-1:-1:-1;;;21673:19:1;;;21666:43;21726:19;;40823:86:0;21271:480:1;3649:98:0;3707:7;3734:5;3738:1;3734;:5;:::i;:::-;3727:12;3649:98;-1:-1:-1;;;3649:98:0:o;4048:::-;4106:7;4133:5;4137:1;4133;:5;:::i;3292:98::-;3350:7;3377:5;3381:1;3377;:5;:::i;2911:98::-;2969:7;2996:5;3000:1;2996;:5;:::i;28464:106::-;28522:7;28553:1;28549;:5;:13;;28561:1;28549:13;;;-1:-1:-1;28557:1:0;;28464:106;-1:-1:-1;28464:106:0:o;21587:211::-;21704:86;21724:5;21754:23;;;21779:2;21783:5;21731:58;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;21731:58:0;;;;;;;;;;;;;;-1:-1:-1;;;;;21731:58:0;-1:-1:-1;;;;;;21731:58:0;;;;;;;;;;21704:19;:86::i;50895:97::-;50954:9;;;;;;;;;-1:-1:-1;;;;;50954:9:0;-1:-1:-1;;;;;50946:25:0;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50942:43;50895:97::o;53934:1144::-;54013:4;;54001:46;;-1:-1:-1;;;54001:46:0;;-1:-1:-1;;;;;54013:4:0;;;;54001:22;;:46;;54032:4;;54039:7;;54001:46;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53997:112;;54060:46;;-1:-1:-1;;;54060:46:0;;22616:2:1;54060:46:0;;;22598:21:1;22655:2;22635:18;;;22628:30;22694:34;22674:18;;;22667:62;-1:-1:-1;;;22745:18:1;;;22738:34;22789:19;;54060:46:0;22414:400:1;53997:112:0;54168:20;;54121:28;;54168:24;54164:263;;54232:44;54270:5;54232:33;54244:20;;54232:7;:11;;:33;;;;:::i;:44::-;54298:4;;54313:7;;54291:52;;-1:-1:-1;;;54291:52:0;;54209:67;;-1:-1:-1;;;;;;54298:4:0;;;;54291:21;;:52;;54313:7;;54209:67;;54291:52;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;54363:52:0;;;54377:15;9713:25:1;;9769:2;9754:18;;9747:34;;;54363:52:0;;9686:18:1;54363:52:0;;;;;;;54164:263;54486:20;;54439:28;;54486:24;54482:263;;54550:44;54588:5;54550:33;54562:20;;54550:7;:11;;:33;;;;:::i;:44::-;54616:4;;54631:7;;54609:52;;-1:-1:-1;;;54609:52:0;;54527:67;;-1:-1:-1;;;;;;54616:4:0;;;;54609:21;;:52;;54631:7;;54527:67;;54609:52;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;54681:52:0;;;54695:15;9713:25:1;;9769:2;9754:18;;9747:34;;;54681:52:0;;9686:18:1;54681:52:0;;;;;;;54482:263;54767:59;54805:20;54767:33;:7;54779:20;54767:11;:33::i;:59::-;54874:9;;54846:4;;54757:69;;-1:-1:-1;54839:48:0;;-1:-1:-1;;;;;54846:4:0;;;;54874:9;;54839:34;:48::i;:::-;54933:9;;54905:4;;54898:54;;-1:-1:-1;;;;;54905:4:0;;;;54933:9;54944:7;54898:34;:54::i;:::-;54974:9;;54963:50;;-1:-1:-1;;;54963:50:0;;;;;345:25:1;;;-1:-1:-1;;;;;54974:9:0;;;;54963:41;;318:18:1;;54963:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;55029:41:0;;;55045:15;9713:25:1;;9769:2;9754:18;;9747:34;;;55029:41:0;;-1:-1:-1;9686:18:1;;-1:-1:-1;55029:41:0;;;;;;;53986:1092;;53934:1144;:::o;55086:376::-;55169:7;55209:1;55189:223;55268:11;55280:6;55268:19;;;;;;;;;;:::i;:::-;;;;;;;;;55254:10;:33;55250:151;;55336:17;55354:6;55336:25;;;;;;;;;;:::i;:::-;;;;;;;;;;;55308;:53;55380:5;;55250:151;55225:8;;;:::i;:::-;;;55189:223;;;-1:-1:-1;;55429:25:0;;;55086:376;-1:-1:-1;55086:376:0:o;24654:716::-;25078:23;25104:69;25132:4;25104:69;;;;;;;;;;;;;;;;;25112:5;-1:-1:-1;;;;;25104:27:0;;;:69;;;;;:::i;:::-;25188:17;;25078:95;;-1:-1:-1;25188:21:0;25184:179;;25285:10;25274:30;;;;;;;;;;;;:::i;:::-;25266:85;;;;-1:-1:-1;;;25266:85:0;;23486:2:1;25266:85:0;;;23468:21:1;23525:2;23505:18;;;23498:30;23564:34;23544:18;;;23537:62;-1:-1:-1;;;23615:18:1;;;23608:40;23665:19;;25266:85:0;23284:406:1;23272:497:0;23451:39;;-1:-1:-1;;;23451:39:0;;23475:4;23451:39;;;23907:34:1;-1:-1:-1;;;;;23977:15:1;;;23957:18;;;23950:43;23428:20:0;;23451:15;;;;;;23842:18:1;;23451:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23428:62;;23529:5;23513:12;:21;;23505:75;;;;-1:-1:-1;;;23505:75:0;;24206:2:1;23505:75:0;;;24188:21:1;24245:2;24225:18;;;24218:30;24284:34;24264:18;;;24257:62;-1:-1:-1;;;24335:18:1;;;24328:39;24384:19;;23505:75:0;24004:405:1;23505:75:0;23680:69;;23618:20;;;;23653:97;;23673:5;;-1:-1:-1;;;23703:22:0;23680:69;;23727:7;;23618:20;;23680:69;;;:::i;22947:317::-;23101:39;;-1:-1:-1;;;23101:39:0;;23125:4;23101:39;;;23907:34:1;-1:-1:-1;;;;;23977:15:1;;;23957:18;;;23950:43;23078:20:0;;23143:5;;23101:15;;;;;23842:18:1;;23101:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:47;;;;:::i;:::-;23078:70;;23159:97;23179:5;23209:22;;;23233:7;23242:12;23186:69;;;;;;;;;:::i;23159:97::-;23067:197;22947:317;;;:::o;11054:229::-;11191:12;11223:52;11245:6;11253:4;11259:1;11262:12;11223:21;:52::i;:::-;11216:59;11054:229;-1:-1:-1;;;;11054:229:0:o;12174:510::-;12344:12;12402:5;12377:21;:30;;12369:81;;;;-1:-1:-1;;;12369:81:0;;24616:2:1;12369:81:0;;;24598:21:1;24655:2;24635:18;;;24628:30;24694:34;24674:18;;;24667:62;-1:-1:-1;;;24745:18:1;;;24738:36;24791:19;;12369:81:0;24414:402:1;12369:81:0;-1:-1:-1;;;;;8604:19:0;;;12461:60;;;;-1:-1:-1;;;12461:60:0;;25023:2:1;12461:60:0;;;25005:21:1;25062:2;25042:18;;;25035:30;25101:31;25081:18;;;25074:59;25150:18;;12461:60:0;24821:353:1;12461:60:0;12535:12;12549:23;12576:6;-1:-1:-1;;;;;12576:11:0;12595:5;12602:4;12576:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12534:73;;;;12625:51;12642:7;12651:10;12663:12;12625:16;:51::i;:::-;12618:58;12174:510;-1:-1:-1;;;;;;;12174:510:0:o;14860:762::-;15010:12;15039:7;15035:580;;;-1:-1:-1;15070:10:0;15063:17;;15035:580;15184:17;;:21;15180:424;;15432:10;15426:17;15493:15;15480:10;15476:2;15472:19;15465:44;15180:424;15575:12;15568:20;;-1:-1:-1;;;15568:20:0;;;;;;;;:::i;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:180:1;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;-1:-1:-1;165:23:1;;14:180;-1:-1:-1;14:180:1:o;381:248::-;449:6;457;510:2;498:9;489:7;485:23;481:32;478:52;;;526:1;523;516:12;478:52;-1:-1:-1;;549:23:1;;;619:2;604:18;;;591:32;;-1:-1:-1;381:248:1:o;1034:131::-;-1:-1:-1;;;;;1109:31:1;;1099:42;;1089:70;;1155:1;1152;1145:12;1170:247;1229:6;1282:2;1270:9;1261:7;1257:23;1253:32;1250:52;;;1298:1;1295;1288:12;1250:52;1337:9;1324:23;1356:31;1381:5;1356:31;:::i;1422:470::-;1513:6;1521;1529;1582:2;1570:9;1561:7;1557:23;1553:32;1550:52;;;1598:1;1595;1588:12;1550:52;1637:9;1624:23;1656:31;1681:5;1656:31;:::i;:::-;1706:5;-1:-1:-1;1758:2:1;1743:18;;1730:32;;-1:-1:-1;1814:2:1;1799:18;;1786:32;1827:33;1786:32;1827:33;:::i;:::-;1879:7;1869:17;;;1422:470;;;;;:::o;1897:337::-;1963:6;1971;2024:2;2012:9;2003:7;1999:23;1995:32;1992:52;;;2040:1;2037;2030:12;1992:52;2079:9;2066:23;2129:4;2122:5;2118:16;2111:5;2108:27;2098:55;;2149:1;2146;2139:12;2098:55;2172:5;2224:2;2209:18;;;;2196:32;;-1:-1:-1;;;1897:337:1:o;2239:882::-;2343:6;2351;2359;2367;2375;2383;2436:3;2424:9;2415:7;2411:23;2407:33;2404:53;;;2453:1;2450;2443:12;2404:53;2492:9;2479:23;2511:31;2536:5;2511:31;:::i;:::-;2561:5;-1:-1:-1;2618:2:1;2603:18;;2590:32;2631:33;2590:32;2631:33;:::i;:::-;2683:7;-1:-1:-1;2742:2:1;2727:18;;2714:32;2755:33;2714:32;2755:33;:::i;:::-;2807:7;-1:-1:-1;2866:2:1;2851:18;;2838:32;2879:33;2838:32;2879:33;:::i;:::-;2931:7;-1:-1:-1;2990:3:1;2975:19;;2962:33;3004;2962;3004;:::i;:::-;3056:7;3046:17;;;3110:3;3099:9;3095:19;3082:33;3072:43;;2239:882;;;;;;;;:::o;3587:525::-;3673:6;3681;3689;3697;3750:3;3738:9;3729:7;3725:23;3721:33;3718:53;;;3767:1;3764;3757:12;3718:53;3806:9;3793:23;3825:31;3850:5;3825:31;:::i;:::-;3875:5;-1:-1:-1;3927:2:1;3912:18;;3899:32;;-1:-1:-1;3983:2:1;3968:18;;3955:32;3996:33;3955:32;3996:33;:::i;:::-;3587:525;;;;-1:-1:-1;4048:7:1;;4102:2;4087:18;4074:32;;-1:-1:-1;;3587:525:1:o;4117:400::-;4319:2;4301:21;;;4358:2;4338:18;;;4331:30;4397:34;4392:2;4377:18;;4370:62;-1:-1:-1;;;4463:2:1;4448:18;;4441:34;4507:3;4492:19;;4117:400::o;5746:402::-;5948:2;5930:21;;;5987:2;5967:18;;;5960:30;6026:34;6021:2;6006:18;;5999:62;-1:-1:-1;;;6092:2:1;6077:18;;6070:36;6138:3;6123:19;;5746:402::o;6153:349::-;6355:2;6337:21;;;6394:2;6374:18;;;6367:30;6433:27;6428:2;6413:18;;6406:55;6493:2;6478:18;;6153:349::o;6507:251::-;6577:6;6630:2;6618:9;6609:7;6605:23;6601:32;6598:52;;;6646:1;6643;6636:12;6598:52;6678:9;6672:16;6697:31;6722:5;6697:31;:::i;6763:354::-;6965:2;6947:21;;;7004:2;6984:18;;;6977:30;7043:32;7038:2;7023:18;;7016:60;7108:2;7093:18;;6763:354::o;8665:184::-;8735:6;8788:2;8776:9;8767:7;8763:23;8759:32;8756:52;;;8804:1;8801;8794:12;8756:52;-1:-1:-1;8827:16:1;;8665:184;-1:-1:-1;8665:184:1:o;9260:274::-;-1:-1:-1;;;;;9452:32:1;;;;9434:51;;9516:2;9501:18;;9494:34;9422:2;9407:18;;9260:274::o;10150:336::-;10352:2;10334:21;;;10391:2;10371:18;;;10364:30;-1:-1:-1;;;10425:2:1;10410:18;;10403:42;10477:2;10462:18;;10150:336::o;10491:127::-;10552:10;10547:3;10543:20;10540:1;10533:31;10583:4;10580:1;10573:15;10607:4;10604:1;10597:15;10623:127;10684:10;10679:3;10675:20;10672:1;10665:31;10715:4;10712:1;10705:15;10739:4;10736:1;10729:15;10755:175;10792:3;10836:4;10829:5;10825:16;10865:4;10856:7;10853:17;10850:43;;10873:18;;:::i;:::-;10922:1;10909:15;;10755:175;-1:-1:-1;;10755:175:1:o;11240:309::-;11310:6;11363:2;11351:9;11342:7;11338:23;11334:32;11331:52;;;11379:1;11376;11369:12;11331:52;11411:9;11405:16;-1:-1:-1;;;;;11454:5:1;11450:50;11443:5;11440:61;11430:89;;11515:1;11512;11505:12;18302:405;18504:2;18486:21;;;18543:2;18523:18;;;18516:30;18582:34;18577:2;18562:18;;18555:62;-1:-1:-1;;;18648:2:1;18633:18;;18626:39;18697:3;18682:19;;18302:405::o;18712:151::-;18802:4;18795:12;;;18781;;;18777:31;;18820:14;;18817:40;;;18837:18;;:::i;19286:148::-;19374:4;19353:12;;;19367;;;19349:31;;19392:13;;19389:39;;;19408:18;;:::i;21756:168::-;21829:9;;;21860;;21877:15;;;21871:22;;21857:37;21847:71;;21898:18;;:::i;21929:217::-;21969:1;21995;21985:132;;22039:10;22034:3;22030:20;22027:1;22020:31;22074:4;22071:1;22064:15;22102:4;22099:1;22092:15;21985:132;-1:-1:-1;22131:9:1;;21929:217::o;22151:128::-;22218:9;;;22239:11;;;22236:37;;;22253:18;;:::i;22284:125::-;22349:9;;;22370:10;;;22367:36;;;22383:18;;:::i;22819:277::-;22886:6;22939:2;22927:9;22918:7;22914:23;22910:32;22907:52;;;22955:1;22952;22945:12;22907:52;22987:9;22981:16;23040:5;23033:13;23026:21;23019:5;23016:32;23006:60;;23062:1;23059;23052:12;23101:178;23138:3;23182:4;23175:5;23171:16;23206:7;23196:41;;23217:18;;:::i;:::-;-1:-1:-1;;23253:20:1;;23101:178;-1:-1:-1;;23101:178:1:o;25179:250::-;25264:1;25274:113;25288:6;25285:1;25282:13;25274:113;;;25364:11;;;25358:18;25345:11;;;25338:39;25310:2;25303:10;25274:113;;;-1:-1:-1;;25421:1:1;25403:16;;25396:27;25179:250::o;25434:287::-;25563:3;25601:6;25595:13;25617:66;25676:6;25671:3;25664:4;25656:6;25652:17;25617:66;:::i;:::-;25699:16;;;;;25434:287;-1:-1:-1;;25434:287:1:o;25726:396::-;25875:2;25864:9;25857:21;25838:4;25907:6;25901:13;25950:6;25945:2;25934:9;25930:18;25923:34;25966:79;26038:6;26033:2;26022:9;26018:18;26013:2;26005:6;26001:15;25966:79;:::i;:::-;26106:2;26085:15;-1:-1:-1;;26081:29:1;26066:45;;;;26113:2;26062:54;;25726:396;-1:-1:-1;;25726:396:1:o
Metadata Hash
925a509f332f0a091675d0de269ecc86b157601ec862d733c5dbd33cefbef7d3
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.