ETH Price: $3,278.07 (-3.88%)
Gas: 14 Gwei

Contract

0xf751f24DD9cfAd885984D1bA68860F558D21E52A
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Value

There are no matching entries

Please try again later

Latest 1 internal transaction

Advanced mode:
Parent Transaction Hash Block From To Value
124346932021-05-14 20:25:251145 days ago1621023925  Contract Creation0 ETH
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
UNIV2LPOracle

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, GNU AGPLv3 license
/**
 *Submitted for verification at Etherscan.io on 2021-05-14
*/

// SPDX-License-Identifier: GPL-3.0-or-later

/// UNIV2LPOracle.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     //
//                                                   //
///////////////////////////////////////////////////////

// A naïve approach to calculate the price of LP tokens, assuming the protocol
// fee is zero, is to compute the price of the assets locked in its liquidity
// pool, and divide it by the total amount of LP tokens issued:
//
// (p_0 * r_0 + p_1 * r_1) / LP_supply              (1)
//
// where r_0 and r_1 are the reserves of the two tokens held by the pool, and
// p_0 and p_1 are their respective prices in some reference unit of account.
//
// However, the price of LP tokens (i.e. pool shares) needs to be evaluated
// based on reserve values r_0 and r_1 that cannot be arbitraged, i.e. values
// that give the two halves of the pool equal economic value:
//
// r_0 * p_0 = r_1 * p_1                            (2)
// 
// Furthermore, two-asset constant product pools, neglecting fees, satisfy
// (before and after trades):
//
// r_0 * r_1 = k                                    (3)
//
// Using (2) and (3) we can compute R_i, the arbitrage-free reserve values, in a
// manner that depends only on k (which can be derived from the current reserve
// balances, even if they are far from equilibrium) and market prices p_i
// obtained from a trusted source:
//
// R_0 = sqrt(k * p_1 / p_0)                        (4)
//   and
// R_1 = sqrt(k * p_0 / p_1)                        (5)
//
// The value of an LP token is then, replacing (4) and (5) in (1):
//
// (p_0 * R_0 + p_1 * R_1) / LP_supply
//     = 2 * sqrt(k * p_0 * p_1) / LP_supply        (6)
//
// k can be re-expressed in terms of the current pool reserves r_0 and r_1:
//
// 2 * sqrt((r_0 * p_0) * (r_1 * p_1)) / LP_supply  (7)
//
// The structure of (7) is well-suited for use in fixed-point EVM calculations, as the
// terms (r_0 * p_0) and (r_1 * p_1), being the values of the reserves in the reference unit,
// should have reasonably-bounded sizes. This reduces the likelihood of overflow due to
// tokens with very low prices but large total supplies.

pragma solidity =0.6.12;

interface ERC20Like {
    function decimals()         external view returns (uint8);
    function balanceOf(address) external view returns (uint256);
    function totalSupply()      external view returns (uint256);
}

interface UniswapV2PairLike {
    function sync()        external;
    function token0()      external view returns (address);
    function token1()      external view returns (address);
    function getReserves() external view returns (uint112,uint112,uint32);  // reserve0, reserve1, blockTimestampLast
}

interface OracleLike {
    function read() external view returns (uint256);
}

// Factory for creating Uniswap V2 LP Token Oracle instances
contract UNIV2LPOracleFactory {

    mapping(address => bool) public isOracle;

    event NewUNIV2LPOracle(address owner, address orcl, bytes32 wat, address indexed tok0, address indexed tok1, address orb0, address orb1);

    // Create new Uniswap V2 LP Token Oracle instance
    function build(
        address _owner,
        address _src,
        bytes32 _wat,
        address _orb0,
        address _orb1
        ) public returns (address orcl) {
        address tok0 = UniswapV2PairLike(_src).token0();
        address tok1 = UniswapV2PairLike(_src).token1();
        orcl = address(new UNIV2LPOracle(_src, _wat, _orb0, _orb1));
        UNIV2LPOracle(orcl).rely(_owner);
        UNIV2LPOracle(orcl).deny(address(this));
        isOracle[orcl] = true;
        emit NewUNIV2LPOracle(_owner, orcl, _wat, tok0, tok1, _orb0, _orb1);
    }
}

contract UNIV2LPOracle {

    // --- 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, "UNIV2LPOracle/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, "UNIV2LPOracle/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) 

    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, "UNIV2LPOracle/add-overflow");
    }
    function sub(uint256 _x, uint256 _y) internal pure returns (uint256 z) {
        require((z = _x - _y) <= _x, "UNIV2LPOracle/sub-underflow");
    }
    function mul(uint256 _x, uint256 _y) internal pure returns (uint256 z) {
        require(_y == 0 || (z = _x * _y) / _y == _x, "UNIV2LPOracle/mul-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),                        "UNIV2LPOracle/invalid-src-address");
        require(_orb0 != address(0) && _orb1 != address(0), "UNIV2LPOracle/invalid-oracle-address");
        wards[msg.sender] = 1;
        emit Rely(msg.sender);
        src  = _src;
        wat  = _wat;
        uint256 dec0 = uint256(ERC20Like(UniswapV2PairLike(_src).token0()).decimals());
        require(dec0 <= 18, "UNIV2LPOracle/token0-dec-gt-18");
        UNIT_0 = 10 ** dec0;
        uint256 dec1 = uint256(ERC20Like(UniswapV2PairLike(_src).token1()).decimals());
        require(dec1 <= 18, "UNIV2LPOracle/token1-dec-gt-18");
        UNIT_1 = 10 ** 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), "UNIV2LPOracle/invalid-hop");
        hop = uint16(_hop);
        emit Step(_hop);
    }

    function link(uint256 _id, address _orb) external auth {
        require(_orb != address(0), "UNIV2LPOracle/no-contract-0");
        if(_id == 0) {
            orb0 = _orb;
        } else if (_id == 1) {
            orb1 = _orb;
        } else {
            revert("UNIV2LPOracle/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) {
        // Sync up reserves of uniswap liquidity pool
        UniswapV2PairLike(src).sync();

        // Get reserves of uniswap liquidity pool
        (uint112 r0, uint112 r1,) = UniswapV2PairLike(src).getReserves();
        require(r0 > 0 && r1 > 0, "UNIV2LPOracle/invalid-reserves");

        // All Oracle prices are priced with 18 decimals against USD
        uint256 p0 = OracleLike(orb0).read();  // Query token0 price from oracle (WAD)
        require(p0 != 0, "UNIV2LPOracle/invalid-oracle-0-price");
        uint256 p1 = OracleLike(orb1).read();  // Query token1 price from oracle (WAD)
        require(p1 != 0, "UNIV2LPOracle/invalid-oracle-1-price");

        // Get LP token supply
        uint256 supply = ERC20Like(src).totalSupply();

        // This calculation should be overflow-resistant even for tokens with very high or very
        // low prices, as the dollar value of each reserve should lie in a fairly controlled range
        // regardless of the token prices.
        uint256 value0 = mul(p0, uint256(r0)) / UNIT_0;  // WAD
        uint256 value1 = mul(p1, uint256(r1)) / UNIT_1;  // WAD
        uint256 preq = mul(2 * WAD, sqrt(mul(value0, value1))) / supply;  // Will revert if supply == 0
        require(preq < 2 ** 128, "UNIV2LPOracle/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, "UNIV2LPOracle/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_, "UNIV2LPOracle/not-passed");
        }

        uint128 val = seek();
        require(val != 0, "UNIV2LPOracle/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, "UNIV2LPOracle/no-current-value");
        return (bytes32(uint256(cur.val)));
    }

    function kiss(address _a) external auth {
        require(_a != address(0), "UNIV2LPOracle/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), "UNIV2LPOracle/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

Contract ABI

[{"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"}]

6101006040526001805462ffff001916620e10001790553480156200002357600080fd5b5060405162001e6738038062001e67833981810160405260808110156200004957600080fd5b50805160208201516040830151606090930151919290916001600160a01b038416620000a75760405162461bcd60e51b815260040180806020018281038252602181526020018062001e466021913960400191505060405180910390fd5b6001600160a01b03821615801590620000c857506001600160a01b03811615155b620001055760405162461bcd60e51b815260040180806020018281038252602481526020018062001e226024913960400191505060405180910390fd5b3360008181526020819052604080822060019055517fdd0e34038ac38b2a1ce960229778ac48a8719bc900b6c4f8d0475c6e8b385a609190a2836001600160a01b03166080816001600160a01b031660601b815250508260a081815250506000846001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b1580156200019f57600080fd5b505afa158015620001b4573d6000803e3d6000fd5b505050506040513d6020811015620001cb57600080fd5b50516040805163313ce56760e01b815290516001600160a01b039092169163313ce56791600480820192602092909190829003018186803b1580156200021057600080fd5b505afa15801562000225573d6000803e3d6000fd5b505050506040513d60208110156200023c57600080fd5b505160ff16905060128111156200029a576040805162461bcd60e51b815260206004820152601e60248201527f554e4956324c504f7261636c652f746f6b656e302d6465632d67742d31380000604482015290519081900360640190fd5b80600a0a60c081815250506000856001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b158015620002e157600080fd5b505afa158015620002f6573d6000803e3d6000fd5b505050506040513d60208110156200030d57600080fd5b50516040805163313ce56760e01b815290516001600160a01b039092169163313ce56791600480820192602092909190829003018186803b1580156200035257600080fd5b505afa15801562000367573d6000803e3d6000fd5b505050506040513d60208110156200037e57600080fd5b505160ff1690506012811115620003dc576040805162461bcd60e51b815260206004820152601e60248201527f554e4956324c504f7261636c652f746f6b656e312d6465632d67742d31380000604482015290519081900360640190fd5b600a0a60e05250600580546001600160a01b039384166001600160a01b03199182161790915560068054929093169116179055505060805160601c60a05160c05160e0516119c962000459600039806116035250806115c3525080610b46525080610926528061126152806112d7528061153a52506119c96000f3fe608060405234801561001057600080fd5b50600436106101735760003560e01c806365c4ce7a116100de578063a7a1ed7211610097578063be9a655511610071578063be9a655514610447578063bf353dbb1461044f578063dca44f6f14610475578063f29c29c41461047d57610173565b8063a7a1ed72146103e8578063a9c52a3914610404578063b0b8579b1461042857610173565b806365c4ce7a1461034857806365fae35e1461036e5780636c2552f91461039457806375f12b211461039c5780639c52a7f1146103ba578063a4dff0a2146103e057610173565b806346d4577d1161013057806346d4577d1461025c5780634ca29923146102cc5780634fce7a2a146102e657806357de26a41461030c57806359e02dd71461031457806365af79091461031c57610173565b806307da68f5146101785780630e5a6c701461018257806318178358146101a35780631b25b65f146101ab5780632e7dc6af1461021b5780633a1cde751461023f575b600080fd5b6101806104a3565b005b61018a61053e565b6040805192835290151560208301528051918290030190f35b6101806105ae565b610180600480360360208110156101c157600080fd5b8101906020810181356401000000008111156101dc57600080fd5b8201836020820111156101ee57600080fd5b8035906020019184602083028401116401000000008311171561021057600080fd5b50909250905061079f565b610223610924565b604080516001600160a01b039092168252519081900360200190f35b6101806004803603602081101561025557600080fd5b5035610948565b6101806004803603602081101561027257600080fd5b81019060208101813564010000000081111561028d57600080fd5b82018360208201111561029f57600080fd5b803590602001918460208302840111640100000000831117156102c157600080fd5b509092509050610a3e565b6102d4610b44565b60408051918252519081900360200190f35b6102d4600480360360208110156102fc57600080fd5b50356001600160a01b0316610b68565b6102d4610b7a565b61018a610c40565b6101806004803603604081101561033257600080fd5b50803590602001356001600160a01b0316610cb0565b6101806004803603602081101561035e57600080fd5b50356001600160a01b0316610e3f565b6101806004803603602081101561038457600080fd5b50356001600160a01b0316610ee4565b610223610f7b565b6103a4610f8a565b6040805160ff9092168252519081900360200190f35b610180600480360360208110156103d057600080fd5b50356001600160a01b0316610f93565b6102d4611029565b6103f0611076565b604080519115158252519081900360200190f35b61040c61108f565b604080516001600160e81b039092168252519081900360200190f35b6104306110a5565b6040805161ffff9092168252519081900360200190f35b6101806110b4565b6102d46004803603602081101561046557600080fd5b50356001600160a01b031661113b565b61022361114d565b6101806004803603602081101561049357600080fd5b50356001600160a01b031661115c565b336000908152602081905260409020546001146104f5576040805162461bcd60e51b815260206004820152601c602482015260008051602061192a833981519152604482015290519081900360640190fd5b6001805460006003819055600481905560ff19909116821762ffffff169091556040517fbedf0f4abfe86d4ffad593d9607fe70e83ea706033d44d24b3b6283cf3fc4f6b9190a1565b33600090815260026020526040812054819060011461058e5760405162461bcd60e51b815260040180806020018281038252602681526020018061194a6026913960400191505060405180910390fd5b50506004546001600160801b0380821691600160801b9004166001149091565b600154600881901c61ffff169060ff81169060181c8115610616576040805162461bcd60e51b815260206004820152601860248201527f554e4956324c504f7261636c652f69732d73746f707065640000000000000000604482015290519081900360640190fd5b8042101561066b576040805162461bcd60e51b815260206004820152601860248201527f554e4956324c504f7261636c652f6e6f742d7061737365640000000000000000604482015290519081900360640190fd5b5050600061067761125d565b90506001600160801b0381166106d4576040805162461bcd60e51b815260206004820152601b60248201527f554e4956324c504f7261636c652f696e76616c69642d70726963650000000000604482015290519081900360640190fd5b6106dc6118ee565b50604080518082018252600480546001600160801b03808216808552600160801b80840483166020808801829052600380546fffffffffffffffffffffffffffffffff199081169095178616928402929092179091558751808901895289851680825260019183018290529390951683178416909117909455600888901b42890160181b01909255835185519116815291820152825191927f80a5d0081d7e9a7bdb15ef207c6e0772f0f56d24317693206c0e47408f2d0b7392918290030190a1005b336000908152602081905260409020546001146107f1576040805162461bcd60e51b815260206004820152601c602482015260008051602061192a833981519152604482015290519081900360640190fd5b60005b8181101561091f57600083838381811061080a57fe5b905060200201356001600160a01b03166001600160a01b03161415610876576040805162461bcd60e51b815260206004820152601b60248201527f554e4956324c504f7261636c652f6e6f2d636f6e74726163742d300000000000604482015290519081900360640190fd5b60016002600085858581811061088857fe5b905060200201356001600160a01b03166001600160a01b03166001600160a01b03168152602001908152602001600020819055507f6ffc0fabf0709270e42087e84a3bfc36041d3b281266d04ae1962185092fb2448383838181106108e957fe5b905060200201356001600160a01b031660405180826001600160a01b0316815260200191505060405180910390a16001016107f4565b505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b3360009081526020819052604090205460011461099a576040805162461bcd60e51b815260206004820152601c602482015260008051602061192a833981519152604482015290519081900360640190fd5b61ffff8111156109f1576040805162461bcd60e51b815260206004820152601960248201527f554e4956324c504f7261636c652f696e76616c69642d686f7000000000000000604482015290519081900360640190fd5b6001805462ffff00191661010061ffff8416021790556040805182815290517fd5cae49d972f01d170fb2d3409c5f318698639863c0403e59e4af06e0ce92817916020908290030190a150565b33600090815260208190526040902054600114610a90576040805162461bcd60e51b815260206004820152601c602482015260008051602061192a833981519152604482015290519081900360640190fd5b60005b8181101561091f57600060026000858585818110610aad57fe5b905060200201356001600160a01b03166001600160a01b03166001600160a01b03168152602001908152602001600020819055507f12fdafd291eb287a54e3416070923d22aa5072f5ee04c4fb8361615e7508a37c838383818110610b0e57fe5b905060200201356001600160a01b031660405180826001600160a01b0316815260200191505060405180910390a1600101610a93565b7f000000000000000000000000000000000000000000000000000000000000000081565b60026020526000908152604090205481565b33600090815260026020526040812054600114610bc85760405162461bcd60e51b815260040180806020018281038252602681526020018061194a6026913960400191505060405180910390fd5b600354600160801b90046001600160801b0316600114610c2f576040805162461bcd60e51b815260206004820152601e60248201527f554e4956324c504f7261636c652f6e6f2d63757272656e742d76616c75650000604482015290519081900360640190fd5b506003546001600160801b03165b90565b336000908152600260205260408120548190600114610c905760405162461bcd60e51b815260040180806020018281038252602681526020018061194a6026913960400191505060405180910390fd5b50506003546001600160801b0380821691600160801b9004166001149091565b33600090815260208190526040902054600114610d02576040805162461bcd60e51b815260206004820152601c602482015260008051602061192a833981519152604482015290519081900360640190fd5b6001600160a01b038116610d5d576040805162461bcd60e51b815260206004820152601b60248201527f554e4956324c504f7261636c652f6e6f2d636f6e74726163742d300000000000604482015290519081900360640190fd5b81610d8257600580546001600160a01b0319166001600160a01b038316179055610df8565b8160011415610dab57600680546001600160a01b0319166001600160a01b038316179055610df8565b6040805162461bcd60e51b815260206004820152601860248201527f554e4956324c504f7261636c652f696e76616c69642d69640000000000000000604482015290519081900360640190fd5b604080518381526001600160a01b038316602082015281517f57e1d18531e0ed6c4f60bf6039e5719aa115e43e43847525125856433a69f7a7929181900390910190a15050565b33600090815260208190526040902054600114610e91576040805162461bcd60e51b815260206004820152601c602482015260008051602061192a833981519152604482015290519081900360640190fd5b6001600160a01b038116600081815260026020908152604080832092909255815192835290517f12fdafd291eb287a54e3416070923d22aa5072f5ee04c4fb8361615e7508a37c9281900390910190a150565b33600090815260208190526040902054600114610f36576040805162461bcd60e51b815260206004820152601c602482015260008051602061192a833981519152604482015290519081900360640190fd5b6001600160a01b03811660008181526020819052604080822060019055517fdd0e34038ac38b2a1ce960229778ac48a8719bc900b6c4f8d0475c6e8b385a609190a250565b6005546001600160a01b031681565b60015460ff1681565b33600090815260208190526040902054600114610fe5576040805162461bcd60e51b815260206004820152601c602482015260008051602061192a833981519152604482015290519081900360640190fd5b6001600160a01b038116600081815260208190526040808220829055517f184450df2e323acec0ed3b5c7531b81f9b4cdef7914dfd4c0a4317416bb5251b9190a250565b600154600090630100000090046001600160e81b031661104b57506000610c3d565b60015461107190630100000081046001600160e81b031690610100900461ffff166116dc565b905090565b600154630100000090046001600160e81b031642101590565b600154630100000090046001600160e81b031681565b600154610100900461ffff1681565b33600090815260208190526040902054600114611106576040805162461bcd60e51b815260206004820152601c602482015260008051602061192a833981519152604482015290519081900360640190fd5b6001805460ff191690556040517f1b55ba3aa851a46be3b365aee5b5c140edd620d578922f3e8466d2cbd96f954b90600090a1565b60006020819052908152604090205481565b6006546001600160a01b031681565b336000908152602081905260409020546001146111ae576040805162461bcd60e51b815260206004820152601c602482015260008051602061192a833981519152604482015290519081900360640190fd5b6001600160a01b038116611209576040805162461bcd60e51b815260206004820152601b60248201527f554e4956324c504f7261636c652f6e6f2d636f6e74726163742d300000000000604482015290519081900360640190fd5b6001600160a01b03811660008181526002602090815260409182902060019055815192835290517f6ffc0fabf0709270e42087e84a3bfc36041d3b281266d04ae1962185092fb2449281900390910190a150565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156112ba57600080fd5b505af11580156112ce573d6000803e3d6000fd5b505050506000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561132e57600080fd5b505afa158015611342573d6000803e3d6000fd5b505050506040513d606081101561135857600080fd5b50805160209091015190925090506001600160701b0382161580159061138757506000816001600160701b0316115b6113d8576040805162461bcd60e51b815260206004820152601e60248201527f554e4956324c504f7261636c652f696e76616c69642d72657365727665730000604482015290519081900360640190fd5b600554604080516315f789a960e21b815290516000926001600160a01b0316916357de26a4916004808301926020929190829003018186803b15801561141d57600080fd5b505afa158015611431573d6000803e3d6000fd5b505050506040513d602081101561144757600080fd5b50519050806114875760405162461bcd60e51b81526004018080602001828103825260248152602001806119066024913960400191505060405180910390fd5b600654604080516315f789a960e21b815290516000926001600160a01b0316916357de26a4916004808301926020929190829003018186803b1580156114cc57600080fd5b505afa1580156114e0573d6000803e3d6000fd5b505050506040513d60208110156114f657600080fd5b50519050806115365760405162461bcd60e51b81526004018080602001828103825260248152602001806119706024913960400191505060405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561159157600080fd5b505afa1580156115a5573d6000803e3d6000fd5b505050506040513d60208110156115bb57600080fd5b5051905060007f00000000000000000000000000000000000000000000000000000000000000006115f5856001600160701b03891661173a565b816115fc57fe5b04905060007f000000000000000000000000000000000000000000000000000000000000000061163585886001600160701b031661173a565b8161163c57fe5b04905060008361166e671bc16d674ec8000061166061165b878761173a565b6117a6565b6001600160801b031661173a565b8161167557fe5b049050600160801b81106116d0576040805162461bcd60e51b815260206004820152601c60248201527f554e4956324c504f7261636c652f71756f74652d6f766572666c6f7700000000604482015290519081900360640190fd5b98975050505050505050565b80820382811115611734576040805162461bcd60e51b815260206004820152601b60248201527f554e4956324c504f7261636c652f7375622d756e646572666c6f770000000000604482015290519081900360640190fd5b92915050565b60008115806117555750508082028282828161175257fe5b04145b611734576040805162461bcd60e51b815260206004820152601a60248201527f554e4956324c504f7261636c652f6d756c2d6f766572666c6f77000000000000604482015290519081900360640190fd5b6000816117b5575060006118e9565b816001600160801b82106117ce5760809190911c9060401b5b6801000000000000000082106117e95760409190911c9060201b5b64010000000082106118005760209190911c9060101b5b6201000082106118155760109190911c9060081b5b61010082106118295760089190911c9060041b5b6010821061183c5760049190911c9060021b5b600882106118485760011b5b600181858161185357fe5b048201901c9050600181858161186557fe5b048201901c9050600181858161187757fe5b048201901c9050600181858161188957fe5b048201901c9050600181858161189b57fe5b048201901c905060018185816118ad57fe5b048201901c905060018185816118bf57fe5b048201901c905060008185816118d157fe5b0490508082106118e157806118e3565b815b93505050505b919050565b60408051808201909152600080825260208201529056fe554e4956324c504f7261636c652f696e76616c69642d6f7261636c652d302d7072696365554e4956324c504f7261636c652f6e6f742d617574686f72697a656400000000554e4956324c504f7261636c652f636f6e74726163742d6e6f742d77686974656c6973746564554e4956324c504f7261636c652f696e76616c69642d6f7261636c652d312d7072696365a26469706673582212206c71ea5b4a3564b81590e23af73a03746aee6212e2106a64806d6047deb00c0b64736f6c634300060c0033554e4956324c504f7261636c652f696e76616c69642d6f7261636c652d61646472657373554e4956324c504f7261636c652f696e76616c69642d7372632d61646472657373000000000000000000000000b4e16d0168e52d35cacd2c6185b44281ec28c9dc554e49563255534443455448000000000000000000000000000000000000000000000000000000000000000077b68899b99b686f415d074278a9a16b336085a000000000000000000000000064de91f5a373cd4c28de3600cb34c7c6ce410c85

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101735760003560e01c806365c4ce7a116100de578063a7a1ed7211610097578063be9a655511610071578063be9a655514610447578063bf353dbb1461044f578063dca44f6f14610475578063f29c29c41461047d57610173565b8063a7a1ed72146103e8578063a9c52a3914610404578063b0b8579b1461042857610173565b806365c4ce7a1461034857806365fae35e1461036e5780636c2552f91461039457806375f12b211461039c5780639c52a7f1146103ba578063a4dff0a2146103e057610173565b806346d4577d1161013057806346d4577d1461025c5780634ca29923146102cc5780634fce7a2a146102e657806357de26a41461030c57806359e02dd71461031457806365af79091461031c57610173565b806307da68f5146101785780630e5a6c701461018257806318178358146101a35780631b25b65f146101ab5780632e7dc6af1461021b5780633a1cde751461023f575b600080fd5b6101806104a3565b005b61018a61053e565b6040805192835290151560208301528051918290030190f35b6101806105ae565b610180600480360360208110156101c157600080fd5b8101906020810181356401000000008111156101dc57600080fd5b8201836020820111156101ee57600080fd5b8035906020019184602083028401116401000000008311171561021057600080fd5b50909250905061079f565b610223610924565b604080516001600160a01b039092168252519081900360200190f35b6101806004803603602081101561025557600080fd5b5035610948565b6101806004803603602081101561027257600080fd5b81019060208101813564010000000081111561028d57600080fd5b82018360208201111561029f57600080fd5b803590602001918460208302840111640100000000831117156102c157600080fd5b509092509050610a3e565b6102d4610b44565b60408051918252519081900360200190f35b6102d4600480360360208110156102fc57600080fd5b50356001600160a01b0316610b68565b6102d4610b7a565b61018a610c40565b6101806004803603604081101561033257600080fd5b50803590602001356001600160a01b0316610cb0565b6101806004803603602081101561035e57600080fd5b50356001600160a01b0316610e3f565b6101806004803603602081101561038457600080fd5b50356001600160a01b0316610ee4565b610223610f7b565b6103a4610f8a565b6040805160ff9092168252519081900360200190f35b610180600480360360208110156103d057600080fd5b50356001600160a01b0316610f93565b6102d4611029565b6103f0611076565b604080519115158252519081900360200190f35b61040c61108f565b604080516001600160e81b039092168252519081900360200190f35b6104306110a5565b6040805161ffff9092168252519081900360200190f35b6101806110b4565b6102d46004803603602081101561046557600080fd5b50356001600160a01b031661113b565b61022361114d565b6101806004803603602081101561049357600080fd5b50356001600160a01b031661115c565b336000908152602081905260409020546001146104f5576040805162461bcd60e51b815260206004820152601c602482015260008051602061192a833981519152604482015290519081900360640190fd5b6001805460006003819055600481905560ff19909116821762ffffff169091556040517fbedf0f4abfe86d4ffad593d9607fe70e83ea706033d44d24b3b6283cf3fc4f6b9190a1565b33600090815260026020526040812054819060011461058e5760405162461bcd60e51b815260040180806020018281038252602681526020018061194a6026913960400191505060405180910390fd5b50506004546001600160801b0380821691600160801b9004166001149091565b600154600881901c61ffff169060ff81169060181c8115610616576040805162461bcd60e51b815260206004820152601860248201527f554e4956324c504f7261636c652f69732d73746f707065640000000000000000604482015290519081900360640190fd5b8042101561066b576040805162461bcd60e51b815260206004820152601860248201527f554e4956324c504f7261636c652f6e6f742d7061737365640000000000000000604482015290519081900360640190fd5b5050600061067761125d565b90506001600160801b0381166106d4576040805162461bcd60e51b815260206004820152601b60248201527f554e4956324c504f7261636c652f696e76616c69642d70726963650000000000604482015290519081900360640190fd5b6106dc6118ee565b50604080518082018252600480546001600160801b03808216808552600160801b80840483166020808801829052600380546fffffffffffffffffffffffffffffffff199081169095178616928402929092179091558751808901895289851680825260019183018290529390951683178416909117909455600888901b42890160181b01909255835185519116815291820152825191927f80a5d0081d7e9a7bdb15ef207c6e0772f0f56d24317693206c0e47408f2d0b7392918290030190a1005b336000908152602081905260409020546001146107f1576040805162461bcd60e51b815260206004820152601c602482015260008051602061192a833981519152604482015290519081900360640190fd5b60005b8181101561091f57600083838381811061080a57fe5b905060200201356001600160a01b03166001600160a01b03161415610876576040805162461bcd60e51b815260206004820152601b60248201527f554e4956324c504f7261636c652f6e6f2d636f6e74726163742d300000000000604482015290519081900360640190fd5b60016002600085858581811061088857fe5b905060200201356001600160a01b03166001600160a01b03166001600160a01b03168152602001908152602001600020819055507f6ffc0fabf0709270e42087e84a3bfc36041d3b281266d04ae1962185092fb2448383838181106108e957fe5b905060200201356001600160a01b031660405180826001600160a01b0316815260200191505060405180910390a16001016107f4565b505050565b7f000000000000000000000000b4e16d0168e52d35cacd2c6185b44281ec28c9dc81565b3360009081526020819052604090205460011461099a576040805162461bcd60e51b815260206004820152601c602482015260008051602061192a833981519152604482015290519081900360640190fd5b61ffff8111156109f1576040805162461bcd60e51b815260206004820152601960248201527f554e4956324c504f7261636c652f696e76616c69642d686f7000000000000000604482015290519081900360640190fd5b6001805462ffff00191661010061ffff8416021790556040805182815290517fd5cae49d972f01d170fb2d3409c5f318698639863c0403e59e4af06e0ce92817916020908290030190a150565b33600090815260208190526040902054600114610a90576040805162461bcd60e51b815260206004820152601c602482015260008051602061192a833981519152604482015290519081900360640190fd5b60005b8181101561091f57600060026000858585818110610aad57fe5b905060200201356001600160a01b03166001600160a01b03166001600160a01b03168152602001908152602001600020819055507f12fdafd291eb287a54e3416070923d22aa5072f5ee04c4fb8361615e7508a37c838383818110610b0e57fe5b905060200201356001600160a01b031660405180826001600160a01b0316815260200191505060405180910390a1600101610a93565b7f554e49563255534443455448000000000000000000000000000000000000000081565b60026020526000908152604090205481565b33600090815260026020526040812054600114610bc85760405162461bcd60e51b815260040180806020018281038252602681526020018061194a6026913960400191505060405180910390fd5b600354600160801b90046001600160801b0316600114610c2f576040805162461bcd60e51b815260206004820152601e60248201527f554e4956324c504f7261636c652f6e6f2d63757272656e742d76616c75650000604482015290519081900360640190fd5b506003546001600160801b03165b90565b336000908152600260205260408120548190600114610c905760405162461bcd60e51b815260040180806020018281038252602681526020018061194a6026913960400191505060405180910390fd5b50506003546001600160801b0380821691600160801b9004166001149091565b33600090815260208190526040902054600114610d02576040805162461bcd60e51b815260206004820152601c602482015260008051602061192a833981519152604482015290519081900360640190fd5b6001600160a01b038116610d5d576040805162461bcd60e51b815260206004820152601b60248201527f554e4956324c504f7261636c652f6e6f2d636f6e74726163742d300000000000604482015290519081900360640190fd5b81610d8257600580546001600160a01b0319166001600160a01b038316179055610df8565b8160011415610dab57600680546001600160a01b0319166001600160a01b038316179055610df8565b6040805162461bcd60e51b815260206004820152601860248201527f554e4956324c504f7261636c652f696e76616c69642d69640000000000000000604482015290519081900360640190fd5b604080518381526001600160a01b038316602082015281517f57e1d18531e0ed6c4f60bf6039e5719aa115e43e43847525125856433a69f7a7929181900390910190a15050565b33600090815260208190526040902054600114610e91576040805162461bcd60e51b815260206004820152601c602482015260008051602061192a833981519152604482015290519081900360640190fd5b6001600160a01b038116600081815260026020908152604080832092909255815192835290517f12fdafd291eb287a54e3416070923d22aa5072f5ee04c4fb8361615e7508a37c9281900390910190a150565b33600090815260208190526040902054600114610f36576040805162461bcd60e51b815260206004820152601c602482015260008051602061192a833981519152604482015290519081900360640190fd5b6001600160a01b03811660008181526020819052604080822060019055517fdd0e34038ac38b2a1ce960229778ac48a8719bc900b6c4f8d0475c6e8b385a609190a250565b6005546001600160a01b031681565b60015460ff1681565b33600090815260208190526040902054600114610fe5576040805162461bcd60e51b815260206004820152601c602482015260008051602061192a833981519152604482015290519081900360640190fd5b6001600160a01b038116600081815260208190526040808220829055517f184450df2e323acec0ed3b5c7531b81f9b4cdef7914dfd4c0a4317416bb5251b9190a250565b600154600090630100000090046001600160e81b031661104b57506000610c3d565b60015461107190630100000081046001600160e81b031690610100900461ffff166116dc565b905090565b600154630100000090046001600160e81b031642101590565b600154630100000090046001600160e81b031681565b600154610100900461ffff1681565b33600090815260208190526040902054600114611106576040805162461bcd60e51b815260206004820152601c602482015260008051602061192a833981519152604482015290519081900360640190fd5b6001805460ff191690556040517f1b55ba3aa851a46be3b365aee5b5c140edd620d578922f3e8466d2cbd96f954b90600090a1565b60006020819052908152604090205481565b6006546001600160a01b031681565b336000908152602081905260409020546001146111ae576040805162461bcd60e51b815260206004820152601c602482015260008051602061192a833981519152604482015290519081900360640190fd5b6001600160a01b038116611209576040805162461bcd60e51b815260206004820152601b60248201527f554e4956324c504f7261636c652f6e6f2d636f6e74726163742d300000000000604482015290519081900360640190fd5b6001600160a01b03811660008181526002602090815260409182902060019055815192835290517f6ffc0fabf0709270e42087e84a3bfc36041d3b281266d04ae1962185092fb2449281900390910190a150565b60007f000000000000000000000000b4e16d0168e52d35cacd2c6185b44281ec28c9dc6001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156112ba57600080fd5b505af11580156112ce573d6000803e3d6000fd5b505050506000807f000000000000000000000000b4e16d0168e52d35cacd2c6185b44281ec28c9dc6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561132e57600080fd5b505afa158015611342573d6000803e3d6000fd5b505050506040513d606081101561135857600080fd5b50805160209091015190925090506001600160701b0382161580159061138757506000816001600160701b0316115b6113d8576040805162461bcd60e51b815260206004820152601e60248201527f554e4956324c504f7261636c652f696e76616c69642d72657365727665730000604482015290519081900360640190fd5b600554604080516315f789a960e21b815290516000926001600160a01b0316916357de26a4916004808301926020929190829003018186803b15801561141d57600080fd5b505afa158015611431573d6000803e3d6000fd5b505050506040513d602081101561144757600080fd5b50519050806114875760405162461bcd60e51b81526004018080602001828103825260248152602001806119066024913960400191505060405180910390fd5b600654604080516315f789a960e21b815290516000926001600160a01b0316916357de26a4916004808301926020929190829003018186803b1580156114cc57600080fd5b505afa1580156114e0573d6000803e3d6000fd5b505050506040513d60208110156114f657600080fd5b50519050806115365760405162461bcd60e51b81526004018080602001828103825260248152602001806119706024913960400191505060405180910390fd5b60007f000000000000000000000000b4e16d0168e52d35cacd2c6185b44281ec28c9dc6001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561159157600080fd5b505afa1580156115a5573d6000803e3d6000fd5b505050506040513d60208110156115bb57600080fd5b5051905060007f00000000000000000000000000000000000000000000000000000000000f42406115f5856001600160701b03891661173a565b816115fc57fe5b04905060007f0000000000000000000000000000000000000000000000000de0b6b3a764000061163585886001600160701b031661173a565b8161163c57fe5b04905060008361166e671bc16d674ec8000061166061165b878761173a565b6117a6565b6001600160801b031661173a565b8161167557fe5b049050600160801b81106116d0576040805162461bcd60e51b815260206004820152601c60248201527f554e4956324c504f7261636c652f71756f74652d6f766572666c6f7700000000604482015290519081900360640190fd5b98975050505050505050565b80820382811115611734576040805162461bcd60e51b815260206004820152601b60248201527f554e4956324c504f7261636c652f7375622d756e646572666c6f770000000000604482015290519081900360640190fd5b92915050565b60008115806117555750508082028282828161175257fe5b04145b611734576040805162461bcd60e51b815260206004820152601a60248201527f554e4956324c504f7261636c652f6d756c2d6f766572666c6f77000000000000604482015290519081900360640190fd5b6000816117b5575060006118e9565b816001600160801b82106117ce5760809190911c9060401b5b6801000000000000000082106117e95760409190911c9060201b5b64010000000082106118005760209190911c9060101b5b6201000082106118155760109190911c9060081b5b61010082106118295760089190911c9060041b5b6010821061183c5760049190911c9060021b5b600882106118485760011b5b600181858161185357fe5b048201901c9050600181858161186557fe5b048201901c9050600181858161187757fe5b048201901c9050600181858161188957fe5b048201901c9050600181858161189b57fe5b048201901c905060018185816118ad57fe5b048201901c905060018185816118bf57fe5b048201901c905060008185816118d157fe5b0490508082106118e157806118e3565b815b93505050505b919050565b60408051808201909152600080825260208201529056fe554e4956324c504f7261636c652f696e76616c69642d6f7261636c652d302d7072696365554e4956324c504f7261636c652f6e6f742d617574686f72697a656400000000554e4956324c504f7261636c652f636f6e74726163742d6e6f742d77686974656c6973746564554e4956324c504f7261636c652f696e76616c69642d6f7261636c652d312d7072696365a26469706673582212206c71ea5b4a3564b81590e23af73a03746aee6212e2106a64806d6047deb00c0b64736f6c634300060c0033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000b4e16d0168e52d35cacd2c6185b44281ec28c9dc554e49563255534443455448000000000000000000000000000000000000000000000000000000000000000077b68899b99b686f415d074278a9a16b336085a000000000000000000000000064de91f5a373cd4c28de3600cb34c7c6ce410c85

-----Decoded View---------------
Arg [0] : _src (address): 0xB4e16d0168e52d35CaCD2c6185b44281Ec28C9Dc
Arg [1] : _wat (bytes32): 0x554e495632555344434554480000000000000000000000000000000000000000
Arg [2] : _orb0 (address): 0x77b68899b99b686F415d074278a9a16b336085A0
Arg [3] : _orb1 (address): 0x64DE91F5A373Cd4c28de3600cB34C7C6cE410C85

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 000000000000000000000000b4e16d0168e52d35cacd2c6185b44281ec28c9dc
Arg [1] : 554e495632555344434554480000000000000000000000000000000000000000
Arg [2] : 00000000000000000000000077b68899b99b686f415d074278a9a16b336085a0
Arg [3] : 00000000000000000000000064de91f5a373cd4c28de3600cb34c7c6ce410c85


Deployed Bytecode Sourcemap

4651:10552:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9254:142;;;:::i;:::-;;14174:125;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;11748:2285;;;:::i;14656:254::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14656:254:0;;-1:-1:-1;14656:254:0;-1:-1:-1;14656:254:0;:::i;5141:28::-;;;:::i;:::-;;;;-1:-1:-1;;;;;5141:28:0;;;;;;;;;;;;;;9496:172;;;;;;;;;;;;;;;;-1:-1:-1;9496:172:0;;:::i;15020:180::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15020:180:0;;-1:-1:-1;15020:180:0;-1:-1:-1;15020:180:0;:::i;5552:28::-;;;:::i;:::-;;;;;;;;;;;;;;;;5667:39;;;;;;;;;;;;;;;;-1:-1:-1;5667:39:0;-1:-1:-1;;;;;5667:39:0;;:::i;14307:172::-;;;:::i;14041:125::-;;;:::i;9676:349::-;;;;;;;;;;;;;;;;-1:-1:-1;9676:349:0;;;;;;-1:-1:-1;;;;;9676:349:0;;:::i;14918:94::-;;;;;;;;;;;;;;;;-1:-1:-1;14918:94:0;-1:-1:-1;;;;;14918:94:0;;:::i;4824:79::-;;;;;;;;;;;;;;;;-1:-1:-1;4824:79:0;-1:-1:-1;;;;;4824:79:0;;:::i;6274:30::-;;;:::i;5328:22::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;4923:79;;;;;;;;;;;;;;;;-1:-1:-1;4923:79:0;-1:-1:-1;;;;;4923:79:0;;:::i;10077:147::-;;;:::i;10232:93::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;5475:18;;;:::i;:::-;;;;-1:-1:-1;;;;;5475:18:0;;;;;;;;;;;;;;5397:28;;;:::i;:::-;;;;;;;;;;;;;;;;;;;9404:84;;;:::i;4704:41::-;;;;;;;;;;;;;;;;-1:-1:-1;4704:41:0;-1:-1:-1;;;;;4704:41:0;;:::i;6355:30::-;;;:::i;14487:161::-;;;;;;;;;;;;;;;;-1:-1:-1;14487:161:0;-1:-1:-1;;;;;14487:161:0;;:::i;9254:142::-;5064:10;5058:5;:17;;;;;;;;;;;5079:1;5058:22;5050:63;;;;;-1:-1:-1;;;5050:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;5050:63:0;;;;;;;;;;;;;;;9305:1:::1;9295:11:::0;;:7:::1;9324:3;9317:10:::0;;;9345:3:::1;9338:10:::0;;;-1:-1:-1;;9295:11:0;;::::1;::::0;::::1;9359:7:::0;::::1;::::0;;;9382:6:::1;::::0;::::1;::::0;9295:7;9382:6:::1;9254:142::o:0;14174:125::-;5741:10;14218:7;5737:15;;;:3;:15;;;;;;14218:7;;5756:1;5737:20;5729:71;;;;-1:-1:-1;;;5729:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;14267:3:0::1;:7:::0;-1:-1:-1;;;;;14267:7:0;;::::1;::::0;-1:-1:-1;;;14278:7:0;;::::1;;-1:-1:-1::0;14278:12:0::1;::::0;14174:125::o;11748:2285::-;12083:1;12077:8;12181:1;12177:13;;;12192:6;12173:26;;12135:4;12116:26;;;12234:2;12230:14;12398:13;;12390:50;;;;;-1:-1:-1;;;12390:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;12721:4;12702:15;:23;;12694:60;;;;;-1:-1:-1;;;12694:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;11748:2285;;12778:11;12792:6;:4;:6::i;:::-;12778:20;-1:-1:-1;;;;;;12817:8:0;;12809:48;;;;;-1:-1:-1;;;12809:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;12868:16;;:::i;:::-;-1:-1:-1;12868:22:0;;;;;;;;12887:3;12868:22;;-1:-1:-1;;;;;12868:22:0;;;;;;-1:-1:-1;;;12868:22:0;;;;;;;;;;;;12955:3;:10;;-1:-1:-1;;12955:10:0;;;;;;;;;;;;;;;;;;12982:12;;;;;;;;;;;;;-1:-1:-1;12982:12:0;;;;;;12976:18;;;;;;;;;;;;;;13715:1;13711:12;;;13616:11;13612:22;;13608:2;13604:31;13526:216;13481:276;;;13876:8;;13870:20;;;;;;;;;;;;12868:22;;13870:20;;;;;;;;;14009:6;14656:254;5064:10;5058:5;:17;;;;;;;;;;;5079:1;5058:22;5050:63;;;;;-1:-1:-1;;;5050:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;5050:63:0;;;;;;;;;;;;;;;14722:9:::1;14718:185;14737:13:::0;;::::1;14718:185;;;14797:1;14780:2:::0;;14783:1;14780:5;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;14780:5:0::1;-1:-1:-1::0;;;;;14780:19:0::1;;;14772:59;;;::::0;;-1:-1:-1;;;14772:59:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;14859:1;14846:3;:10;14850:2;;14853:1;14850:5;;;;;;;;::::0;;::::1;::::0;;;::::1;;-1:-1:-1::0;;;;;14850:5:0::1;14846:10:::0;;-1:-1:-1;14846:10:0;::::1;::::0;;;;;;-1:-1:-1;14846:10:0;:14;14880:11:::1;14885:2:::0;;14888:1;14885:5;;::::1;;;;;14880:11;::::0;;14885:5:::1;::::0;;::::1;::::0;;;::::1;;-1:-1:-1::0;;;;;14885:5:0::1;14880:11:::0;;;;;;;;;;-1:-1:-1;14880:11:0::1;14752:3;;14718:185;;;;14656:254:::0;;:::o;5141:28::-;;;:::o;9496:172::-;5064:10;5058:5;:17;;;;;;;;;;;5079:1;5058:22;5050:63;;;;;-1:-1:-1;;;5050:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;5050:63:0;;;;;;;;;;;;;;;9557:18:::1;::::0;::::1;;9549:56;;;::::0;;-1:-1:-1;;;9549:56:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;9616:3;:18:::0;;-1:-1:-1;;9616:18:0::1;;;::::0;::::1;;;::::0;;9650:10:::1;::::0;;;;;;;::::1;::::0;::::1;::::0;;;;;;::::1;9496:172:::0;:::o;15020:180::-;5064:10;5058:5;:17;;;;;;;;;;;5079:1;5058:22;5050:63;;;;;-1:-1:-1;;;5050:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;5050:63:0;;;;;;;;;;;;;;;15086:9:::1;15082:111;15101:13:::0;;::::1;15082:111;;;15149:1;15136:3;:10;15140:2;;15143:1;15140:5;;;;;;;;::::0;;::::1;::::0;;;::::1;;-1:-1:-1::0;;;;;15140:5:0::1;15136:10:::0;;-1:-1:-1;15136:10:0;::::1;::::0;;;;;;-1:-1:-1;15136:10:0;:14;15170:11:::1;15175:2:::0;;15178:1;15175:5;;::::1;;;;;15170:11;::::0;;15175:5:::1;::::0;;::::1;::::0;;;::::1;;-1:-1:-1::0;;;;;15175:5:0::1;15170:11:::0;;;;;;;;;;-1:-1:-1;15170:11:0::1;15116:3;;15082:111;;5552:28:::0;;;:::o;5667:39::-;;;;;;;;;;;;;:::o;14307:172::-;5741:10;14351:7;5737:15;;;:3;:15;;;;;;5756:1;5737:20;5729:71;;;;-1:-1:-1;;;5729:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14379:3:::1;:7:::0;-1:-1:-1;;;;;;;;14379:7:0;;::::1;;-1:-1:-1::0;14379:12:0::1;14371:55;;;::::0;;-1:-1:-1;;;14371:55:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;14461:3:0::1;:7:::0;-1:-1:-1;;;;;14461:7:0::1;5802:1;14307:172:::0;:::o;14041:125::-;5741:10;14085:7;5737:15;;;:3;:15;;;;;;14085:7;;5756:1;5737:20;5729:71;;;;-1:-1:-1;;;5729:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;14134:3:0::1;:7:::0;-1:-1:-1;;;;;14134:7:0;;::::1;::::0;-1:-1:-1;;;14145:7:0;;::::1;;-1:-1:-1::0;14145:12:0::1;::::0;14041:125::o;9676:349::-;5064:10;5058:5;:17;;;;;;;;;;;5079:1;5058:22;5050:63;;;;;-1:-1:-1;;;5050:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;5050:63:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;9750:18:0;::::1;9742:58;;;::::0;;-1:-1:-1;;;9742:58:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;9814:8:::0;9811:176:::1;;9839:4;:11:::0;;-1:-1:-1;;;;;;9839:11:0::1;-1:-1:-1::0;;;;;9839:11:0;::::1;;::::0;;9811:176:::1;;;9872:3;9879:1;9872:8;9868:119;;;9897:4;:11:::0;;-1:-1:-1;;;;;;9897:11:0::1;-1:-1:-1::0;;;;;9897:11:0;::::1;;::::0;;9868:119:::1;;;9941:34;::::0;;-1:-1:-1;;;9941:34:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;9868:119;10002:15;::::0;;;;;-1:-1:-1;;;;;10002:15:0;::::1;;::::0;::::1;::::0;;;::::1;::::0;;;;;;;;;::::1;9676:349:::0;;:::o;14918:94::-;5064:10;5058:5;:17;;;;;;;;;;;5079:1;5058:22;5050:63;;;;;-1:-1:-1;;;5050:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;5050:63:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;14969:7:0;::::1;14979:1;14969:7:::0;;;:3:::1;:7;::::0;;;;;;;:11;;;;14996:8;;;;;;;::::1;::::0;;;;;;;;::::1;14918:94:::0;:::o;4824:79::-;5064:10;5058:5;:17;;;;;;;;;;;5079:1;5058:22;5050:63;;;;;-1:-1:-1;;;5050:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;5050:63:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;4868:11:0;::::1;:5;:11:::0;;;::::1;::::0;;;;;;;-1:-1:-1;4868:15:0;;4890:10;::::1;::::0;4868:5;4890:10:::1;4824:79:::0;:::o;6274:30::-;;;-1:-1:-1;;;;;6274:30:0;;:::o;5328:22::-;;;;;;:::o;4923:79::-;5064:10;5058:5;:17;;;;;;;;;;;5079:1;5058:22;5050:63;;;;;-1:-1:-1;;;5050:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;5050:63:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;4967:11:0;::::1;4981:1;4967:11:::0;;;::::1;::::0;;;;;;;:15;;;4989:10;::::1;::::0;4981:1;4989:10:::1;4923:79:::0;:::o;10077:147::-;10139:3;;10115:7;;10139:3;;;-1:-1:-1;;;;;10139:3:0;10135:22;;-1:-1:-1;10156:1:0;10149:8;;10135:22;10207:3;;10203:13;;10207:3;;;-1:-1:-1;;;;;10207:3:0;;;10212;;;;10203;:13::i;:::-;10196:20;;10077:147;:::o;10232:93::-;10314:3;;;;;-1:-1:-1;;;;;10314:3:0;10295:15;:22;;;10232:93::o;5475:18::-;;;;;;-1:-1:-1;;;;;5475:18:0;;:::o;5397:28::-;;;;;;;;;:::o;9404:84::-;5064:10;5058:5;:17;;;;;;;;;;;5079:1;5058:22;5050:63;;;;;-1:-1:-1;;;5050:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;5050:63:0;;;;;;;;;;;;;;;9446:7:::1;:11:::0;;-1:-1:-1;;9446:11:0::1;::::0;;9473:7:::1;::::0;::::1;::::0;-1:-1:-1;;9473:7:0::1;9404:84::o:0;4704:41::-;;;;;;;;;;;;;;:::o;6355:30::-;;;-1:-1:-1;;;;;6355:30:0;;:::o;14487:161::-;5064:10;5058:5;:17;;;;;;;;;;;5079:1;5058:22;5050:63;;;;;-1:-1:-1;;;5050:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;5050:63:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;14546:16:0;::::1;14538:56;;;::::0;;-1:-1:-1;;;14538:56:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;14605:7:0;::::1;;::::0;;;:3:::1;:7;::::0;;;;;;;;-1:-1:-1;14605:11:0;;14632:8;;;;;;;::::1;::::0;;;;;;;;::::1;14487:161:::0;:::o;10333:1407::-;10367:13;10466:3;-1:-1:-1;;;;;10448:27:0;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10542:10;10554;10587:3;-1:-1:-1;;;;;10569:34:0;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10569:36:0;;;;;;;;;-1:-1:-1;10569:36:0;-1:-1:-1;;;;;;10624:6:0;;;;;;:16;;-1:-1:-1;;;;;;10634:6:0;;;;10624:16;10616:59;;;;;-1:-1:-1;;;10616:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;10782:4;;10771:23;;;-1:-1:-1;;;10771:23:0;;;;10758:10;;-1:-1:-1;;;;;10782:4:0;;10771:21;;:23;;;;;;;;;;;;;;10782:4;10771:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10771:23:0;;-1:-1:-1;10854:7:0;10846:56;;;;-1:-1:-1;;;10846:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10937:4;;10926:23;;;-1:-1:-1;;;10926:23:0;;;;10913:10;;-1:-1:-1;;;;;10937:4:0;;10926:21;;:23;;;;;;;;;;;;;;10937:4;10926:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10926:23:0;;-1:-1:-1;11009:7:0;11001:56;;;;-1:-1:-1;;;11001:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11102:14;11129:3;-1:-1:-1;;;;;11119:26:0;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11119:28:0;;-1:-1:-1;11401:14:0;11441:6;11418:20;11422:2;-1:-1:-1;;;;;11426:11:0;;11418:3;:20::i;:::-;:29;;;;;;;-1:-1:-1;11466:14:0;11506:6;11483:20;11487:2;-1:-1:-1;;;;;11491:11:0;;11483:3;:20::i;:::-;:29;;;;;;;-1:-1:-1;11531:12:0;11588:6;11546:39;11550:7;11559:25;11564:19;11568:6;11483:29;11564:3;:19::i;:::-;11559:4;:25::i;:::-;-1:-1:-1;;;;;11546:39:0;:3;:39::i;:::-;:48;;;;;;;-1:-1:-1;;;;11644:15:0;;11636:56;;;;;-1:-1:-1;;;11636:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;11719:4;10333:1407;-1:-1:-1;;;;;;;;10333:1407:0:o;6653:149::-;6748:7;;;6743:19;;;;6735:59;;;;;-1:-1:-1;;;6735:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;6653:149;;;;:::o;6808:164::-;6868:9;6898:7;;;:35;;-1:-1:-1;;6914:7:0;;;6931:2;6925;6914:7;6925:2;6909:18;;;;;:24;6898:35;6890:74;;;;;-1:-1:-1;;;6890:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;7121:971;7170:7;7194;7190:895;;-1:-1:-1;7210:1:0;7203:8;;7190:895;7255:2;7284:1;-1:-1:-1;;;7304:41:0;;7300:72;;7356:3;7349:10;;;;;7367:2;7361:8;7300:72;7396:19;7390:2;:25;7386:55;;7426:2;7419:9;;;;;7436:2;7430:8;7386:55;7465:11;7459:2;:17;7455:47;;7487:2;7480:9;;;;;7497:2;7491:8;7455:47;7526:7;7520:2;:13;7516:42;;7544:2;7537:9;;;;;7554:1;7548:7;7516:42;7582:5;7576:2;:11;7572:39;;7598:1;7591:8;;;;;7607:1;7601:7;7572:39;7635:4;7629:2;:10;7625:38;;7650:1;7643:8;;;;;7659:1;7653:7;7625:38;7687:3;7681:2;:9;7677:27;;7700:1;7694:7;7677:27;7738:1;7732;7727:2;:6;;;;;;7723:1;:10;7722:17;;7718:21;;7774:1;7768;7763:2;:6;;;;;;7759:1;:10;7758:17;;7754:21;;7810:1;7804;7799:2;:6;;;;;;7795:1;:10;7794:17;;7790:21;;7846:1;7840;7835:2;:6;;;;;;7831:1;:10;7830:17;;7826:21;;7882:1;7876;7871:2;:6;;;;;;7867:1;:10;7866:17;;7862:21;;7918:1;7912;7907:2;:6;;;;;;7903:1;:10;7902:17;;7898:21;;7954:1;7948;7943:2;:6;;;;;;7939:1;:10;7938:17;;7934:21;;8007:10;8025:1;8020:2;:6;;;;;;8007:19;;8061:2;8057:1;:6;:15;;8070:2;8057:15;;;8066:1;8057:15;8041:32;;;;;7190:895;7121:971;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;:::o

Swarm Source

ipfs://6c71ea5b4a3564b81590e23af73a03746aee6212e2106a64806d6047deb00c0b

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
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.