Overview
ETH Balance
0 ETH
Eth Value
$0.00Token Holdings
More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 121 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Burn | 19925209 | 150 days ago | IN | 0 ETH | 0.00139768 | ||||
Set Exchange Fee... | 18691473 | 323 days ago | IN | 0 ETH | 0.0011182 | ||||
Set Exchange Fee | 18691468 | 323 days ago | IN | 0 ETH | 0.00175474 | ||||
Burn | 18334252 | 373 days ago | IN | 0 ETH | 0.00120736 | ||||
Burn | 18293593 | 379 days ago | IN | 0 ETH | 0.00131142 | ||||
Burn | 18293562 | 379 days ago | IN | 0 ETH | 0.00132911 | ||||
Burn | 18270399 | 382 days ago | IN | 0 ETH | 0.00187982 | ||||
Burn | 18270290 | 382 days ago | IN | 0 ETH | 0.0016898 | ||||
Burn | 18270261 | 382 days ago | IN | 0 ETH | 0.00209933 | ||||
Burn | 18269991 | 382 days ago | IN | 0 ETH | 0.00178117 | ||||
Burn | 18238828 | 387 days ago | IN | 0 ETH | 0.00117081 | ||||
Burn | 18204455 | 391 days ago | IN | 0 ETH | 0.0012795 | ||||
Mint | 18081654 | 409 days ago | IN | 0 ETH | 0.00190801 | ||||
Burn | 18031186 | 416 days ago | IN | 0 ETH | 0.00257466 | ||||
Burn | 18031184 | 416 days ago | IN | 0 ETH | 0.00293407 | ||||
Burn | 18031175 | 416 days ago | IN | 0 ETH | 0.00208288 | ||||
Mint | 17967990 | 425 days ago | IN | 0 ETH | 0.00223592 | ||||
Mint | 17953930 | 426 days ago | IN | 0 ETH | 0.00200452 | ||||
Mint | 17953921 | 426 days ago | IN | 0 ETH | 0.00226017 | ||||
Burn | 17825680 | 444 days ago | IN | 0 ETH | 0.00248819 | ||||
Burn | 17825656 | 444 days ago | IN | 0 ETH | 0.00251419 | ||||
Burn | 17825627 | 444 days ago | IN | 0 ETH | 0.00256048 | ||||
Burn | 17825596 | 444 days ago | IN | 0 ETH | 0.00238399 | ||||
Burn | 17824004 | 445 days ago | IN | 0 ETH | 0.00343842 | ||||
Burn | 17823909 | 445 days ago | IN | 0 ETH | 0.00449456 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
Coin98DollarMintBurn
Compiler Version
v0.8.13+commit.abaa5c0e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-09-19 */ pragma solidity 0.8.13; // SPDX-License-Identifier: MIT /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with GSN meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol pragma solidity 0.8.13; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev 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: @openzeppelin/contracts/math/SafeMath.sol pragma solidity 0.8.13; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } // File: @openzeppelin/contracts/utils/Address.sol pragma solidity 0.8.13; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require( address(this).balance >= amount, "Address: insufficient balance" ); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{value: amount}(""); require( success, "Address: unable to send value, recipient may have reverted" ); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue( target, data, value, "Address: low-level call with value failed" ); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require( address(this).balance >= value, "Address: insufficient balance for call" ); require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (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"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.staticcall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) private 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 // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); function burn(uint256 amount) external; function mint(address account, uint256 amount) external; /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval( address indexed owner, address indexed spender, uint256 value ); } /** * @title SafeERC20 */ library SafeERC20 { using SafeMath for uint256; 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) ); } 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' // solhint-disable-next-line max-line-length 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) ); } /** * @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. // A Solidity high level call has three parts: // 1. The target address is checked to verify it contains contract code // 2. The call itself is made, and success asserted // 3. The return value is decoded, which in turn checks the size of the returned data. // solhint-disable-next-line max-line-length // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = address(token).call(data); require(success, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional // solhint-disable-next-line max-line-length require( abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed" ); } } } pragma solidity 0.8.13; interface AggregatorV3Interface { function decimals() external view returns (uint8); function latestRoundData() external view returns ( uint80 roundId, uint256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound ); } /// @title C98 Dollar Mint Burn for exchange cUSD by C98 or other Tokens /// @notice Any user can exchange if meet requirements contract Coin98DollarMintBurn is Ownable { using SafeERC20 for IERC20; using SafeMath for uint256; uint256[] public MINTER; uint256[] public BURNER; uint256 private BASE_DECIMALS = 10**18; uint256 private Percent = 10000; /// @notice Limit time reset total per day for each minter uint256 private LIMIT_TIME = 24; IERC20 public CUSD_TOKEN; constructor(address _cusd) { CUSD_TOKEN = IERC20(_cusd); } /// @notice Token minter couple needed for create cUSD /// `isActive` Active or Deactive minter. /// `pair` couple tokens required for mint cUSD. /// `decimals` Each decimals matching with token index. /// `percents` Each percent required for mint cUSD matching with token index. /// `priceFeed` Price feed Oracle provided by ChainLink matching with token index /// `systemFee` System fee pay for each minted cUSD /// `totalSystemFee` Total cUSD fee pay for each exchange /// `totalMinted` Total cUSD amount minted /// `totalSupply` Maximum amount cUSD can be minted for this minter /// `totalSupplyPerDay` Maximum amount cUSD can be minted in one day for this minter /// `totalPerDay` Total amount cUSD minted in limit time (default one day) /// `lastExchange` Last exchange time used this minter to mint cUSD struct TokenMinter { bool isActive; address[] pairs; uint256[] decimals; uint256[] percents; address[] priceFeed; uint256 systemFee; uint256 totalSystemFee; uint256 totalMinted; uint256 totalSupply; uint256 totalSupplyPerDay; uint256 totalPerDay; uint256 lastExchange; } /// @notice Token burner for burn cUSD /// `isActive` Active or Deactive burner. /// `token` Tokens required for burn cUSD and mint. /// `decimals` Tokens decimals matching with token. /// `priceFeed` Price feed Oracle provided by ChainLink /// `systemFee` System fee pay for each burned cUSD /// `totalSystemFee` Total cUSD fee pay for each exchange /// `totalBurned` Total cUSD amount burned /// `totalSupply` Maximum amount cUSD can be burned for this burner /// `totalSupplyPerDay` Maximum amount cUSD can be burned in one day for this burner /// `totalPerDay` Total amount cUSD burned in limit time (default one day) /// `lastExchange` Last exchange time of this burner which is used to burn cUSD struct TokenBurner { bool isActive; address token; uint256 decimals; address priceFeed; uint256 systemFee; uint256 totalSystemFee; uint256 totalBurned; uint256 totalSupply; uint256 totalSupplyPerDay; uint256 totalPerDay; uint256 lastExchange; } /// @notice Mapping ID for each minter mapping(uint256 => TokenMinter) public TokenMinters; /// @notice Mapping ID for each burner mapping(uint256 => TokenBurner) public TokenBurners; /// @notice Withdraw token from Coin98 Dollar MintBurn event WithdrawToken(address[] token); event Mint( uint256 minter, address sender, uint256[] amountBurn, uint256 amountMint, uint256 exchangeFee, uint256 remainingToday ); event Burn( uint256 burner, address sender, uint256 amountBurn, uint256 amountMint, uint256 exchangeFee, uint256 remainingToday ); event UpdateMinter( uint256 id, address[] pairs, uint256[] decimals, uint256[] percents, address[] priceFeed, uint256 systemFee ); event UpdateBurner( uint256 id, address token, uint256 decimals, address priceFeed, uint256 systemFee ); event UpdateMinterSupply( uint256 id, uint256 totalSupply, uint256 totalSupplyPerDay ); event UpdateBurnerSupply( uint256 id, uint256 totalSupply, uint256 totalSupplyPerDay ); event UpdateMinterFee(uint256 id, uint256 systemFee); event UpdateBurnerFee(uint256 id, uint256 systemFee); event UpdateLimitTime(uint256 limitTime); /// @notice Check existed minter modifier onlyActiveMinter(uint256 _id) { require( TokenMinters[_id].isActive && TokenMinters[_id].totalSupply > 0, "Coin98DollarMintBurn: Minter not existed" ); _; } /// @notice Check existed burner modifier onlyActiveBurner(uint256 _id) { require( TokenBurners[_id].isActive && TokenBurners[_id].totalSupply > 0, "Coin98DollarMintBurn: Burner not existed" ); _; } /// @notice Get latest price from ChainLink /// @return Latest price from Price Feed function getLatestPrice(address priceFeed) public view returns (uint256, uint256) { if (priceFeed == address(0)) return (1 ether, 18); uint256 decimals = AggregatorV3Interface(priceFeed).decimals(); (, uint256 price, , , ) = AggregatorV3Interface(priceFeed) .latestRoundData(); return (price, decimals); } /// @notice Update Limit Time reset per day for each minter /// @param _limitTime The amount of exchange fee function setLimitTime(uint256 _limitTime) external onlyOwner { require( _limitTime > 0, "Coin98DollarMintBurn: Limit time must be a positive number and greater than zero" ); LIMIT_TIME = _limitTime; emit UpdateLimitTime(_limitTime); } /// @notice Update System Fee of minter /// @param _systemFee The amount of exchange fee function setExchangeFee(uint256 _id, uint256 _systemFee) external onlyOwner onlyActiveMinter(_id) { require( _systemFee >= 0, "Coin98DollarMintBurn: Fee must be a positive number and greater than zero" ); TokenMinters[_id].systemFee = _systemFee; emit UpdateMinterFee(_id, _systemFee); } /// @notice Update System Fee for burner /// @param _systemFee The amount of exchange fee function setExchangeFeeBurner(uint256 _id, uint256 _systemFee) external onlyOwner onlyActiveBurner(_id) { require( _systemFee >= 0, "Coin98DollarMintBurn: Fee must be a positive number and greater than zero" ); TokenBurners[_id].systemFee = _systemFee; emit UpdateBurnerFee(_id, _systemFee); } /// @notice Set Minter for create cUSD function setMinter( uint256 _id, bool _isActive, address[] calldata _pairs, uint256[] calldata _decimals, uint256[] calldata _percents, address[] calldata _priceFeed, uint256 _systemFee ) external onlyOwner { uint256 sizePair = _pairs.length; TokenMinter storage minter = TokenMinters[_id]; // Deactive current minter, no need to check anything here if (!_isActive) { require( minter.isActive, "Coin98DollarMintBurn: Minter already deactive" ); minter.isActive = false; } else { require( sizePair > 0 && sizePair == _decimals.length && sizePair == _percents.length && sizePair == _priceFeed.length, "Coin98DollarMintBurn: Invalid input lengths" ); require( _systemFee >= 0, "Coin98DollarMintBurn: Invalid input amount" ); uint256 totalPercent = 0; // Double check minter is valid token address for (uint256 i = 0; i < sizePair; i++) { address token = _pairs[i]; totalPercent = totalPercent.add(_percents[i]); uint256 tokenCode; assembly { tokenCode := extcodesize(token) } require( tokenCode > 0, "Coin98DollarMintBurn: Invalid token address" ); require( token != address(0), "Coin98DollarMintBurn: Minter is zero address" ); } require( totalPercent == Percent, "Coin98DollarMintBurn: Invalid percent value" ); // Push Minter to list if first time added if (minter.pairs.length == 0) { MINTER.push(_id); } // Update information minter minter.isActive = true; minter.pairs = _pairs; minter.decimals = _decimals; minter.percents = _percents; minter.priceFeed = _priceFeed; minter.systemFee = _systemFee; emit UpdateMinter( _id, _pairs, _decimals, _percents, _priceFeed, _systemFee ); } } /// @notice Set Burner for burn cUSD function setBurner( uint256 _id, bool _isActive, address _token, uint256 _decimals, address _priceFeed, uint256 _systemFee ) external onlyOwner { require( _token != address(0), "Coin98DollarMintBurn: Burner is zero address" ); TokenBurner storage burner = TokenBurners[_id]; // Deactive current burner so no need to check anything here if (!_isActive) { require( burner.isActive, "Coin98DollarMintBurn: Burner already deactive" ); burner.isActive = false; } else { require( _systemFee >= 0, "Coin98DollarMintBurn: Invalid input amount" ); // Double check burner is valid token address uint256 tokenCode; assembly { tokenCode := extcodesize(_token) } require( tokenCode > 0, "Coin98DollarMintBurn: Invalid token address" ); // Push Minter to list if first time added if (burner.token == address(0)) { BURNER.push(_id); } // Update information minter burner.isActive = true; burner.token = _token; burner.decimals = _decimals; burner.priceFeed = _priceFeed; burner.systemFee = _systemFee; emit UpdateBurner(_id, _token, _decimals, _priceFeed, _systemFee); } } /// @notice Set Minter supply and supply per day function setMinterSupply( uint256 _id, uint256 _totalSupply, uint256 _totalSupplyPerDay ) external onlyOwner { TokenMinter storage minter = TokenMinters[_id]; require(minter.isActive, "Coin98DollarMintBurn: Minter not existed"); require( _totalSupply > 0 && _totalSupplyPerDay > 0 && _totalSupplyPerDay <= _totalSupply, "Coin98DollarMintBurn: Invalid input amount" ); minter.totalSupply = _totalSupply; minter.totalSupplyPerDay = _totalSupplyPerDay; emit UpdateMinterSupply(_id, _totalSupply, _totalSupplyPerDay); } /// @notice Set Burner supply and supply per day function setBurnerSupply( uint256 _id, uint256 _totalSupply, uint256 _totalSupplyPerDay ) external onlyOwner { TokenBurner storage burner = TokenBurners[_id]; require(burner.isActive, "Coin98DollarMintBurn: Burner not existed"); require( _totalSupply > 0 && _totalSupplyPerDay > 0 && _totalSupplyPerDay <= _totalSupply, "Coin98DollarMintBurn: Invalid input amount" ); burner.totalSupply = _totalSupply; burner.totalSupplyPerDay = _totalSupplyPerDay; emit UpdateBurnerSupply(_id, _totalSupply, _totalSupplyPerDay); } /// @notice Check total supply and total supply per day of minter function checkTotalMinted(TokenMinter storage minter, uint256 amount) internal returns (uint256) { uint256 diffHours = (block.timestamp - minter.lastExchange) / 60 / 60; bool isOverTime = diffHours >= LIMIT_TIME; uint256 currentTotalMinted = minter.totalMinted.add(amount); uint256 currentTotalMintedToday = isOverTime ? 0 : minter.totalPerDay; currentTotalMintedToday = currentTotalMintedToday.add(amount); require( currentTotalMintedToday <= minter.totalSupplyPerDay && currentTotalMinted <= minter.totalSupply, "Coin98DollarMintBurn: Amount must be less than total supply and total per day" ); // Update tracking information minter.totalMinted = currentTotalMinted; minter.totalPerDay = currentTotalMintedToday; if (isOverTime) { minter.lastExchange = block.timestamp; } return currentTotalMintedToday; } /// @notice Check total supply and total supply per day of burner function checkTotalBurned(TokenBurner storage burner, uint256 amount) internal returns (uint256) { uint256 diffHours = (block.timestamp - burner.lastExchange) / 60 / 60; bool isOverTime = diffHours >= LIMIT_TIME; uint256 currentTotalBurned = burner.totalBurned.add(amount); uint256 currentTotalBurnedToday = isOverTime ? 0 : burner.totalPerDay; currentTotalBurnedToday = currentTotalBurnedToday.add(amount); require( currentTotalBurnedToday <= burner.totalSupplyPerDay && currentTotalBurned <= burner.totalSupply, "Coin98DollarMintBurn: Amount must be less than total supply and total per day" ); // Update tracking information burner.totalBurned = currentTotalBurned; burner.totalPerDay = currentTotalBurnedToday; if (isOverTime) { burner.lastExchange = block.timestamp; } return currentTotalBurnedToday; } /// @notice Burn cUSD and mint another token, based on the amount token wanted to mint /// Total burned cUSD must NOT greater than total supply and total supply per day condition /// @param _id Bunrer ID to burn with. /// @param amount Amount to burn CUSD Token. function burn(uint256 _id, uint256 amount) external onlyActiveBurner(_id) { require( amount > 0, "Coin98DollarMintBurn: Amount must be a positive number and greater than zero" ); TokenBurner storage burner = TokenBurners[_id]; (uint256 price, uint256 priceDecimals) = getLatestPrice( burner.priceFeed ); uint256 amountToBurn = amount .mul(price) .mul(BASE_DECIMALS) .div(10**priceDecimals) .div(10**burner.decimals); require(amountToBurn > 0, "Coin98DollarMintBurn: Amount must be a positive number and greater than zero"); uint256 currentTotalBurnedToday = checkTotalBurned( burner, amountToBurn ); // Transfer money first before do anything effects CUSD_TOKEN.safeTransferFrom(msg.sender, address(this), amountToBurn); CUSD_TOKEN.burn(amountToBurn); // Update tracking information uint256 systemFee = amount.mul(burner.systemFee).div(Percent); burner.totalSystemFee = burner.totalSystemFee.add(systemFee); IERC20 tokenMint = IERC20(burner.token); uint256 amountToMint = amount.sub(systemFee); require( amountToMint > 0 && tokenMint.balanceOf(address(this)) >= amountToMint, "Coin98DollarMintBurn: Not enough balance to mint or invalid amount" ); tokenMint.safeTransfer(msg.sender, amountToMint); emit Burn( _id, msg.sender, amountToBurn, amountToMint, systemFee, currentTotalBurnedToday ); } /// @notice Mint cUSD with amount of cUSD wanted to mint. Amount will be splited based on percent in couple tokens of minter (default amount is 18 decimals) /// Current platform not accepted main wrapped token like WETH, WBNB /// Total minted cUSD must NOT greater than total supply and total supply per day condition /// @param _id Minter ID to mint with. /// @param amount Amount to mint with CUSD Token. function mint(uint256 _id, uint256 amount) public onlyActiveMinter(_id) { require( amount > 0, "Coin98DollarMintBurn: Amount must be a positive number and greater than zero" ); TokenMinter storage minter = TokenMinters[_id]; uint256 currentTotalMintedToday = checkTotalMinted(minter, amount); uint256[] memory amountToTransfer = new uint256[](minter.pairs.length); for (uint256 i = 0; i < minter.pairs.length; i++) { uint256 tokenDecimals = minter.decimals[i]; // Feed the latest price by ChainLink (uint256 price, uint256 priceDecimals) = getLatestPrice( minter.priceFeed[i] ); uint256 mulValue = amount .mul(minter.percents[i]) .mul(10**tokenDecimals) .mul(10**priceDecimals); uint256 amountToBurn = mulValue .div(Percent) .div(price) .div(BASE_DECIMALS); require(amountToBurn > 0, "Coin98DollarMintBurn: Amount must be a positive number and greater than zero"); // Transfer money first before do anything effects IERC20(minter.pairs[i]).safeTransferFrom( msg.sender, address(this), amountToBurn ); amountToTransfer[i] = amountToBurn; } uint256 systemFee = amount.mul(minter.systemFee).div(Percent); // Update tracking information minter.totalSystemFee = minter.totalSystemFee.add(systemFee); // Claim system fee for each exchange cUSD amount = amount.sub(systemFee); require( amount > 0, "Coin98DollarMintBurn: Total Mint must be a positive number and greater than zero" ); // Mint CUSD Token to .sender CUSD_TOKEN.mint(msg.sender, amount); emit Mint( _id, msg.sender, amountToTransfer, amount, systemFee, currentTotalMintedToday ); } /// @notice Withdraw all token and main token /// @param tokens The token contract that want to withdraw function withdrawMultiple(address[] calldata tokens) external onlyOwner { for (uint256 i = 0; i < tokens.length; i++) { if (tokens[i] == address(0)) { payable(msg.sender).transfer(address(this).balance); } else { IERC20 token = IERC20(tokens[i]); uint256 tokenBalance = token.balanceOf(address(this)); if (tokenBalance > 0) { token.safeTransfer(msg.sender, tokenBalance); } } } emit WithdrawToken(tokens); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_cusd","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"burner","type":"uint256"},{"indexed":false,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountBurn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountMint","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"exchangeFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"remainingToday","type":"uint256"}],"name":"Burn","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minter","type":"uint256"},{"indexed":false,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"amountBurn","type":"uint256[]"},{"indexed":false,"internalType":"uint256","name":"amountMint","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"exchangeFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"remainingToday","type":"uint256"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"decimals","type":"uint256"},{"indexed":false,"internalType":"address","name":"priceFeed","type":"address"},{"indexed":false,"internalType":"uint256","name":"systemFee","type":"uint256"}],"name":"UpdateBurner","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"systemFee","type":"uint256"}],"name":"UpdateBurnerFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalSupplyPerDay","type":"uint256"}],"name":"UpdateBurnerSupply","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"limitTime","type":"uint256"}],"name":"UpdateLimitTime","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"pairs","type":"address[]"},{"indexed":false,"internalType":"uint256[]","name":"decimals","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"percents","type":"uint256[]"},{"indexed":false,"internalType":"address[]","name":"priceFeed","type":"address[]"},{"indexed":false,"internalType":"uint256","name":"systemFee","type":"uint256"}],"name":"UpdateMinter","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"systemFee","type":"uint256"}],"name":"UpdateMinterFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalSupplyPerDay","type":"uint256"}],"name":"UpdateMinterSupply","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address[]","name":"token","type":"address[]"}],"name":"WithdrawToken","type":"event"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"BURNER","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"CUSD_TOKEN","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"MINTER","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"TokenBurners","outputs":[{"internalType":"bool","name":"isActive","type":"bool"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"decimals","type":"uint256"},{"internalType":"address","name":"priceFeed","type":"address"},{"internalType":"uint256","name":"systemFee","type":"uint256"},{"internalType":"uint256","name":"totalSystemFee","type":"uint256"},{"internalType":"uint256","name":"totalBurned","type":"uint256"},{"internalType":"uint256","name":"totalSupply","type":"uint256"},{"internalType":"uint256","name":"totalSupplyPerDay","type":"uint256"},{"internalType":"uint256","name":"totalPerDay","type":"uint256"},{"internalType":"uint256","name":"lastExchange","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"TokenMinters","outputs":[{"internalType":"bool","name":"isActive","type":"bool"},{"internalType":"uint256","name":"systemFee","type":"uint256"},{"internalType":"uint256","name":"totalSystemFee","type":"uint256"},{"internalType":"uint256","name":"totalMinted","type":"uint256"},{"internalType":"uint256","name":"totalSupply","type":"uint256"},{"internalType":"uint256","name":"totalSupplyPerDay","type":"uint256"},{"internalType":"uint256","name":"totalPerDay","type":"uint256"},{"internalType":"uint256","name":"lastExchange","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"priceFeed","type":"address"}],"name":"getLatestPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"bool","name":"_isActive","type":"bool"},{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_decimals","type":"uint256"},{"internalType":"address","name":"_priceFeed","type":"address"},{"internalType":"uint256","name":"_systemFee","type":"uint256"}],"name":"setBurner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_totalSupply","type":"uint256"},{"internalType":"uint256","name":"_totalSupplyPerDay","type":"uint256"}],"name":"setBurnerSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_systemFee","type":"uint256"}],"name":"setExchangeFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_systemFee","type":"uint256"}],"name":"setExchangeFeeBurner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_limitTime","type":"uint256"}],"name":"setLimitTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"bool","name":"_isActive","type":"bool"},{"internalType":"address[]","name":"_pairs","type":"address[]"},{"internalType":"uint256[]","name":"_decimals","type":"uint256[]"},{"internalType":"uint256[]","name":"_percents","type":"uint256[]"},{"internalType":"address[]","name":"_priceFeed","type":"address[]"},{"internalType":"uint256","name":"_systemFee","type":"uint256"}],"name":"setMinter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_totalSupply","type":"uint256"},{"internalType":"uint256","name":"_totalSupplyPerDay","type":"uint256"}],"name":"setMinterSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"tokens","type":"address[]"}],"name":"withdrawMultiple","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6080604052670de0b6b3a764000060035561271060045560186005553480156200002857600080fd5b5060405162004b2e38038062004b2e83398181016040528101906200004e9190620001ec565b6200006e62000062620000b660201b60201c565b620000be60201b60201c565b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550506200021e565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620001b48262000187565b9050919050565b620001c681620001a7565b8114620001d257600080fd5b50565b600081519050620001e681620001bb565b92915050565b60006020828403121562000205576200020462000182565b5b60006200021584828501620001d5565b91505092915050565b614900806200022e6000396000f3fe608060405234801561001057600080fd5b50600436106101165760003560e01c80638da5cb5b116100a2578063b390c0ab11610071578063b390c0ab146102cf578063e214c84a146102eb578063e7e62d3614610325578063f2fde38b14610341578063f494234e1461035d57610116565b80638da5cb5b1461025d578063980b62f31461027b578063aeca3bd014610297578063afe167c7146102b357610116565b80632895e837116100e95780632895e837146101a05780632db86462146101bc578063364938e0146101ec57806347126ebd1461020857806377f475181461022657610116565b80630474ca921461011b5780630b884c511461013757806316345f18146101535780631b2ef1ca14610184575b600080fd5b61013560048036038101906101309190612abd565b61038d565b005b610151600480360381019061014c9190612abd565b61052c565b005b61016d60048036038101906101689190612b5b565b6106cb565b60405161017b929190612b97565b60405180910390f35b61019e60048036038101906101999190612abd565b610811565b005b6101ba60048036038101906101b59190612c25565b610cf4565b005b6101d660048036038101906101d19190612c72565b610f58565b6040516101e39190612c9f565b60405180910390f35b61020660048036038101906102019190612cf2565b610f7c565b005b610210611304565b60405161021d9190612dde565b60405180910390f35b610240600480360381019061023b9190612c72565b61132a565b604051610254989796959493929190612e08565b60405180910390f35b61026561137f565b6040516102729190612e95565b60405180910390f35b61029560048036038101906102909190612eb0565b6113a8565b005b6102b160048036038101906102ac9190612f59565b61153a565b005b6102cd60048036038101906102c89190612eb0565b61197f565b005b6102e960048036038101906102e49190612abd565b611b11565b005b61030560048036038101906103009190612c72565b611f8c565b60405161031c9b9a9998979695949392919061307d565b60405180910390f35b61033f600480360381019061033a9190612c72565b612033565b005b61035b60048036038101906103569190612b5b565b612133565b005b61037760048036038101906103729190612c72565b61222a565b6040516103849190612c9f565b60405180910390f35b61039561224e565b73ffffffffffffffffffffffffffffffffffffffff166103b361137f565b73ffffffffffffffffffffffffffffffffffffffff1614610409576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161040090613185565b60405180910390fd5b816007600082815260200190815260200160002060000160009054906101000a900460ff168015610450575060006007600083815260200190815260200160002060080154115b61048f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161048690613217565b60405180910390fd5b60008210156104d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104ca906132cf565b60405180910390fd5b8160076000858152602001908152602001600020600501819055507f52d90194c31ad1a646bc82f9575b741a0517368eaa8ab888923d5be6cc429a16838360405161051f929190612b97565b60405180910390a1505050565b61053461224e565b73ffffffffffffffffffffffffffffffffffffffff1661055261137f565b73ffffffffffffffffffffffffffffffffffffffff16146105a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161059f90613185565b60405180910390fd5b816008600082815260200190815260200160002060000160009054906101000a900460ff1680156105ef575060006008600083815260200190815260200160002060060154115b61062e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161062590613361565b60405180910390fd5b6000821015610672576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610669906132cf565b60405180910390fd5b8160086000858152602001908152602001600020600301819055507ff646be87d533738140bc61a30a5dbf4ff8995b1b5ed2182e8a21727c71ed546983836040516106be929190612b97565b60405180910390a1505050565b600080600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361071657670de0b6b3a764000060129150915061080c565b60008373ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610763573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078791906133ba565b60ff16905060008473ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156107d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107fd919061343e565b50505091505080829350935050505b915091565b816007600082815260200190815260200160002060000160009054906101000a900460ff168015610858575060006007600083815260200190815260200160002060080154115b610897576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088e90613217565b60405180910390fd5b600082116108da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d190613551565b60405180910390fd5b600060076000858152602001908152602001600020905060006108fd8285612256565b90506000826001018054905067ffffffffffffffff81111561092257610921613571565b5b6040519080825280602002602001820160405280156109505781602001602082028036833780820191505090505b50905060005b8360010180549050811015610b7457600084600201828154811061097d5761097c6135a0565b5b906000526020600020015490506000806109d68760040185815481106109a6576109a56135a0565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166106cb565b915091506000610a4b82600a6109ec9190613731565b610a3d86600a6109fc9190613731565b610a2f8c6003018a81548110610a1557610a146135a0565b5b90600052602060002001548f61235890919063ffffffff16565b61235890919063ffffffff16565b61235890919063ffffffff16565b90506000610a8a600354610a7c86610a6e600454876123d290919063ffffffff16565b6123d290919063ffffffff16565b6123d290919063ffffffff16565b905060008111610acf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac690613551565b60405180910390fd5b610b3c3330838c6001018a81548110610aeb57610aea6135a0565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661241c909392919063ffffffff16565b80878781518110610b5057610b4f6135a0565b5b60200260200101818152505050505050508080610b6c9061377c565b915050610956565b506000610ba2600454610b9486600501548961235890919063ffffffff16565b6123d290919063ffffffff16565b9050610bbb8185600601546124a590919063ffffffff16565b8460060181905550610bd6818761250390919063ffffffff16565b955060008611610c1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c129061385c565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1933886040518363ffffffff1660e01b8152600401610c7892919061387c565b600060405180830381600087803b158015610c9257600080fd5b505af1158015610ca6573d6000803e3d6000fd5b505050507fd98bbb774078fbb6b52f6def273ff4594983dac401cc52a1063936bf3afc9e9d873384898588604051610ce396959493929190613963565b60405180910390a150505050505050565b610cfc61224e565b73ffffffffffffffffffffffffffffffffffffffff16610d1a61137f565b73ffffffffffffffffffffffffffffffffffffffff1614610d70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6790613185565b60405180910390fd5b60005b82829050811015610f1a57600073ffffffffffffffffffffffffffffffffffffffff16838383818110610da957610da86135a0565b5b9050602002016020810190610dbe9190612b5b565b73ffffffffffffffffffffffffffffffffffffffff1603610e25573373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610e1f573d6000803e3d6000fd5b50610f07565b6000838383818110610e3a57610e396135a0565b5b9050602002016020810190610e4f9190612b5b565b905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610e8c9190612e95565b602060405180830381865afa158015610ea9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ecd91906139cb565b90506000811115610f0457610f0333828473ffffffffffffffffffffffffffffffffffffffff1661254d9092919063ffffffff16565b5b50505b8080610f129061377c565b915050610d73565b507fd43efc325dddcb8b62725a7bfb3ac4e05606a9b650f916fe9eece89f0388d82f8282604051610f4c929190613abb565b60405180910390a15050565b60028181548110610f6857600080fd5b906000526020600020016000915090505481565b610f8461224e565b73ffffffffffffffffffffffffffffffffffffffff16610fa261137f565b73ffffffffffffffffffffffffffffffffffffffff1614610ff8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fef90613185565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611067576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105e90613b51565b60405180910390fd5b6000600860008881526020019081526020016000209050856110f6578060000160009054906101000a900460ff166110d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110cb90613be3565b60405180910390fd5b60008160000160006101000a81548160ff0219169083151502179055506112fb565b600082101561113a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113190613c75565b60405180910390fd5b6000853b905060008111611183576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117a90613d07565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168260000160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036112055760028890806001815401808255809150506001900390600052602060002001600090919091909150555b60018260000160006101000a81548160ff021916908315150217905550858260000160016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550848260010181905550838260020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508282600301819055507f666b566d472d2971223851d773ca777ed96569c3c080ddd469857522e3b5f6d088878787876040516112f1959493929190613d27565b60405180910390a1505b50505050505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60076020528060005260406000206000915090508060000160009054906101000a900460ff169080600501549080600601549080600701549080600801549080600901549080600a01549080600b0154905088565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6113b061224e565b73ffffffffffffffffffffffffffffffffffffffff166113ce61137f565b73ffffffffffffffffffffffffffffffffffffffff1614611424576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141b90613185565b60405180910390fd5b60006008600085815260200190815260200160002090508060000160009054906101000a900460ff1661148c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148390613361565b60405180910390fd5b60008311801561149c5750600082115b80156114a85750828211155b6114e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114de90613c75565b60405180910390fd5b8281600601819055508181600701819055507fef85299a1f42e699160b407f7810f5c8a0c429b72d8259f1bcee2cc2558b6d2c84848460405161152c93929190613d7a565b60405180910390a150505050565b61154261224e565b73ffffffffffffffffffffffffffffffffffffffff1661156061137f565b73ffffffffffffffffffffffffffffffffffffffff16146115b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ad90613185565b60405180910390fd5b60008989905090506000600760008e815260200190815260200160002090508b61164d578060000160009054906101000a900460ff1661162b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162290613e23565b60405180910390fd5b60008160000160006101000a81548160ff021916908315150217905550611970565b60008211801561165f57508888905082145b801561166d57508686905082145b801561167b57508484905082145b6116ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b190613eb5565b60405180910390fd5b60008310156116fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f590613c75565b60405180910390fd5b6000805b838110156118315760008d8d8381811061171f5761171e6135a0565b5b90506020020160208101906117349190612b5b565b90506117628a8a8481811061174c5761174b6135a0565b5b90506020020135846124a590919063ffffffff16565b92506000813b9050600081116117ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a490613d07565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361181c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181390613f47565b60405180910390fd5b505080806118299061377c565b915050611702565b506004548114611876576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186d90613fd9565b60405180910390fd5b60008260010180549050036118af5760018e90806001815401808255809150506001900390600052602060002001600090919091909150555b60018260000160006101000a81548160ff0219169083151502179055508b8b8360010191906118df929190612973565b5089898360020191906118f3929190612a13565b508787836003019190611907929190612a13565b50858583600401919061191b929190612973565b508382600501819055507fc3a53a0b27562217f236b31fad1c23cb33045f1042cfc8ed1128c1dfba9910aa8e8d8d8d8d8d8d8d8d8d6040516119669a99989796959493929190614069565b60405180910390a1505b50505050505050505050505050565b61198761224e565b73ffffffffffffffffffffffffffffffffffffffff166119a561137f565b73ffffffffffffffffffffffffffffffffffffffff16146119fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f290613185565b60405180910390fd5b60006007600085815260200190815260200160002090508060000160009054906101000a900460ff16611a63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5a90613217565b60405180910390fd5b600083118015611a735750600082115b8015611a7f5750828211155b611abe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab590613c75565b60405180910390fd5b8281600801819055508181600901819055507fc403381b638fc55f83c93ef037cfc69649d247b714f78398d0953ae86f9ffc26848484604051611b0393929190613d7a565b60405180910390a150505050565b816008600082815260200190815260200160002060000160009054906101000a900460ff168015611b58575060006008600083815260200190815260200160002060060154115b611b97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8e90613361565b60405180910390fd5b60008211611bda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd190613551565b60405180910390fd5b6000600860008581526020019081526020016000209050600080611c218360020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166106cb565b915091506000611c8e8460010154600a611c3b9190613731565b611c8084600a611c4b9190613731565b611c72600354611c64898d61235890919063ffffffff16565b61235890919063ffffffff16565b6123d290919063ffffffff16565b6123d290919063ffffffff16565b905060008111611cd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cca90613551565b60405180910390fd5b6000611cdf85836125d3565b9050611d30333084600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661241c909392919063ffffffff16565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342966c68836040518263ffffffff1660e01b8152600401611d8b9190612c9f565b600060405180830381600087803b158015611da557600080fd5b505af1158015611db9573d6000803e3d6000fd5b505050506000611dea600454611ddc88600301548b61235890919063ffffffff16565b6123d290919063ffffffff16565b9050611e038187600401546124a590919063ffffffff16565b866004018190555060008660000160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000611e49838b61250390919063ffffffff16565b9050600081118015611ed45750808273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611e909190612e95565b602060405180830381865afa158015611ead573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ed191906139cb565b10155b611f13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0a90614186565b60405180910390fd5b611f3e33828473ffffffffffffffffffffffffffffffffffffffff1661254d9092919063ffffffff16565b7f7e03b210063750872b0348bf9dd27f5afe3ae3cd3a4e59fcb67bfc39c8e110468b3387848789604051611f77969594939291906141a6565b60405180910390a15050505050505050505050565b60086020528060005260406000206000915090508060000160009054906101000a900460ff16908060000160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806003015490806004015490806005015490806006015490806007015490806008015490806009015490508b565b61203b61224e565b73ffffffffffffffffffffffffffffffffffffffff1661205961137f565b73ffffffffffffffffffffffffffffffffffffffff16146120af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a690613185565b60405180910390fd5b600081116120f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e99061429f565b60405180910390fd5b806005819055507fec5d7c7b6b1ff284441dbd0349af6b280abb87bb1db3a8f5b561fae013064de1816040516121289190612c9f565b60405180910390a150565b61213b61224e565b73ffffffffffffffffffffffffffffffffffffffff1661215961137f565b73ffffffffffffffffffffffffffffffffffffffff16146121af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a690613185565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361221e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221590614331565b60405180910390fd5b612227816126d5565b50565b6001818154811061223a57600080fd5b906000526020600020016000915090505481565b600033905090565b600080603c8085600b01544261226c9190614351565b61227691906143b4565b61228091906143b4565b90506000600554821015905060006122a58587600701546124a590919063ffffffff16565b90506000826122b85786600a01546122bb565b60005b90506122d086826124a590919063ffffffff16565b9050866009015481111580156122ea575086600801548211155b612329576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123209061447d565b60405180910390fd5b8187600701819055508087600a0181905550821561234b574287600b01819055505b8094505050505092915050565b600080830361236a57600090506123cc565b60008284612378919061449d565b905082848261238791906143b4565b146123c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123be90614569565b60405180910390fd5b809150505b92915050565b600061241483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612799565b905092915050565b61249f846323b872dd60e01b85858560405160240161243d93929190614589565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506127fc565b50505050565b60008082846124b491906145c0565b9050838110156124f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f090614662565b60405180910390fd5b8091505092915050565b600061254583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061290f565b905092915050565b6125ce8363a9059cbb60e01b848460405160240161256c92919061387c565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506127fc565b505050565b600080603c808560090154426125e99190614351565b6125f391906143b4565b6125fd91906143b4565b90506000600554821015905060006126228587600501546124a590919063ffffffff16565b9050600082612635578660080154612638565b60005b905061264d86826124a590919063ffffffff16565b905086600701548111158015612667575086600601548211155b6126a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161269d9061447d565b60405180910390fd5b81876005018190555080876008018190555082156126c8574287600901819055505b8094505050505092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080831182906127e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127d7919061470a565b60405180910390fd5b50600083856127ef91906143b4565b9050809150509392505050565b6000808373ffffffffffffffffffffffffffffffffffffffff16836040516128249190614773565b6000604051808303816000865af19150503d8060008114612861576040519150601f19603f3d011682016040523d82523d6000602084013e612866565b606091505b5091509150816128ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128a2906147d6565b60405180910390fd5b60008151111561290957808060200190518101906128c9919061480b565b612908576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ff906148aa565b60405180910390fd5b5b50505050565b6000838311158290612957576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294e919061470a565b60405180910390fd5b50600083856129669190614351565b9050809150509392505050565b828054828255906000526020600020908101928215612a02579160200282015b82811115612a0157823573ffffffffffffffffffffffffffffffffffffffff168260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555091602001919060010190612993565b5b509050612a0f9190612a60565b5090565b828054828255906000526020600020908101928215612a4f579160200282015b82811115612a4e578235825591602001919060010190612a33565b5b509050612a5c9190612a60565b5090565b5b80821115612a79576000816000905550600101612a61565b5090565b600080fd5b600080fd5b6000819050919050565b612a9a81612a87565b8114612aa557600080fd5b50565b600081359050612ab781612a91565b92915050565b60008060408385031215612ad457612ad3612a7d565b5b6000612ae285828601612aa8565b9250506020612af385828601612aa8565b9150509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612b2882612afd565b9050919050565b612b3881612b1d565b8114612b4357600080fd5b50565b600081359050612b5581612b2f565b92915050565b600060208284031215612b7157612b70612a7d565b5b6000612b7f84828501612b46565b91505092915050565b612b9181612a87565b82525050565b6000604082019050612bac6000830185612b88565b612bb96020830184612b88565b9392505050565b600080fd5b600080fd5b600080fd5b60008083601f840112612be557612be4612bc0565b5b8235905067ffffffffffffffff811115612c0257612c01612bc5565b5b602083019150836020820283011115612c1e57612c1d612bca565b5b9250929050565b60008060208385031215612c3c57612c3b612a7d565b5b600083013567ffffffffffffffff811115612c5a57612c59612a82565b5b612c6685828601612bcf565b92509250509250929050565b600060208284031215612c8857612c87612a7d565b5b6000612c9684828501612aa8565b91505092915050565b6000602082019050612cb46000830184612b88565b92915050565b60008115159050919050565b612ccf81612cba565b8114612cda57600080fd5b50565b600081359050612cec81612cc6565b92915050565b60008060008060008060c08789031215612d0f57612d0e612a7d565b5b6000612d1d89828a01612aa8565b9650506020612d2e89828a01612cdd565b9550506040612d3f89828a01612b46565b9450506060612d5089828a01612aa8565b9350506080612d6189828a01612b46565b92505060a0612d7289828a01612aa8565b9150509295509295509295565b6000819050919050565b6000612da4612d9f612d9a84612afd565b612d7f565b612afd565b9050919050565b6000612db682612d89565b9050919050565b6000612dc882612dab565b9050919050565b612dd881612dbd565b82525050565b6000602082019050612df36000830184612dcf565b92915050565b612e0281612cba565b82525050565b600061010082019050612e1e600083018b612df9565b612e2b602083018a612b88565b612e386040830189612b88565b612e456060830188612b88565b612e526080830187612b88565b612e5f60a0830186612b88565b612e6c60c0830185612b88565b612e7960e0830184612b88565b9998505050505050505050565b612e8f81612b1d565b82525050565b6000602082019050612eaa6000830184612e86565b92915050565b600080600060608486031215612ec957612ec8612a7d565b5b6000612ed786828701612aa8565b9350506020612ee886828701612aa8565b9250506040612ef986828701612aa8565b9150509250925092565b60008083601f840112612f1957612f18612bc0565b5b8235905067ffffffffffffffff811115612f3657612f35612bc5565b5b602083019150836020820283011115612f5257612f51612bca565b5b9250929050565b600080600080600080600080600080600060e08c8e031215612f7e57612f7d612a7d565b5b6000612f8c8e828f01612aa8565b9b50506020612f9d8e828f01612cdd565b9a505060408c013567ffffffffffffffff811115612fbe57612fbd612a82565b5b612fca8e828f01612bcf565b995099505060608c013567ffffffffffffffff811115612fed57612fec612a82565b5b612ff98e828f01612f03565b975097505060808c013567ffffffffffffffff81111561301c5761301b612a82565b5b6130288e828f01612f03565b955095505060a08c013567ffffffffffffffff81111561304b5761304a612a82565b5b6130578e828f01612bcf565b935093505060c061306a8e828f01612aa8565b9150509295989b509295989b9093969950565b600061016082019050613093600083018e612df9565b6130a0602083018d612e86565b6130ad604083018c612b88565b6130ba606083018b612e86565b6130c7608083018a612b88565b6130d460a0830189612b88565b6130e160c0830188612b88565b6130ee60e0830187612b88565b6130fc610100830186612b88565b61310a610120830185612b88565b613118610140830184612b88565b9c9b505050505050505050505050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061316f602083613128565b915061317a82613139565b602082019050919050565b6000602082019050818103600083015261319e81613162565b9050919050565b7f436f696e3938446f6c6c61724d696e744275726e3a204d696e746572206e6f7460008201527f2065786973746564000000000000000000000000000000000000000000000000602082015250565b6000613201602883613128565b915061320c826131a5565b604082019050919050565b60006020820190508181036000830152613230816131f4565b9050919050565b7f436f696e3938446f6c6c61724d696e744275726e3a20466565206d757374206260008201527f65206120706f736974697665206e756d62657220616e6420677265617465722060208201527f7468616e207a65726f0000000000000000000000000000000000000000000000604082015250565b60006132b9604983613128565b91506132c482613237565b606082019050919050565b600060208201905081810360008301526132e8816132ac565b9050919050565b7f436f696e3938446f6c6c61724d696e744275726e3a204275726e6572206e6f7460008201527f2065786973746564000000000000000000000000000000000000000000000000602082015250565b600061334b602883613128565b9150613356826132ef565b604082019050919050565b6000602082019050818103600083015261337a8161333e565b9050919050565b600060ff82169050919050565b61339781613381565b81146133a257600080fd5b50565b6000815190506133b48161338e565b92915050565b6000602082840312156133d0576133cf612a7d565b5b60006133de848285016133a5565b91505092915050565b600069ffffffffffffffffffff82169050919050565b613406816133e7565b811461341157600080fd5b50565b600081519050613423816133fd565b92915050565b60008151905061343881612a91565b92915050565b600080600080600060a0868803121561345a57613459612a7d565b5b600061346888828901613414565b955050602061347988828901613429565b945050604061348a88828901613429565b935050606061349b88828901613429565b92505060806134ac88828901613414565b9150509295509295909350565b7f436f696e3938446f6c6c61724d696e744275726e3a20416d6f756e74206d757360008201527f74206265206120706f736974697665206e756d62657220616e6420677265617460208201527f6572207468616e207a65726f0000000000000000000000000000000000000000604082015250565b600061353b604c83613128565b9150613546826134b9565b606082019050919050565b6000602082019050818103600083015261356a8161352e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111561365557808604811115613631576136306135cf565b5b60018516156136405780820291505b808102905061364e856135fe565b9450613615565b94509492505050565b60008261366e576001905061372a565b8161367c576000905061372a565b8160018114613692576002811461369c576136cb565b600191505061372a565b60ff8411156136ae576136ad6135cf565b5b8360020a9150848211156136c5576136c46135cf565b5b5061372a565b5060208310610133831016604e8410600b84101617156137005782820a9050838111156136fb576136fa6135cf565b5b61372a565b61370d848484600161360b565b92509050818404811115613724576137236135cf565b5b81810290505b9392505050565b600061373c82612a87565b915061374783612a87565b92506137747fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848461365e565b905092915050565b600061378782612a87565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036137b9576137b86135cf565b5b600182019050919050565b7f436f696e3938446f6c6c61724d696e744275726e3a20546f74616c204d696e7460008201527f206d757374206265206120706f736974697665206e756d62657220616e64206760208201527f726561746572207468616e207a65726f00000000000000000000000000000000604082015250565b6000613846605083613128565b9150613851826137c4565b606082019050919050565b6000602082019050818103600083015261387581613839565b9050919050565b60006040820190506138916000830185612e86565b61389e6020830184612b88565b9392505050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6138da81612a87565b82525050565b60006138ec83836138d1565b60208301905092915050565b6000602082019050919050565b6000613910826138a5565b61391a81856138b0565b9350613925836138c1565b8060005b8381101561395657815161393d88826138e0565b9750613948836138f8565b925050600181019050613929565b5085935050505092915050565b600060c0820190506139786000830189612b88565b6139856020830188612e86565b81810360408301526139978187613905565b90506139a66060830186612b88565b6139b36080830185612b88565b6139c060a0830184612b88565b979650505050505050565b6000602082840312156139e1576139e0612a7d565b5b60006139ef84828501613429565b91505092915050565b600082825260208201905092915050565b6000819050919050565b613a1c81612b1d565b82525050565b6000613a2e8383613a13565b60208301905092915050565b6000613a496020840184612b46565b905092915050565b6000602082019050919050565b6000613a6a83856139f8565b9350613a7582613a09565b8060005b85811015613aae57613a8b8284613a3a565b613a958882613a22565b9750613aa083613a51565b925050600181019050613a79565b5085925050509392505050565b60006020820190508181036000830152613ad6818486613a5e565b90509392505050565b7f436f696e3938446f6c6c61724d696e744275726e3a204275726e65722069732060008201527f7a65726f20616464726573730000000000000000000000000000000000000000602082015250565b6000613b3b602c83613128565b9150613b4682613adf565b604082019050919050565b60006020820190508181036000830152613b6a81613b2e565b9050919050565b7f436f696e3938446f6c6c61724d696e744275726e3a204275726e657220616c7260008201527f6561647920646561637469766500000000000000000000000000000000000000602082015250565b6000613bcd602d83613128565b9150613bd882613b71565b604082019050919050565b60006020820190508181036000830152613bfc81613bc0565b9050919050565b7f436f696e3938446f6c6c61724d696e744275726e3a20496e76616c696420696e60008201527f70757420616d6f756e7400000000000000000000000000000000000000000000602082015250565b6000613c5f602a83613128565b9150613c6a82613c03565b604082019050919050565b60006020820190508181036000830152613c8e81613c52565b9050919050565b7f436f696e3938446f6c6c61724d696e744275726e3a20496e76616c696420746f60008201527f6b656e2061646472657373000000000000000000000000000000000000000000602082015250565b6000613cf1602b83613128565b9150613cfc82613c95565b604082019050919050565b60006020820190508181036000830152613d2081613ce4565b9050919050565b600060a082019050613d3c6000830188612b88565b613d496020830187612e86565b613d566040830186612b88565b613d636060830185612e86565b613d706080830184612b88565b9695505050505050565b6000606082019050613d8f6000830186612b88565b613d9c6020830185612b88565b613da96040830184612b88565b949350505050565b7f436f696e3938446f6c6c61724d696e744275726e3a204d696e74657220616c7260008201527f6561647920646561637469766500000000000000000000000000000000000000602082015250565b6000613e0d602d83613128565b9150613e1882613db1565b604082019050919050565b60006020820190508181036000830152613e3c81613e00565b9050919050565b7f436f696e3938446f6c6c61724d696e744275726e3a20496e76616c696420696e60008201527f707574206c656e67746873000000000000000000000000000000000000000000602082015250565b6000613e9f602b83613128565b9150613eaa82613e43565b604082019050919050565b60006020820190508181036000830152613ece81613e92565b9050919050565b7f436f696e3938446f6c6c61724d696e744275726e3a204d696e7465722069732060008201527f7a65726f20616464726573730000000000000000000000000000000000000000602082015250565b6000613f31602c83613128565b9150613f3c82613ed5565b604082019050919050565b60006020820190508181036000830152613f6081613f24565b9050919050565b7f436f696e3938446f6c6c61724d696e744275726e3a20496e76616c696420706560008201527f7263656e742076616c7565000000000000000000000000000000000000000000602082015250565b6000613fc3602b83613128565b9150613fce82613f67565b604082019050919050565b60006020820190508181036000830152613ff281613fb6565b9050919050565b600080fd5b82818337600083830152505050565b600061401983856138b0565b93507f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83111561404c5761404b613ff9565b5b60208302925061405d838584613ffe565b82840190509392505050565b600060c08201905061407e600083018d612b88565b8181036020830152614091818b8d613a5e565b905081810360408301526140a681898b61400d565b905081810360608301526140bb81878961400d565b905081810360808301526140d0818587613a5e565b90506140df60a0830184612b88565b9b9a5050505050505050505050565b7f436f696e3938446f6c6c61724d696e744275726e3a204e6f7420656e6f75676860008201527f2062616c616e636520746f206d696e74206f7220696e76616c696420616d6f7560208201527f6e74000000000000000000000000000000000000000000000000000000000000604082015250565b6000614170604283613128565b915061417b826140ee565b606082019050919050565b6000602082019050818103600083015261419f81614163565b9050919050565b600060c0820190506141bb6000830189612b88565b6141c86020830188612e86565b6141d56040830187612b88565b6141e26060830186612b88565b6141ef6080830185612b88565b6141fc60a0830184612b88565b979650505050505050565b7f436f696e3938446f6c6c61724d696e744275726e3a204c696d69742074696d6560008201527f206d757374206265206120706f736974697665206e756d62657220616e64206760208201527f726561746572207468616e207a65726f00000000000000000000000000000000604082015250565b6000614289605083613128565b915061429482614207565b606082019050919050565b600060208201905081810360008301526142b88161427c565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061431b602683613128565b9150614326826142bf565b604082019050919050565b6000602082019050818103600083015261434a8161430e565b9050919050565b600061435c82612a87565b915061436783612a87565b92508282101561437a576143796135cf565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006143bf82612a87565b91506143ca83612a87565b9250826143da576143d9614385565b5b828204905092915050565b7f436f696e3938446f6c6c61724d696e744275726e3a20416d6f756e74206d757360008201527f74206265206c657373207468616e20746f74616c20737570706c7920616e642060208201527f746f74616c207065722064617900000000000000000000000000000000000000604082015250565b6000614467604d83613128565b9150614472826143e5565b606082019050919050565b600060208201905081810360008301526144968161445a565b9050919050565b60006144a882612a87565b91506144b383612a87565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156144ec576144eb6135cf565b5b828202905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000614553602183613128565b915061455e826144f7565b604082019050919050565b6000602082019050818103600083015261458281614546565b9050919050565b600060608201905061459e6000830186612e86565b6145ab6020830185612e86565b6145b86040830184612b88565b949350505050565b60006145cb82612a87565b91506145d683612a87565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561460b5761460a6135cf565b5b828201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600061464c601b83613128565b915061465782614616565b602082019050919050565b6000602082019050818103600083015261467b8161463f565b9050919050565b600081519050919050565b60005b838110156146ab578082015181840152602081019050614690565b838111156146ba576000848401525b50505050565b6000601f19601f8301169050919050565b60006146dc82614682565b6146e68185613128565b93506146f681856020860161468d565b6146ff816146c0565b840191505092915050565b6000602082019050818103600083015261472481846146d1565b905092915050565b600081519050919050565b600081905092915050565b600061474d8261472c565b6147578185614737565b935061476781856020860161468d565b80840191505092915050565b600061477f8284614742565b915081905092915050565b7f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564600082015250565b60006147c0602083613128565b91506147cb8261478a565b602082019050919050565b600060208201905081810360008301526147ef816147b3565b9050919050565b60008151905061480581612cc6565b92915050565b60006020828403121561482157614820612a7d565b5b600061482f848285016147f6565b91505092915050565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b6000614894602a83613128565b915061489f82614838565b604082019050919050565b600060208201905081810360008301526148c381614887565b905091905056fea26469706673582212208d9a7920163d525c972d5f92eff3cf6a579a39d61858e158fb461167bfe57e2b64736f6c634300080d0033000000000000000000000000c285b7e09a4584d027e5bc36571785b515898246
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101165760003560e01c80638da5cb5b116100a2578063b390c0ab11610071578063b390c0ab146102cf578063e214c84a146102eb578063e7e62d3614610325578063f2fde38b14610341578063f494234e1461035d57610116565b80638da5cb5b1461025d578063980b62f31461027b578063aeca3bd014610297578063afe167c7146102b357610116565b80632895e837116100e95780632895e837146101a05780632db86462146101bc578063364938e0146101ec57806347126ebd1461020857806377f475181461022657610116565b80630474ca921461011b5780630b884c511461013757806316345f18146101535780631b2ef1ca14610184575b600080fd5b61013560048036038101906101309190612abd565b61038d565b005b610151600480360381019061014c9190612abd565b61052c565b005b61016d60048036038101906101689190612b5b565b6106cb565b60405161017b929190612b97565b60405180910390f35b61019e60048036038101906101999190612abd565b610811565b005b6101ba60048036038101906101b59190612c25565b610cf4565b005b6101d660048036038101906101d19190612c72565b610f58565b6040516101e39190612c9f565b60405180910390f35b61020660048036038101906102019190612cf2565b610f7c565b005b610210611304565b60405161021d9190612dde565b60405180910390f35b610240600480360381019061023b9190612c72565b61132a565b604051610254989796959493929190612e08565b60405180910390f35b61026561137f565b6040516102729190612e95565b60405180910390f35b61029560048036038101906102909190612eb0565b6113a8565b005b6102b160048036038101906102ac9190612f59565b61153a565b005b6102cd60048036038101906102c89190612eb0565b61197f565b005b6102e960048036038101906102e49190612abd565b611b11565b005b61030560048036038101906103009190612c72565b611f8c565b60405161031c9b9a9998979695949392919061307d565b60405180910390f35b61033f600480360381019061033a9190612c72565b612033565b005b61035b60048036038101906103569190612b5b565b612133565b005b61037760048036038101906103729190612c72565b61222a565b6040516103849190612c9f565b60405180910390f35b61039561224e565b73ffffffffffffffffffffffffffffffffffffffff166103b361137f565b73ffffffffffffffffffffffffffffffffffffffff1614610409576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161040090613185565b60405180910390fd5b816007600082815260200190815260200160002060000160009054906101000a900460ff168015610450575060006007600083815260200190815260200160002060080154115b61048f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161048690613217565b60405180910390fd5b60008210156104d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104ca906132cf565b60405180910390fd5b8160076000858152602001908152602001600020600501819055507f52d90194c31ad1a646bc82f9575b741a0517368eaa8ab888923d5be6cc429a16838360405161051f929190612b97565b60405180910390a1505050565b61053461224e565b73ffffffffffffffffffffffffffffffffffffffff1661055261137f565b73ffffffffffffffffffffffffffffffffffffffff16146105a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161059f90613185565b60405180910390fd5b816008600082815260200190815260200160002060000160009054906101000a900460ff1680156105ef575060006008600083815260200190815260200160002060060154115b61062e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161062590613361565b60405180910390fd5b6000821015610672576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610669906132cf565b60405180910390fd5b8160086000858152602001908152602001600020600301819055507ff646be87d533738140bc61a30a5dbf4ff8995b1b5ed2182e8a21727c71ed546983836040516106be929190612b97565b60405180910390a1505050565b600080600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361071657670de0b6b3a764000060129150915061080c565b60008373ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610763573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078791906133ba565b60ff16905060008473ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156107d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107fd919061343e565b50505091505080829350935050505b915091565b816007600082815260200190815260200160002060000160009054906101000a900460ff168015610858575060006007600083815260200190815260200160002060080154115b610897576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088e90613217565b60405180910390fd5b600082116108da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d190613551565b60405180910390fd5b600060076000858152602001908152602001600020905060006108fd8285612256565b90506000826001018054905067ffffffffffffffff81111561092257610921613571565b5b6040519080825280602002602001820160405280156109505781602001602082028036833780820191505090505b50905060005b8360010180549050811015610b7457600084600201828154811061097d5761097c6135a0565b5b906000526020600020015490506000806109d68760040185815481106109a6576109a56135a0565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166106cb565b915091506000610a4b82600a6109ec9190613731565b610a3d86600a6109fc9190613731565b610a2f8c6003018a81548110610a1557610a146135a0565b5b90600052602060002001548f61235890919063ffffffff16565b61235890919063ffffffff16565b61235890919063ffffffff16565b90506000610a8a600354610a7c86610a6e600454876123d290919063ffffffff16565b6123d290919063ffffffff16565b6123d290919063ffffffff16565b905060008111610acf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac690613551565b60405180910390fd5b610b3c3330838c6001018a81548110610aeb57610aea6135a0565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661241c909392919063ffffffff16565b80878781518110610b5057610b4f6135a0565b5b60200260200101818152505050505050508080610b6c9061377c565b915050610956565b506000610ba2600454610b9486600501548961235890919063ffffffff16565b6123d290919063ffffffff16565b9050610bbb8185600601546124a590919063ffffffff16565b8460060181905550610bd6818761250390919063ffffffff16565b955060008611610c1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c129061385c565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1933886040518363ffffffff1660e01b8152600401610c7892919061387c565b600060405180830381600087803b158015610c9257600080fd5b505af1158015610ca6573d6000803e3d6000fd5b505050507fd98bbb774078fbb6b52f6def273ff4594983dac401cc52a1063936bf3afc9e9d873384898588604051610ce396959493929190613963565b60405180910390a150505050505050565b610cfc61224e565b73ffffffffffffffffffffffffffffffffffffffff16610d1a61137f565b73ffffffffffffffffffffffffffffffffffffffff1614610d70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6790613185565b60405180910390fd5b60005b82829050811015610f1a57600073ffffffffffffffffffffffffffffffffffffffff16838383818110610da957610da86135a0565b5b9050602002016020810190610dbe9190612b5b565b73ffffffffffffffffffffffffffffffffffffffff1603610e25573373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610e1f573d6000803e3d6000fd5b50610f07565b6000838383818110610e3a57610e396135a0565b5b9050602002016020810190610e4f9190612b5b565b905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610e8c9190612e95565b602060405180830381865afa158015610ea9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ecd91906139cb565b90506000811115610f0457610f0333828473ffffffffffffffffffffffffffffffffffffffff1661254d9092919063ffffffff16565b5b50505b8080610f129061377c565b915050610d73565b507fd43efc325dddcb8b62725a7bfb3ac4e05606a9b650f916fe9eece89f0388d82f8282604051610f4c929190613abb565b60405180910390a15050565b60028181548110610f6857600080fd5b906000526020600020016000915090505481565b610f8461224e565b73ffffffffffffffffffffffffffffffffffffffff16610fa261137f565b73ffffffffffffffffffffffffffffffffffffffff1614610ff8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fef90613185565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611067576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105e90613b51565b60405180910390fd5b6000600860008881526020019081526020016000209050856110f6578060000160009054906101000a900460ff166110d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110cb90613be3565b60405180910390fd5b60008160000160006101000a81548160ff0219169083151502179055506112fb565b600082101561113a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113190613c75565b60405180910390fd5b6000853b905060008111611183576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117a90613d07565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168260000160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036112055760028890806001815401808255809150506001900390600052602060002001600090919091909150555b60018260000160006101000a81548160ff021916908315150217905550858260000160016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550848260010181905550838260020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508282600301819055507f666b566d472d2971223851d773ca777ed96569c3c080ddd469857522e3b5f6d088878787876040516112f1959493929190613d27565b60405180910390a1505b50505050505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60076020528060005260406000206000915090508060000160009054906101000a900460ff169080600501549080600601549080600701549080600801549080600901549080600a01549080600b0154905088565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6113b061224e565b73ffffffffffffffffffffffffffffffffffffffff166113ce61137f565b73ffffffffffffffffffffffffffffffffffffffff1614611424576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141b90613185565b60405180910390fd5b60006008600085815260200190815260200160002090508060000160009054906101000a900460ff1661148c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148390613361565b60405180910390fd5b60008311801561149c5750600082115b80156114a85750828211155b6114e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114de90613c75565b60405180910390fd5b8281600601819055508181600701819055507fef85299a1f42e699160b407f7810f5c8a0c429b72d8259f1bcee2cc2558b6d2c84848460405161152c93929190613d7a565b60405180910390a150505050565b61154261224e565b73ffffffffffffffffffffffffffffffffffffffff1661156061137f565b73ffffffffffffffffffffffffffffffffffffffff16146115b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ad90613185565b60405180910390fd5b60008989905090506000600760008e815260200190815260200160002090508b61164d578060000160009054906101000a900460ff1661162b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162290613e23565b60405180910390fd5b60008160000160006101000a81548160ff021916908315150217905550611970565b60008211801561165f57508888905082145b801561166d57508686905082145b801561167b57508484905082145b6116ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b190613eb5565b60405180910390fd5b60008310156116fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f590613c75565b60405180910390fd5b6000805b838110156118315760008d8d8381811061171f5761171e6135a0565b5b90506020020160208101906117349190612b5b565b90506117628a8a8481811061174c5761174b6135a0565b5b90506020020135846124a590919063ffffffff16565b92506000813b9050600081116117ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a490613d07565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361181c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181390613f47565b60405180910390fd5b505080806118299061377c565b915050611702565b506004548114611876576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186d90613fd9565b60405180910390fd5b60008260010180549050036118af5760018e90806001815401808255809150506001900390600052602060002001600090919091909150555b60018260000160006101000a81548160ff0219169083151502179055508b8b8360010191906118df929190612973565b5089898360020191906118f3929190612a13565b508787836003019190611907929190612a13565b50858583600401919061191b929190612973565b508382600501819055507fc3a53a0b27562217f236b31fad1c23cb33045f1042cfc8ed1128c1dfba9910aa8e8d8d8d8d8d8d8d8d8d6040516119669a99989796959493929190614069565b60405180910390a1505b50505050505050505050505050565b61198761224e565b73ffffffffffffffffffffffffffffffffffffffff166119a561137f565b73ffffffffffffffffffffffffffffffffffffffff16146119fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f290613185565b60405180910390fd5b60006007600085815260200190815260200160002090508060000160009054906101000a900460ff16611a63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5a90613217565b60405180910390fd5b600083118015611a735750600082115b8015611a7f5750828211155b611abe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab590613c75565b60405180910390fd5b8281600801819055508181600901819055507fc403381b638fc55f83c93ef037cfc69649d247b714f78398d0953ae86f9ffc26848484604051611b0393929190613d7a565b60405180910390a150505050565b816008600082815260200190815260200160002060000160009054906101000a900460ff168015611b58575060006008600083815260200190815260200160002060060154115b611b97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8e90613361565b60405180910390fd5b60008211611bda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd190613551565b60405180910390fd5b6000600860008581526020019081526020016000209050600080611c218360020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166106cb565b915091506000611c8e8460010154600a611c3b9190613731565b611c8084600a611c4b9190613731565b611c72600354611c64898d61235890919063ffffffff16565b61235890919063ffffffff16565b6123d290919063ffffffff16565b6123d290919063ffffffff16565b905060008111611cd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cca90613551565b60405180910390fd5b6000611cdf85836125d3565b9050611d30333084600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661241c909392919063ffffffff16565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342966c68836040518263ffffffff1660e01b8152600401611d8b9190612c9f565b600060405180830381600087803b158015611da557600080fd5b505af1158015611db9573d6000803e3d6000fd5b505050506000611dea600454611ddc88600301548b61235890919063ffffffff16565b6123d290919063ffffffff16565b9050611e038187600401546124a590919063ffffffff16565b866004018190555060008660000160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000611e49838b61250390919063ffffffff16565b9050600081118015611ed45750808273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611e909190612e95565b602060405180830381865afa158015611ead573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ed191906139cb565b10155b611f13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0a90614186565b60405180910390fd5b611f3e33828473ffffffffffffffffffffffffffffffffffffffff1661254d9092919063ffffffff16565b7f7e03b210063750872b0348bf9dd27f5afe3ae3cd3a4e59fcb67bfc39c8e110468b3387848789604051611f77969594939291906141a6565b60405180910390a15050505050505050505050565b60086020528060005260406000206000915090508060000160009054906101000a900460ff16908060000160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806003015490806004015490806005015490806006015490806007015490806008015490806009015490508b565b61203b61224e565b73ffffffffffffffffffffffffffffffffffffffff1661205961137f565b73ffffffffffffffffffffffffffffffffffffffff16146120af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a690613185565b60405180910390fd5b600081116120f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e99061429f565b60405180910390fd5b806005819055507fec5d7c7b6b1ff284441dbd0349af6b280abb87bb1db3a8f5b561fae013064de1816040516121289190612c9f565b60405180910390a150565b61213b61224e565b73ffffffffffffffffffffffffffffffffffffffff1661215961137f565b73ffffffffffffffffffffffffffffffffffffffff16146121af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a690613185565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361221e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221590614331565b60405180910390fd5b612227816126d5565b50565b6001818154811061223a57600080fd5b906000526020600020016000915090505481565b600033905090565b600080603c8085600b01544261226c9190614351565b61227691906143b4565b61228091906143b4565b90506000600554821015905060006122a58587600701546124a590919063ffffffff16565b90506000826122b85786600a01546122bb565b60005b90506122d086826124a590919063ffffffff16565b9050866009015481111580156122ea575086600801548211155b612329576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123209061447d565b60405180910390fd5b8187600701819055508087600a0181905550821561234b574287600b01819055505b8094505050505092915050565b600080830361236a57600090506123cc565b60008284612378919061449d565b905082848261238791906143b4565b146123c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123be90614569565b60405180910390fd5b809150505b92915050565b600061241483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612799565b905092915050565b61249f846323b872dd60e01b85858560405160240161243d93929190614589565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506127fc565b50505050565b60008082846124b491906145c0565b9050838110156124f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f090614662565b60405180910390fd5b8091505092915050565b600061254583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061290f565b905092915050565b6125ce8363a9059cbb60e01b848460405160240161256c92919061387c565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506127fc565b505050565b600080603c808560090154426125e99190614351565b6125f391906143b4565b6125fd91906143b4565b90506000600554821015905060006126228587600501546124a590919063ffffffff16565b9050600082612635578660080154612638565b60005b905061264d86826124a590919063ffffffff16565b905086600701548111158015612667575086600601548211155b6126a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161269d9061447d565b60405180910390fd5b81876005018190555080876008018190555082156126c8574287600901819055505b8094505050505092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080831182906127e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127d7919061470a565b60405180910390fd5b50600083856127ef91906143b4565b9050809150509392505050565b6000808373ffffffffffffffffffffffffffffffffffffffff16836040516128249190614773565b6000604051808303816000865af19150503d8060008114612861576040519150601f19603f3d011682016040523d82523d6000602084013e612866565b606091505b5091509150816128ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128a2906147d6565b60405180910390fd5b60008151111561290957808060200190518101906128c9919061480b565b612908576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ff906148aa565b60405180910390fd5b5b50505050565b6000838311158290612957576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294e919061470a565b60405180910390fd5b50600083856129669190614351565b9050809150509392505050565b828054828255906000526020600020908101928215612a02579160200282015b82811115612a0157823573ffffffffffffffffffffffffffffffffffffffff168260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555091602001919060010190612993565b5b509050612a0f9190612a60565b5090565b828054828255906000526020600020908101928215612a4f579160200282015b82811115612a4e578235825591602001919060010190612a33565b5b509050612a5c9190612a60565b5090565b5b80821115612a79576000816000905550600101612a61565b5090565b600080fd5b600080fd5b6000819050919050565b612a9a81612a87565b8114612aa557600080fd5b50565b600081359050612ab781612a91565b92915050565b60008060408385031215612ad457612ad3612a7d565b5b6000612ae285828601612aa8565b9250506020612af385828601612aa8565b9150509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612b2882612afd565b9050919050565b612b3881612b1d565b8114612b4357600080fd5b50565b600081359050612b5581612b2f565b92915050565b600060208284031215612b7157612b70612a7d565b5b6000612b7f84828501612b46565b91505092915050565b612b9181612a87565b82525050565b6000604082019050612bac6000830185612b88565b612bb96020830184612b88565b9392505050565b600080fd5b600080fd5b600080fd5b60008083601f840112612be557612be4612bc0565b5b8235905067ffffffffffffffff811115612c0257612c01612bc5565b5b602083019150836020820283011115612c1e57612c1d612bca565b5b9250929050565b60008060208385031215612c3c57612c3b612a7d565b5b600083013567ffffffffffffffff811115612c5a57612c59612a82565b5b612c6685828601612bcf565b92509250509250929050565b600060208284031215612c8857612c87612a7d565b5b6000612c9684828501612aa8565b91505092915050565b6000602082019050612cb46000830184612b88565b92915050565b60008115159050919050565b612ccf81612cba565b8114612cda57600080fd5b50565b600081359050612cec81612cc6565b92915050565b60008060008060008060c08789031215612d0f57612d0e612a7d565b5b6000612d1d89828a01612aa8565b9650506020612d2e89828a01612cdd565b9550506040612d3f89828a01612b46565b9450506060612d5089828a01612aa8565b9350506080612d6189828a01612b46565b92505060a0612d7289828a01612aa8565b9150509295509295509295565b6000819050919050565b6000612da4612d9f612d9a84612afd565b612d7f565b612afd565b9050919050565b6000612db682612d89565b9050919050565b6000612dc882612dab565b9050919050565b612dd881612dbd565b82525050565b6000602082019050612df36000830184612dcf565b92915050565b612e0281612cba565b82525050565b600061010082019050612e1e600083018b612df9565b612e2b602083018a612b88565b612e386040830189612b88565b612e456060830188612b88565b612e526080830187612b88565b612e5f60a0830186612b88565b612e6c60c0830185612b88565b612e7960e0830184612b88565b9998505050505050505050565b612e8f81612b1d565b82525050565b6000602082019050612eaa6000830184612e86565b92915050565b600080600060608486031215612ec957612ec8612a7d565b5b6000612ed786828701612aa8565b9350506020612ee886828701612aa8565b9250506040612ef986828701612aa8565b9150509250925092565b60008083601f840112612f1957612f18612bc0565b5b8235905067ffffffffffffffff811115612f3657612f35612bc5565b5b602083019150836020820283011115612f5257612f51612bca565b5b9250929050565b600080600080600080600080600080600060e08c8e031215612f7e57612f7d612a7d565b5b6000612f8c8e828f01612aa8565b9b50506020612f9d8e828f01612cdd565b9a505060408c013567ffffffffffffffff811115612fbe57612fbd612a82565b5b612fca8e828f01612bcf565b995099505060608c013567ffffffffffffffff811115612fed57612fec612a82565b5b612ff98e828f01612f03565b975097505060808c013567ffffffffffffffff81111561301c5761301b612a82565b5b6130288e828f01612f03565b955095505060a08c013567ffffffffffffffff81111561304b5761304a612a82565b5b6130578e828f01612bcf565b935093505060c061306a8e828f01612aa8565b9150509295989b509295989b9093969950565b600061016082019050613093600083018e612df9565b6130a0602083018d612e86565b6130ad604083018c612b88565b6130ba606083018b612e86565b6130c7608083018a612b88565b6130d460a0830189612b88565b6130e160c0830188612b88565b6130ee60e0830187612b88565b6130fc610100830186612b88565b61310a610120830185612b88565b613118610140830184612b88565b9c9b505050505050505050505050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061316f602083613128565b915061317a82613139565b602082019050919050565b6000602082019050818103600083015261319e81613162565b9050919050565b7f436f696e3938446f6c6c61724d696e744275726e3a204d696e746572206e6f7460008201527f2065786973746564000000000000000000000000000000000000000000000000602082015250565b6000613201602883613128565b915061320c826131a5565b604082019050919050565b60006020820190508181036000830152613230816131f4565b9050919050565b7f436f696e3938446f6c6c61724d696e744275726e3a20466565206d757374206260008201527f65206120706f736974697665206e756d62657220616e6420677265617465722060208201527f7468616e207a65726f0000000000000000000000000000000000000000000000604082015250565b60006132b9604983613128565b91506132c482613237565b606082019050919050565b600060208201905081810360008301526132e8816132ac565b9050919050565b7f436f696e3938446f6c6c61724d696e744275726e3a204275726e6572206e6f7460008201527f2065786973746564000000000000000000000000000000000000000000000000602082015250565b600061334b602883613128565b9150613356826132ef565b604082019050919050565b6000602082019050818103600083015261337a8161333e565b9050919050565b600060ff82169050919050565b61339781613381565b81146133a257600080fd5b50565b6000815190506133b48161338e565b92915050565b6000602082840312156133d0576133cf612a7d565b5b60006133de848285016133a5565b91505092915050565b600069ffffffffffffffffffff82169050919050565b613406816133e7565b811461341157600080fd5b50565b600081519050613423816133fd565b92915050565b60008151905061343881612a91565b92915050565b600080600080600060a0868803121561345a57613459612a7d565b5b600061346888828901613414565b955050602061347988828901613429565b945050604061348a88828901613429565b935050606061349b88828901613429565b92505060806134ac88828901613414565b9150509295509295909350565b7f436f696e3938446f6c6c61724d696e744275726e3a20416d6f756e74206d757360008201527f74206265206120706f736974697665206e756d62657220616e6420677265617460208201527f6572207468616e207a65726f0000000000000000000000000000000000000000604082015250565b600061353b604c83613128565b9150613546826134b9565b606082019050919050565b6000602082019050818103600083015261356a8161352e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111561365557808604811115613631576136306135cf565b5b60018516156136405780820291505b808102905061364e856135fe565b9450613615565b94509492505050565b60008261366e576001905061372a565b8161367c576000905061372a565b8160018114613692576002811461369c576136cb565b600191505061372a565b60ff8411156136ae576136ad6135cf565b5b8360020a9150848211156136c5576136c46135cf565b5b5061372a565b5060208310610133831016604e8410600b84101617156137005782820a9050838111156136fb576136fa6135cf565b5b61372a565b61370d848484600161360b565b92509050818404811115613724576137236135cf565b5b81810290505b9392505050565b600061373c82612a87565b915061374783612a87565b92506137747fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848461365e565b905092915050565b600061378782612a87565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036137b9576137b86135cf565b5b600182019050919050565b7f436f696e3938446f6c6c61724d696e744275726e3a20546f74616c204d696e7460008201527f206d757374206265206120706f736974697665206e756d62657220616e64206760208201527f726561746572207468616e207a65726f00000000000000000000000000000000604082015250565b6000613846605083613128565b9150613851826137c4565b606082019050919050565b6000602082019050818103600083015261387581613839565b9050919050565b60006040820190506138916000830185612e86565b61389e6020830184612b88565b9392505050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6138da81612a87565b82525050565b60006138ec83836138d1565b60208301905092915050565b6000602082019050919050565b6000613910826138a5565b61391a81856138b0565b9350613925836138c1565b8060005b8381101561395657815161393d88826138e0565b9750613948836138f8565b925050600181019050613929565b5085935050505092915050565b600060c0820190506139786000830189612b88565b6139856020830188612e86565b81810360408301526139978187613905565b90506139a66060830186612b88565b6139b36080830185612b88565b6139c060a0830184612b88565b979650505050505050565b6000602082840312156139e1576139e0612a7d565b5b60006139ef84828501613429565b91505092915050565b600082825260208201905092915050565b6000819050919050565b613a1c81612b1d565b82525050565b6000613a2e8383613a13565b60208301905092915050565b6000613a496020840184612b46565b905092915050565b6000602082019050919050565b6000613a6a83856139f8565b9350613a7582613a09565b8060005b85811015613aae57613a8b8284613a3a565b613a958882613a22565b9750613aa083613a51565b925050600181019050613a79565b5085925050509392505050565b60006020820190508181036000830152613ad6818486613a5e565b90509392505050565b7f436f696e3938446f6c6c61724d696e744275726e3a204275726e65722069732060008201527f7a65726f20616464726573730000000000000000000000000000000000000000602082015250565b6000613b3b602c83613128565b9150613b4682613adf565b604082019050919050565b60006020820190508181036000830152613b6a81613b2e565b9050919050565b7f436f696e3938446f6c6c61724d696e744275726e3a204275726e657220616c7260008201527f6561647920646561637469766500000000000000000000000000000000000000602082015250565b6000613bcd602d83613128565b9150613bd882613b71565b604082019050919050565b60006020820190508181036000830152613bfc81613bc0565b9050919050565b7f436f696e3938446f6c6c61724d696e744275726e3a20496e76616c696420696e60008201527f70757420616d6f756e7400000000000000000000000000000000000000000000602082015250565b6000613c5f602a83613128565b9150613c6a82613c03565b604082019050919050565b60006020820190508181036000830152613c8e81613c52565b9050919050565b7f436f696e3938446f6c6c61724d696e744275726e3a20496e76616c696420746f60008201527f6b656e2061646472657373000000000000000000000000000000000000000000602082015250565b6000613cf1602b83613128565b9150613cfc82613c95565b604082019050919050565b60006020820190508181036000830152613d2081613ce4565b9050919050565b600060a082019050613d3c6000830188612b88565b613d496020830187612e86565b613d566040830186612b88565b613d636060830185612e86565b613d706080830184612b88565b9695505050505050565b6000606082019050613d8f6000830186612b88565b613d9c6020830185612b88565b613da96040830184612b88565b949350505050565b7f436f696e3938446f6c6c61724d696e744275726e3a204d696e74657220616c7260008201527f6561647920646561637469766500000000000000000000000000000000000000602082015250565b6000613e0d602d83613128565b9150613e1882613db1565b604082019050919050565b60006020820190508181036000830152613e3c81613e00565b9050919050565b7f436f696e3938446f6c6c61724d696e744275726e3a20496e76616c696420696e60008201527f707574206c656e67746873000000000000000000000000000000000000000000602082015250565b6000613e9f602b83613128565b9150613eaa82613e43565b604082019050919050565b60006020820190508181036000830152613ece81613e92565b9050919050565b7f436f696e3938446f6c6c61724d696e744275726e3a204d696e7465722069732060008201527f7a65726f20616464726573730000000000000000000000000000000000000000602082015250565b6000613f31602c83613128565b9150613f3c82613ed5565b604082019050919050565b60006020820190508181036000830152613f6081613f24565b9050919050565b7f436f696e3938446f6c6c61724d696e744275726e3a20496e76616c696420706560008201527f7263656e742076616c7565000000000000000000000000000000000000000000602082015250565b6000613fc3602b83613128565b9150613fce82613f67565b604082019050919050565b60006020820190508181036000830152613ff281613fb6565b9050919050565b600080fd5b82818337600083830152505050565b600061401983856138b0565b93507f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83111561404c5761404b613ff9565b5b60208302925061405d838584613ffe565b82840190509392505050565b600060c08201905061407e600083018d612b88565b8181036020830152614091818b8d613a5e565b905081810360408301526140a681898b61400d565b905081810360608301526140bb81878961400d565b905081810360808301526140d0818587613a5e565b90506140df60a0830184612b88565b9b9a5050505050505050505050565b7f436f696e3938446f6c6c61724d696e744275726e3a204e6f7420656e6f75676860008201527f2062616c616e636520746f206d696e74206f7220696e76616c696420616d6f7560208201527f6e74000000000000000000000000000000000000000000000000000000000000604082015250565b6000614170604283613128565b915061417b826140ee565b606082019050919050565b6000602082019050818103600083015261419f81614163565b9050919050565b600060c0820190506141bb6000830189612b88565b6141c86020830188612e86565b6141d56040830187612b88565b6141e26060830186612b88565b6141ef6080830185612b88565b6141fc60a0830184612b88565b979650505050505050565b7f436f696e3938446f6c6c61724d696e744275726e3a204c696d69742074696d6560008201527f206d757374206265206120706f736974697665206e756d62657220616e64206760208201527f726561746572207468616e207a65726f00000000000000000000000000000000604082015250565b6000614289605083613128565b915061429482614207565b606082019050919050565b600060208201905081810360008301526142b88161427c565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061431b602683613128565b9150614326826142bf565b604082019050919050565b6000602082019050818103600083015261434a8161430e565b9050919050565b600061435c82612a87565b915061436783612a87565b92508282101561437a576143796135cf565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006143bf82612a87565b91506143ca83612a87565b9250826143da576143d9614385565b5b828204905092915050565b7f436f696e3938446f6c6c61724d696e744275726e3a20416d6f756e74206d757360008201527f74206265206c657373207468616e20746f74616c20737570706c7920616e642060208201527f746f74616c207065722064617900000000000000000000000000000000000000604082015250565b6000614467604d83613128565b9150614472826143e5565b606082019050919050565b600060208201905081810360008301526144968161445a565b9050919050565b60006144a882612a87565b91506144b383612a87565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156144ec576144eb6135cf565b5b828202905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000614553602183613128565b915061455e826144f7565b604082019050919050565b6000602082019050818103600083015261458281614546565b9050919050565b600060608201905061459e6000830186612e86565b6145ab6020830185612e86565b6145b86040830184612b88565b949350505050565b60006145cb82612a87565b91506145d683612a87565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561460b5761460a6135cf565b5b828201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600061464c601b83613128565b915061465782614616565b602082019050919050565b6000602082019050818103600083015261467b8161463f565b9050919050565b600081519050919050565b60005b838110156146ab578082015181840152602081019050614690565b838111156146ba576000848401525b50505050565b6000601f19601f8301169050919050565b60006146dc82614682565b6146e68185613128565b93506146f681856020860161468d565b6146ff816146c0565b840191505092915050565b6000602082019050818103600083015261472481846146d1565b905092915050565b600081519050919050565b600081905092915050565b600061474d8261472c565b6147578185614737565b935061476781856020860161468d565b80840191505092915050565b600061477f8284614742565b915081905092915050565b7f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564600082015250565b60006147c0602083613128565b91506147cb8261478a565b602082019050919050565b600060208201905081810360008301526147ef816147b3565b9050919050565b60008151905061480581612cc6565b92915050565b60006020828403121561482157614820612a7d565b5b600061482f848285016147f6565b91505092915050565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b6000614894602a83613128565b915061489f82614838565b604082019050919050565b600060208201905081810360008301526148c381614887565b905091905056fea26469706673582212208d9a7920163d525c972d5f92eff3cf6a579a39d61858e158fb461167bfe57e2b64736f6c634300080d0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000c285b7e09a4584d027e5bc36571785b515898246
-----Decoded View---------------
Arg [0] : _cusd (address): 0xC285B7E09A4584D027E5BC36571785B515898246
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000c285b7e09a4584d027e5bc36571785b515898246
Deployed Bytecode Sourcemap
22244:20199:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28159:388;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28655:394;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27231:391;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;39558:2173;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41854:586;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22390:23;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31782:1629;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22609:24;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25151:51;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;1843:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34212:677;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29101:2631;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33473:677;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37364:1754;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25255:51;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;27749:303;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2298:238;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22360:23;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28159:388;2074:12;:10;:12::i;:::-;2063:23;;:7;:5;:7::i;:::-;:23;;;2055:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28279:3:::1;26708:12;:17;26721:3;26708:17;;;;;;;;;;;:26;;;;;;;;;;;;:63;;;;;26770:1;26738:12;:17;26751:3;26738:17;;;;;;;;;;;:29;;;:33;26708:63;26686:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;28336:1:::2;28322:10;:15;;28300:138;;;;;;;;;;;;:::i;:::-;;;;;;;;;28479:10;28449:12;:17;28462:3;28449:17;;;;;;;;;;;:27;;:40;;;;28507:32;28523:3;28528:10;28507:32;;;;;;;:::i;:::-;;;;;;;;2134:1:::1;28159:388:::0;;:::o;28655:394::-;2074:12;:10;:12::i;:::-;2063:23;;:7;:5;:7::i;:::-;:23;;;2055:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28781:3:::1;26977:12;:17;26990:3;26977:17;;;;;;;;;;;:26;;;;;;;;;;;;:63;;;;;27039:1;27007:12;:17;27020:3;27007:17;;;;;;;;;;;:29;;;:33;26977:63;26955:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;28838:1:::2;28824:10;:15;;28802:138;;;;;;;;;;;;:::i;:::-;;;;;;;;;28981:10;28951:12;:17;28964:3;28951:17;;;;;;;;;;;:27;;:40;;;;29009:32;29025:3;29030:10;29009:32;;;;;;;:::i;:::-;;;;;;;;2134:1:::1;28655:394:::0;;:::o;27231:391::-;27322:7;27331;27381:1;27360:23;;:9;:23;;;27356:49;;27393:7;27402:2;27385:20;;;;;;27356:49;27416:16;27457:9;27435:41;;;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27416:62;;;;27492:13;27537:9;27515:62;;;:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27489:90;;;;;;27598:5;27605:8;27590:24;;;;;;27231:391;;;;:::o;39558:2173::-;39625:3;26708:12;:17;26721:3;26708:17;;;;;;;;;;;:26;;;;;;;;;;;;:63;;;;;26770:1;26738:12;:17;26751:3;26738:17;;;;;;;;;;;:29;;;:33;26708:63;26686:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;39672:1:::1;39663:6;:10;39641:136;;;;;;;;;;;;:::i;:::-;;;;;;;;;39788:26;39817:12;:17;39830:3;39817:17;;;;;;;;;;;39788:46;;39847:31;39881:32;39898:6;39906;39881:16;:32::i;:::-;39847:66;;39926:33;39976:6;:12;;:19;;;;39962:34;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39926:70;;40014:9;40009:1005;40033:6;:12;;:19;;;;40029:1;:23;40009:1005;;;40074:21;40098:6;:15;;40114:1;40098:18;;;;;;;;:::i;:::-;;;;;;;;;;40074:42;;40185:13;40200:21:::0;40225:67:::1;40258:6;:16;;40275:1;40258:19;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;40225:14;:67::i;:::-;40184:108;;;;40309:16;40328:130;40444:13;40440:2;:17;;;;:::i;:::-;40328:89;40403:13;40399:2;:17;;;;:::i;:::-;40328:48;40357:6;:15;;40373:1;40357:18;;;;;;;;:::i;:::-;;;;;;;;;;40328:6;:28;;:48;;;;:::i;:::-;:70;;:89;;;;:::i;:::-;:111;;:130;;;;:::i;:::-;40309:149;;40475:20;40498:105;40589:13;;40498:68;40560:5;40498:39;40529:7;;40498:8;:30;;:39;;;;:::i;:::-;:61;;:68;;;;:::i;:::-;:90;;:105;;;;:::i;:::-;40475:128;;40643:1;40628:12;:16;40620:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;40806:147;40865:10;40902:4;40926:12;40813:6;:12;;40826:1;40813:15;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;40806:40;;;;:147;;;;;;:::i;:::-;40990:12;40968:16;40985:1;40968:19;;;;;;;;:::i;:::-;;;;;;;:34;;;::::0;::::1;40059:955;;;;;40054:3;;;;;:::i;:::-;;;;40009:1005;;;;41026:17;41046:41;41079:7;;41046:28;41057:6;:16;;;41046:6;:10;;:28;;;;:::i;:::-;:32;;:41;;;;:::i;:::-;41026:61;;41162:36;41188:9;41162:6;:21;;;:25;;:36;;;;:::i;:::-;41138:6;:21;;:60;;;;41272:21;41283:9;41272:6;:10;;:21;;;;:::i;:::-;41263:30;;41337:1;41328:6;:10;41306:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;41498:10;;;;;;;;;;;:15;;;41514:10;41526:6;41498:35;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;41551:172;41570:3;41588:10;41613:16;41644:6;41665:9;41689:23;41551:172;;;;;;;;;;;:::i;:::-;;;;;;;;39630:2101;;;;39558:2173:::0;;;:::o;41854:586::-;2074:12;:10;:12::i;:::-;2063:23;;:7;:5;:7::i;:::-;:23;;;2055:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41942:9:::1;41937:459;41961:6;;:13;;41957:1;:17;41937:459;;;42021:1;42000:23;;:6;;42007:1;42000:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;:23;;::::0;41996:389:::1;;42052:10;42044:28;;:51;42073:21;42044:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;41996:389;;;42136:12;42158:6;;42165:1;42158:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;42136:32;;42189:20;42212:5;:15;;;42236:4;42212:30;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42189:53;;42280:1;42265:12;:16;42261:109;;;42306:44;42325:10;42337:12;42306:5;:18;;;;:44;;;;;:::i;:::-;42261:109;42117:268;;41996:389;41976:3;;;;;:::i;:::-;;;;41937:459;;;;42411:21;42425:6;;42411:21;;;;;;;:::i;:::-;;;;;;;;41854:586:::0;;:::o;22390:23::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;31782:1629::-;2074:12;:10;:12::i;:::-;2063:23;;:7;:5;:7::i;:::-;:23;;;2055:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32036:1:::1;32018:20;;:6;:20;;::::0;31996:114:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;32123:26;32152:12;:17;32165:3;32152:17;;;;;;;;;;;32123:46;;32255:9;32250:1154;;32307:6;:15;;;;;;;;;;;;32281:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;32436:5;32418:6;:15;;;:23;;;;;;;;;;;;;;;;;;32250:1154;;;32514:1;32500:10;:15;;32474:119;;;;;;;;;;;;:::i;:::-;;;;;;;;;32669:17;32754:6;32742:19;32729:32;;32828:1;32816:9;:13;32790:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;33009:1;32985:26;;:6;:12;;;;;;;;;;;;:26;;::::0;32981:83:::1;;33032:6;33044:3;33032:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32981:83;33140:4;33122:6;:15;;;:22;;;;;;;;;;;;;;;;;;33174:6;33159;:12;;;:21;;;;;;;;;;;;;;;;;;33213:9;33195:6;:15;;:27;;;;33256:10;33237:6;:16;;;:29;;;;;;;;;;;;;;;;;;33300:10;33281:6;:16;;:29;;;;33332:60;33345:3;33350:6;33358:9;33369:10;33381;33332:60;;;;;;;;;;:::i;:::-;;;;;;;;32459:945;32250:1154;31985:1426;31782:1629:::0;;;;;;:::o;22609:24::-;;;;;;;;;;;;;:::o;25151:51::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1843:87::-;1889:7;1916:6;;;;;;;;;;;1909:13;;1843:87;:::o;34212:677::-;2074:12;:10;:12::i;:::-;2063:23;;:7;:5;:7::i;:::-;:23;;;2055:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34364:26:::1;34393:12;:17;34406:3;34393:17;;;;;;;;;;;34364:46;;34429:6;:15;;;;;;;;;;;;34421:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34539:1;34524:12;:16;:59;;;;;34582:1;34561:18;:22;34524:59;:114;;;;;34626:12;34604:18;:34;;34524:114;34502:206;;;;;;;;;;;;:::i;:::-;;;;;;;;;34740:12;34719:6;:18;;:33;;;;34790:18;34763:6;:24;;:45;;;;34824:57;34843:3;34848:12;34862:18;34824:57;;;;;;;;:::i;:::-;;;;;;;;34353:536;34212:677:::0;;;:::o;29101:2631::-;2074:12;:10;:12::i;:::-;2063:23;;:7;:5;:7::i;:::-;:23;;;2055:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29387:16:::1;29406:6;;:13;;29387:32;;29430:26;29459:12;:17;29472:3;29459:17;;;;;;;;;;;29430:46;;29560:9;29555:2170;;29612:6;:15;;;;;;;;;;;;29586:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;29741:5;29723:6;:15;;;:23;;;;;;;;;;;;;;;;;;29555:2170;;;29816:1;29805:8;:12;:65;;;;;29854:9;;:16;;29842:8;:28;29805:65;:118;;;;;29907:9;;:16;;29895:8;:28;29805:118;:172;;;;;29960:10;;:17;;29948:8;:29;29805:172;29779:277;;;;;;;;;;;;:::i;:::-;;;;;;;;;30113:1;30099:10;:15;;30073:119;;;;;;;;;;;;:::i;:::-;;;;;;;;;30209:20;30314:9:::0;30309:608:::1;30333:8;30329:1;:12;30309:608;;;30367:13;30383:6;;30390:1;30383:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;30367:25;;30428:30;30445:9;;30455:1;30445:12;;;;;;;:::i;:::-;;;;;;;;30428;:16;;:30;;;;:::i;:::-;30413:45;;30479:17;30572:5;30560:18;30547:31;;30657:1;30645:9;:13;30615:130;;;;;;;;;;;;:::i;:::-;;;;;;;;;30811:1;30794:19;;:5;:19;;::::0;30764:137:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;30348:569;;30343:3;;;;;:::i;:::-;;;;30309:608;;;;30975:7;;30959:12;:23;30933:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;31161:1;31138:6;:12;;:19;;;;:24:::0;31134:81:::1;;31183:6;31195:3;31183:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31134:81;31291:4;31273:6;:15;;;:22;;;;;;;;;;;;;;;;;;31325:6;;31310;:12;;:21;;;;;;;:::i;:::-;;31364:9;;31346:6;:15;;:27;;;;;;;:::i;:::-;;31406:9;;31388:6;:15;;:27;;;;;;;:::i;:::-;;31449:10;;31430:6;:16;;:29;;;;;;;:::i;:::-;;31493:10;31474:6;:16;;:29;;;;31525:188;31556:3;31578:6;;31603:9;;31631;;31659:10;;31688;31525:188;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;29764:1961;29555:2170;29376:2356;;29101:2631:::0;;;;;;;;;;;:::o;33473:677::-;2074:12;:10;:12::i;:::-;2063:23;;:7;:5;:7::i;:::-;:23;;;2055:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33625:26:::1;33654:12;:17;33667:3;33654:17;;;;;;;;;;;33625:46;;33690:6;:15;;;;;;;;;;;;33682:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33800:1;33785:12;:16;:59;;;;;33843:1;33822:18;:22;33785:59;:114;;;;;33887:12;33865:18;:34;;33785:114;33763:206;;;;;;;;;;;;:::i;:::-;;;;;;;;;34001:12;33980:6;:18;;:33;;;;34051:18;34024:6;:24;;:45;;;;34085:57;34104:3;34109:12;34123:18;34085:57;;;;;;;;:::i;:::-;;;;;;;;33614:536;33473:677:::0;;;:::o;37364:1754::-;37433:3;26977:12;:17;26990:3;26977:17;;;;;;;;;;;:26;;;;;;;;;;;;:63;;;;;27039:1;27007:12;:17;27020:3;27007:17;;;;;;;;;;;:29;;;:33;26977:63;26955:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;37480:1:::1;37471:6;:10;37449:136;;;;;;;;;;;;:::i;:::-;;;;;;;;;37596:26;37625:12;:17;37638:3;37625:17;;;;;;;;;;;37596:46;;37656:13;37671:21:::0;37696:56:::1;37725:6;:16;;;;;;;;;;;;37696:14;:56::i;:::-;37655:97;;;;37765:20;37788:140;37912:6;:15;;;37908:2;:19;;;;:::i;:::-;37788:101;37875:13;37871:2;:17;;;;:::i;:::-;37788:64;37838:13;;37788:31;37813:5;37788:6;:24;;:31;;;;:::i;:::-;:49;;:64;;;;:::i;:::-;:82;;:101;;;;:::i;:::-;:119;;:140;;;;:::i;:::-;37765:163;;37964:1;37949:12;:16;37941:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;38059:31;38093:75;38124:6;38145:12;38093:16;:75::i;:::-;38059:109;;38241:68;38269:10;38289:4;38296:12;38241:10;;;;;;;;;;;:27;;;;:68;;;;;;:::i;:::-;38320:10;;;;;;;;;;;:15;;;38336:12;38320:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;38402:17;38422:41;38455:7;;38422:28;38433:6;:16;;;38422:6;:10;;:28;;;;:::i;:::-;:32;;:41;;;;:::i;:::-;38402:61;;38498:36;38524:9;38498:6;:21;;;:25;;:36;;;;:::i;:::-;38474:6;:21;;:60;;;;38547:16;38573:6;:12;;;;;;;;;;;;38547:39;;38597:20;38620:21;38631:9;38620:6;:10;;:21;;;;:::i;:::-;38597:44;;38691:1;38676:12;:16;:87;;;;;38751:12;38713:9;:19;;;38741:4;38713:34;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:50;;38676:87;38654:203;;;;;;;;;;;;:::i;:::-;;;;;;;;;38870:48;38893:10;38905:12;38870:9;:22;;;;:48;;;;;:::i;:::-;38936:174;38955:3;38973:10;38998:12;39025;39052:9;39076:23;38936:174;;;;;;;;;;;:::i;:::-;;;;;;;;37438:1680;;;;;;;;37364:1754:::0;;;:::o;25255:51::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;27749:303::-;2074:12;:10;:12::i;:::-;2063:23;;:7;:5;:7::i;:::-;:23;;;2055:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27856:1:::1;27843:10;:14;27821:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;27989:10;27976;:23;;;;28017:27;28033:10;28017:27;;;;;;:::i;:::-;;;;;;;;27749:303:::0;:::o;2298:238::-;2074:12;:10;:12::i;:::-;2063:23;;:7;:5;:7::i;:::-;:23;;;2055:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2421:1:::1;2401:22;;:8;:22;;::::0;2379:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;2500:28;2519:8;2500:18;:28::i;:::-;2298:238:::0;:::o;22360:23::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;603:98::-;656:7;683:10;676:17;;603:98;:::o;34968:1012::-;35074:7;35099:17;35166:2;35161;35138:6;:19;;;35120:15;:37;;;;:::i;:::-;35119:44;;;;:::i;:::-;:49;;;;:::i;:::-;35099:69;;35179:15;35210:10;;35197:9;:23;;35179:41;;35231:26;35260:30;35283:6;35260;:18;;;:22;;:30;;;;:::i;:::-;35231:59;;35301:31;35335:10;:35;;35352:6;:18;;;35335:35;;;35348:1;35335:35;35301:69;;35407:35;35435:6;35407:23;:27;;:35;;;;:::i;:::-;35381:61;;35504:6;:24;;;35477:23;:51;;:112;;;;;35571:6;:18;;;35549;:40;;35477:112;35455:239;;;;;;;;;;;;:::i;:::-;;;;;;;;;35768:18;35747:6;:18;;:39;;;;35818:23;35797:6;:18;;:44;;;;35856:10;35852:80;;;35905:15;35883:6;:19;;:37;;;;35852:80;35949:23;35942:30;;;;;;34968:1012;;;;:::o;5203:471::-;5261:7;5511:1;5506;:6;5502:47;;5536:1;5529:8;;;;5502:47;5561:9;5577:1;5573;:5;;;;:::i;:::-;5561:17;;5606:1;5601;5597;:5;;;;:::i;:::-;:10;5589:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;5665:1;5658:8;;;5203:471;;;;;:::o;6150:132::-;6208:7;6235:39;6239:1;6242;6235:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;6228:46;;6150:132;;;;:::o;19243:285::-;19387:133;19421:5;19464:27;;;19493:4;19499:2;19503:5;19441:68;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19387:19;:133::i;:::-;19243:285;;;;:::o;3815:181::-;3873:7;3893:9;3909:1;3905;:5;;;;:::i;:::-;3893:17;;3934:1;3929;:6;;3921:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;3987:1;3980:8;;;3815:181;;;;:::o;4279:136::-;4337:7;4364:43;4368:1;4371;4364:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;4357:50;;4279:136;;;;:::o;18987:248::-;19104:123;19138:5;19181:23;;;19206:2;19210:5;19158:58;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19104:19;:123::i;:::-;18987:248;;;:::o;36059:1014::-;36165:7;36190:17;36257:2;36252;36229:6;:19;;;36211:15;:37;;;;:::i;:::-;36210:44;;;;:::i;:::-;:49;;;;:::i;:::-;36190:69;;36270:15;36301:10;;36288:9;:23;;36270:41;;36324:26;36353:30;36376:6;36353;:18;;;:22;;:30;;;;:::i;:::-;36324:59;;36394:31;36428:10;:35;;36445:6;:18;;;36428:35;;;36441:1;36428:35;36394:69;;36500:35;36528:6;36500:23;:27;;:35;;;;:::i;:::-;36474:61;;36597:6;:24;;;36570:23;:51;;:112;;;;;36664:6;:18;;;36642;:40;;36570:112;36548:239;;;;;;;;;;;;:::i;:::-;;;;;;;;;36861:18;36840:6;:18;;:39;;;;36911:23;36890:6;:18;;:44;;;;36949:10;36945:80;;;36998:15;36976:6;:19;;:37;;;;36945:80;37042:23;37035:30;;;;;;36059:1014;;;;:::o;2696:191::-;2770:16;2789:6;;;;;;;;;;;2770:25;;2815:8;2806:6;;:17;;;;;;;;;;;;;;;;;;2870:8;2839:40;;2860:8;2839:40;;;;;;;;;;;;2759:128;2696:191;:::o;6778:312::-;6898:7;6930:1;6926;:5;6933:12;6918:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;6957:9;6973:1;6969;:5;;;;:::i;:::-;6957:17;;7081:1;7074:8;;;6778:312;;;;;:::o;20634:1095::-;21294:12;21308:23;21343:5;21335:19;;21355:4;21335:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21293:67;;;;21379:7;21371:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;21460:1;21440:10;:17;:21;21436:286;;;21613:10;21602:30;;;;;;;;;;;;:::i;:::-;21576:134;;;;;;;;;;;;:::i;:::-;;;;;;;;;21436:286;20704:1025;;20634:1095;;:::o;4718:226::-;4838:7;4871:1;4866;:6;;4874:12;4858:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;4898:9;4914:1;4910;:5;;;;:::i;:::-;4898:17;;4935:1;4928:8;;;4718:226;;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;88:117:1:-;197:1;194;187:12;211:117;320:1;317;310:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:474::-;758:6;766;815:2;803:9;794:7;790:23;786:32;783:119;;;821:79;;:::i;:::-;783:119;941:1;966:53;1011:7;1002:6;991:9;987:22;966:53;:::i;:::-;956:63;;912:117;1068:2;1094:53;1139:7;1130:6;1119:9;1115:22;1094:53;:::i;:::-;1084:63;;1039:118;690:474;;;;;:::o;1170:126::-;1207:7;1247:42;1240:5;1236:54;1225:65;;1170:126;;;:::o;1302:96::-;1339:7;1368:24;1386:5;1368:24;:::i;:::-;1357:35;;1302:96;;;:::o;1404:122::-;1477:24;1495:5;1477:24;:::i;:::-;1470:5;1467:35;1457:63;;1516:1;1513;1506:12;1457:63;1404:122;:::o;1532:139::-;1578:5;1616:6;1603:20;1594:29;;1632:33;1659:5;1632:33;:::i;:::-;1532:139;;;;:::o;1677:329::-;1736:6;1785:2;1773:9;1764:7;1760:23;1756:32;1753:119;;;1791:79;;:::i;:::-;1753:119;1911:1;1936:53;1981:7;1972:6;1961:9;1957:22;1936:53;:::i;:::-;1926:63;;1882:117;1677:329;;;;:::o;2012:118::-;2099:24;2117:5;2099:24;:::i;:::-;2094:3;2087:37;2012:118;;:::o;2136:332::-;2257:4;2295:2;2284:9;2280:18;2272:26;;2308:71;2376:1;2365:9;2361:17;2352:6;2308:71;:::i;:::-;2389:72;2457:2;2446:9;2442:18;2433:6;2389:72;:::i;:::-;2136:332;;;;;:::o;2474:117::-;2583:1;2580;2573:12;2597:117;2706:1;2703;2696:12;2720:117;2829:1;2826;2819:12;2860:568;2933:8;2943:6;2993:3;2986:4;2978:6;2974:17;2970:27;2960:122;;3001:79;;:::i;:::-;2960:122;3114:6;3101:20;3091:30;;3144:18;3136:6;3133:30;3130:117;;;3166:79;;:::i;:::-;3130:117;3280:4;3272:6;3268:17;3256:29;;3334:3;3326:4;3318:6;3314:17;3304:8;3300:32;3297:41;3294:128;;;3341:79;;:::i;:::-;3294:128;2860:568;;;;;:::o;3434:559::-;3520:6;3528;3577:2;3565:9;3556:7;3552:23;3548:32;3545:119;;;3583:79;;:::i;:::-;3545:119;3731:1;3720:9;3716:17;3703:31;3761:18;3753:6;3750:30;3747:117;;;3783:79;;:::i;:::-;3747:117;3896:80;3968:7;3959:6;3948:9;3944:22;3896:80;:::i;:::-;3878:98;;;;3674:312;3434:559;;;;;:::o;3999:329::-;4058:6;4107:2;4095:9;4086:7;4082:23;4078:32;4075:119;;;4113:79;;:::i;:::-;4075:119;4233:1;4258:53;4303:7;4294:6;4283:9;4279:22;4258:53;:::i;:::-;4248:63;;4204:117;3999:329;;;;:::o;4334:222::-;4427:4;4465:2;4454:9;4450:18;4442:26;;4478:71;4546:1;4535:9;4531:17;4522:6;4478:71;:::i;:::-;4334:222;;;;:::o;4562:90::-;4596:7;4639:5;4632:13;4625:21;4614:32;;4562:90;;;:::o;4658:116::-;4728:21;4743:5;4728:21;:::i;:::-;4721:5;4718:32;4708:60;;4764:1;4761;4754:12;4708:60;4658:116;:::o;4780:133::-;4823:5;4861:6;4848:20;4839:29;;4877:30;4901:5;4877:30;:::i;:::-;4780:133;;;;:::o;4919:1051::-;5020:6;5028;5036;5044;5052;5060;5109:3;5097:9;5088:7;5084:23;5080:33;5077:120;;;5116:79;;:::i;:::-;5077:120;5236:1;5261:53;5306:7;5297:6;5286:9;5282:22;5261:53;:::i;:::-;5251:63;;5207:117;5363:2;5389:50;5431:7;5422:6;5411:9;5407:22;5389:50;:::i;:::-;5379:60;;5334:115;5488:2;5514:53;5559:7;5550:6;5539:9;5535:22;5514:53;:::i;:::-;5504:63;;5459:118;5616:2;5642:53;5687:7;5678:6;5667:9;5663:22;5642:53;:::i;:::-;5632:63;;5587:118;5744:3;5771:53;5816:7;5807:6;5796:9;5792:22;5771:53;:::i;:::-;5761:63;;5715:119;5873:3;5900:53;5945:7;5936:6;5925:9;5921:22;5900:53;:::i;:::-;5890:63;;5844:119;4919:1051;;;;;;;;:::o;5976:60::-;6004:3;6025:5;6018:12;;5976:60;;;:::o;6042:142::-;6092:9;6125:53;6143:34;6152:24;6170:5;6152:24;:::i;:::-;6143:34;:::i;:::-;6125:53;:::i;:::-;6112:66;;6042:142;;;:::o;6190:126::-;6240:9;6273:37;6304:5;6273:37;:::i;:::-;6260:50;;6190:126;;;:::o;6322:140::-;6386:9;6419:37;6450:5;6419:37;:::i;:::-;6406:50;;6322:140;;;:::o;6468:159::-;6569:51;6614:5;6569:51;:::i;:::-;6564:3;6557:64;6468:159;;:::o;6633:250::-;6740:4;6778:2;6767:9;6763:18;6755:26;;6791:85;6873:1;6862:9;6858:17;6849:6;6791:85;:::i;:::-;6633:250;;;;:::o;6889:109::-;6970:21;6985:5;6970:21;:::i;:::-;6965:3;6958:34;6889:109;;:::o;7004:985::-;7287:4;7325:3;7314:9;7310:19;7302:27;;7339:65;7401:1;7390:9;7386:17;7377:6;7339:65;:::i;:::-;7414:72;7482:2;7471:9;7467:18;7458:6;7414:72;:::i;:::-;7496;7564:2;7553:9;7549:18;7540:6;7496:72;:::i;:::-;7578;7646:2;7635:9;7631:18;7622:6;7578:72;:::i;:::-;7660:73;7728:3;7717:9;7713:19;7704:6;7660:73;:::i;:::-;7743;7811:3;7800:9;7796:19;7787:6;7743:73;:::i;:::-;7826;7894:3;7883:9;7879:19;7870:6;7826:73;:::i;:::-;7909;7977:3;7966:9;7962:19;7953:6;7909:73;:::i;:::-;7004:985;;;;;;;;;;;:::o;7995:118::-;8082:24;8100:5;8082:24;:::i;:::-;8077:3;8070:37;7995:118;;:::o;8119:222::-;8212:4;8250:2;8239:9;8235:18;8227:26;;8263:71;8331:1;8320:9;8316:17;8307:6;8263:71;:::i;:::-;8119:222;;;;:::o;8347:619::-;8424:6;8432;8440;8489:2;8477:9;8468:7;8464:23;8460:32;8457:119;;;8495:79;;:::i;:::-;8457:119;8615:1;8640:53;8685:7;8676:6;8665:9;8661:22;8640:53;:::i;:::-;8630:63;;8586:117;8742:2;8768:53;8813:7;8804:6;8793:9;8789:22;8768:53;:::i;:::-;8758:63;;8713:118;8870:2;8896:53;8941:7;8932:6;8921:9;8917:22;8896:53;:::i;:::-;8886:63;;8841:118;8347:619;;;;;:::o;8989:568::-;9062:8;9072:6;9122:3;9115:4;9107:6;9103:17;9099:27;9089:122;;9130:79;;:::i;:::-;9089:122;9243:6;9230:20;9220:30;;9273:18;9265:6;9262:30;9259:117;;;9295:79;;:::i;:::-;9259:117;9409:4;9401:6;9397:17;9385:29;;9463:3;9455:4;9447:6;9443:17;9433:8;9429:32;9426:41;9423:128;;;9470:79;;:::i;:::-;9423:128;8989:568;;;;;:::o;9563:2119::-;9781:6;9789;9797;9805;9813;9821;9829;9837;9845;9853;9861:7;9911:3;9899:9;9890:7;9886:23;9882:33;9879:120;;;9918:79;;:::i;:::-;9879:120;10038:1;10063:53;10108:7;10099:6;10088:9;10084:22;10063:53;:::i;:::-;10053:63;;10009:117;10165:2;10191:50;10233:7;10224:6;10213:9;10209:22;10191:50;:::i;:::-;10181:60;;10136:115;10318:2;10307:9;10303:18;10290:32;10349:18;10341:6;10338:30;10335:117;;;10371:79;;:::i;:::-;10335:117;10484:80;10556:7;10547:6;10536:9;10532:22;10484:80;:::i;:::-;10466:98;;;;10261:313;10641:2;10630:9;10626:18;10613:32;10672:18;10664:6;10661:30;10658:117;;;10694:79;;:::i;:::-;10658:117;10807:80;10879:7;10870:6;10859:9;10855:22;10807:80;:::i;:::-;10789:98;;;;10584:313;10964:3;10953:9;10949:19;10936:33;10996:18;10988:6;10985:30;10982:117;;;11018:79;;:::i;:::-;10982:117;11131:80;11203:7;11194:6;11183:9;11179:22;11131:80;:::i;:::-;11113:98;;;;10907:314;11288:3;11277:9;11273:19;11260:33;11320:18;11312:6;11309:30;11306:117;;;11342:79;;:::i;:::-;11306:117;11455:80;11527:7;11518:6;11507:9;11503:22;11455:80;:::i;:::-;11437:98;;;;11231:314;11584:3;11612:53;11657:7;11648:6;11637:9;11633:22;11612:53;:::i;:::-;11601:64;;11555:120;9563:2119;;;;;;;;;;;;;;:::o;11688:1320::-;12056:4;12094:3;12083:9;12079:19;12071:27;;12108:65;12170:1;12159:9;12155:17;12146:6;12108:65;:::i;:::-;12183:72;12251:2;12240:9;12236:18;12227:6;12183:72;:::i;:::-;12265;12333:2;12322:9;12318:18;12309:6;12265:72;:::i;:::-;12347;12415:2;12404:9;12400:18;12391:6;12347:72;:::i;:::-;12429:73;12497:3;12486:9;12482:19;12473:6;12429:73;:::i;:::-;12512;12580:3;12569:9;12565:19;12556:6;12512:73;:::i;:::-;12595;12663:3;12652:9;12648:19;12639:6;12595:73;:::i;:::-;12678;12746:3;12735:9;12731:19;12722:6;12678:73;:::i;:::-;12761;12829:3;12818:9;12814:19;12805:6;12761:73;:::i;:::-;12844;12912:3;12901:9;12897:19;12888:6;12844:73;:::i;:::-;12927:74;12996:3;12985:9;12981:19;12971:7;12927:74;:::i;:::-;11688:1320;;;;;;;;;;;;;;:::o;13014:169::-;13098:11;13132:6;13127:3;13120:19;13172:4;13167:3;13163:14;13148:29;;13014:169;;;;:::o;13189:182::-;13329:34;13325:1;13317:6;13313:14;13306:58;13189:182;:::o;13377:366::-;13519:3;13540:67;13604:2;13599:3;13540:67;:::i;:::-;13533:74;;13616:93;13705:3;13616:93;:::i;:::-;13734:2;13729:3;13725:12;13718:19;;13377:366;;;:::o;13749:419::-;13915:4;13953:2;13942:9;13938:18;13930:26;;14002:9;13996:4;13992:20;13988:1;13977:9;13973:17;13966:47;14030:131;14156:4;14030:131;:::i;:::-;14022:139;;13749:419;;;:::o;14174:227::-;14314:34;14310:1;14302:6;14298:14;14291:58;14383:10;14378:2;14370:6;14366:15;14359:35;14174:227;:::o;14407:366::-;14549:3;14570:67;14634:2;14629:3;14570:67;:::i;:::-;14563:74;;14646:93;14735:3;14646:93;:::i;:::-;14764:2;14759:3;14755:12;14748:19;;14407:366;;;:::o;14779:419::-;14945:4;14983:2;14972:9;14968:18;14960:26;;15032:9;15026:4;15022:20;15018:1;15007:9;15003:17;14996:47;15060:131;15186:4;15060:131;:::i;:::-;15052:139;;14779:419;;;:::o;15204:297::-;15344:34;15340:1;15332:6;15328:14;15321:58;15413:34;15408:2;15400:6;15396:15;15389:59;15482:11;15477:2;15469:6;15465:15;15458:36;15204:297;:::o;15507:366::-;15649:3;15670:67;15734:2;15729:3;15670:67;:::i;:::-;15663:74;;15746:93;15835:3;15746:93;:::i;:::-;15864:2;15859:3;15855:12;15848:19;;15507:366;;;:::o;15879:419::-;16045:4;16083:2;16072:9;16068:18;16060:26;;16132:9;16126:4;16122:20;16118:1;16107:9;16103:17;16096:47;16160:131;16286:4;16160:131;:::i;:::-;16152:139;;15879:419;;;:::o;16304:227::-;16444:34;16440:1;16432:6;16428:14;16421:58;16513:10;16508:2;16500:6;16496:15;16489:35;16304:227;:::o;16537:366::-;16679:3;16700:67;16764:2;16759:3;16700:67;:::i;:::-;16693:74;;16776:93;16865:3;16776:93;:::i;:::-;16894:2;16889:3;16885:12;16878:19;;16537:366;;;:::o;16909:419::-;17075:4;17113:2;17102:9;17098:18;17090:26;;17162:9;17156:4;17152:20;17148:1;17137:9;17133:17;17126:47;17190:131;17316:4;17190:131;:::i;:::-;17182:139;;16909:419;;;:::o;17334:86::-;17369:7;17409:4;17402:5;17398:16;17387:27;;17334:86;;;:::o;17426:118::-;17497:22;17513:5;17497:22;:::i;:::-;17490:5;17487:33;17477:61;;17534:1;17531;17524:12;17477:61;17426:118;:::o;17550:139::-;17605:5;17636:6;17630:13;17621:22;;17652:31;17677:5;17652:31;:::i;:::-;17550:139;;;;:::o;17695:347::-;17763:6;17812:2;17800:9;17791:7;17787:23;17783:32;17780:119;;;17818:79;;:::i;:::-;17780:119;17938:1;17963:62;18017:7;18008:6;17997:9;17993:22;17963:62;:::i;:::-;17953:72;;17909:126;17695:347;;;;:::o;18048:105::-;18084:7;18124:22;18117:5;18113:34;18102:45;;18048:105;;;:::o;18159:120::-;18231:23;18248:5;18231:23;:::i;:::-;18224:5;18221:34;18211:62;;18269:1;18266;18259:12;18211:62;18159:120;:::o;18285:141::-;18341:5;18372:6;18366:13;18357:22;;18388:32;18414:5;18388:32;:::i;:::-;18285:141;;;;:::o;18432:143::-;18489:5;18520:6;18514:13;18505:22;;18536:33;18563:5;18536:33;:::i;:::-;18432:143;;;;:::o;18581:973::-;18685:6;18693;18701;18709;18717;18766:3;18754:9;18745:7;18741:23;18737:33;18734:120;;;18773:79;;:::i;:::-;18734:120;18893:1;18918:63;18973:7;18964:6;18953:9;18949:22;18918:63;:::i;:::-;18908:73;;18864:127;19030:2;19056:64;19112:7;19103:6;19092:9;19088:22;19056:64;:::i;:::-;19046:74;;19001:129;19169:2;19195:64;19251:7;19242:6;19231:9;19227:22;19195:64;:::i;:::-;19185:74;;19140:129;19308:2;19334:64;19390:7;19381:6;19370:9;19366:22;19334:64;:::i;:::-;19324:74;;19279:129;19447:3;19474:63;19529:7;19520:6;19509:9;19505:22;19474:63;:::i;:::-;19464:73;;19418:129;18581:973;;;;;;;;:::o;19560:300::-;19700:34;19696:1;19688:6;19684:14;19677:58;19769:34;19764:2;19756:6;19752:15;19745:59;19838:14;19833:2;19825:6;19821:15;19814:39;19560:300;:::o;19866:366::-;20008:3;20029:67;20093:2;20088:3;20029:67;:::i;:::-;20022:74;;20105:93;20194:3;20105:93;:::i;:::-;20223:2;20218:3;20214:12;20207:19;;19866:366;;;:::o;20238:419::-;20404:4;20442:2;20431:9;20427:18;20419:26;;20491:9;20485:4;20481:20;20477:1;20466:9;20462:17;20455:47;20519:131;20645:4;20519:131;:::i;:::-;20511:139;;20238:419;;;:::o;20663:180::-;20711:77;20708:1;20701:88;20808:4;20805:1;20798:15;20832:4;20829:1;20822:15;20849:180;20897:77;20894:1;20887:88;20994:4;20991:1;20984:15;21018:4;21015:1;21008:15;21035:180;21083:77;21080:1;21073:88;21180:4;21177:1;21170:15;21204:4;21201:1;21194:15;21221:102;21263:8;21310:5;21307:1;21303:13;21282:34;;21221:102;;;:::o;21329:848::-;21390:5;21397:4;21421:6;21412:15;;21445:5;21436:14;;21459:712;21480:1;21470:8;21467:15;21459:712;;;21575:4;21570:3;21566:14;21560:4;21557:24;21554:50;;;21584:18;;:::i;:::-;21554:50;21634:1;21624:8;21620:16;21617:451;;;22049:4;22042:5;22038:16;22029:25;;21617:451;22099:4;22093;22089:15;22081:23;;22129:32;22152:8;22129:32;:::i;:::-;22117:44;;21459:712;;;21329:848;;;;;;;:::o;22183:1073::-;22237:5;22428:8;22418:40;;22449:1;22440:10;;22451:5;;22418:40;22477:4;22467:36;;22494:1;22485:10;;22496:5;;22467:36;22563:4;22611:1;22606:27;;;;22647:1;22642:191;;;;22556:277;;22606:27;22624:1;22615:10;;22626:5;;;22642:191;22687:3;22677:8;22674:17;22671:43;;;22694:18;;:::i;:::-;22671:43;22743:8;22740:1;22736:16;22727:25;;22778:3;22771:5;22768:14;22765:40;;;22785:18;;:::i;:::-;22765:40;22818:5;;;22556:277;;22942:2;22932:8;22929:16;22923:3;22917:4;22914:13;22910:36;22892:2;22882:8;22879:16;22874:2;22868:4;22865:12;22861:35;22845:111;22842:246;;;22998:8;22992:4;22988:19;22979:28;;23033:3;23026:5;23023:14;23020:40;;;23040:18;;:::i;:::-;23020:40;23073:5;;22842:246;23113:42;23151:3;23141:8;23135:4;23132:1;23113:42;:::i;:::-;23098:57;;;;23187:4;23182:3;23178:14;23171:5;23168:25;23165:51;;;23196:18;;:::i;:::-;23165:51;23245:4;23238:5;23234:16;23225:25;;22183:1073;;;;;;:::o;23262:285::-;23322:5;23346:23;23364:4;23346:23;:::i;:::-;23338:31;;23390:27;23408:8;23390:27;:::i;:::-;23378:39;;23436:104;23473:66;23463:8;23457:4;23436:104;:::i;:::-;23427:113;;23262:285;;;;:::o;23553:233::-;23592:3;23615:24;23633:5;23615:24;:::i;:::-;23606:33;;23661:66;23654:5;23651:77;23648:103;;23731:18;;:::i;:::-;23648:103;23778:1;23771:5;23767:13;23760:20;;23553:233;;;:::o;23792:304::-;23932:34;23928:1;23920:6;23916:14;23909:58;24001:34;23996:2;23988:6;23984:15;23977:59;24070:18;24065:2;24057:6;24053:15;24046:43;23792:304;:::o;24102:366::-;24244:3;24265:67;24329:2;24324:3;24265:67;:::i;:::-;24258:74;;24341:93;24430:3;24341:93;:::i;:::-;24459:2;24454:3;24450:12;24443:19;;24102:366;;;:::o;24474:419::-;24640:4;24678:2;24667:9;24663:18;24655:26;;24727:9;24721:4;24717:20;24713:1;24702:9;24698:17;24691:47;24755:131;24881:4;24755:131;:::i;:::-;24747:139;;24474:419;;;:::o;24899:332::-;25020:4;25058:2;25047:9;25043:18;25035:26;;25071:71;25139:1;25128:9;25124:17;25115:6;25071:71;:::i;:::-;25152:72;25220:2;25209:9;25205:18;25196:6;25152:72;:::i;:::-;24899:332;;;;;:::o;25237:114::-;25304:6;25338:5;25332:12;25322:22;;25237:114;;;:::o;25357:184::-;25456:11;25490:6;25485:3;25478:19;25530:4;25525:3;25521:14;25506:29;;25357:184;;;;:::o;25547:132::-;25614:4;25637:3;25629:11;;25667:4;25662:3;25658:14;25650:22;;25547:132;;;:::o;25685:108::-;25762:24;25780:5;25762:24;:::i;:::-;25757:3;25750:37;25685:108;;:::o;25799:179::-;25868:10;25889:46;25931:3;25923:6;25889:46;:::i;:::-;25967:4;25962:3;25958:14;25944:28;;25799:179;;;;:::o;25984:113::-;26054:4;26086;26081:3;26077:14;26069:22;;25984:113;;;:::o;26133:732::-;26252:3;26281:54;26329:5;26281:54;:::i;:::-;26351:86;26430:6;26425:3;26351:86;:::i;:::-;26344:93;;26461:56;26511:5;26461:56;:::i;:::-;26540:7;26571:1;26556:284;26581:6;26578:1;26575:13;26556:284;;;26657:6;26651:13;26684:63;26743:3;26728:13;26684:63;:::i;:::-;26677:70;;26770:60;26823:6;26770:60;:::i;:::-;26760:70;;26616:224;26603:1;26600;26596:9;26591:14;;26556:284;;;26560:14;26856:3;26849:10;;26257:608;;;26133:732;;;;:::o;26871:926::-;27154:4;27192:3;27181:9;27177:19;27169:27;;27206:71;27274:1;27263:9;27259:17;27250:6;27206:71;:::i;:::-;27287:72;27355:2;27344:9;27340:18;27331:6;27287:72;:::i;:::-;27406:9;27400:4;27396:20;27391:2;27380:9;27376:18;27369:48;27434:108;27537:4;27528:6;27434:108;:::i;:::-;27426:116;;27552:72;27620:2;27609:9;27605:18;27596:6;27552:72;:::i;:::-;27634:73;27702:3;27691:9;27687:19;27678:6;27634:73;:::i;:::-;27717;27785:3;27774:9;27770:19;27761:6;27717:73;:::i;:::-;26871:926;;;;;;;;;:::o;27803:351::-;27873:6;27922:2;27910:9;27901:7;27897:23;27893:32;27890:119;;;27928:79;;:::i;:::-;27890:119;28048:1;28073:64;28129:7;28120:6;28109:9;28105:22;28073:64;:::i;:::-;28063:74;;28019:128;27803:351;;;;:::o;28160:184::-;28259:11;28293:6;28288:3;28281:19;28333:4;28328:3;28324:14;28309:29;;28160:184;;;;:::o;28350:102::-;28419:4;28442:3;28434:11;;28350:102;;;:::o;28458:108::-;28535:24;28553:5;28535:24;:::i;:::-;28530:3;28523:37;28458:108;;:::o;28572:179::-;28641:10;28662:46;28704:3;28696:6;28662:46;:::i;:::-;28740:4;28735:3;28731:14;28717:28;;28572:179;;;;:::o;28757:122::-;28809:5;28834:39;28869:2;28864:3;28860:12;28855:3;28834:39;:::i;:::-;28825:48;;28757:122;;;;:::o;28885:115::-;28957:4;28989;28984:3;28980:14;28972:22;;28885:115;;;:::o;29036:699::-;29165:3;29188:86;29267:6;29262:3;29188:86;:::i;:::-;29181:93;;29298:58;29350:5;29298:58;:::i;:::-;29379:7;29410:1;29395:315;29420:6;29417:1;29414:13;29395:315;;;29490:42;29525:6;29516:7;29490:42;:::i;:::-;29552:63;29611:3;29596:13;29552:63;:::i;:::-;29545:70;;29638:62;29693:6;29638:62;:::i;:::-;29628:72;;29455:255;29442:1;29439;29435:9;29430:14;;29395:315;;;29399:14;29726:3;29719:10;;29170:565;;29036:699;;;;;:::o;29741:393::-;29894:4;29932:2;29921:9;29917:18;29909:26;;29981:9;29975:4;29971:20;29967:1;29956:9;29952:17;29945:47;30009:118;30122:4;30113:6;30105;30009:118;:::i;:::-;30001:126;;29741:393;;;;;:::o;30140:231::-;30280:34;30276:1;30268:6;30264:14;30257:58;30349:14;30344:2;30336:6;30332:15;30325:39;30140:231;:::o;30377:366::-;30519:3;30540:67;30604:2;30599:3;30540:67;:::i;:::-;30533:74;;30616:93;30705:3;30616:93;:::i;:::-;30734:2;30729:3;30725:12;30718:19;;30377:366;;;:::o;30749:419::-;30915:4;30953:2;30942:9;30938:18;30930:26;;31002:9;30996:4;30992:20;30988:1;30977:9;30973:17;30966:47;31030:131;31156:4;31030:131;:::i;:::-;31022:139;;30749:419;;;:::o;31174:232::-;31314:34;31310:1;31302:6;31298:14;31291:58;31383:15;31378:2;31370:6;31366:15;31359:40;31174:232;:::o;31412:366::-;31554:3;31575:67;31639:2;31634:3;31575:67;:::i;:::-;31568:74;;31651:93;31740:3;31651:93;:::i;:::-;31769:2;31764:3;31760:12;31753:19;;31412:366;;;:::o;31784:419::-;31950:4;31988:2;31977:9;31973:18;31965:26;;32037:9;32031:4;32027:20;32023:1;32012:9;32008:17;32001:47;32065:131;32191:4;32065:131;:::i;:::-;32057:139;;31784:419;;;:::o;32209:229::-;32349:34;32345:1;32337:6;32333:14;32326:58;32418:12;32413:2;32405:6;32401:15;32394:37;32209:229;:::o;32444:366::-;32586:3;32607:67;32671:2;32666:3;32607:67;:::i;:::-;32600:74;;32683:93;32772:3;32683:93;:::i;:::-;32801:2;32796:3;32792:12;32785:19;;32444:366;;;:::o;32816:419::-;32982:4;33020:2;33009:9;33005:18;32997:26;;33069:9;33063:4;33059:20;33055:1;33044:9;33040:17;33033:47;33097:131;33223:4;33097:131;:::i;:::-;33089:139;;32816:419;;;:::o;33241:230::-;33381:34;33377:1;33369:6;33365:14;33358:58;33450:13;33445:2;33437:6;33433:15;33426:38;33241:230;:::o;33477:366::-;33619:3;33640:67;33704:2;33699:3;33640:67;:::i;:::-;33633:74;;33716:93;33805:3;33716:93;:::i;:::-;33834:2;33829:3;33825:12;33818:19;;33477:366;;;:::o;33849:419::-;34015:4;34053:2;34042:9;34038:18;34030:26;;34102:9;34096:4;34092:20;34088:1;34077:9;34073:17;34066:47;34130:131;34256:4;34130:131;:::i;:::-;34122:139;;33849:419;;;:::o;34274:664::-;34479:4;34517:3;34506:9;34502:19;34494:27;;34531:71;34599:1;34588:9;34584:17;34575:6;34531:71;:::i;:::-;34612:72;34680:2;34669:9;34665:18;34656:6;34612:72;:::i;:::-;34694;34762:2;34751:9;34747:18;34738:6;34694:72;:::i;:::-;34776;34844:2;34833:9;34829:18;34820:6;34776:72;:::i;:::-;34858:73;34926:3;34915:9;34911:19;34902:6;34858:73;:::i;:::-;34274:664;;;;;;;;:::o;34944:442::-;35093:4;35131:2;35120:9;35116:18;35108:26;;35144:71;35212:1;35201:9;35197:17;35188:6;35144:71;:::i;:::-;35225:72;35293:2;35282:9;35278:18;35269:6;35225:72;:::i;:::-;35307;35375:2;35364:9;35360:18;35351:6;35307:72;:::i;:::-;34944:442;;;;;;:::o;35392:232::-;35532:34;35528:1;35520:6;35516:14;35509:58;35601:15;35596:2;35588:6;35584:15;35577:40;35392:232;:::o;35630:366::-;35772:3;35793:67;35857:2;35852:3;35793:67;:::i;:::-;35786:74;;35869:93;35958:3;35869:93;:::i;:::-;35987:2;35982:3;35978:12;35971:19;;35630:366;;;:::o;36002:419::-;36168:4;36206:2;36195:9;36191:18;36183:26;;36255:9;36249:4;36245:20;36241:1;36230:9;36226:17;36219:47;36283:131;36409:4;36283:131;:::i;:::-;36275:139;;36002:419;;;:::o;36427:230::-;36567:34;36563:1;36555:6;36551:14;36544:58;36636:13;36631:2;36623:6;36619:15;36612:38;36427:230;:::o;36663:366::-;36805:3;36826:67;36890:2;36885:3;36826:67;:::i;:::-;36819:74;;36902:93;36991:3;36902:93;:::i;:::-;37020:2;37015:3;37011:12;37004:19;;36663:366;;;:::o;37035:419::-;37201:4;37239:2;37228:9;37224:18;37216:26;;37288:9;37282:4;37278:20;37274:1;37263:9;37259:17;37252:47;37316:131;37442:4;37316:131;:::i;:::-;37308:139;;37035:419;;;:::o;37460:231::-;37600:34;37596:1;37588:6;37584:14;37577:58;37669:14;37664:2;37656:6;37652:15;37645:39;37460:231;:::o;37697:366::-;37839:3;37860:67;37924:2;37919:3;37860:67;:::i;:::-;37853:74;;37936:93;38025:3;37936:93;:::i;:::-;38054:2;38049:3;38045:12;38038:19;;37697:366;;;:::o;38069:419::-;38235:4;38273:2;38262:9;38258:18;38250:26;;38322:9;38316:4;38312:20;38308:1;38297:9;38293:17;38286:47;38350:131;38476:4;38350:131;:::i;:::-;38342:139;;38069:419;;;:::o;38494:230::-;38634:34;38630:1;38622:6;38618:14;38611:58;38703:13;38698:2;38690:6;38686:15;38679:38;38494:230;:::o;38730:366::-;38872:3;38893:67;38957:2;38952:3;38893:67;:::i;:::-;38886:74;;38969:93;39058:3;38969:93;:::i;:::-;39087:2;39082:3;39078:12;39071:19;;38730:366;;;:::o;39102:419::-;39268:4;39306:2;39295:9;39291:18;39283:26;;39355:9;39349:4;39345:20;39341:1;39330:9;39326:17;39319:47;39383:131;39509:4;39383:131;:::i;:::-;39375:139;;39102:419;;;:::o;39527:117::-;39636:1;39633;39626:12;39650:154;39734:6;39729:3;39724;39711:30;39796:1;39787:6;39782:3;39778:16;39771:27;39650:154;;;:::o;39840:537::-;39968:3;39989:86;40068:6;40063:3;39989:86;:::i;:::-;39982:93;;40099:66;40091:6;40088:78;40085:165;;;40169:79;;:::i;:::-;40085:165;40281:4;40273:6;40269:17;40259:27;;40296:43;40332:6;40327:3;40320:5;40296:43;:::i;:::-;40364:6;40359:3;40355:16;40348:23;;39840:537;;;;;:::o;40383:1459::-;40856:4;40894:3;40883:9;40879:19;40871:27;;40908:71;40976:1;40965:9;40961:17;40952:6;40908:71;:::i;:::-;41026:9;41020:4;41016:20;41011:2;41000:9;40996:18;40989:48;41054:118;41167:4;41158:6;41150;41054:118;:::i;:::-;41046:126;;41219:9;41213:4;41209:20;41204:2;41193:9;41189:18;41182:48;41247:118;41360:4;41351:6;41343;41247:118;:::i;:::-;41239:126;;41412:9;41406:4;41402:20;41397:2;41386:9;41382:18;41375:48;41440:118;41553:4;41544:6;41536;41440:118;:::i;:::-;41432:126;;41606:9;41600:4;41596:20;41590:3;41579:9;41575:19;41568:49;41634:118;41747:4;41738:6;41730;41634:118;:::i;:::-;41626:126;;41762:73;41830:3;41819:9;41815:19;41806:6;41762:73;:::i;:::-;40383:1459;;;;;;;;;;;;;:::o;41848:290::-;41988:34;41984:1;41976:6;41972:14;41965:58;42057:34;42052:2;42044:6;42040:15;42033:59;42126:4;42121:2;42113:6;42109:15;42102:29;41848:290;:::o;42144:366::-;42286:3;42307:67;42371:2;42366:3;42307:67;:::i;:::-;42300:74;;42383:93;42472:3;42383:93;:::i;:::-;42501:2;42496:3;42492:12;42485:19;;42144:366;;;:::o;42516:419::-;42682:4;42720:2;42709:9;42705:18;42697:26;;42769:9;42763:4;42759:20;42755:1;42744:9;42740:17;42733:47;42797:131;42923:4;42797:131;:::i;:::-;42789:139;;42516:419;;;:::o;42941:775::-;43174:4;43212:3;43201:9;43197:19;43189:27;;43226:71;43294:1;43283:9;43279:17;43270:6;43226:71;:::i;:::-;43307:72;43375:2;43364:9;43360:18;43351:6;43307:72;:::i;:::-;43389;43457:2;43446:9;43442:18;43433:6;43389:72;:::i;:::-;43471;43539:2;43528:9;43524:18;43515:6;43471:72;:::i;:::-;43553:73;43621:3;43610:9;43606:19;43597:6;43553:73;:::i;:::-;43636;43704:3;43693:9;43689:19;43680:6;43636:73;:::i;:::-;42941:775;;;;;;;;;:::o;43722:304::-;43862:34;43858:1;43850:6;43846:14;43839:58;43931:34;43926:2;43918:6;43914:15;43907:59;44000:18;43995:2;43987:6;43983:15;43976:43;43722:304;:::o;44032:366::-;44174:3;44195:67;44259:2;44254:3;44195:67;:::i;:::-;44188:74;;44271:93;44360:3;44271:93;:::i;:::-;44389:2;44384:3;44380:12;44373:19;;44032:366;;;:::o;44404:419::-;44570:4;44608:2;44597:9;44593:18;44585:26;;44657:9;44651:4;44647:20;44643:1;44632:9;44628:17;44621:47;44685:131;44811:4;44685:131;:::i;:::-;44677:139;;44404:419;;;:::o;44829:225::-;44969:34;44965:1;44957:6;44953:14;44946:58;45038:8;45033:2;45025:6;45021:15;45014:33;44829:225;:::o;45060:366::-;45202:3;45223:67;45287:2;45282:3;45223:67;:::i;:::-;45216:74;;45299:93;45388:3;45299:93;:::i;:::-;45417:2;45412:3;45408:12;45401:19;;45060:366;;;:::o;45432:419::-;45598:4;45636:2;45625:9;45621:18;45613:26;;45685:9;45679:4;45675:20;45671:1;45660:9;45656:17;45649:47;45713:131;45839:4;45713:131;:::i;:::-;45705:139;;45432:419;;;:::o;45857:191::-;45897:4;45917:20;45935:1;45917:20;:::i;:::-;45912:25;;45951:20;45969:1;45951:20;:::i;:::-;45946:25;;45990:1;45987;45984:8;45981:34;;;45995:18;;:::i;:::-;45981:34;46040:1;46037;46033:9;46025:17;;45857:191;;;;:::o;46054:180::-;46102:77;46099:1;46092:88;46199:4;46196:1;46189:15;46223:4;46220:1;46213:15;46240:185;46280:1;46297:20;46315:1;46297:20;:::i;:::-;46292:25;;46331:20;46349:1;46331:20;:::i;:::-;46326:25;;46370:1;46360:35;;46375:18;;:::i;:::-;46360:35;46417:1;46414;46410:9;46405:14;;46240:185;;;;:::o;46431:301::-;46571:34;46567:1;46559:6;46555:14;46548:58;46640:34;46635:2;46627:6;46623:15;46616:59;46709:15;46704:2;46696:6;46692:15;46685:40;46431:301;:::o;46738:366::-;46880:3;46901:67;46965:2;46960:3;46901:67;:::i;:::-;46894:74;;46977:93;47066:3;46977:93;:::i;:::-;47095:2;47090:3;47086:12;47079:19;;46738:366;;;:::o;47110:419::-;47276:4;47314:2;47303:9;47299:18;47291:26;;47363:9;47357:4;47353:20;47349:1;47338:9;47334:17;47327:47;47391:131;47517:4;47391:131;:::i;:::-;47383:139;;47110:419;;;:::o;47535:348::-;47575:7;47598:20;47616:1;47598:20;:::i;:::-;47593:25;;47632:20;47650:1;47632:20;:::i;:::-;47627:25;;47820:1;47752:66;47748:74;47745:1;47742:81;47737:1;47730:9;47723:17;47719:105;47716:131;;;47827:18;;:::i;:::-;47716:131;47875:1;47872;47868:9;47857:20;;47535:348;;;;:::o;47889:220::-;48029:34;48025:1;48017:6;48013:14;48006:58;48098:3;48093:2;48085:6;48081:15;48074:28;47889:220;:::o;48115:366::-;48257:3;48278:67;48342:2;48337:3;48278:67;:::i;:::-;48271:74;;48354:93;48443:3;48354:93;:::i;:::-;48472:2;48467:3;48463:12;48456:19;;48115:366;;;:::o;48487:419::-;48653:4;48691:2;48680:9;48676:18;48668:26;;48740:9;48734:4;48730:20;48726:1;48715:9;48711:17;48704:47;48768:131;48894:4;48768:131;:::i;:::-;48760:139;;48487:419;;;:::o;48912:442::-;49061:4;49099:2;49088:9;49084:18;49076:26;;49112:71;49180:1;49169:9;49165:17;49156:6;49112:71;:::i;:::-;49193:72;49261:2;49250:9;49246:18;49237:6;49193:72;:::i;:::-;49275;49343:2;49332:9;49328:18;49319:6;49275:72;:::i;:::-;48912:442;;;;;;:::o;49360:305::-;49400:3;49419:20;49437:1;49419:20;:::i;:::-;49414:25;;49453:20;49471:1;49453:20;:::i;:::-;49448:25;;49607:1;49539:66;49535:74;49532:1;49529:81;49526:107;;;49613:18;;:::i;:::-;49526:107;49657:1;49654;49650:9;49643:16;;49360:305;;;;:::o;49671:177::-;49811:29;49807:1;49799:6;49795:14;49788:53;49671:177;:::o;49854:366::-;49996:3;50017:67;50081:2;50076:3;50017:67;:::i;:::-;50010:74;;50093:93;50182:3;50093:93;:::i;:::-;50211:2;50206:3;50202:12;50195:19;;49854:366;;;:::o;50226:419::-;50392:4;50430:2;50419:9;50415:18;50407:26;;50479:9;50473:4;50469:20;50465:1;50454:9;50450:17;50443:47;50507:131;50633:4;50507:131;:::i;:::-;50499:139;;50226:419;;;:::o;50651:99::-;50703:6;50737:5;50731:12;50721:22;;50651:99;;;:::o;50756:307::-;50824:1;50834:113;50848:6;50845:1;50842:13;50834:113;;;50933:1;50928:3;50924:11;50918:18;50914:1;50909:3;50905:11;50898:39;50870:2;50867:1;50863:10;50858:15;;50834:113;;;50965:6;50962:1;50959:13;50956:101;;;51045:1;51036:6;51031:3;51027:16;51020:27;50956:101;50805:258;50756:307;;;:::o;51069:102::-;51110:6;51161:2;51157:7;51152:2;51145:5;51141:14;51137:28;51127:38;;51069:102;;;:::o;51177:364::-;51265:3;51293:39;51326:5;51293:39;:::i;:::-;51348:71;51412:6;51407:3;51348:71;:::i;:::-;51341:78;;51428:52;51473:6;51468:3;51461:4;51454:5;51450:16;51428:52;:::i;:::-;51505:29;51527:6;51505:29;:::i;:::-;51500:3;51496:39;51489:46;;51269:272;51177:364;;;;:::o;51547:313::-;51660:4;51698:2;51687:9;51683:18;51675:26;;51747:9;51741:4;51737:20;51733:1;51722:9;51718:17;51711:47;51775:78;51848:4;51839:6;51775:78;:::i;:::-;51767:86;;51547:313;;;;:::o;51866:98::-;51917:6;51951:5;51945:12;51935:22;;51866:98;;;:::o;51970:147::-;52071:11;52108:3;52093:18;;51970:147;;;;:::o;52123:373::-;52227:3;52255:38;52287:5;52255:38;:::i;:::-;52309:88;52390:6;52385:3;52309:88;:::i;:::-;52302:95;;52406:52;52451:6;52446:3;52439:4;52432:5;52428:16;52406:52;:::i;:::-;52483:6;52478:3;52474:16;52467:23;;52231:265;52123:373;;;;:::o;52502:271::-;52632:3;52654:93;52743:3;52734:6;52654:93;:::i;:::-;52647:100;;52764:3;52757:10;;52502:271;;;;:::o;52779:182::-;52919:34;52915:1;52907:6;52903:14;52896:58;52779:182;:::o;52967:366::-;53109:3;53130:67;53194:2;53189:3;53130:67;:::i;:::-;53123:74;;53206:93;53295:3;53206:93;:::i;:::-;53324:2;53319:3;53315:12;53308:19;;52967:366;;;:::o;53339:419::-;53505:4;53543:2;53532:9;53528:18;53520:26;;53592:9;53586:4;53582:20;53578:1;53567:9;53563:17;53556:47;53620:131;53746:4;53620:131;:::i;:::-;53612:139;;53339:419;;;:::o;53764:137::-;53818:5;53849:6;53843:13;53834:22;;53865:30;53889:5;53865:30;:::i;:::-;53764:137;;;;:::o;53907:345::-;53974:6;54023:2;54011:9;54002:7;53998:23;53994:32;53991:119;;;54029:79;;:::i;:::-;53991:119;54149:1;54174:61;54227:7;54218:6;54207:9;54203:22;54174:61;:::i;:::-;54164:71;;54120:125;53907:345;;;;:::o;54258:229::-;54398:34;54394:1;54386:6;54382:14;54375:58;54467:12;54462:2;54454:6;54450:15;54443:37;54258:229;:::o;54493:366::-;54635:3;54656:67;54720:2;54715:3;54656:67;:::i;:::-;54649:74;;54732:93;54821:3;54732:93;:::i;:::-;54850:2;54845:3;54841:12;54834:19;;54493:366;;;:::o;54865:419::-;55031:4;55069:2;55058:9;55054:18;55046:26;;55118:9;55112:4;55108:20;55104:1;55093:9;55089:17;55082:47;55146:131;55272:4;55146:131;:::i;:::-;55138:139;;54865:419;;;:::o
Swarm Source
ipfs://8d9a7920163d525c972d5f92eff3cf6a579a39d61858e158fb461167bfe57e2b
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 29 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | 100.00% | $0.999943 | 11,752.5198 | $11,751.85 |
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.