Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
WhitelistStore
Compiler Version
v0.7.0+commit.9e61f92b
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2020-11-08
*/
// SPDX-License-Identifier: Apache-2.0
pragma solidity ^0.7.0;
// File: contracts/iface/Wallet.sol
// Copyright 2017 Loopring Technology Limited.
/// @title Wallet
/// @dev Base contract for smart wallets.
/// Sub-contracts must NOT use non-default constructor to initialize
/// wallet states, instead, `init` shall be used. This is to enable
/// proxies to be deployed in front of the real wallet contract for
/// saving gas.
///
/// @author Daniel Wang - <daniel@loopring.org>
interface Wallet
{
function version() external pure returns (string memory);
function owner() external view returns (address);
/// @dev Set a new owner.
function setOwner(address newOwner) external;
/// @dev Adds a new module. The `init` method of the module
/// will be called with `address(this)` as the parameter.
/// This method must throw if the module has already been added.
/// @param _module The module's address.
function addModule(address _module) external;
/// @dev Removes an existing module. This method must throw if the module
/// has NOT been added or the module is the wallet's only module.
/// @param _module The module's address.
function removeModule(address _module) external;
/// @dev Checks if a module has been added to this wallet.
/// @param _module The module to check.
/// @return True if the module exists; False otherwise.
function hasModule(address _module) external view returns (bool);
/// @dev Binds a method from the given module to this
/// wallet so the method can be invoked using this wallet's default
/// function.
/// Note that this method must throw when the given module has
/// not been added to this wallet.
/// @param _method The method's 4-byte selector.
/// @param _module The module's address. Use address(0) to unbind the method.
function bindMethod(bytes4 _method, address _module) external;
/// @dev Returns the module the given method has been bound to.
/// @param _method The method's 4-byte selector.
/// @return _module The address of the bound module. If no binding exists,
/// returns address(0) instead.
function boundMethodModule(bytes4 _method) external view returns (address _module);
/// @dev Performs generic transactions. Any module that has been added to this
/// wallet can use this method to transact on any third-party contract with
/// msg.sender as this wallet itself.
///
/// Note: 1) this method must ONLY allow invocations from a module that has
/// been added to this wallet. The wallet owner shall NOT be permitted
/// to call this method directly. 2) Reentrancy inside this function should
/// NOT cause any problems.
///
/// @param mode The transaction mode, 1 for CALL, 2 for DELEGATECALL.
/// @param to The desitination address.
/// @param value The amount of Ether to transfer.
/// @param data The data to send over using `to.call{value: value}(data)`
/// @return returnData The transaction's return value.
function transact(
uint8 mode,
address to,
uint value,
bytes calldata data
)
external
returns (bytes memory returnData);
}
// File: contracts/base/DataStore.sol
// Copyright 2017 Loopring Technology Limited.
/// @title DataStore
/// @dev Modules share states by accessing the same storage instance.
/// Using ModuleStorage will achieve better module decoupling.
///
/// @author Daniel Wang - <daniel@loopring.org>
abstract contract DataStore
{
modifier onlyWalletModule(address wallet)
{
requireWalletModule(wallet);
_;
}
function requireWalletModule(address wallet) view internal
{
require(Wallet(wallet).hasModule(msg.sender), "UNAUTHORIZED");
}
}
// File: contracts/lib/AddressSet.sol
// Copyright 2017 Loopring Technology Limited.
/// @title AddressSet
/// @author Daniel Wang - <daniel@loopring.org>
contract AddressSet
{
struct Set
{
address[] addresses;
mapping (address => uint) positions;
uint count;
}
mapping (bytes32 => Set) private sets;
function addAddressToSet(
bytes32 key,
address addr,
bool maintainList
) internal
{
Set storage set = sets[key];
require(set.positions[addr] == 0, "ALREADY_IN_SET");
if (maintainList) {
require(set.addresses.length == set.count, "PREVIOUSLY_NOT_MAINTAILED");
set.addresses.push(addr);
} else {
require(set.addresses.length == 0, "MUST_MAINTAIN");
}
set.count += 1;
set.positions[addr] = set.count;
}
function removeAddressFromSet(
bytes32 key,
address addr
)
internal
{
Set storage set = sets[key];
uint pos = set.positions[addr];
require(pos != 0, "NOT_IN_SET");
delete set.positions[addr];
set.count -= 1;
if (set.addresses.length > 0) {
address lastAddr = set.addresses[set.count];
if (lastAddr != addr) {
set.addresses[pos - 1] = lastAddr;
set.positions[lastAddr] = pos;
}
set.addresses.pop();
}
}
function removeSet(bytes32 key)
internal
{
delete sets[key];
}
function isAddressInSet(
bytes32 key,
address addr
)
internal
view
returns (bool)
{
return sets[key].positions[addr] != 0;
}
function numAddressesInSet(bytes32 key)
internal
view
returns (uint)
{
Set storage set = sets[key];
return set.count;
}
function addressesInSet(bytes32 key)
internal
view
returns (address[] memory)
{
Set storage set = sets[key];
require(set.count == set.addresses.length, "NOT_MAINTAINED");
return sets[key].addresses;
}
}
// File: contracts/lib/Ownable.sol
// Copyright 2017 Loopring Technology Limited.
/// @title Ownable
/// @author Brecht Devos - <brecht@loopring.org>
/// @dev The Ownable contract has an owner address, and provides basic
/// authorization control functions, this simplifies the implementation of
/// "user permissions".
contract Ownable
{
address public owner;
event OwnershipTransferred(
address indexed previousOwner,
address indexed newOwner
);
/// @dev The Ownable constructor sets the original `owner` of the contract
/// to the sender.
constructor()
{
owner = msg.sender;
}
/// @dev Throws if called by any account other than the owner.
modifier onlyOwner()
{
require(msg.sender == owner, "UNAUTHORIZED");
_;
}
/// @dev Allows the current owner to transfer control of the contract to a
/// new owner.
/// @param newOwner The address to transfer ownership to.
function transferOwnership(
address newOwner
)
public
virtual
onlyOwner
{
require(newOwner != address(0), "ZERO_ADDRESS");
emit OwnershipTransferred(owner, newOwner);
owner = newOwner;
}
function renounceOwnership()
public
onlyOwner
{
emit OwnershipTransferred(owner, address(0));
owner = address(0);
}
}
// File: contracts/lib/Claimable.sol
// Copyright 2017 Loopring Technology Limited.
/// @title Claimable
/// @author Brecht Devos - <brecht@loopring.org>
/// @dev Extension for the Ownable contract, where the ownership needs
/// to be claimed. This allows the new owner to accept the transfer.
contract Claimable is Ownable
{
address public pendingOwner;
/// @dev Modifier throws if called by any account other than the pendingOwner.
modifier onlyPendingOwner() {
require(msg.sender == pendingOwner, "UNAUTHORIZED");
_;
}
/// @dev Allows the current owner to set the pendingOwner address.
/// @param newOwner The address to transfer ownership to.
function transferOwnership(
address newOwner
)
public
override
onlyOwner
{
require(newOwner != address(0) && newOwner != owner, "INVALID_ADDRESS");
pendingOwner = newOwner;
}
/// @dev Allows the pendingOwner address to finalize the transfer.
function claimOwnership()
public
onlyPendingOwner
{
emit OwnershipTransferred(owner, pendingOwner);
owner = pendingOwner;
pendingOwner = address(0);
}
}
// File: contracts/lib/OwnerManagable.sol
// Copyright 2017 Loopring Technology Limited.
contract OwnerManagable is Claimable, AddressSet
{
bytes32 internal constant MANAGER = keccak256("__MANAGED__");
event ManagerAdded (address indexed manager);
event ManagerRemoved(address indexed manager);
modifier onlyManager
{
require(isManager(msg.sender), "NOT_MANAGER");
_;
}
modifier onlyOwnerOrManager
{
require(msg.sender == owner || isManager(msg.sender), "NOT_OWNER_OR_MANAGER");
_;
}
constructor() Claimable() {}
/// @dev Gets the managers.
/// @return The list of managers.
function managers()
public
view
returns (address[] memory)
{
return addressesInSet(MANAGER);
}
/// @dev Gets the number of managers.
/// @return The numer of managers.
function numManagers()
public
view
returns (uint)
{
return numAddressesInSet(MANAGER);
}
/// @dev Checks if an address is a manger.
/// @param addr The address to check.
/// @return True if the address is a manager, False otherwise.
function isManager(address addr)
public
view
returns (bool)
{
return isAddressInSet(MANAGER, addr);
}
/// @dev Adds a new manager.
/// @param manager The new address to add.
function addManager(address manager)
public
onlyOwner
{
addManagerInternal(manager);
}
/// @dev Removes a manager.
/// @param manager The manager to remove.
function removeManager(address manager)
public
onlyOwner
{
removeAddressFromSet(MANAGER, manager);
emit ManagerRemoved(manager);
}
function addManagerInternal(address manager)
internal
{
addAddressToSet(MANAGER, manager, true);
emit ManagerAdded(manager);
}
}
// File: contracts/stores/WhitelistStore.sol
// Copyright 2017 Loopring Technology Limited.
/// @title WhitelistStore
/// @dev This store maintains a wallet's whitelisted addresses.
contract WhitelistStore is DataStore, AddressSet, OwnerManagable
{
bytes32 internal constant DAPPS = keccak256("__DAPPS__");
// wallet => whitelisted_addr => effective_since
mapping(address => mapping(address => uint)) public effectiveTimeMap;
event Whitelisted(
address wallet,
address addr,
bool whitelisted,
uint effectiveTime
);
event DappWhitelisted(
address addr,
bool whitelisted
);
constructor() DataStore() {}
function addToWhitelist(
address wallet,
address addr,
uint effectiveTime
)
external
onlyWalletModule(wallet)
{
addAddressToSet(_walletKey(wallet), addr, true);
uint effective = effectiveTime >= block.timestamp ? effectiveTime : block.timestamp;
effectiveTimeMap[wallet][addr] = effective;
emit Whitelisted(wallet, addr, true, effective);
}
function removeFromWhitelist(
address wallet,
address addr
)
external
onlyWalletModule(wallet)
{
removeAddressFromSet(_walletKey(wallet), addr);
delete effectiveTimeMap[wallet][addr];
emit Whitelisted(wallet, addr, false, 0);
}
function addDapp(address addr)
external
onlyManager
{
addAddressToSet(DAPPS, addr, true);
emit DappWhitelisted(addr, true);
}
function removeDapp(address addr)
external
onlyManager
{
removeAddressFromSet(DAPPS, addr);
emit DappWhitelisted(addr, false);
}
function whitelist(address wallet)
public
view
returns (
address[] memory addresses,
uint[] memory effectiveTimes
)
{
addresses = addressesInSet(_walletKey(wallet));
effectiveTimes = new uint[](addresses.length);
for (uint i = 0; i < addresses.length; i++) {
effectiveTimes[i] = effectiveTimeMap[wallet][addresses[i]];
}
}
function isWhitelisted(
address wallet,
address addr
)
public
view
returns (
bool isWhitelistedAndEffective,
uint effectiveTime
)
{
effectiveTime = effectiveTimeMap[wallet][addr];
isWhitelistedAndEffective = effectiveTime > 0 && effectiveTime <= block.timestamp;
}
function whitelistSize(address wallet)
public
view
returns (uint)
{
return numAddressesInSet(_walletKey(wallet));
}
function dapps()
public
view
returns (
address[] memory addresses
)
{
return addressesInSet(DAPPS);
}
function isDapp(
address addr
)
public
view
returns (bool)
{
return isAddressInSet(DAPPS, addr);
}
function numDapps()
public
view
returns (uint)
{
return numAddressesInSet(DAPPS);
}
function isDappOrWhitelisted(
address wallet,
address addr
)
public
view
returns (bool res)
{
(res,) = isWhitelisted(wallet, addr);
return res || isAddressInSet(DAPPS, addr);
}
function _walletKey(address addr)
private
pure
returns (bytes32)
{
return keccak256(abi.encodePacked("__WHITELIST__", addr));
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"addr","type":"address"},{"indexed":false,"internalType":"bool","name":"whitelisted","type":"bool"}],"name":"DappWhitelisted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"manager","type":"address"}],"name":"ManagerAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"manager","type":"address"}],"name":"ManagerRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"wallet","type":"address"},{"indexed":false,"internalType":"address","name":"addr","type":"address"},{"indexed":false,"internalType":"bool","name":"whitelisted","type":"bool"},{"indexed":false,"internalType":"uint256","name":"effectiveTime","type":"uint256"}],"name":"Whitelisted","type":"event"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"addDapp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"manager","type":"address"}],"name":"addManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"},{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint256","name":"effectiveTime","type":"uint256"}],"name":"addToWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dapps","outputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"effectiveTimeMap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"isDapp","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"},{"internalType":"address","name":"addr","type":"address"}],"name":"isDappOrWhitelisted","outputs":[{"internalType":"bool","name":"res","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"isManager","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"},{"internalType":"address","name":"addr","type":"address"}],"name":"isWhitelisted","outputs":[{"internalType":"bool","name":"isWhitelistedAndEffective","type":"bool"},{"internalType":"uint256","name":"effectiveTime","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"managers","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numDapps","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numManagers","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"removeDapp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"},{"internalType":"address","name":"addr","type":"address"}],"name":"removeFromWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"manager","type":"address"}],"name":"removeManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"whitelist","outputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256[]","name":"effectiveTimes","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"whitelistSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]Contract Creation Code
608060405234801561001057600080fd5b50600080546001600160a01b03191633179055611914806100326000396000f3fe608060405234801561001057600080fd5b50600436106101825760003560e01c8063b6b35272116100d8578063e52c35581161008c578063f3ae241511610066578063f3ae2415146105a0578063f8d3277d146105d3578063ff2120ef1461060e57610182565b8063e52c355814610532578063e68777d714610565578063f2fde38b1461056d57610182565b8063ce7eaf01116100bd578063ce7eaf01146104ac578063e09e83e3146104e7578063e30c39781461052a57610182565b8063b6b3527214610411578063cbb3dc3e1461046757610182565b806365a6e9db1161013a5780638da5cb5b116101145780638da5cb5b146102e15780639b19251a14610312578063ac18de43146103de57610182565b806365a6e9db14610279578063715018a6146102d157806372311705146102d957610182565b8063439b7b7d1161016b578063439b7b7d146101ef5780634e71e0c81461023e578063627c55f61461024657610182565b806327b7ca5f146101875780632d06177a146101bc575b600080fd5b6101ba6004803603602081101561019d57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610616565b005b6101ba600480360360208110156101d257600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661070a565b61022a6004803603604081101561020557600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602001351661079c565b604080519115158252519081900360200190f35b6101ba6107e3565b6101ba6004803603602081101561025c57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166108ff565b6102816109f1565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156102bd5781810151838201526020016102a5565b505050509050019250505060405180910390f35b6101ba610a21565b610281610b16565b6102e9610b41565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6103456004803603602081101561032857600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610b5d565b604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b83811015610389578181015183820152602001610371565b50505050905001838103825284818151815260200191508051906020019060200280838360005b838110156103c85781810151838201526020016103b0565b5050505090500194505050505060405180910390f35b6101ba600480360360208110156103f457600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610c62565b61044c6004803603604081101561042757600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516610d56565b60408051921515835260208301919091528051918290030190f35b61049a6004803603602081101561047d57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610da3565b60408051918252519081900360200190f35b61049a600480360360408110156104c257600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516610dbc565b6101ba600480360360608110156104fd57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135610dd9565b6102e9610e91565b61022a6004803603602081101561054857600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610ead565b61049a610ed9565b6101ba6004803603602081101561058357600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610f04565b61022a600480360360208110156105b657600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661107c565b6101ba600480360360408110156105e957600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160200135166110a8565b61049a611144565b61061f3361107c565b61068a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f4e4f545f4d414e41474552000000000000000000000000000000000000000000604482015290519081900360640190fd5b6106b67fadb015e583a352dc0d8f1644b3a81d502caf8973247a6bf8ce2bec99d804833482600161116f565b6040805173ffffffffffffffffffffffffffffffffffffffff831681526001602082015281517fb42e48248460da8b1c3bdf7b9d87ec3bacce70f1df93f67d63b75ae90c5862f2929181900390910190a150565b60005473ffffffffffffffffffffffffffffffffffffffff16331461079057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a45440000000000000000000000000000000000000000604482015290519081900360640190fd5b6107998161138b565b50565b60006107a88383610d56565b50905080806107dc57506107dc7fadb015e583a352dc0d8f1644b3a81d502caf8973247a6bf8ce2bec99d8048334836113fb565b9392505050565b60015473ffffffffffffffffffffffffffffffffffffffff16331461086957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a45440000000000000000000000000000000000000000604482015290519081900360640190fd5b6001546000805460405173ffffffffffffffffffffffffffffffffffffffff93841693909116917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a360018054600080547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff841617909155169055565b6109083361107c565b61097357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f4e4f545f4d414e41474552000000000000000000000000000000000000000000604482015290519081900360640190fd5b61099d7fadb015e583a352dc0d8f1644b3a81d502caf8973247a6bf8ce2bec99d804833482611436565b6040805173ffffffffffffffffffffffffffffffffffffffff831681526000602082015281517fb42e48248460da8b1c3bdf7b9d87ec3bacce70f1df93f67d63b75ae90c5862f2929181900390910190a150565b6060610a1c7fadb015e583a352dc0d8f1644b3a81d502caf8973247a6bf8ce2bec99d8048334611652565b905090565b60005473ffffffffffffffffffffffffffffffffffffffff163314610aa757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a45440000000000000000000000000000000000000000604482015290519081900360640190fd5b6000805460405173ffffffffffffffffffffffffffffffffffffffff909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b6060610a1c7fae79206ff8d89355a31a27bc7df0c55f5fe15ce3ae94530629cd19b6712ea1f8611652565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b606080610b71610b6c84611750565b611652565b9150815167ffffffffffffffff81118015610b8b57600080fd5b50604051908082528060200260200182016040528015610bb5578160200160208202803683370190505b50905060005b8251811015610c5c5773ffffffffffffffffffffffffffffffffffffffff841660009081526003602052604081208451909190859084908110610bfa57fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054828281518110610c4957fe5b6020908102919091010152600101610bbb565b50915091565b60005473ffffffffffffffffffffffffffffffffffffffff163314610ce857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a45440000000000000000000000000000000000000000604482015290519081900360640190fd5b610d127fae79206ff8d89355a31a27bc7df0c55f5fe15ce3ae94530629cd19b6712ea1f882611436565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fef69f7d97228658c92417be1b16b19058315de71fecb435d07b7d23728b6bd3190600090a250565b73ffffffffffffffffffffffffffffffffffffffff80831660009081526003602090815260408083209385168352929052908120548015801590610d9a5750428111155b91509250929050565b6000610db6610db183611750565b6117c5565b92915050565b600360209081526000928352604080842090915290825290205481565b82610de3816117db565b610df7610def85611750565b84600161116f565b600042831015610e075742610e09565b825b73ffffffffffffffffffffffffffffffffffffffff8087166000818152600360209081526040808320948a168084529482529182902085905581519283528201929092526001818301526060810183905290519192507fd7a53629773662075985a51ef3a24a90133adb7ccc8e2b26402b8376964d0845919081900360800190a15050505050565b60015473ffffffffffffffffffffffffffffffffffffffff1681565b6000610db67fadb015e583a352dc0d8f1644b3a81d502caf8973247a6bf8ce2bec99d8048334836113fb565b6000610a1c7fae79206ff8d89355a31a27bc7df0c55f5fe15ce3ae94530629cd19b6712ea1f86117c5565b60005473ffffffffffffffffffffffffffffffffffffffff163314610f8a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a45440000000000000000000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff811615801590610fca575060005473ffffffffffffffffffffffffffffffffffffffff828116911614155b61103557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f494e56414c49445f414444524553530000000000000000000000000000000000604482015290519081900360640190fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6000610db67fae79206ff8d89355a31a27bc7df0c55f5fe15ce3ae94530629cd19b6712ea1f8836113fb565b816110b2816117db565b6110c46110be84611750565b83611436565b73ffffffffffffffffffffffffffffffffffffffff8084166000818152600360209081526040808320948716808452948252808320839055805193845290830193909352818301819052606082015290517fd7a53629773662075985a51ef3a24a90133adb7ccc8e2b26402b8376964d08459181900360800190a1505050565b6000610a1c7fadb015e583a352dc0d8f1644b3a81d502caf8973247a6bf8ce2bec99d80483346117c5565b600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616845260018101909252909120541561121057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f414c52454144595f494e5f534554000000000000000000000000000000000000604482015290519081900360640190fd5b81156112de57600281015481541461128957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f50524556494f55534c595f4e4f545f4d41494e5441494c454400000000000000604482015290519081900360640190fd5b80546001810182556000828152602090200180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff851617905561134c565b80541561134c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f4d5553545f4d41494e5441494e00000000000000000000000000000000000000604482015290519081900360640190fd5b60028101805460019081019182905573ffffffffffffffffffffffffffffffffffffffff90941660009081529190930160205260409020919091555050565b6113b77fae79206ff8d89355a31a27bc7df0c55f5fe15ce3ae94530629cd19b6712ea1f882600161116f565b60405173ffffffffffffffffffffffffffffffffffffffff8216907f3b4a40cccf2058c593542587329dd385be4f0b588db5471fbd9598e56dd7093a90600090a250565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff85168452600101909152902054151592915050565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff851684526001810190925290912054806114d757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f4e4f545f494e5f53455400000000000000000000000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff831660009081526001830160205260408120556002820180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01905581541561164c5760008260000183600201548154811061154557fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff9081169150841681146115e7578083600001600184038154811061158657fe5b600091825260208083209190910180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff948516179055918316815260018501909152604090208290555b82548390806115f257fe5b60008281526020902081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90810180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055019055505b50505050565b6000818152600260208190526040909120805491810154606092146116d857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f4e4f545f4d41494e5441494e4544000000000000000000000000000000000000604482015290519081900360640190fd5b6000838152600260209081526040918290208054835181840281018401909452808452909183018282801561174357602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311611718575b5050505050915050919050565b604080517f5f5f57484954454c4953545f5f0000000000000000000000000000000000000060208083019190915260609390931b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016602d820152815180820360210181526041909101909152805191012090565b6000908152600260208190526040909120015490565b604080517fc7b2e596000000000000000000000000000000000000000000000000000000008152336004820152905173ffffffffffffffffffffffffffffffffffffffff83169163c7b2e596916024808301926020929190829003018186803b15801561184757600080fd5b505afa15801561185b573d6000803e3d6000fd5b505050506040513d602081101561187157600080fd5b505161079957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a45440000000000000000000000000000000000000000604482015290519081900360640190fdfea2646970667358221220ac5fd440c97a4885ba3e5f3a27bce9a396ed292b35ee6fb9fb98a324fcd3a51164736f6c63430007000033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101825760003560e01c8063b6b35272116100d8578063e52c35581161008c578063f3ae241511610066578063f3ae2415146105a0578063f8d3277d146105d3578063ff2120ef1461060e57610182565b8063e52c355814610532578063e68777d714610565578063f2fde38b1461056d57610182565b8063ce7eaf01116100bd578063ce7eaf01146104ac578063e09e83e3146104e7578063e30c39781461052a57610182565b8063b6b3527214610411578063cbb3dc3e1461046757610182565b806365a6e9db1161013a5780638da5cb5b116101145780638da5cb5b146102e15780639b19251a14610312578063ac18de43146103de57610182565b806365a6e9db14610279578063715018a6146102d157806372311705146102d957610182565b8063439b7b7d1161016b578063439b7b7d146101ef5780634e71e0c81461023e578063627c55f61461024657610182565b806327b7ca5f146101875780632d06177a146101bc575b600080fd5b6101ba6004803603602081101561019d57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610616565b005b6101ba600480360360208110156101d257600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661070a565b61022a6004803603604081101561020557600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602001351661079c565b604080519115158252519081900360200190f35b6101ba6107e3565b6101ba6004803603602081101561025c57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166108ff565b6102816109f1565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156102bd5781810151838201526020016102a5565b505050509050019250505060405180910390f35b6101ba610a21565b610281610b16565b6102e9610b41565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6103456004803603602081101561032857600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610b5d565b604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b83811015610389578181015183820152602001610371565b50505050905001838103825284818151815260200191508051906020019060200280838360005b838110156103c85781810151838201526020016103b0565b5050505090500194505050505060405180910390f35b6101ba600480360360208110156103f457600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610c62565b61044c6004803603604081101561042757600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516610d56565b60408051921515835260208301919091528051918290030190f35b61049a6004803603602081101561047d57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610da3565b60408051918252519081900360200190f35b61049a600480360360408110156104c257600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516610dbc565b6101ba600480360360608110156104fd57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135610dd9565b6102e9610e91565b61022a6004803603602081101561054857600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610ead565b61049a610ed9565b6101ba6004803603602081101561058357600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610f04565b61022a600480360360208110156105b657600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661107c565b6101ba600480360360408110156105e957600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160200135166110a8565b61049a611144565b61061f3361107c565b61068a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f4e4f545f4d414e41474552000000000000000000000000000000000000000000604482015290519081900360640190fd5b6106b67fadb015e583a352dc0d8f1644b3a81d502caf8973247a6bf8ce2bec99d804833482600161116f565b6040805173ffffffffffffffffffffffffffffffffffffffff831681526001602082015281517fb42e48248460da8b1c3bdf7b9d87ec3bacce70f1df93f67d63b75ae90c5862f2929181900390910190a150565b60005473ffffffffffffffffffffffffffffffffffffffff16331461079057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a45440000000000000000000000000000000000000000604482015290519081900360640190fd5b6107998161138b565b50565b60006107a88383610d56565b50905080806107dc57506107dc7fadb015e583a352dc0d8f1644b3a81d502caf8973247a6bf8ce2bec99d8048334836113fb565b9392505050565b60015473ffffffffffffffffffffffffffffffffffffffff16331461086957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a45440000000000000000000000000000000000000000604482015290519081900360640190fd5b6001546000805460405173ffffffffffffffffffffffffffffffffffffffff93841693909116917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a360018054600080547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff841617909155169055565b6109083361107c565b61097357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f4e4f545f4d414e41474552000000000000000000000000000000000000000000604482015290519081900360640190fd5b61099d7fadb015e583a352dc0d8f1644b3a81d502caf8973247a6bf8ce2bec99d804833482611436565b6040805173ffffffffffffffffffffffffffffffffffffffff831681526000602082015281517fb42e48248460da8b1c3bdf7b9d87ec3bacce70f1df93f67d63b75ae90c5862f2929181900390910190a150565b6060610a1c7fadb015e583a352dc0d8f1644b3a81d502caf8973247a6bf8ce2bec99d8048334611652565b905090565b60005473ffffffffffffffffffffffffffffffffffffffff163314610aa757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a45440000000000000000000000000000000000000000604482015290519081900360640190fd5b6000805460405173ffffffffffffffffffffffffffffffffffffffff909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b6060610a1c7fae79206ff8d89355a31a27bc7df0c55f5fe15ce3ae94530629cd19b6712ea1f8611652565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b606080610b71610b6c84611750565b611652565b9150815167ffffffffffffffff81118015610b8b57600080fd5b50604051908082528060200260200182016040528015610bb5578160200160208202803683370190505b50905060005b8251811015610c5c5773ffffffffffffffffffffffffffffffffffffffff841660009081526003602052604081208451909190859084908110610bfa57fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054828281518110610c4957fe5b6020908102919091010152600101610bbb565b50915091565b60005473ffffffffffffffffffffffffffffffffffffffff163314610ce857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a45440000000000000000000000000000000000000000604482015290519081900360640190fd5b610d127fae79206ff8d89355a31a27bc7df0c55f5fe15ce3ae94530629cd19b6712ea1f882611436565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fef69f7d97228658c92417be1b16b19058315de71fecb435d07b7d23728b6bd3190600090a250565b73ffffffffffffffffffffffffffffffffffffffff80831660009081526003602090815260408083209385168352929052908120548015801590610d9a5750428111155b91509250929050565b6000610db6610db183611750565b6117c5565b92915050565b600360209081526000928352604080842090915290825290205481565b82610de3816117db565b610df7610def85611750565b84600161116f565b600042831015610e075742610e09565b825b73ffffffffffffffffffffffffffffffffffffffff8087166000818152600360209081526040808320948a168084529482529182902085905581519283528201929092526001818301526060810183905290519192507fd7a53629773662075985a51ef3a24a90133adb7ccc8e2b26402b8376964d0845919081900360800190a15050505050565b60015473ffffffffffffffffffffffffffffffffffffffff1681565b6000610db67fadb015e583a352dc0d8f1644b3a81d502caf8973247a6bf8ce2bec99d8048334836113fb565b6000610a1c7fae79206ff8d89355a31a27bc7df0c55f5fe15ce3ae94530629cd19b6712ea1f86117c5565b60005473ffffffffffffffffffffffffffffffffffffffff163314610f8a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a45440000000000000000000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff811615801590610fca575060005473ffffffffffffffffffffffffffffffffffffffff828116911614155b61103557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f494e56414c49445f414444524553530000000000000000000000000000000000604482015290519081900360640190fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6000610db67fae79206ff8d89355a31a27bc7df0c55f5fe15ce3ae94530629cd19b6712ea1f8836113fb565b816110b2816117db565b6110c46110be84611750565b83611436565b73ffffffffffffffffffffffffffffffffffffffff8084166000818152600360209081526040808320948716808452948252808320839055805193845290830193909352818301819052606082015290517fd7a53629773662075985a51ef3a24a90133adb7ccc8e2b26402b8376964d08459181900360800190a1505050565b6000610a1c7fadb015e583a352dc0d8f1644b3a81d502caf8973247a6bf8ce2bec99d80483346117c5565b600083815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616845260018101909252909120541561121057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f414c52454144595f494e5f534554000000000000000000000000000000000000604482015290519081900360640190fd5b81156112de57600281015481541461128957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f50524556494f55534c595f4e4f545f4d41494e5441494c454400000000000000604482015290519081900360640190fd5b80546001810182556000828152602090200180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff851617905561134c565b80541561134c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f4d5553545f4d41494e5441494e00000000000000000000000000000000000000604482015290519081900360640190fd5b60028101805460019081019182905573ffffffffffffffffffffffffffffffffffffffff90941660009081529190930160205260409020919091555050565b6113b77fae79206ff8d89355a31a27bc7df0c55f5fe15ce3ae94530629cd19b6712ea1f882600161116f565b60405173ffffffffffffffffffffffffffffffffffffffff8216907f3b4a40cccf2058c593542587329dd385be4f0b588db5471fbd9598e56dd7093a90600090a250565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff85168452600101909152902054151592915050565b600082815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff851684526001810190925290912054806114d757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f4e4f545f494e5f53455400000000000000000000000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff831660009081526001830160205260408120556002820180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01905581541561164c5760008260000183600201548154811061154557fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff9081169150841681146115e7578083600001600184038154811061158657fe5b600091825260208083209190910180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff948516179055918316815260018501909152604090208290555b82548390806115f257fe5b60008281526020902081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90810180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055019055505b50505050565b6000818152600260208190526040909120805491810154606092146116d857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f4e4f545f4d41494e5441494e4544000000000000000000000000000000000000604482015290519081900360640190fd5b6000838152600260209081526040918290208054835181840281018401909452808452909183018282801561174357602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311611718575b5050505050915050919050565b604080517f5f5f57484954454c4953545f5f0000000000000000000000000000000000000060208083019190915260609390931b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016602d820152815180820360210181526041909101909152805191012090565b6000908152600260208190526040909120015490565b604080517fc7b2e596000000000000000000000000000000000000000000000000000000008152336004820152905173ffffffffffffffffffffffffffffffffffffffff83169163c7b2e596916024808301926020929190829003018186803b15801561184757600080fd5b505afa15801561185b573d6000803e3d6000fd5b505050506040513d602081101561187157600080fd5b505161079957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a45440000000000000000000000000000000000000000604482015290519081900360640190fdfea2646970667358221220ac5fd440c97a4885ba3e5f3a27bce9a396ed292b35ee6fb9fb98a324fcd3a51164736f6c63430007000033
Deployed Bytecode Sourcemap
11304:3607:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12610:171;;;;;;;;;;;;;;;;-1:-1:-1;12610:171:0;;;;:::i;:::-;;10541:123;;;;;;;;;;;;;;;;-1:-1:-1;10541:123:0;;;;:::i;14467:258::-;;;;;;;;;;;;;;;;-1:-1:-1;14467:258:0;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;8860:205;;;:::i;12789:174::-;;;;;;;;;;;;;;;;-1:-1:-1;12789:174:0;;;;:::i;13983:169::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7641:161;;;:::i;9772:140::-;;;:::i;6701:20::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;12971:446;;;;;;;;;;;;;;;;-1:-1:-1;12971:446:0;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10752:176;;;;;;;;;;;;;;;;-1:-1:-1;10752:176:0;;;;:::i;13425:381::-;;;;;;;;;;;;;;;;-1:-1:-1;13425:381:0;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;13814:161;;;;;;;;;;;;;;;;-1:-1:-1;13814:161:0;;;;:::i;:::-;;;;;;;;;;;;;;;;11496:68;;;;;;;;;;;;;;;;-1:-1:-1;11496:68:0;;;;;;;;;;;:::i;11842:443::-;;;;;;;;;;;;;;;;-1:-1:-1;11842:443:0;;;;;;;;;;;;;;;;;;:::i;8160:27::-;;;:::i;14160:162::-;;;;;;;;;;;;;;;;-1:-1:-1;14160:162:0;;;;:::i;10003:134::-;;;:::i;8533:247::-;;;;;;;;;;;;;;;;-1:-1:-1;8533:247:0;;;;:::i;10304:147::-;;;;;;;;;;;;;;;;-1:-1:-1;10304:147:0;;;;:::i;12293:309::-;;;;;;;;;;;;;;;;-1:-1:-1;12293:309:0;;;;;;;;;;;:::i;14330:129::-;;;:::i;12610:171::-;9450:21;9460:10;9450:9;:21::i;:::-;9442:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12696:34:::1;11411:22;12719:4;12725;12696:15;:34::i;:::-;12746:27;::::0;;::::1;::::0;::::1;::::0;;12768:4:::1;12746:27;::::0;::::1;::::0;;;::::1;::::0;;;;;;;;;::::1;12610:171:::0;:::o;10541:123::-;7147:5;;;;7133:10;:19;7125:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10629:27:::1;10648:7;10629:18;:27::i;:::-;10541:123:::0;:::o;14467:258::-;14603:8;14638:27;14652:6;14660:4;14638:13;:27::i;:::-;-1:-1:-1;14629:36:0;-1:-1:-1;14629:36:0;;14683:34;;;14690:27;11411:22;14712:4;14690:14;:27::i;:::-;14676:41;14467:258;-1:-1:-1;;;14467:258:0:o;8860:205::-;8341:12;;;;8327:10;:26;8319:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8977:12:::1;::::0;::::1;8970:5:::0;;8949:41:::1;::::0;8977:12:::1;::::0;;::::1;::::0;8970:5;;::::1;::::0;8949:41:::1;::::0;::::1;9009:12;::::0;;::::1;9001:20:::0;;;;;::::1;9009:12;::::0;::::1;9001:20;::::0;;;9032:25:::1;::::0;;8860:205::o;12789:174::-;9450:21;9460:10;9450:9;:21::i;:::-;9442:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12878:33:::1;11411:22;12906:4;12878:20;:33::i;:::-;12927:28;::::0;;::::1;::::0;::::1;::::0;;12949:5:::1;12927:28;::::0;::::1;::::0;;;::::1;::::0;;;;;;;;;::::1;12789:174:::0;:::o;13983:169::-;14062:26;14123:21;11411:22;14123:14;:21::i;:::-;14116:28;;13983:169;:::o;7641:161::-;7147:5;;;;7133:10;:19;7125:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7762:1:::1;7747:5:::0;;7726:39:::1;::::0;::::1;7747:5:::0;;::::1;::::0;7726:39:::1;::::0;7762:1;;7726:39:::1;7792:1;7776:18:::0;;;::::1;::::0;;7641:161::o;9772:140::-;9840:16;9881:23;9266:24;9881:14;:23::i;6701:20::-;;;;;;:::o;12971:446::-;13068:26;13109:31;13180:34;13195:18;13206:6;13195:10;:18::i;:::-;13180:14;:34::i;:::-;13168:46;;13253:9;:16;13242:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13242:28:0;;13225:45;;13286:6;13281:129;13302:9;:16;13298:1;:20;13281:129;;;13360:24;;;;;;;:16;:24;;;;;13385:12;;13360:24;;;13385:9;;13395:1;;13385:12;;;;;;;;;;;;13360:38;;;;;;;;;;;;;;;;13340:14;13355:1;13340:17;;;;;;;;;;;;;;;;;:58;13320:3;;13281:129;;;;12971:446;;;:::o;10752:176::-;7147:5;;;;7133:10;:19;7125:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10843:38:::1;9266:24;10873:7;10843:20;:38::i;:::-;10897:23;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;;::::1;10752:176:::0;:::o;13425:381::-;13676:24;;;;13569:30;13676:24;;;:16;:24;;;;;;;;:30;;;;;;;;;;;;13745:17;;;;;:53;;;13783:15;13766:13;:32;;13745:53;13717:81;;13425:381;;;;;:::o;13814:161::-;13901:4;13930:37;13948:18;13959:6;13948:10;:18::i;:::-;13930:17;:37::i;:::-;13923:44;13814:161;-1:-1:-1;;13814:161:0:o;11496:68::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;11842:443::-;12001:6;3835:27;3855:6;3835:19;:27::i;:::-;12025:47:::1;12041:18;12052:6;12041:10;:18::i;:::-;12061:4;12067;12025:15;:47::i;:::-;12083:14;12117:15;12100:13;:32;;:66;;12151:15;12100:66;;;12135:13;12100:66;12177:24;::::0;;::::1;;::::0;;;:16:::1;:24;::::0;;;;;;;:30;;::::1;::::0;;;;;;;;;;:42;;;12235;;;;;;::::1;::::0;;;;12261:4:::1;12235:42:::0;;;;;;;;;;;;12083:83;;-1:-1:-1;12235:42:0::1;::::0;;;;;;;;::::1;3873:1;11842:443:::0;;;;:::o;8160:27::-;;;;;;:::o;14160:162::-;14258:4;14287:27;11411:22;14309:4;14287:14;:27::i;10003:134::-;10074:4;10103:26;9266:24;10103:17;:26::i;8533:247::-;7147:5;;;;7133:10;:19;7125:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8675:22:::1;::::0;::::1;::::0;;::::1;::::0;:43:::1;;-1:-1:-1::0;8713:5:0::1;::::0;::::1;8701:17:::0;;::::1;8713:5:::0;::::1;8701:17;;8675:43;8667:71;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;8749:12;:23:::0;;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;8533:247::o;10304:147::-;10385:4;10414:29;9266:24;10438:4;10414:14;:29::i;12293:309::-;12425:6;3835:27;3855:6;3835:19;:27::i;:::-;12449:46:::1;12470:18;12481:6;12470:10;:18::i;:::-;12490:4;12449:20;:46::i;:::-;12513:24;::::0;;::::1;;::::0;;;:16:::1;:24;::::0;;;;;;;:30;;::::1;::::0;;;;;;;;;12506:37;;;12559:35;;;;;;;::::1;::::0;;;;;;;;;;;;;;;;::::1;::::0;;;;;;;::::1;12293:309:::0;;;:::o;14330:129::-;14398:4;14427:24;11411:22;14427:17;:24::i;4407:554::-;4544:15;4562:9;;;:4;:9;;;;;;;;4590:19;;;;;:13;;;:19;;;;;;;:24;4582:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4650:12;4646:239;;;4711:9;;;;4687:20;;:33;4679:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4765:24;;;;;;;-1:-1:-1;4765:24:0;;;;;;;;;;;;;;;;;4646:239;;;4830:20;;:25;4822:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4897:9;;;:14;;4910:1;4897:14;;;;;;;4922:19;;;;4897:9;4922:19;;;:13;;;;:19;;;;;:31;;;;-1:-1:-1;;4407:554:0:o;10936:163::-;11015:39;9266:24;11040:7;11049:4;11015:15;:39::i;:::-;11070:21;;;;;;;;;;;10936:163;:::o;5675:197::-;5805:4;5834:9;;;:4;:9;;;;;;;;:25;;;;;:19;;:25;;;;;;:30;;5675:197;;;;:::o;4969:600::-;5089:15;5107:9;;;:4;:9;;;;;;;;5138:19;;;;;:13;;;:19;;;;;;;5176:8;5168:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5219:19;;;;;;;:13;;;:19;;;;;5212:26;5249:9;;;:14;;;;;;5280:20;;:24;5276:286;;5321:16;5340:3;:13;;5354:3;:9;;;5340:24;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5383:16:0;;;;5379:138;;5445:8;5420:3;:13;;5440:1;5434:3;:7;5420:22;;;;;;;;;;;;;;;;;;;;:33;;;;;;;;;;;5472:23;;;;;-1:-1:-1;5472:13:0;;:23;;;;;;:29;;;5379:138;5531:19;;:3;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5276:286:0;4969:600;;;;:::o;6062:264::-;6183:15;6201:9;;;:4;:9;;;;;;;;6242:20;;6229:9;;;;6149:16;;6229:33;6221:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6299:9;;;;:4;:9;;;;;;;;;6292:26;;;;;;;;;;;;;;;;;6299:9;;6292:26;;6299:9;6292:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6062:264;;;:::o;14733:173::-;14858:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14848:50;;;;;;14733:173::o;5880:174::-;5970:4;6010:9;;;:4;:9;;;;;;;;6037;;;5880:174::o;3890:144::-;3973:36;;;;;;3998:10;3973:36;;;;;;:24;;;;;;:36;;;;;;;;;;;;;;:24;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3973:36:0;3965:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Swarm Source
ipfs://ac5fd440c97a4885ba3e5f3a27bce9a396ed292b35ee6fb9fb98a324fcd3a511
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
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.