More Info
Private Name Tags
ContractCreator
Latest 5 from a total of 5 transactions
Latest 10 internal transactions
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
10161636 | 179 days ago | Contract Creation | 0 frxETH | |||
10161636 | 179 days ago | Contract Creation | 0 frxETH | |||
9466097 | 195 days ago | Contract Creation | 0 frxETH | |||
9466097 | 195 days ago | Contract Creation | 0 frxETH | |||
9466090 | 195 days ago | Contract Creation | 0 frxETH | |||
9466090 | 195 days ago | Contract Creation | 0 frxETH | |||
9466083 | 195 days ago | Contract Creation | 0 frxETH | |||
9466083 | 195 days ago | Contract Creation | 0 frxETH | |||
9466075 | 195 days ago | Contract Creation | 0 frxETH | |||
9466075 | 195 days ago | Contract Creation | 0 frxETH |
Loading...
Loading
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Contract Source Code Verified (Exact Match)
Contract Name:
OneWayLendingFactory
Compiler Version
vyper:0.3.10
Contract Source Code (Vyper language format)
# @version 0.3.10 """ @title OneWayLendingFactory @notice Factory of non-rehypothecated lending vaults: collateral is not being lent out. Although Vault.vy allows both, we should have this simpler version and rehypothecating version. This version is for L2s: it does not create gauges by itself but uses Gauge Factory to read gauge info. @author Curve.fi @license Copyright (c) Curve.Fi, 2020-2024 - all rights reserved """ interface Vault: def initialize( amm_impl: address, controller_impl: address, borrowed_token: address, collateral_token: address, A: uint256, fee: uint256, price_oracle: address, monetary_policy: address, loan_discount: uint256, liquidation_discount: uint256 ) -> (address, address): nonpayable def amm() -> address: view def controller() -> address: view def borrowed_token() -> address: view def collateral_token() -> address: view def price_oracle() -> address: view def set_max_supply(_value: uint256): nonpayable interface Controller: def monetary_policy() -> address: view interface AMM: def get_dy(i: uint256, j: uint256, in_amount: uint256) -> uint256: view def get_dx(i: uint256, j: uint256, out_amount: uint256) -> uint256: view def get_dydx(i: uint256, j: uint256, out_amount: uint256) -> (uint256, uint256): view def exchange(i: uint256, j: uint256, in_amount: uint256, min_amount: uint256, _for: address) -> uint256[2]: nonpayable def exchange_dy(i: uint256, j: uint256, out_amount: uint256, max_amount: uint256, _for: address) -> uint256[2]: nonpayable interface Pool: def price_oracle(i: uint256 = 0) -> uint256: view # Universal method! def coins(i: uint256) -> address: view interface GaugeFactory: def get_gauge_from_lp_token(addr: address) -> address: view event SetImplementations: amm: address controller: address vault: address price_oracle: address monetary_policy: address gauge_factory: address event SetDefaultRates: min_rate: uint256 max_rate: uint256 event SetAdmin: admin: address event NewVault: id: indexed(uint256) collateral_token: indexed(address) borrowed_token: indexed(address) vault: address controller: address amm: address price_oracle: address monetary_policy: address STABLECOIN: public(immutable(address)) # These are limits for default borrow rates, NOT actual min and max rates. # Even governance cannot go beyond these rates before a new code is shipped MIN_RATE: public(constant(uint256)) = 10**15 / (365 * 86400) # 0.1% MAX_RATE: public(constant(uint256)) = 10**19 / (365 * 86400) # 1000% # Implementations which can be changed by governance amm_impl: public(address) controller_impl: public(address) vault_impl: public(address) pool_price_oracle_impl: public(address) monetary_policy_impl: public(address) # Actual min/max borrow rates when creating new markets # for example, 0.5% -> 50% is a good choice min_default_borrow_rate: public(uint256) max_default_borrow_rate: public(uint256) # Admin is supposed to be the DAO admin: public(address) # Vaults can only be created but not removed vaults: public(Vault[10**18]) amms: public(AMM[10**18]) _vaults_index: HashMap[Vault, uint256] market_count: public(uint256) # Index to find vaults by a non-crvUSD token token_to_vaults: public(HashMap[address, Vault[10**18]]) token_market_count: public(HashMap[address, uint256]) names: public(HashMap[uint256, String[64]]) gauge_factory: public(GaugeFactory) @external def __init__( stablecoin: address, amm: address, controller: address, vault: address, pool_price_oracle: address, monetary_policy: address, gauge_factory: GaugeFactory, admin: address): """ @notice Factory which creates one-way lending vaults (e.g. collateral is non-borrowable) @param stablecoin Address of crvUSD. Only crvUSD-containing markets are allowed @param amm Address of AMM implementation @param controller Address of Controller implementation @param pool_price_oracle Address of implementation for price oracle factory (prices from pools) @param monetary_policy Address for implementation of monetary policy @param gauge_factory Address for gauge factory on this L2 @param admin Admin address (DAO) """ STABLECOIN = stablecoin self.amm_impl = amm self.controller_impl = controller self.vault_impl = vault self.pool_price_oracle_impl = pool_price_oracle self.monetary_policy_impl = monetary_policy self.gauge_factory = gauge_factory self.min_default_borrow_rate = 5 * 10**15 / (365 * 86400) self.max_default_borrow_rate = 50 * 10**16 / (365 * 86400) self.admin = admin @internal def _create( borrowed_token: address, collateral_token: address, A: uint256, fee: uint256, loan_discount: uint256, liquidation_discount: uint256, price_oracle: address, name: String[64], min_borrow_rate: uint256, max_borrow_rate: uint256 ) -> Vault: """ @notice Internal method for creation of the vault """ assert borrowed_token != collateral_token, "Same token" assert borrowed_token == STABLECOIN or collateral_token == STABLECOIN vault: Vault = Vault(create_minimal_proxy_to(self.vault_impl)) min_rate: uint256 = self.min_default_borrow_rate max_rate: uint256 = self.max_default_borrow_rate if min_borrow_rate > 0: min_rate = min_borrow_rate if max_borrow_rate > 0: max_rate = max_borrow_rate assert min_rate >= MIN_RATE and max_rate <= MAX_RATE and min_rate <= max_rate, "Wrong rates" monetary_policy: address = create_from_blueprint( self.monetary_policy_impl, borrowed_token, min_rate, max_rate, code_offset=3) controller: address = empty(address) amm: address = empty(address) controller, amm = vault.initialize( self.amm_impl, self.controller_impl, borrowed_token, collateral_token, A, fee, price_oracle, monetary_policy, loan_discount, liquidation_discount ) market_count: uint256 = self.market_count log NewVault(market_count, collateral_token, borrowed_token, vault.address, controller, amm, price_oracle, monetary_policy) self.vaults[market_count] = vault self.amms[market_count] = AMM(amm) self._vaults_index[vault] = market_count + 2**128 self.names[market_count] = name self.market_count = market_count + 1 token: address = borrowed_token if borrowed_token == STABLECOIN: token = collateral_token market_count = self.token_market_count[token] self.token_to_vaults[token][market_count] = vault self.token_market_count[token] = market_count + 1 return vault @external @nonreentrant('lock') def create( borrowed_token: address, collateral_token: address, A: uint256, fee: uint256, loan_discount: uint256, liquidation_discount: uint256, price_oracle: address, name: String[64], min_borrow_rate: uint256 = 0, max_borrow_rate: uint256 = 0, supply_limit: uint256 = max_value(uint256) ) -> Vault: """ @notice Creation of the vault using user-supplied price oracle contract @param borrowed_token Token which is being borrowed @param collateral_token Token used for collateral @param A Amplification coefficient: band size is ~1/A @param fee Fee for swaps in AMM (for ETH markets found to be 0.6%) @param loan_discount Maximum discount. LTV = sqrt(((A - 1) / A) ** 4) - loan_discount @param liquidation_discount Liquidation discount. LT = sqrt(((A - 1) / A) ** 4) - liquidation_discount @param price_oracle Custom price oracle contract @param name Human-readable market name @param min_borrow_rate Custom minimum borrow rate (otherwise min_default_borrow_rate) @param max_borrow_rate Custom maximum borrow rate (otherwise max_default_borrow_rate) @param supply_limit Supply cap """ vault: Vault = self._create(borrowed_token, collateral_token, A, fee, loan_discount, liquidation_discount, price_oracle, name, min_borrow_rate, max_borrow_rate) if supply_limit < max_value(uint256): vault.set_max_supply(supply_limit) return vault @external @nonreentrant('lock') def create_from_pool( borrowed_token: address, collateral_token: address, A: uint256, fee: uint256, loan_discount: uint256, liquidation_discount: uint256, pool: address, name: String[64], min_borrow_rate: uint256 = 0, max_borrow_rate: uint256 = 0, supply_limit: uint256 = max_value(uint256) ) -> Vault: """ @notice Creation of the vault using existing oraclized Curve pool as a price oracle @param borrowed_token Token which is being borrowed @param collateral_token Token used for collateral @param A Amplification coefficient: band size is ~1/A @param fee Fee for swaps in AMM (for ETH markets found to be 0.6%) @param loan_discount Maximum discount. LTV = sqrt(((A - 1) / A) ** 4) - loan_discount @param liquidation_discount Liquidation discount. LT = sqrt(((A - 1) / A) ** 4) - liquidation_discount @param pool Curve tricrypto-ng, twocrypto-ng or stableswap-ng pool which has non-manipulatable price_oracle(). Must contain both collateral_token and borrowed_token. @param name Human-readable market name @param min_borrow_rate Custom minimum borrow rate (otherwise min_default_borrow_rate) @param max_borrow_rate Custom maximum borrow rate (otherwise max_default_borrow_rate) @param supply_limit Supply cap """ # Find coins in the pool borrowed_ix: uint256 = 100 collateral_ix: uint256 = 100 N: uint256 = 0 for i in range(10): success: bool = False res: Bytes[32] = empty(Bytes[32]) success, res = raw_call( pool, _abi_encode(i, method_id=method_id("coins(uint256)")), max_outsize=32, is_static_call=True, revert_on_failure=False) coin: address = convert(res, address) if not success or coin == empty(address): break N += 1 if coin == borrowed_token: borrowed_ix = i elif coin == collateral_token: collateral_ix = i if collateral_ix == 100 or borrowed_ix == 100: raise "Tokens not in pool" price_oracle: address = create_from_blueprint( self.pool_price_oracle_impl, pool, N, borrowed_ix, collateral_ix, code_offset=3) vault: Vault = self._create(borrowed_token, collateral_token, A, fee, loan_discount, liquidation_discount, price_oracle, name, min_borrow_rate, max_borrow_rate) if supply_limit < max_value(uint256): vault.set_max_supply(supply_limit) return vault @view @external def controllers(n: uint256) -> address: return self.vaults[n].controller() @view @external def borrowed_tokens(n: uint256) -> address: return self.vaults[n].borrowed_token() @view @external def collateral_tokens(n: uint256) -> address: return self.vaults[n].collateral_token() @view @external def price_oracles(n: uint256) -> address: return self.vaults[n].price_oracle() @view @external def monetary_policies(n: uint256) -> address: return Controller(self.vaults[n].controller()).monetary_policy() @view @external def vaults_index(vault: Vault) -> uint256: return self._vaults_index[vault] - 2**128 @view @external def gauge_for_vault(vault: address) -> address: out: address = self.gauge_factory.get_gauge_from_lp_token(vault) assert out != empty(address) return out @view @external def gauges(vault_id: uint256) -> address: return self.gauge_factory.get_gauge_from_lp_token(self.vaults[vault_id].address) @external @nonreentrant('lock') def set_implementations(controller: address, amm: address, vault: address, pool_price_oracle: address, monetary_policy: address, gauge_factory: address): """ @notice Set new implementations (blueprints) for controller, amm, vault, pool price oracle and monetary polcy. Doesn't change existing ones @param controller Address of the controller blueprint @param amm Address of the AMM blueprint @param vault Address of the Vault template @param pool_price_oracle Address of the pool price oracle blueprint @param monetary_policy Address of the monetary policy blueprint @param gauge_factory Address for gauge factory """ assert msg.sender == self.admin if controller != empty(address): self.controller_impl = controller if amm != empty(address): self.amm_impl = amm if vault != empty(address): self.vault_impl = vault if pool_price_oracle != empty(address): self.pool_price_oracle_impl = pool_price_oracle if monetary_policy != empty(address): self.monetary_policy_impl = monetary_policy if gauge_factory != empty(address): self.gauge_factory = GaugeFactory(gauge_factory) log SetImplementations(amm, controller, vault, pool_price_oracle, monetary_policy, gauge_factory) @external @nonreentrant('lock') def set_default_rates(min_rate: uint256, max_rate: uint256): """ @notice Change min and max default borrow rates for creating new markets @param min_rate Minimal borrow rate (0 utilization) @param max_rate Maxumum borrow rate (100% utilization) """ assert msg.sender == self.admin assert min_rate >= MIN_RATE assert max_rate <= MAX_RATE assert max_rate >= min_rate self.min_default_borrow_rate = min_rate self.max_default_borrow_rate = max_rate log SetDefaultRates(min_rate, max_rate) @external @nonreentrant('lock') def set_admin(admin: address): """ @notice Set admin of the factory (should end up with DAO) @param admin Address of the admin """ assert msg.sender == self.admin self.admin = admin log SetAdmin(admin) @external @view def coins(vault_id: uint256) -> address[2]: vault: Vault = self.vaults[vault_id] return [vault.borrowed_token(), vault.collateral_token()]
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"name":"SetImplementations","inputs":[{"name":"amm","type":"address","indexed":false},{"name":"controller","type":"address","indexed":false},{"name":"vault","type":"address","indexed":false},{"name":"price_oracle","type":"address","indexed":false},{"name":"monetary_policy","type":"address","indexed":false},{"name":"gauge_factory","type":"address","indexed":false}],"anonymous":false,"type":"event"},{"name":"SetDefaultRates","inputs":[{"name":"min_rate","type":"uint256","indexed":false},{"name":"max_rate","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"name":"SetAdmin","inputs":[{"name":"admin","type":"address","indexed":false}],"anonymous":false,"type":"event"},{"name":"NewVault","inputs":[{"name":"id","type":"uint256","indexed":true},{"name":"collateral_token","type":"address","indexed":true},{"name":"borrowed_token","type":"address","indexed":true},{"name":"vault","type":"address","indexed":false},{"name":"controller","type":"address","indexed":false},{"name":"amm","type":"address","indexed":false},{"name":"price_oracle","type":"address","indexed":false},{"name":"monetary_policy","type":"address","indexed":false}],"anonymous":false,"type":"event"},{"stateMutability":"nonpayable","type":"constructor","inputs":[{"name":"stablecoin","type":"address"},{"name":"amm","type":"address"},{"name":"controller","type":"address"},{"name":"vault","type":"address"},{"name":"pool_price_oracle","type":"address"},{"name":"monetary_policy","type":"address"},{"name":"gauge_factory","type":"address"},{"name":"admin","type":"address"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"create","inputs":[{"name":"borrowed_token","type":"address"},{"name":"collateral_token","type":"address"},{"name":"A","type":"uint256"},{"name":"fee","type":"uint256"},{"name":"loan_discount","type":"uint256"},{"name":"liquidation_discount","type":"uint256"},{"name":"price_oracle","type":"address"},{"name":"name","type":"string"}],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"nonpayable","type":"function","name":"create","inputs":[{"name":"borrowed_token","type":"address"},{"name":"collateral_token","type":"address"},{"name":"A","type":"uint256"},{"name":"fee","type":"uint256"},{"name":"loan_discount","type":"uint256"},{"name":"liquidation_discount","type":"uint256"},{"name":"price_oracle","type":"address"},{"name":"name","type":"string"},{"name":"min_borrow_rate","type":"uint256"}],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"nonpayable","type":"function","name":"create","inputs":[{"name":"borrowed_token","type":"address"},{"name":"collateral_token","type":"address"},{"name":"A","type":"uint256"},{"name":"fee","type":"uint256"},{"name":"loan_discount","type":"uint256"},{"name":"liquidation_discount","type":"uint256"},{"name":"price_oracle","type":"address"},{"name":"name","type":"string"},{"name":"min_borrow_rate","type":"uint256"},{"name":"max_borrow_rate","type":"uint256"}],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"nonpayable","type":"function","name":"create","inputs":[{"name":"borrowed_token","type":"address"},{"name":"collateral_token","type":"address"},{"name":"A","type":"uint256"},{"name":"fee","type":"uint256"},{"name":"loan_discount","type":"uint256"},{"name":"liquidation_discount","type":"uint256"},{"name":"price_oracle","type":"address"},{"name":"name","type":"string"},{"name":"min_borrow_rate","type":"uint256"},{"name":"max_borrow_rate","type":"uint256"},{"name":"supply_limit","type":"uint256"}],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"nonpayable","type":"function","name":"create_from_pool","inputs":[{"name":"borrowed_token","type":"address"},{"name":"collateral_token","type":"address"},{"name":"A","type":"uint256"},{"name":"fee","type":"uint256"},{"name":"loan_discount","type":"uint256"},{"name":"liquidation_discount","type":"uint256"},{"name":"pool","type":"address"},{"name":"name","type":"string"}],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"nonpayable","type":"function","name":"create_from_pool","inputs":[{"name":"borrowed_token","type":"address"},{"name":"collateral_token","type":"address"},{"name":"A","type":"uint256"},{"name":"fee","type":"uint256"},{"name":"loan_discount","type":"uint256"},{"name":"liquidation_discount","type":"uint256"},{"name":"pool","type":"address"},{"name":"name","type":"string"},{"name":"min_borrow_rate","type":"uint256"}],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"nonpayable","type":"function","name":"create_from_pool","inputs":[{"name":"borrowed_token","type":"address"},{"name":"collateral_token","type":"address"},{"name":"A","type":"uint256"},{"name":"fee","type":"uint256"},{"name":"loan_discount","type":"uint256"},{"name":"liquidation_discount","type":"uint256"},{"name":"pool","type":"address"},{"name":"name","type":"string"},{"name":"min_borrow_rate","type":"uint256"},{"name":"max_borrow_rate","type":"uint256"}],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"nonpayable","type":"function","name":"create_from_pool","inputs":[{"name":"borrowed_token","type":"address"},{"name":"collateral_token","type":"address"},{"name":"A","type":"uint256"},{"name":"fee","type":"uint256"},{"name":"loan_discount","type":"uint256"},{"name":"liquidation_discount","type":"uint256"},{"name":"pool","type":"address"},{"name":"name","type":"string"},{"name":"min_borrow_rate","type":"uint256"},{"name":"max_borrow_rate","type":"uint256"},{"name":"supply_limit","type":"uint256"}],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"controllers","inputs":[{"name":"n","type":"uint256"}],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"borrowed_tokens","inputs":[{"name":"n","type":"uint256"}],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"collateral_tokens","inputs":[{"name":"n","type":"uint256"}],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"price_oracles","inputs":[{"name":"n","type":"uint256"}],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"monetary_policies","inputs":[{"name":"n","type":"uint256"}],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"vaults_index","inputs":[{"name":"vault","type":"address"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"gauge_for_vault","inputs":[{"name":"vault","type":"address"}],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"gauges","inputs":[{"name":"vault_id","type":"uint256"}],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"nonpayable","type":"function","name":"set_implementations","inputs":[{"name":"controller","type":"address"},{"name":"amm","type":"address"},{"name":"vault","type":"address"},{"name":"pool_price_oracle","type":"address"},{"name":"monetary_policy","type":"address"},{"name":"gauge_factory","type":"address"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"set_default_rates","inputs":[{"name":"min_rate","type":"uint256"},{"name":"max_rate","type":"uint256"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"set_admin","inputs":[{"name":"admin","type":"address"}],"outputs":[]},{"stateMutability":"view","type":"function","name":"coins","inputs":[{"name":"vault_id","type":"uint256"}],"outputs":[{"name":"","type":"address[2]"}]},{"stateMutability":"view","type":"function","name":"STABLECOIN","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"MIN_RATE","inputs":[],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"MAX_RATE","inputs":[],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"amm_impl","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"controller_impl","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"vault_impl","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"pool_price_oracle_impl","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"monetary_policy_impl","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"min_default_borrow_rate","inputs":[],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"max_default_borrow_rate","inputs":[],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"admin","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"vaults","inputs":[{"name":"arg0","type":"uint256"}],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"amms","inputs":[{"name":"arg0","type":"uint256"}],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"market_count","inputs":[],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"token_to_vaults","inputs":[{"name":"arg0","type":"address"},{"name":"arg1","type":"uint256"}],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"token_market_count","inputs":[{"name":"arg0","type":"address"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"names","inputs":[{"name":"arg0","type":"uint256"}],"outputs":[{"name":"","type":"string"}]},{"stateMutability":"view","type":"function","name":"gauge_factory","inputs":[],"outputs":[{"name":"","type":"address"}]}]
Contract Creation Code
6115885150346101085760206116aa5f395f518060a01c6101085760405260206116ca5f395f518060a01c6101085760605260206116ea5f395f518060a01c61010857608052602061170a5f395f518060a01c6101085760a052602061172a5f395f518060a01c6101085760c052602061174a5f395f518060a01c6101085760e052602061176a5f395f518060a01c6101085761010052602061178a5f395f518060a01c61010857610120526040516115885260605160015560805160025560a05160035560c05160045560e05160055561010051671bc16d674ec8000e5563097343df6006556403b10683776007556101205160085561158861010c610000396115a8610000f35b5f80fd5f3560e01c60026025820660011b61153e01601e395f51565b6393a39776811861105b573461153a57602061158860403960206040f361105b565b63d819bfef811861105b573461153a576301e3da5f60405260206040f361105b565b63c24dbebd811861105b573461153a576449d482455d60405260206040f361105b565b63041622b5811861105b573461153a5760015460405260206040f361105b565b63168819c081186100bb573461153a5760025460405260206040f35b638c64ea4a811861105b5760243610341761153a57600435670de0b6b3a763ffff811161153a576009015460405260206040f361105b565b636677b287811861105b573461153a5760035460405260206040f361105b565b630b91bd27811861012f573461153a5760045460405260206040f35b6373edeb30811861017c576101443610341761153a57610104356104e0525f610500527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610520526107b5565b63c6610657811861105b5760243610341761153a57600435670de0b6b3a763ffff811161153a576009015460405260405163765337b6606052602060606004607c845afa6101cc573d5f5f3e3d5ffd5b60203d1061153a576060518060a01c61153a5760a05260a090505161012052604051632621db2f60c052602060c0600460dc845afa61020d573d5f5f3e3d5ffd5b60203d1061153a5760c0518060a01c61153a5761010052610100905051610140526040610120f361105b565b63247ec8788118610255573461153a5760055460405260206040f35b634622ab03811861105b5760243610341761153a57602080604052671bc16d674ec8000d6004356020525f5260405f208160400160208254015f81601f0160051c6003811161153a5780156102bc57905b808501548160051b8501526001018181186102a6575b5050508051806020830101601f825f03163682375050601f19601f8251602001011690509050810190506040f361105b565b633cfd3d8c811861030a573461153a5760065460405260206040f35b636c3a55e5811861105b576101843610341761153a5760606101046104e0375b6004358060a01c61153a57610420526024358060a01c61153a576104405260c4358060a01c61153a576104605260e435600401604081351161153a57602081350180826104803750505f5460021461153a5760025f55610420516040526104405160605260806044608037610460516101005260206104805101806101208261048060045afa50506104e05161018052610500516101a0526103cd61056061105f565b61056051610540527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61052051146104365761054051638a938f2f610560526105205161058052803b1561153a575f610560602461057c5f855af1610434573d5f5f3e3d5ffd5b505b602061054060035f55f361105b565b6399d0b1ba811861105b573461153a5760075460405260206040f361105b565b63f851a4408118610481573461153a5760085460405260206040f35b63a8acf8df81186104d95760443610341761153a576004358060a01c61153a57604052671bc16d674ec8000b6040516020525f5260405f20602435670de0b6b3a763ffff811161153a57810190505460605260206060f35b635904e8dc811861105b576101443610341761153a57610104356104e0525f610500527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6105205261032a5661105b565b6386a8cdbc81186105655760243610341761153a57600435670de0b6b3a763ffff811161153a57670de0b6b3a7640009015460405260206040f35b63c6f2a81d811861105b5760243610341761153a576020600435670de0b6b3a763ffff811161153a57600901546386fc88d3604052602060406004605c845afa6105b1573d5f5f3e3d5ffd5b60203d1061153a576040518060a01c61153a5760805260809050f361105b565b63fd775c78811861105b573461153a57671bc16d674ec8000a5460405260206040f361105b565b63e5f260ba811861105b5760243610341761153a576004358060a01c61153a57604052671bc16d674ec8000c6040516020525f5260405f205460605260206060f361105b565b63e8980c6e811861105b573461153a57671bc16d674ec8000e5460405260206040f361105b565b639c3b70a6811861105b576101243610341761153a576040366104e0377fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6105205261032a5661105b565b635673683f811861105b576101643610341761153a5760406101046104e0377fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6105205261032a5661105b565b63d984d2a1811861105b576101243610341761153a576040366104e0377fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610520526107b55661105b565b63bccc056c811861105b576101643610341761153a5760406101046104e0377fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610520526107b55661105b565b634351e30b811861105b576101843610341761153a5760606101046104e0375b6004358060a01c61153a57610420526024358060a01c61153a576104405260c4358060a01c61153a576104605260e435600401604081351161153a57602081350180826104803750505f5460021461153a5760025f556064610540526064610560525f610580525f600a905b806105a0526040366105c037610460515a63c66106576106245260046105a05161064452602001610620526106205060206106a0610620516106408585fa905090506105c0523d602081183d60201002186106805261068080516105e05260208101516106005250610600516105e05160200360031b1c8060a01c61153a57610620526105c0516108b35760016108b9565b61062051155b156108c357610913565b610580516001810181811061153a579050610580526104205161062051186108f2576105a05161054052610908565b610440516106205118610908576105a051610560525b600101818118610821575b505060646105605118610927576001610930565b60646105405118155b1561099a5760126105a0527f546f6b656e73206e6f7420696e20706f6f6c00000000000000000000000000006105c0526105a0506105a051806105c001601f825f031636823750506308c379a061056052602061058052601f19601f6105a051011660440161057cfd5b600454610460516105c0526105c05161064052610580516105e0526105e05161066052610540516106005261060051610680526105605161062052610620516106a05260806003823b03596001821261153a5781600382863c81810183818561064060045afa5050828201815ff0801561153a5790509050905090506105a0526104205160405261044051606052608060446080376105a0516101005260206104805101806101208261048060045afa50506104e05161018052610500516101a052610a676105e061105f565b6105e0516105c0527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6105205114610ad0576105c051638a938f2f6105e0526105205161060052803b1561153a575f6105e060246105fc5f855af1610ace573d5f5f3e3d5ffd5b505b60206105c060035f55f361105b565b63e94b0dd2811861105b5760243610341761153a576020600435670de0b6b3a763ffff811161153a576009015463f77c4791604052602060406004605c845afa610b2b573d5f5f3e3d5ffd5b60203d1061153a576040518060a01c61153a5760805260809050f361105b565b636fe4501f811861105b5760243610341761153a576020600435670de0b6b3a763ffff811161153a576009015463765337b6604052602060406004605c845afa610b97573d5f5f3e3d5ffd5b60203d1061153a576040518060a01c61153a5760805260809050f361105b565b6349b899848118610c1f5760243610341761153a576020600435670de0b6b3a763ffff811161153a5760090154632621db2f604052602060406004605c845afa610c03573d5f5f3e3d5ffd5b60203d1061153a576040518060a01c61153a5760805260809050f35b63b0539187811861105b5760243610341761153a576020671bc16d674ec8000e54635d95c65e604052600435670de0b6b3a763ffff811161153a5760090154606052602060406024605c845afa610c78573d5f5f3e3d5ffd5b60203d1061153a576040518060a01c61153a5760805260809050f361105b565b63762e7b92811861105b5760243610341761153a576020600435670de0b6b3a763ffff811161153a576009015463f77c4791604052602060406004605c845afa610ce4573d5f5f3e3d5ffd5b60203d1061153a576040518060a01c61153a57608052608090505163adfae4ce60a052602060a0600460bc845afa610d1e573d5f5f3e3d5ffd5b60203d1061153a5760a0518060a01c61153a5760e05260e09050f361105b565b63bcf75a8f8118610d9d5760243610341761153a576004358060a01c61153a57604052671bc16d674ec800096040516020525f5260405f2054700100000000000000000000000000000000810381811161153a57905060605260206060f35b63a74fcf90811861105b5760443610341761153a575f5460021461153a5760025f55600854331861153a576301e3da5f6004351061153a576449d482455d6024351161153a576004356024351061153a576004356006556024356007557f279f1fe0f91b15d983792d0305a146961875690054db0d81bec8d1582461fc656040600460403760406040a160035f550061105b565b6350c1163a8118610eaf5760243610341761153a576004358060a01c61153a57604052671bc16d674ec8000e54635d95c65e60805260405160a052602060806024609c845afa610e83573d5f5f3e3d5ffd5b60203d1061153a576080518060a01c61153a5760c05260c09050516060526060511561153a5760206060f35b636c15eadf811861105b5760c43610341761153a576004358060a01c61153a576040526024358060a01c61153a576060526044358060a01c61153a576080526064358060a01c61153a5760a0526084358060a01c61153a5760c05260a4358060a01c61153a5760e0525f5460021461153a5760025f55600854331861153a5760405115610f3d576040516002555b60605115610f4c576060516001555b60805115610f5b576080516003555b60a05115610f6a5760a0516004555b60c05115610f795760c0516005555b60e05115610f8f5760e051671bc16d674ec8000e555b7f91d63b24386eae580bbbe65f3f50fd736c41031f36d85641bc13e74ac0cb95bb60605161010052604051610120526080516101405260a0516101605260c0516101805260e0516101a05260c0610100a160035f550061105b565b63e9333fab811861105b5760243610341761153a576004358060a01c61153a576040525f5460021461153a5760025f55600854331861153a576040516008557f5a272403b402d892977df56625f4164ccaf70ca3863991c43ecfe76a6905b0a160405160605260206060a160035f55005b5f5ffd5b606051604051186110cf57600a6101c0527f53616d6520746f6b656e000000000000000000000000000000000000000000006101e0526101c0506101c051806101e001601f825f031636823750506308c379a06101805260206101a052601f19601f6101c051011660440161019cfd5b60206115885f395f51604051186110e75760016110f6565b60206115885f395f5160605118155b1561153a577f602d3d8160093d39f3363d3d373d3d3d363d73000000000000000000000000006101e05260035460601b6101f3527f5af43d82803e903d91602b57fd5bf300000000000000000000000000000000006102075260366101e05ff0801561153a576101c0526006546101e05260075461020052610180511561118057610180516101e0525b6101a05115611192576101a051610200525b6301e3da5f6101e05110156111a7575f6111c8565b6449d482455d6102005111156111bd575f6111c8565b610200516101e05111155b61123157600b610220527f57726f6e672072617465730000000000000000000000000000000000000000006102405261022050610220518061024001601f825f031636823750506308c379a06101e052602061020052601f19601f6102205101166044016101fcfd5b60055460405161024052610240516102a0526101e05161026052610260516102c0526102005161028052610280516102e05260606003823b03596001821261153a5781600382863c8181018381856102a060045afa5050828201815ff0801561153a57905090509050905061022052604036610240376101c0516343687bba610280526001546102a0526002546102c0526040516102e052606051610300526080516103205260a051610340526101005161036052610220516103805260c0516103a05260e0516103c052604061028061014461029c5f855af1611317573d5f5f3e3d5ffd5b60403d1061153a57610280518060a01c61153a576103e0526102a0518060a01c61153a57610400526103e0905080516102405260208101516102605250671bc16d674ec8000a5461028052604051606051610280517f2a854a597908740dff5f0846840f167547ea0d7614c43bde3ea49be2e68c07ec6101c0516102a052610240516102c052610260516102e0526101005161030052610220516103205260a06102a0a46101c05161028051670de0b6b3a763ffff811161153a57600901556102605161028051670de0b6b3a763ffff811161153a57670de0b6b3a7640009015561028051700100000000000000000000000000000000810181811061153a579050671bc16d674ec800096101c0516020525f5260405f205560206101205101671bc16d674ec8000d610280516020525f5260405f205f82601f0160051c6003811161153a57801561147d57905b8060051b610120015181840155600101818118611465575b50505050610280516001810181811061153a579050671bc16d674ec8000a556040516102a05260206115885f395f51604051186114bc576060516102a0525b671bc16d674ec8000c6102a0516020525f5260405f2054610280526101c051671bc16d674ec8000b6102a0516020525f5260405f2061028051670de0b6b3a763ffff811161153a578101905055610280516001810181811061153a579050671bc16d674ec8000c6102a0516020525f5260405f20556101c051815250565b5f80fd05f8105b0c9806fd05d1105b0465009f105b105b105b105b00180e31105b0239003a0d3e06b0105b052a007f02ee04450bb7063e079500f3105b105b0b4b0adf005c0fea0665074801138419158881184a1820a16576797065728300030a0016000000000000000000000000b102f7efa0d5de071a8d37b3548e1c7cb148caf300000000000000000000000059cffdc8cf8b9b71d91da6de480c957993020e8a0000000000000000000000007002b727ef8f5571cb5f9d70d13dbeeb4dfae9d1000000000000000000000000c1db00a8e5ef7bfa476395cdbcc98235477cde4e0000000000000000000000000cd5a1e9e19af1f1b910ac3c3452a16b2b37155b00000000000000000000000086d347ce5f1e6f7ef4da00fb7c8d31fbd16996f0000000000000000000000000ef672bd94913cb6f1d2812a6e18c1ffded8eff5c0000000000000000000000004bbdfed5696b3a8f6b3813506b5389959c5cdc57
Deployed Bytecode
0x5f3560e01c60026025820660011b61153e01601e395f51565b6393a39776811861105b573461153a57602061158860403960206040f361105b565b63d819bfef811861105b573461153a576301e3da5f60405260206040f361105b565b63c24dbebd811861105b573461153a576449d482455d60405260206040f361105b565b63041622b5811861105b573461153a5760015460405260206040f361105b565b63168819c081186100bb573461153a5760025460405260206040f35b638c64ea4a811861105b5760243610341761153a57600435670de0b6b3a763ffff811161153a576009015460405260206040f361105b565b636677b287811861105b573461153a5760035460405260206040f361105b565b630b91bd27811861012f573461153a5760045460405260206040f35b6373edeb30811861017c576101443610341761153a57610104356104e0525f610500527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610520526107b5565b63c6610657811861105b5760243610341761153a57600435670de0b6b3a763ffff811161153a576009015460405260405163765337b6606052602060606004607c845afa6101cc573d5f5f3e3d5ffd5b60203d1061153a576060518060a01c61153a5760a05260a090505161012052604051632621db2f60c052602060c0600460dc845afa61020d573d5f5f3e3d5ffd5b60203d1061153a5760c0518060a01c61153a5761010052610100905051610140526040610120f361105b565b63247ec8788118610255573461153a5760055460405260206040f35b634622ab03811861105b5760243610341761153a57602080604052671bc16d674ec8000d6004356020525f5260405f208160400160208254015f81601f0160051c6003811161153a5780156102bc57905b808501548160051b8501526001018181186102a6575b5050508051806020830101601f825f03163682375050601f19601f8251602001011690509050810190506040f361105b565b633cfd3d8c811861030a573461153a5760065460405260206040f35b636c3a55e5811861105b576101843610341761153a5760606101046104e0375b6004358060a01c61153a57610420526024358060a01c61153a576104405260c4358060a01c61153a576104605260e435600401604081351161153a57602081350180826104803750505f5460021461153a5760025f55610420516040526104405160605260806044608037610460516101005260206104805101806101208261048060045afa50506104e05161018052610500516101a0526103cd61056061105f565b61056051610540527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61052051146104365761054051638a938f2f610560526105205161058052803b1561153a575f610560602461057c5f855af1610434573d5f5f3e3d5ffd5b505b602061054060035f55f361105b565b6399d0b1ba811861105b573461153a5760075460405260206040f361105b565b63f851a4408118610481573461153a5760085460405260206040f35b63a8acf8df81186104d95760443610341761153a576004358060a01c61153a57604052671bc16d674ec8000b6040516020525f5260405f20602435670de0b6b3a763ffff811161153a57810190505460605260206060f35b635904e8dc811861105b576101443610341761153a57610104356104e0525f610500527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6105205261032a5661105b565b6386a8cdbc81186105655760243610341761153a57600435670de0b6b3a763ffff811161153a57670de0b6b3a7640009015460405260206040f35b63c6f2a81d811861105b5760243610341761153a576020600435670de0b6b3a763ffff811161153a57600901546386fc88d3604052602060406004605c845afa6105b1573d5f5f3e3d5ffd5b60203d1061153a576040518060a01c61153a5760805260809050f361105b565b63fd775c78811861105b573461153a57671bc16d674ec8000a5460405260206040f361105b565b63e5f260ba811861105b5760243610341761153a576004358060a01c61153a57604052671bc16d674ec8000c6040516020525f5260405f205460605260206060f361105b565b63e8980c6e811861105b573461153a57671bc16d674ec8000e5460405260206040f361105b565b639c3b70a6811861105b576101243610341761153a576040366104e0377fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6105205261032a5661105b565b635673683f811861105b576101643610341761153a5760406101046104e0377fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6105205261032a5661105b565b63d984d2a1811861105b576101243610341761153a576040366104e0377fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610520526107b55661105b565b63bccc056c811861105b576101643610341761153a5760406101046104e0377fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610520526107b55661105b565b634351e30b811861105b576101843610341761153a5760606101046104e0375b6004358060a01c61153a57610420526024358060a01c61153a576104405260c4358060a01c61153a576104605260e435600401604081351161153a57602081350180826104803750505f5460021461153a5760025f556064610540526064610560525f610580525f600a905b806105a0526040366105c037610460515a63c66106576106245260046105a05161064452602001610620526106205060206106a0610620516106408585fa905090506105c0523d602081183d60201002186106805261068080516105e05260208101516106005250610600516105e05160200360031b1c8060a01c61153a57610620526105c0516108b35760016108b9565b61062051155b156108c357610913565b610580516001810181811061153a579050610580526104205161062051186108f2576105a05161054052610908565b610440516106205118610908576105a051610560525b600101818118610821575b505060646105605118610927576001610930565b60646105405118155b1561099a5760126105a0527f546f6b656e73206e6f7420696e20706f6f6c00000000000000000000000000006105c0526105a0506105a051806105c001601f825f031636823750506308c379a061056052602061058052601f19601f6105a051011660440161057cfd5b600454610460516105c0526105c05161064052610580516105e0526105e05161066052610540516106005261060051610680526105605161062052610620516106a05260806003823b03596001821261153a5781600382863c81810183818561064060045afa5050828201815ff0801561153a5790509050905090506105a0526104205160405261044051606052608060446080376105a0516101005260206104805101806101208261048060045afa50506104e05161018052610500516101a052610a676105e061105f565b6105e0516105c0527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6105205114610ad0576105c051638a938f2f6105e0526105205161060052803b1561153a575f6105e060246105fc5f855af1610ace573d5f5f3e3d5ffd5b505b60206105c060035f55f361105b565b63e94b0dd2811861105b5760243610341761153a576020600435670de0b6b3a763ffff811161153a576009015463f77c4791604052602060406004605c845afa610b2b573d5f5f3e3d5ffd5b60203d1061153a576040518060a01c61153a5760805260809050f361105b565b636fe4501f811861105b5760243610341761153a576020600435670de0b6b3a763ffff811161153a576009015463765337b6604052602060406004605c845afa610b97573d5f5f3e3d5ffd5b60203d1061153a576040518060a01c61153a5760805260809050f361105b565b6349b899848118610c1f5760243610341761153a576020600435670de0b6b3a763ffff811161153a5760090154632621db2f604052602060406004605c845afa610c03573d5f5f3e3d5ffd5b60203d1061153a576040518060a01c61153a5760805260809050f35b63b0539187811861105b5760243610341761153a576020671bc16d674ec8000e54635d95c65e604052600435670de0b6b3a763ffff811161153a5760090154606052602060406024605c845afa610c78573d5f5f3e3d5ffd5b60203d1061153a576040518060a01c61153a5760805260809050f361105b565b63762e7b92811861105b5760243610341761153a576020600435670de0b6b3a763ffff811161153a576009015463f77c4791604052602060406004605c845afa610ce4573d5f5f3e3d5ffd5b60203d1061153a576040518060a01c61153a57608052608090505163adfae4ce60a052602060a0600460bc845afa610d1e573d5f5f3e3d5ffd5b60203d1061153a5760a0518060a01c61153a5760e05260e09050f361105b565b63bcf75a8f8118610d9d5760243610341761153a576004358060a01c61153a57604052671bc16d674ec800096040516020525f5260405f2054700100000000000000000000000000000000810381811161153a57905060605260206060f35b63a74fcf90811861105b5760443610341761153a575f5460021461153a5760025f55600854331861153a576301e3da5f6004351061153a576449d482455d6024351161153a576004356024351061153a576004356006556024356007557f279f1fe0f91b15d983792d0305a146961875690054db0d81bec8d1582461fc656040600460403760406040a160035f550061105b565b6350c1163a8118610eaf5760243610341761153a576004358060a01c61153a57604052671bc16d674ec8000e54635d95c65e60805260405160a052602060806024609c845afa610e83573d5f5f3e3d5ffd5b60203d1061153a576080518060a01c61153a5760c05260c09050516060526060511561153a5760206060f35b636c15eadf811861105b5760c43610341761153a576004358060a01c61153a576040526024358060a01c61153a576060526044358060a01c61153a576080526064358060a01c61153a5760a0526084358060a01c61153a5760c05260a4358060a01c61153a5760e0525f5460021461153a5760025f55600854331861153a5760405115610f3d576040516002555b60605115610f4c576060516001555b60805115610f5b576080516003555b60a05115610f6a5760a0516004555b60c05115610f795760c0516005555b60e05115610f8f5760e051671bc16d674ec8000e555b7f91d63b24386eae580bbbe65f3f50fd736c41031f36d85641bc13e74ac0cb95bb60605161010052604051610120526080516101405260a0516101605260c0516101805260e0516101a05260c0610100a160035f550061105b565b63e9333fab811861105b5760243610341761153a576004358060a01c61153a576040525f5460021461153a5760025f55600854331861153a576040516008557f5a272403b402d892977df56625f4164ccaf70ca3863991c43ecfe76a6905b0a160405160605260206060a160035f55005b5f5ffd5b606051604051186110cf57600a6101c0527f53616d6520746f6b656e000000000000000000000000000000000000000000006101e0526101c0506101c051806101e001601f825f031636823750506308c379a06101805260206101a052601f19601f6101c051011660440161019cfd5b60206115885f395f51604051186110e75760016110f6565b60206115885f395f5160605118155b1561153a577f602d3d8160093d39f3363d3d373d3d3d363d73000000000000000000000000006101e05260035460601b6101f3527f5af43d82803e903d91602b57fd5bf300000000000000000000000000000000006102075260366101e05ff0801561153a576101c0526006546101e05260075461020052610180511561118057610180516101e0525b6101a05115611192576101a051610200525b6301e3da5f6101e05110156111a7575f6111c8565b6449d482455d6102005111156111bd575f6111c8565b610200516101e05111155b61123157600b610220527f57726f6e672072617465730000000000000000000000000000000000000000006102405261022050610220518061024001601f825f031636823750506308c379a06101e052602061020052601f19601f6102205101166044016101fcfd5b60055460405161024052610240516102a0526101e05161026052610260516102c0526102005161028052610280516102e05260606003823b03596001821261153a5781600382863c8181018381856102a060045afa5050828201815ff0801561153a57905090509050905061022052604036610240376101c0516343687bba610280526001546102a0526002546102c0526040516102e052606051610300526080516103205260a051610340526101005161036052610220516103805260c0516103a05260e0516103c052604061028061014461029c5f855af1611317573d5f5f3e3d5ffd5b60403d1061153a57610280518060a01c61153a576103e0526102a0518060a01c61153a57610400526103e0905080516102405260208101516102605250671bc16d674ec8000a5461028052604051606051610280517f2a854a597908740dff5f0846840f167547ea0d7614c43bde3ea49be2e68c07ec6101c0516102a052610240516102c052610260516102e0526101005161030052610220516103205260a06102a0a46101c05161028051670de0b6b3a763ffff811161153a57600901556102605161028051670de0b6b3a763ffff811161153a57670de0b6b3a7640009015561028051700100000000000000000000000000000000810181811061153a579050671bc16d674ec800096101c0516020525f5260405f205560206101205101671bc16d674ec8000d610280516020525f5260405f205f82601f0160051c6003811161153a57801561147d57905b8060051b610120015181840155600101818118611465575b50505050610280516001810181811061153a579050671bc16d674ec8000a556040516102a05260206115885f395f51604051186114bc576060516102a0525b671bc16d674ec8000c6102a0516020525f5260405f2054610280526101c051671bc16d674ec8000b6102a0516020525f5260405f2061028051670de0b6b3a763ffff811161153a578101905055610280516001810181811061153a579050671bc16d674ec8000c6102a0516020525f5260405f20556101c051815250565b5f80fd05f8105b0c9806fd05d1105b0465009f105b105b105b105b00180e31105b0239003a0d3e06b0105b052a007f02ee04450bb7063e079500f3105b105b0b4b0adf005c0fea066507480113000000000000000000000000b102f7efa0d5de071a8d37b3548e1c7cb148caf3
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000b102f7efa0d5de071a8d37b3548e1c7cb148caf300000000000000000000000059cffdc8cf8b9b71d91da6de480c957993020e8a0000000000000000000000007002b727ef8f5571cb5f9d70d13dbeeb4dfae9d1000000000000000000000000c1db00a8e5ef7bfa476395cdbcc98235477cde4e0000000000000000000000000cd5a1e9e19af1f1b910ac3c3452a16b2b37155b00000000000000000000000086d347ce5f1e6f7ef4da00fb7c8d31fbd16996f0000000000000000000000000ef672bd94913cb6f1d2812a6e18c1ffded8eff5c0000000000000000000000004bbdfed5696b3a8f6b3813506b5389959c5cdc57
-----Decoded View---------------
Arg [0] : stablecoin (address): 0xB102f7Efa0d5dE071A8D37B3548e1C7CB148Caf3
Arg [1] : amm (address): 0x59CfFdC8cf8b9b71D91Da6de480c957993020E8A
Arg [2] : controller (address): 0x7002B727Ef8F5571Cb5F9D70D13DBEEb4dFAe9d1
Arg [3] : vault (address): 0xc1DB00a8E5Ef7bfa476395cdbcc98235477cDE4E
Arg [4] : pool_price_oracle (address): 0x0cD5A1e9E19Af1f1b910Ac3C3452A16B2B37155b
Arg [5] : monetary_policy (address): 0x86D347cE5f1E6f7Ef4Da00FB7c8d31fBD16996F0
Arg [6] : gauge_factory (address): 0xeF672bD94913CB6f1d2812a6e18c1fFdEd8eFf5c
Arg [7] : admin (address): 0x4BbdFEd5696b3a8F6B3813506b5389959C5CDC57
-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 000000000000000000000000b102f7efa0d5de071a8d37b3548e1c7cb148caf3
Arg [1] : 00000000000000000000000059cffdc8cf8b9b71d91da6de480c957993020e8a
Arg [2] : 0000000000000000000000007002b727ef8f5571cb5f9d70d13dbeeb4dfae9d1
Arg [3] : 000000000000000000000000c1db00a8e5ef7bfa476395cdbcc98235477cde4e
Arg [4] : 0000000000000000000000000cd5a1e9e19af1f1b910ac3c3452a16b2b37155b
Arg [5] : 00000000000000000000000086d347ce5f1e6f7ef4da00fb7c8d31fbd16996f0
Arg [6] : 000000000000000000000000ef672bd94913cb6f1d2812a6e18c1ffded8eff5c
Arg [7] : 0000000000000000000000004bbdfed5696b3a8f6b3813506b5389959c5cdc57
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ 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.