Contract
0x2f87a9550f19666cef5de29c5f613966cf164be6
2
Contract Overview
My Name Tag:
Not Available, login to update
[ Download CSV Export ]
Contract Name:
OlympusTreasury
Compiler Version
v0.7.5+commit.eb77ed08
Contract Source Code (Solidity)
/** *Submitted for verification at snowtrace.io on 2021-11-14 */ // SPDX-License-Identifier: AGPL-3.0-or-later pragma solidity 0.7.5; library SafeMath { function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; return c; } } library Address { function isContract(address account) internal view returns (bool) { // This method relies in 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; } function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return _functionCallWithValue(target, data, 0, errorMessage); } function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) { require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: weiValue }(data); if (success) { return returndata; } else { if (returndata.length > 0) { // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) { if (success) { return returndata; } else { if (returndata.length > 0) { // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } interface IOwnable { function manager() external view returns (address); function renounceManagement() external; function pushManagement( address newOwner_ ) external; function pullManagement() external; } contract Ownable is IOwnable { address internal _owner; address internal _newOwner; event OwnershipPushed(address indexed previousOwner, address indexed newOwner); event OwnershipPulled(address indexed previousOwner, address indexed newOwner); constructor () { _owner = msg.sender; emit OwnershipPushed( address(0), _owner ); } function manager() public view override returns (address) { return _owner; } modifier onlyManager() { require( _owner == msg.sender, "Ownable: caller is not the owner" ); _; } function renounceManagement() public virtual override onlyManager() { emit OwnershipPushed( _owner, address(0) ); _owner = address(0); } function pushManagement( address newOwner_ ) public virtual override onlyManager() { require( newOwner_ != address(0), "Ownable: new owner is the zero address"); emit OwnershipPushed( _owner, newOwner_ ); _newOwner = newOwner_; } function pullManagement() public virtual override { require( msg.sender == _newOwner, "Ownable: must be new owner to pull"); emit OwnershipPulled( _owner, _newOwner ); _owner = _newOwner; } } interface IERC20 { function decimals() external view returns (uint8); function balanceOf(address account) external view returns (uint256); function transfer(address recipient, uint256 amount) external returns (bool); function approve(address spender, uint256 amount) external returns (bool); function totalSupply() external view returns (uint256); function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); } library SafeERC20 { using SafeMath for uint256; using Address for address; function safeTransfer(IERC20 token, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } function _callOptionalReturn(IERC20 token, bytes memory data) private { bytes memory returndata = address(token).functionCall(data, "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"); } } } interface IERC20Mintable { function mint( uint256 amount_ ) external; function mint( address account_, uint256 ammount_ ) external; } interface IOHMERC20 { function burnFrom(address account_, uint256 amount_) external; } interface IBondCalculator { function valuation( address pair_, uint amount_ ) external view returns ( uint _value ); } contract OlympusTreasury is Ownable { using SafeMath for uint; using SafeERC20 for IERC20; event Deposit( address indexed token, uint amount, uint value ); event Withdrawal( address indexed token, uint amount, uint value ); event CreateDebt( address indexed debtor, address indexed token, uint amount, uint value ); event RepayDebt( address indexed debtor, address indexed token, uint amount, uint value ); event ReservesManaged( address indexed token, uint amount ); event ReservesUpdated( uint indexed totalReserves ); event ReservesAudited( uint indexed totalReserves ); event RewardsMinted( address indexed caller, address indexed recipient, uint amount ); event ChangeQueued( MANAGING indexed managing, address queued ); event ChangeActivated( MANAGING indexed managing, address activated, bool result ); enum MANAGING { RESERVEDEPOSITOR, RESERVESPENDER, RESERVETOKEN, RESERVEMANAGER, LIQUIDITYDEPOSITOR, LIQUIDITYTOKEN, LIQUIDITYMANAGER, DEBTOR, REWARDMANAGER, SOHM } address public immutable RUG; uint public immutable blocksNeededForQueue; address[] public reserveTokens; // Push only, beware false-positives. mapping( address => bool ) public isReserveToken; mapping( address => uint ) public reserveTokenQueue; // Delays changes to mapping. address[] public reserveDepositors; // Push only, beware false-positives. Only for viewing. mapping( address => bool ) public isReserveDepositor; mapping( address => uint ) public reserveDepositorQueue; // Delays changes to mapping. address[] public reserveSpenders; // Push only, beware false-positives. Only for viewing. mapping( address => bool ) public isReserveSpender; mapping( address => uint ) public reserveSpenderQueue; // Delays changes to mapping. address[] public liquidityTokens; // Push only, beware false-positives. mapping( address => bool ) public isLiquidityToken; mapping( address => uint ) public LiquidityTokenQueue; // Delays changes to mapping. address[] public liquidityDepositors; // Push only, beware false-positives. Only for viewing. mapping( address => bool ) public isLiquidityDepositor; mapping( address => uint ) public LiquidityDepositorQueue; // Delays changes to mapping. mapping( address => address ) public bondCalculator; // bond calculator for liquidity token address[] public reserveManagers; // Push only, beware false-positives. Only for viewing. mapping( address => bool ) public isReserveManager; mapping( address => uint ) public ReserveManagerQueue; // Delays changes to mapping. address[] public liquidityManagers; // Push only, beware false-positives. Only for viewing. mapping( address => bool ) public isLiquidityManager; mapping( address => uint ) public LiquidityManagerQueue; // Delays changes to mapping. address[] public debtors; // Push only, beware false-positives. Only for viewing. mapping( address => bool ) public isDebtor; mapping( address => uint ) public debtorQueue; // Delays changes to mapping. mapping( address => uint ) public debtorBalance; address[] public rewardManagers; // Push only, beware false-positives. Only for viewing. mapping( address => bool ) public isRewardManager; mapping( address => uint ) public rewardManagerQueue; // Delays changes to mapping. address public sOHM; uint public sOHMQueue; // Delays change to sOHM address uint public totalReserves; // Risk-free value of all assets uint public totalDebt; constructor ( address _RUG, address _DAI, address _MIM, address _RUGDAI, uint _blocksNeededForQueue ) { require( _RUG != address(0) ); RUG = _RUG; isReserveToken[ _DAI ] = true; reserveTokens.push( _DAI ); isReserveToken[ _MIM ] = true; reserveTokens.push( _MIM ); isLiquidityToken[ _RUGDAI ] = true; liquidityTokens.push( _RUGDAI ); blocksNeededForQueue = _blocksNeededForQueue; } /** @notice allow approved address to deposit an asset for OHM @param _amount uint @param _token address @param _profit uint @return send_ uint */ function deposit( uint _amount, address _token, uint _profit ) external returns ( uint send_ ) { require( isReserveToken[ _token ] || isLiquidityToken[ _token ], "Not accepted" ); IERC20( _token ).safeTransferFrom( msg.sender, address(this), _amount ); if ( isReserveToken[ _token ] ) { require( isReserveDepositor[ msg.sender ], "Not approved" ); } else { require( isLiquidityDepositor[ msg.sender ], "Not approved" ); } uint value = valueOf(_token, _amount); // mint OHM needed and store amount of rewards for distribution send_ = value.sub( _profit ); IERC20Mintable( RUG ).mint( msg.sender, send_ ); totalReserves = totalReserves.add( value ); emit ReservesUpdated( totalReserves ); emit Deposit( _token, _amount, value ); } /** @notice allow approved address to burn OHM for reserves @param _amount uint @param _token address */ function withdraw( uint _amount, address _token ) external { require( isReserveToken[ _token ], "Not accepted" ); // Only reserves can be used for redemptions require( isReserveSpender[ msg.sender ] == true, "Not approved" ); uint value = valueOf( _token, _amount ); IOHMERC20( RUG ).burnFrom( msg.sender, value ); totalReserves = totalReserves.sub( value ); emit ReservesUpdated( totalReserves ); IERC20( _token ).safeTransfer( msg.sender, _amount ); emit Withdrawal( _token, _amount, value ); } /** @notice allow approved address to borrow reserves @param _amount uint @param _token address */ function incurDebt( uint _amount, address _token ) external { require( isDebtor[ msg.sender ], "Not approved" ); require( isReserveToken[ _token ], "Not accepted" ); uint value = valueOf( _token, _amount ); uint maximumDebt = IERC20( sOHM ).balanceOf( msg.sender ); // Can only borrow against sOHM held uint availableDebt = maximumDebt.sub( debtorBalance[ msg.sender ] ); require( value <= availableDebt, "Exceeds debt limit" ); debtorBalance[ msg.sender ] = debtorBalance[ msg.sender ].add( value ); totalDebt = totalDebt.add( value ); totalReserves = totalReserves.sub( value ); emit ReservesUpdated( totalReserves ); IERC20( _token ).transfer( msg.sender, _amount ); emit CreateDebt( msg.sender, _token, _amount, value ); } /** @notice allow approved address to repay borrowed reserves with reserves @param _amount uint @param _token address */ function repayDebtWithReserve( uint _amount, address _token ) external { require( isDebtor[ msg.sender ], "Not approved" ); require( isReserveToken[ _token ], "Not accepted" ); IERC20( _token ).safeTransferFrom( msg.sender, address(this), _amount ); uint value = valueOf( _token, _amount ); debtorBalance[ msg.sender ] = debtorBalance[ msg.sender ].sub( value ); totalDebt = totalDebt.sub( value ); totalReserves = totalReserves.add( value ); emit ReservesUpdated( totalReserves ); emit RepayDebt( msg.sender, _token, _amount, value ); } /** @notice allow approved address to repay borrowed reserves with OHM @param _amount uint */ function repayDebtWithOHM( uint _amount ) external { require( isDebtor[ msg.sender ], "Not approved" ); IOHMERC20( RUG ).burnFrom( msg.sender, _amount ); debtorBalance[ msg.sender ] = debtorBalance[ msg.sender ].sub( _amount ); totalDebt = totalDebt.sub( _amount ); emit RepayDebt( msg.sender, RUG, _amount, _amount ); } /** @notice allow approved address to withdraw assets @param _token address @param _amount uint */ function manage( address _token, uint _amount ) external { if( isLiquidityToken[ _token ] ) { require( isLiquidityManager[ msg.sender ], "Not approved" ); } else { require( isReserveManager[ msg.sender ], "Not approved" ); } uint value = valueOf(_token, _amount); require( value <= excessReserves(), "Insufficient reserves" ); totalReserves = totalReserves.sub( value ); emit ReservesUpdated( totalReserves ); IERC20( _token ).safeTransfer( msg.sender, _amount ); emit ReservesManaged( _token, _amount ); } /** @notice send epoch reward to staking contract */ function mintRewards( address _recipient, uint _amount ) external { require( isRewardManager[ msg.sender ], "Not approved" ); require( _amount <= excessReserves(), "Insufficient reserves" ); IERC20Mintable( RUG ).mint( _recipient, _amount ); emit RewardsMinted( msg.sender, _recipient, _amount ); } /** @notice returns excess reserves not backing tokens @return uint */ function excessReserves() public view returns ( uint ) { return totalReserves.sub( IERC20( RUG ).totalSupply().sub( totalDebt ) ); } /** @notice takes inventory of all tracked assets @notice always consolidate to recognized reserves before audit */ function auditReserves() external onlyManager() { uint reserves; for( uint i = 0; i < reserveTokens.length; i++ ) { reserves = reserves.add ( valueOf( reserveTokens[ i ], IERC20( reserveTokens[ i ] ).balanceOf( address(this) ) ) ); } for( uint i = 0; i < liquidityTokens.length; i++ ) { reserves = reserves.add ( valueOf( liquidityTokens[ i ], IERC20( liquidityTokens[ i ] ).balanceOf( address(this) ) ) ); } totalReserves = reserves; emit ReservesUpdated( reserves ); emit ReservesAudited( reserves ); } /** @notice returns RUG valuation of asset @param _token address @param _amount uint @return value_ uint */ function valueOf( address _token, uint _amount ) public view returns ( uint value_ ) { if ( isReserveToken[ _token ] ) { // convert amount to match RUG decimals value_ = _amount.mul( 10 ** IERC20( RUG ).decimals() ).div( 10 ** IERC20( _token ).decimals() ); } else if ( isLiquidityToken[ _token ] ) { value_ = IBondCalculator( bondCalculator[ _token ] ).valuation( _token, _amount ); } } /** @notice queue address to change boolean in mapping @param _managing MANAGING @param _address address @return bool */ function queue( MANAGING _managing, address _address ) external onlyManager() returns ( bool ) { require( _address != address(0) ); if ( _managing == MANAGING.RESERVEDEPOSITOR ) { // 0 reserveDepositorQueue[ _address ] = block.number.add( blocksNeededForQueue ); } else if ( _managing == MANAGING.RESERVESPENDER ) { // 1 reserveSpenderQueue[ _address ] = block.number.add( blocksNeededForQueue ); } else if ( _managing == MANAGING.RESERVETOKEN ) { // 2 reserveTokenQueue[ _address ] = block.number.add( blocksNeededForQueue ); } else if ( _managing == MANAGING.RESERVEMANAGER ) { // 3 ReserveManagerQueue[ _address ] = block.number.add( blocksNeededForQueue.mul( 2 ) ); } else if ( _managing == MANAGING.LIQUIDITYDEPOSITOR ) { // 4 LiquidityDepositorQueue[ _address ] = block.number.add( blocksNeededForQueue ); } else if ( _managing == MANAGING.LIQUIDITYTOKEN ) { // 5 LiquidityTokenQueue[ _address ] = block.number.add( blocksNeededForQueue ); } else if ( _managing == MANAGING.LIQUIDITYMANAGER ) { // 6 LiquidityManagerQueue[ _address ] = block.number.add( blocksNeededForQueue.mul( 2 ) ); } else if ( _managing == MANAGING.DEBTOR ) { // 7 debtorQueue[ _address ] = block.number.add( blocksNeededForQueue ); } else if ( _managing == MANAGING.REWARDMANAGER ) { // 8 rewardManagerQueue[ _address ] = block.number.add( blocksNeededForQueue ); } else if ( _managing == MANAGING.SOHM ) { // 9 sOHMQueue = block.number.add( blocksNeededForQueue ); } else return false; emit ChangeQueued( _managing, _address ); return true; } /** @notice verify queue then set boolean in mapping @param _managing MANAGING @param _address address @param _calculator address @return bool */ function toggle( MANAGING _managing, address _address, address _calculator ) external onlyManager() returns ( bool ) { require( _address != address(0) ); bool result; if ( _managing == MANAGING.RESERVEDEPOSITOR ) { // 0 if ( requirements( reserveDepositorQueue, isReserveDepositor, _address ) ) { reserveDepositorQueue[ _address ] = 0; if( !listContains( reserveDepositors, _address ) ) { reserveDepositors.push( _address ); } } result = !isReserveDepositor[ _address ]; isReserveDepositor[ _address ] = result; } else if ( _managing == MANAGING.RESERVESPENDER ) { // 1 if ( requirements( reserveSpenderQueue, isReserveSpender, _address ) ) { reserveSpenderQueue[ _address ] = 0; if( !listContains( reserveSpenders, _address ) ) { reserveSpenders.push( _address ); } } result = !isReserveSpender[ _address ]; isReserveSpender[ _address ] = result; } else if ( _managing == MANAGING.RESERVETOKEN ) { // 2 if ( requirements( reserveTokenQueue, isReserveToken, _address ) ) { reserveTokenQueue[ _address ] = 0; if( !listContains( reserveTokens, _address ) ) { reserveTokens.push( _address ); } } result = !isReserveToken[ _address ]; isReserveToken[ _address ] = result; } else if ( _managing == MANAGING.RESERVEMANAGER ) { // 3 if ( requirements( ReserveManagerQueue, isReserveManager, _address ) ) { reserveManagers.push( _address ); ReserveManagerQueue[ _address ] = 0; if( !listContains( reserveManagers, _address ) ) { reserveManagers.push( _address ); } } result = !isReserveManager[ _address ]; isReserveManager[ _address ] = result; } else if ( _managing == MANAGING.LIQUIDITYDEPOSITOR ) { // 4 if ( requirements( LiquidityDepositorQueue, isLiquidityDepositor, _address ) ) { liquidityDepositors.push( _address ); LiquidityDepositorQueue[ _address ] = 0; if( !listContains( liquidityDepositors, _address ) ) { liquidityDepositors.push( _address ); } } result = !isLiquidityDepositor[ _address ]; isLiquidityDepositor[ _address ] = result; } else if ( _managing == MANAGING.LIQUIDITYTOKEN ) { // 5 if ( requirements( LiquidityTokenQueue, isLiquidityToken, _address ) ) { LiquidityTokenQueue[ _address ] = 0; if( !listContains( liquidityTokens, _address ) ) { liquidityTokens.push( _address ); } } result = !isLiquidityToken[ _address ]; isLiquidityToken[ _address ] = result; bondCalculator[ _address ] = _calculator; } else if ( _managing == MANAGING.LIQUIDITYMANAGER ) { // 6 if ( requirements( LiquidityManagerQueue, isLiquidityManager, _address ) ) { LiquidityManagerQueue[ _address ] = 0; if( !listContains( liquidityManagers, _address ) ) { liquidityManagers.push( _address ); } } result = !isLiquidityManager[ _address ]; isLiquidityManager[ _address ] = result; } else if ( _managing == MANAGING.DEBTOR ) { // 7 if ( requirements( debtorQueue, isDebtor, _address ) ) { debtorQueue[ _address ] = 0; if( !listContains( debtors, _address ) ) { debtors.push( _address ); } } result = !isDebtor[ _address ]; isDebtor[ _address ] = result; } else if ( _managing == MANAGING.REWARDMANAGER ) { // 8 if ( requirements( rewardManagerQueue, isRewardManager, _address ) ) { rewardManagerQueue[ _address ] = 0; if( !listContains( rewardManagers, _address ) ) { rewardManagers.push( _address ); } } result = !isRewardManager[ _address ]; isRewardManager[ _address ] = result; } else if ( _managing == MANAGING.SOHM ) { // 9 sOHMQueue = 0; sOHM = _address; result = true; } else return false; emit ChangeActivated( _managing, _address, result ); return true; } /** @notice checks requirements and returns altered structs @param queue_ mapping( address => uint ) @param status_ mapping( address => bool ) @param _address address @return bool */ function requirements( mapping( address => uint ) storage queue_, mapping( address => bool ) storage status_, address _address ) internal view returns ( bool ) { if ( !status_[ _address ] ) { require( queue_[ _address ] != 0, "Must queue" ); require( queue_[ _address ] <= block.number, "Queue not expired" ); return true; } return false; } /** @notice checks array to ensure against duplicate @param _list address[] @param _token address @return bool */ function listContains( address[] storage _list, address _token ) internal view returns ( bool ) { for( uint i = 0; i < _list.length; i++ ) { if( _list[ i ] == _token ) { return true; } } return false; } }
[{"inputs":[{"internalType":"address","name":"_RUG","type":"address"},{"internalType":"address","name":"_DAI","type":"address"},{"internalType":"address","name":"_MIM","type":"address"},{"internalType":"address","name":"_RUGDAI","type":"address"},{"internalType":"uint256","name":"_blocksNeededForQueue","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"enum OlympusTreasury.MANAGING","name":"managing","type":"uint8"},{"indexed":false,"internalType":"address","name":"activated","type":"address"},{"indexed":false,"internalType":"bool","name":"result","type":"bool"}],"name":"ChangeActivated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"enum OlympusTreasury.MANAGING","name":"managing","type":"uint8"},{"indexed":false,"internalType":"address","name":"queued","type":"address"}],"name":"ChangeQueued","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"debtor","type":"address"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"CreateDebt","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipPulled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipPushed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"debtor","type":"address"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"RepayDebt","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"totalReserves","type":"uint256"}],"name":"ReservesAudited","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ReservesManaged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"totalReserves","type":"uint256"}],"name":"ReservesUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"RewardsMinted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Withdrawal","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"LiquidityDepositorQueue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"LiquidityManagerQueue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"LiquidityTokenQueue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RUG","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"ReserveManagerQueue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"auditReserves","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"blocksNeededForQueue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"bondCalculator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"debtorBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"debtorQueue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"debtors","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_profit","type":"uint256"}],"name":"deposit","outputs":[{"internalType":"uint256","name":"send_","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"excessReserves","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_token","type":"address"}],"name":"incurDebt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isDebtor","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isLiquidityDepositor","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isLiquidityManager","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isLiquidityToken","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isReserveDepositor","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isReserveManager","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isReserveSpender","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isReserveToken","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isRewardManager","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"liquidityDepositors","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"liquidityManagers","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"liquidityTokens","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"manage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manager","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mintRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pullManagement","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner_","type":"address"}],"name":"pushManagement","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"enum OlympusTreasury.MANAGING","name":"_managing","type":"uint8"},{"internalType":"address","name":"_address","type":"address"}],"name":"queue","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceManagement","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"repayDebtWithOHM","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_token","type":"address"}],"name":"repayDebtWithReserve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"reserveDepositorQueue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"reserveDepositors","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"reserveManagers","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"reserveSpenderQueue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"reserveSpenders","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"reserveTokenQueue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"reserveTokens","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"rewardManagerQueue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"rewardManagers","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sOHM","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sOHMQueue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"enum OlympusTreasury.MANAGING","name":"_managing","type":"uint8"},{"internalType":"address","name":"_address","type":"address"},{"internalType":"address","name":"_calculator","type":"address"}],"name":"toggle","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalDebt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalReserves","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"valueOf","outputs":[{"internalType":"uint256","name":"value_","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_token","type":"address"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60c060405234801561001057600080fd5b506040516200368938038062003689833981810160405260a081101561003557600080fd5b50805160208201516040808401516060850151608090950151600080546001600160a01b031916331780825593519596949592949391926001600160a01b0392909216917fea8258f2d9ddb679928cf34b78cf645b7feda9acc828e4dd82d014eaae270eba908290a36001600160a01b0385166100b157600080fd5b606085901b6001600160601b0319166080526001600160a01b0393841660008181526003602090815260408083208054600160ff1991821681179092556002805480840182557f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace90810180546001600160a01b03199081169099179055998b1680875284872080548416851790558154808501909255990180548716909917909855958816808452600c909252822080549096168517909555600b8054948501815581527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db9909301805490911690931790925560a08290529190921691906134679062000222903980611db6528061200f528061206b52806120c75280612125528061218a52806121e6528061224452806122a252806122fe528061235a525080610a355280610dd75280610ee85280610f9c52806113ac52806119425280611c7e5280611f7252506134676000f3fe608060405234801561001057600080fd5b50600436106102f05760003560e01c806387d67dff1161019d578063d031370b116100e9578063ebd83cd8116100a2578063fbfd393b1161007c578063fbfd393b146108ef578063fc7b9c1814610926578063fd1ec0101461092e578063fff9ee871461094b576102f0565b8063ebd83cd81461087d578063ee4e19a1146108a3578063fb939588146108c9576102f0565b8063d031370b146107cf578063d07f390f146107ec578063d796ffb8146107f4578063df89b34414610820578063e4f7b6fd14610846578063e83afee31461084e576102f0565b8063a569e57111610156578063b5b1d56011610130578063b5b1d56014610734578063bc157ac114610751578063c24ad43e14610783578063cd85641a146107a9576102f0565b8063a569e571146106c2578063ab319c9a146106e8578063b1bd38b01461070e576102f0565b806387d67dff146106055780638f59c7271461062b5780638f6a7b57146106515780638f840ddd1461066e578063932cc8c314610676578063a1210a2d1461069c576102f0565b80632789de371161025c5780635a96ac0a116102155780636b5e40a7116101ef5780636b5e40a71461058857806370a0502a146105a5578063788c6c01146105c2578063869871bf146105e8576102f0565b80635a96ac0a1461052e57806368c31dd5146105365780636a20de921461055c576102f0565b80632789de37146104ad5780632b7ce500146104b5578063437f7912146104bd57806346f68ee9146104da578063481c6a75146105005780634e83423c14610508576102f0565b80630f70431f116102ae5780630f70431f146103d0578063124154ca146103ed57806312422d231461042757806315079925146104535780631af4da701461045b5780631eec5a9a14610481576102f0565b8062f714ce146102f55780630619aff114610323578063089208d81461035c578063094a8651146103645780630b0eee301461039c5780630c3513a8146103c8575b600080fd5b6103216004803603604081101561030b57600080fd5b50803590602001356001600160a01b0316610971565b005b6103406004803603602081101561033957600080fd5b5035610b48565b604080516001600160a01b039092168252519081900360200190f35b610321610b72565b61038a6004803603602081101561037a57600080fd5b50356001600160a01b0316610c09565b60408051918252519081900360200190f35b610321600480360360408110156103b257600080fd5b506001600160a01b038135169060200135610c1b565b61038a610dca565b610321600480360360208110156103e657600080fd5b5035610e6e565b6104136004803603602081101561040357600080fd5b50356001600160a01b0316610fed565b604080519115158252519081900360200190f35b6103216004803603604081101561043d57600080fd5b50803590602001356001600160a01b0316611002565b6103406112d2565b6103406004803603602081101561047157600080fd5b50356001600160a01b03166112e1565b61038a6004803603604081101561049757600080fd5b506001600160a01b0381351690602001356112fc565b61038a6114f0565b6103216114f6565b610340600480360360208110156104d357600080fd5b50356116b9565b610321600480360360208110156104f057600080fd5b50356001600160a01b03166116c9565b6103406117b6565b6104136004803603602081101561051e57600080fd5b50356001600160a01b03166117c5565b6103216117da565b6104136004803603602081101561054c57600080fd5b50356001600160a01b0316611884565b6103216004803603604081101561057257600080fd5b506001600160a01b038135169060200135611899565b6103406004803603602081101561059e57600080fd5b5035611a13565b610340600480360360208110156105bb57600080fd5b5035611a23565b61038a600480360360208110156105d857600080fd5b50356001600160a01b0316611a33565b610340600480360360208110156105fe57600080fd5b5035611a45565b6104136004803603602081101561061b57600080fd5b50356001600160a01b0316611a55565b61038a6004803603602081101561064157600080fd5b50356001600160a01b0316611a6a565b6103406004803603602081101561066757600080fd5b5035611a7c565b61038a611a8c565b61038a6004803603602081101561068c57600080fd5b50356001600160a01b0316611a92565b610413600480360360208110156106b257600080fd5b50356001600160a01b0316611aa4565b610413600480360360208110156106d857600080fd5b50356001600160a01b0316611ab9565b61038a600480360360208110156106fe57600080fd5b50356001600160a01b0316611ace565b61038a6004803603602081101561072457600080fd5b50356001600160a01b0316611ae0565b6103406004803603602081101561074a57600080fd5b5035611af2565b61038a6004803603606081101561076757600080fd5b508035906001600160a01b036020820135169060400135611b02565b61038a6004803603602081101561079957600080fd5b50356001600160a01b0316611d80565b61038a600480360360208110156107bf57600080fd5b50356001600160a01b0316611d92565b610340600480360360208110156107e557600080fd5b5035611da4565b61038a611db4565b6103216004803603604081101561080a57600080fd5b50803590602001356001600160a01b0316611dd8565b6104136004803603602081101561083657600080fd5b50356001600160a01b0316611f5b565b610340611f70565b6104136004803603604081101561086457600080fd5b50803560ff1690602001356001600160a01b0316611f94565b6104136004803603602081101561089357600080fd5b50356001600160a01b03166123df565b610413600480360360208110156108b957600080fd5b50356001600160a01b03166123f4565b61038a600480360360208110156108df57600080fd5b50356001600160a01b0316612409565b6104136004803603606081101561090557600080fd5b5060ff813516906001600160a01b036020820135811691604001351661241b565b61038a612cd7565b6103406004803603602081101561094457600080fd5b5035612cdd565b61038a6004803603602081101561096157600080fd5b50356001600160a01b0316612ced565b6001600160a01b03811660009081526003602052604090205460ff166109cd576040805162461bcd60e51b815260206004820152600c60248201526b139bdd081858d8d95c1d195960a21b604482015290519081900360640190fd5b3360009081526009602052604090205460ff161515600114610a25576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b6000610a3182846112fc565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166379cc679033836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015610aaa57600080fd5b505af1158015610abe573d6000803e3d6000fd5b5050602154610ad09250905082612cff565b60218190556040516000805160206133e883398151915290600090a2610b006001600160a01b0383163385612d41565b604080518481526020810183905281516001600160a01b038516927fdf273cb619d95419a9cd0ec88123a0538c85064229baa6363788f743fff90deb928290030190a2505050565b60128181548110610b5857600080fd5b6000918252602090912001546001600160a01b0316905081565b6000546001600160a01b03163314610bbf576040805162461bcd60e51b815260206004820181905260248201526000805160206133c8833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907fea8258f2d9ddb679928cf34b78cf645b7feda9acc828e4dd82d014eaae270eba908390a3600080546001600160a01b0319169055565b601b6020526000908152604090205481565b6001600160a01b0382166000908152600c602052604090205460ff1615610c94573360009081526016602052604090205460ff16610c8f576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b610ce7565b3360009081526013602052604090205460ff16610ce7576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b6000610cf383836112fc565b9050610cfd610dca565b811115610d49576040805162461bcd60e51b8152602060048201526015602482015274496e73756666696369656e7420726573657276657360581b604482015290519081900360640190fd5b602154610d569082612cff565b60218190556040516000805160206133e883398151915290600090a2610d866001600160a01b0384163384612d41565b6040805183815290516001600160a01b038516917f2bb2640731848fe9820ba48dbc978c1fc9bbd5f11b948bfab05b7dee3378fd80919081900360200190a2505050565b6000610e69610e606022547f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610e2e57600080fd5b505afa158015610e42573d6000803e3d6000fd5b505050506040513d6020811015610e5857600080fd5b505190612cff565b60215490612cff565b905090565b3360009081526019602052604090205460ff16610ec1576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b6040805163079cc67960e41b81523360048201526024810183905290516001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916379cc679091604480830192600092919082900301818387803b158015610f2f57600080fd5b505af1158015610f43573d6000803e3d6000fd5b5050336000908152601b6020526040902054610f629250905082612cff565b336000908152601b6020526040902055602254610f7f9082612cff565b602255604080518281526020810183905281516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169233927fc6d98eecfc9c78ab62c89a82950079b54874749f1f6f24090f7acc758bc2f309929081900390910190a350565b60066020526000908152604090205460ff1681565b3360009081526019602052604090205460ff16611055576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b6001600160a01b03811660009081526003602052604090205460ff166110b1576040805162461bcd60e51b815260206004820152600c60248201526b139bdd081858d8d95c1d195960a21b604482015290519081900360640190fd5b60006110bd82846112fc565b601f54604080516370a0823160e01b815233600482015290519293506000926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b15801561110e57600080fd5b505afa158015611122573d6000803e3d6000fd5b505050506040513d602081101561113857600080fd5b5051336000908152601b602052604081205491925090611159908390612cff565b9050808311156111a5576040805162461bcd60e51b8152602060048201526012602482015271115e18d959591cc81919589d081b1a5b5a5d60721b604482015290519081900360640190fd5b336000908152601b60205260409020546111bf9084612d98565b336000908152601b60205260409020556022546111dc9084612d98565b6022556021546111ec9084612cff565b60218190556040516000805160206133e883398151915290600090a26040805163a9059cbb60e01b81523360048201526024810187905290516001600160a01b0386169163a9059cbb9160448083019260209291908290030181600087803b15801561125757600080fd5b505af115801561126b573d6000803e3d6000fd5b505050506040513d602081101561128157600080fd5b5050604080518681526020810185905281516001600160a01b0387169233927f7e1a939bed137a819b5d2979822c67f877689f7a863d5e4cb57cdca97b2977d6929081900390910190a35050505050565b601f546001600160a01b031681565b6011602052600090815260409020546001600160a01b031681565b6001600160a01b03821660009081526003602052604081205460ff161561143957611432836001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561135957600080fd5b505afa15801561136d573d6000803e3d6000fd5b505050506040513d602081101561138357600080fd5b50516040805163313ce56760e01b8152905160ff909216600a0a9161142c916001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163313ce56791600480820192602092909190829003018186803b1580156113f357600080fd5b505afa158015611407573d6000803e3d6000fd5b505050506040513d602081101561141d57600080fd5b5051859060ff16600a0a612df2565b90612e4b565b90506114ea565b6001600160a01b0383166000908152600c602052604090205460ff16156114ea576001600160a01b03808416600081815260116020908152604091829020548251634249719f60e01b815260048101949094526024840187905291519190931692634249719f9260448082019391829003018186803b1580156114bb57600080fd5b505afa1580156114cf573d6000803e3d6000fd5b505050506040513d60208110156114e557600080fd5b505190505b92915050565b60205481565b6000546001600160a01b03163314611543576040805162461bcd60e51b815260206004820181905260248201526000805160206133c8833981519152604482015290519081900360640190fd5b6000805b60025481101561161b5761161161160a6002838154811061156457fe5b600091825260209091200154600280546001600160a01b03909216918590811061158a57fe5b60009182526020918290200154604080516370a0823160e01b815230600482015290516001600160a01b03909216926370a0823192602480840193829003018186803b1580156115d957600080fd5b505afa1580156115ed573d6000803e3d6000fd5b505050506040513d602081101561160357600080fd5b50516112fc565b8390612d98565b9150600101611547565b5060005b600b5481101561166c5761166261160a600b838154811061163c57fe5b600091825260209091200154600b80546001600160a01b03909216918590811061158a57fe5b915060010161161f565b50602181905560405181906000805160206133e883398151915290600090a260405181907fec691f09f6924b27932253f85caf99bacc30360cc0e50a1cc4d2acc24601446690600090a250565b60088181548110610b5857600080fd5b6000546001600160a01b03163314611716576040805162461bcd60e51b815260206004820181905260248201526000805160206133c8833981519152604482015290519081900360640190fd5b6001600160a01b03811661175b5760405162461bcd60e51b815260040180806020018281038252602681526020018061335f6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917fea8258f2d9ddb679928cf34b78cf645b7feda9acc828e4dd82d014eaae270eba91a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031690565b601d6020526000908152604090205460ff1681565b6001546001600160a01b031633146118235760405162461bcd60e51b81526004018080602001828103825260228152602001806133856022913960400191505060405180910390fd5b600154600080546040516001600160a01b0393841693909116917faa151555690c956fc3ea32f106bb9f119b5237a061eaa8557cff3e51e3792c8d91a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b60036020526000908152604090205460ff1681565b336000908152601d602052604090205460ff166118ec576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b6118f4610dca565b811115611940576040805162461bcd60e51b8152602060048201526015602482015274496e73756666696369656e7420726573657276657360581b604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166340c10f1983836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b1580156119b757600080fd5b505af11580156119cb573d6000803e3d6000fd5b50506040805184815290516001600160a01b03861693503392507ffa8ccab40e7da8146c2304cd0950334fd30a6ba093abe86261aa13911fed849c9181900360200190a35050565b60058181548110610b5857600080fd5b60158181548110610b5857600080fd5b60046020526000908152604090205481565b60188181548110610b5857600080fd5b60096020526000908152604090205460ff1681565b600d6020526000908152604090205481565b600e8181548110610b5857600080fd5b60215481565b60076020526000908152604090205481565b600f6020526000908152604090205460ff1681565b600c6020526000908152604090205460ff1681565b60176020526000908152604090205481565b60146020526000908152604090205481565b601c8181548110610b5857600080fd5b6001600160a01b03821660009081526003602052604081205460ff1680611b4157506001600160a01b0383166000908152600c602052604090205460ff165b611b81576040805162461bcd60e51b815260206004820152600c60248201526b139bdd081858d8d95c1d195960a21b604482015290519081900360640190fd5b611b966001600160a01b038416333087612e8d565b6001600160a01b03831660009081526003602052604090205460ff1615611c0f573360009081526006602052604090205460ff16611c0a576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b611c62565b336000908152600f602052604090205460ff16611c62576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b6000611c6e84866112fc565b9050611c7a8184612cff565b91507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166340c10f1933846040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015611cf357600080fd5b505af1158015611d07573d6000803e3d6000fd5b5050602154611d199250905082612d98565b60218190556040516000805160206133e883398151915290600090a2604080518681526020810183905281516001600160a01b038716927f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a15928290030190a2509392505050565b600a6020526000908152604090205481565b601a6020526000908152604090205481565b60028181548110610b5857600080fd5b7f000000000000000000000000000000000000000000000000000000000000000081565b3360009081526019602052604090205460ff16611e2b576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b6001600160a01b03811660009081526003602052604090205460ff16611e87576040805162461bcd60e51b815260206004820152600c60248201526b139bdd081858d8d95c1d195960a21b604482015290519081900360640190fd5b611e9c6001600160a01b038216333085612e8d565b6000611ea882846112fc565b336000908152601b6020526040902054909150611ec59082612cff565b336000908152601b6020526040902055602254611ee29082612cff565b602255602154611ef29082612d98565b60218190556040516000805160206133e883398151915290600090a2604080518481526020810183905281516001600160a01b0385169233927fc6d98eecfc9c78ab62c89a82950079b54874749f1f6f24090f7acc758bc2f309929081900390910190a3505050565b60166020526000908152604090205460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b600080546001600160a01b03163314611fe2576040805162461bcd60e51b815260206004820181905260248201526000805160206133c8833981519152604482015290519081900360640190fd5b6001600160a01b038216611ff557600080fd5b600083600981111561200357fe5b141561205157612033437f0000000000000000000000000000000000000000000000000000000000000000612d98565b6001600160a01b03831660009081526007602052604090205561238e565b600183600981111561205f57fe5b14156120ad5761208f437f0000000000000000000000000000000000000000000000000000000000000000612d98565b6001600160a01b0383166000908152600a602052604090205561238e565b60028360098111156120bb57fe5b1415612109576120eb437f0000000000000000000000000000000000000000000000000000000000000000612d98565b6001600160a01b03831660009081526004602052604090205561238e565b600383600981111561211757fe5b14156121705761215261214b7f00000000000000000000000000000000000000000000000000000000000000006002612df2565b4390612d98565b6001600160a01b03831660009081526014602052604090205561238e565b600483600981111561217e57fe5b14156121cc576121ae437f0000000000000000000000000000000000000000000000000000000000000000612d98565b6001600160a01b03831660009081526010602052604090205561238e565b60058360098111156121da57fe5b14156122285761220a437f0000000000000000000000000000000000000000000000000000000000000000612d98565b6001600160a01b0383166000908152600d602052604090205561238e565b600683600981111561223657fe5b14156122885761226a61214b7f00000000000000000000000000000000000000000000000000000000000000006002612df2565b6001600160a01b03831660009081526017602052604090205561238e565b600783600981111561229657fe5b14156122e4576122c6437f0000000000000000000000000000000000000000000000000000000000000000612d98565b6001600160a01b0383166000908152601a602052604090205561238e565b60088360098111156122f257fe5b141561234057612322437f0000000000000000000000000000000000000000000000000000000000000000612d98565b6001600160a01b0383166000908152601e602052604090205561238e565b600983600981111561234e57fe5b14156123865761237e437f0000000000000000000000000000000000000000000000000000000000000000612d98565b60205561238e565b5060006114ea565b82600981111561239a57fe5b604080516001600160a01b038516815290517f0e4f2c4b5bc209d509bc3d49348c787fefadc66a79351b470599ac0f5be52eaf9181900360200190a250600192915050565b60136020526000908152604090205460ff1681565b60196020526000908152604090205460ff1681565b601e6020526000908152604090205481565b600080546001600160a01b03163314612469576040805162461bcd60e51b815260206004820181905260248201526000805160206133c8833981519152604482015290519081900360640190fd5b6001600160a01b03831661247c57600080fd5b60008085600981111561248b57fe5b14156125475761249e6007600686612eed565b15612517576001600160a01b0384166000908152600760205260408120556124c7600585612fd7565b61251757600580546001810182556000919091527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db00180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152600660205260409020805460ff81161560ff199091168117909155612c79565b600185600981111561255557fe5b141561261157612568600a600986612eed565b156125e1576001600160a01b0384166000908152600a6020526040812055612591600885612fd7565b6125e157600880546001810182556000919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152600960205260409020805460ff81161560ff199091168117909155612c79565b600285600981111561261f57fe5b14156126db576126326004600386612eed565b156126ab576001600160a01b03841660009081526004602052604081205561265b600285612fd7565b6126ab57600280546001810182556000919091527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152600360205260409020805460ff81161560ff199091168117909155612c79565b60038560098111156126e957fe5b14156127e2576126fc6014601386612eed565b156127b257601280546001810182557fbb8a6a4669ba250d26cd7a459eca9d215f8307e33aebe50379bc5a3617ec34440180546001600160a01b0319166001600160a01b0387169081179091556000908152601460205260408120556127629085612fd7565b6127b257601280546001810182556000919091527fbb8a6a4669ba250d26cd7a459eca9d215f8307e33aebe50379bc5a3617ec34440180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152601360205260409020805460ff81161560ff199091168117909155612c79565b60048560098111156127f057fe5b14156128e9576128036010600f86612eed565b156128b957600e80546001810182557fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fd0180546001600160a01b0319166001600160a01b0387169081179091556000908152601060205260408120556128699085612fd7565b6128b957600e80546001810182556000919091527fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fd0180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152600f60205260409020805460ff81161560ff199091168117909155612c79565b60058560098111156128f757fe5b14156129d55761290a600d600c86612eed565b15612983576001600160a01b0384166000908152600d6020526040812055612933600b85612fd7565b61298357600b80546001810182556000919091527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b038381166000908152600c60209081526040808320805460ff81161560ff199091168117909155601190925290912080546001600160a01b03191692851692909217909155612c79565b60068560098111156129e357fe5b1415612a9f576129f66017601686612eed565b15612a6f576001600160a01b038416600090815260176020526040812055612a1f601585612fd7565b612a6f57601580546001810182556000919091527f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec4750180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152601660205260409020805460ff81161560ff199091168117909155612c79565b6007856009811115612aad57fe5b1415612b6957612ac0601a601986612eed565b15612b39576001600160a01b0384166000908152601a6020526040812055612ae9601885612fd7565b612b3957601880546001810182556000919091527fb13d2d76d1f4b7be834882e410b3e3a8afaf69f83600ae24db354391d2378d2e0180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152601960205260409020805460ff81161560ff199091168117909155612c79565b6008856009811115612b7757fe5b1415612c3357612b8a601e601d86612eed565b15612c03576001600160a01b0384166000908152601e6020526040812055612bb3601c85612fd7565b612c0357601c80546001810182556000919091527f0e4562a10381dec21b205ed72637e6b1b523bdd0e4d4d50af5cd23dd4500a2110180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152601d60205260409020805460ff81161560ff199091168117909155612c79565b6009856009811115612c4157fe5b1415612c6f57506000602055601f80546001600160a01b0319166001600160a01b0385161790556001612c79565b6000915050612cd0565b846009811115612c8557fe5b604080516001600160a01b0387168152831515602082015281517f0dcacb7e392f3d6a216ed2660e3dcfd40b7793d33591db2ba185a6b8e44fc477929181900390910190a260019150505b9392505050565b60225481565b600b8181548110610b5857600080fd5b60106020526000908152604090205481565b6000612cd083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613027565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052612d939084906130be565b505050565b600082820183811015612cd0576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600082612e01575060006114ea565b82820282848281612e0e57fe5b0414612cd05760405162461bcd60e51b81526004018080602001828103825260218152602001806133a76021913960400191505060405180910390fd5b6000612cd083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061316f565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052612ee79085906130be565b50505050565b6001600160a01b03811660009081526020839052604081205460ff16612fcd576001600160a01b038216600090815260208590526040902054612f64576040805162461bcd60e51b815260206004820152600a6024820152694d75737420717565756560b01b604482015290519081900360640190fd5b6001600160a01b038216600090815260208590526040902054431015612fc5576040805162461bcd60e51b8152602060048201526011602482015270145d595d59481b9bdd08195e1c1a5c9959607a1b604482015290519081900360640190fd5b506001612cd0565b5060009392505050565b6000805b8354811015612fcd57826001600160a01b0316848281548110612ffa57fe5b6000918252602090912001546001600160a01b0316141561301f5760019150506114ea565b600101612fdb565b600081848411156130b65760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561307b578181015183820152602001613063565b50505050905090810190601f1680156130a85780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6060613113826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166131d49092919063ffffffff16565b805190915015612d935780806020019051602081101561313257600080fd5b5051612d935760405162461bcd60e51b815260040180806020018281038252602a815260200180613408602a913960400191505060405180910390fd5b600081836131be5760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561307b578181015183820152602001613063565b5060008385816131ca57fe5b0495945050505050565b60606131e384846000856131eb565b949350505050565b60606131f685613358565b613247576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b602083106132865780518252601f199092019160209182019101613267565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146132e8576040519150601f19603f3d011682016040523d82523d6000602084013e6132ed565b606091505b509150915081156133015791506131e39050565b8051156133115780518082602001fd5b60405162461bcd60e51b815260206004820181815286516024840152865187939192839260440191908501908083836000831561307b578181015183820152602001613063565b3b15159056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734f776e61626c653a206d757374206265206e6577206f776e657220746f2070756c6c536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657293bb8edd35984706eee1b92541281f7f62d33c01c5b2ec0929a113603bd21d665361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a264697066735822122054a6f27ef5b8917fe056573daf7f01c0a76ef2058429267fba261bc457ba439364736f6c63430007050033000000000000000000000000b8ef3a190b68175000b74b4160d325fd5024760e000000000000000000000000d586e7f844cea2f87f50152665bcbc2c279d8d70000000000000000000000000130966628846bfd36ff31a822705796e8cb8c18d000000000000000000000000c0123c360f000338ce3b54b600697f3584054bc10000000000000000000000000000000000000000000000000000000000000000
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000b8ef3a190b68175000b74b4160d325fd5024760e000000000000000000000000d586e7f844cea2f87f50152665bcbc2c279d8d70000000000000000000000000130966628846bfd36ff31a822705796e8cb8c18d000000000000000000000000c0123c360f000338ce3b54b600697f3584054bc10000000000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _RUG (address): 0xb8ef3a190b68175000b74b4160d325fd5024760e
Arg [1] : _DAI (address): 0xd586e7f844cea2f87f50152665bcbc2c279d8d70
Arg [2] : _MIM (address): 0x130966628846bfd36ff31a822705796e8cb8c18d
Arg [3] : _RUGDAI (address): 0xc0123c360f000338ce3b54b600697f3584054bc1
Arg [4] : _blocksNeededForQueue (uint256): 0
-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 000000000000000000000000b8ef3a190b68175000b74b4160d325fd5024760e
Arg [1] : 000000000000000000000000d586e7f844cea2f87f50152665bcbc2c279d8d70
Arg [2] : 000000000000000000000000130966628846bfd36ff31a822705796e8cb8c18d
Arg [3] : 000000000000000000000000c0123c360f000338ce3b54b600697f3584054bc1
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000000
Deployed ByteCode Sourcemap
6752:19311:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12142:581;;;;;;;;;;;;;;;;-1:-1:-1;12142:581:0;;;;;;-1:-1:-1;;;;;12142:581:0;;:::i;:::-;;9185:32;;;;;;;;;;;;;;;;-1:-1:-1;9185:32:0;;:::i;:::-;;;;-1:-1:-1;;;;;9185:32:0;;;;;;;;;;;;;;4143:159;;;:::i;9897:47::-;;;;;;;;;;;;;;;;-1:-1:-1;9897:47:0;-1:-1:-1;;;;;9897:47:0;;:::i;:::-;;;;;;;;;;;;;;;;15177:626;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;15177:626:0;;;;;;;;:::i;16336:146::-;;;:::i;14656:376::-;;;;;;;;;;;;;;;;-1:-1:-1;14656:376:0;;:::i;8207:52::-;;;;;;;;;;;;;;;;-1:-1:-1;8207:52:0;-1:-1:-1;;;;;8207:52:0;;:::i;:::-;;;;;;;;;;;;;;;;;;12868:859;;;;;;;;;;;;;;;;-1:-1:-1;12868:859:0;;;;;;-1:-1:-1;;;;;12868:859:0;;:::i;10194:19::-;;;:::i;9086:51::-;;;;;;;;;;;;;;;;-1:-1:-1;9086:51:0;-1:-1:-1;;;;;9086:51:0;;:::i;17466:458::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;17466:458:0;;;;;;;;:::i;10220:21::-;;;:::i;16635:668::-;;;:::i;8360:32::-;;;;;;;;;;;;;;;;-1:-1:-1;8360:32:0;;:::i;4310:261::-;;;;;;;;;;;;;;;;-1:-1:-1;4310:261:0;-1:-1:-1;;;;;4310:261:0;;:::i;3916:90::-;;;:::i;10047:49::-;;;;;;;;;;;;;;;;-1:-1:-1;10047:49:0;-1:-1:-1;;;;;10047:49:0;;:::i;4583:221::-;;;:::i;7965:48::-;;;;;;;;;;;;;;;;-1:-1:-1;7965:48:0;-1:-1:-1;;;;;7965:48:0;;:::i;15884:343::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;15884:343:0;;;;;;;;:::i;8110:34::-;;;;;;;;;;;;;;;;-1:-1:-1;8110:34:0;;:::i;9429:::-;;;;;;;;;;;;;;;;-1:-1:-1;9429:34:0;;:::i;8020:51::-;;;;;;;;;;;;;;;;-1:-1:-1;8020:51:0;-1:-1:-1;;;;;8020:51:0;;:::i;9679:24::-;;;;;;;;;;;;;;;;-1:-1:-1;9679:24:0;;:::i;8455:50::-;;;;;;;;;;;;;;;;-1:-1:-1;8455:50:0;-1:-1:-1;;;;;8455:50:0;;:::i;8738:53::-;;;;;;;;;;;;;;;;-1:-1:-1;8738:53:0;-1:-1:-1;;;;;8738:53:0;;:::i;8830:36::-;;;;;;;;;;;;;;;;-1:-1:-1;8830:36:0;;:::i;10287:25::-;;;:::i;8266:55::-;;;;;;;;;;;;;;;;-1:-1:-1;8266:55:0;-1:-1:-1;;;;;8266:55:0;;:::i;8929:54::-;;;;;;;;;;;;;;;;-1:-1:-1;8929:54:0;-1:-1:-1;;;;;8929:54:0;;:::i;8681:50::-;;;;;;;;;;;;;;;;-1:-1:-1;8681:50:0;-1:-1:-1;;;;;8681:50:0;;:::i;9585:55::-;;;;;;;;;;;;;;;;-1:-1:-1;9585:55:0;-1:-1:-1;;;;;9585:55:0;;:::i;9337:53::-;;;;;;;;;;;;;;;;-1:-1:-1;9337:53:0;-1:-1:-1;;;;;9337:53:0;;:::i;9953:31::-;;;;;;;;;;;;;;;;-1:-1:-1;9953:31:0;;:::i;11116:875::-;;;;;;;;;;;;;;;;-1:-1:-1;11116:875:0;;;-1:-1:-1;;;;;11116:875:0;;;;;;;;;;:::i;8512:53::-;;;;;;;;;;;;;;;;-1:-1:-1;8512:53:0;-1:-1:-1;;;;;8512:53:0;;:::i;9815:45::-;;;;;;;;;;;;;;;;-1:-1:-1;9815:45:0;-1:-1:-1;;;;;9815:45:0;;:::i;7890:30::-;;;;;;;;;;;;;;;;-1:-1:-1;7890:30:0;;:::i;7839:42::-;;;:::i;13894:631::-;;;;;;;;;;;;;;;;-1:-1:-1;13894:631:0;;;;;;-1:-1:-1;;;;;13894:631:0;;:::i;9526:52::-;;;;;;;;;;;;;;;;-1:-1:-1;9526:52:0;-1:-1:-1;;;;;9526:52:0;;:::i;7804:28::-;;;:::i;18100:1785::-;;;;;;;;;;;;;;;;-1:-1:-1;18100:1785:0;;;;;;;;-1:-1:-1;;;;;18100:1785:0;;:::i;9280:50::-;;;;;;;;;;;;;;;;-1:-1:-1;9280:50:0;-1:-1:-1;;;;;9280:50:0;;:::i;9766:42::-;;;;;;;;;;;;;;;;-1:-1:-1;9766:42:0;-1:-1:-1;;;;;9766:42:0;;:::i;10103:52::-;;;;;;;;;;;;;;;;-1:-1:-1;10103:52:0;-1:-1:-1;;;;;10103:52:0;;:::i;20095:4833::-;;;;;;;;;;;;;;;;-1:-1:-1;20095:4833:0;;;;;-1:-1:-1;;;;;20095:4833:0;;;;;;;;;;;;:::i;10352:21::-;;;:::i;8604:32::-;;;;;;;;;;;;;;;;-1:-1:-1;8604:32:0;;:::i;8990:57::-;;;;;;;;;;;;;;;;-1:-1:-1;8990:57:0;-1:-1:-1;;;;;8990:57:0;;:::i;12142:581::-;-1:-1:-1;;;;;12221:24:0;;;;;;:14;:24;;;;;;;;12212:51;;;;;-1:-1:-1;;;12212:51:0;;;;;;;;;;;;-1:-1:-1;;;12212:51:0;;;;;;;;;;;;;;;12346:10;12328:30;;;;:16;:30;;;;;;;;:38;;:30;:38;12319:65;;;;;-1:-1:-1;;;12319:65:0;;;;;;;;;;;;-1:-1:-1;;;12319:65:0;;;;;;;;;;;;;;;12397:10;12410:26;12419:6;12427:7;12410;:26::i;:::-;12397:39;;12458:3;-1:-1:-1;;;;;12447:25:0;;12474:10;12486:5;12447:46;;;;;;;;;;;;;-1:-1:-1;;;;;12447:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;12522:13:0;;:26;;-1:-1:-1;12522:13:0;-1:-1:-1;12541:5:0;12522:17;:26::i;:::-;12506:13;:42;;;12564:32;;-1:-1:-1;;;;;;;;;;;12564:32:0;;;;12609:52;-1:-1:-1;;;;;12609:29:0;;12640:10;12652:7;12609:29;:52::i;:::-;12679:36;;;;;;;;;;;;;;-1:-1:-1;;;;;12679:36:0;;;;;;;;;;;12142:581;;;:::o;9185:32::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9185:32:0;;-1:-1:-1;9185:32:0;:::o;4143:159::-;4057:6;;-1:-1:-1;;;;;4057:6:0;4067:10;4057:20;4048:67;;;;;-1:-1:-1;;;4048:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;4048:67:0;;;;;;;;;;;;;;;4260:1:::1;4244:6:::0;;4227:37:::1;::::0;-1:-1:-1;;;;;4244:6:0;;::::1;::::0;4227:37:::1;::::0;4260:1;;4227:37:::1;4292:1;4275:19:::0;;-1:-1:-1;;;;;;4275:19:0::1;::::0;;4143:159::o;9897:47::-;;;;;;;;;;;;;:::o;15177:626::-;-1:-1:-1;;;;;15249:26:0;;;;;;:16;:26;;;;;;;;15245:209;;;15322:10;15302:32;;;;:18;:32;;;;;;;;15293:59;;;;;-1:-1:-1;;;15293:59:0;;;;;;;;;;;;-1:-1:-1;;;15293:59:0;;;;;;;;;;;;;;;15245:209;;;15412:10;15394:30;;;;:16;:30;;;;;;;;15385:57;;;;;-1:-1:-1;;;15385:57:0;;;;;;;;;;;;-1:-1:-1;;;15385:57:0;;;;;;;;;;;;;;;15466:10;15479:24;15487:6;15495:7;15479;:24::i;:::-;15466:37;;15532:16;:14;:16::i;:::-;15523:5;:25;;15514:61;;;;;-1:-1:-1;;;15514:61:0;;;;;;;;;;;;-1:-1:-1;;;15514:61:0;;;;;;;;;;;;;;;15604:13;;:26;;15623:5;15604:17;:26::i;:::-;15588:13;:42;;;15646:32;;-1:-1:-1;;;;;;;;;;;15646:32:0;;;;15691:52;-1:-1:-1;;;;;15691:29:0;;15722:10;15734:7;15691:29;:52::i;:::-;15761:34;;;;;;;;-1:-1:-1;;;;;15761:34:0;;;;;;;;;;;;;15177:626;;;:::o;16336:146::-;16384:4;16409:65;16428:44;16461:9;;16436:3;-1:-1:-1;;;;;16428:25:0;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16428:27:0;;:31;:44::i;:::-;16409:13;;;:17;:65::i;:::-;16402:72;;16336:146;:::o;14656:376::-;14737:10;14727:22;;;;:8;:22;;;;;;;;14718:49;;;;;-1:-1:-1;;;14718:49:0;;;;;;;;;;;;-1:-1:-1;;;14718:49:0;;;;;;;;;;;;;;;14780:48;;;-1:-1:-1;;;14780:48:0;;14807:10;14780:48;;;;;;;;;;;;-1:-1:-1;;;;;14791:3:0;14780:25;;;;:48;;;;;-1:-1:-1;;14780:48:0;;;;;;;-1:-1:-1;14780:25:0;:48;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;14886:10:0;14871:27;;;;:13;:27;;;;;;:42;;-1:-1:-1;14871:27:0;-1:-1:-1;14904:7:0;14871:31;:42::i;:::-;14856:10;14841:27;;;;:13;:27;;;;;:72;14936:9;;:24;;14951:7;14936:13;:24::i;:::-;14924:9;:36;14978:46;;;;;;;;;;;;;;-1:-1:-1;;;;;15001:3:0;14978:46;;14989:10;;14978:46;;;;;;;;;;;14656:376;:::o;8207:52::-;;;;;;;;;;;;;;;:::o;12868:859::-;12958:10;12948:22;;;;:8;:22;;;;;;;;12939:49;;;;;-1:-1:-1;;;12939:49:0;;;;;;;;;;;;-1:-1:-1;;;12939:49:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;13008:24:0;;;;;;:14;:24;;;;;;;;12999:51;;;;;-1:-1:-1;;;12999:51:0;;;;;;;;;;;;-1:-1:-1;;;12999:51:0;;;;;;;;;;;;;;;13063:10;13076:26;13085:6;13093:7;13076;:26::i;:::-;13142:4;;13134:38;;;-1:-1:-1;;;13134:38:0;;13160:10;13134:38;;;;;;13063:39;;-1:-1:-1;13115:16:0;;-1:-1:-1;;;;;13142:4:0;;;;13134:24;;:38;;;;;;;;;;;;;;;13142:4;13134:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13134:38:0;13273:10;13220:18;13258:27;;;:13;13134:38;13258:27;;;;;13134:38;;-1:-1:-1;13220:18:0;13241:46;;13134:38;;13241:15;:46::i;:::-;13220:67;;13316:13;13307:5;:22;;13298:55;;;;;-1:-1:-1;;;13298:55:0;;;;;;;;;;;;-1:-1:-1;;;13298:55:0;;;;;;;;;;;;;;;13411:10;13396:27;;;;:13;:27;;;;;;:40;;13429:5;13396:31;:40::i;:::-;13381:10;13366:27;;;;:13;:27;;;;;:70;13459:9;;:22;;13474:5;13459:13;:22::i;:::-;13447:9;:34;13510:13;;:26;;13529:5;13510:17;:26::i;:::-;13494:13;:42;;;13552:32;;-1:-1:-1;;;;;;;;;;;13552:32:0;;;;13597:48;;;-1:-1:-1;;;13597:48:0;;13624:10;13597:48;;;;;;;;;;;;-1:-1:-1;;;;;13597:25:0;;;;;:48;;;;;;;;;;;;;;-1:-1:-1;13597:25:0;:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;13671:48:0;;;;;;13597;13671;;;;;;;-1:-1:-1;;;;;13671:48:0;;;13683:10;;13671:48;;;;;;;;;;;12868:859;;;;;:::o;10194:19::-;;;-1:-1:-1;;;;;10194:19:0;;:::o;9086:51::-;;;;;;;;;;;;-1:-1:-1;;;;;9086:51:0;;:::o;17466:458::-;-1:-1:-1;;;;;17567:24:0;;17537:11;17567:24;;;:14;:24;;;;;;;;17562:355;;;17671:86;17736:6;-1:-1:-1;;;;;17728:25:0;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17728:27:0;17690:24;;;-1:-1:-1;;;17690:24:0;;;;17722:33;;;;:2;:33;;17671:45;;-1:-1:-1;;;;;17698:3:0;17690:22;;;;:24;;;;;17728:27;;17690:24;;;;;;;;:22;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17690:24:0;17671:7;;17684:30;;:2;:30;17671:11;:45::i;:::-;:49;;:86::i;:::-;17662:95;;17562:355;;;-1:-1:-1;;;;;17780:26:0;;;;;;:16;:26;;;;;;;;17775:142;;;-1:-1:-1;;;;;17850:24:0;;;;;;;:14;:24;;;;;;;;;;17833:72;;-1:-1:-1;;;17833:72:0;;;;;;;;;;;;;;;;;17850:24;;;;;17833:53;;:72;;;;;;;;;;;17850:24;17833:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17833:72:0;;-1:-1:-1;17775:142:0;17466:458;;;;:::o;10220:21::-;;;;:::o;16635:668::-;4057:6;;-1:-1:-1;;;;;4057:6:0;4067:10;4057:20;4048:67;;;;;-1:-1:-1;;;4048:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;4048:67:0;;;;;;;;;;;;;;;16694:13:::1;::::0;16718:221:::1;16739:13;:20:::0;16735:24;::::1;16718:221;;;16793:134;16826:86;16835:13;16850:1;16835:18;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;16863:13:::1;:18:::0;;-1:-1:-1;;;;;16835:18:0;;::::1;::::0;16878:1;;16863:18;::::1;;;;;;::::0;;;::::1;::::0;;;;::::1;::::0;16855:55:::1;::::0;;-1:-1:-1;;;16855:55:0;;16903:4:::1;16855:55;::::0;::::1;::::0;;;-1:-1:-1;;;;;16863:18:0;;::::1;::::0;16855:38:::1;::::0;:55;;;;;;;;;;16863:18;16855:55;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;16855:55:0;16826:7:::1;:86::i;:::-;16793:8:::0;;:12:::1;:134::i;:::-;16782:145:::0;-1:-1:-1;16761:3:0::1;;16718:221;;;;16954:6;16949:226;16970:15;:22:::0;16966:26;::::1;16949:226;;;17026:137;17058:90;17067:15;17084:1;17067:20;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;17097:15:::1;:20:::0;;-1:-1:-1;;;;;17067:20:0;;::::1;::::0;17114:1;;17097:20;::::1;;;;17026:137;17015:148:::0;-1:-1:-1;16994:3:0::1;;16949:226;;;-1:-1:-1::0;17185:13:0::1;:24:::0;;;17225:27:::1;::::0;17201:8;;-1:-1:-1;;;;;;;;;;;17225:27:0;;;::::1;17268;::::0;17285:8;;17268:27:::1;::::0;;;::::1;4126:1;16635:668::o:0;8360:32::-;;;;;;;;;;;;4310:261;4057:6;;-1:-1:-1;;;;;4057:6:0;4067:10;4057:20;4048:67;;;;;-1:-1:-1;;;4048:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;4048:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;4413:23:0;::::1;4404:75;;;;-1:-1:-1::0;;;4404:75:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4512:6;::::0;;4495:36:::1;::::0;-1:-1:-1;;;;;4495:36:0;;::::1;::::0;4512:6;::::1;::::0;4495:36:::1;::::0;::::1;4542:9;:21:::0;;-1:-1:-1;;;;;;4542:21:0::1;-1:-1:-1::0;;;;;4542:21:0;;;::::1;::::0;;;::::1;::::0;;4310:261::o;3916:90::-;3965:7;3992:6;-1:-1:-1;;;;;3992:6:0;3916:90;:::o;10047:49::-;;;;;;;;;;;;;;;:::o;4583:221::-;4667:9;;-1:-1:-1;;;;;4667:9:0;4653:10;:23;4644:71;;;;-1:-1:-1;;;4644:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4756:9;;;4748:6;;4731:36;;-1:-1:-1;;;;;4756:9:0;;;;4748:6;;;;4731:36;;;4787:9;;;4778:18;;-1:-1:-1;;;;;;4778:18:0;-1:-1:-1;;;;;4787:9:0;;;4778:18;;;;;;4583:221::o;7965:48::-;;;;;;;;;;;;;;;:::o;15884:343::-;15987:10;15970:29;;;;:15;:29;;;;;;;;15961:56;;;;;-1:-1:-1;;;15961:56:0;;;;;;;;;;;;-1:-1:-1;;;15961:56:0;;;;;;;;;;;;;;;16048:16;:14;:16::i;:::-;16037:7;:27;;16028:63;;;;;-1:-1:-1;;;16028:63:0;;;;;;;;;;;;-1:-1:-1;;;16028:63:0;;;;;;;;;;;;;;;16120:3;-1:-1:-1;;;;;16104:26:0;;16132:10;16144:7;16104:49;;;;;;;;;;;;;-1:-1:-1;;;;;16104:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;16171:48:0;;;;;;;;-1:-1:-1;;;;;16171:48:0;;;-1:-1:-1;16186:10:0;;-1:-1:-1;16171:48:0;;;;;;;;;15884:343;;:::o;8110:34::-;;;;;;;;;;;;9429;;;;;;;;;;;;8020:51;;;;;;;;;;;;;:::o;9679:24::-;;;;;;;;;;;;8455:50;;;;;;;;;;;;;;;:::o;8738:53::-;;;;;;;;;;;;;:::o;8830:36::-;;;;;;;;;;;;10287:25;;;;:::o;8266:55::-;;;;;;;;;;;;;:::o;8929:54::-;;;;;;;;;;;;;;;:::o;8681:50::-;;;;;;;;;;;;;;;:::o;9585:55::-;;;;;;;;;;;;;:::o;9337:53::-;;;;;;;;;;;;;:::o;9953:31::-;;;;;;;;;;;;11116:875;-1:-1:-1;;;;;11231:24:0;;11198:10;11231:24;;;:14;:24;;;;;;;;;:54;;-1:-1:-1;;;;;;11259:26:0;;;;;;:16;:26;;;;;;;;11231:54;11222:81;;;;;-1:-1:-1;;;11222:81:0;;;;;;;;;;;;-1:-1:-1;;;11222:81:0;;;;;;;;;;;;;;;11314:71;-1:-1:-1;;;;;11314:33:0;;11349:10;11369:4;11376:7;11314:33;:71::i;:::-;-1:-1:-1;;;;;11403:24:0;;;;;;:14;:24;;;;;;;;11398:212;;;11474:10;11454:32;;;;:18;:32;;;;;;;;11445:59;;;;;-1:-1:-1;;;11445:59:0;;;;;;;;;;;;-1:-1:-1;;;11445:59:0;;;;;;;;;;;;;;;11398:212;;;11568:10;11546:34;;;;:20;:34;;;;;;;;11537:61;;;;;-1:-1:-1;;;11537:61:0;;;;;;;;;;;;-1:-1:-1;;;11537:61:0;;;;;;;;;;;;;;;11622:10;11635:24;11643:6;11651:7;11635;:24::i;:::-;11622:37;-1:-1:-1;11751:20:0;11622:37;11762:7;11751:9;:20::i;:::-;11743:28;;11798:3;-1:-1:-1;;;;;11782:26:0;;11810:10;11822:5;11782:47;;;;;;;;;;;;;-1:-1:-1;;;;;11782:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;11858:13:0;;:26;;-1:-1:-1;11858:13:0;-1:-1:-1;11877:5:0;11858:17;:26::i;:::-;11842:13;:42;;;11900:32;;-1:-1:-1;;;;;;;;;;;11900:32:0;;;;11950:33;;;;;;;;;;;;;;-1:-1:-1;;;;;11950:33:0;;;;;;;;;;;11116:875;;;;;;:::o;8512:53::-;;;;;;;;;;;;;:::o;9815:45::-;;;;;;;;;;;;;:::o;7890:30::-;;;;;;;;;;;;7839:42;;;:::o;13894:631::-;13995:10;13985:22;;;;:8;:22;;;;;;;;13976:49;;;;;-1:-1:-1;;;13976:49:0;;;;;;;;;;;;-1:-1:-1;;;13976:49:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;14045:24:0;;;;;;:14;:24;;;;;;;;14036:51;;;;;-1:-1:-1;;;14036:51:0;;;;;;;;;;;;-1:-1:-1;;;14036:51:0;;;;;;;;;;;;;;;14100:71;-1:-1:-1;;;;;14100:33:0;;14135:10;14155:4;14162:7;14100:33;:71::i;:::-;14184:10;14197:26;14206:6;14214:7;14197;:26::i;:::-;14279:10;14264:27;;;;:13;:27;;;;;;14184:39;;-1:-1:-1;14264:40:0;;14184:39;14264:31;:40::i;:::-;14249:10;14234:27;;;;:13;:27;;;;;:70;14327:9;;:22;;14342:5;14327:13;:22::i;:::-;14315:9;:34;14378:13;;:26;;14397:5;14378:17;:26::i;:::-;14362:13;:42;;;14420:32;;-1:-1:-1;;;;;;;;;;;14420:32:0;;;;14470:47;;;;;;;;;;;;;;-1:-1:-1;;;;;14470:47:0;;;14481:10;;14470:47;;;;;;;;;;;13894:631;;;:::o;9526:52::-;;;;;;;;;;;;;;;:::o;7804:28::-;;;:::o;18100:1785::-;18188:4;4057:6;;-1:-1:-1;;;;;4057:6:0;4067:10;4057:20;4048:67;;;;;-1:-1:-1;;;4048:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;4048:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;18215:22:0;::::1;18206:33;;;::::0;::::1;;18268:25;18255:9;:38;;;;;;;;;18250:1552;;;18352:40;:12;18370:20;18352:16;:40::i;:::-;-1:-1:-1::0;;;;;18316:33:0;::::1;;::::0;;;:21:::1;:33;::::0;;;;:76;18250:1552:::1;;;18428:23;18415:9;:36;;;;;;;;;18410:1392;;;18508:40;:12;18526:20;18508:16;:40::i;:::-;-1:-1:-1::0;;;;;18474:31:0;::::1;;::::0;;;:19:::1;:31;::::0;;;;:74;18410:1392:::1;;;18584:21;18571:9;:34;;;;;;;;;18566:1236;;;18660:40;:12;18678:20;18660:16;:40::i;:::-;-1:-1:-1::0;;;;;18628:29:0;::::1;;::::0;;;:17:::1;:29;::::0;;;;:72;18566:1236:::1;;;18736:23;18723:9;:36;;;;;;;;;18718:1084;;;18816:49;18834:29;:20;18860:1;18834:24;:29::i;:::-;18816:12;::::0;:16:::1;:49::i;:::-;-1:-1:-1::0;;;;;18782:31:0;::::1;;::::0;;;:19:::1;:31;::::0;;;;:83;18718:1084:::1;;;18901:27;18888:9;:40;;;;;;;;;18883:919;;;18989:40;:12;19007:20;18989:16;:40::i;:::-;-1:-1:-1::0;;;;;18951:35:0;::::1;;::::0;;;:23:::1;:35;::::0;;;;:78;18883:919:::1;;;19065:23;19052:9;:36;;;;;;;;;19047:755;;;19145:40;:12;19163:20;19145:16;:40::i;:::-;-1:-1:-1::0;;;;;19111:31:0;::::1;;::::0;;;:19:::1;:31;::::0;;;;:74;19047:755:::1;;;19221:25;19208:9;:38;;;;;;;;;19203:599;;;19305:49;19323:29;:20;19349:1;19323:24;:29::i;19305:49::-;-1:-1:-1::0;;;;;19269:33:0;::::1;;::::0;;;:21:::1;:33;::::0;;;;:85;19203:599:::1;;;19390:15;19377:9;:28;;;;;;;;;19372:430;;;19454:40;:12;19472:20;19454:16;:40::i;:::-;-1:-1:-1::0;;;;;19428:23:0;::::1;;::::0;;;:11:::1;:23;::::0;;;;:66;19372:430:::1;;;19530:22;19517:9;:35;;;;;;;;;19512:290;;;19608:40;:12;19626:20;19608:16;:40::i;:::-;-1:-1:-1::0;;;;;19575:30:0;::::1;;::::0;;;:18:::1;:30;::::0;;;;:73;19512:290:::1;;;19684:13;19671:9;:26;;;;;;;;;19666:136;;;19732:40;:12;19750:20;19732:16;:40::i;:::-;19720:9;:52:::0;19666:136:::1;;;-1:-1:-1::0;19797:5:0::1;19790:12;;19666:136;19834:9;19820:35;;;;;;;;;::::0;;-1:-1:-1;;;;;19820:35:0;::::1;::::0;;;;::::1;::::0;;;;::::1;::::0;;::::1;-1:-1:-1::0;19873:4:0::1;18100:1785:::0;;;;:::o;9280:50::-;;;;;;;;;;;;;;;:::o;9766:42::-;;;;;;;;;;;;;;;:::o;10103:52::-;;;;;;;;;;;;;:::o;20095:4833::-;20205:4;4057:6;;-1:-1:-1;;;;;4057:6:0;4067:10;4057:20;4048:67;;;;;-1:-1:-1;;;4048:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;4048:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;20232:22:0;::::1;20223:33;;;::::0;::::1;;20267:11;::::0;20294:9:::1;:38;;;;;;;;;20289:4545;;;20360:67;20374:21;20397:18;20417:8;20360:12;:67::i;:::-;20355:293;;;-1:-1:-1::0;;;;;20449:33:0;::::1;20485:1;20449:33:::0;;;:21:::1;:33;::::0;;;;:37;20510:43:::1;20524:17;20472:8:::0;20510:12:::1;:43::i;:::-;20505:128;;20579:17;:34:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;20579:34:0;;;;;::::1;::::0;;-1:-1:-1;;;;;;20579:34:0::1;-1:-1:-1::0;;;;;20579:34:0;::::1;;::::0;;20505:128:::1;-1:-1:-1::0;;;;;;20672:30:0;::::1;;::::0;;;:18:::1;:30;::::0;;;;;;::::1;::::0;::::1;20671:31;-1:-1:-1::0;;20717:39:0;;::::1;::::0;::::1;::::0;;;20289:4545:::1;;;20806:23;20793:9;:36;;;;;;;;;20788:4046;;;20857:63;20871:19;20892:16;20910:8;20857:12;:63::i;:::-;20852:283;;;-1:-1:-1::0;;;;;20942:31:0;::::1;20976:1;20942:31:::0;;;:19:::1;:31;::::0;;;;:35;21001:41:::1;21015:15;20963:8:::0;21001:12:::1;:41::i;:::-;20996:124;;21068:15;:32:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;21068:32:0;;;;;::::1;::::0;;-1:-1:-1;;;;;;21068:32:0::1;-1:-1:-1::0;;;;;21068:32:0;::::1;;::::0;;20996:124:::1;-1:-1:-1::0;;;;;;21159:28:0;::::1;;::::0;;;:16:::1;:28;::::0;;;;;;::::1;::::0;::::1;21158:29;-1:-1:-1::0;;21202:37:0;;::::1;::::0;::::1;::::0;;;20788:4046:::1;;;21277:21;21264:9;:34;;;;;;;;;21259:3575;;;21326:59;21340:17;21359:14;21375:8;21326:12;:59::i;:::-;21321:273;;;-1:-1:-1::0;;;;;21407:29:0;::::1;21439:1;21407:29:::0;;;:17:::1;:29;::::0;;;;:33;21464:39:::1;21478:13;21426:8:::0;21464:12:::1;:39::i;:::-;21459:120;;21529:13;:30:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;21529:30:0;;;;;::::1;::::0;;-1:-1:-1;;;;;;21529:30:0::1;-1:-1:-1::0;;;;;21529:30:0;::::1;;::::0;;21459:120:::1;-1:-1:-1::0;;;;;;21618:26:0;::::1;;::::0;;;:14:::1;:26;::::0;;;;;;::::1;::::0;::::1;21617:27;-1:-1:-1::0;;21659:35:0;;::::1;::::0;::::1;::::0;;;21259:3575:::1;;;21732:23;21719:9;:36;;;;;;;;;21714:3120;;;21783:63;21797:19;21818:16;21836:8;21783:12;:63::i;:::-;21778:334;;;21868:15;:32:::0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;;;;21868:32:0::1;-1:-1:-1::0;;;;;21868:32:0;::::1;::::0;;::::1;::::0;;;-1:-1:-1;21919:31:0;;;:19:::1;21868:32;21919:31:::0;;;;:35;21978:41:::1;::::0;21868:32;21978:12:::1;:41::i;:::-;21973:124;;22045:15;:32:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;22045:32:0;;;;;::::1;::::0;;-1:-1:-1;;;;;;22045:32:0::1;-1:-1:-1::0;;;;;22045:32:0;::::1;;::::0;;21973:124:::1;-1:-1:-1::0;;;;;;22136:28:0;::::1;;::::0;;;:16:::1;:28;::::0;;;;;;::::1;::::0;::::1;22135:29;-1:-1:-1::0;;22179:37:0;;::::1;::::0;::::1;::::0;;;21714:3120:::1;;;22254:27;22241:9;:40;;;;;;;;;22236:2598;;;22309:71;22323:23;22348:20;22370:8;22309:12;:71::i;:::-;22304:358;;;22402:19;:36:::0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;;;;22402:36:0::1;-1:-1:-1::0;;;;;22402:36:0;::::1;::::0;;::::1;::::0;;;-1:-1:-1;22457:35:0;;;:23:::1;22402:36;22457:35:::0;;;;:39;22520:45:::1;::::0;22402:36;22520:12:::1;:45::i;:::-;22515:132;;22591:19;:36:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;22591:36:0;;;;;::::1;::::0;;-1:-1:-1;;;;;;22591:36:0::1;-1:-1:-1::0;;;;;22591:36:0;::::1;;::::0;;22515:132:::1;-1:-1:-1::0;;;;;;22686:32:0;::::1;;::::0;;;:20:::1;:32;::::0;;;;;;::::1;::::0;::::1;22685:33;-1:-1:-1::0;;22733:41:0;;::::1;::::0;::::1;::::0;;;22236:2598:::1;;;22812:23;22799:9;:36;;;;;;;;;22794:2040;;;22863:63;22877:19;22898:16;22916:8;22863:12;:63::i;:::-;22858:283;;;-1:-1:-1::0;;;;;22948:31:0;::::1;22982:1;22948:31:::0;;;:19:::1;:31;::::0;;;;:35;23007:41:::1;23021:15;22969:8:::0;23007:12:::1;:41::i;:::-;23002:124;;23074:15;:32:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;23074:32:0;;;;;::::1;::::0;;-1:-1:-1;;;;;;23074:32:0::1;-1:-1:-1::0;;;;;23074:32:0;::::1;;::::0;;23002:124:::1;-1:-1:-1::0;;;;;;23165:28:0;;::::1;;::::0;;;:16:::1;:28;::::0;;;;;;;;;::::1;::::0;::::1;23164:29;-1:-1:-1::0;;23208:37:0;;::::1;::::0;::::1;::::0;;;23260:14:::1;:26:::0;;;;;;:40;;-1:-1:-1;;;;;;23260:40:0::1;::::0;;::::1;::::0;;;::::1;::::0;;;22794:2040:::1;;;23338:25;23325:9;:38;;;;;;;;;23320:1514;;;23391:67;23405:21;23428:18;23448:8;23391:12;:67::i;:::-;23386:293;;;-1:-1:-1::0;;;;;23480:33:0;::::1;23516:1;23480:33:::0;;;:21:::1;:33;::::0;;;;:37;23541:43:::1;23555:17;23503:8:::0;23541:12:::1;:43::i;:::-;23536:128;;23610:17;:34:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;23610:34:0;;;;;::::1;::::0;;-1:-1:-1;;;;;;23610:34:0::1;-1:-1:-1::0;;;;;23610:34:0;::::1;;::::0;;23536:128:::1;-1:-1:-1::0;;;;;;23703:30:0;::::1;;::::0;;;:18:::1;:30;::::0;;;;;;::::1;::::0;::::1;23702:31;-1:-1:-1::0;;23748:39:0;;::::1;::::0;::::1;::::0;;;23320:1514:::1;;;23825:15;23812:9;:28;;;;;;;;;23807:1027;;;23868:47;23882:11;23895:8;23905;23868:12;:47::i;:::-;23863:243;;;-1:-1:-1::0;;;;;23937:23:0;::::1;23963:1;23937:23:::0;;;:11:::1;:23;::::0;;;;:27;23988:33:::1;24002:7;23950:8:::0;23988:12:::1;:33::i;:::-;23983:108;;24047:7;:24:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;24047:24:0;;;;;::::1;::::0;;-1:-1:-1;;;;;;24047:24:0::1;-1:-1:-1::0;;;;;24047:24:0;::::1;;::::0;;23983:108:::1;-1:-1:-1::0;;;;;;24130:20:0;::::1;;::::0;;;:8:::1;:20;::::0;;;;;;::::1;::::0;::::1;24129:21;-1:-1:-1::0;;24165:29:0;;::::1;::::0;::::1;::::0;;;23807:1027:::1;;;24232:22;24219:9;:35;;;;;;;;;24214:620;;;24282:61;24296:18;24316:15;24333:8;24282:12;:61::i;:::-;24277:278;;;-1:-1:-1::0;;;;;24365:30:0;::::1;24398:1;24365:30:::0;;;:18:::1;:30;::::0;;;;:34;24423:40:::1;24437:14;24385:8:::0;24423:12:::1;:40::i;:::-;24418:122;;24489:14;:31:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;24489:31:0;;;;;::::1;::::0;;-1:-1:-1;;;;;;24489:31:0::1;-1:-1:-1::0;;;;;24489:31:0;::::1;;::::0;;24418:122:::1;-1:-1:-1::0;;;;;;24579:27:0;::::1;;::::0;;;:15:::1;:27;::::0;;;;;;::::1;::::0;::::1;24578:28;-1:-1:-1::0;;24621:36:0;;::::1;::::0;::::1;::::0;;;24214:620:::1;;;24695:13;24682:9;:26;;;;;;;;;24677:157;;;-1:-1:-1::0;24743:1:0::1;24731:9;:13:::0;24759:4:::1;:15:::0;;-1:-1:-1;;;;;;24759:15:0::1;-1:-1:-1::0;;;;;24759:15:0;::::1;;::::0;;-1:-1:-1;24677:157:0::1;;;24829:5;24822:12;;;;;24677:157;24869:9;24852:46;;;;;;;;;::::0;;-1:-1:-1;;;;;24852:46:0;::::1;::::0;;;::::1;;;::::0;::::1;::::0;;;::::1;::::0;;;;;;;;;::::1;24916:4;24909:11;;;4126:1;20095:4833:::0;;;;;:::o;10352:21::-;;;;:::o;8604:32::-;;;;;;;;;;;;8990:57;;;;;;;;;;;;;:::o;288:136::-;346:7;373:43;377:1;380;373:43;;;;;;;;;;;;;;;;;:3;:43::i;5561:177::-;5671:58;;;-1:-1:-1;;;;;5671:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5671:58:0;-1:-1:-1;;;5671:58:0;;;5644:86;;5664:5;;5644:19;:86::i;:::-;5561:177;;;:::o;99:181::-;157:7;189:5;;;213:6;;;;205:46;;;;;-1:-1:-1;;;205:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;632:250;690:7;714:6;710:47;;-1:-1:-1;744:1:0;737:8;;710:47;781:5;;;785:1;781;:5;:1;805:5;;;;;:10;797:56;;;;-1:-1:-1;;;797:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;890:132;948:7;975:39;979:1;982;975:39;;;;;;;;;;;;;;;;;:3;:39::i;5746:205::-;5874:68;;;-1:-1:-1;;;;;5874:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5874:68:0;-1:-1:-1;;;5874:68:0;;;5847:96;;5867:5;;5847:19;:96::i;:::-;5746:205;;;;:::o;25176:438::-;-1:-1:-1;;;;;25389:19:0;;25365:4;25389:19;;;;;;;;;;;;;25383:210;;-1:-1:-1;;;;;25435:18:0;;;;;;;;;;;;;;25426:48;;;;;-1:-1:-1;;;25426:48:0;;;;;;;;;;;;-1:-1:-1;;;25426:48:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;25498:18:0;;;;;;;;;;;;;;25520:12;-1:-1:-1;25498:34:0;25489:66;;;;;-1:-1:-1;;;25489:66:0;;;;;;;;;;;;-1:-1:-1;;;25489:66:0;;;;;;;;;;;;;;;-1:-1:-1;25577:4:0;25570:11;;25383:210;-1:-1:-1;25601:5:0;25176:438;;;;;:::o;25783:277::-;25872:4;;25890:140;25911:12;;25907:16;;25890:140;;;25964:6;-1:-1:-1;;;;;25950:20:0;:5;25957:1;25950:10;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25950:10:0;:20;25946:73;;;25999:4;25992:11;;;;;25946:73;25925:3;;25890:140;;432:192;518:7;554:12;546:6;;;;538:29;;;;-1:-1:-1;;;538:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;590:5:0;;;432:192::o;5959:418::-;6040:23;6066:69;6094:4;6066:69;;;;;;;;;;;;;;;;;6074:5;-1:-1:-1;;;;;6066:27:0;;;:69;;;;;:::i;:::-;6150:17;;6040:95;;-1:-1:-1;6150:21:0;6146:224;;6292:10;6281:30;;;;;;;;;;;;;;;-1:-1:-1;6281:30:0;6273:85;;;;-1:-1:-1;;;6273:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1030:189;1116:7;1151:12;1144:5;1136:28;;;;-1:-1:-1;;;1136:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1175:9;1191:1;1187;:5;;;;;;;1030:189;-1:-1:-1;;;;;1030:189:0:o;1679:196::-;1782:12;1814:53;1837:6;1845:4;1851:1;1854:12;1814:22;:53::i;:::-;1807:60;1679:196;-1:-1:-1;;;;1679:196:0:o;1883:817::-;2013:12;2046:18;2057:6;2046:10;:18::i;:::-;2038:60;;;;;-1:-1:-1;;;2038:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;2172:12;2186:23;2213:6;-1:-1:-1;;;;;2213:11:0;2233:8;2244:4;2213:36;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2213:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2171:78;;;;2264:7;2260:433;;;2295:10;-1:-1:-1;2288:17:0;;-1:-1:-1;2288:17:0;2260:433;2342:17;;:21;2338:344;;2510:10;2504:17;2571:15;2558:10;2554:2;2550:19;2543:44;2458:148;2646:20;;-1:-1:-1;;;2646:20:0;;;;;;;;;;;;;;;;;2653:12;;2646:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1249:422;1616:20;1655:8;;;1249:422::o
Swarm Source
ipfs://54a6f27ef5b8917fe056573daf7f01c0a76ef2058429267fba261bc457ba4393
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.