Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 1 from a total of 1 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Poke | 13245851 | 1260 days ago | IN | 0 ETH | 0.01273223 |
Latest 1 internal transaction
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
13245717 | 1260 days ago | Contract Creation | 0 ETH |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
GUniLPOracle
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-09-17 */ // SPDX-License-Identifier: AGPL-3.0-or-later /// GUniLPOracle.sol // Copyright (C) 2017-2020 Maker Ecosystem Growth Holdings, INC. // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU Affero General Public License for more details. // // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see <https://www.gnu.org/licenses/>. /////////////////////////////////////////////////////// // // // Methodology for Calculating LP Token Price // // // /////////////////////////////////////////////////////// // We derive the sqrtPriceX96 via Maker's own oracles to prevent price manipulation in the pool: // // p0 = price of token0 in USD // p1 = price of token1 in USD // UNITS_0 = decimals of token0 // UNITS_1 = decimals of token1 // // token1/token0 = (p0 / 10^UNITS_0) / (p1 / 10^UNITS_1) [Conversion from Maker's price ratio into Uniswap's format] // = (p0 * 10^UNITS_1) / (p1 * 10^UNITS_0) // // sqrtPriceX96 = sqrt(token1/token0) * 2^96 [From Uniswap's definition] // = sqrt((p0 * 10^UNITS_1) / (p1 * 10^UNITS_0)) * 2^96 // = sqrt((p0 * 10^UNITS_1) / (p1 * 10^UNITS_0)) * 2^48 * 2^48 // = sqrt((p0 * 10^UNITS_1 * 2^96) / (p1 * 10^UNITS_0)) * 2^48 // // Once we have the sqrtPriceX96 we can use that to compute the fair reserves for each token. This part may be slightly subjective // depending on the implementation, but we expect most tokens to provide something like getUnderlyingBalancesAtPrice(uint160 sqrtPriceX96) // which will forward our oracle-calculated `sqrtPriceX96` to the Uniswap-provided LiquidityAmounts.getAmountsForLiquidity(...) // This function will return the fair reserves for each token. Vendor-specific logic is then used to tack any uninvested fees on top of those amounts. // // Once we have the fair reserves and the prices we can compute the token price by: // // Token Price = TVL / Token Supply // = (r0 * p0 + r1 * p1) / totalSupply pragma solidity =0.6.12; interface ERC20Like { function decimals() external view returns (uint8); function totalSupply() external view returns (uint256); } interface GUNILike { function token0() external view returns (address); function token1() external view returns (address); function getUnderlyingBalancesAtPrice(uint160) external view returns (uint256,uint256); } interface OracleLike { function read() external view returns (uint256); } contract GUniLPOracle { // --- Auth --- mapping (address => uint256) public wards; // Addresses with admin authority function rely(address _usr) external auth { wards[_usr] = 1; emit Rely(_usr); } // Add admin function deny(address _usr) external auth { wards[_usr] = 0; emit Deny(_usr); } // Remove admin modifier auth { require(wards[msg.sender] == 1, "GUniLPOracle/not-authorized"); _; } address public immutable src; // Price source // hop and zph are packed into single slot to reduce SLOADs; // this outweighs the cost from added bitmasking operations. uint8 public stopped; // Stop/start ability to update uint16 public hop = 1 hours; // Minimum time in between price updates uint232 public zph; // Time of last price update plus hop bytes32 public immutable wat; // Label of token whose price is being tracked // --- Whitelisting --- mapping (address => uint256) public bud; modifier toll { require(bud[msg.sender] == 1, "GUniLPOracle/contract-not-whitelisted"); _; } struct Feed { uint128 val; // Price uint128 has; // Is price valid } Feed internal cur; // Current price (mem slot 0x3) Feed internal nxt; // Queued price (mem slot 0x4) // --- Data --- uint256 private immutable UNIT_0; // Numerical representation of one token of token0 (10^decimals) uint256 private immutable UNIT_1; // Numerical representation of one token of token1 (10^decimals) uint256 private immutable TO_18_DEC_0; // Conversion factor to 18 decimals uint256 private immutable TO_18_DEC_1; // Conversion factor to 18 decimals address public orb0; // Oracle for token0, ideally a Medianizer address public orb1; // Oracle for token1, ideally a Medianizer // --- Math --- uint256 constant WAD = 10 ** 18; function _add(uint256 _x, uint256 _y) internal pure returns (uint256 z) { require((z = _x + _y) >= _x, "GUniLPOracle/add-overflow"); } function _sub(uint256 _x, uint256 _y) internal pure returns (uint256 z) { require((z = _x - _y) <= _x, "GUniLPOracle/sub-underflow"); } function _mul(uint256 _x, uint256 _y) internal pure returns (uint256 z) { require(_y == 0 || (z = _x * _y) / _y == _x, "GUniLPOracle/mul-overflow"); } function toUint160(uint256 x) internal pure returns (uint160 z) { require((z = uint160(x)) == x, "GUniLPOracle/uint160-overflow"); } // FROM https://github.com/abdk-consulting/abdk-libraries-solidity/blob/16d7e1dd8628dfa2f88d5dadab731df7ada70bdd/ABDKMath64x64.sol#L687 function sqrt(uint256 _x) private pure returns (uint128) { if (_x == 0) return 0; else { uint256 xx = _x; uint256 r = 1; if (xx >= 0x100000000000000000000000000000000) { xx >>= 128; r <<= 64; } if (xx >= 0x10000000000000000) { xx >>= 64; r <<= 32; } if (xx >= 0x100000000) { xx >>= 32; r <<= 16; } if (xx >= 0x10000) { xx >>= 16; r <<= 8; } if (xx >= 0x100) { xx >>= 8; r <<= 4; } if (xx >= 0x10) { xx >>= 4; r <<= 2; } if (xx >= 0x8) { r <<= 1; } r = (r + _x / r) >> 1; r = (r + _x / r) >> 1; r = (r + _x / r) >> 1; r = (r + _x / r) >> 1; r = (r + _x / r) >> 1; r = (r + _x / r) >> 1; r = (r + _x / r) >> 1; // Seven iterations should be enough uint256 r1 = _x / r; return uint128 (r < r1 ? r : r1); } } // --- Events --- event Rely(address indexed usr); event Deny(address indexed usr); event Step(uint256 hop); event Stop(); event Start(); event Value(uint128 curVal, uint128 nxtVal); event Link(uint256 id, address orb); event Kiss(address a); event Diss(address a); // --- Init --- constructor (address _src, bytes32 _wat, address _orb0, address _orb1) public { require(_src != address(0), "GUniLPOracle/invalid-src-address"); require(_orb0 != address(0) && _orb1 != address(0), "GUniLPOracle/invalid-oracle-address"); wards[msg.sender] = 1; emit Rely(msg.sender); src = _src; wat = _wat; uint256 dec0 = uint256(ERC20Like(GUNILike(_src).token0()).decimals()); require(dec0 <= 18, "GUniLPOracle/token0-dec-gt-18"); UNIT_0 = 10 ** dec0; TO_18_DEC_0 = 10 ** (18 - dec0); uint256 dec1 = uint256(ERC20Like(GUNILike(_src).token1()).decimals()); require(dec1 <= 18, "GUniLPOracle/token1-dec-gt-18"); UNIT_1 = 10 ** dec1; TO_18_DEC_1 = 10 ** (18 - dec1); orb0 = _orb0; orb1 = _orb1; } function stop() external auth { stopped = 1; delete cur; delete nxt; zph = 0; emit Stop(); } function start() external auth { stopped = 0; emit Start(); } function step(uint256 _hop) external auth { require(_hop <= uint16(-1), "GUniLPOracle/invalid-hop"); hop = uint16(_hop); emit Step(_hop); } function link(uint256 _id, address _orb) external auth { require(_orb != address(0), "GUniLPOracle/no-contract-0"); if(_id == 0) { orb0 = _orb; } else if (_id == 1) { orb1 = _orb; } else { revert("GUniLPOracle/invalid-id"); } emit Link(_id, _orb); } // For consistency with other oracles. function zzz() external view returns (uint256) { if (zph == 0) return 0; // backwards compatibility return _sub(zph, hop); } function pass() external view returns (bool) { return block.timestamp >= zph; } function seek() internal returns (uint128 quote) { // All Oracle prices are priced with 18 decimals against USD uint256 p0 = OracleLike(orb0).read(); // Query token0 price from oracle (WAD) require(p0 != 0, "GUniLPOracle/invalid-oracle-0-price"); uint256 p1 = OracleLike(orb1).read(); // Query token1 price from oracle (WAD) require(p1 != 0, "GUniLPOracle/invalid-oracle-1-price"); uint160 sqrtPriceX96 = toUint160(sqrt(_mul(_mul(p0, UNIT_1), (1 << 96)) / (_mul(p1, UNIT_0))) << 48); // Get balances of the tokens in the pool (uint256 r0, uint256 r1) = GUNILike(src).getUnderlyingBalancesAtPrice(sqrtPriceX96); require(r0 > 0 || r1 > 0, "GUniLPOracle/invalid-balances"); uint256 totalSupply = ERC20Like(src).totalSupply(); require(totalSupply >= 1e9, "GUniLPOracle/total-supply-too-small"); // Protect against precision errors with dust-levels of collateral // Add the total value of each token together and divide by the totalSupply to get the unit price uint256 preq = _add( _mul(p0, _mul(r0, TO_18_DEC_0)), _mul(p1, _mul(r1, TO_18_DEC_1)) ) / totalSupply; require(preq < 2 ** 128, "GUniLPOracle/quote-overflow"); quote = uint128(preq); // WAD } function poke() external { // Ensure a single SLOAD while avoiding solc's excessive bitmasking bureaucracy. uint256 hop_; { // Block-scoping these variables saves some gas. uint256 stopped_; uint256 zph_; assembly { let slot1 := sload(1) stopped_ := and(slot1, 0xff ) hop_ := and(shr(8, slot1), 0xffff) zph_ := shr(24, slot1) } // When stopped, values are set to zero and should remain such; thus, disallow updating in that case. require(stopped_ == 0, "GUniLPOracle/is-stopped"); // Equivalent to requiring that pass() returns true. // The logic is repeated instead of calling pass() to save gas // (both by eliminating an internal call here, and allowing pass to be external). require(block.timestamp >= zph_, "GUniLPOracle/not-passed"); } uint128 val = seek(); require(val != 0, "GUniLPOracle/invalid-price"); Feed memory cur_ = nxt; // This memory value is used to save an SLOAD later. cur = cur_; nxt = Feed(val, 1); // The below is equivalent to: // // zph = block.timestamp + hop // // but ensures no extra SLOADs are performed. // // Even if _hop = (2^16 - 1), the maximum possible value, add(timestamp(), _hop) // will not overflow (even a 232 bit value) for a very long time. // // Also, we know stopped was zero, so there is no need to account for it explicitly here. assembly { sstore( 1, add( // zph value starts 24 bits in shl(24, add(timestamp(), hop_)), // hop value starts 8 bits in shl(8, hop_) ) ) } // Equivalent to emitting Value(cur.val, nxt.val), but averts extra SLOADs. emit Value(cur_.val, val); // Safe to terminate immediately since no postfix modifiers are applied. assembly { stop() } } function peek() external view toll returns (bytes32,bool) { return (bytes32(uint256(cur.val)), cur.has == 1); } function peep() external view toll returns (bytes32,bool) { return (bytes32(uint256(nxt.val)), nxt.has == 1); } function read() external view toll returns (bytes32) { require(cur.has == 1, "GUniLPOracle/no-current-value"); return (bytes32(uint256(cur.val))); } function kiss(address _a) external auth { require(_a != address(0), "GUniLPOracle/no-contract-0"); bud[_a] = 1; emit Kiss(_a); } function kiss(address[] calldata _a) external auth { for(uint256 i = 0; i < _a.length; i++) { require(_a[i] != address(0), "GUniLPOracle/no-contract-0"); bud[_a[i]] = 1; emit Kiss(_a[i]); } } function diss(address _a) external auth { bud[_a] = 0; emit Diss(_a); } function diss(address[] calldata _a) external auth { for(uint256 i = 0; i < _a.length; i++) { bud[_a[i]] = 0; emit Diss(_a[i]); } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_src","type":"address"},{"internalType":"bytes32","name":"_wat","type":"bytes32"},{"internalType":"address","name":"_orb0","type":"address"},{"internalType":"address","name":"_orb1","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"usr","type":"address"}],"name":"Deny","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"a","type":"address"}],"name":"Diss","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"a","type":"address"}],"name":"Kiss","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"address","name":"orb","type":"address"}],"name":"Link","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"usr","type":"address"}],"name":"Rely","type":"event"},{"anonymous":false,"inputs":[],"name":"Start","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"hop","type":"uint256"}],"name":"Step","type":"event"},{"anonymous":false,"inputs":[],"name":"Stop","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint128","name":"curVal","type":"uint128"},{"indexed":false,"internalType":"uint128","name":"nxtVal","type":"uint128"}],"name":"Value","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"bud","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_usr","type":"address"}],"name":"deny","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_a","type":"address[]"}],"name":"diss","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_a","type":"address"}],"name":"diss","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"hop","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_a","type":"address[]"}],"name":"kiss","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_a","type":"address"}],"name":"kiss","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"address","name":"_orb","type":"address"}],"name":"link","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"orb0","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"orb1","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pass","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"peek","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"peep","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"poke","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"read","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_usr","type":"address"}],"name":"rely","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"src","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"start","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_hop","type":"uint256"}],"name":"step","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stopped","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"wards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"wat","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"zph","outputs":[{"internalType":"uint232","name":"","type":"uint232"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"zzz","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
6101406040526001805462ffff001916620e10001790553480156200002357600080fd5b5060405162001f7c38038062001f7c833981810160405260808110156200004957600080fd5b50805160208201516040830151606090930151919290916001600160a01b038416620000bc576040805162461bcd60e51b815260206004820181905260248201527f47556e694c504f7261636c652f696e76616c69642d7372632d61646472657373604482015290519081900360640190fd5b6001600160a01b03821615801590620000dd57506001600160a01b03811615155b6200011a5760405162461bcd60e51b815260040180806020018281038252602381526020018062001f596023913960400191505060405180910390fd5b3360008181526020819052604080822060019055517fdd0e34038ac38b2a1ce960229778ac48a8719bc900b6c4f8d0475c6e8b385a609190a2836001600160a01b03166080816001600160a01b031660601b815250508260a081815250506000846001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b158015620001b457600080fd5b505afa158015620001c9573d6000803e3d6000fd5b505050506040513d6020811015620001e057600080fd5b50516040805163313ce56760e01b815290516001600160a01b039092169163313ce56791600480820192602092909190829003018186803b1580156200022557600080fd5b505afa1580156200023a573d6000803e3d6000fd5b505050506040513d60208110156200025157600080fd5b505160ff1690506012811115620002af576040805162461bcd60e51b815260206004820152601d60248201527f47556e694c504f7261636c652f746f6b656e302d6465632d67742d3138000000604482015290519081900360640190fd5b80600a0a60c0818152505080601203600a0a61010081815250506000856001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b1580156200030557600080fd5b505afa1580156200031a573d6000803e3d6000fd5b505050506040513d60208110156200033157600080fd5b50516040805163313ce56760e01b815290516001600160a01b039092169163313ce56791600480820192602092909190829003018186803b1580156200037657600080fd5b505afa1580156200038b573d6000803e3d6000fd5b505050506040513d6020811015620003a257600080fd5b505160ff169050601281111562000400576040805162461bcd60e51b815260206004820152601d60248201527f47556e694c504f7261636c652f746f6b656e312d6465632d67742d3138000000604482015290519081900360640190fd5b600a81810a60e052601291909103900a6101205250600580546001600160a01b039384166001600160a01b03199182161790915560068054929093169116179055505060805160601c60a05160c05160e0516101005161012051611abf6200049a600039806116665250806116335250806113fb5250806113ce525080610b435250806109235280611456528061155b5250611abf6000f3fe608060405234801561001057600080fd5b50600436106101735760003560e01c806365c4ce7a116100de578063a7a1ed7211610097578063be9a655511610071578063be9a655514610447578063bf353dbb1461044f578063dca44f6f14610475578063f29c29c41461047d57610173565b8063a7a1ed72146103e8578063a9c52a3914610404578063b0b8579b1461042857610173565b806365c4ce7a1461034857806365fae35e1461036e5780636c2552f91461039457806375f12b211461039c5780639c52a7f1146103ba578063a4dff0a2146103e057610173565b806346d4577d1161013057806346d4577d1461025c5780634ca29923146102cc5780634fce7a2a146102e657806357de26a41461030c57806359e02dd71461031457806365af79091461031c57610173565b806307da68f5146101785780630e5a6c701461018257806318178358146101a35780631b25b65f146101ab5780632e7dc6af1461021b5780633a1cde751461023f575b600080fd5b6101806104a3565b005b61018a61053e565b6040805192835290151560208301528051918290030190f35b6101806105ae565b610180600480360360208110156101c157600080fd5b8101906020810181356401000000008111156101dc57600080fd5b8201836020820111156101ee57600080fd5b8035906020019184602083028401116401000000008311171561021057600080fd5b50909250905061079f565b610223610921565b604080516001600160a01b039092168252519081900360200190f35b6101806004803603602081101561025557600080fd5b5035610945565b6101806004803603602081101561027257600080fd5b81019060208101813564010000000081111561028d57600080fd5b82018360208201111561029f57600080fd5b803590602001918460208302840111640100000000831117156102c157600080fd5b509092509050610a3b565b6102d4610b41565b60408051918252519081900360200190f35b6102d4600480360360208110156102fc57600080fd5b50356001600160a01b0316610b65565b6102d4610b77565b61018a610c3d565b6101806004803603604081101561033257600080fd5b50803590602001356001600160a01b0316610cad565b6101806004803603602081101561035e57600080fd5b50356001600160a01b0316610e39565b6101806004803603602081101561038457600080fd5b50356001600160a01b0316610ede565b610223610f75565b6103a4610f84565b6040805160ff9092168252519081900360200190f35b610180600480360360208110156103d057600080fd5b50356001600160a01b0316610f8d565b6102d4611023565b6103f0611070565b604080519115158252519081900360200190f35b61040c611089565b604080516001600160e81b039092168252519081900360200190f35b61043061109f565b6040805161ffff9092168252519081900360200190f35b6101806110ae565b6102d46004803603602081101561046557600080fd5b50356001600160a01b0316611135565b610223611147565b6101806004803603602081101561049357600080fd5b50356001600160a01b0316611156565b336000908152602081905260409020546001146104f5576040805162461bcd60e51b815260206004820152601b60248201526000805160206119ff833981519152604482015290519081900360640190fd5b6001805460006003819055600481905560ff19909116821762ffffff169091556040517fbedf0f4abfe86d4ffad593d9607fe70e83ea706033d44d24b3b6283cf3fc4f6b9190a1565b33600090815260026020526040812054819060011461058e5760405162461bcd60e51b8152600401808060200182810382526025815260200180611a1f6025913960400191505060405180910390fd5b50506004546001600160801b0380821691600160801b9004166001149091565b600154600881901c61ffff169060ff81169060181c8115610616576040805162461bcd60e51b815260206004820152601760248201527f47556e694c504f7261636c652f69732d73746f70706564000000000000000000604482015290519081900360640190fd5b8042101561066b576040805162461bcd60e51b815260206004820152601760248201527f47556e694c504f7261636c652f6e6f742d706173736564000000000000000000604482015290519081900360640190fd5b50506000610677611254565b90506001600160801b0381166106d4576040805162461bcd60e51b815260206004820152601a60248201527f47556e694c504f7261636c652f696e76616c69642d7072696365000000000000604482015290519081900360640190fd5b6106dc6119c4565b50604080518082018252600480546001600160801b03808216808552600160801b80840483166020808801829052600380546fffffffffffffffffffffffffffffffff199081169095178616928402929092179091558751808901895289851680825260019183018290529390951683178416909117909455600888901b42890160181b01909255835185519116815291820152825191927f80a5d0081d7e9a7bdb15ef207c6e0772f0f56d24317693206c0e47408f2d0b7392918290030190a1005b336000908152602081905260409020546001146107f1576040805162461bcd60e51b815260206004820152601b60248201526000805160206119ff833981519152604482015290519081900360640190fd5b60005b8181101561091c57600083838381811061080a57fe5b905060200201356001600160a01b03166001600160a01b03161415610873576040805162461bcd60e51b815260206004820152601a602482015279047556e694c504f7261636c652f6e6f2d636f6e74726163742d360341b604482015290519081900360640190fd5b60016002600085858581811061088557fe5b905060200201356001600160a01b03166001600160a01b03166001600160a01b03168152602001908152602001600020819055507f6ffc0fabf0709270e42087e84a3bfc36041d3b281266d04ae1962185092fb2448383838181106108e657fe5b905060200201356001600160a01b031660405180826001600160a01b0316815260200191505060405180910390a16001016107f4565b505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b33600090815260208190526040902054600114610997576040805162461bcd60e51b815260206004820152601b60248201526000805160206119ff833981519152604482015290519081900360640190fd5b61ffff8111156109ee576040805162461bcd60e51b815260206004820152601860248201527f47556e694c504f7261636c652f696e76616c69642d686f700000000000000000604482015290519081900360640190fd5b6001805462ffff00191661010061ffff8416021790556040805182815290517fd5cae49d972f01d170fb2d3409c5f318698639863c0403e59e4af06e0ce92817916020908290030190a150565b33600090815260208190526040902054600114610a8d576040805162461bcd60e51b815260206004820152601b60248201526000805160206119ff833981519152604482015290519081900360640190fd5b60005b8181101561091c57600060026000858585818110610aaa57fe5b905060200201356001600160a01b03166001600160a01b03166001600160a01b03168152602001908152602001600020819055507f12fdafd291eb287a54e3416070923d22aa5072f5ee04c4fb8361615e7508a37c838383818110610b0b57fe5b905060200201356001600160a01b031660405180826001600160a01b0316815260200191505060405180910390a1600101610a90565b7f000000000000000000000000000000000000000000000000000000000000000081565b60026020526000908152604090205481565b33600090815260026020526040812054600114610bc55760405162461bcd60e51b8152600401808060200182810382526025815260200180611a1f6025913960400191505060405180910390fd5b600354600160801b90046001600160801b0316600114610c2c576040805162461bcd60e51b815260206004820152601d60248201527f47556e694c504f7261636c652f6e6f2d63757272656e742d76616c7565000000604482015290519081900360640190fd5b506003546001600160801b03165b90565b336000908152600260205260408120548190600114610c8d5760405162461bcd60e51b8152600401808060200182810382526025815260200180611a1f6025913960400191505060405180910390fd5b50506003546001600160801b0380821691600160801b9004166001149091565b33600090815260208190526040902054600114610cff576040805162461bcd60e51b815260206004820152601b60248201526000805160206119ff833981519152604482015290519081900360640190fd5b6001600160a01b038116610d57576040805162461bcd60e51b815260206004820152601a602482015279047556e694c504f7261636c652f6e6f2d636f6e74726163742d360341b604482015290519081900360640190fd5b81610d7c57600580546001600160a01b0319166001600160a01b038316179055610df2565b8160011415610da557600680546001600160a01b0319166001600160a01b038316179055610df2565b6040805162461bcd60e51b815260206004820152601760248201527f47556e694c504f7261636c652f696e76616c69642d6964000000000000000000604482015290519081900360640190fd5b604080518381526001600160a01b038316602082015281517f57e1d18531e0ed6c4f60bf6039e5719aa115e43e43847525125856433a69f7a7929181900390910190a15050565b33600090815260208190526040902054600114610e8b576040805162461bcd60e51b815260206004820152601b60248201526000805160206119ff833981519152604482015290519081900360640190fd5b6001600160a01b038116600081815260026020908152604080832092909255815192835290517f12fdafd291eb287a54e3416070923d22aa5072f5ee04c4fb8361615e7508a37c9281900390910190a150565b33600090815260208190526040902054600114610f30576040805162461bcd60e51b815260206004820152601b60248201526000805160206119ff833981519152604482015290519081900360640190fd5b6001600160a01b03811660008181526020819052604080822060019055517fdd0e34038ac38b2a1ce960229778ac48a8719bc900b6c4f8d0475c6e8b385a609190a250565b6005546001600160a01b031681565b60015460ff1681565b33600090815260208190526040902054600114610fdf576040805162461bcd60e51b815260206004820152601b60248201526000805160206119ff833981519152604482015290519081900360640190fd5b6001600160a01b038116600081815260208190526040808220829055517f184450df2e323acec0ed3b5c7531b81f9b4cdef7914dfd4c0a4317416bb5251b9190a250565b600154600090630100000090046001600160e81b031661104557506000610c3a565b60015461106b90630100000081046001600160e81b031690610100900461ffff166116fc565b905090565b600154630100000090046001600160e81b031642101590565b600154630100000090046001600160e81b031681565b600154610100900461ffff1681565b33600090815260208190526040902054600114611100576040805162461bcd60e51b815260206004820152601b60248201526000805160206119ff833981519152604482015290519081900360640190fd5b6001805460ff191690556040517f1b55ba3aa851a46be3b365aee5b5c140edd620d578922f3e8466d2cbd96f954b90600090a1565b60006020819052908152604090205481565b6006546001600160a01b031681565b336000908152602081905260409020546001146111a8576040805162461bcd60e51b815260206004820152601b60248201526000805160206119ff833981519152604482015290519081900360640190fd5b6001600160a01b038116611200576040805162461bcd60e51b815260206004820152601a602482015279047556e694c504f7261636c652f6e6f2d636f6e74726163742d360341b604482015290519081900360640190fd5b6001600160a01b03811660008181526002602090815260409182902060019055815192835290517f6ffc0fabf0709270e42087e84a3bfc36041d3b281266d04ae1962185092fb2449281900390910190a150565b600080600560009054906101000a90046001600160a01b03166001600160a01b03166357de26a46040518163ffffffff1660e01b815260040160206040518083038186803b1580156112a557600080fd5b505afa1580156112b9573d6000803e3d6000fd5b505050506040513d60208110156112cf57600080fd5b505190508061130f5760405162461bcd60e51b8152600401808060200182810382526023815260200180611a446023913960400191505060405180910390fd5b600654604080516315f789a960e21b815290516000926001600160a01b0316916357de26a4916004808301926020929190829003018186803b15801561135457600080fd5b505afa158015611368573d6000803e3d6000fd5b505050506040513d602081101561137e57600080fd5b50519050806113be5760405162461bcd60e51b81526004018080602001828103825260238152602001806119dc6023913960400191505060405180910390fd5b600061144f60306114366113f2857f000000000000000000000000000000000000000000000000000000000000000061175a565b61142961141f887f000000000000000000000000000000000000000000000000000000000000000061175a565b600160601b61175a565b8161143057fe5b046117c6565b6001600160801b0316901b6001600160801b031661190e565b90506000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663b670ed7d846040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050604080518083038186803b1580156114c057600080fd5b505afa1580156114d4573d6000803e3d6000fd5b505050506040513d60408110156114ea57600080fd5b5080516020909101519092509050811515806115065750600081115b611557576040805162461bcd60e51b815260206004820152601d60248201527f47556e694c504f7261636c652f696e76616c69642d62616c616e636573000000604482015290519081900360640190fd5b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156115b257600080fd5b505afa1580156115c6573d6000803e3d6000fd5b505050506040513d60208110156115dc57600080fd5b50519050633b9aca008110156116235760405162461bcd60e51b8152600401808060200182810382526023815260200180611a676023913960400191505060405180910390fd5b60008161168f61165c89611657887f000000000000000000000000000000000000000000000000000000000000000061175a565b61175a565b61168a89611657887f000000000000000000000000000000000000000000000000000000000000000061175a565b61196c565b8161169657fe5b049050600160801b81106116f1576040805162461bcd60e51b815260206004820152601b60248201527f47556e694c504f7261636c652f71756f74652d6f766572666c6f770000000000604482015290519081900360640190fd5b979650505050505050565b80820382811115611754576040805162461bcd60e51b815260206004820152601a60248201527f47556e694c504f7261636c652f7375622d756e646572666c6f77000000000000604482015290519081900360640190fd5b92915050565b60008115806117755750508082028282828161177257fe5b04145b611754576040805162461bcd60e51b815260206004820152601960248201527f47556e694c504f7261636c652f6d756c2d6f766572666c6f7700000000000000604482015290519081900360640190fd5b6000816117d557506000611909565b816001600160801b82106117ee5760809190911c9060401b5b6801000000000000000082106118095760409190911c9060201b5b64010000000082106118205760209190911c9060101b5b6201000082106118355760109190911c9060081b5b61010082106118495760089190911c9060041b5b6010821061185c5760049190911c9060021b5b600882106118685760011b5b600181858161187357fe5b048201901c9050600181858161188557fe5b048201901c9050600181858161189757fe5b048201901c905060018185816118a957fe5b048201901c905060018185816118bb57fe5b048201901c905060018185816118cd57fe5b048201901c905060018185816118df57fe5b048201901c905060008185816118f157fe5b0490508082106119015780611903565b815b93505050505b919050565b806001600160a01b0381168114611909576040805162461bcd60e51b815260206004820152601d60248201527f47556e694c504f7261636c652f75696e743136302d6f766572666c6f77000000604482015290519081900360640190fd5b80820182811015611754576040805162461bcd60e51b815260206004820152601960248201527f47556e694c504f7261636c652f6164642d6f766572666c6f7700000000000000604482015290519081900360640190fd5b60408051808201909152600080825260208201529056fe47556e694c504f7261636c652f696e76616c69642d6f7261636c652d312d707269636547556e694c504f7261636c652f6e6f742d617574686f72697a6564000000000047556e694c504f7261636c652f636f6e74726163742d6e6f742d77686974656c697374656447556e694c504f7261636c652f696e76616c69642d6f7261636c652d302d707269636547556e694c504f7261636c652f746f74616c2d737570706c792d746f6f2d736d616c6ca2646970667358221220869df76b56e08bd8fae51cc93bbbd6e3973eb722c14fb3c70763bc9656afd8a964736f6c634300060c003347556e694c504f7261636c652f696e76616c69642d6f7261636c652d61646472657373000000000000000000000000abddafb225e10b90d798bb8a886238fb835e205347554e495633444149555344433100000000000000000000000000000000000000000000000000000000000047c3dc029825da43be595e21fffd0b66ffcb7f6e00000000000000000000000077b68899b99b686f415d074278a9a16b336085a0
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101735760003560e01c806365c4ce7a116100de578063a7a1ed7211610097578063be9a655511610071578063be9a655514610447578063bf353dbb1461044f578063dca44f6f14610475578063f29c29c41461047d57610173565b8063a7a1ed72146103e8578063a9c52a3914610404578063b0b8579b1461042857610173565b806365c4ce7a1461034857806365fae35e1461036e5780636c2552f91461039457806375f12b211461039c5780639c52a7f1146103ba578063a4dff0a2146103e057610173565b806346d4577d1161013057806346d4577d1461025c5780634ca29923146102cc5780634fce7a2a146102e657806357de26a41461030c57806359e02dd71461031457806365af79091461031c57610173565b806307da68f5146101785780630e5a6c701461018257806318178358146101a35780631b25b65f146101ab5780632e7dc6af1461021b5780633a1cde751461023f575b600080fd5b6101806104a3565b005b61018a61053e565b6040805192835290151560208301528051918290030190f35b6101806105ae565b610180600480360360208110156101c157600080fd5b8101906020810181356401000000008111156101dc57600080fd5b8201836020820111156101ee57600080fd5b8035906020019184602083028401116401000000008311171561021057600080fd5b50909250905061079f565b610223610921565b604080516001600160a01b039092168252519081900360200190f35b6101806004803603602081101561025557600080fd5b5035610945565b6101806004803603602081101561027257600080fd5b81019060208101813564010000000081111561028d57600080fd5b82018360208201111561029f57600080fd5b803590602001918460208302840111640100000000831117156102c157600080fd5b509092509050610a3b565b6102d4610b41565b60408051918252519081900360200190f35b6102d4600480360360208110156102fc57600080fd5b50356001600160a01b0316610b65565b6102d4610b77565b61018a610c3d565b6101806004803603604081101561033257600080fd5b50803590602001356001600160a01b0316610cad565b6101806004803603602081101561035e57600080fd5b50356001600160a01b0316610e39565b6101806004803603602081101561038457600080fd5b50356001600160a01b0316610ede565b610223610f75565b6103a4610f84565b6040805160ff9092168252519081900360200190f35b610180600480360360208110156103d057600080fd5b50356001600160a01b0316610f8d565b6102d4611023565b6103f0611070565b604080519115158252519081900360200190f35b61040c611089565b604080516001600160e81b039092168252519081900360200190f35b61043061109f565b6040805161ffff9092168252519081900360200190f35b6101806110ae565b6102d46004803603602081101561046557600080fd5b50356001600160a01b0316611135565b610223611147565b6101806004803603602081101561049357600080fd5b50356001600160a01b0316611156565b336000908152602081905260409020546001146104f5576040805162461bcd60e51b815260206004820152601b60248201526000805160206119ff833981519152604482015290519081900360640190fd5b6001805460006003819055600481905560ff19909116821762ffffff169091556040517fbedf0f4abfe86d4ffad593d9607fe70e83ea706033d44d24b3b6283cf3fc4f6b9190a1565b33600090815260026020526040812054819060011461058e5760405162461bcd60e51b8152600401808060200182810382526025815260200180611a1f6025913960400191505060405180910390fd5b50506004546001600160801b0380821691600160801b9004166001149091565b600154600881901c61ffff169060ff81169060181c8115610616576040805162461bcd60e51b815260206004820152601760248201527f47556e694c504f7261636c652f69732d73746f70706564000000000000000000604482015290519081900360640190fd5b8042101561066b576040805162461bcd60e51b815260206004820152601760248201527f47556e694c504f7261636c652f6e6f742d706173736564000000000000000000604482015290519081900360640190fd5b50506000610677611254565b90506001600160801b0381166106d4576040805162461bcd60e51b815260206004820152601a60248201527f47556e694c504f7261636c652f696e76616c69642d7072696365000000000000604482015290519081900360640190fd5b6106dc6119c4565b50604080518082018252600480546001600160801b03808216808552600160801b80840483166020808801829052600380546fffffffffffffffffffffffffffffffff199081169095178616928402929092179091558751808901895289851680825260019183018290529390951683178416909117909455600888901b42890160181b01909255835185519116815291820152825191927f80a5d0081d7e9a7bdb15ef207c6e0772f0f56d24317693206c0e47408f2d0b7392918290030190a1005b336000908152602081905260409020546001146107f1576040805162461bcd60e51b815260206004820152601b60248201526000805160206119ff833981519152604482015290519081900360640190fd5b60005b8181101561091c57600083838381811061080a57fe5b905060200201356001600160a01b03166001600160a01b03161415610873576040805162461bcd60e51b815260206004820152601a602482015279047556e694c504f7261636c652f6e6f2d636f6e74726163742d360341b604482015290519081900360640190fd5b60016002600085858581811061088557fe5b905060200201356001600160a01b03166001600160a01b03166001600160a01b03168152602001908152602001600020819055507f6ffc0fabf0709270e42087e84a3bfc36041d3b281266d04ae1962185092fb2448383838181106108e657fe5b905060200201356001600160a01b031660405180826001600160a01b0316815260200191505060405180910390a16001016107f4565b505050565b7f000000000000000000000000abddafb225e10b90d798bb8a886238fb835e205381565b33600090815260208190526040902054600114610997576040805162461bcd60e51b815260206004820152601b60248201526000805160206119ff833981519152604482015290519081900360640190fd5b61ffff8111156109ee576040805162461bcd60e51b815260206004820152601860248201527f47556e694c504f7261636c652f696e76616c69642d686f700000000000000000604482015290519081900360640190fd5b6001805462ffff00191661010061ffff8416021790556040805182815290517fd5cae49d972f01d170fb2d3409c5f318698639863c0403e59e4af06e0ce92817916020908290030190a150565b33600090815260208190526040902054600114610a8d576040805162461bcd60e51b815260206004820152601b60248201526000805160206119ff833981519152604482015290519081900360640190fd5b60005b8181101561091c57600060026000858585818110610aaa57fe5b905060200201356001600160a01b03166001600160a01b03166001600160a01b03168152602001908152602001600020819055507f12fdafd291eb287a54e3416070923d22aa5072f5ee04c4fb8361615e7508a37c838383818110610b0b57fe5b905060200201356001600160a01b031660405180826001600160a01b0316815260200191505060405180910390a1600101610a90565b7f47554e495633444149555344433100000000000000000000000000000000000081565b60026020526000908152604090205481565b33600090815260026020526040812054600114610bc55760405162461bcd60e51b8152600401808060200182810382526025815260200180611a1f6025913960400191505060405180910390fd5b600354600160801b90046001600160801b0316600114610c2c576040805162461bcd60e51b815260206004820152601d60248201527f47556e694c504f7261636c652f6e6f2d63757272656e742d76616c7565000000604482015290519081900360640190fd5b506003546001600160801b03165b90565b336000908152600260205260408120548190600114610c8d5760405162461bcd60e51b8152600401808060200182810382526025815260200180611a1f6025913960400191505060405180910390fd5b50506003546001600160801b0380821691600160801b9004166001149091565b33600090815260208190526040902054600114610cff576040805162461bcd60e51b815260206004820152601b60248201526000805160206119ff833981519152604482015290519081900360640190fd5b6001600160a01b038116610d57576040805162461bcd60e51b815260206004820152601a602482015279047556e694c504f7261636c652f6e6f2d636f6e74726163742d360341b604482015290519081900360640190fd5b81610d7c57600580546001600160a01b0319166001600160a01b038316179055610df2565b8160011415610da557600680546001600160a01b0319166001600160a01b038316179055610df2565b6040805162461bcd60e51b815260206004820152601760248201527f47556e694c504f7261636c652f696e76616c69642d6964000000000000000000604482015290519081900360640190fd5b604080518381526001600160a01b038316602082015281517f57e1d18531e0ed6c4f60bf6039e5719aa115e43e43847525125856433a69f7a7929181900390910190a15050565b33600090815260208190526040902054600114610e8b576040805162461bcd60e51b815260206004820152601b60248201526000805160206119ff833981519152604482015290519081900360640190fd5b6001600160a01b038116600081815260026020908152604080832092909255815192835290517f12fdafd291eb287a54e3416070923d22aa5072f5ee04c4fb8361615e7508a37c9281900390910190a150565b33600090815260208190526040902054600114610f30576040805162461bcd60e51b815260206004820152601b60248201526000805160206119ff833981519152604482015290519081900360640190fd5b6001600160a01b03811660008181526020819052604080822060019055517fdd0e34038ac38b2a1ce960229778ac48a8719bc900b6c4f8d0475c6e8b385a609190a250565b6005546001600160a01b031681565b60015460ff1681565b33600090815260208190526040902054600114610fdf576040805162461bcd60e51b815260206004820152601b60248201526000805160206119ff833981519152604482015290519081900360640190fd5b6001600160a01b038116600081815260208190526040808220829055517f184450df2e323acec0ed3b5c7531b81f9b4cdef7914dfd4c0a4317416bb5251b9190a250565b600154600090630100000090046001600160e81b031661104557506000610c3a565b60015461106b90630100000081046001600160e81b031690610100900461ffff166116fc565b905090565b600154630100000090046001600160e81b031642101590565b600154630100000090046001600160e81b031681565b600154610100900461ffff1681565b33600090815260208190526040902054600114611100576040805162461bcd60e51b815260206004820152601b60248201526000805160206119ff833981519152604482015290519081900360640190fd5b6001805460ff191690556040517f1b55ba3aa851a46be3b365aee5b5c140edd620d578922f3e8466d2cbd96f954b90600090a1565b60006020819052908152604090205481565b6006546001600160a01b031681565b336000908152602081905260409020546001146111a8576040805162461bcd60e51b815260206004820152601b60248201526000805160206119ff833981519152604482015290519081900360640190fd5b6001600160a01b038116611200576040805162461bcd60e51b815260206004820152601a602482015279047556e694c504f7261636c652f6e6f2d636f6e74726163742d360341b604482015290519081900360640190fd5b6001600160a01b03811660008181526002602090815260409182902060019055815192835290517f6ffc0fabf0709270e42087e84a3bfc36041d3b281266d04ae1962185092fb2449281900390910190a150565b600080600560009054906101000a90046001600160a01b03166001600160a01b03166357de26a46040518163ffffffff1660e01b815260040160206040518083038186803b1580156112a557600080fd5b505afa1580156112b9573d6000803e3d6000fd5b505050506040513d60208110156112cf57600080fd5b505190508061130f5760405162461bcd60e51b8152600401808060200182810382526023815260200180611a446023913960400191505060405180910390fd5b600654604080516315f789a960e21b815290516000926001600160a01b0316916357de26a4916004808301926020929190829003018186803b15801561135457600080fd5b505afa158015611368573d6000803e3d6000fd5b505050506040513d602081101561137e57600080fd5b50519050806113be5760405162461bcd60e51b81526004018080602001828103825260238152602001806119dc6023913960400191505060405180910390fd5b600061144f60306114366113f2857f0000000000000000000000000000000000000000000000000de0b6b3a764000061175a565b61142961141f887f00000000000000000000000000000000000000000000000000000000000f424061175a565b600160601b61175a565b8161143057fe5b046117c6565b6001600160801b0316901b6001600160801b031661190e565b90506000807f000000000000000000000000abddafb225e10b90d798bb8a886238fb835e20536001600160a01b031663b670ed7d846040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050604080518083038186803b1580156114c057600080fd5b505afa1580156114d4573d6000803e3d6000fd5b505050506040513d60408110156114ea57600080fd5b5080516020909101519092509050811515806115065750600081115b611557576040805162461bcd60e51b815260206004820152601d60248201527f47556e694c504f7261636c652f696e76616c69642d62616c616e636573000000604482015290519081900360640190fd5b60007f000000000000000000000000abddafb225e10b90d798bb8a886238fb835e20536001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156115b257600080fd5b505afa1580156115c6573d6000803e3d6000fd5b505050506040513d60208110156115dc57600080fd5b50519050633b9aca008110156116235760405162461bcd60e51b8152600401808060200182810382526023815260200180611a676023913960400191505060405180910390fd5b60008161168f61165c89611657887f000000000000000000000000000000000000000000000000000000000000000161175a565b61175a565b61168a89611657887f000000000000000000000000000000000000000000000000000000e8d4a5100061175a565b61196c565b8161169657fe5b049050600160801b81106116f1576040805162461bcd60e51b815260206004820152601b60248201527f47556e694c504f7261636c652f71756f74652d6f766572666c6f770000000000604482015290519081900360640190fd5b979650505050505050565b80820382811115611754576040805162461bcd60e51b815260206004820152601a60248201527f47556e694c504f7261636c652f7375622d756e646572666c6f77000000000000604482015290519081900360640190fd5b92915050565b60008115806117755750508082028282828161177257fe5b04145b611754576040805162461bcd60e51b815260206004820152601960248201527f47556e694c504f7261636c652f6d756c2d6f766572666c6f7700000000000000604482015290519081900360640190fd5b6000816117d557506000611909565b816001600160801b82106117ee5760809190911c9060401b5b6801000000000000000082106118095760409190911c9060201b5b64010000000082106118205760209190911c9060101b5b6201000082106118355760109190911c9060081b5b61010082106118495760089190911c9060041b5b6010821061185c5760049190911c9060021b5b600882106118685760011b5b600181858161187357fe5b048201901c9050600181858161188557fe5b048201901c9050600181858161189757fe5b048201901c905060018185816118a957fe5b048201901c905060018185816118bb57fe5b048201901c905060018185816118cd57fe5b048201901c905060018185816118df57fe5b048201901c905060008185816118f157fe5b0490508082106119015780611903565b815b93505050505b919050565b806001600160a01b0381168114611909576040805162461bcd60e51b815260206004820152601d60248201527f47556e694c504f7261636c652f75696e743136302d6f766572666c6f77000000604482015290519081900360640190fd5b80820182811015611754576040805162461bcd60e51b815260206004820152601960248201527f47556e694c504f7261636c652f6164642d6f766572666c6f7700000000000000604482015290519081900360640190fd5b60408051808201909152600080825260208201529056fe47556e694c504f7261636c652f696e76616c69642d6f7261636c652d312d707269636547556e694c504f7261636c652f6e6f742d617574686f72697a6564000000000047556e694c504f7261636c652f636f6e74726163742d6e6f742d77686974656c697374656447556e694c504f7261636c652f696e76616c69642d6f7261636c652d302d707269636547556e694c504f7261636c652f746f74616c2d737570706c792d746f6f2d736d616c6ca2646970667358221220869df76b56e08bd8fae51cc93bbbd6e3973eb722c14fb3c70763bc9656afd8a964736f6c634300060c0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000abddafb225e10b90d798bb8a886238fb835e205347554e495633444149555344433100000000000000000000000000000000000000000000000000000000000047c3dc029825da43be595e21fffd0b66ffcb7f6e00000000000000000000000077b68899b99b686f415d074278a9a16b336085a0
-----Decoded View---------------
Arg [0] : _src (address): 0xAbDDAfB225e10B90D798bB8A886238Fb835e2053
Arg [1] : _wat (bytes32): 0x47554e4956334441495553444331000000000000000000000000000000000000
Arg [2] : _orb0 (address): 0x47c3dC029825Da43BE595E21fffD0b66FfcB7F6e
Arg [3] : _orb1 (address): 0x77b68899b99b686F415d074278a9a16b336085A0
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 000000000000000000000000abddafb225e10b90d798bb8a886238fb835e2053
Arg [1] : 47554e4956334441495553444331000000000000000000000000000000000000
Arg [2] : 00000000000000000000000047c3dc029825da43be595e21fffd0b66ffcb7f6e
Arg [3] : 00000000000000000000000077b68899b99b686f415d074278a9a16b336085a0
Deployed Bytecode Sourcemap
3189:10838:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8164:142;;;:::i;:::-;;13001:125;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;10578:2282;;;:::i;13481:253::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13481:253:0;;-1:-1:-1;13481:253:0;-1:-1:-1;13481:253:0;:::i;3677:28::-;;;:::i;:::-;;;;-1:-1:-1;;;;;3677:28:0;;;;;;;;;;;;;;8406:171;;;;;;;;;;;;;;;;-1:-1:-1;8406:171:0;;:::i;13844:180::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13844:180:0;;-1:-1:-1;13844:180:0;-1:-1:-1;13844:180:0;:::i;4088:28::-;;;:::i;:::-;;;;;;;;;;;;;;;;4203:39;;;;;;;;;;;;;;;;-1:-1:-1;4203:39:0;-1:-1:-1;;;;;4203:39:0;;:::i;13134:171::-;;;:::i;12868:125::-;;;:::i;8585:347::-;;;;;;;;;;;;;;;;-1:-1:-1;8585:347:0;;;;;;-1:-1:-1;;;;;8585:347:0;;:::i;13742:94::-;;;;;;;;;;;;;;;;-1:-1:-1;13742:94:0;-1:-1:-1;;;;;13742:94:0;;:::i;3361:79::-;;;;;;;;;;;;;;;;-1:-1:-1;3361:79:0;-1:-1:-1;;;;;3361:79:0;;:::i;4971:30::-;;;:::i;3864:22::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;3460:79;;;;;;;;;;;;;;;;-1:-1:-1;3460:79:0;-1:-1:-1;;;;;3460:79:0;;:::i;8984:148::-;;;:::i;9140:93::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;4011:18;;;:::i;:::-;;;;-1:-1:-1;;;;;4011:18:0;;;;;;;;;;;;;;3933:28;;;:::i;:::-;;;;;;;;;;;;;;;;;;;8314:84;;;:::i;3241:41::-;;;;;;;;;;;;;;;;-1:-1:-1;3241:41:0;-1:-1:-1;;;;;3241:41:0;;:::i;5052:30::-;;;:::i;13313:160::-;;;;;;;;;;;;;;;;-1:-1:-1;13313:160:0;-1:-1:-1;;;;;13313:160:0;;:::i;8164:142::-;3601:10;3595:5;:17;;;;;;;;;;;3616:1;3595:22;3587:62;;;;;-1:-1:-1;;;3587:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;3587:62:0;;;;;;;;;;;;;;;8215:1:::1;8205:11:::0;;:7:::1;8234:3;8227:10:::0;;;8255:3:::1;8248:10:::0;;;-1:-1:-1;;8205:11:0;;::::1;::::0;::::1;8269:7:::0;::::1;::::0;;;8292:6:::1;::::0;::::1;::::0;8205:7;8292:6:::1;8164:142::o:0;13001:125::-;4277:10;13045:7;4273:15;;;:3;:15;;;;;;13045:7;;4292:1;4273:20;4265:70;;;;-1:-1:-1;;;4265:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;13094:3:0::1;:7:::0;-1:-1:-1;;;;;13094:7:0;;::::1;::::0;-1:-1:-1;;;13105:7:0;::::1;;13094::::0;13105:12:::1;13001:125:::0;;:::o;10578:2282::-;10913:1;10907:8;11011:1;11007:13;;;11022:6;11003:26;;10965:4;10946:26;;;11064:2;11060:14;11228:13;;11220:49;;;;;-1:-1:-1;;;11220:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;11550:4;11531:15;:23;;11523:59;;;;;-1:-1:-1;;;11523:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;10578:2282;;11606:11;11620:6;:4;:6::i;:::-;11606:20;-1:-1:-1;;;;;;11645:8:0;;11637:47;;;;;-1:-1:-1;;;11637:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;11695:16;;:::i;:::-;-1:-1:-1;11695:22:0;;;;;;;;11714:3;11695:22;;-1:-1:-1;;;;;11695:22:0;;;;;;-1:-1:-1;;;11695:22:0;;;;;;;;;;;;11782:3;:10;;-1:-1:-1;;11782:10:0;;;;;;;;;;;;;;;;;;11809:12;;;;;;;;;;;;;-1:-1:-1;11809:12:0;;;;;;11803:18;;;;;;;;;;;;;;12542:1;12538:12;;;12443:11;12439:22;;12435:2;12431:31;12353:216;12308:276;;;12703:8;;12697:20;;;;;;;;;;;;11695:22;;12697:20;;;;;;;;;12836:6;13481:253;3601:10;3595:5;:17;;;;;;;;;;;3616:1;3595:22;3587:62;;;;;-1:-1:-1;;;3587:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;3587:62:0;;;;;;;;;;;;;;;13547:9:::1;13543:184;13562:13:::0;;::::1;13543:184;;;13622:1;13605:2:::0;;13608:1;13605:5;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;13605:5:0::1;-1:-1:-1::0;;;;;13605:19:0::1;;;13597:58;;;::::0;;-1:-1:-1;;;13597:58:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;13597:58:0;;;;;;;;;;;;;::::1;;13683:1;13670:3;:10;13674:2;;13677:1;13674:5;;;;;;;;;;;;;-1:-1:-1::0;;;;;13674:5:0::1;-1:-1:-1::0;;;;;13670:10:0::1;-1:-1:-1::0;;;;;13670:10:0::1;;;;;;;;;;;;:14;;;;13704:11;13709:2;;13712:1;13709:5;;;;;;;;;;;;;-1:-1:-1::0;;;;;13709:5:0::1;13704:11;;;;-1:-1:-1::0;;;;;13704:11:0::1;;;;;;;;;;;;;;;13577:3;;13543:184;;;;13481:253:::0;;:::o;3677:28::-;;;:::o;8406:171::-;3601:10;3595:5;:17;;;;;;;;;;;3616:1;3595:22;3587:62;;;;;-1:-1:-1;;;3587:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;3587:62:0;;;;;;;;;;;;;;;8467:18:::1;::::0;::::1;;8459:55;;;::::0;;-1:-1:-1;;;8459:55:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;8525:3;:18:::0;;-1:-1:-1;;8525:18:0::1;;;::::0;::::1;;;::::0;;8559:10:::1;::::0;;;;;;;::::1;::::0;::::1;::::0;;;;;;::::1;8406:171:::0;:::o;13844:180::-;3601:10;3595:5;:17;;;;;;;;;;;3616:1;3595:22;3587:62;;;;;-1:-1:-1;;;3587:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;3587:62:0;;;;;;;;;;;;;;;13910:9:::1;13906:111;13925:13:::0;;::::1;13906:111;;;13973:1;13960:3;:10;13964:2;;13967:1;13964:5;;;;;;;;;;;;;-1:-1:-1::0;;;;;13964:5:0::1;-1:-1:-1::0;;;;;13960:10:0::1;-1:-1:-1::0;;;;;13960:10:0::1;;;;;;;;;;;;:14;;;;13994:11;13999:2;;14002:1;13999:5;;;;;;;;;;;;;-1:-1:-1::0;;;;;13999:5:0::1;13994:11;;;;-1:-1:-1::0;;;;;13994:11:0::1;;;;;;;;;;;;;;;13940:3;;13906:111;;4088:28:::0;;;:::o;4203:39::-;;;;;;;;;;;;;:::o;13134:171::-;4277:10;13178:7;4273:15;;;:3;:15;;;;;;4292:1;4273:20;4265:70;;;;-1:-1:-1;;;4265:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13206:3:::1;:7:::0;-1:-1:-1;;;13206:7:0;::::1;-1:-1:-1::0;;;;;13206:7:0::1;13217:1;13206:12;13198:54;;;::::0;;-1:-1:-1;;;13198:54:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;13287:3:0::1;:7:::0;-1:-1:-1;;;;;13287:7:0::1;4337:1;13134:171:::0;:::o;12868:125::-;4277:10;12912:7;4273:15;;;:3;:15;;;;;;12912:7;;4292:1;4273:20;4265:70;;;;-1:-1:-1;;;4265:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;12961:3:0::1;:7:::0;-1:-1:-1;;;;;12961:7:0;;::::1;::::0;-1:-1:-1;;;12972:7:0;::::1;;12961::::0;12972:12:::1;12868:125:::0;;:::o;8585:347::-;3601:10;3595:5;:17;;;;;;;;;;;3616:1;3595:22;3587:62;;;;;-1:-1:-1;;;3587:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;3587:62:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;8659:18:0;::::1;8651:57;;;::::0;;-1:-1:-1;;;8651:57:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;8651:57:0;;;;;;;;;;;;;::::1;;8722:8:::0;8719:175:::1;;8747:4;:11:::0;;-1:-1:-1;;;;;;8747:11:0::1;-1:-1:-1::0;;;;;8747:11:0;::::1;;::::0;;8719:175:::1;;;8780:3;8787:1;8780:8;8776:118;;;8805:4;:11:::0;;-1:-1:-1;;;;;;8805:11:0::1;-1:-1:-1::0;;;;;8805:11:0;::::1;;::::0;;8776:118:::1;;;8849:33;::::0;;-1:-1:-1;;;8849:33:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;8776:118;8909:15;::::0;;;;;-1:-1:-1;;;;;8909:15:0;::::1;;::::0;::::1;::::0;;;::::1;::::0;;;;;;;;;::::1;8585:347:::0;;:::o;13742:94::-;3601:10;3595:5;:17;;;;;;;;;;;3616:1;3595:22;3587:62;;;;;-1:-1:-1;;;3587:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;3587:62:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;13793:7:0;::::1;13803:1;13793:7:::0;;;:3:::1;:7;::::0;;;;;;;:11;;;;13820:8;;;;;;;::::1;::::0;;;;;;;;::::1;13742:94:::0;:::o;3361:79::-;3601:10;3595:5;:17;;;;;;;;;;;3616:1;3595:22;3587:62;;;;;-1:-1:-1;;;3587:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;3587:62:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;3405:11:0;::::1;:5;:11:::0;;;::::1;::::0;;;;;;;3419:1:::1;3405:15:::0;;3427:10;::::1;::::0;3405:5;3427:10:::1;3361:79:::0;:::o;4971:30::-;;;-1:-1:-1;;;;;4971:30:0;;:::o;3864:22::-;;;;;;:::o;3460:79::-;3601:10;3595:5;:17;;;;;;;;;;;3616:1;3595:22;3587:62;;;;;-1:-1:-1;;;3587:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;3587:62:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;3504:11:0;::::1;3518:1;3504:11:::0;;;::::1;::::0;;;;;;;:15;;;3526:10;::::1;::::0;3518:1;3526:10:::1;3460:79:::0;:::o;8984:148::-;9046:3;;9022:7;;9046:3;;;-1:-1:-1;;;;;9046:3:0;9042:22;;-1:-1:-1;9063:1:0;9056:8;;9042:22;9115:3;;9110:14;;9115:3;;;-1:-1:-1;;;;;9115:3:0;;;9120;;;;9110:4;:14::i;:::-;9103:21;;8984:148;:::o;9140:93::-;9222:3;;;;;-1:-1:-1;;;;;9222:3:0;9203:15;:22;;;9140:93::o;4011:18::-;;;;;;-1:-1:-1;;;;;4011:18:0;;:::o;3933:28::-;;;;;;;;;:::o;8314:84::-;3601:10;3595:5;:17;;;;;;;;;;;3616:1;3595:22;3587:62;;;;;-1:-1:-1;;;3587:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;3587:62:0;;;;;;;;;;;;;;;8356:7:::1;:11:::0;;-1:-1:-1;;8356:11:0::1;::::0;;8383:7:::1;::::0;::::1;::::0;8366:1:::1;::::0;8383:7:::1;8314:84::o:0;3241:41::-;;;;;;;;;;;;;;:::o;5052:30::-;;;-1:-1:-1;;;;;5052:30:0;;:::o;13313:160::-;3601:10;3595:5;:17;;;;;;;;;;;3616:1;3595:22;3587:62;;;;;-1:-1:-1;;;3587:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;3587:62:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;13372:16:0;::::1;13364:55;;;::::0;;-1:-1:-1;;;13364:55:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;13364:55:0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;13430:7:0;::::1;;::::0;;;:3:::1;:7;::::0;;;;;;;;13440:1:::1;13430:11:::0;;13457:8;;;;;;;::::1;::::0;;;;;;;;::::1;13313:160:::0;:::o;9241:1329::-;9275:13;9371:10;9395:4;;;;;;;;;-1:-1:-1;;;;;9395:4:0;-1:-1:-1;;;;;9384:21:0;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9384:23:0;;-1:-1:-1;9467:7:0;9459:55;;;;-1:-1:-1;;;9459:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9549:4;;9538:23;;;-1:-1:-1;;;9538:23:0;;;;9525:10;;-1:-1:-1;;;;;9549:4:0;;9538:21;;:23;;;;;;;;;;;;;;9549:4;9538:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9538:23:0;;-1:-1:-1;9621:7:0;9613:55;;;;-1:-1:-1;;;9613:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9679:20;9702:77;9776:2;9712:60;9754:16;9759:2;9763:6;9754:4;:16::i;:::-;9717:33;9722:16;9727:2;9731:6;9722:4;:16::i;:::-;-1:-1:-1;;;9717:4:0;:33::i;:::-;:54;;;;;;9712:4;:60::i;:::-;-1:-1:-1;;;;;9712:66:0;;;-1:-1:-1;;;;;9702:77:0;:9;:77::i;:::-;9679:100;;9844:10;9856;9879:3;-1:-1:-1;;;;;9870:42:0;;9913:12;9870:56;;;;;;;;;;;;;-1:-1:-1;;;;;9870:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9870:56:0;;;;;;;;;-1:-1:-1;9870:56:0;-1:-1:-1;9945:6:0;;;;:16;;;9960:1;9955:2;:6;9945:16;9937:58;;;;;-1:-1:-1;;;9937:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;10006:19;10038:3;-1:-1:-1;;;;;10028:26:0;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10028:28:0;;-1:-1:-1;10090:3:0;10075:18;;;10067:66;;;;-1:-1:-1;;;10067:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10320:12;10445:11;10335:107;10354:31;10359:2;10363:21;10368:2;10372:11;10363:4;:21::i;:::-;10354:4;:31::i;:::-;10400;10405:2;10409:21;10414:2;10418:11;10409:4;:21::i;10400:31::-;10335:4;:107::i;:::-;:121;;;;;;10320:136;;-1:-1:-1;;;10475:4:0;:15;10467:55;;;;;-1:-1:-1;;;10467:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;10549:4;9241:1329;-1:-1:-1;;;;;;;9241:1329:0:o;5350:149::-;5446:7;;;5441:19;;;;5433:58;;;;;-1:-1:-1;;;5433:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;5350:149;;;;:::o;5505:164::-;5566:9;5596:7;;;:35;;-1:-1:-1;;5612:7:0;;;5629:2;5623;5612:7;5623:2;5607:18;;;;;:24;5596:35;5588:73;;;;;-1:-1:-1;;;5588:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;5970:970;6018:7;6042;6038:895;;-1:-1:-1;6058:1:0;6051:8;;6038:895;6103:2;6132:1;-1:-1:-1;;;6152:41:0;;6148:72;;6204:3;6197:10;;;;;6215:2;6209:8;6148:72;6244:19;6238:2;:25;6234:55;;6274:2;6267:9;;;;;6284:2;6278:8;6234:55;6313:11;6307:2;:17;6303:47;;6335:2;6328:9;;;;;6345:2;6339:8;6303:47;6374:7;6368:2;:13;6364:42;;6392:2;6385:9;;;;;6402:1;6396:7;6364:42;6430:5;6424:2;:11;6420:39;;6446:1;6439:8;;;;;6455:1;6449:7;6420:39;6483:4;6477:2;:10;6473:38;;6498:1;6491:8;;;;;6507:1;6501:7;6473:38;6535:3;6529:2;:9;6525:27;;6548:1;6542:7;6525:27;6586:1;6580;6575:2;:6;;;;;;6571:1;:10;6570:17;;6566:21;;6622:1;6616;6611:2;:6;;;;;;6607:1;:10;6606:17;;6602:21;;6658:1;6652;6647:2;:6;;;;;;6643:1;:10;6642:17;;6638:21;;6694:1;6688;6683:2;:6;;;;;;6679:1;:10;6678:17;;6674:21;;6730:1;6724;6719:2;:6;;;;;;6715:1;:10;6714:17;;6710:21;;6766:1;6760;6755:2;:6;;;;;;6751:1;:10;6750:17;;6746:21;;6802:1;6796;6791:2;:6;;;;;;6787:1;:10;6786:17;;6782:21;;6855:10;6873:1;6868:2;:6;;;;;;6855:19;;6909:2;6905:1;:6;:15;;6918:2;6905:15;;;6914:1;6905:15;6889:32;;;;;6038:895;5970:970;;;:::o;5675:146::-;5778:1;-1:-1:-1;;;;;5758:21:0;;;;5750:63;;;;;-1:-1:-1;;;5750:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;5196:148;5292:7;;;5287:19;;;;5279:57;;;;;-1:-1:-1;;;5279:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;:::o
Swarm Source
ipfs://869df76b56e08bd8fae51cc93bbbd6e3973eb722c14fb3c70763bc9656afd8a9
Loading...
Loading
Loading...
Loading
OVERVIEW
Sky (formerly Maker) enables users to get rewarded for non-custodial savings.Multichain Portfolio | 31 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
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.