Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 1,657 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Zap | 21399308 | 9 days ago | IN | 0 ETH | 0.00203977 | ||||
Zap | 21368290 | 14 days ago | IN | 0 ETH | 0.00652895 | ||||
Zap | 21290002 | 25 days ago | IN | 0 ETH | 0.00150281 | ||||
Zap | 21232369 | 33 days ago | IN | 0 ETH | 0.00234822 | ||||
Zap | 21102987 | 51 days ago | IN | 0 ETH | 0.00080079 | ||||
Zap | 21028270 | 61 days ago | IN | 0 ETH | 0.00346987 | ||||
Zap | 20894827 | 80 days ago | IN | 0 ETH | 0.00229656 | ||||
Zap | 20583934 | 123 days ago | IN | 0 ETH | 0.00052472 | ||||
Zap | 20580289 | 124 days ago | IN | 0 ETH | 0.00014528 | ||||
Zap | 20511822 | 133 days ago | IN | 0 ETH | 0.00131628 | ||||
Zap | 20501125 | 135 days ago | IN | 0 ETH | 0.00039589 | ||||
Zap | 20473778 | 139 days ago | IN | 0 ETH | 0.00197437 | ||||
Zap | 20181429 | 179 days ago | IN | 0 ETH | 0.0011392 | ||||
Zap | 20098142 | 191 days ago | IN | 0 ETH | 0.01013445 | ||||
Zap | 20027509 | 201 days ago | IN | 0 ETH | 0.00264646 | ||||
Zap | 20025764 | 201 days ago | IN | 0 ETH | 0.00287374 | ||||
Zap | 20023853 | 201 days ago | IN | 0 ETH | 0.00095123 | ||||
Zap | 20010077 | 203 days ago | IN | 0 ETH | 0.00091777 | ||||
Zap | 20000789 | 205 days ago | IN | 0 ETH | 0.00077824 | ||||
Zap | 19999587 | 205 days ago | IN | 0 ETH | 0.00018731 | ||||
Zap | 19999587 | 205 days ago | IN | 0 ETH | 0.00018731 | ||||
Zap | 19999587 | 205 days ago | IN | 0 ETH | 0.00064108 | ||||
Zap | 19998412 | 205 days ago | IN | 0 ETH | 0.00194068 | ||||
Zap | 19996621 | 205 days ago | IN | 0 ETH | 0.00069209 | ||||
Zap | 19988125 | 206 days ago | IN | 0 ETH | 0.00090643 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
YCRV Zap v3
Compiler Version
vyper:0.3.9
Contract Source Code (Vyper language format)
# @version 0.3.9 """ @title YCRV Zap v3 @license GNU AGPLv3 @author Yearn Finance @notice Zap into yCRV ecosystem positions in a single transaction @dev To use safely, supply a reasonable min_out value during your zap. """ from vyper.interfaces import ERC20 from vyper.interfaces import ERC20Detailed interface Vault: def deposit(amount: uint256, recipient: address = msg.sender) -> uint256: nonpayable def withdraw(shares: uint256) -> uint256: nonpayable def pricePerShare() -> uint256: view interface IYCRV: def burn_to_mint(amount: uint256, recipient: address = msg.sender) -> uint256: nonpayable def mint(amount: uint256, recipient: address = msg.sender) -> uint256: nonpayable interface Curve: def get_virtual_price() -> uint256: view def get_dy(i: int128, j: int128, dx: uint256) -> uint256: view def exchange(i: int128, j: int128, _dx: uint256, _min_dy: uint256) -> uint256: nonpayable def add_liquidity(amounts: uint256[2], min_mint_amount: uint256) -> uint256: nonpayable def remove_liquidity_one_coin(_token_amount: uint256, i: int128, min_amount: uint256) -> uint256: nonpayable def remove_liquidity(_burn_amount: uint256, _min_amounts: uint256[2]) -> uint256[2]: nonpayable def calc_token_amount(amounts: uint256[2], deposit: bool) -> uint256: view def calc_withdraw_one_coin(_burn_amount: uint256, i: int128, _previous: bool = False) -> uint256: view def totalSupply() -> uint256: view def balances(index: uint256) -> uint256: view event UpdateSweepRecipient: sweep_recipient: indexed(address) event UpdateMintBuffer: mint_buffer: uint256 YVECRV: constant(address) = 0xc5bDdf9843308380375a611c18B50Fb9341f502A # YVECRV CRV: constant(address) = 0xD533a949740bb3306d119CC777fa900bA034cd52 # CRV YVBOOST: constant(address) = 0x9d409a0A012CFbA9B15F6D4B36Ac57A46966Ab9a # YVBOOST YCRV: constant(address) = 0xFCc5c47bE19d06BF83eB04298b026F81069ff65b # YCRV STYCRV: constant(address) = 0x27B5739e22ad9033bcBf192059122d163b60349D # ST-YCRV LPYCRV_V1: constant(address) = 0xc97232527B62eFb0D8ed38CF3EA103A6CcA4037e # LP-YCRV Deprecated LPYCRV_V2: constant(address) = 0x6E9455D109202b426169F0d8f01A3332DAE160f3 # LP-YCRV POOL_V1: constant(address) = 0x453D92C7d4263201C69aACfaf589Ed14202d83a4 # OLD POOL POOL_V2: constant(address) = 0x99f5aCc8EC2Da2BC0771c32814EFF52b712de1E5 # NEW POOL CVXCRV: constant(address) = 0x62B9c7356A2Dc64a1969e19C23e4f579F9810Aa7 # CVXCRV CVXCRVPOOL: constant(address) = 0x9D0464996170c6B9e75eED71c68B99dDEDf279e8 # CVXCRVPOOL LEGACY_TOKENS: public(immutable(address[2])) OUTPUT_TOKENS: public(immutable(address[3])) sweep_recipient: public(address) mint_buffer: public(uint256) @external @view def name() -> String[32]: return "YCRV Zap v3" @external def __init__(): self.sweep_recipient = 0xFEB4acf3df3cDEA7399794D0869ef76A6EfAff52 self.mint_buffer = 15 assert ERC20(YVECRV).approve(YCRV, max_value(uint256)) assert ERC20(YCRV).approve(STYCRV, max_value(uint256)) assert ERC20(YCRV).approve(POOL_V2, max_value(uint256)) assert ERC20(POOL_V2).approve(LPYCRV_V2, max_value(uint256)) assert ERC20(CRV).approve(POOL_V2, max_value(uint256)) assert ERC20(CRV).approve(YCRV, max_value(uint256)) assert ERC20(CVXCRV).approve(CVXCRVPOOL, max_value(uint256)) LEGACY_TOKENS = [YVECRV, YVBOOST] OUTPUT_TOKENS = [YCRV, STYCRV, LPYCRV_V2] @external def zap(_input_token: address, _output_token: address, _amount_in: uint256 = max_value(uint256), _min_out: uint256 = 0, _recipient: address = msg.sender) -> uint256: """ @notice This function allows users to zap from any legacy tokens, CRV, or any yCRV tokens as input into any yCRV token as output. @dev When zapping between tokens that might incur slippage, it is recommended to supply a _min_out value > 0. You can estimate the expected output amount by making an off-chain call to this contract's "calc_expected_out" helper. Discount the result by some extra % to allow buffer, and set as _min_out. @param _input_token Can be CRV, yveCRV, yvBOOST, cvxCRV or any yCRV token address that user wishes to migrate from @param _output_token The yCRV token address that user wishes to migrate to @param _amount_in Amount of input token to migrate, defaults to full balance @param _min_out The minimum amount of output token to receive @param _recipient The address where the output token should be sent @return Amount of output token transferred to the _recipient """ assert _amount_in > 0 assert _input_token != _output_token # dev: input and output token are same assert _output_token in OUTPUT_TOKENS # dev: invalid output token address amount: uint256 = _amount_in if amount == max_value(uint256): amount = ERC20(_input_token).balanceOf(msg.sender) if _input_token in LEGACY_TOKENS: return self._zap_from_legacy(_input_token, _output_token, amount, _min_out, _recipient) elif _input_token == CRV or _input_token == CVXCRV: assert ERC20(_input_token).transferFrom(msg.sender, self, amount) if _input_token == CVXCRV: amount = Curve(CVXCRVPOOL).exchange(1, 0, amount, 0) amount = self._convert_crv(amount) elif _input_token in [LPYCRV_V1, POOL_V1]: # If this input token path is chosen, we assume it is a migration. # This allows us to hardcode a single route, # no need for many permutations to all possible outputs. assert _output_token == LPYCRV_V2 assert ERC20(_input_token).transferFrom(msg.sender, self, amount) if _input_token == LPYCRV_V1: amount = Vault(LPYCRV_V1).withdraw(amount) amounts: uint256[2] = Curve(POOL_V1).remove_liquidity(amount, [0,0]) amount = Curve(POOL_V2).add_liquidity(amounts, 0) amount = Vault(LPYCRV_V2).deposit(amount, _recipient) assert amount >= _min_out return amount else: assert _input_token in OUTPUT_TOKENS or _input_token == POOL_V2 # dev: invalid input token address assert ERC20(_input_token).transferFrom(msg.sender, self, amount) if _input_token == STYCRV: amount = Vault(STYCRV).withdraw(amount) elif _input_token in [LPYCRV_V2, POOL_V2]: if _input_token == LPYCRV_V2: amount = Vault(LPYCRV_V2).withdraw(amount) amount = Curve(POOL_V2).remove_liquidity_one_coin(amount, 1, 0) if _output_token == YCRV: assert amount >= _min_out # dev: min out ERC20(_output_token).transfer(_recipient, amount) return amount return self._convert_to_output(_output_token, amount, _min_out, _recipient) @internal def _zap_from_legacy(_input_token: address, _output_token: address, _amount: uint256, _min_out: uint256, _recipient: address) -> uint256: # @dev This function handles any inputs that are legacy tokens (yveCRV, yvBOOST) amount: uint256 = _amount assert ERC20(_input_token).transferFrom(msg.sender, self, amount) if _input_token == YVBOOST: amount = Vault(YVBOOST).withdraw(amount) # Mint YCRV if _output_token == YCRV: IYCRV(YCRV).burn_to_mint(amount, _recipient) assert amount >= _min_out # dev: min out return amount IYCRV(YCRV).burn_to_mint(amount) return self._convert_to_output(_output_token, amount, _min_out, _recipient) @internal def _convert_crv(amount: uint256) -> uint256: output_amount: uint256 = Curve(POOL_V2).get_dy(0, 1, amount) buffered_amount: uint256 = amount + (amount * self.mint_buffer / 10_000) if output_amount > buffered_amount: return Curve(POOL_V2).exchange(0, 1, amount, 0) else: return IYCRV(YCRV).mint(amount) @internal def _lp(_amounts: uint256[2]) -> uint256: return Curve(POOL_V2).add_liquidity(_amounts, 0) @internal def _convert_to_output(_output_token: address, amount: uint256, _min_out: uint256, _recipient: address) -> uint256: # dev: output token and amount values have already been validated if _output_token == STYCRV: amount_out: uint256 = Vault(STYCRV).deposit(amount, _recipient) assert amount_out >= _min_out # dev: min out return amount_out assert _output_token == LPYCRV_V2 amount_out: uint256 = Vault(LPYCRV_V2).deposit(self._lp([0, amount]), _recipient) assert amount_out >= _min_out # dev: min out return amount_out @view @internal def _relative_price_from_legacy(_input_token: address, _output_token: address, _amount_in: uint256) -> uint256: if _amount_in == 0: return 0 amount: uint256 = _amount_in if _input_token == YVBOOST: amount = Vault(YVBOOST).pricePerShare() * amount / 10 ** 18 if _output_token == YCRV: return amount elif _output_token == STYCRV: return amount * 10 ** 18 / Vault(STYCRV).pricePerShare() assert _output_token == LPYCRV_V2 lp_amount: uint256 = amount * 10 ** 18 / Curve(POOL_V2).get_virtual_price() return lp_amount * 10 ** 18 / Vault(LPYCRV_V2).pricePerShare() @view @external def relative_price(_input_token: address, _output_token: address, _amount_in: uint256) -> uint256: """ @notice This returns a rough amount of output assuming there's a balanced liquidity pool. The return value should not be relied upon for an accurate estimate for actual output amount. @dev This value should only be used to compare against "calc_expected_out_from_legacy" to project price impact. @param _input_token The token to migrate from @param _output_token The yCRV token to migrate to @param _amount_in Amount of input token to migrate, defaults to full balance @return Amount of output token transferred to the _recipient """ assert _output_token in OUTPUT_TOKENS # dev: invalid output token address if _input_token in LEGACY_TOKENS: return self._relative_price_from_legacy(_input_token, _output_token, _amount_in) assert ( _input_token in [CRV , CVXCRV , LPYCRV_V1 , POOL_V1, POOL_V2] or _input_token in OUTPUT_TOKENS ) # dev: invalid input token address if _amount_in == 0: return 0 amount: uint256 = _amount_in if _input_token == _output_token: return _amount_in elif _input_token == STYCRV: amount = Vault(STYCRV).pricePerShare() * amount / 10 ** 18 elif _input_token in [LPYCRV_V2, POOL_V2]: if _input_token == LPYCRV_V2: amount = Vault(LPYCRV_V2).pricePerShare() * amount / 10 ** 18 amount = Curve(POOL_V2).get_virtual_price() * amount / 10 ** 18 elif _input_token in [LPYCRV_V1, POOL_V1]: assert _output_token == LPYCRV_V2 if _input_token == LPYCRV_V1: amount = Vault(LPYCRV_V1).pricePerShare() * amount / 10 ** 18 amount = Curve(POOL_V1).get_virtual_price() * amount / 10 ** 18 if _output_token == YCRV: return amount elif _output_token == STYCRV: return amount * 10 ** 18 / Vault(STYCRV).pricePerShare() assert _output_token == LPYCRV_V2 lp_amount: uint256 = amount * 10 ** 18 / Curve(POOL_V2).get_virtual_price() return lp_amount * 10 ** 18 / Vault(LPYCRV_V2).pricePerShare() @view @internal def _calc_expected_out_from_legacy(_input_token: address, _output_token: address, _amount_in: uint256) -> uint256: if _amount_in == 0: return 0 amount: uint256 = _amount_in if _input_token == YVBOOST: amount = Vault(YVBOOST).pricePerShare() * amount / 10 ** 18 if _output_token == YCRV: return amount elif _output_token == STYCRV: return amount * 10 ** 18 / Vault(STYCRV).pricePerShare() assert _output_token == LPYCRV_V2 lp_amount: uint256 = Curve(POOL_V2).calc_token_amount([0, amount], True) return lp_amount * 10 ** 18 / Vault(LPYCRV_V2).pricePerShare() @view @external def calc_expected_out(_input_token: address, _output_token: address, _amount_in: uint256) -> uint256: """ @notice This returns the expected amount of tokens output after conversion. @dev This calculation accounts for slippage, but not fees. Needed to prevent front-running, do not rely on it for precise calculations! @param _input_token A valid input token address to migrate from @param _output_token The yCRV token address to migrate to @param _amount_in Amount of input token to migrate, defaults to full balance @return Amount of output token transferred to the _recipient """ assert _output_token in OUTPUT_TOKENS # dev: invalid output token address assert _input_token != _output_token if _input_token in LEGACY_TOKENS: return self._calc_expected_out_from_legacy(_input_token, _output_token, _amount_in) amount: uint256 = _amount_in if _input_token == CRV or _input_token == CVXCRV: if _input_token == CVXCRV: amount = Curve(CVXCRVPOOL).get_dy(1, 0, amount) output_amount: uint256 = Curve(POOL_V2).get_dy(0, 1, amount) buffered_amount: uint256 = amount + (amount * self.mint_buffer / 10_000) if output_amount > buffered_amount: # dev: ensure calculation uses buffer amount = output_amount elif _input_token in [LPYCRV_V1, POOL_V1]: assert _output_token == LPYCRV_V2 if _input_token == LPYCRV_V1: amount = Vault(LPYCRV_V1).pricePerShare() * amount / 10 ** 18 amounts: uint256[2] = self.assets_amounts_from_lp(POOL_V1, amount) amount = Curve(POOL_V2).calc_token_amount(amounts, True) # Deposit return amount * 10 ** 18 / Vault(LPYCRV_V2).pricePerShare() else: assert _input_token in OUTPUT_TOKENS or _input_token == POOL_V2 # dev: invalid input token address if amount == 0: return 0 if _input_token == STYCRV: amount = Vault(STYCRV).pricePerShare() * amount / 10 ** 18 elif _input_token in [LPYCRV_V2, POOL_V2]: if _input_token == LPYCRV_V2: amount = Vault(LPYCRV_V2).pricePerShare() * amount / 10 ** 18 amount = Curve(POOL_V2).calc_withdraw_one_coin(amount, 1) if _output_token == YCRV: return amount elif _output_token == STYCRV: return amount * 10 ** 18 / Vault(STYCRV).pricePerShare() assert _output_token == LPYCRV_V2 lp_amount: uint256 = Curve(POOL_V2).calc_token_amount([0, amount], True) return lp_amount * 10 ** 18 / Vault(LPYCRV_V2).pricePerShare() @view @internal def assets_amounts_from_lp(pool: address, _lp_amount: uint256) -> uint256[2]: supply: uint256 = Curve(pool).totalSupply() ratio: uint256 = _lp_amount * 10 ** 18 / supply balance0: uint256 = Curve(pool).balances(0) * ratio / 10 ** 18 balance1: uint256 = Curve(pool).balances(1) * ratio / 10 ** 18 return [balance0, balance1] @external def sweep(_token: address, _amount: uint256 = max_value(uint256)): assert msg.sender == self.sweep_recipient value: uint256 = _amount if value == max_value(uint256): value = ERC20(_token).balanceOf(self) assert ERC20(_token).transfer(self.sweep_recipient, value, default_return_value=True) @external def set_mint_buffer(_new_buffer: uint256): """ @notice Allow SWEEP_RECIPIENT to express a preference towards minting over swapping to save gas and improve overall locked position @param _new_buffer New percentage (expressed in BPS) to nudge zaps towards minting """ assert msg.sender == self.sweep_recipient assert _new_buffer < 500 # dev: buffer too high self.mint_buffer = _new_buffer log UpdateMintBuffer(_new_buffer) @external def set_sweep_recipient(_proposed_sweep_recipient: address): assert msg.sender == self.sweep_recipient self.sweep_recipient = _proposed_sweep_recipient log UpdateSweepRecipient(_proposed_sweep_recipient)
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"name":"UpdateSweepRecipient","inputs":[{"name":"sweep_recipient","type":"address","indexed":true}],"anonymous":false,"type":"event"},{"name":"UpdateMintBuffer","inputs":[{"name":"mint_buffer","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"stateMutability":"view","type":"function","name":"name","inputs":[],"outputs":[{"name":"","type":"string"}]},{"stateMutability":"nonpayable","type":"constructor","inputs":[],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"zap","inputs":[{"name":"_input_token","type":"address"},{"name":"_output_token","type":"address"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"nonpayable","type":"function","name":"zap","inputs":[{"name":"_input_token","type":"address"},{"name":"_output_token","type":"address"},{"name":"_amount_in","type":"uint256"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"nonpayable","type":"function","name":"zap","inputs":[{"name":"_input_token","type":"address"},{"name":"_output_token","type":"address"},{"name":"_amount_in","type":"uint256"},{"name":"_min_out","type":"uint256"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"nonpayable","type":"function","name":"zap","inputs":[{"name":"_input_token","type":"address"},{"name":"_output_token","type":"address"},{"name":"_amount_in","type":"uint256"},{"name":"_min_out","type":"uint256"},{"name":"_recipient","type":"address"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"relative_price","inputs":[{"name":"_input_token","type":"address"},{"name":"_output_token","type":"address"},{"name":"_amount_in","type":"uint256"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"calc_expected_out","inputs":[{"name":"_input_token","type":"address"},{"name":"_output_token","type":"address"},{"name":"_amount_in","type":"uint256"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"nonpayable","type":"function","name":"sweep","inputs":[{"name":"_token","type":"address"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"sweep","inputs":[{"name":"_token","type":"address"},{"name":"_amount","type":"uint256"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"set_mint_buffer","inputs":[{"name":"_new_buffer","type":"uint256"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"set_sweep_recipient","inputs":[{"name":"_proposed_sweep_recipient","type":"address"}],"outputs":[]},{"stateMutability":"view","type":"function","name":"LEGACY_TOKENS","inputs":[{"name":"arg0","type":"uint256"}],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"OUTPUT_TOKENS","inputs":[{"name":"arg0","type":"uint256"}],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"sweep_recipient","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"mint_buffer","inputs":[],"outputs":[{"name":"","type":"uint256"}]}]
Contract Creation Code
612601515034612a185773feb4acf3df3cdea7399794d0869ef76a6efaff525f55600f60015563095ea7b360405273fcc5c47be19d06bf83eb04298b026f81069ff65b6060527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff608052602060406044605c5f73c5bddf9843308380375a611c18b50fb9341f502a5af1610095573d5f5f3e3d5ffd5b60203d10612a18576040518060011c612a185760a05260a05115612a185763095ea7b36040527327b5739e22ad9033bcbf192059122d163b60349d6060527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff608052602060406044605c5f73fcc5c47be19d06bf83eb04298b026f81069ff65b5af1610123573d5f5f3e3d5ffd5b60203d10612a18576040518060011c612a185760a05260a05115612a185763095ea7b36040527399f5acc8ec2da2bc0771c32814eff52b712de1e56060527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff608052602060406044605c5f73fcc5c47be19d06bf83eb04298b026f81069ff65b5af16101b1573d5f5f3e3d5ffd5b60203d10612a18576040518060011c612a185760a05260a05115612a185763095ea7b3604052736e9455d109202b426169f0d8f01a3332dae160f36060527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff608052602060406044605c5f7399f5acc8ec2da2bc0771c32814eff52b712de1e55af161023f573d5f5f3e3d5ffd5b60203d10612a18576040518060011c612a185760a05260a05115612a185763095ea7b36040527399f5acc8ec2da2bc0771c32814eff52b712de1e56060527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff608052602060406044605c5f73d533a949740bb3306d119cc777fa900ba034cd525af16102cd573d5f5f3e3d5ffd5b60203d10612a18576040518060011c612a185760a05260a05115612a185763095ea7b360405273fcc5c47be19d06bf83eb04298b026f81069ff65b6060527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff608052602060406044605c5f73d533a949740bb3306d119cc777fa900ba034cd525af161035b573d5f5f3e3d5ffd5b60203d10612a18576040518060011c612a185760a05260a05115612a185763095ea7b3604052739d0464996170c6b9e75eed71c68b99ddedf279e86060527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff608052602060406044605c5f7362b9c7356a2dc64a1969e19c23e4f579f9810aa75af16103e9573d5f5f3e3d5ffd5b60203d10612a18576040518060011c612a185760a05260a05115612a185773c5bddf9843308380375a611c18b50fb9341f502a61258152739d409a0a012cfba9b15f6d4b36ac57a46966ab9a6125a15273fcc5c47be19d06bf83eb04298b026f81069ff65b6125c1527327b5739e22ad9033bcbf192059122d163b60349d6125e152736e9455d109202b426169f0d8f01a3332dae160f36126015261258161049661000039612621610000f36003361161000c57611b20565b5f3560e01c3461257057633a08fefb811861004a5760243610612570576020600435600181116125705760051b612581015f395f5160405260206040f35b6323b03ca881186100815760243610612570576020600435600281116125705760051b604001612581015f395f5160405260206040f35b63168861678118610097575f5460405260206040f35b6341ba5aa181186100ae5760015460405260206040f35b6306fdde03811861012d57602080608052600b6040527f59435256205a617020763300000000000000000000000000000000000000000060605260408160800181516020830160208301815181525050808252508051806020830101601f825f03163682375050601f19601f8251602001011690509050810190506080f35b6359ae02dd81186101745760443610612570577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6103c0525f6103e05233610400526101ed565b6347ce3e69811861019d5760643610612570576044356103c0525f6103e05233610400526101ed565b63df4fd97081186101c2576084361061257057604060446103c03733610400526101ed565b635178790581186109dc5760a4361061257057604060446103c0376084358060a01c61257057610400525b6004358060a01c61257057610380526024358060a01c612570576103a0526103c05115612570576103a0516103805114612570576103a0515f610420525f6003905b60208160051b604001612581015f395f5183186102515760016104205261025c565b60010181811861022f575b505061042051905015612570576103c0516104205261042051196102b857610380516370a082316104405233610460526020610440602461045c845afa6102a5573d5f5f3e3d5ffd5b60203d1061257057610440905051610420525b610380515f610440525f6002905b60208160051b612581015f395f5183186102e5576001610440526102f0565b6001018181186102c6575b50506104405190506107625773d533a949740bb3306d119cc777fa900ba034cd52610380511861032157600161033d565b7362b9c7356a2dc64a1969e19c23e4f579f9810aa76103805118155b610669576103805173c97232527b62efb0d8ed38cf3ea103a6cca4037e8118610367576001610380565b73453d92c7d4263201c69aacfaf589ed14202d83a48118155b905061045657610380515f610440525f6003905b60208160051b604001612581015f395f5183186103b6576001610440526103c1565b600101818118610394575b50506104405190506103ed577399f5acc8ec2da2bc0771c32814eff52b712de1e56103805118156103f0565b60015b1561257057610380516323b872dd6104405233610460523061048052610420516104a0526020610440606461045c5f855af161042e573d5f5f3e3d5ffd5b60203d1061257057610440518060011c612570576104c0526104c0905051156125705761079f565b736e9455d109202b426169f0d8f01a3332dae160f36103a0511861257057610380516323b872dd610460523361048052306104a052610420516104c0526020610460606461047c5f855af16104ad573d5f5f3e3d5ffd5b60203d1061257057610460518060011c612570576104e0526104e0905051156125705773c97232527b62efb0d8ed38cf3ea103a6cca4037e610380511861053e57632e1a7d4d6104605261042051610480526020610460602461047c5f73c97232527b62efb0d8ed38cf3ea103a6cca4037e5af161052d573d5f5f3e3d5ffd5b60203d106125705761046051610420525b635b36389c6104a052610420516104c0526040366104e03760406104a060646104bc5f73453d92c7d4263201c69aacfaf589ed14202d83a45af1610584573d5f5f3e3d5ffd5b60403d10612570576104a080516104605260208101516104805250630b4c7e4d6104a052610460516104c052610480516104e0525f6105005260206104a060646104bc5f7399f5acc8ec2da2bc0771c32814eff52b712de1e55af16105eb573d5f5f3e3d5ffd5b60203d10612570576104a05161042052636e553f656104a052610420516104c052610400516104e05260206104a060446104bc5f736e9455d109202b426169f0d8f01a3332dae160f35af1610642573d5f5f3e3d5ffd5b60203d10612570576104a051610420526103e05161042051106125705760206104206109da565b610380516323b872dd6104405233610460523061048052610420516104a0526020610440606461045c5f855af16106a2573d5f5f3e3d5ffd5b60203d1061257057610440518060011c612570576104c0526104c090505115612570577362b9c7356a2dc64a1969e19c23e4f579f9810aa7610380511861074357633df02124610440526001610460525f61048052610420516104a0525f6104c0526020610440608461045c5f739d0464996170c6b9e75eed71c68b99ddedf279e85af1610732573d5f5f3e3d5ffd5b60203d106125705761044051610420525b61042051604052610755610440611e84565b610440516104205261079f565b602061038051610220526103a0516102405261042051610260526103e05161028052610400516102a052610797610460611ca8565b6104606109da565b7327b5739e22ad9033bcbf192059122d163b60349d610380511861081157632e1a7d4d6104405261042051610460526020610440602461045c5f7327b5739e22ad9033bcbf192059122d163b60349d5af16107fc573d5f5f3e3d5ffd5b60203d10612570576104405161042052610920565b61038051736e9455d109202b426169f0d8f01a3332dae160f38118610837576001610850565b7399f5acc8ec2da2bc0771c32814eff52b712de1e58118155b90501561092057736e9455d109202b426169f0d8f01a3332dae160f361038051186108c557632e1a7d4d6104605261042051610480526020610460602461047c5f736e9455d109202b426169f0d8f01a3332dae160f35af16108b4573d5f5f3e3d5ffd5b60203d106125705761046051610420525b631a4d01d261046052610420516104805260016104a0525f6104c0526020610460606461047c5f7399f5acc8ec2da2bc0771c32814eff52b712de1e55af161090f573d5f5f3e3d5ffd5b60203d106125705761046051610420525b73fcc5c47be19d06bf83eb04298b026f81069ff65b6103a051186109a9576103e0516104205110612570576103a05163a9059cbb61044052610400516104605261042051610480526020610440604461045c5f855af1610982573d5f5f3e3d5ffd5b60203d1061257057610440518060011c612570576104a0526104a0505060206104206109da565b60206103a0516101005261042051610120526103e0516101405261040051610160526109d6610440611b78565b6104405bf35b636ce068cf81186110f55760643610612570576004358060a01c61257057610120526024358060a01c6125705761014052610140515f610160525f6003905b60208160051b604001612581015f395f518318610a3d57600161016052610a48565b600101818118610a1b575b50506101605190501561257057610120515f610160525f6002905b60208160051b612581015f395f518318610a8257600161016052610a8d565b600101818118610a63575b505061016051905015610ac35760206101205160405261014051606052604435608052610abb610180611fbb565b6101806110f3565b6101205173d533a949740bb3306d119cc777fa900ba034cd528118610ae9576001610b68565b7362b9c7356a2dc64a1969e19c23e4f579f9810aa78118610b0b576001610b68565b73c97232527b62efb0d8ed38cf3ea103a6cca4037e8118610b2d576001610b68565b73453d92c7d4263201c69aacfaf589ed14202d83a48118610b4f576001610b68565b7399f5acc8ec2da2bc0771c32814eff52b712de1e58118155b9050610bb657610120515f610180525f6003905b60208160051b604001612581015f395f518318610b9e57600161018052610ba9565b600101818118610b7c575b5050610180519050610bb9565b60015b1561257057604435610bd4575f6101605260206101606110f3565b60443561016052610140516101205118610bf9576044356101805260206101806110f3565b7327b5739e22ad9033bcbf192059122d163b60349d6101205118610c87576399530b06610180526020610180600461019c7327b5739e22ad9033bcbf192059122d163b60349d5afa610c4d573d5f5f3e3d5ffd5b60203d106125705761018051610160518082028115838383041417156125705790509050670de0b6b3a76400008104905061016052610f20565b61012051736e9455d109202b426169f0d8f01a3332dae160f38118610cad576001610cc6565b7399f5acc8ec2da2bc0771c32814eff52b712de1e58118155b9050610e2a576101205173c97232527b62efb0d8ed38cf3ea103a6cca4037e8118610cf2576001610d0b565b73453d92c7d4263201c69aacfaf589ed14202d83a48118155b905015610f2057736e9455d109202b426169f0d8f01a3332dae160f361014051186125705773c97232527b62efb0d8ed38cf3ea103a6cca4037e6101205118610dba576399530b066101a05260206101a060046101bc73c97232527b62efb0d8ed38cf3ea103a6cca4037e5afa610d84573d5f5f3e3d5ffd5b60203d10612570576101a051610160518082028115838383041417156125705790509050670de0b6b3a764000081049050610160525b63bb7b8b806101a05260206101a060046101bc73453d92c7d4263201c69aacfaf589ed14202d83a45afa610df0573d5f5f3e3d5ffd5b60203d10612570576101a051610160518082028115838383041417156125705790509050670de0b6b3a76400008104905061016052610f20565b736e9455d109202b426169f0d8f01a3332dae160f36101205118610eb4576399530b066101a05260206101a060046101bc736e9455d109202b426169f0d8f01a3332dae160f35afa610e7e573d5f5f3e3d5ffd5b60203d10612570576101a051610160518082028115838383041417156125705790509050670de0b6b3a764000081049050610160525b63bb7b8b806101a05260206101a060046101bc7399f5acc8ec2da2bc0771c32814eff52b712de1e55afa610eea573d5f5f3e3d5ffd5b60203d10612570576101a051610160518082028115838383041417156125705790509050670de0b6b3a764000081049050610160525b73fcc5c47be19d06bf83eb04298b026f81069ff65b6101405118610f485760206101606110f3565b7327b5739e22ad9033bcbf192059122d163b60349d6101405118610fe55761016051670de0b6b3a7640000810281670de0b6b3a76400008204186125705790506399530b06610180526020610180600461019c7327b5739e22ad9033bcbf192059122d163b60349d5afa610fbe573d5f5f3e3d5ffd5b60203d106125705761018051801561257057808204905090506101c05260206101c06110f3565b736e9455d109202b426169f0d8f01a3332dae160f361014051186125705761016051670de0b6b3a7640000810281670de0b6b3a764000082041861257057905063bb7b8b806101a05260206101a060046101bc7399f5acc8ec2da2bc0771c32814eff52b712de1e55afa61105b573d5f5f3e3d5ffd5b60203d10612570576101a051801561257057808204905090506101805261018051670de0b6b3a7640000810281670de0b6b3a76400008204186125705790506399530b066101a05260206101a060046101bc736e9455d109202b426169f0d8f01a3332dae160f35afa6110d0573d5f5f3e3d5ffd5b60203d10612570576101a051801561257057808204905090506101e05260206101e05bf35b6305d465ff81186119515760643610612570576004358060a01c61257057610160526024358060a01c6125705761018052610180515f6101a0525f6003905b60208160051b604001612581015f395f5183186111565760016101a052611161565b600101818118611134575b50506101a0519050156125705761018051610160511461257057610160515f6101a0525f6002905b60208160051b612581015f395f5183186111a85760016101a0526111b3565b600101818118611189575b50506101a0519050156111e957602061016051604052610180516060526044356080526111e16101c061220b565b6101c061194f565b6044356101a05273d533a949740bb3306d119cc777fa900ba034cd526101605118611215576001611231565b7362b9c7356a2dc64a1969e19c23e4f579f9810aa76101605118155b6114ae576101605173c97232527b62efb0d8ed38cf3ea103a6cca4037e811861125b576001611274565b73453d92c7d4263201c69aacfaf589ed14202d83a48118155b90506112ee57610160515f6101c0525f6003905b60208160051b604001612581015f395f5183186112aa5760016101c0526112b5565b600101818118611288575b50506101c05190506112e1577399f5acc8ec2da2bc0771c32814eff52b712de1e56101605118156112e4565b60015b15612570576115ce565b736e9455d109202b426169f0d8f01a3332dae160f361018051186125705773c97232527b62efb0d8ed38cf3ea103a6cca4037e6101605118611396576399530b066101e05260206101e060046101fc73c97232527b62efb0d8ed38cf3ea103a6cca4037e5afa611360573d5f5f3e3d5ffd5b60203d10612570576101e0516101a0518082028115838383041417156125705790509050670de0b6b3a7640000810490506101a0525b73453d92c7d4263201c69aacfaf589ed14202d83a46040526101a0516060526113c061022061243f565b61022080516101e0526020810151610200525063ed8e84f3610220526101e0516102405261020051610260526001610280526020610220606461023c7399f5acc8ec2da2bc0771c32814eff52b712de1e55afa61141f573d5f5f3e3d5ffd5b60203d1061257057610220516101a0526101a051670de0b6b3a7640000810281670de0b6b3a76400008204186125705790506399530b06610220526020610220600461023c736e9455d109202b426169f0d8f01a3332dae160f35afa611487573d5f5f3e3d5ffd5b60203d1061257057610220518015612570578082049050905061026052602061026061194f565b7362b9c7356a2dc64a1969e19c23e4f579f9810aa7610160511861152657635e0d443f6101c05260016101e0525f610200526101a0516102205260206101c060646101dc739d0464996170c6b9e75eed71c68b99ddedf279e85afa611515573d5f5f3e3d5ffd5b60203d10612570576101c0516101a0525b635e0d443f6101e0525f610200526001610220526101a0516102405260206101e060646101fc7399f5acc8ec2da2bc0771c32814eff52b712de1e55afa61156f573d5f5f3e3d5ffd5b60203d10612570576101e0516101c0526101a0516101a05160015480820281158383830414171561257057905090506127108104905080820182811061257057905090506101e0526101e0516101c05111156115ce576101c0516101a0525b6101a0516115e5575f6101c05260206101c061194f565b7327b5739e22ad9033bcbf192059122d163b60349d6101605118611673576399530b066101c05260206101c060046101dc7327b5739e22ad9033bcbf192059122d163b60349d5afa611639573d5f5f3e3d5ffd5b60203d10612570576101c0516101a0518082028115838383041417156125705790509050670de0b6b3a7640000810490506101a052611798565b61016051736e9455d109202b426169f0d8f01a3332dae160f381186116995760016116b2565b7399f5acc8ec2da2bc0771c32814eff52b712de1e58118155b90501561179857736e9455d109202b426169f0d8f01a3332dae160f36101605118611743576399530b066101e05260206101e060046101fc736e9455d109202b426169f0d8f01a3332dae160f35afa61170d573d5f5f3e3d5ffd5b60203d10612570576101e0516101a0518082028115838383041417156125705790509050670de0b6b3a7640000810490506101a0525b63cc2b27d76101e0526101a0516102005260016102205260206101e060446101fc7399f5acc8ec2da2bc0771c32814eff52b712de1e55afa611787573d5f5f3e3d5ffd5b60203d10612570576101e0516101a0525b73fcc5c47be19d06bf83eb04298b026f81069ff65b61018051186117c05760206101a061194f565b7327b5739e22ad9033bcbf192059122d163b60349d610180511861185d576101a051670de0b6b3a7640000810281670de0b6b3a76400008204186125705790506399530b066101c05260206101c060046101dc7327b5739e22ad9033bcbf192059122d163b60349d5afa611836573d5f5f3e3d5ffd5b60203d10612570576101c0518015612570578082049050905061020052602061020061194f565b736e9455d109202b426169f0d8f01a3332dae160f361018051186125705763ed8e84f36101e0525f610200526101a0516102205260016102405260206101e060646101fc7399f5acc8ec2da2bc0771c32814eff52b712de1e55afa6118c4573d5f5f3e3d5ffd5b60203d10612570576101e0516101c0526101c051670de0b6b3a7640000810281670de0b6b3a76400008204186125705790506399530b066101e05260206101e060046101fc736e9455d109202b426169f0d8f01a3332dae160f35afa61192c573d5f5f3e3d5ffd5b60203d10612570576101e051801561257057808204905090506102205260206102205bf35b6301681a62811861198d5760243610612570577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6060526119a7565b636ea056a98118611a6c5760443610612570576024356060525b6004358060a01c612570576040525f5433186125705760605160805260805119611a02576040516370a0823160a0523060c052602060a0602460bc845afa6119f1573d5f5f3e3d5ffd5b60203d106125705760a09050516080525b60405163a9059cbb60a0525f5460c05260805160e052602060a0604460bc5f855af1611a30573d5f5f3e3d5ffd5b3d611a4757803b1561257057600161010052611a5f565b60203d106125705760a0518060011c61257057610100525b6101009050511561257057005b63b0af55388118611ac65760243610612570575f543318612570576101f360043511612570576004356001557fdedaaea5af1f142f6431a3f66596f94f1507d65410cd17ffce206a83e3e7c80660043560405260206040a1005b63304ad6628118611b1e5760243610612570576004358060a01c612570576040525f543318612570576040515f556040517f9e3ed1b4f392c7b0c322e2f6fd1bc5889ab0a01ca356a09f62332acea07beca15f6060a2005b505b5f5ffd5b630b4c7e4d60805260405160a05260605160c0525f60e052602060806064609c5f7399f5acc8ec2da2bc0771c32814eff52b712de1e55af1611b68573d5f5f3e3d5ffd5b60203d1061257057608051815250565b7327b5739e22ad9033bcbf192059122d163b60349d6101005118611c0657636e553f656101a052610120516101c052610160516101e05260206101a060446101bc5f7327b5739e22ad9033bcbf192059122d163b60349d5af1611bdd573d5f5f3e3d5ffd5b60203d10612570576101a051610180526101405161018051106125705761018051815250611ca6565b736e9455d109202b426169f0d8f01a3332dae160f3610100511861257057636e553f656101c0525f60405261012051606052611c436101a0611b24565b6101a0516101e052610160516102005260206101c060446101dc5f736e9455d109202b426169f0d8f01a3332dae160f35af1611c81573d5f5f3e3d5ffd5b60203d10612570576101c0516101805261014051610180511061257057610180518152505b565b610260516102c052610220516323b872dd6102e052336103005230610320526102c0516103405260206102e060646102fc5f855af1611ce9573d5f5f3e3d5ffd5b60203d10612570576102e0518060011c61257057610360526103609050511561257057739d409a0a012cfba9b15f6d4b36ac57a46966ab9a6102205118611d7a57632e1a7d4d6102e0526102c0516103005260206102e060246102fc5f739d409a0a012cfba9b15f6d4b36ac57a46966ab9a5af1611d69573d5f5f3e3d5ffd5b60203d10612570576102e0516102c0525b73fcc5c47be19d06bf83eb04298b026f81069ff65b6102405118611e045763795c25216102e0526102c051610300526102a0516103205260206102e060446102fc5f73fcc5c47be19d06bf83eb04298b026f81069ff65b5af1611ddf573d5f5f3e3d5ffd5b60203d10612570576102e050610280516102c05110612570576102c051815250611e82565b63dddb637f6102e0526102c0516103005260206102e060246102fc5f73fcc5c47be19d06bf83eb04298b026f81069ff65b5af1611e43573d5f5f3e3d5ffd5b60203d10612570576102e05061024051610100526102c0516101205261028051610140526102a05161016052611e7a6102e0611b78565b6102e0518152505b565b635e0d443f6080525f60a052600160c05260405160e052602060806064609c7399f5acc8ec2da2bc0771c32814eff52b712de1e55afa611ec6573d5f5f3e3d5ffd5b60203d1061257057608051606052604051604051600154808202811583838304141715612570579050905061271081049050808201828110612570579050905060805260805160605111611f615763a0712d6860a05260405160c052602060a0602460bc5f73fcc5c47be19d06bf83eb04298b026f81069ff65b5af1611f4e573d5f5f3e3d5ffd5b60203d106125705760a051815250611fb9565b633df0212460a0525f60c052600160e052604051610100525f61012052602060a0608460bc5f7399f5acc8ec2da2bc0771c32814eff52b712de1e55af1611faa573d5f5f3e3d5ffd5b60203d106125705760a0518152505b565b608051611fcb575f815250612209565b60805160a052739d409a0a012cfba9b15f6d4b36ac57a46966ab9a60405118612054576399530b0660c052602060c0600460dc739d409a0a012cfba9b15f6d4b36ac57a46966ab9a5afa612021573d5f5f3e3d5ffd5b60203d106125705760c05160a0518082028115838383041417156125705790509050670de0b6b3a76400008104905060a0525b73fcc5c47be19d06bf83eb04298b026f81069ff65b6060511861207c5760a051815250612209565b7327b5739e22ad9033bcbf192059122d163b60349d6060511861210d5760a051670de0b6b3a7640000810281670de0b6b3a76400008204186125705790506399530b0660c052602060c0600460dc7327b5739e22ad9033bcbf192059122d163b60349d5afa6120ed573d5f5f3e3d5ffd5b60203d106125705760c05180156125705780820490509050815250612209565b736e9455d109202b426169f0d8f01a3332dae160f3606051186125705760a051670de0b6b3a7640000810281670de0b6b3a764000082041861257057905063bb7b8b8060e052602060e0600460fc7399f5acc8ec2da2bc0771c32814eff52b712de1e55afa61217e573d5f5f3e3d5ffd5b60203d106125705760e0518015612570578082049050905060c05260c051670de0b6b3a7640000810281670de0b6b3a76400008204186125705790506399530b0660e052602060e0600460fc736e9455d109202b426169f0d8f01a3332dae160f35afa6121ed573d5f5f3e3d5ffd5b60203d106125705760e051801561257057808204905090508152505b565b60805161221b575f81525061243d565b60805160a052739d409a0a012cfba9b15f6d4b36ac57a46966ab9a604051186122a4576399530b0660c052602060c0600460dc739d409a0a012cfba9b15f6d4b36ac57a46966ab9a5afa612271573d5f5f3e3d5ffd5b60203d106125705760c05160a0518082028115838383041417156125705790509050670de0b6b3a76400008104905060a0525b73fcc5c47be19d06bf83eb04298b026f81069ff65b606051186122cc5760a05181525061243d565b7327b5739e22ad9033bcbf192059122d163b60349d6060511861235d5760a051670de0b6b3a7640000810281670de0b6b3a76400008204186125705790506399530b0660c052602060c0600460dc7327b5739e22ad9033bcbf192059122d163b60349d5afa61233d573d5f5f3e3d5ffd5b60203d106125705760c0518015612570578082049050905081525061243d565b736e9455d109202b426169f0d8f01a3332dae160f3606051186125705763ed8e84f360e0525f6101005260a05161012052600161014052602060e0606460fc7399f5acc8ec2da2bc0771c32814eff52b712de1e55afa6123bf573d5f5f3e3d5ffd5b60203d106125705760e05160c05260c051670de0b6b3a7640000810281670de0b6b3a76400008204186125705790506399530b0660e052602060e0600460fc736e9455d109202b426169f0d8f01a3332dae160f35afa612421573d5f5f3e3d5ffd5b60203d106125705760e051801561257057808204905090508152505b565b6040516318160ddd60a052602060a0600460bc845afa612461573d5f5f3e3d5ffd5b60203d106125705760a0905051608052606051670de0b6b3a7640000810281670de0b6b3a76400008204186125705790506080518015612570578082049050905060a052604051634903b0d160e0525f61010052602060e0602460fc845afa6124cc573d5f5f3e3d5ffd5b60203d106125705760e090505160a0518082028115838383041417156125705790509050670de0b6b3a76400008104905060c052604051634903b0d1610100526001610120526020610100602461011c845afa61252b573d5f5f3e3d5ffd5b60203d106125705761010090505160a0518082028115838383041417156125705790509050670de0b6b3a76400008104905060e05260c051815260e051602082015250565b5f80fda165767970657283000309000b005b5f80fd
Deployed Bytecode
0x6003361161000c57611b20565b5f3560e01c3461257057633a08fefb811861004a5760243610612570576020600435600181116125705760051b612581015f395f5160405260206040f35b6323b03ca881186100815760243610612570576020600435600281116125705760051b604001612581015f395f5160405260206040f35b63168861678118610097575f5460405260206040f35b6341ba5aa181186100ae5760015460405260206040f35b6306fdde03811861012d57602080608052600b6040527f59435256205a617020763300000000000000000000000000000000000000000060605260408160800181516020830160208301815181525050808252508051806020830101601f825f03163682375050601f19601f8251602001011690509050810190506080f35b6359ae02dd81186101745760443610612570577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6103c0525f6103e05233610400526101ed565b6347ce3e69811861019d5760643610612570576044356103c0525f6103e05233610400526101ed565b63df4fd97081186101c2576084361061257057604060446103c03733610400526101ed565b635178790581186109dc5760a4361061257057604060446103c0376084358060a01c61257057610400525b6004358060a01c61257057610380526024358060a01c612570576103a0526103c05115612570576103a0516103805114612570576103a0515f610420525f6003905b60208160051b604001612581015f395f5183186102515760016104205261025c565b60010181811861022f575b505061042051905015612570576103c0516104205261042051196102b857610380516370a082316104405233610460526020610440602461045c845afa6102a5573d5f5f3e3d5ffd5b60203d1061257057610440905051610420525b610380515f610440525f6002905b60208160051b612581015f395f5183186102e5576001610440526102f0565b6001018181186102c6575b50506104405190506107625773d533a949740bb3306d119cc777fa900ba034cd52610380511861032157600161033d565b7362b9c7356a2dc64a1969e19c23e4f579f9810aa76103805118155b610669576103805173c97232527b62efb0d8ed38cf3ea103a6cca4037e8118610367576001610380565b73453d92c7d4263201c69aacfaf589ed14202d83a48118155b905061045657610380515f610440525f6003905b60208160051b604001612581015f395f5183186103b6576001610440526103c1565b600101818118610394575b50506104405190506103ed577399f5acc8ec2da2bc0771c32814eff52b712de1e56103805118156103f0565b60015b1561257057610380516323b872dd6104405233610460523061048052610420516104a0526020610440606461045c5f855af161042e573d5f5f3e3d5ffd5b60203d1061257057610440518060011c612570576104c0526104c0905051156125705761079f565b736e9455d109202b426169f0d8f01a3332dae160f36103a0511861257057610380516323b872dd610460523361048052306104a052610420516104c0526020610460606461047c5f855af16104ad573d5f5f3e3d5ffd5b60203d1061257057610460518060011c612570576104e0526104e0905051156125705773c97232527b62efb0d8ed38cf3ea103a6cca4037e610380511861053e57632e1a7d4d6104605261042051610480526020610460602461047c5f73c97232527b62efb0d8ed38cf3ea103a6cca4037e5af161052d573d5f5f3e3d5ffd5b60203d106125705761046051610420525b635b36389c6104a052610420516104c0526040366104e03760406104a060646104bc5f73453d92c7d4263201c69aacfaf589ed14202d83a45af1610584573d5f5f3e3d5ffd5b60403d10612570576104a080516104605260208101516104805250630b4c7e4d6104a052610460516104c052610480516104e0525f6105005260206104a060646104bc5f7399f5acc8ec2da2bc0771c32814eff52b712de1e55af16105eb573d5f5f3e3d5ffd5b60203d10612570576104a05161042052636e553f656104a052610420516104c052610400516104e05260206104a060446104bc5f736e9455d109202b426169f0d8f01a3332dae160f35af1610642573d5f5f3e3d5ffd5b60203d10612570576104a051610420526103e05161042051106125705760206104206109da565b610380516323b872dd6104405233610460523061048052610420516104a0526020610440606461045c5f855af16106a2573d5f5f3e3d5ffd5b60203d1061257057610440518060011c612570576104c0526104c090505115612570577362b9c7356a2dc64a1969e19c23e4f579f9810aa7610380511861074357633df02124610440526001610460525f61048052610420516104a0525f6104c0526020610440608461045c5f739d0464996170c6b9e75eed71c68b99ddedf279e85af1610732573d5f5f3e3d5ffd5b60203d106125705761044051610420525b61042051604052610755610440611e84565b610440516104205261079f565b602061038051610220526103a0516102405261042051610260526103e05161028052610400516102a052610797610460611ca8565b6104606109da565b7327b5739e22ad9033bcbf192059122d163b60349d610380511861081157632e1a7d4d6104405261042051610460526020610440602461045c5f7327b5739e22ad9033bcbf192059122d163b60349d5af16107fc573d5f5f3e3d5ffd5b60203d10612570576104405161042052610920565b61038051736e9455d109202b426169f0d8f01a3332dae160f38118610837576001610850565b7399f5acc8ec2da2bc0771c32814eff52b712de1e58118155b90501561092057736e9455d109202b426169f0d8f01a3332dae160f361038051186108c557632e1a7d4d6104605261042051610480526020610460602461047c5f736e9455d109202b426169f0d8f01a3332dae160f35af16108b4573d5f5f3e3d5ffd5b60203d106125705761046051610420525b631a4d01d261046052610420516104805260016104a0525f6104c0526020610460606461047c5f7399f5acc8ec2da2bc0771c32814eff52b712de1e55af161090f573d5f5f3e3d5ffd5b60203d106125705761046051610420525b73fcc5c47be19d06bf83eb04298b026f81069ff65b6103a051186109a9576103e0516104205110612570576103a05163a9059cbb61044052610400516104605261042051610480526020610440604461045c5f855af1610982573d5f5f3e3d5ffd5b60203d1061257057610440518060011c612570576104a0526104a0505060206104206109da565b60206103a0516101005261042051610120526103e0516101405261040051610160526109d6610440611b78565b6104405bf35b636ce068cf81186110f55760643610612570576004358060a01c61257057610120526024358060a01c6125705761014052610140515f610160525f6003905b60208160051b604001612581015f395f518318610a3d57600161016052610a48565b600101818118610a1b575b50506101605190501561257057610120515f610160525f6002905b60208160051b612581015f395f518318610a8257600161016052610a8d565b600101818118610a63575b505061016051905015610ac35760206101205160405261014051606052604435608052610abb610180611fbb565b6101806110f3565b6101205173d533a949740bb3306d119cc777fa900ba034cd528118610ae9576001610b68565b7362b9c7356a2dc64a1969e19c23e4f579f9810aa78118610b0b576001610b68565b73c97232527b62efb0d8ed38cf3ea103a6cca4037e8118610b2d576001610b68565b73453d92c7d4263201c69aacfaf589ed14202d83a48118610b4f576001610b68565b7399f5acc8ec2da2bc0771c32814eff52b712de1e58118155b9050610bb657610120515f610180525f6003905b60208160051b604001612581015f395f518318610b9e57600161018052610ba9565b600101818118610b7c575b5050610180519050610bb9565b60015b1561257057604435610bd4575f6101605260206101606110f3565b60443561016052610140516101205118610bf9576044356101805260206101806110f3565b7327b5739e22ad9033bcbf192059122d163b60349d6101205118610c87576399530b06610180526020610180600461019c7327b5739e22ad9033bcbf192059122d163b60349d5afa610c4d573d5f5f3e3d5ffd5b60203d106125705761018051610160518082028115838383041417156125705790509050670de0b6b3a76400008104905061016052610f20565b61012051736e9455d109202b426169f0d8f01a3332dae160f38118610cad576001610cc6565b7399f5acc8ec2da2bc0771c32814eff52b712de1e58118155b9050610e2a576101205173c97232527b62efb0d8ed38cf3ea103a6cca4037e8118610cf2576001610d0b565b73453d92c7d4263201c69aacfaf589ed14202d83a48118155b905015610f2057736e9455d109202b426169f0d8f01a3332dae160f361014051186125705773c97232527b62efb0d8ed38cf3ea103a6cca4037e6101205118610dba576399530b066101a05260206101a060046101bc73c97232527b62efb0d8ed38cf3ea103a6cca4037e5afa610d84573d5f5f3e3d5ffd5b60203d10612570576101a051610160518082028115838383041417156125705790509050670de0b6b3a764000081049050610160525b63bb7b8b806101a05260206101a060046101bc73453d92c7d4263201c69aacfaf589ed14202d83a45afa610df0573d5f5f3e3d5ffd5b60203d10612570576101a051610160518082028115838383041417156125705790509050670de0b6b3a76400008104905061016052610f20565b736e9455d109202b426169f0d8f01a3332dae160f36101205118610eb4576399530b066101a05260206101a060046101bc736e9455d109202b426169f0d8f01a3332dae160f35afa610e7e573d5f5f3e3d5ffd5b60203d10612570576101a051610160518082028115838383041417156125705790509050670de0b6b3a764000081049050610160525b63bb7b8b806101a05260206101a060046101bc7399f5acc8ec2da2bc0771c32814eff52b712de1e55afa610eea573d5f5f3e3d5ffd5b60203d10612570576101a051610160518082028115838383041417156125705790509050670de0b6b3a764000081049050610160525b73fcc5c47be19d06bf83eb04298b026f81069ff65b6101405118610f485760206101606110f3565b7327b5739e22ad9033bcbf192059122d163b60349d6101405118610fe55761016051670de0b6b3a7640000810281670de0b6b3a76400008204186125705790506399530b06610180526020610180600461019c7327b5739e22ad9033bcbf192059122d163b60349d5afa610fbe573d5f5f3e3d5ffd5b60203d106125705761018051801561257057808204905090506101c05260206101c06110f3565b736e9455d109202b426169f0d8f01a3332dae160f361014051186125705761016051670de0b6b3a7640000810281670de0b6b3a764000082041861257057905063bb7b8b806101a05260206101a060046101bc7399f5acc8ec2da2bc0771c32814eff52b712de1e55afa61105b573d5f5f3e3d5ffd5b60203d10612570576101a051801561257057808204905090506101805261018051670de0b6b3a7640000810281670de0b6b3a76400008204186125705790506399530b066101a05260206101a060046101bc736e9455d109202b426169f0d8f01a3332dae160f35afa6110d0573d5f5f3e3d5ffd5b60203d10612570576101a051801561257057808204905090506101e05260206101e05bf35b6305d465ff81186119515760643610612570576004358060a01c61257057610160526024358060a01c6125705761018052610180515f6101a0525f6003905b60208160051b604001612581015f395f5183186111565760016101a052611161565b600101818118611134575b50506101a0519050156125705761018051610160511461257057610160515f6101a0525f6002905b60208160051b612581015f395f5183186111a85760016101a0526111b3565b600101818118611189575b50506101a0519050156111e957602061016051604052610180516060526044356080526111e16101c061220b565b6101c061194f565b6044356101a05273d533a949740bb3306d119cc777fa900ba034cd526101605118611215576001611231565b7362b9c7356a2dc64a1969e19c23e4f579f9810aa76101605118155b6114ae576101605173c97232527b62efb0d8ed38cf3ea103a6cca4037e811861125b576001611274565b73453d92c7d4263201c69aacfaf589ed14202d83a48118155b90506112ee57610160515f6101c0525f6003905b60208160051b604001612581015f395f5183186112aa5760016101c0526112b5565b600101818118611288575b50506101c05190506112e1577399f5acc8ec2da2bc0771c32814eff52b712de1e56101605118156112e4565b60015b15612570576115ce565b736e9455d109202b426169f0d8f01a3332dae160f361018051186125705773c97232527b62efb0d8ed38cf3ea103a6cca4037e6101605118611396576399530b066101e05260206101e060046101fc73c97232527b62efb0d8ed38cf3ea103a6cca4037e5afa611360573d5f5f3e3d5ffd5b60203d10612570576101e0516101a0518082028115838383041417156125705790509050670de0b6b3a7640000810490506101a0525b73453d92c7d4263201c69aacfaf589ed14202d83a46040526101a0516060526113c061022061243f565b61022080516101e0526020810151610200525063ed8e84f3610220526101e0516102405261020051610260526001610280526020610220606461023c7399f5acc8ec2da2bc0771c32814eff52b712de1e55afa61141f573d5f5f3e3d5ffd5b60203d1061257057610220516101a0526101a051670de0b6b3a7640000810281670de0b6b3a76400008204186125705790506399530b06610220526020610220600461023c736e9455d109202b426169f0d8f01a3332dae160f35afa611487573d5f5f3e3d5ffd5b60203d1061257057610220518015612570578082049050905061026052602061026061194f565b7362b9c7356a2dc64a1969e19c23e4f579f9810aa7610160511861152657635e0d443f6101c05260016101e0525f610200526101a0516102205260206101c060646101dc739d0464996170c6b9e75eed71c68b99ddedf279e85afa611515573d5f5f3e3d5ffd5b60203d10612570576101c0516101a0525b635e0d443f6101e0525f610200526001610220526101a0516102405260206101e060646101fc7399f5acc8ec2da2bc0771c32814eff52b712de1e55afa61156f573d5f5f3e3d5ffd5b60203d10612570576101e0516101c0526101a0516101a05160015480820281158383830414171561257057905090506127108104905080820182811061257057905090506101e0526101e0516101c05111156115ce576101c0516101a0525b6101a0516115e5575f6101c05260206101c061194f565b7327b5739e22ad9033bcbf192059122d163b60349d6101605118611673576399530b066101c05260206101c060046101dc7327b5739e22ad9033bcbf192059122d163b60349d5afa611639573d5f5f3e3d5ffd5b60203d10612570576101c0516101a0518082028115838383041417156125705790509050670de0b6b3a7640000810490506101a052611798565b61016051736e9455d109202b426169f0d8f01a3332dae160f381186116995760016116b2565b7399f5acc8ec2da2bc0771c32814eff52b712de1e58118155b90501561179857736e9455d109202b426169f0d8f01a3332dae160f36101605118611743576399530b066101e05260206101e060046101fc736e9455d109202b426169f0d8f01a3332dae160f35afa61170d573d5f5f3e3d5ffd5b60203d10612570576101e0516101a0518082028115838383041417156125705790509050670de0b6b3a7640000810490506101a0525b63cc2b27d76101e0526101a0516102005260016102205260206101e060446101fc7399f5acc8ec2da2bc0771c32814eff52b712de1e55afa611787573d5f5f3e3d5ffd5b60203d10612570576101e0516101a0525b73fcc5c47be19d06bf83eb04298b026f81069ff65b61018051186117c05760206101a061194f565b7327b5739e22ad9033bcbf192059122d163b60349d610180511861185d576101a051670de0b6b3a7640000810281670de0b6b3a76400008204186125705790506399530b066101c05260206101c060046101dc7327b5739e22ad9033bcbf192059122d163b60349d5afa611836573d5f5f3e3d5ffd5b60203d10612570576101c0518015612570578082049050905061020052602061020061194f565b736e9455d109202b426169f0d8f01a3332dae160f361018051186125705763ed8e84f36101e0525f610200526101a0516102205260016102405260206101e060646101fc7399f5acc8ec2da2bc0771c32814eff52b712de1e55afa6118c4573d5f5f3e3d5ffd5b60203d10612570576101e0516101c0526101c051670de0b6b3a7640000810281670de0b6b3a76400008204186125705790506399530b066101e05260206101e060046101fc736e9455d109202b426169f0d8f01a3332dae160f35afa61192c573d5f5f3e3d5ffd5b60203d10612570576101e051801561257057808204905090506102205260206102205bf35b6301681a62811861198d5760243610612570577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6060526119a7565b636ea056a98118611a6c5760443610612570576024356060525b6004358060a01c612570576040525f5433186125705760605160805260805119611a02576040516370a0823160a0523060c052602060a0602460bc845afa6119f1573d5f5f3e3d5ffd5b60203d106125705760a09050516080525b60405163a9059cbb60a0525f5460c05260805160e052602060a0604460bc5f855af1611a30573d5f5f3e3d5ffd5b3d611a4757803b1561257057600161010052611a5f565b60203d106125705760a0518060011c61257057610100525b6101009050511561257057005b63b0af55388118611ac65760243610612570575f543318612570576101f360043511612570576004356001557fdedaaea5af1f142f6431a3f66596f94f1507d65410cd17ffce206a83e3e7c80660043560405260206040a1005b63304ad6628118611b1e5760243610612570576004358060a01c612570576040525f543318612570576040515f556040517f9e3ed1b4f392c7b0c322e2f6fd1bc5889ab0a01ca356a09f62332acea07beca15f6060a2005b505b5f5ffd5b630b4c7e4d60805260405160a05260605160c0525f60e052602060806064609c5f7399f5acc8ec2da2bc0771c32814eff52b712de1e55af1611b68573d5f5f3e3d5ffd5b60203d1061257057608051815250565b7327b5739e22ad9033bcbf192059122d163b60349d6101005118611c0657636e553f656101a052610120516101c052610160516101e05260206101a060446101bc5f7327b5739e22ad9033bcbf192059122d163b60349d5af1611bdd573d5f5f3e3d5ffd5b60203d10612570576101a051610180526101405161018051106125705761018051815250611ca6565b736e9455d109202b426169f0d8f01a3332dae160f3610100511861257057636e553f656101c0525f60405261012051606052611c436101a0611b24565b6101a0516101e052610160516102005260206101c060446101dc5f736e9455d109202b426169f0d8f01a3332dae160f35af1611c81573d5f5f3e3d5ffd5b60203d10612570576101c0516101805261014051610180511061257057610180518152505b565b610260516102c052610220516323b872dd6102e052336103005230610320526102c0516103405260206102e060646102fc5f855af1611ce9573d5f5f3e3d5ffd5b60203d10612570576102e0518060011c61257057610360526103609050511561257057739d409a0a012cfba9b15f6d4b36ac57a46966ab9a6102205118611d7a57632e1a7d4d6102e0526102c0516103005260206102e060246102fc5f739d409a0a012cfba9b15f6d4b36ac57a46966ab9a5af1611d69573d5f5f3e3d5ffd5b60203d10612570576102e0516102c0525b73fcc5c47be19d06bf83eb04298b026f81069ff65b6102405118611e045763795c25216102e0526102c051610300526102a0516103205260206102e060446102fc5f73fcc5c47be19d06bf83eb04298b026f81069ff65b5af1611ddf573d5f5f3e3d5ffd5b60203d10612570576102e050610280516102c05110612570576102c051815250611e82565b63dddb637f6102e0526102c0516103005260206102e060246102fc5f73fcc5c47be19d06bf83eb04298b026f81069ff65b5af1611e43573d5f5f3e3d5ffd5b60203d10612570576102e05061024051610100526102c0516101205261028051610140526102a05161016052611e7a6102e0611b78565b6102e0518152505b565b635e0d443f6080525f60a052600160c05260405160e052602060806064609c7399f5acc8ec2da2bc0771c32814eff52b712de1e55afa611ec6573d5f5f3e3d5ffd5b60203d1061257057608051606052604051604051600154808202811583838304141715612570579050905061271081049050808201828110612570579050905060805260805160605111611f615763a0712d6860a05260405160c052602060a0602460bc5f73fcc5c47be19d06bf83eb04298b026f81069ff65b5af1611f4e573d5f5f3e3d5ffd5b60203d106125705760a051815250611fb9565b633df0212460a0525f60c052600160e052604051610100525f61012052602060a0608460bc5f7399f5acc8ec2da2bc0771c32814eff52b712de1e55af1611faa573d5f5f3e3d5ffd5b60203d106125705760a0518152505b565b608051611fcb575f815250612209565b60805160a052739d409a0a012cfba9b15f6d4b36ac57a46966ab9a60405118612054576399530b0660c052602060c0600460dc739d409a0a012cfba9b15f6d4b36ac57a46966ab9a5afa612021573d5f5f3e3d5ffd5b60203d106125705760c05160a0518082028115838383041417156125705790509050670de0b6b3a76400008104905060a0525b73fcc5c47be19d06bf83eb04298b026f81069ff65b6060511861207c5760a051815250612209565b7327b5739e22ad9033bcbf192059122d163b60349d6060511861210d5760a051670de0b6b3a7640000810281670de0b6b3a76400008204186125705790506399530b0660c052602060c0600460dc7327b5739e22ad9033bcbf192059122d163b60349d5afa6120ed573d5f5f3e3d5ffd5b60203d106125705760c05180156125705780820490509050815250612209565b736e9455d109202b426169f0d8f01a3332dae160f3606051186125705760a051670de0b6b3a7640000810281670de0b6b3a764000082041861257057905063bb7b8b8060e052602060e0600460fc7399f5acc8ec2da2bc0771c32814eff52b712de1e55afa61217e573d5f5f3e3d5ffd5b60203d106125705760e0518015612570578082049050905060c05260c051670de0b6b3a7640000810281670de0b6b3a76400008204186125705790506399530b0660e052602060e0600460fc736e9455d109202b426169f0d8f01a3332dae160f35afa6121ed573d5f5f3e3d5ffd5b60203d106125705760e051801561257057808204905090508152505b565b60805161221b575f81525061243d565b60805160a052739d409a0a012cfba9b15f6d4b36ac57a46966ab9a604051186122a4576399530b0660c052602060c0600460dc739d409a0a012cfba9b15f6d4b36ac57a46966ab9a5afa612271573d5f5f3e3d5ffd5b60203d106125705760c05160a0518082028115838383041417156125705790509050670de0b6b3a76400008104905060a0525b73fcc5c47be19d06bf83eb04298b026f81069ff65b606051186122cc5760a05181525061243d565b7327b5739e22ad9033bcbf192059122d163b60349d6060511861235d5760a051670de0b6b3a7640000810281670de0b6b3a76400008204186125705790506399530b0660c052602060c0600460dc7327b5739e22ad9033bcbf192059122d163b60349d5afa61233d573d5f5f3e3d5ffd5b60203d106125705760c0518015612570578082049050905081525061243d565b736e9455d109202b426169f0d8f01a3332dae160f3606051186125705763ed8e84f360e0525f6101005260a05161012052600161014052602060e0606460fc7399f5acc8ec2da2bc0771c32814eff52b712de1e55afa6123bf573d5f5f3e3d5ffd5b60203d106125705760e05160c05260c051670de0b6b3a7640000810281670de0b6b3a76400008204186125705790506399530b0660e052602060e0600460fc736e9455d109202b426169f0d8f01a3332dae160f35afa612421573d5f5f3e3d5ffd5b60203d106125705760e051801561257057808204905090508152505b565b6040516318160ddd60a052602060a0600460bc845afa612461573d5f5f3e3d5ffd5b60203d106125705760a0905051608052606051670de0b6b3a7640000810281670de0b6b3a76400008204186125705790506080518015612570578082049050905060a052604051634903b0d160e0525f61010052602060e0602460fc845afa6124cc573d5f5f3e3d5ffd5b60203d106125705760e090505160a0518082028115838383041417156125705790509050670de0b6b3a76400008104905060c052604051634903b0d1610100526001610120526020610100602461011c845afa61252b573d5f5f3e3d5ffd5b60203d106125705761010090505160a0518082028115838383041417156125705790509050670de0b6b3a76400008104905060e05260c051815260e051602082015250565b5f80fda165767970657283000309000b000000000000000000000000c5bddf9843308380375a611c18b50fb9341f502a0000000000000000000000009d409a0a012cfba9b15f6d4b36ac57a46966ab9a000000000000000000000000fcc5c47be19d06bf83eb04298b026f81069ff65b00000000000000000000000027b5739e22ad9033bcbf192059122d163b60349d0000000000000000000000006e9455d109202b426169f0d8f01a3332dae160f3
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.