Latest 25 from a total of 846 transactions
| Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
| Create Or Sign W... | 28061263 | 10 days ago | IN | 0 ETH | 0.00000022 | ||||
| Create Or Sign M... | 27992504 | 12 days ago | IN | 0 ETH | 0.00000012 | ||||
| Create Or Sign M... | 27932290 | 13 days ago | IN | 0 ETH | 0.00000011 | ||||
| Create Or Sign W... | 26104827 | 49 days ago | IN | 0 ETH | 0.00000017 | ||||
| Create Or Sign W... | 20279186 | 149 days ago | IN | 0 ETH | 0.00000006 | ||||
| Create Or Sign W... | 20012890 | 153 days ago | IN | 0 ETH | 0.00000015 | ||||
| Cross Out | 19948947 | 154 days ago | IN | 0.00096 ETH | 0.00000001 | ||||
| Create Or Sign W... | 15095754 | 270 days ago | IN | 0 ETH | 0.0000042 | ||||
| Cross Out | 13970153 | 319 days ago | IN | 0 ETH | 0.00000578 | ||||
| Cross Out | 12718190 | 374 days ago | IN | 0 ETH | 0.00000495 | ||||
| Create Or Sign M... | 12628206 | 378 days ago | IN | 0 ETH | 0.00001327 | ||||
| Cross Out II | 11874771 | 407 days ago | IN | 0 ETH | 0.00001236 | ||||
| Create Or Sign W... | 11872033 | 408 days ago | IN | 0 ETH | 0.00002055 | ||||
| Create Or Sign W... | 11869991 | 408 days ago | IN | 0 ETH | 0.00002134 | ||||
| Create Or Sign W... | 11868052 | 408 days ago | IN | 0 ETH | 0.00003095 | ||||
| Cross Out II | 11857156 | 408 days ago | IN | 0 ETH | 0.00001613 | ||||
| Cross Out II | 11857055 | 408 days ago | IN | 0 ETH | 0.00001792 | ||||
| Cross Out II | 11856767 | 408 days ago | IN | 0 ETH | 0.00001828 | ||||
| Create Or Sign W... | 11800828 | 410 days ago | IN | 0 ETH | 0.00000585 | ||||
| Create Or Sign W... | 11800828 | 410 days ago | IN | 0 ETH | 0.00000585 | ||||
| Create Or Sign W... | 11800828 | 410 days ago | IN | 0 ETH | 0.00000584 | ||||
| Create Or Sign W... | 11800828 | 410 days ago | IN | 0 ETH | 0.00000733 | ||||
| Create Or Sign W... | 11800828 | 410 days ago | IN | 0 ETH | 0.00000596 | ||||
| Create Or Sign M... | 11800828 | 410 days ago | IN | 0 ETH | 0.00000543 | ||||
| Create Or Sign M... | 11800828 | 410 days ago | IN | 0 ETH | 0.00000543 |
Latest 25 internal transactions (View All)
Advanced mode:
| Parent Transaction Hash | Block | From | To | |||
|---|---|---|---|---|---|---|
| 26104827 | 49 days ago | 0.009999 ETH | ||||
| 20279186 | 149 days ago | 0.00035651 ETH | ||||
| 20012890 | 153 days ago | 0.016736 ETH | ||||
| 11506724 | 421 days ago | 0.001 ETH | ||||
| 8575918 | 521 days ago | 0.0025 ETH | ||||
| 8575870 | 521 days ago | 0.0199 ETH | ||||
| 8397985 | 527 days ago | 0.0062 ETH | ||||
| 8244666 | 532 days ago | 0.00941 ETH | ||||
| 8204032 | 534 days ago | 0.0004 ETH | ||||
| 8198831 | 534 days ago | 0.02842922 ETH | ||||
| 8063645 | 538 days ago | 0.099902 ETH | ||||
| 7883589 | 544 days ago | 0.0644 ETH | ||||
| 7820118 | 546 days ago | 0.0149 ETH | ||||
| 7675850 | 551 days ago | 0.001 ETH | ||||
| 7329619 | 562 days ago | 0.0169 ETH | ||||
| 7327139 | 562 days ago | 0.0139 ETH | ||||
| 7255595 | 565 days ago | 0.001 ETH | ||||
| 7245282 | 565 days ago | 0.0029 ETH | ||||
| 7162304 | 568 days ago | 0.0022 ETH | ||||
| 7162044 | 568 days ago | 0.0019 ETH | ||||
| 7146749 | 569 days ago | 0.0024 ETH | ||||
| 7146741 | 569 days ago | 0.0019 ETH | ||||
| 7119124 | 570 days ago | 0.0039 ETH | ||||
| 7041202 | 572 days ago | 0.2343 ETH | ||||
| 6936834 | 576 days ago | 0.0279 ETH |
Cross-Chain Transactions
Loading...
Loading
Contract Name:
NerveMultiSigWalletIII
Compiler Version
v0.5.17+commit.d19bba13
Contract Source Code (Solidity)
/**
*Submitted for verification at scrollscan.com on 2023-11-13
*/
// SPDX-License-Identifier: MIT
pragma solidity ^0.5.5;
/**
* @dev Interface of the ERC20 standard as defined in the EIP. Does not include
* the optional functions; to access them see {ERC20Detailed}.
*/
interface IERC20 {
/**
* @dev Returns the amount of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the amount of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves `amount` tokens from the caller's account to `recipient`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address recipient, uint256 amount) external returns (bool);
/**
* @dev Returns the remaining number of tokens that `spender` will be
* allowed to spend on behalf of `owner` through {transferFrom}. This is
* zero by default.
*
* This value changes when {approve} or {transferFrom} are called.
*/
function allowance(address owner, address spender) external view returns (uint256);
/**
* @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* IMPORTANT: Beware that changing an allowance with this method brings the risk
* that someone may use both the old and the new allowance by unfortunate
* transaction ordering. One possible solution to mitigate this race
* condition is to first reduce the spender's allowance to 0 and set the
* desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
*
* Emits an {Approval} event.
*/
function approve(address spender, uint256 amount) external returns (bool);
/**
* @dev Moves `amount` tokens from `sender` to `recipient` using the
* allowance mechanism. `amount` is then deducted from the caller's
* allowance.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
/**
* @dev Emitted when `value` tokens are moved from one account (`from`) to
* another (`to`).
*
* Note that `value` may be zero.
*/
event Transfer(address indexed from, address indexed to, uint256 value);
/**
* @dev Emitted when the allowance of a `spender` for an `owner` is set by
* a call to {approve}. `value` is the new allowance.
*/
event Approval(address indexed owner, address indexed spender, uint256 value);
}
/**
* @title SafeERC20
* @dev Wrappers around ERC20 operations that throw on failure (when the token
* contract returns false). Tokens that return no value (and instead revert or
* throw on failure) are also supported, non-reverting calls are assumed to be
* successful.
* To use this library you can add a `using SafeERC20 for ERC20;` statement to your contract,
* which allows you to call the safe operations as `token.safeTransfer(...)`, etc.
*/
library SafeERC20 {
using SafeMath for uint256;
using Address for address;
function safeTransfer(IERC20 token, address to, uint256 value, mapping(address => uint8) storage bugERC20s) internal {
callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value), bugERC20s);
}
function safeTransferFrom(IERC20 token, address from, address to, uint256 value, mapping(address => uint8) storage bugERC20s) internal {
callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value), bugERC20s);
}
/**
* @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
* on the return value: the return value is optional (but if data is returned, it must not be false).
* @param token The token targeted by the call.
* @param data The call data (encoded using abi.encode or one of its variants).
*/
function callOptionalReturn(IERC20 token, bytes memory data, mapping(address => uint8) storage bugERC20s) private {
// We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
// we're implementing it ourselves.
// A Solidity high level call has three parts:
// 1. The target address is checked to verify it contains contract code
// 2. The call itself is made, and success asserted
// 3. The return value is decoded, which in turn checks the size of the returned data.
// solhint-disable-next-line max-line-length
require(address(token).isContract(), "SafeERC20: call to non-contract");
// solhint-disable-next-line avoid-low-level-calls
(bool success, bytes memory returndata) = address(token).call(data);
require(success, "SafeERC20: low-level call failed");
if (bugERC20s[address(token)] != 0) {
return;
}
if (returndata.length > 0) { // Return data is optional
// solhint-disable-next-line max-line-length
require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
}
}
}
// Part: ReentrancyGuard
/**
* @dev Contract module that helps prevent reentrant calls to a function.
*
* Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
* available, which can be applied to functions to make sure there are no nested
* (reentrant) calls to them.
*
* Note that because there is a single `nonReentrant` guard, functions marked as
* `nonReentrant` may not call one another. This can be worked around by making
* those functions `private`, and then adding `external` `nonReentrant` entry
* points to them.
*
* TIP: If you would like to learn more about reentrancy and alternative ways
* to protect against it, check out our blog post
* https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
*/
contract ReentrancyGuard {
// Booleans are more expensive than uint256 or any type that takes up a full
// word because each write operation emits an extra SLOAD to first read the
// slot's contents, replace the bits taken up by the boolean, and then write
// back. This is the compiler's defense against contract upgrades and
// pointer aliasing, and it cannot be disabled.
// The values being non-zero value makes deployment a bit more expensive,
// but in exchange the refund on every call to nonReentrant will be lower in
// amount. Since refunds are capped to a percentage of the total
// transaction's gas, it is best to keep them low in cases like this one, to
// increase the likelihood of the full refund coming into effect.
uint256 private constant _NOT_ENTERED = 1;
uint256 private constant _ENTERED = 2;
uint256 private _status;
constructor () internal {
_status = _NOT_ENTERED;
}
/**
* @dev Prevents a contract from calling itself, directly or indirectly.
* Calling a `nonReentrant` function from another `nonReentrant`
* function is not supported. It is possible to prevent this from happening
* by making the `nonReentrant` function external, and make it call a
* `private` function that does the actual work.
*/
modifier nonReentrant() {
// On the first call to nonReentrant, _notEntered will be true
require(_status != _ENTERED, "ReentrancyGuard: reentrant call");
// Any calls to nonReentrant after this point will fail
_status = _ENTERED;
_;
// By storing the original value once again, a refund is triggered (see
// https://eips.ethereum.org/EIPS/eip-2200)
_status = _NOT_ENTERED;
}
}
/**
* @dev Wrappers over Solidity's arithmetic operations with added overflow
* checks.
*
* Arithmetic operations in Solidity wrap on overflow. This can easily result
* in bugs, because programmers usually assume that an overflow raises an
* error, which is the standard behavior in high level programming languages.
* `SafeMath` restores this intuition by reverting the transaction when an
* operation overflows.
*
* Using this library instead of the unchecked operations eliminates an entire
* class of bugs, so it's recommended to use it always.
*/
library SafeMath {
/**
* @dev Returns the addition of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `+` operator.
*
* Requirements:
* - Addition cannot overflow.
*/
function add(uint256 a, uint256 b) internal pure returns (uint256) {
uint256 c = a + b;
require(c >= a, "SafeMath: addition overflow");
return c;
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting on
* overflow (when the result is negative).
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
* - Subtraction cannot overflow.
*/
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
return sub(a, b, "SafeMath: subtraction overflow");
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting with custom message on
* overflow (when the result is negative).
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
* - Subtraction cannot overflow.
*
* _Available since v2.4.0._
*/
function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b <= a, errorMessage);
uint256 c = a - b;
return c;
}
/**
* @dev Returns the multiplication of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `*` operator.
*
* Requirements:
* - Multiplication cannot overflow.
*/
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
// Gas optimization: this is cheaper than requiring 'a' not being zero, but the
// benefit is lost if 'b' is also tested.
// See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
if (a == 0) {
return 0;
}
uint256 c = a * b;
require(c / a == b, "SafeMath: multiplication overflow");
return c;
}
/**
* @dev Returns the integer division of two unsigned integers. Reverts on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator. Note: this function uses a
* `revert` opcode (which leaves remaining gas untouched) while Solidity
* uses an invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
* - The divisor cannot be zero.
*/
function div(uint256 a, uint256 b) internal pure returns (uint256) {
return div(a, b, "SafeMath: division by zero");
}
/**
* @dev Returns the integer division of two unsigned integers. Reverts with custom message on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator. Note: this function uses a
* `revert` opcode (which leaves remaining gas untouched) while Solidity
* uses an invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
* - The divisor cannot be zero.
*
* _Available since v2.4.0._
*/
function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
// Solidity only automatically asserts when dividing by 0
require(b > 0, errorMessage);
uint256 c = a / b;
// assert(a == b * c + a % b); // There is no case in which this doesn't hold
return c;
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* Reverts when dividing by zero.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
* - The divisor cannot be zero.
*/
function mod(uint256 a, uint256 b) internal pure returns (uint256) {
return mod(a, b, "SafeMath: modulo by zero");
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* Reverts with custom message when dividing by zero.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
* - The divisor cannot be zero.
*
* _Available since v2.4.0._
*/
function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b != 0, errorMessage);
return a % b;
}
}
/**
* @dev Collection of functions related to the address type
*/
library Address {
/**
* @dev Returns true if `account` is a contract.
*
* [IMPORTANT]
* ====
* It is unsafe to assume that an address for which this function returns
* false is an externally-owned account (EOA) and not a contract.
*
* Among others, `isContract` will return false for the following
* types of addresses:
*
* - an externally-owned account
* - a contract in construction
* - an address where a contract will be created
* - an address where a contract lived, but was destroyed
* ====
*/
function isContract(address account) internal view returns (bool) {
// According to EIP-1052, 0x0 is the value returned for not-yet created accounts
// and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
// for accounts without code, i.e. `keccak256('')`
bytes32 codehash;
bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
// solhint-disable-next-line no-inline-assembly
assembly { codehash := extcodehash(account) }
return (codehash != accountHash && codehash != 0x0);
}
/**
* @dev Converts an `address` into `address payable`. Note that this is
* simply a type cast: the actual underlying value is not changed.
*
* _Available since v2.4.0._
*/
function toPayable(address account) internal pure returns (address payable) {
return address(uint160(account));
}
/**
* @dev Replacement for Solidity's `transfer`: sends `amount` wei to
* `recipient`, forwarding all available gas and reverting on errors.
*
* https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
* of certain opcodes, possibly making contracts go over the 2300 gas limit
* imposed by `transfer`, making them unable to receive funds via
* `transfer`. {sendValue} removes this limitation.
*
* https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
*
* IMPORTANT: because control is transferred to `recipient`, care must be
* taken to not create reentrancy vulnerabilities. Consider using
* {ReentrancyGuard} or the
* https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
*
* _Available since v2.4.0._
*/
function sendValue(address payable recipient, uint256 amount) internal {
require(address(this).balance >= amount, "Address: insufficient balance");
// solhint-disable-next-line avoid-call-value
(bool success, ) = recipient.call.value(amount)("");
require(success, "Address: unable to send value, recipient may have reverted");
}
}
library BytesLib {
function concat(
bytes memory _preBytes,
bytes memory _postBytes
)
internal
pure
returns (bytes memory)
{
bytes memory tempBytes;
assembly {
// Get a location of some free memory and store it in tempBytes as
// Solidity does for memory variables.
tempBytes := mload(0x40)
// Store the length of the first bytes array at the beginning of
// the memory for tempBytes.
let length := mload(_preBytes)
mstore(tempBytes, length)
// Maintain a memory counter for the current write location in the
// temp bytes array by adding the 32 bytes for the array length to
// the starting location.
let mc := add(tempBytes, 0x20)
// Stop copying when the memory counter reaches the length of the
// first bytes array.
let end := add(mc, length)
for {
// Initialize a copy counter to the start of the _preBytes data,
// 32 bytes into its memory.
let cc := add(_preBytes, 0x20)
} lt(mc, end) {
// Increase both counters by 32 bytes each iteration.
mc := add(mc, 0x20)
cc := add(cc, 0x20)
} {
// Write the _preBytes data into the tempBytes memory 32 bytes
// at a time.
mstore(mc, mload(cc))
}
// Add the length of _postBytes to the current length of tempBytes
// and store it as the new length in the first 32 bytes of the
// tempBytes memory.
length := mload(_postBytes)
mstore(tempBytes, add(length, mload(tempBytes)))
// Move the memory counter back from a multiple of 0x20 to the
// actual end of the _preBytes data.
mc := end
// Stop copying when the memory counter reaches the new combined
// length of the arrays.
end := add(mc, length)
for {
let cc := add(_postBytes, 0x20)
} lt(mc, end) {
mc := add(mc, 0x20)
cc := add(cc, 0x20)
} {
mstore(mc, mload(cc))
}
// Update the free-memory pointer by padding our last write location
// to 32 bytes: add 31 bytes to the end of tempBytes to move to the
// next 32 byte block, then round down to the nearest multiple of
// 32. If the sum of the length of the two arrays is zero then add
// one before rounding down to leave a blank 32 bytes (the length block with 0).
mstore(0x40, and(
add(add(end, iszero(add(length, mload(_preBytes)))), 31),
not(31) // Round down to the nearest 32 bytes.
))
}
return tempBytes;
}
function concatStorage(bytes storage _preBytes, bytes memory _postBytes) internal {
assembly {
// Read the first 32 bytes of _preBytes storage, which is the length
// of the array. (We don't need to use the offset into the slot
// because arrays use the entire slot.)
let fslot := sload(_preBytes_slot)
// Arrays of 31 bytes or less have an even value in their slot,
// while longer arrays have an odd value. The actual length is
// the slot divided by two for odd values, and the lowest order
// byte divided by two for even values.
// If the slot is even, bitwise and the slot with 255 and divide by
// two to get the length. If the slot is odd, bitwise and the slot
// with -1 and divide by two.
let slength := div(and(fslot, sub(mul(0x100, iszero(and(fslot, 1))), 1)), 2)
let mlength := mload(_postBytes)
let newlength := add(slength, mlength)
// slength can contain both the length and contents of the array
// if length < 32 bytes so let's prepare for that
// v. http://solidity.readthedocs.io/en/latest/miscellaneous.html#layout-of-state-variables-in-storage
switch add(lt(slength, 32), lt(newlength, 32))
case 2 {
// Since the new array still fits in the slot, we just need to
// update the contents of the slot.
// uint256(bytes_storage) = uint256(bytes_storage) + uint256(bytes_memory) + new_length
sstore(
_preBytes_slot,
// all the modifications to the slot are inside this
// next block
add(
// we can just add to the slot contents because the
// bytes we want to change are the LSBs
fslot,
add(
mul(
div(
// load the bytes from memory
mload(add(_postBytes, 0x20)),
// zero all bytes to the right
exp(0x100, sub(32, mlength))
),
// and now shift left the number of bytes to
// leave space for the length in the slot
exp(0x100, sub(32, newlength))
),
// increase length by the double of the memory
// bytes length
mul(mlength, 2)
)
)
)
}
case 1 {
// The stored value fits in the slot, but the combined value
// will exceed it.
// get the keccak hash to get the contents of the array
mstore(0x0, _preBytes_slot)
let sc := add(keccak256(0x0, 0x20), div(slength, 32))
// save new length
sstore(_preBytes_slot, add(mul(newlength, 2), 1))
// The contents of the _postBytes array start 32 bytes into
// the structure. Our first read should obtain the `submod`
// bytes that can fit into the unused space in the last word
// of the stored array. To get this, we read 32 bytes starting
// from `submod`, so the data we read overlaps with the array
// contents by `submod` bytes. Masking the lowest-order
// `submod` bytes allows us to add that value directly to the
// stored value.
let submod := sub(32, slength)
let mc := add(_postBytes, submod)
let end := add(_postBytes, mlength)
let mask := sub(exp(0x100, submod), 1)
sstore(
sc,
add(
and(
fslot,
0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00
),
and(mload(mc), mask)
)
)
for {
mc := add(mc, 0x20)
sc := add(sc, 1)
} lt(mc, end) {
sc := add(sc, 1)
mc := add(mc, 0x20)
} {
sstore(sc, mload(mc))
}
mask := exp(0x100, sub(mc, end))
sstore(sc, mul(div(mload(mc), mask), mask))
}
default {
// get the keccak hash to get the contents of the array
mstore(0x0, _preBytes_slot)
// Start copying to the last used word of the stored array.
let sc := add(keccak256(0x0, 0x20), div(slength, 32))
// save new length
sstore(_preBytes_slot, add(mul(newlength, 2), 1))
// Copy over the first `submod` bytes of the new data as in
// case 1 above.
let slengthmod := mod(slength, 32)
let mlengthmod := mod(mlength, 32)
let submod := sub(32, slengthmod)
let mc := add(_postBytes, submod)
let end := add(_postBytes, mlength)
let mask := sub(exp(0x100, submod), 1)
sstore(sc, add(sload(sc), and(mload(mc), mask)))
for {
sc := add(sc, 1)
mc := add(mc, 0x20)
} lt(mc, end) {
sc := add(sc, 1)
mc := add(mc, 0x20)
} {
sstore(sc, mload(mc))
}
mask := exp(0x100, sub(mc, end))
sstore(sc, mul(div(mload(mc), mask), mask))
}
}
}
function slice(
bytes memory _bytes,
uint _start,
uint _length
)
internal
pure
returns (bytes memory)
{
require(_bytes.length >= (_start + _length));
bytes memory tempBytes;
assembly {
switch iszero(_length)
case 0 {
// Get a location of some free memory and store it in tempBytes as
// Solidity does for memory variables.
tempBytes := mload(0x40)
// The first word of the slice result is potentially a partial
// word read from the original array. To read it, we calculate
// the length of that partial word and start copying that many
// bytes into the array. The first word we copy will start with
// data we don't care about, but the last `lengthmod` bytes will
// land at the beginning of the contents of the new array. When
// we're done copying, we overwrite the full first word with
// the actual length of the slice.
let lengthmod := and(_length, 31)
// The multiplication in the next line is necessary
// because when slicing multiples of 32 bytes (lengthmod == 0)
// the following copy loop was copying the origin's length
// and then ending prematurely not copying everything it should.
let mc := add(add(tempBytes, lengthmod), mul(0x20, iszero(lengthmod)))
let end := add(mc, _length)
for {
// The multiplication in the next line has the same exact purpose
// as the one above.
let cc := add(add(add(_bytes, lengthmod), mul(0x20, iszero(lengthmod))), _start)
} lt(mc, end) {
mc := add(mc, 0x20)
cc := add(cc, 0x20)
} {
mstore(mc, mload(cc))
}
mstore(tempBytes, _length)
//update free-memory pointer
//allocating the array padded to 32 bytes like the compiler does now
mstore(0x40, and(add(mc, 31), not(31)))
}
//if we want a zero-length slice let's just return a zero-length array
default {
tempBytes := mload(0x40)
mstore(0x40, add(tempBytes, 0x20))
}
}
return tempBytes;
}
function toAddress(bytes memory _bytes, uint _start) internal pure returns (address) {
require(_bytes.length >= (_start + 20));
address tempAddress;
assembly {
tempAddress := div(mload(add(add(_bytes, 0x20), _start)), 0x1000000000000000000000000)
}
return tempAddress;
}
function toUint8(bytes memory _bytes, uint _start) internal pure returns (uint8) {
require(_bytes.length >= (_start + 1));
uint8 tempUint;
assembly {
tempUint := mload(add(add(_bytes, 0x1), _start))
}
return tempUint;
}
function toUint16(bytes memory _bytes, uint _start) internal pure returns (uint16) {
require(_bytes.length >= (_start + 2));
uint16 tempUint;
assembly {
tempUint := mload(add(add(_bytes, 0x2), _start))
}
return tempUint;
}
function toUint32(bytes memory _bytes, uint _start) internal pure returns (uint32) {
require(_bytes.length >= (_start + 4));
uint32 tempUint;
assembly {
tempUint := mload(add(add(_bytes, 0x4), _start))
}
return tempUint;
}
function toUint64(bytes memory _bytes, uint _start) internal pure returns (uint64) {
require(_bytes.length >= (_start + 8));
uint64 tempUint;
assembly {
tempUint := mload(add(add(_bytes, 0x8), _start))
}
return tempUint;
}
function toUint96(bytes memory _bytes, uint _start) internal pure returns (uint96) {
require(_bytes.length >= (_start + 12));
uint96 tempUint;
assembly {
tempUint := mload(add(add(_bytes, 0xc), _start))
}
return tempUint;
}
function toUint128(bytes memory _bytes, uint _start) internal pure returns (uint128) {
require(_bytes.length >= (_start + 16));
uint128 tempUint;
assembly {
tempUint := mload(add(add(_bytes, 0x10), _start))
}
return tempUint;
}
function toUint(bytes memory _bytes, uint _start) internal pure returns (uint256) {
require(_bytes.length >= (_start + 32));
uint256 tempUint;
assembly {
tempUint := mload(add(add(_bytes, 0x20), _start))
}
return tempUint;
}
function toBytes32(bytes memory _bytes, uint _start) internal pure returns (bytes32) {
require(_bytes.length >= (_start + 32));
bytes32 tempBytes32;
assembly {
tempBytes32 := mload(add(add(_bytes, 0x20), _start))
}
return tempBytes32;
}
function equal(bytes memory _preBytes, bytes memory _postBytes) internal pure returns (bool) {
bool success = true;
assembly {
let length := mload(_preBytes)
// if lengths don't match the arrays are not equal
switch eq(length, mload(_postBytes))
case 1 {
// cb is a circuit breaker in the for loop since there's
// no said feature for inline assembly loops
// cb = 1 - don't breaker
// cb = 0 - break
let cb := 1
let mc := add(_preBytes, 0x20)
let end := add(mc, length)
for {
let cc := add(_postBytes, 0x20)
// the next line is the loop condition:
// while(uint(mc < end) + cb == 2)
} eq(add(lt(mc, end), cb), 2) {
mc := add(mc, 0x20)
cc := add(cc, 0x20)
} {
// if any of these checks fails then arrays are not equal
if iszero(eq(mload(mc), mload(cc))) {
// unsuccess:
success := 0
cb := 0
}
}
}
default {
// unsuccess:
success := 0
}
}
return success;
}
function equalStorage(
bytes storage _preBytes,
bytes memory _postBytes
)
internal
view
returns (bool)
{
bool success = true;
assembly {
// we know _preBytes_offset is 0
let fslot := sload(_preBytes_slot)
// Decode the length of the stored array like in concatStorage().
let slength := div(and(fslot, sub(mul(0x100, iszero(and(fslot, 1))), 1)), 2)
let mlength := mload(_postBytes)
// if lengths don't match the arrays are not equal
switch eq(slength, mlength)
case 1 {
// slength can contain both the length and contents of the array
// if length < 32 bytes so let's prepare for that
// v. http://solidity.readthedocs.io/en/latest/miscellaneous.html#layout-of-state-variables-in-storage
if iszero(iszero(slength)) {
switch lt(slength, 32)
case 1 {
// blank the last byte which is the length
fslot := mul(div(fslot, 0x100), 0x100)
if iszero(eq(fslot, mload(add(_postBytes, 0x20)))) {
// unsuccess:
success := 0
}
}
default {
// cb is a circuit breaker in the for loop since there's
// no said feature for inline assembly loops
// cb = 1 - don't breaker
// cb = 0 - break
let cb := 1
// get the keccak hash to get the contents of the array
mstore(0x0, _preBytes_slot)
let sc := keccak256(0x0, 0x20)
let mc := add(_postBytes, 0x20)
let end := add(mc, mlength)
// the next line is the loop condition:
// while(uint(mc < end) + cb == 2)
for {} eq(add(lt(mc, end), cb), 2) {
sc := add(sc, 1)
mc := add(mc, 0x20)
} {
if iszero(eq(sload(sc), mload(mc))) {
// unsuccess:
success := 0
cb := 0
}
}
}
}
}
default {
// unsuccess:
success := 0
}
}
return success;
}
}
interface IERC20Minter {
function mint(address to, uint256 amount) external;
function burn(uint256 amount) external;
function replaceMinter(address newMinter) external;
}
contract NerveMultiSigWalletIII is ReentrancyGuard {
using Address for address;
using Address for address payable;
using SafeERC20 for IERC20;
using SafeMath for uint256;
using BytesLib for bytes;
modifier isOwner{
require(owner == msg.sender, "Only owner can execute it");
_;
}
modifier isManager{
require(managers[msg.sender] == 1, "Only manager can execute it");
_;
}
bool public upgrade = false;
address payable public upgradeContractAddress = address(0);
// 最大管理员数量
uint constant max_managers = 15;
// 最小管理员数量
uint constant min_managers = 3;
// 最小签名比例 66%
uint constant rate = 66;
// 签名字节长度
uint constant signatureLength = 65;
// 比例分母
uint constant DENOMINATOR = 100;
// 当前合约版本
uint8 constant VERSION = 3;
// hash计算加盐
uint public hashSalt;
// 当前交易的最小签名数量
uint8 public current_min_signatures;
address public owner;
mapping(address => uint8) private seedManagers;
address[] private seedManagerArray;
mapping(address => uint8) private managers;
address[] private managerArray;
mapping(bytes32 => uint8) private completedKeccak256s;
mapping(string => uint8) private completedTxs;
mapping(address => uint8) private minterERC20s;
mapping(address => uint8) public bugERC20s;
bool public openCrossOutII = true;
constructor(uint256 _chainid, address[] memory _managers) public{
require(_managers.length <= max_managers, "Exceeded the maximum number of managers");
require(_managers.length >= min_managers, "Not reaching the min number of managers");
owner = msg.sender;
managerArray = _managers;
for (uint8 i = 0; i < managerArray.length; i++) {
require(managerArray[i] != address(0), "Constructor: Zero address.");
managers[managerArray[i]] = 1;
seedManagers[managerArray[i]] = 1;
seedManagerArray.push(managerArray[i]);
}
require(managers[owner] == 0, "Contract creator cannot act as manager");
// 设置当前交易的最小签名数量
current_min_signatures = calMinSignatures(managerArray.length);
hashSalt = _chainid * 2 + VERSION;
}
function() external payable {
emit DepositFunds(msg.sender, msg.value);
}
function createOrSignWithdraw(string memory txKey, address payable to, uint256 amount, bool isERC20, address ERC20, bytes memory signatures) public nonReentrant isManager {
require(bytes(txKey).length == 64, "Fixed length of txKey: 64");
require(to != address(0), "Withdraw: transfer to the zero address");
require(amount > 0, "Withdrawal amount must be greater than 0");
// 校验已经完成的交易
require(completedTxs[txKey] == 0, "Transaction has been completed");
// 校验提现金额
if (isERC20) {
validateTransferERC20(ERC20, to, amount);
} else {
require(address(this).balance >= amount, "This contract address does not have sufficient balance of ether");
}
bytes32 vHash = keccak256(abi.encodePacked(txKey, to, amount, isERC20, ERC20, hashSalt));
// 校验请求重复性
require(completedKeccak256s[vHash] == 0, "Invalid signatures");
// 校验签名
require(validSignature(vHash, signatures), "Valid signatures fail");
// 执行转账
if (isERC20) {
transferERC20(ERC20, to, amount);
} else {
// 实际到账
require(address(this).balance >= amount, "This contract address does not have sufficient balance of ether");
to.sendValue(amount);
emit TransferFunds(to, amount);
}
// 保存交易数据
completeTx(txKey, vHash, 1);
emit TxWithdrawCompleted(txKey);
}
function createOrSignManagerChange(string memory txKey, address[] memory adds, address[] memory removes, uint8 count, bytes memory signatures) public isManager {
require(bytes(txKey).length == 64, "Fixed length of txKey: 64");
require(adds.length > 0 || removes.length > 0, "There are no managers joining or exiting");
// 校验已经完成的交易
require(completedTxs[txKey] == 0, "Transaction has been completed");
preValidateAddsAndRemoves(adds, removes);
bytes32 vHash = keccak256(abi.encodePacked(txKey, adds, count, removes, hashSalt));
// 校验请求重复性
require(completedKeccak256s[vHash] == 0, "Invalid signatures");
// 校验签名
require(validSignature(vHash, signatures), "Valid signatures fail");
// 变更管理员
removeManager(removes);
addManager(adds);
// 更新当前交易的最小签名数
current_min_signatures = calMinSignatures(managerArray.length);
// 保存交易数据
completeTx(txKey, vHash, 1);
// add event
emit TxManagerChangeCompleted(txKey);
}
function createOrSignUpgrade(string memory txKey, address payable upgradeContract, bytes memory signatures) public isManager {
require(bytes(txKey).length == 64, "Fixed length of txKey: 64");
// 校验已经完成的交易
require(completedTxs[txKey] == 0, "Transaction has been completed");
require(!upgrade, "It has been upgraded");
require(upgradeContract.isContract(), "The address is not a contract address");
// 校验
bytes32 vHash = keccak256(abi.encodePacked(txKey, upgradeContract, hashSalt));
// 校验请求重复性
require(completedKeccak256s[vHash] == 0, "Invalid signatures");
// 校验签名
require(validSignature(vHash, signatures), "Valid signatures fail");
// 变更可升级
upgrade = true;
upgradeContractAddress = upgradeContract;
// 保存交易数据
completeTx(txKey, vHash, 1);
// add event
emit TxUpgradeCompleted(txKey);
}
function validSignature(bytes32 hash, bytes memory signatures) internal view returns (bool) {
require(signatures.length <= 975, "Max length of signatures: 975");
// 获取签名列表对应的有效管理员,如果存在错误的签名、或者不是管理员的签名,就失败
uint sManagersCount = getManagerFromSignatures(hash, signatures);
// 判断最小签名数量
return sManagersCount >= current_min_signatures;
}
function getManagerFromSignatures(bytes32 hash, bytes memory signatures) internal view returns (uint){
uint signCount = 0;
uint times = signatures.length.div(signatureLength);
address[] memory result = new address[](times);
uint k = 0;
uint8 j = 0;
for (uint i = 0; i < times; i++) {
bytes memory sign = signatures.slice(k, signatureLength);
address mAddress = ecrecovery(hash, sign);
require(mAddress != address(0), "Signatures error");
// 管理计数
if (managers[mAddress] == 1) {
signCount++;
result[j++] = mAddress;
}
k += signatureLength;
}
// 验证地址重复性
bool suc = repeatability(result);
delete result;
require(suc, "Signatures duplicate");
return signCount;
}
function validateRepeatability(address currentAddress, address[] memory list) internal pure returns (bool) {
address tempAddress;
for (uint i = 0; i < list.length; i++) {
tempAddress = list[i];
if (tempAddress == address(0)) {
break;
}
if (tempAddress == currentAddress) {
return false;
}
}
return true;
}
function repeatability(address[] memory list) internal pure returns (bool) {
for (uint i = 0; i < list.length; i++) {
address address1 = list[i];
if (address1 == address(0)) {
break;
}
for (uint j = i + 1; j < list.length; j++) {
address address2 = list[j];
if (address2 == address(0)) {
break;
}
if (address1 == address2) {
return false;
}
}
}
return true;
}
function ecrecovery(bytes32 hash, bytes memory sig) internal pure returns (address) {
bytes32 r;
bytes32 s;
uint8 v;
if (sig.length != signatureLength) {
return address(0);
}
assembly {
r := mload(add(sig, 32))
s := mload(add(sig, 64))
v := byte(0, mload(add(sig, 96)))
}
if(uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {
return address(0);
}
// https://github.com/ethereum/go-ethereum/issues/2053
if (v < 27) {
v += 27;
}
if (v != 27 && v != 28) {
return address(0);
}
return ecrecover(hash, v, r, s);
}
function preValidateAddsAndRemoves(address[] memory adds, address[] memory removes) internal view {
// 校验adds
uint addLen = adds.length;
for (uint i = 0; i < addLen; i++) {
address add = adds[i];
require(add != address(0), "ERROR: Detected zero address in adds");
require(managers[add] == 0, "The address list that is being added already exists as a manager");
}
require(repeatability(adds), "Duplicate parameters for the address to join");
// 校验合约创建者不能被添加
require(validateRepeatability(owner, adds), "Contract creator cannot act as manager");
// 校验removes
require(repeatability(removes), "Duplicate parameters for the address to exit");
uint removeLen = removes.length;
for (uint i = 0; i < removeLen; i++) {
address remove = removes[i];
require(seedManagers[remove] == 0, "Can't exit seed manager");
require(managers[remove] == 1, "There are addresses in the exiting address list that are not manager");
}
require(managerArray.length + adds.length - removes.length <= max_managers, "Exceeded the maximum number of managers");
}
/*
根据 `当前有效管理员数量` 和 `最小签名比例` 计算最小签名数量,向上取整
*/
function calMinSignatures(uint managerCounts) internal pure returns (uint8) {
require(managerCounts > 0, "Manager Can't empty.");
uint numerator = rate * managerCounts + DENOMINATOR - 1;
return uint8(numerator / DENOMINATOR);
}
function removeManager(address[] memory removes) internal {
if (removes.length == 0) {
return;
}
for (uint i = 0; i < removes.length; i++) {
delete managers[removes[i]];
}
// 遍历修改前管理员列表
for (uint i = 0; i < managerArray.length; i++) {
if (managers[managerArray[i]] == 0) {
delete managerArray[i];
}
}
uint tempIndex = 0x10;
for (uint i = 0; i<managerArray.length; i++) {
address temp = managerArray[i];
if (temp == address(0)) {
if (tempIndex == 0x10) tempIndex = i;
continue;
} else if (tempIndex != 0x10) {
managerArray[tempIndex] = temp;
tempIndex++;
}
}
managerArray.length -= removes.length;
}
function addManager(address[] memory adds) internal {
if (adds.length == 0) {
return;
}
for (uint i = 0; i < adds.length; i++) {
address add = adds[i];
if(managers[add] == 0) {
managers[add] = 1;
managerArray.push(add);
}
}
}
function completeTx(string memory txKey, bytes32 keccak256Hash, uint8 e) internal {
completedTxs[txKey] = e;
completedKeccak256s[keccak256Hash] = e;
}
function validateTransferERC20(address ERC20, address to, uint256 amount) internal view {
require(to != address(0), "ERC20: transfer to the zero address");
require(address(this) != ERC20, "Do nothing by yourself");
require(ERC20.isContract(), "The address is not a contract address");
if (isMinterERC20(ERC20)) {
// 定制ERC20验证结束
return;
}
IERC20 token = IERC20(ERC20);
uint256 balance = token.balanceOf(address(this));
require(balance >= amount, "No enough balance of token");
}
function transferERC20(address ERC20, address to, uint256 amount) internal {
if (isMinterERC20(ERC20)) {
// 定制的ERC20,跨链转入以太坊网络即增发
IERC20Minter minterToken = IERC20Minter(ERC20);
minterToken.mint(to, amount);
return;
}
IERC20 token = IERC20(ERC20);
uint256 balance = token.balanceOf(address(this));
require(balance >= amount, "No enough balance of token");
token.safeTransfer(to, amount, bugERC20s);
}
function closeUpgrade() public isOwner {
require(upgrade, "Denied");
upgrade = false;
}
function upgradeContractS1() public isOwner {
require(upgrade, "Denied");
require(upgradeContractAddress != address(0), "ERROR: transfer to the zero address");
upgradeContractAddress.sendValue(address(this).balance);
}
function upgradeContractS2(address ERC20) public isOwner {
require(upgrade, "Denied");
require(upgradeContractAddress != address(0), "ERROR: transfer to the zero address");
require(address(this) != ERC20, "Do nothing by yourself");
require(ERC20.isContract(), "The address is not a contract address");
IERC20 token = IERC20(ERC20);
uint256 balance = token.balanceOf(address(this));
if (balance > 0) {
token.safeTransfer(upgradeContractAddress, balance, bugERC20s);
}
if (isMinterERC20(ERC20)) {
// 定制的ERC20,转移增发销毁权限到新多签合约
IERC20Minter minterToken = IERC20Minter(ERC20);
minterToken.replaceMinter(upgradeContractAddress);
}
}
// 是否定制的ERC20
function isMinterERC20(address ERC20) public view returns (bool) {
return minterERC20s[ERC20] > 0;
}
// 登记定制的ERC20
function registerMinterERC20(address ERC20) public isOwner {
require(address(this) != ERC20, "Do nothing by yourself");
require(ERC20.isContract(), "The address is not a contract address");
require(!isMinterERC20(ERC20), "This address has already been registered");
minterERC20s[ERC20] = 1;
}
// 取消登记定制的ERC20
function unregisterMinterERC20(address ERC20) public isOwner {
require(isMinterERC20(ERC20), "This address is not registered");
delete minterERC20s[ERC20];
}
// 登记BUG的ERC20
function registerBugERC20(address bug) public isOwner {
require(address(this) != bug, "Do nothing by yourself");
require(bug.isContract(), "The address is not a contract address");
bugERC20s[bug] = 1;
}
// 取消登记BUG的ERC20
function unregisterBugERC20(address bug) public isOwner {
bugERC20s[bug] = 0;
}
// 从eth网络跨链转出资产(ETH or ERC20)
function crossOut(string memory to, uint256 amount, address ERC20) public payable returns (bool) {
address from = msg.sender;
require(amount > 0, "ERROR: Zero amount");
if (ERC20 != address(0)) {
require(msg.value == 0, "ERC20: Does not accept Ethereum Coin");
require(ERC20.isContract(), "The address is not a contract address");
IERC20 token = IERC20(ERC20);
uint256 allowance = token.allowance(from, address(this));
require(allowance >= amount, "No enough amount for authorization");
uint256 fromBalance = token.balanceOf(from);
require(fromBalance >= amount, "No enough balance of the token");
token.safeTransferFrom(from, address(this), amount, bugERC20s);
if (isMinterERC20(ERC20)) {
// 定制的ERC20,从以太坊网络跨链转出token即销毁
IERC20Minter minterToken = IERC20Minter(ERC20);
minterToken.burn(amount);
}
} else {
require(msg.value == amount, "Inconsistency Ethereum amount");
}
emit CrossOutFunds(from, to, amount, ERC20);
return true;
}
// 从eth网络跨链转出资产(ETH or ERC20)
function crossOutII(string memory to, uint256 amount, address ERC20, bytes memory data) public payable returns (bool) {
require(openCrossOutII, "CrossOutII: Not open");
address from = msg.sender;
uint erc20Amount = 0;
if (ERC20 != address(0)) {
require(amount > 0, "ERROR: Zero amount");
require(ERC20.isContract(), "The address is not a contract address");
IERC20 token = IERC20(ERC20);
uint256 allowance = token.allowance(from, address(this));
require(allowance >= amount, "No enough amount for authorization");
uint256 fromBalance = token.balanceOf(from);
require(fromBalance >= amount, "No enough balance of the token");
token.safeTransferFrom(from, address(this), amount, bugERC20s);
if (isMinterERC20(ERC20)) {
// 定制的ERC20,从以太坊网络跨链转出token即销毁
IERC20Minter minterToken = IERC20Minter(ERC20);
minterToken.burn(amount);
}
erc20Amount = amount;
} else {
require(msg.value > 0 && amount == 0, "CrossOutII: Illegal eth amount");
}
emit CrossOutIIFunds(from, to, erc20Amount, ERC20, msg.value, data);
return true;
}
function setCrossOutII(bool _open) public isOwner {
openCrossOutII = _open;
}
function isCompletedTx(string memory txKey) public view returns (bool){
return completedTxs[txKey] > 0;
}
function ifManager(address _manager) public view returns (bool) {
return managers[_manager] == 1;
}
function allManagers() public view returns (address[] memory) {
return managerArray;
}
event DepositFunds(address from, uint amount);
event CrossOutFunds(address from, string to, uint amount, address ERC20);
event CrossOutIIFunds(address from, string to, uint amount, address ERC20, uint ethAmount, bytes data);
event TransferFunds(address to, uint amount);
event TxWithdrawCompleted(string txKey);
event TxManagerChangeCompleted(string txKey);
event TxUpgradeCompleted(string txKey);
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"uint256","name":"_chainid","type":"uint256"},{"internalType":"address[]","name":"_managers","type":"address[]"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"string","name":"to","type":"string"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"address","name":"ERC20","type":"address"}],"name":"CrossOutFunds","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"string","name":"to","type":"string"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"address","name":"ERC20","type":"address"},{"indexed":false,"internalType":"uint256","name":"ethAmount","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"}],"name":"CrossOutIIFunds","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"DepositFunds","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TransferFunds","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"txKey","type":"string"}],"name":"TxManagerChangeCompleted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"txKey","type":"string"}],"name":"TxUpgradeCompleted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"txKey","type":"string"}],"name":"TxWithdrawCompleted","type":"event"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"constant":true,"inputs":[],"name":"allManagers","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"bugERC20s","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"closeUpgrade","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"string","name":"txKey","type":"string"},{"internalType":"address[]","name":"adds","type":"address[]"},{"internalType":"address[]","name":"removes","type":"address[]"},{"internalType":"uint8","name":"count","type":"uint8"},{"internalType":"bytes","name":"signatures","type":"bytes"}],"name":"createOrSignManagerChange","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"string","name":"txKey","type":"string"},{"internalType":"address payable","name":"upgradeContract","type":"address"},{"internalType":"bytes","name":"signatures","type":"bytes"}],"name":"createOrSignUpgrade","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"string","name":"txKey","type":"string"},{"internalType":"address payable","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bool","name":"isERC20","type":"bool"},{"internalType":"address","name":"ERC20","type":"address"},{"internalType":"bytes","name":"signatures","type":"bytes"}],"name":"createOrSignWithdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"string","name":"to","type":"string"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"ERC20","type":"address"}],"name":"crossOut","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"internalType":"string","name":"to","type":"string"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"ERC20","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"crossOutII","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"current_min_signatures","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"hashSalt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_manager","type":"address"}],"name":"ifManager","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"string","name":"txKey","type":"string"}],"name":"isCompletedTx","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"ERC20","type":"address"}],"name":"isMinterERC20","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"openCrossOutII","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"bug","type":"address"}],"name":"registerBugERC20","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"ERC20","type":"address"}],"name":"registerMinterERC20","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"bool","name":"_open","type":"bool"}],"name":"setCrossOutII","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"bug","type":"address"}],"name":"unregisterBugERC20","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"ERC20","type":"address"}],"name":"unregisterMinterERC20","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"upgrade","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"upgradeContractAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"upgradeContractS1","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"ERC20","type":"address"}],"name":"upgradeContractS2","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
6080604052600180546001600160a81b0319168155600c805460ff191690911790553480156200002e57600080fd5b506040516200492f3803806200492f833981810160405260408110156200005457600080fd5b8151602083018051604051929492938301929190846401000000008211156200007c57600080fd5b9083019060208201858111156200009257600080fd5b8251866020820283011164010000000082111715620000b057600080fd5b82525081516020918201928201910280838360005b83811015620000df578181015183820152602001620000c5565b505050509050016040525050506001600081905550600f81511115620001375760405162461bcd60e51b8152600401808060200182810382526027815260200180620048e26027913960400191505060405180910390fd5b6003815110156200017a5760405162461bcd60e51b8152600401808060200182810382526027815260200180620048bb6027913960400191505060405180910390fd5b60038054610100600160a81b03191633610100021790558051620001a69060079060208401906200042d565b5060005b60075460ff82161015620003295760006001600160a01b031660078260ff1681548110620001d457fe5b6000918252602090912001546001600160a01b031614156200023d576040805162461bcd60e51b815260206004820152601a60248201527f436f6e7374727563746f723a205a65726f20616464726573732e000000000000604482015290519081900360640190fd5b60016006600060078460ff16815481106200025457fe5b6000918252602080832091909101546001600160a01b031683528201929092526040018120805460ff191660ff938416179055600780546001936004939291908616908110620002a057fe5b6000918252602080832091909101546001600160a01b031683528201929092526040019020805460ff191660ff928316179055600780546005928416908110620002e657fe5b6000918252602080832090910154835460018181018655948452919092200180546001600160a01b0319166001600160a01b0390921691909117905501620001aa565b5060035461010090046001600160a01b031660009081526006602052604090205460ff16156200038b5760405162461bcd60e51b8152600401808060200182810382526026815260200180620049096026913960400191505060405180910390fd5b600754620003a2906001600160e01b03620003c616565b6003805460ff191660ff9290921691909117815560029283020190915550620004c1565b60008082116200041d576040805162461bcd60e51b815260206004820152601460248201527f4d616e616765722043616e277420656d7074792e000000000000000000000000604482015290519081900360640190fd5b5060646042919091026063010490565b82805482825590600052602060002090810192821562000485579160200282015b828111156200048557825182546001600160a01b0319166001600160a01b039091161782556020909201916001909101906200044e565b506200049392915062000497565b5090565b620004be91905b80821115620004935780546001600160a01b03191681556001016200049e565b90565b6143ea80620004d16000396000f3fe60806040526004361061014a5760003560e01c80638da5cb5b116100b6578063b032531f1161006f578063b032531f14610b5f578063b91f4bec14610b86578063d4cacbaa14610bcf578063d55ec69714610be4578063dbaeca3114610bf9578063e079cee914610c255761014a565b80638da5cb5b146108725780639532d8f8146108875780639c30b35e146108ba5780639dcdc9781461091f578063a5e399b314610952578063ab6c2b1014610a035761014a565b806338615bb01161010857806338615bb01461052157806339269eb01461065f578063408e8b7a146106925780635bda3fcf146107d95780636a7142e11461080c57806375173b701461083f5761014a565b8062719226146101865780630889d1f0146103cd5780631dda9c05146104935780632e44d8a8146104a857806330b2d84d146104bd57806334774b71146104ee575b6040805133815234602082015281517fd241e73300212f6df233a8e6d3146b88a9d4964e06621d54b5ff6afeba7b1b88929181900390910190a1005b34801561019257600080fd5b506103cb600480360360a08110156101a957600080fd5b810190602081018135600160201b8111156101c357600080fd5b8201836020820111156101d557600080fd5b803590602001918460018302840111600160201b831117156101f657600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b81111561024857600080fd5b82018360208201111561025a57600080fd5b803590602001918460208302840111600160201b8311171561027b57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b8111156102ca57600080fd5b8201836020820111156102dc57600080fd5b803590602001918460208302840111600160201b831117156102fd57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929560ff853516959094909350604081019250602001359050600160201b81111561035757600080fd5b82018360208201111561036957600080fd5b803590602001918460018302840111600160201b8311171561038a57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610c3a945050505050565b005b61047f600480360360608110156103e357600080fd5b810190602081018135600160201b8111156103fd57600080fd5b82018360208201111561040f57600080fd5b803590602001918460018302840111600160201b8311171561043057600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955050823593505050602001356001600160a01b0316611074565b604080519115158252519081900360200190f35b34801561049f57600080fd5b506103cb6114c0565b3480156104b457600080fd5b5061047f6115bb565b3480156104c957600080fd5b506104d26115c4565b604080516001600160a01b039092168252519081900360200190f35b3480156104fa57600080fd5b506103cb6004803603602081101561051157600080fd5b50356001600160a01b03166115d8565b61047f6004803603608081101561053757600080fd5b810190602081018135600160201b81111561055157600080fd5b82018360208201111561056357600080fd5b803590602001918460018302840111600160201b8311171561058457600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092958435956001600160a01b0360208701351695919450925060608101915060400135600160201b8111156105eb57600080fd5b8201836020820111156105fd57600080fd5b803590602001918460018302840111600160201b8311171561061e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611737945050505050565b34801561066b57600080fd5b506103cb6004803603602081101561068257600080fd5b50356001600160a01b0316611c19565b34801561069e57600080fd5b506103cb600480360360608110156106b557600080fd5b810190602081018135600160201b8111156106cf57600080fd5b8201836020820111156106e157600080fd5b803590602001918460018302840111600160201b8311171561070257600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092956001600160a01b03853516959094909350604081019250602001359050600160201b81111561076557600080fd5b82018360208201111561077757600080fd5b803590602001918460018302840111600160201b8311171561079857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611d33945050505050565b3480156107e557600080fd5b506103cb600480360360208110156107fc57600080fd5b50356001600160a01b0316612157565b34801561081857600080fd5b5061047f6004803603602081101561082f57600080fd5b50356001600160a01b03166123ff565b34801561084b57600080fd5b5061047f6004803603602081101561086257600080fd5b50356001600160a01b0316612423565b34801561087e57600080fd5b506104d2612444565b34801561089357600080fd5b506103cb600480360360208110156108aa57600080fd5b50356001600160a01b0316612458565b3480156108c657600080fd5b506108cf6124cb565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561090b5781810151838201526020016108f3565b505050509050019250505060405180910390f35b34801561092b57600080fd5b506103cb6004803603602081101561094257600080fd5b50356001600160a01b031661252e565b34801561095e57600080fd5b5061047f6004803603602081101561097557600080fd5b810190602081018135600160201b81111561098f57600080fd5b8201836020820111156109a157600080fd5b803590602001918460018302840111600160201b831117156109c257600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506125fb945050505050565b348015610a0f57600080fd5b506103cb600480360360c0811015610a2657600080fd5b810190602081018135600160201b811115610a4057600080fd5b820183602082011115610a5257600080fd5b803590602001918460018302840111600160201b83111715610a7357600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092956001600160a01b0385358116966020870135966040810135151596506060810135909216945091925060a081019060800135600160201b811115610aeb57600080fd5b820183602082011115610afd57600080fd5b803590602001918460018302840111600160201b83111715610b1e57600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955061266b945050505050565b348015610b6b57600080fd5b50610b74612bdc565b60408051918252519081900360200190f35b348015610b9257600080fd5b50610bb960048036036020811015610ba957600080fd5b50356001600160a01b0316612be2565b6040805160ff9092168252519081900360200190f35b348015610bdb57600080fd5b506103cb612bf7565b348015610bf057600080fd5b5061047f612c95565b348015610c0557600080fd5b506103cb60048036036020811015610c1c57600080fd5b50351515612c9e565b348015610c3157600080fd5b50610bb9612d03565b3360009081526006602052604090205460ff16600114610ca1576040805162461bcd60e51b815260206004820152601b60248201527f4f6e6c79206d616e616765722063616e20657865637574652069740000000000604482015290519081900360640190fd5b8451604014610cf3576040805162461bcd60e51b8152602060048201526019602482015278119a5e1959081b195b99dd1a081bd9881d1e12d95e4e880d8d603a1b604482015290519081900360640190fd5b600084511180610d04575060008351115b610d3f5760405162461bcd60e51b81526004018080602001828103825260288152602001806142cd6028913960400191505060405180910390fd5b6009856040518082805190602001908083835b60208310610d715780518252601f199092019160209182019101610d52565b51815160209384036101000a600019018019909216911617905292019485525060405193849003019092205460ff16159150610df69050576040805162461bcd60e51b815260206004820152601e60248201527f5472616e73616374696f6e20686173206265656e20636f6d706c657465640000604482015290519081900360640190fd5b610e008484612d0c565b6000858584866002546040516020018086805190602001908083835b60208310610e3b5780518252601f199092019160209182019101610e1c565b51815160209384036101000a60001901801990921691161790528851919093019288810192500280838360005b83811015610e80578181015183820152602001610e68565b505050509050018460ff1660ff1660f81b8152600101838051906020019060200280838360005b83811015610ebf578181015183820152602001610ea7565b50505050919091019283525050604080518083038152602092830182528051908301206000818152600890935291205490955060ff16159350610f4292505050576040805162461bcd60e51b8152602060048201526012602482015271496e76616c6964207369676e61747572657360701b604482015290519081900360640190fd5b610f4c8183613011565b610f95576040805162461bcd60e51b815260206004820152601560248201527415985b1a59081cda59db985d1d5c995cc819985a5b605a1b604482015290519081900360640190fd5b610f9e84613089565b610fa785613215565b600754610fb3906132dd565b6003805460ff191660ff92909216919091179055610fd38682600161333a565b7fac9b82db4e104d515319a481096bfd91a4f40ee10837d5a2c8d51b9a03dc48ae866040518080602001828103825283818151815260200191508051906020019080838360005b8381101561103257818101518382015260200161101a565b50505050905090810190601f16801561105f5780820380516001836020036101000a031916815260200191505b509250505060405180910390a1505050505050565b600033836110be576040805162461bcd60e51b815260206004820152601260248201527111549493d48e8816995c9bc8185b5bdd5b9d60721b604482015290519081900360640190fd5b6001600160a01b0383161561138c57341561110a5760405162461bcd60e51b815260040180806020018281038252602481526020018061412e6024913960400191505060405180910390fd5b61111c836001600160a01b03166133ce565b6111575760405162461bcd60e51b81526004018080602001828103825260258152602001806143916025913960400191505060405180910390fd5b60408051636eb1769f60e11b81526001600160a01b038381166004830152306024830152915185926000929084169163dd62ed3e91604480820192602092909190829003018186803b1580156111ac57600080fd5b505afa1580156111c0573d6000803e3d6000fd5b505050506040513d60208110156111d657600080fd5b50519050858110156112195760405162461bcd60e51b81526004018080602001828103825260228152602001806142486022913960400191505060405180910390fd5b6000826001600160a01b03166370a08231856040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561127157600080fd5b505afa158015611285573d6000803e3d6000fd5b505050506040513d602081101561129b57600080fd5b50519050868110156112f4576040805162461bcd60e51b815260206004820152601e60248201527f4e6f20656e6f7567682062616c616e6365206f662074686520746f6b656e0000604482015290519081900360640190fd5b6113116001600160a01b03841685308a600b63ffffffff61340a16565b61131a866123ff565b15611384576000869050806001600160a01b03166342966c68896040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561136a57600080fd5b505af115801561137e573d6000803e3d6000fd5b50505050505b5050506113e0565b8334146113e0576040805162461bcd60e51b815260206004820152601d60248201527f496e636f6e73697374656e637920457468657265756d20616d6f756e74000000604482015290519081900360640190fd5b7f5ddf9724d8fe5d9e12499be2867f93d41a582733dcd65f74a486ad7e306671468186868660405180856001600160a01b03166001600160a01b0316815260200180602001848152602001836001600160a01b03166001600160a01b03168152602001828103825285818151815260200191508051906020019080838360005b83811015611478578181015183820152602001611460565b50505050905090810190601f1680156114a55780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a1506001949350505050565b60035461010090046001600160a01b03163314611512576040805162461bcd60e51b81526020600482015260196024820152600080516020614321833981519152604482015290519081900360640190fd5b60015460ff16611552576040805162461bcd60e51b815260206004820152600660248201526511195b9a595960d21b604482015290519081900360640190fd5b60015461010090046001600160a01b031661159e5760405162461bcd60e51b815260040180806020018281038252602381526020018061426a6023913960400191505060405180910390fd5b6001546115b99061010090046001600160a01b03164761346c565b565b600c5460ff1681565b60015461010090046001600160a01b031681565b60035461010090046001600160a01b0316331461162a576040805162461bcd60e51b81526020600482015260196024820152600080516020614321833981519152604482015290519081900360640190fd5b306001600160a01b0382161415611681576040805162461bcd60e51b81526020600482015260166024820152752237903737ba3434b73390313c903cb7bab939b2b63360511b604482015290519081900360640190fd5b611693816001600160a01b03166133ce565b6116ce5760405162461bcd60e51b81526004018080602001828103825260258152602001806143916025913960400191505060405180910390fd5b6116d7816123ff565b156117135760405162461bcd60e51b815260040180806020018281038252602881526020018061407a6028913960400191505060405180910390fd5b6001600160a01b03166000908152600a60205260409020805460ff19166001179055565b600c5460009060ff16611788576040805162461bcd60e51b815260206004820152601460248201527321b937b9b9a7baba24a49d102737ba1037b832b760611b604482015290519081900360640190fd5b3360006001600160a01b03851615611a6957600086116117e4576040805162461bcd60e51b815260206004820152601260248201527111549493d48e8816995c9bc8185b5bdd5b9d60721b604482015290519081900360640190fd5b6117f6856001600160a01b03166133ce565b6118315760405162461bcd60e51b81526004018080602001828103825260258152602001806143916025913960400191505060405180910390fd5b60408051636eb1769f60e11b81526001600160a01b038481166004830152306024830152915187926000929084169163dd62ed3e91604480820192602092909190829003018186803b15801561188657600080fd5b505afa15801561189a573d6000803e3d6000fd5b505050506040513d60208110156118b057600080fd5b50519050878110156118f35760405162461bcd60e51b81526004018080602001828103825260228152602001806142486022913960400191505060405180910390fd5b6000826001600160a01b03166370a08231866040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561194b57600080fd5b505afa15801561195f573d6000803e3d6000fd5b505050506040513d602081101561197557600080fd5b50519050888110156119ce576040805162461bcd60e51b815260206004820152601e60248201527f4e6f20656e6f7567682062616c616e6365206f662074686520746f6b656e0000604482015290519081900360640190fd5b6119eb6001600160a01b03841686308c600b63ffffffff61340a16565b6119f4886123ff565b15611a5e576000889050806001600160a01b03166342966c688b6040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611a4457600080fd5b505af1158015611a58573d6000803e3d6000fd5b50505050505b889350505050611ac8565b600034118015611a77575085155b611ac8576040805162461bcd60e51b815260206004820152601e60248201527f43726f73734f757449493a20496c6c6567616c2065746820616d6f756e740000604482015290519081900360640190fd5b7f692e6a6e27573f2a2a757e34cb16ae101c5fca8834f9b8a6cdbcf64b8450d87082888388348960405180876001600160a01b03166001600160a01b0316815260200180602001868152602001856001600160a01b03166001600160a01b0316815260200184815260200180602001838103835288818151815260200191508051906020019080838360005b83811015611b6c578181015183820152602001611b54565b50505050905090810190601f168015611b995780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b83811015611bcc578181015183820152602001611bb4565b50505050905090810190601f168015611bf95780820380516001836020036101000a031916815260200191505b509850505050505050505060405180910390a15060019695505050505050565b60035461010090046001600160a01b03163314611c6b576040805162461bcd60e51b81526020600482015260196024820152600080516020614321833981519152604482015290519081900360640190fd5b306001600160a01b0382161415611cc2576040805162461bcd60e51b81526020600482015260166024820152752237903737ba3434b73390313c903cb7bab939b2b63360511b604482015290519081900360640190fd5b611cd4816001600160a01b03166133ce565b611d0f5760405162461bcd60e51b81526004018080602001828103825260258152602001806143916025913960400191505060405180910390fd5b6001600160a01b03166000908152600b60205260409020805460ff19166001179055565b3360009081526006602052604090205460ff16600114611d9a576040805162461bcd60e51b815260206004820152601b60248201527f4f6e6c79206d616e616765722063616e20657865637574652069740000000000604482015290519081900360640190fd5b8251604014611dec576040805162461bcd60e51b8152602060048201526019602482015278119a5e1959081b195b99dd1a081bd9881d1e12d95e4e880d8d603a1b604482015290519081900360640190fd5b6009836040518082805190602001908083835b60208310611e1e5780518252601f199092019160209182019101611dff565b51815160209384036101000a600019018019909216911617905292019485525060405193849003019092205460ff16159150611ea39050576040805162461bcd60e51b815260206004820152601e60248201527f5472616e73616374696f6e20686173206265656e20636f6d706c657465640000604482015290519081900360640190fd5b60015460ff1615611ef2576040805162461bcd60e51b8152602060048201526014602482015273125d081a185cc81899595b881d5c19dc9859195960621b604482015290519081900360640190fd5b611f04826001600160a01b03166133ce565b611f3f5760405162461bcd60e51b81526004018080602001828103825260258152602001806143916025913960400191505060405180910390fd5b600083836002546040516020018084805190602001908083835b60208310611f785780518252601f199092019160209182019101611f59565b51815160209384036101000a600019018019909216911617905260609690961b6bffffffffffffffffffffffff19169201918252506014808201939093526040805180830390940184526034909101815282519284019290922060008181526008909452919092205490935060ff161591506120329050576040805162461bcd60e51b8152602060048201526012602482015271496e76616c6964207369676e61747572657360701b604482015290519081900360640190fd5b61203c8183613011565b612085576040805162461bcd60e51b815260206004820152601560248201527415985b1a59081cda59db985d1d5c995cc819985a5b605a1b604482015290519081900360640190fd5b6001805460ff19168117610100600160a81b0319166101006001600160a01b038616021781556120b8908590839061333a565b7f5e06c4b22547d430736ce834764dbfee08f1c4cf7ae3d53178aa56effa593ed0846040518080602001828103825283818151815260200191508051906020019080838360005b838110156121175781810151838201526020016120ff565b50505050905090810190601f1680156121445780820380516001836020036101000a031916815260200191505b509250505060405180910390a150505050565b60035461010090046001600160a01b031633146121a9576040805162461bcd60e51b81526020600482015260196024820152600080516020614321833981519152604482015290519081900360640190fd5b60015460ff166121e9576040805162461bcd60e51b815260206004820152600660248201526511195b9a595960d21b604482015290519081900360640190fd5b60015461010090046001600160a01b03166122355760405162461bcd60e51b815260040180806020018281038252602381526020018061426a6023913960400191505060405180910390fd5b306001600160a01b038216141561228c576040805162461bcd60e51b81526020600482015260166024820152752237903737ba3434b73390313c903cb7bab939b2b63360511b604482015290519081900360640190fd5b61229e816001600160a01b03166133ce565b6122d95760405162461bcd60e51b81526004018080602001828103825260258152602001806143916025913960400191505060405180910390fd5b604080516370a0823160e01b8152306004820152905182916000916001600160a01b038416916370a08231916024808301926020929190829003018186803b15801561232457600080fd5b505afa158015612338573d6000803e3d6000fd5b505050506040513d602081101561234e57600080fd5b50519050801561237f5760015461237f906001600160a01b038481169161010090041683600b63ffffffff61355116565b612388836123ff565b156123fa57600154604080516301fc6bd160e21b81526001600160a01b0361010090930483166004820152905185928316916307f1af4491602480830192600092919082900301818387803b1580156123e057600080fd5b505af11580156123f4573d6000803e3d6000fd5b50505050505b505050565b6001600160a01b0381166000908152600a602052604090205460ff1615155b919050565b6001600160a01b031660009081526006602052604090205460ff1660011490565b60035461010090046001600160a01b031681565b60035461010090046001600160a01b031633146124aa576040805162461bcd60e51b81526020600482015260196024820152600080516020614321833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152600b60205260409020805460ff19169055565b6060600780548060200260200160405190810160405280929190818152602001828054801561252357602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311612505575b505050505090505b90565b60035461010090046001600160a01b03163314612580576040805162461bcd60e51b81526020600482015260196024820152600080516020614321833981519152604482015290519081900360640190fd5b612589816123ff565b6125da576040805162461bcd60e51b815260206004820152601e60248201527f546869732061646472657373206973206e6f7420726567697374657265640000604482015290519081900360640190fd5b6001600160a01b03166000908152600a60205260409020805460ff19169055565b6000806009836040518082805190602001908083835b602083106126305780518252601f199092019160209182019101612611565b51815160209384036101000a600019018019909216911617905292019485525060405193849003019092205460ff1692909211949350505050565b600260005414156126c3576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b600260009081553381526006602052604090205460ff1660011461272e576040805162461bcd60e51b815260206004820152601b60248201527f4f6e6c79206d616e616765722063616e20657865637574652069740000000000604482015290519081900360640190fd5b8551604014612780576040805162461bcd60e51b8152602060048201526019602482015278119a5e1959081b195b99dd1a081bd9881d1e12d95e4e880d8d603a1b604482015290519081900360640190fd5b6001600160a01b0385166127c55760405162461bcd60e51b81526004018080602001828103825260268152602001806140a26026913960400191505060405180910390fd5b600084116128045760405162461bcd60e51b81526004018080602001828103825260288152602001806142206028913960400191505060405180910390fd5b6009866040518082805190602001908083835b602083106128365780518252601f199092019160209182019101612817565b51815160209384036101000a600019018019909216911617905292019485525060405193849003019092205460ff161591506128bb9050576040805162461bcd60e51b815260206004820152601e60248201527f5472616e73616374696f6e20686173206265656e20636f6d706c657465640000604482015290519081900360640190fd5b82156128d1576128cc8286866135a4565b612910565b834710156129105760405162461bcd60e51b815260040180806020018281038252603f815260200180614152603f913960400191505060405180910390fd5b600086868686866002546040516020018087805190602001908083835b6020831061294c5780518252601f19909201916020918201910161292d565b51815160209384036101000a60001901801990921691161790526060998a1b6bffffffffffffffffffffffff1990811692909401918252601482019890985295151560f81b6034870152509290951b9091166035830152604980830191909152604080518084039092018252606990920182528051908301206000818152600890935291205490935060ff16159150612a239050576040805162461bcd60e51b8152602060048201526012602482015271496e76616c6964207369676e61747572657360701b604482015290519081900360640190fd5b612a2d8183613011565b612a76576040805162461bcd60e51b815260206004820152601560248201527415985b1a59081cda59db985d1d5c995cc819985a5b605a1b604482015290519081900360640190fd5b8315612a8c57612a8783878761376e565b612b29565b84471015612acb5760405162461bcd60e51b815260040180806020018281038252603f815260200180614152603f913960400191505060405180910390fd5b612ae46001600160a01b0387168663ffffffff61346c16565b604080516001600160a01b03881681526020810187905281517fc95f8b91b103304386b955ef73fadac189f8ad66b33369b6c34a17a60db7bd0a929181900390910190a15b612b358782600161333a565b7f8ed8b1f0dd3babfdf1477ba2b27a5b0d2f1c9148448fd22cf2c75e658293c7b1876040518080602001828103825283818151815260200191508051906020019080838360005b83811015612b94578181015183820152602001612b7c565b50505050905090810190601f168015612bc15780820380516001836020036101000a031916815260200191505b509250505060405180910390a1505060016000555050505050565b60025481565b600b6020526000908152604090205460ff1681565b60035461010090046001600160a01b03163314612c49576040805162461bcd60e51b81526020600482015260196024820152600080516020614321833981519152604482015290519081900360640190fd5b60015460ff16612c89576040805162461bcd60e51b815260206004820152600660248201526511195b9a595960d21b604482015290519081900360640190fd5b6001805460ff19169055565b60015460ff1681565b60035461010090046001600160a01b03163314612cf0576040805162461bcd60e51b81526020600482015260196024820152600080516020614321833981519152604482015290519081900360640190fd5b600c805460ff1916911515919091179055565b60035460ff1681565b815160005b81811015612de4576000848281518110612d2757fe5b6020026020010151905060006001600160a01b0316816001600160a01b03161415612d835760405162461bcd60e51b81526004018080602001828103825260248152602001806141916024913960400191505060405180910390fd5b6001600160a01b03811660009081526006602052604090205460ff1615612ddb5760405162461bcd60e51b815260040180806020018281038252604081526020018061428d6040913960400191505060405180910390fd5b50600101612d11565b50612dee836138d6565b612e295760405162461bcd60e51b815260040180806020018281038252602c8152602001806140c8602c913960400191505060405180910390fd5b600354612e449061010090046001600160a01b0316846139a6565b612e7f5760405162461bcd60e51b815260040180806020018281038252602681526020018061436b6026913960400191505060405180910390fd5b612e88826138d6565b612ec35760405162461bcd60e51b815260040180806020018281038252602c8152602001806142f5602c913960400191505060405180910390fd5b815160005b81811015612fbf576000848281518110612ede57fe5b6020908102919091018101516001600160a01b0381166000908152600490925260409091205490915060ff1615612f5c576040805162461bcd60e51b815260206004820152601760248201527f43616e277420657869742073656564206d616e61676572000000000000000000604482015290519081900360640190fd5b6001600160a01b03811660009081526006602052604090205460ff16600114612fb65760405162461bcd60e51b81526004018080602001828103825260448152602001806141dc6044913960600191505060405180910390fd5b50600101612ec8565b50600f835185516007805490500103111561300b5760405162461bcd60e51b81526004018080602001828103825260278152602001806141b56027913960400191505060405180910390fd5b50505050565b60006103cf8251111561306b576040805162461bcd60e51b815260206004820152601d60248201527f4d6178206c656e677468206f66207369676e6174757265733a20393735000000604482015290519081900360640190fd5b60006130778484613a22565b60035460ff1611159150505b92915050565b805161309457613212565b60005b81518110156130e357600660008383815181106130b057fe5b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169055600101613097565b5060005b60075481101561315d57600660006007838154811061310257fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205460ff16613155576007818154811061313b57fe5b600091825260209091200180546001600160a01b03191690555b6001016130e7565b50601060005b6007548110156131fc5760006007828154811061317c57fe5b6000918252602090912001546001600160a01b03169050806131ab5782601014156131a5578192505b506131f4565b826010146131f25780600784815481106131c157fe5b600091825260209091200180546001600160a01b0319166001600160a01b0392909216919091179055600192909201915b505b600101613163565b5081516007805491909103906123fa9082614019565b50565b805161322057613212565b60005b81518110156132d957600082828151811061323a57fe5b6020908102919091018101516001600160a01b0381166000908152600690925260409091205490915060ff166132d0576001600160a01b0381166000818152600660205260408120805460ff191660019081179091556007805491820181559091527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6880180546001600160a01b03191690911790555b50600101613223565b5050565b600080821161332a576040805162461bcd60e51b815260206004820152601460248201527326b0b730b3b2b91021b0b713ba1032b6b83a3c9760611b604482015290519081900360640190fd5b5060646042919091026063010490565b806009846040518082805190602001908083835b6020831061336d5780518252601f19909201916020918201910161334e565b51815160209384036101000a600019018019909216911617905292019485525060408051948590038201909420805460ff1990811660ff97881617909155600097885260089091529290952080549092169390921692909217909155505050565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081811480159061340257508115155b949350505050565b604080516001600160a01b0386811660248301528516604482015260648082018590528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b17905261346590869083613bc5565b5050505050565b804710156134c1576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e6365000000604482015290519081900360640190fd5b6040516000906001600160a01b0384169083908381818185875af1925050503d806000811461350c576040519150601f19603f3d011682016040523d82523d6000602084013e613511565b606091505b50509050806123fa5760405162461bcd60e51b815260040180806020018281038252603a8152602001806140f4603a913960400191505060405180910390fd5b604080516001600160a01b038516602482015260448082018590528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b17905261300b90859083613bc5565b6001600160a01b0382166135e95760405162461bcd60e51b81526004018080602001828103825260238152602001806140576023913960400191505060405180910390fd5b306001600160a01b0384161415613640576040805162461bcd60e51b81526020600482015260166024820152752237903737ba3434b73390313c903cb7bab939b2b63360511b604482015290519081900360640190fd5b613652836001600160a01b03166133ce565b61368d5760405162461bcd60e51b81526004018080602001828103825260258152602001806143916025913960400191505060405180910390fd5b613696836123ff565b156136a0576123fa565b604080516370a0823160e01b8152306004820152905184916000916001600160a01b038416916370a08231916024808301926020929190829003018186803b1580156136eb57600080fd5b505afa1580156136ff573d6000803e3d6000fd5b505050506040513d602081101561371557600080fd5b5051905082811015613465576040805162461bcd60e51b815260206004820152601a60248201527f4e6f20656e6f7567682062616c616e6365206f6620746f6b656e000000000000604482015290519081900360640190fd5b613777836123ff565b156137ec57604080516340c10f1960e01b81526001600160a01b03848116600483015260248201849052915185928316916340c10f1991604480830192600092919082900301818387803b1580156137ce57600080fd5b505af11580156137e2573d6000803e3d6000fd5b50505050506123fa565b604080516370a0823160e01b8152306004820152905184916000916001600160a01b038416916370a08231916024808301926020929190829003018186803b15801561383757600080fd5b505afa15801561384b573d6000803e3d6000fd5b505050506040513d602081101561386157600080fd5b50519050828110156138ba576040805162461bcd60e51b815260206004820152601a60248201527f4e6f20656e6f7567682062616c616e6365206f6620746f6b656e000000000000604482015290519081900360640190fd5b6134656001600160a01b0383168585600b63ffffffff61355116565b6000805b825181101561399d5760008382815181106138f157fe5b6020026020010151905060006001600160a01b0316816001600160a01b0316141561391c575061399d565b600182015b845181101561399357600085828151811061393857fe5b6020026020010151905060006001600160a01b0316816001600160a01b031614156139635750613993565b806001600160a01b0316836001600160a01b0316141561398a57600094505050505061241e565b50600101613921565b50506001016138da565b50600192915050565b600080805b8351811015613a17578381815181106139c057fe5b6020026020010151915060006001600160a01b0316826001600160a01b031614156139ea57613a17565b846001600160a01b0316826001600160a01b03161415613a0f57600092505050613083565b6001016139ab565b506001949350505050565b805160009081908190613a3c90604163ffffffff613da516565b9050606081604051908082528060200260200182016040528015613a6a578160200160208202803883390190505b509050600080805b84811015613b5d576060613a8e8985604163ffffffff613dee16565b90506000613a9c8b83613e6e565b90506001600160a01b038116613aec576040805162461bcd60e51b815260206004820152601060248201526f29b4b3b730ba3ab932b99032b93937b960811b604482015290519081900360640190fd5b6001600160a01b03811660009081526006602052604090205460ff1660011415613b4c5785516001988901988501948291889160ff16908110613b2b57fe5b60200260200101906001600160a01b031690816001600160a01b0316815250505b505060419290920191600101613a72565b506000613b69846138d6565b90506060935080613bb8576040805162461bcd60e51b81526020600482015260146024820152735369676e617475726573206475706c696361746560601b604482015290519081900360640190fd5b5093979650505050505050565b613bd7836001600160a01b03166133ce565b613c28576040805162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015290519081900360640190fd5b60006060846001600160a01b0316846040518082805190602001908083835b60208310613c665780518252601f199092019160209182019101613c47565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613cc8576040519150601f19603f3d011682016040523d82523d6000602084013e613ccd565b606091505b509150915081613d24576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b6001600160a01b03851660009081526020849052604090205460ff1615613d4c5750506123fa565b80511561346557808060200190516020811015613d6857600080fd5b50516134655760405162461bcd60e51b815260040180806020018281038252602a815260200180614341602a913960400191505060405180910390fd5b6000613de783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613f77565b9392505050565b606081830184511015613e0057600080fd5b606082158015613e1b57604051915060208201604052613e65565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015613e54578051835260209283019201613e3c565b5050858452601f01601f1916604052505b50949350505050565b6000806000806041855114613e895760009350505050613083565b50505060208201516040830151606084015160001a7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0821115613ed25760009350505050613083565b601b8160ff161015613ee257601b015b8060ff16601b14158015613efa57508060ff16601c14155b15613f0b5760009350505050613083565b6040805160008152602080820180845289905260ff8416828401526060820186905260808201859052915160019260a0808401939192601f1981019281900390910190855afa158015613f62573d6000803e3d6000fd5b5050604051601f190151979650505050505050565b600081836140035760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613fc8578181015183820152602001613fb0565b50505050905090810190601f168015613ff55780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161400f57fe5b0495945050505050565b8154818355818111156123fa576000838152602090206123fa91810190830161252b91905b80821115614052576000815560010161403e565b509056fe45524332303a207472616e7366657220746f20746865207a65726f20616464726573735468697320616464726573732068617320616c7265616479206265656e207265676973746572656457697468647261773a207472616e7366657220746f20746865207a65726f20616464726573734475706c696361746520706172616d657465727320666f7220746865206164647265737320746f206a6f696e416464726573733a20756e61626c6520746f2073656e642076616c75652c20726563697069656e74206d6179206861766520726576657274656445524332303a20446f6573206e6f742061636365707420457468657265756d20436f696e5468697320636f6e7472616374206164647265737320646f6573206e6f7420686176652073756666696369656e742062616c616e6365206f662065746865724552524f523a204465746563746564207a65726f206164647265737320696e2061646473457863656564656420746865206d6178696d756d206e756d626572206f66206d616e61676572735468657265206172652061646472657373657320696e207468652065786974696e672061646472657373206c697374207468617420617265206e6f74206d616e616765725769746864726177616c20616d6f756e74206d7573742062652067726561746572207468616e20304e6f20656e6f75676820616d6f756e7420666f7220617574686f72697a6174696f6e4552524f523a207472616e7366657220746f20746865207a65726f20616464726573735468652061646472657373206c6973742074686174206973206265696e6720616464656420616c7265616479206578697374732061732061206d616e61676572546865726520617265206e6f206d616e6167657273206a6f696e696e67206f722065786974696e674475706c696361746520706172616d657465727320666f7220746865206164647265737320746f20657869744f6e6c79206f776e65722063616e2065786563757465206974000000000000005361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564436f6e74726163742063726561746f722063616e6e6f7420616374206173206d616e616765725468652061646472657373206973206e6f74206120636f6e74726163742061646472657373a265627a7a723158202ce81f3c4d9fec98f3d031400e8f6718da89f94f0974002eb64daeab9101d30264736f6c634300051100324e6f74207265616368696e6720746865206d696e206e756d626572206f66206d616e6167657273457863656564656420746865206d6178696d756d206e756d626572206f66206d616e6167657273436f6e74726163742063726561746f722063616e6e6f7420616374206173206d616e61676572000000000000000000000000000000000000000000000000000000000008275000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000003000000000000000000000000d87f2ad3ef011817319fd25454fc186ca71b3b560000000000000000000000000eb9e4427a0af1fa457230bef3481d028488363e000000000000000000000000d6946039519bccc0b302f89493bec60f4f0b4610
Deployed Bytecode
0x60806040526004361061014a5760003560e01c80638da5cb5b116100b6578063b032531f1161006f578063b032531f14610b5f578063b91f4bec14610b86578063d4cacbaa14610bcf578063d55ec69714610be4578063dbaeca3114610bf9578063e079cee914610c255761014a565b80638da5cb5b146108725780639532d8f8146108875780639c30b35e146108ba5780639dcdc9781461091f578063a5e399b314610952578063ab6c2b1014610a035761014a565b806338615bb01161010857806338615bb01461052157806339269eb01461065f578063408e8b7a146106925780635bda3fcf146107d95780636a7142e11461080c57806375173b701461083f5761014a565b8062719226146101865780630889d1f0146103cd5780631dda9c05146104935780632e44d8a8146104a857806330b2d84d146104bd57806334774b71146104ee575b6040805133815234602082015281517fd241e73300212f6df233a8e6d3146b88a9d4964e06621d54b5ff6afeba7b1b88929181900390910190a1005b34801561019257600080fd5b506103cb600480360360a08110156101a957600080fd5b810190602081018135600160201b8111156101c357600080fd5b8201836020820111156101d557600080fd5b803590602001918460018302840111600160201b831117156101f657600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b81111561024857600080fd5b82018360208201111561025a57600080fd5b803590602001918460208302840111600160201b8311171561027b57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b8111156102ca57600080fd5b8201836020820111156102dc57600080fd5b803590602001918460208302840111600160201b831117156102fd57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929560ff853516959094909350604081019250602001359050600160201b81111561035757600080fd5b82018360208201111561036957600080fd5b803590602001918460018302840111600160201b8311171561038a57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610c3a945050505050565b005b61047f600480360360608110156103e357600080fd5b810190602081018135600160201b8111156103fd57600080fd5b82018360208201111561040f57600080fd5b803590602001918460018302840111600160201b8311171561043057600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955050823593505050602001356001600160a01b0316611074565b604080519115158252519081900360200190f35b34801561049f57600080fd5b506103cb6114c0565b3480156104b457600080fd5b5061047f6115bb565b3480156104c957600080fd5b506104d26115c4565b604080516001600160a01b039092168252519081900360200190f35b3480156104fa57600080fd5b506103cb6004803603602081101561051157600080fd5b50356001600160a01b03166115d8565b61047f6004803603608081101561053757600080fd5b810190602081018135600160201b81111561055157600080fd5b82018360208201111561056357600080fd5b803590602001918460018302840111600160201b8311171561058457600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092958435956001600160a01b0360208701351695919450925060608101915060400135600160201b8111156105eb57600080fd5b8201836020820111156105fd57600080fd5b803590602001918460018302840111600160201b8311171561061e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611737945050505050565b34801561066b57600080fd5b506103cb6004803603602081101561068257600080fd5b50356001600160a01b0316611c19565b34801561069e57600080fd5b506103cb600480360360608110156106b557600080fd5b810190602081018135600160201b8111156106cf57600080fd5b8201836020820111156106e157600080fd5b803590602001918460018302840111600160201b8311171561070257600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092956001600160a01b03853516959094909350604081019250602001359050600160201b81111561076557600080fd5b82018360208201111561077757600080fd5b803590602001918460018302840111600160201b8311171561079857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611d33945050505050565b3480156107e557600080fd5b506103cb600480360360208110156107fc57600080fd5b50356001600160a01b0316612157565b34801561081857600080fd5b5061047f6004803603602081101561082f57600080fd5b50356001600160a01b03166123ff565b34801561084b57600080fd5b5061047f6004803603602081101561086257600080fd5b50356001600160a01b0316612423565b34801561087e57600080fd5b506104d2612444565b34801561089357600080fd5b506103cb600480360360208110156108aa57600080fd5b50356001600160a01b0316612458565b3480156108c657600080fd5b506108cf6124cb565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561090b5781810151838201526020016108f3565b505050509050019250505060405180910390f35b34801561092b57600080fd5b506103cb6004803603602081101561094257600080fd5b50356001600160a01b031661252e565b34801561095e57600080fd5b5061047f6004803603602081101561097557600080fd5b810190602081018135600160201b81111561098f57600080fd5b8201836020820111156109a157600080fd5b803590602001918460018302840111600160201b831117156109c257600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506125fb945050505050565b348015610a0f57600080fd5b506103cb600480360360c0811015610a2657600080fd5b810190602081018135600160201b811115610a4057600080fd5b820183602082011115610a5257600080fd5b803590602001918460018302840111600160201b83111715610a7357600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092956001600160a01b0385358116966020870135966040810135151596506060810135909216945091925060a081019060800135600160201b811115610aeb57600080fd5b820183602082011115610afd57600080fd5b803590602001918460018302840111600160201b83111715610b1e57600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955061266b945050505050565b348015610b6b57600080fd5b50610b74612bdc565b60408051918252519081900360200190f35b348015610b9257600080fd5b50610bb960048036036020811015610ba957600080fd5b50356001600160a01b0316612be2565b6040805160ff9092168252519081900360200190f35b348015610bdb57600080fd5b506103cb612bf7565b348015610bf057600080fd5b5061047f612c95565b348015610c0557600080fd5b506103cb60048036036020811015610c1c57600080fd5b50351515612c9e565b348015610c3157600080fd5b50610bb9612d03565b3360009081526006602052604090205460ff16600114610ca1576040805162461bcd60e51b815260206004820152601b60248201527f4f6e6c79206d616e616765722063616e20657865637574652069740000000000604482015290519081900360640190fd5b8451604014610cf3576040805162461bcd60e51b8152602060048201526019602482015278119a5e1959081b195b99dd1a081bd9881d1e12d95e4e880d8d603a1b604482015290519081900360640190fd5b600084511180610d04575060008351115b610d3f5760405162461bcd60e51b81526004018080602001828103825260288152602001806142cd6028913960400191505060405180910390fd5b6009856040518082805190602001908083835b60208310610d715780518252601f199092019160209182019101610d52565b51815160209384036101000a600019018019909216911617905292019485525060405193849003019092205460ff16159150610df69050576040805162461bcd60e51b815260206004820152601e60248201527f5472616e73616374696f6e20686173206265656e20636f6d706c657465640000604482015290519081900360640190fd5b610e008484612d0c565b6000858584866002546040516020018086805190602001908083835b60208310610e3b5780518252601f199092019160209182019101610e1c565b51815160209384036101000a60001901801990921691161790528851919093019288810192500280838360005b83811015610e80578181015183820152602001610e68565b505050509050018460ff1660ff1660f81b8152600101838051906020019060200280838360005b83811015610ebf578181015183820152602001610ea7565b50505050919091019283525050604080518083038152602092830182528051908301206000818152600890935291205490955060ff16159350610f4292505050576040805162461bcd60e51b8152602060048201526012602482015271496e76616c6964207369676e61747572657360701b604482015290519081900360640190fd5b610f4c8183613011565b610f95576040805162461bcd60e51b815260206004820152601560248201527415985b1a59081cda59db985d1d5c995cc819985a5b605a1b604482015290519081900360640190fd5b610f9e84613089565b610fa785613215565b600754610fb3906132dd565b6003805460ff191660ff92909216919091179055610fd38682600161333a565b7fac9b82db4e104d515319a481096bfd91a4f40ee10837d5a2c8d51b9a03dc48ae866040518080602001828103825283818151815260200191508051906020019080838360005b8381101561103257818101518382015260200161101a565b50505050905090810190601f16801561105f5780820380516001836020036101000a031916815260200191505b509250505060405180910390a1505050505050565b600033836110be576040805162461bcd60e51b815260206004820152601260248201527111549493d48e8816995c9bc8185b5bdd5b9d60721b604482015290519081900360640190fd5b6001600160a01b0383161561138c57341561110a5760405162461bcd60e51b815260040180806020018281038252602481526020018061412e6024913960400191505060405180910390fd5b61111c836001600160a01b03166133ce565b6111575760405162461bcd60e51b81526004018080602001828103825260258152602001806143916025913960400191505060405180910390fd5b60408051636eb1769f60e11b81526001600160a01b038381166004830152306024830152915185926000929084169163dd62ed3e91604480820192602092909190829003018186803b1580156111ac57600080fd5b505afa1580156111c0573d6000803e3d6000fd5b505050506040513d60208110156111d657600080fd5b50519050858110156112195760405162461bcd60e51b81526004018080602001828103825260228152602001806142486022913960400191505060405180910390fd5b6000826001600160a01b03166370a08231856040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561127157600080fd5b505afa158015611285573d6000803e3d6000fd5b505050506040513d602081101561129b57600080fd5b50519050868110156112f4576040805162461bcd60e51b815260206004820152601e60248201527f4e6f20656e6f7567682062616c616e6365206f662074686520746f6b656e0000604482015290519081900360640190fd5b6113116001600160a01b03841685308a600b63ffffffff61340a16565b61131a866123ff565b15611384576000869050806001600160a01b03166342966c68896040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561136a57600080fd5b505af115801561137e573d6000803e3d6000fd5b50505050505b5050506113e0565b8334146113e0576040805162461bcd60e51b815260206004820152601d60248201527f496e636f6e73697374656e637920457468657265756d20616d6f756e74000000604482015290519081900360640190fd5b7f5ddf9724d8fe5d9e12499be2867f93d41a582733dcd65f74a486ad7e306671468186868660405180856001600160a01b03166001600160a01b0316815260200180602001848152602001836001600160a01b03166001600160a01b03168152602001828103825285818151815260200191508051906020019080838360005b83811015611478578181015183820152602001611460565b50505050905090810190601f1680156114a55780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a1506001949350505050565b60035461010090046001600160a01b03163314611512576040805162461bcd60e51b81526020600482015260196024820152600080516020614321833981519152604482015290519081900360640190fd5b60015460ff16611552576040805162461bcd60e51b815260206004820152600660248201526511195b9a595960d21b604482015290519081900360640190fd5b60015461010090046001600160a01b031661159e5760405162461bcd60e51b815260040180806020018281038252602381526020018061426a6023913960400191505060405180910390fd5b6001546115b99061010090046001600160a01b03164761346c565b565b600c5460ff1681565b60015461010090046001600160a01b031681565b60035461010090046001600160a01b0316331461162a576040805162461bcd60e51b81526020600482015260196024820152600080516020614321833981519152604482015290519081900360640190fd5b306001600160a01b0382161415611681576040805162461bcd60e51b81526020600482015260166024820152752237903737ba3434b73390313c903cb7bab939b2b63360511b604482015290519081900360640190fd5b611693816001600160a01b03166133ce565b6116ce5760405162461bcd60e51b81526004018080602001828103825260258152602001806143916025913960400191505060405180910390fd5b6116d7816123ff565b156117135760405162461bcd60e51b815260040180806020018281038252602881526020018061407a6028913960400191505060405180910390fd5b6001600160a01b03166000908152600a60205260409020805460ff19166001179055565b600c5460009060ff16611788576040805162461bcd60e51b815260206004820152601460248201527321b937b9b9a7baba24a49d102737ba1037b832b760611b604482015290519081900360640190fd5b3360006001600160a01b03851615611a6957600086116117e4576040805162461bcd60e51b815260206004820152601260248201527111549493d48e8816995c9bc8185b5bdd5b9d60721b604482015290519081900360640190fd5b6117f6856001600160a01b03166133ce565b6118315760405162461bcd60e51b81526004018080602001828103825260258152602001806143916025913960400191505060405180910390fd5b60408051636eb1769f60e11b81526001600160a01b038481166004830152306024830152915187926000929084169163dd62ed3e91604480820192602092909190829003018186803b15801561188657600080fd5b505afa15801561189a573d6000803e3d6000fd5b505050506040513d60208110156118b057600080fd5b50519050878110156118f35760405162461bcd60e51b81526004018080602001828103825260228152602001806142486022913960400191505060405180910390fd5b6000826001600160a01b03166370a08231866040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561194b57600080fd5b505afa15801561195f573d6000803e3d6000fd5b505050506040513d602081101561197557600080fd5b50519050888110156119ce576040805162461bcd60e51b815260206004820152601e60248201527f4e6f20656e6f7567682062616c616e6365206f662074686520746f6b656e0000604482015290519081900360640190fd5b6119eb6001600160a01b03841686308c600b63ffffffff61340a16565b6119f4886123ff565b15611a5e576000889050806001600160a01b03166342966c688b6040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611a4457600080fd5b505af1158015611a58573d6000803e3d6000fd5b50505050505b889350505050611ac8565b600034118015611a77575085155b611ac8576040805162461bcd60e51b815260206004820152601e60248201527f43726f73734f757449493a20496c6c6567616c2065746820616d6f756e740000604482015290519081900360640190fd5b7f692e6a6e27573f2a2a757e34cb16ae101c5fca8834f9b8a6cdbcf64b8450d87082888388348960405180876001600160a01b03166001600160a01b0316815260200180602001868152602001856001600160a01b03166001600160a01b0316815260200184815260200180602001838103835288818151815260200191508051906020019080838360005b83811015611b6c578181015183820152602001611b54565b50505050905090810190601f168015611b995780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b83811015611bcc578181015183820152602001611bb4565b50505050905090810190601f168015611bf95780820380516001836020036101000a031916815260200191505b509850505050505050505060405180910390a15060019695505050505050565b60035461010090046001600160a01b03163314611c6b576040805162461bcd60e51b81526020600482015260196024820152600080516020614321833981519152604482015290519081900360640190fd5b306001600160a01b0382161415611cc2576040805162461bcd60e51b81526020600482015260166024820152752237903737ba3434b73390313c903cb7bab939b2b63360511b604482015290519081900360640190fd5b611cd4816001600160a01b03166133ce565b611d0f5760405162461bcd60e51b81526004018080602001828103825260258152602001806143916025913960400191505060405180910390fd5b6001600160a01b03166000908152600b60205260409020805460ff19166001179055565b3360009081526006602052604090205460ff16600114611d9a576040805162461bcd60e51b815260206004820152601b60248201527f4f6e6c79206d616e616765722063616e20657865637574652069740000000000604482015290519081900360640190fd5b8251604014611dec576040805162461bcd60e51b8152602060048201526019602482015278119a5e1959081b195b99dd1a081bd9881d1e12d95e4e880d8d603a1b604482015290519081900360640190fd5b6009836040518082805190602001908083835b60208310611e1e5780518252601f199092019160209182019101611dff565b51815160209384036101000a600019018019909216911617905292019485525060405193849003019092205460ff16159150611ea39050576040805162461bcd60e51b815260206004820152601e60248201527f5472616e73616374696f6e20686173206265656e20636f6d706c657465640000604482015290519081900360640190fd5b60015460ff1615611ef2576040805162461bcd60e51b8152602060048201526014602482015273125d081a185cc81899595b881d5c19dc9859195960621b604482015290519081900360640190fd5b611f04826001600160a01b03166133ce565b611f3f5760405162461bcd60e51b81526004018080602001828103825260258152602001806143916025913960400191505060405180910390fd5b600083836002546040516020018084805190602001908083835b60208310611f785780518252601f199092019160209182019101611f59565b51815160209384036101000a600019018019909216911617905260609690961b6bffffffffffffffffffffffff19169201918252506014808201939093526040805180830390940184526034909101815282519284019290922060008181526008909452919092205490935060ff161591506120329050576040805162461bcd60e51b8152602060048201526012602482015271496e76616c6964207369676e61747572657360701b604482015290519081900360640190fd5b61203c8183613011565b612085576040805162461bcd60e51b815260206004820152601560248201527415985b1a59081cda59db985d1d5c995cc819985a5b605a1b604482015290519081900360640190fd5b6001805460ff19168117610100600160a81b0319166101006001600160a01b038616021781556120b8908590839061333a565b7f5e06c4b22547d430736ce834764dbfee08f1c4cf7ae3d53178aa56effa593ed0846040518080602001828103825283818151815260200191508051906020019080838360005b838110156121175781810151838201526020016120ff565b50505050905090810190601f1680156121445780820380516001836020036101000a031916815260200191505b509250505060405180910390a150505050565b60035461010090046001600160a01b031633146121a9576040805162461bcd60e51b81526020600482015260196024820152600080516020614321833981519152604482015290519081900360640190fd5b60015460ff166121e9576040805162461bcd60e51b815260206004820152600660248201526511195b9a595960d21b604482015290519081900360640190fd5b60015461010090046001600160a01b03166122355760405162461bcd60e51b815260040180806020018281038252602381526020018061426a6023913960400191505060405180910390fd5b306001600160a01b038216141561228c576040805162461bcd60e51b81526020600482015260166024820152752237903737ba3434b73390313c903cb7bab939b2b63360511b604482015290519081900360640190fd5b61229e816001600160a01b03166133ce565b6122d95760405162461bcd60e51b81526004018080602001828103825260258152602001806143916025913960400191505060405180910390fd5b604080516370a0823160e01b8152306004820152905182916000916001600160a01b038416916370a08231916024808301926020929190829003018186803b15801561232457600080fd5b505afa158015612338573d6000803e3d6000fd5b505050506040513d602081101561234e57600080fd5b50519050801561237f5760015461237f906001600160a01b038481169161010090041683600b63ffffffff61355116565b612388836123ff565b156123fa57600154604080516301fc6bd160e21b81526001600160a01b0361010090930483166004820152905185928316916307f1af4491602480830192600092919082900301818387803b1580156123e057600080fd5b505af11580156123f4573d6000803e3d6000fd5b50505050505b505050565b6001600160a01b0381166000908152600a602052604090205460ff1615155b919050565b6001600160a01b031660009081526006602052604090205460ff1660011490565b60035461010090046001600160a01b031681565b60035461010090046001600160a01b031633146124aa576040805162461bcd60e51b81526020600482015260196024820152600080516020614321833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152600b60205260409020805460ff19169055565b6060600780548060200260200160405190810160405280929190818152602001828054801561252357602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311612505575b505050505090505b90565b60035461010090046001600160a01b03163314612580576040805162461bcd60e51b81526020600482015260196024820152600080516020614321833981519152604482015290519081900360640190fd5b612589816123ff565b6125da576040805162461bcd60e51b815260206004820152601e60248201527f546869732061646472657373206973206e6f7420726567697374657265640000604482015290519081900360640190fd5b6001600160a01b03166000908152600a60205260409020805460ff19169055565b6000806009836040518082805190602001908083835b602083106126305780518252601f199092019160209182019101612611565b51815160209384036101000a600019018019909216911617905292019485525060405193849003019092205460ff1692909211949350505050565b600260005414156126c3576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b600260009081553381526006602052604090205460ff1660011461272e576040805162461bcd60e51b815260206004820152601b60248201527f4f6e6c79206d616e616765722063616e20657865637574652069740000000000604482015290519081900360640190fd5b8551604014612780576040805162461bcd60e51b8152602060048201526019602482015278119a5e1959081b195b99dd1a081bd9881d1e12d95e4e880d8d603a1b604482015290519081900360640190fd5b6001600160a01b0385166127c55760405162461bcd60e51b81526004018080602001828103825260268152602001806140a26026913960400191505060405180910390fd5b600084116128045760405162461bcd60e51b81526004018080602001828103825260288152602001806142206028913960400191505060405180910390fd5b6009866040518082805190602001908083835b602083106128365780518252601f199092019160209182019101612817565b51815160209384036101000a600019018019909216911617905292019485525060405193849003019092205460ff161591506128bb9050576040805162461bcd60e51b815260206004820152601e60248201527f5472616e73616374696f6e20686173206265656e20636f6d706c657465640000604482015290519081900360640190fd5b82156128d1576128cc8286866135a4565b612910565b834710156129105760405162461bcd60e51b815260040180806020018281038252603f815260200180614152603f913960400191505060405180910390fd5b600086868686866002546040516020018087805190602001908083835b6020831061294c5780518252601f19909201916020918201910161292d565b51815160209384036101000a60001901801990921691161790526060998a1b6bffffffffffffffffffffffff1990811692909401918252601482019890985295151560f81b6034870152509290951b9091166035830152604980830191909152604080518084039092018252606990920182528051908301206000818152600890935291205490935060ff16159150612a239050576040805162461bcd60e51b8152602060048201526012602482015271496e76616c6964207369676e61747572657360701b604482015290519081900360640190fd5b612a2d8183613011565b612a76576040805162461bcd60e51b815260206004820152601560248201527415985b1a59081cda59db985d1d5c995cc819985a5b605a1b604482015290519081900360640190fd5b8315612a8c57612a8783878761376e565b612b29565b84471015612acb5760405162461bcd60e51b815260040180806020018281038252603f815260200180614152603f913960400191505060405180910390fd5b612ae46001600160a01b0387168663ffffffff61346c16565b604080516001600160a01b03881681526020810187905281517fc95f8b91b103304386b955ef73fadac189f8ad66b33369b6c34a17a60db7bd0a929181900390910190a15b612b358782600161333a565b7f8ed8b1f0dd3babfdf1477ba2b27a5b0d2f1c9148448fd22cf2c75e658293c7b1876040518080602001828103825283818151815260200191508051906020019080838360005b83811015612b94578181015183820152602001612b7c565b50505050905090810190601f168015612bc15780820380516001836020036101000a031916815260200191505b509250505060405180910390a1505060016000555050505050565b60025481565b600b6020526000908152604090205460ff1681565b60035461010090046001600160a01b03163314612c49576040805162461bcd60e51b81526020600482015260196024820152600080516020614321833981519152604482015290519081900360640190fd5b60015460ff16612c89576040805162461bcd60e51b815260206004820152600660248201526511195b9a595960d21b604482015290519081900360640190fd5b6001805460ff19169055565b60015460ff1681565b60035461010090046001600160a01b03163314612cf0576040805162461bcd60e51b81526020600482015260196024820152600080516020614321833981519152604482015290519081900360640190fd5b600c805460ff1916911515919091179055565b60035460ff1681565b815160005b81811015612de4576000848281518110612d2757fe5b6020026020010151905060006001600160a01b0316816001600160a01b03161415612d835760405162461bcd60e51b81526004018080602001828103825260248152602001806141916024913960400191505060405180910390fd5b6001600160a01b03811660009081526006602052604090205460ff1615612ddb5760405162461bcd60e51b815260040180806020018281038252604081526020018061428d6040913960400191505060405180910390fd5b50600101612d11565b50612dee836138d6565b612e295760405162461bcd60e51b815260040180806020018281038252602c8152602001806140c8602c913960400191505060405180910390fd5b600354612e449061010090046001600160a01b0316846139a6565b612e7f5760405162461bcd60e51b815260040180806020018281038252602681526020018061436b6026913960400191505060405180910390fd5b612e88826138d6565b612ec35760405162461bcd60e51b815260040180806020018281038252602c8152602001806142f5602c913960400191505060405180910390fd5b815160005b81811015612fbf576000848281518110612ede57fe5b6020908102919091018101516001600160a01b0381166000908152600490925260409091205490915060ff1615612f5c576040805162461bcd60e51b815260206004820152601760248201527f43616e277420657869742073656564206d616e61676572000000000000000000604482015290519081900360640190fd5b6001600160a01b03811660009081526006602052604090205460ff16600114612fb65760405162461bcd60e51b81526004018080602001828103825260448152602001806141dc6044913960600191505060405180910390fd5b50600101612ec8565b50600f835185516007805490500103111561300b5760405162461bcd60e51b81526004018080602001828103825260278152602001806141b56027913960400191505060405180910390fd5b50505050565b60006103cf8251111561306b576040805162461bcd60e51b815260206004820152601d60248201527f4d6178206c656e677468206f66207369676e6174757265733a20393735000000604482015290519081900360640190fd5b60006130778484613a22565b60035460ff1611159150505b92915050565b805161309457613212565b60005b81518110156130e357600660008383815181106130b057fe5b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169055600101613097565b5060005b60075481101561315d57600660006007838154811061310257fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205460ff16613155576007818154811061313b57fe5b600091825260209091200180546001600160a01b03191690555b6001016130e7565b50601060005b6007548110156131fc5760006007828154811061317c57fe5b6000918252602090912001546001600160a01b03169050806131ab5782601014156131a5578192505b506131f4565b826010146131f25780600784815481106131c157fe5b600091825260209091200180546001600160a01b0319166001600160a01b0392909216919091179055600192909201915b505b600101613163565b5081516007805491909103906123fa9082614019565b50565b805161322057613212565b60005b81518110156132d957600082828151811061323a57fe5b6020908102919091018101516001600160a01b0381166000908152600690925260409091205490915060ff166132d0576001600160a01b0381166000818152600660205260408120805460ff191660019081179091556007805491820181559091527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6880180546001600160a01b03191690911790555b50600101613223565b5050565b600080821161332a576040805162461bcd60e51b815260206004820152601460248201527326b0b730b3b2b91021b0b713ba1032b6b83a3c9760611b604482015290519081900360640190fd5b5060646042919091026063010490565b806009846040518082805190602001908083835b6020831061336d5780518252601f19909201916020918201910161334e565b51815160209384036101000a600019018019909216911617905292019485525060408051948590038201909420805460ff1990811660ff97881617909155600097885260089091529290952080549092169390921692909217909155505050565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081811480159061340257508115155b949350505050565b604080516001600160a01b0386811660248301528516604482015260648082018590528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b17905261346590869083613bc5565b5050505050565b804710156134c1576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e6365000000604482015290519081900360640190fd5b6040516000906001600160a01b0384169083908381818185875af1925050503d806000811461350c576040519150601f19603f3d011682016040523d82523d6000602084013e613511565b606091505b50509050806123fa5760405162461bcd60e51b815260040180806020018281038252603a8152602001806140f4603a913960400191505060405180910390fd5b604080516001600160a01b038516602482015260448082018590528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b17905261300b90859083613bc5565b6001600160a01b0382166135e95760405162461bcd60e51b81526004018080602001828103825260238152602001806140576023913960400191505060405180910390fd5b306001600160a01b0384161415613640576040805162461bcd60e51b81526020600482015260166024820152752237903737ba3434b73390313c903cb7bab939b2b63360511b604482015290519081900360640190fd5b613652836001600160a01b03166133ce565b61368d5760405162461bcd60e51b81526004018080602001828103825260258152602001806143916025913960400191505060405180910390fd5b613696836123ff565b156136a0576123fa565b604080516370a0823160e01b8152306004820152905184916000916001600160a01b038416916370a08231916024808301926020929190829003018186803b1580156136eb57600080fd5b505afa1580156136ff573d6000803e3d6000fd5b505050506040513d602081101561371557600080fd5b5051905082811015613465576040805162461bcd60e51b815260206004820152601a60248201527f4e6f20656e6f7567682062616c616e6365206f6620746f6b656e000000000000604482015290519081900360640190fd5b613777836123ff565b156137ec57604080516340c10f1960e01b81526001600160a01b03848116600483015260248201849052915185928316916340c10f1991604480830192600092919082900301818387803b1580156137ce57600080fd5b505af11580156137e2573d6000803e3d6000fd5b50505050506123fa565b604080516370a0823160e01b8152306004820152905184916000916001600160a01b038416916370a08231916024808301926020929190829003018186803b15801561383757600080fd5b505afa15801561384b573d6000803e3d6000fd5b505050506040513d602081101561386157600080fd5b50519050828110156138ba576040805162461bcd60e51b815260206004820152601a60248201527f4e6f20656e6f7567682062616c616e6365206f6620746f6b656e000000000000604482015290519081900360640190fd5b6134656001600160a01b0383168585600b63ffffffff61355116565b6000805b825181101561399d5760008382815181106138f157fe5b6020026020010151905060006001600160a01b0316816001600160a01b0316141561391c575061399d565b600182015b845181101561399357600085828151811061393857fe5b6020026020010151905060006001600160a01b0316816001600160a01b031614156139635750613993565b806001600160a01b0316836001600160a01b0316141561398a57600094505050505061241e565b50600101613921565b50506001016138da565b50600192915050565b600080805b8351811015613a17578381815181106139c057fe5b6020026020010151915060006001600160a01b0316826001600160a01b031614156139ea57613a17565b846001600160a01b0316826001600160a01b03161415613a0f57600092505050613083565b6001016139ab565b506001949350505050565b805160009081908190613a3c90604163ffffffff613da516565b9050606081604051908082528060200260200182016040528015613a6a578160200160208202803883390190505b509050600080805b84811015613b5d576060613a8e8985604163ffffffff613dee16565b90506000613a9c8b83613e6e565b90506001600160a01b038116613aec576040805162461bcd60e51b815260206004820152601060248201526f29b4b3b730ba3ab932b99032b93937b960811b604482015290519081900360640190fd5b6001600160a01b03811660009081526006602052604090205460ff1660011415613b4c5785516001988901988501948291889160ff16908110613b2b57fe5b60200260200101906001600160a01b031690816001600160a01b0316815250505b505060419290920191600101613a72565b506000613b69846138d6565b90506060935080613bb8576040805162461bcd60e51b81526020600482015260146024820152735369676e617475726573206475706c696361746560601b604482015290519081900360640190fd5b5093979650505050505050565b613bd7836001600160a01b03166133ce565b613c28576040805162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015290519081900360640190fd5b60006060846001600160a01b0316846040518082805190602001908083835b60208310613c665780518252601f199092019160209182019101613c47565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613cc8576040519150601f19603f3d011682016040523d82523d6000602084013e613ccd565b606091505b509150915081613d24576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b6001600160a01b03851660009081526020849052604090205460ff1615613d4c5750506123fa565b80511561346557808060200190516020811015613d6857600080fd5b50516134655760405162461bcd60e51b815260040180806020018281038252602a815260200180614341602a913960400191505060405180910390fd5b6000613de783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613f77565b9392505050565b606081830184511015613e0057600080fd5b606082158015613e1b57604051915060208201604052613e65565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015613e54578051835260209283019201613e3c565b5050858452601f01601f1916604052505b50949350505050565b6000806000806041855114613e895760009350505050613083565b50505060208201516040830151606084015160001a7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0821115613ed25760009350505050613083565b601b8160ff161015613ee257601b015b8060ff16601b14158015613efa57508060ff16601c14155b15613f0b5760009350505050613083565b6040805160008152602080820180845289905260ff8416828401526060820186905260808201859052915160019260a0808401939192601f1981019281900390910190855afa158015613f62573d6000803e3d6000fd5b5050604051601f190151979650505050505050565b600081836140035760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613fc8578181015183820152602001613fb0565b50505050905090810190601f168015613ff55780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161400f57fe5b0495945050505050565b8154818355818111156123fa576000838152602090206123fa91810190830161252b91905b80821115614052576000815560010161403e565b509056fe45524332303a207472616e7366657220746f20746865207a65726f20616464726573735468697320616464726573732068617320616c7265616479206265656e207265676973746572656457697468647261773a207472616e7366657220746f20746865207a65726f20616464726573734475706c696361746520706172616d657465727320666f7220746865206164647265737320746f206a6f696e416464726573733a20756e61626c6520746f2073656e642076616c75652c20726563697069656e74206d6179206861766520726576657274656445524332303a20446f6573206e6f742061636365707420457468657265756d20436f696e5468697320636f6e7472616374206164647265737320646f6573206e6f7420686176652073756666696369656e742062616c616e6365206f662065746865724552524f523a204465746563746564207a65726f206164647265737320696e2061646473457863656564656420746865206d6178696d756d206e756d626572206f66206d616e61676572735468657265206172652061646472657373657320696e207468652065786974696e672061646472657373206c697374207468617420617265206e6f74206d616e616765725769746864726177616c20616d6f756e74206d7573742062652067726561746572207468616e20304e6f20656e6f75676820616d6f756e7420666f7220617574686f72697a6174696f6e4552524f523a207472616e7366657220746f20746865207a65726f20616464726573735468652061646472657373206c6973742074686174206973206265696e6720616464656420616c7265616479206578697374732061732061206d616e61676572546865726520617265206e6f206d616e6167657273206a6f696e696e67206f722065786974696e674475706c696361746520706172616d657465727320666f7220746865206164647265737320746f20657869744f6e6c79206f776e65722063616e2065786563757465206974000000000000005361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564436f6e74726163742063726561746f722063616e6e6f7420616374206173206d616e616765725468652061646472657373206973206e6f74206120636f6e74726163742061646472657373a265627a7a723158202ce81f3c4d9fec98f3d031400e8f6718da89f94f0974002eb64daeab9101d30264736f6c63430005110032
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000008275000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000003000000000000000000000000d87f2ad3ef011817319fd25454fc186ca71b3b560000000000000000000000000eb9e4427a0af1fa457230bef3481d028488363e000000000000000000000000d6946039519bccc0b302f89493bec60f4f0b4610
-----Decoded View---------------
Arg [0] : _chainid (uint256): 534352
Arg [1] : _managers (address[]): 0xd87F2ad3EF011817319FD25454FC186CA71B3B56,0x0Eb9e4427a0Af1Fa457230bEF3481d028488363E,0xD6946039519bCCC0B302f89493bEC60F4f0B4610
-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000082750
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [3] : 000000000000000000000000d87f2ad3ef011817319fd25454fc186ca71b3b56
Arg [4] : 0000000000000000000000000eb9e4427a0af1fa457230bef3481d028488363e
Arg [5] : 000000000000000000000000d6946039519bccc0b302f89493bec60f4f0b4610
Deployed Bytecode Sourcemap
34916:19678:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37382:35;;;37395:10;37382:35;;37407:9;37382:35;;;;;;;;;;;;;;;;;34916:19678;39003:1163;;8:9:-1;5:2;;;30:1;27;20:12;5:2;39003:1163:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;39003:1163:0;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;39003:1163:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;39003:1163:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;39003:1163:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;39003:1163:0;;;;;;;;-1:-1:-1;39003:1163:0;;-1:-1:-1;;;;;5:28;;2:2;;;46:1;43;36:12;2:2;39003:1163:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;39003:1163:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;39003:1163:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;39003:1163:0;;;;;;;;-1:-1:-1;39003:1163:0;;-1:-1:-1;;;;;5:28;;2:2;;;46:1;43;36:12;2:2;39003:1163:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;39003:1163:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;39003:1163:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;39003:1163:0;;;;;;;;;;;-1:-1:-1;39003:1163:0;;;;-1:-1:-1;39003:1163:0;;;;-1:-1:-1;;;;5:28;;2:2;;;46:1;43;36:12;2:2;39003:1163:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;39003:1163:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;39003:1163:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;39003:1163:0;;-1:-1:-1;39003:1163:0;;-1:-1:-1;;;;;39003:1163:0:i;:::-;;51089:1226;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;51089:1226:0;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;51089:1226:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;51089:1226:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;51089:1226:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;51089:1226:0;;-1:-1:-1;;51089:1226:0;;;-1:-1:-1;;;51089:1226:0;;;-1:-1:-1;;;;;51089:1226:0;;:::i;:::-;;;;;;;;;;;;;;;;;;48824:250;;8:9:-1;5:2;;;30:1;27;20:12;5:2;48824:250:0;;;:::i;36415:33::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;36415:33:0;;;:::i;35409:58::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;35409:58:0;;;:::i;:::-;;;;-1:-1:-1;;;;;35409:58:0;;;;;;;;;;;;;;50075:333;;8:9:-1;5:2;;;30:1;27;20:12;5:2;50075:333:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;50075:333:0;-1:-1:-1;;;;;50075:333:0;;:::i;52376:1331::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;52376:1331:0;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;52376:1331:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;52376:1331:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;52376:1331:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;52376:1331:0;;;;;-1:-1:-1;;;;;52376:1331:0;;;;;;;;-1:-1:-1;52376:1331:0;-1:-1:-1;52376:1331:0;;;;-1:-1:-1;52376:1331:0;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;52376:1331:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;52376:1331:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;52376:1331:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;52376:1331:0;;-1:-1:-1;52376:1331:0;;-1:-1:-1;;;;;52376:1331:0:i;50665:234::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;50665:234:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;50665:234:0;-1:-1:-1;;;;;50665:234:0;;:::i;40174:1019::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;40174:1019:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;40174:1019:0;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;40174:1019:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;40174:1019:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;40174:1019:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;40174:1019:0;;-1:-1:-1;;;;;40174:1019:0;;;;;;;;-1:-1:-1;40174:1019:0;;;;-1:-1:-1;40174:1019:0;;;;-1:-1:-1;;;;5:28;;2:2;;;46:1;43;36:12;2:2;40174:1019:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;40174:1019:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;40174:1019:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;40174:1019:0;;-1:-1:-1;40174:1019:0;;-1:-1:-1;;;;;40174:1019:0:i;49080:807::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;49080:807:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;49080:807:0;-1:-1:-1;;;;;49080:807:0;;:::i;49924:114::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;49924:114:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;49924:114:0;-1:-1:-1;;;;;49924:114:0;;:::i;53939:113::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;53939:113:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;53939:113:0;-1:-1:-1;;;;;53939:113:0;;:::i;35994:20::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;35994:20:0;;;:::i;50937:93::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;50937:93:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;50937:93:0;-1:-1:-1;;;;;50937:93:0;;:::i;54058:100::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;54058:100:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8::-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;54058:100:0;;;;;;;;;;;;;;;;;50451:180;;8:9:-1;5:2;;;30:1;27;20:12;5:2;50451:180:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;50451:180:0;-1:-1:-1;;;;;50451:180:0;;:::i;53814:119::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;53814:119:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;53814:119:0;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;53814:119:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;53814:119:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;53814:119:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;53814:119:0;;-1:-1:-1;53814:119:0;;-1:-1:-1;;;;;53814:119:0:i;37433:1560::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;37433:1560:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;37433:1560:0;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;37433:1560:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;37433:1560:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;37433:1560:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;37433:1560:0;;-1:-1:-1;;;;;37433:1560:0;;;;;;;;;;;;;;;;;-1:-1:-1;37433:1560:0;;;;;;;;-1:-1:-1;37433:1560:0;;-1:-1:-1;37433:1560:0;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;37433:1560:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;37433:1560:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;37433:1560:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;37433:1560:0;;-1:-1:-1;37433:1560:0;;-1:-1:-1;;;;;37433:1560:0:i;35882:20::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;35882:20:0;;;:::i;:::-;;;;;;;;;;;;;;;;36366:42;;8:9:-1;5:2;;;30:1;27;20:12;5:2;36366:42:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;36366:42:0;-1:-1:-1;;;;;36366:42:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;48708:110;;8:9:-1;5:2;;;30:1;27;20:12;5:2;48708:110:0;;;:::i;35375:27::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;35375:27:0;;;:::i;53715:91::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;53715:91:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;53715:91:0;;;;:::i;35952:35::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;35952:35:0;;;:::i;39003:1163::-;35301:10;35292:20;;;;:8;:20;;;;;;;;;:25;35284:65;;;;;-1:-1:-1;;;35284:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;39188:5;39182:19;39205:2;39182:25;39174:63;;;;;-1:-1:-1;;;39174:63:0;;;;;;;;;;;;-1:-1:-1;;;39174:63:0;;;;;;;;;;;;;;;39270:1;39256:4;:11;:15;:37;;;;39292:1;39275:7;:14;:18;39256:37;39248:90;;;;-1:-1:-1;;;39248:90:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39397:12;39410:5;39397:19;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;39397:19:0;;;;;-1:-1:-1;39397:19:0;;;;;;;;;;;;;:24;;-1:-1:-1;39389:67:0;;-1:-1:-1;39389:67:0;;;;-1:-1:-1;;;39389:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;39467:40;39493:4;39499:7;39467:25;:40::i;:::-;39518:13;39561:5;39568:4;39574:5;39581:7;39590:8;;39544:55;;;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;39544:55:0;;;;;;;;;;;-1:-1:-1;39544:55:0;;;;-1:-1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;39544:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;-1:-1;;;;39544:55:0;;;;;;;-1:-1:-1;;39544:55:0;;;26:21:-1;;;6:49;;39544:55:0;;;;;;39534:66;;;;;;22:32:-1;39653:26:0;;;:19;:26;;;;;;39534:66;;-1:-1:-1;39653:26:0;;:31;;-1:-1:-1;39645:62:0;;-1:-1:-1;;;39645:62:0;;;;-1:-1:-1;;;39645:62:0;;;;;;;;;;;;-1:-1:-1;;;39645:62:0;;;;;;;;;;;;;;;39751:33;39766:5;39773:10;39751:14;:33::i;:::-;39743:67;;;;;-1:-1:-1;;;39743:67:0;;;;;;;;;;;;-1:-1:-1;;;39743:67:0;;;;;;;;;;;;;;;39849:22;39863:7;39849:13;:22::i;:::-;39882:16;39893:4;39882:10;:16::i;:::-;40000:12;:19;39983:37;;:16;:37::i;:::-;39958:22;:62;;-1:-1:-1;;39958:62:0;;;;;;;;;;;;40062:27;40073:5;40080;-1:-1:-1;40062:10:0;:27::i;:::-;40127:31;40152:5;40127:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;40127:31:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35360:1;39003:1163;;;;;:::o;51089:1226::-;51180:4;51212:10;51241;51233:41;;;;;-1:-1:-1;;;51233:41:0;;;;;;;;;;;;-1:-1:-1;;;51233:41:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;51289:19:0;;;51285:947;;51333:9;:14;51325:63;;;;-1:-1:-1;;;51325:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51411:18;:5;-1:-1:-1;;;;;51411:16:0;;:18::i;:::-;51403:68;;;;-1:-1:-1;;;51403:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51549:36;;;-1:-1:-1;;;51549:36:0;;-1:-1:-1;;;;;51549:36:0;;;;;;;51579:4;51549:36;;;;;;51508:5;;51486:12;;51549:15;;;;;;:36;;;;;;;;;;;;;;;:15;:36;;;5:2:-1;;;;30:1;27;20:12;5:2;51549:36:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;51549:36:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;51549:36:0;;-1:-1:-1;51608:19:0;;;;51600:66;;;;-1:-1:-1;;;51600:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51681:19;51703:5;-1:-1:-1;;;;;51703:15:0;;51719:4;51703:21;;;;;;;;;;;;;-1:-1:-1;;;;;51703:21:0;-1:-1:-1;;;;;51703:21:0;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;51703:21:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;51703:21:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;51703:21:0;;-1:-1:-1;51747:21:0;;;;51739:64;;;;;-1:-1:-1;;;51739:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;51818:62;-1:-1:-1;;;;;51818:22:0;;51841:4;51855;51862:6;51870:9;51818:62;:22;:62;:::i;:::-;51899:20;51913:5;51899:13;:20::i;:::-;51895:232;;;52022:24;52062:5;52022:46;;52087:11;-1:-1:-1;;;;;52087:16:0;;52104:6;52087:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;52087:24:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;52087:24:0;;;;51895:232;;51285:947;;;;;;52180:6;52167:9;:19;52159:61;;;;;-1:-1:-1;;;52159:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;52247:38;52261:4;52267:2;52271:6;52279:5;52247:38;;;;-1:-1:-1;;;;;52247:38:0;-1:-1:-1;;;;;52247:38:0;;;;;;;;;;;;;;-1:-1:-1;;;;;52247:38:0;-1:-1:-1;;;;;52247:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;52247:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;52303:4:0;;51089:1226;-1:-1:-1;;;;51089:1226:0:o;48824:250::-;35180:5;;;;;-1:-1:-1;;;;;35180:5:0;35189:10;35180:19;35172:57;;;;;-1:-1:-1;;;35172:57:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;35172:57:0;;;;;;;;;;;;;;;48887:7;;;;48879:26;;;;;-1:-1:-1;;;48879:26:0;;;;;;;;;;;;-1:-1:-1;;;48879:26:0;;;;;;;;;;;;;;;48924:22;;;;;-1:-1:-1;;;;;48924:22:0;48916:84;;;;-1:-1:-1;;;48916:84:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49011:22;;:55;;:22;;;-1:-1:-1;;;;;49011:22:0;49044:21;49011:32;:55::i;:::-;48824:250::o;36415:33::-;;;;;;:::o;35409:58::-;;;;;;-1:-1:-1;;;;;35409:58:0;;:::o;50075:333::-;35180:5;;;;;-1:-1:-1;;;;;35180:5:0;35189:10;35180:19;35172:57;;;;;-1:-1:-1;;;35172:57:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;35172:57:0;;;;;;;;;;;;;;;50161:4;-1:-1:-1;;;;;50153:22:0;;;;50145:57;;;;;-1:-1:-1;;;50145:57:0;;;;;;;;;;;;-1:-1:-1;;;50145:57:0;;;;;;;;;;;;;;;50221:18;:5;-1:-1:-1;;;;;50221:16:0;;:18::i;:::-;50213:68;;;;-1:-1:-1;;;50213:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50301:20;50315:5;50301:13;:20::i;:::-;50300:21;50292:74;;;;-1:-1:-1;;;50292:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;50377:19:0;;;;;:12;:19;;;;;:23;;-1:-1:-1;;50377:23:0;50399:1;50377:23;;;50075:333::o;52376:1331::-;52513:14;;52488:4;;52513:14;;52505:47;;;;;-1:-1:-1;;;52505:47:0;;;;;;;;;;;;-1:-1:-1;;;52505:47:0;;;;;;;;;;;;;;;52578:10;52563:12;-1:-1:-1;;;;;52634:19:0;;;52630:970;;52687:1;52678:6;:10;52670:41;;;;;-1:-1:-1;;;52670:41:0;;;;;;;;;;;;-1:-1:-1;;;52670:41:0;;;;;;;;;;;;;;;52734:18;:5;-1:-1:-1;;;;;52734:16:0;;:18::i;:::-;52726:68;;;;-1:-1:-1;;;52726:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52872:36;;;-1:-1:-1;;;52872:36:0;;-1:-1:-1;;;;;52872:36:0;;;;;;;52902:4;52872:36;;;;;;52831:5;;52809:12;;52872:15;;;;;;:36;;;;;;;;;;;;;;;:15;:36;;;5:2:-1;;;;30:1;27;20:12;5:2;52872:36:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;52872:36:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;52872:36:0;;-1:-1:-1;52931:19:0;;;;52923:66;;;;-1:-1:-1;;;52923:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53004:19;53026:5;-1:-1:-1;;;;;53026:15:0;;53042:4;53026:21;;;;;;;;;;;;;-1:-1:-1;;;;;53026:21:0;-1:-1:-1;;;;;53026:21:0;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;53026:21:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;53026:21:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;53026:21:0;;-1:-1:-1;53070:21:0;;;;53062:64;;;;;-1:-1:-1;;;53062:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;53141:62;-1:-1:-1;;;;;53141:22:0;;53164:4;53178;53185:6;53193:9;53141:62;:22;:62;:::i;:::-;53222:20;53236:5;53222:13;:20::i;:::-;53218:232;;;53345:24;53385:5;53345:46;;53410:11;-1:-1:-1;;;;;53410:16:0;;53427:6;53410:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;53410:24:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;53410:24:0;;;;53218:232;;53478:6;53464:20;;52630:970;;;;;;53537:1;53525:9;:13;:28;;;;-1:-1:-1;53542:11:0;;53525:28;53517:71;;;;;-1:-1:-1;;;53517:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;53615:62;53631:4;53637:2;53641:11;53654:5;53661:9;53672:4;53615:62;;;;-1:-1:-1;;;;;53615:62:0;-1:-1:-1;;;;;53615:62:0;;;;;;;;;;;;;;-1:-1:-1;;;;;53615:62:0;-1:-1:-1;;;;;53615:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;53615:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;53615:62:0;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;53615:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;53695:4:0;;52376:1331;-1:-1:-1;;;;;;52376:1331:0:o;50665:234::-;35180:5;;;;;-1:-1:-1;;;;;35180:5:0;35189:10;35180:19;35172:57;;;;;-1:-1:-1;;;35172:57:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;35172:57:0;;;;;;;;;;;;;;;50746:4;-1:-1:-1;;;;;50738:20:0;;;;50730:55;;;;;-1:-1:-1;;;50730:55:0;;;;;;;;;;;;-1:-1:-1;;;50730:55:0;;;;;;;;;;;;;;;50804:16;:3;-1:-1:-1;;;;;50804:14:0;;:16::i;:::-;50796:66;;;;-1:-1:-1;;;50796:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;50873:14:0;;;;;:9;:14;;;;;:18;;-1:-1:-1;;50873:18:0;50890:1;50873:18;;;50665:234::o;40174:1019::-;35301:10;35292:20;;;;:8;:20;;;;;;;;;:25;35284:65;;;;;-1:-1:-1;;;35284:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;40324:5;40318:19;40341:2;40318:25;40310:63;;;;;-1:-1:-1;;;40310:63:0;;;;;;;;;;;;-1:-1:-1;;;40310:63:0;;;;;;;;;;;;;;;40432:12;40445:5;40432:19;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;40432:19:0;;;;;-1:-1:-1;40432:19:0;;;;;;;;;;;;;:24;;-1:-1:-1;40424:67:0;;-1:-1:-1;40424:67:0;;;;-1:-1:-1;;;40424:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;40511:7;;;;40510:8;40502:41;;;;;-1:-1:-1;;;40502:41:0;;;;;;;;;;;;-1:-1:-1;;;40502:41:0;;;;;;;;;;;;;;;40562:28;:15;-1:-1:-1;;;;;40562:26:0;;:28::i;:::-;40554:78;;;;-1:-1:-1;;;40554:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40662:13;40705:5;40712:15;40729:8;;40688:50;;;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;40688:50:0;;;;;-1:-1:-1;;40688:50:0;;;;;;-1:-1:-1;40688:50:0;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;40688:50:0;;;;;;40678:61;;;;;;;;;-1:-1:-1;40792:26:0;;;:19;:26;;;;;;;;40678:61;;-1:-1:-1;40792:26:0;;:31;;-1:-1:-1;40784:62:0;;-1:-1:-1;40784:62:0;;;;-1:-1:-1;;;40784:62:0;;;;;;;;;;;;-1:-1:-1;;;40784:62:0;;;;;;;;;;;;;;;40890:33;40905:5;40912:10;40890:14;:33::i;:::-;40882:67;;;;;-1:-1:-1;;;40882:67:0;;;;;;;;;;;;-1:-1:-1;;;40882:67:0;;;;;;;;;;;;;;;40998:4;40988:14;;-1:-1:-1;;40988:14:0;;;-1:-1:-1;;;;;;41013:40:0;40988:14;-1:-1:-1;;;;;41013:40:0;;;;;;41095:27;;41106:5;;41113;;41095:10;:27::i;:::-;41160:25;41179:5;41160:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;41160:25:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35360:1;40174:1019;;;:::o;49080:807::-;35180:5;;;;;-1:-1:-1;;;;;35180:5:0;35189:10;35180:19;35172:57;;;;;-1:-1:-1;;;35172:57:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;35172:57:0;;;;;;;;;;;;;;;49156:7;;;;49148:26;;;;;-1:-1:-1;;;49148:26:0;;;;;;;;;;;;-1:-1:-1;;;49148:26:0;;;;;;;;;;;;;;;49193:22;;;;;-1:-1:-1;;;;;49193:22:0;49185:84;;;;-1:-1:-1;;;49185:84:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49296:4;-1:-1:-1;;;;;49288:22:0;;;;49280:57;;;;;-1:-1:-1;;;49280:57:0;;;;;;;;;;;;-1:-1:-1;;;49280:57:0;;;;;;;;;;;;;;;49356:18;:5;-1:-1:-1;;;;;49356:16:0;;:18::i;:::-;49348:68;;;;-1:-1:-1;;;49348:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49484:30;;;-1:-1:-1;;;49484:30:0;;49508:4;49484:30;;;;;;49449:5;;49427:12;;-1:-1:-1;;;;;49484:15:0;;;;;:30;;;;;;;;;;;;;;:15;:30;;;5:2:-1;;;;30:1;27;20:12;5:2;49484:30:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;49484:30:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;49484:30:0;;-1:-1:-1;49529:11:0;;49525:106;;49576:22;;49557:62;;-1:-1:-1;;;;;49557:18:0;;;;49576:22;;;;49600:7;49609:9;49557:62;:18;:62;:::i;:::-;49645:20;49659:5;49645:13;:20::i;:::-;49641:239;;;49845:22;;49819:49;;;-1:-1:-1;;;49819:49:0;;-1:-1:-1;;;;;49845:22:0;;;;;;49819:49;;;;;;49798:5;;49819:25;;;;;:49;;;;;-1:-1:-1;;49819:49:0;;;;;;;-1:-1:-1;49819:25:0;:49;;;5:2:-1;;;;30:1;27;20:12;5:2;49819:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;49819:49:0;;;;49641:239;;35240:1;;49080:807;:::o;49924:114::-;-1:-1:-1;;;;;50007:19:0;;49983:4;50007:19;;;:12;:19;;;;;;;;:23;;49924:114;;;;:::o;53939:113::-;-1:-1:-1;;;;;54021:18:0;53997:4;54021:18;;;:8;:18;;;;;;;;;:23;;53939:113::o;35994:20::-;;;;;;-1:-1:-1;;;;;35994:20:0;;:::o;50937:93::-;35180:5;;;;;-1:-1:-1;;;;;35180:5:0;35189:10;35180:19;35172:57;;;;;-1:-1:-1;;;35172:57:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;35172:57:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;51004:14:0;51021:1;51004:14;;;:9;:14;;;;;:18;;-1:-1:-1;;51004:18:0;;;50937:93::o;54058:100::-;54102:16;54138:12;54131:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;54131:19:0;;;;;;;;;;;;;;;;;;;;;;;54058:100;;:::o;50451:180::-;35180:5;;;;;-1:-1:-1;;;;;35180:5:0;35189:10;35180:19;35172:57;;;;;-1:-1:-1;;;35172:57:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;35172:57:0;;;;;;;;;;;;;;;50531:20;50545:5;50531:13;:20::i;:::-;50523:63;;;;;-1:-1:-1;;;50523:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;50604:19:0;;;;;:12;:19;;;;;50597:26;;-1:-1:-1;;50597:26:0;;;50451:180::o;53814:119::-;53879:4;53924:1;53902:12;53915:5;53902:19;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;53902:19:0;;;;;-1:-1:-1;53902:19:0;;;;;;;;;;;;;:23;;;;;53814:119;-1:-1:-1;;;;53814:119:0:o;37433:1560::-;7226:1;7832:7;;:19;;7824:63;;;;;-1:-1:-1;;;7824:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;7226:1;7965:7;:18;;;35301:10;35292:20;;:8;:20;;;;;;;;;:25;35284:65;;;;;-1:-1:-1;;;35284:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;37629:5;37623:19;37646:2;37623:25;37615:63;;;;;-1:-1:-1;;;37615:63:0;;;;;;;;;;;;-1:-1:-1;;;37615:63:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;37697:16:0;;37689:67;;;;-1:-1:-1;;;37689:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37784:1;37775:6;:10;37767:63;;;;-1:-1:-1;;;37767:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37889:12;37902:5;37889:19;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;37889:19:0;;;;;-1:-1:-1;37889:19:0;;;;;;;;;;;;;:24;;-1:-1:-1;37881:67:0;;-1:-1:-1;37881:67:0;;;;-1:-1:-1;;;37881:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;37994:7;37990:220;;;38018:40;38040:5;38047:2;38051:6;38018:21;:40::i;:::-;37990:220;;;38124:6;38099:21;:31;;38091:107;;;;-1:-1:-1;;;38091:107:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38220:13;38263:5;38270:2;38274:6;38282:7;38291:5;38298:8;;38246:61;;;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;38246:61:0;;;;-1:-1:-1;;38246:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38246:61:0;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;38246:61:0;;;;;;38236:72;;;;;;-1:-1:-1;38361:26:0;;;:19;:26;;;;;;38236:72;;-1:-1:-1;38361:26:0;;:31;;-1:-1:-1;38353:62:0;;-1:-1:-1;38353:62:0;;;;-1:-1:-1;;;38353:62:0;;;;;;;;;;;;-1:-1:-1;;;38353:62:0;;;;;;;;;;;;;;;38459:33;38474:5;38481:10;38459:14;:33::i;:::-;38451:67;;;;;-1:-1:-1;;;38451:67:0;;;;;;;;;;;;-1:-1:-1;;;38451:67:0;;;;;;;;;;;;;;;38558:7;38554:321;;;38582:32;38596:5;38603:2;38607:6;38582:13;:32::i;:::-;38554:321;;;38709:6;38684:21;:31;;38676:107;;;;-1:-1:-1;;;38676:107:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38798:20;-1:-1:-1;;;;;38798:12:0;;38811:6;38798:20;:12;:20;:::i;:::-;38838:25;;;-1:-1:-1;;;;;38838:25:0;;;;;;;;;;;;;;;;;;;;;;;38554:321;38916:27;38927:5;38934;38941:1;38916:10;:27::i;:::-;38959:26;38979:5;38959:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;38959:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;7182:1:0;8144:7;:22;-1:-1:-1;;;;;37433:1560:0:o;35882:20::-;;;;:::o;36366:42::-;;;;;;;;;;;;;;;:::o;48708:110::-;35180:5;;;;;-1:-1:-1;;;;;35180:5:0;35189:10;35180:19;35172:57;;;;;-1:-1:-1;;;35172:57:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;35172:57:0;;;;;;;;;;;;;;;48766:7;;;;48758:26;;;;;-1:-1:-1;;;48758:26:0;;;;;;;;;;;;-1:-1:-1;;;48758:26:0;;;;;;;;;;;;;;;48795:7;:15;;-1:-1:-1;;48795:15:0;;;48708:110::o;35375:27::-;;;;;;:::o;53715:91::-;35180:5;;;;;-1:-1:-1;;;;;35180:5:0;35189:10;35180:19;35172:57;;;;;-1:-1:-1;;;35172:57:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;35172:57:0;;;;;;;;;;;;;;;53776:14;:22;;-1:-1:-1;;53776:22:0;;;;;;;;;;53715:91::o;35952:35::-;;;;;;:::o;44449:1261::-;44595:11;;44581;44617:273;44638:6;44634:1;:10;44617:273;;;44666:11;44680:4;44685:1;44680:7;;;;;;;;;;;;;;44666:21;;44725:1;-1:-1:-1;;;;;44710:17:0;:3;-1:-1:-1;;;;;44710:17:0;;;44702:66;;;;-1:-1:-1;;;44702:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;44791:13:0;;;;;;:8;:13;;;;;;;;:18;44783:95;;;;-1:-1:-1;;;44783:95:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;44646:3:0;;44617:273;;;;44908:19;44922:4;44908:13;:19::i;:::-;44900:76;;;;-1:-1:-1;;;44900:76:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45066:5;;45044:34;;45066:5;;;-1:-1:-1;;;;;45066:5:0;45073:4;45044:21;:34::i;:::-;45036:85;;;;-1:-1:-1;;;45036:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45166:22;45180:7;45166:13;:22::i;:::-;45158:79;;;;-1:-1:-1;;;45158:79:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45265:14;;45248;45290:284;45311:9;45307:1;:13;45290:284;;;45342:14;45359:7;45367:1;45359:10;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;45392:20:0;;;;;;:12;:20;;;;;;;;45359:10;;-1:-1:-1;45392:20:0;;:25;45384:61;;;;;-1:-1:-1;;;45384:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;45468:16:0;;;;;;:8;:16;;;;;;;;;:21;45460:102;;;;-1:-1:-1;;;45460:102:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;45322:3:0;;45290:284;;;;35533:2;45628:7;:14;45614:4;:11;45592:12;:19;;;;:33;:50;:66;;45584:118;;;;-1:-1:-1;;;45584:118:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44449:1261;;;;:::o;41201:475::-;41287:4;41333:3;41312:10;:17;:24;;41304:66;;;;;-1:-1:-1;;;41304:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;41509:19;41531:42;41556:4;41562:10;41531:24;:42::i;:::-;41646:22;;;;-1:-1:-1;41628:40:0;;-1:-1:-1;;41201:475:0;;;;;:::o;46107:911::-;46180:14;;46176:58;;46216:7;;46176:58;46249:6;46244:96;46265:7;:14;46261:1;:18;46244:96;;;46308:8;:20;46317:7;46325:1;46317:10;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;46308:20:0;;;;;;;;;;;-1:-1:-1;46308:20:0;46301:27;;-1:-1:-1;;46301:27:0;;;;46281:3;46244:96;;;-1:-1:-1;46398:6:0;46393:166;46414:12;:19;46410:23;;46393:166;;;46459:8;:25;46468:12;46481:1;46468:15;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;46468:15:0;46459:25;;;;;;;;;;;;;;;46455:93;;46517:12;46530:1;46517:15;;;;;;;;;;;;;;;;;46510:22;;-1:-1:-1;;;;;;46510:22:0;;;46455:93;46435:3;;46393:166;;;-1:-1:-1;46586:4:0;46569:14;46601:362;46620:12;:19;46618:21;;46601:362;;;46661:12;46676;46689:1;46676:15;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;46676:15:0;;-1:-1:-1;46710:18:0;46706:246;;46753:9;46766:4;46753:17;46749:36;;;46784:1;46772:13;;46749:36;46804:8;;;46706:246;46838:9;46851:4;46838:17;46834:118;;46902:4;46876:12;46889:9;46876:23;;;;;;;;;;;;;;;;;:30;;-1:-1:-1;;;;;;46876:30:0;-1:-1:-1;;;;;46876:30:0;;;;;;;;;;-1:-1:-1;46925:11:0;;;;;46834:118;46601:362;;46641:3;;46601:362;;;-1:-1:-1;46996:14:0;;46973:12;:37;;;;;;;;;;;:::i;46107:911::-;;:::o;47024:352::-;47091:11;;47087:55;;47124:7;;47087:55;47157:6;47152:217;47173:4;:11;47169:1;:15;47152:217;;;47206:11;47220:4;47225:1;47220:7;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;47245:13:0;;;;;;:8;:13;;;;;;;;47220:7;;-1:-1:-1;47245:13:0;;47242:116;;-1:-1:-1;;;;;47284:13:0;;;;;;:8;:13;;;;;:17;;-1:-1:-1;;47284:17:0;47300:1;47284:17;;;;;;47320:12;27:10:-1;;23:18;;;45:23;;47320:22:0;;;;;;;-1:-1:-1;;;;;;47320:22:0;;;;;;47242:116;-1:-1:-1;47186:3:0;;47152:217;;;;47024:352;:::o;45842:259::-;45911:5;45953:1;45937:13;:17;45929:50;;;;;-1:-1:-1;;;45929:50:0;;;;;;;;;;;;-1:-1:-1;;;45929:50:0;;;;;;;;;;;;;;;-1:-1:-1;35787:3:0;35661:2;46007:20;;;;:38;;46069:23;;45842:259::o;47382:173::-;47497:1;47475:12;47488:5;47475:19;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;47475:19:0;;;;;-1:-1:-1;47475:19:0;;;;;;;;;;;;:23;;-1:-1:-1;;47475:23:0;;;;;;;;;;;-1:-1:-1;47509:34:0;;;:19;:34;;;;;;;:38;;;;;;;;;;;;;;;;-1:-1:-1;;;47382:173:0:o;14291:619::-;14351:4;14819:20;;14662:66;14859:23;;;;;;:42;;-1:-1:-1;14886:15:0;;;14859:42;14851:51;14291:619;-1:-1:-1;;;;14291:619:0:o;3654:260::-;3826:68;;;-1:-1:-1;;;;;3826:68:0;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;3826:68:0;;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;3800:106:0;;3819:5;;3896:9;3800:18;:106::i;:::-;3654:260;;;;;:::o;16231:371::-;16346:6;16321:21;:31;;16313:73;;;;;-1:-1:-1;;;16313:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;16473:32;;16455:12;;-1:-1:-1;;;;;16473:14:0;;;16494:6;;16455:12;16473:32;16455:12;16473:32;16494:6;16473:14;:32;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;16454:51:0;;;16524:7;16516:78;;;;-1:-1:-1;;;16516:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3414:232;3568:58;;;-1:-1:-1;;;;;3568:58:0;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;3568:58:0;;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;3542:96:0;;3561:5;;3628:9;3542:18;:96::i;47561:592::-;-1:-1:-1;;;;;47668:16:0;;47660:64;;;;-1:-1:-1;;;47660:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47751:4;-1:-1:-1;;;;;47743:22:0;;;;47735:57;;;;;-1:-1:-1;;;47735:57:0;;;;;;;;;;;;-1:-1:-1;;;47735:57:0;;;;;;;;;;;;;;;47811:18;:5;-1:-1:-1;;;;;47811:16:0;;:18::i;:::-;47803:68;;;;-1:-1:-1;;;47803:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47886:20;47900:5;47886:13;:20::i;:::-;47882:99;;;47963:7;;47882:99;48048:30;;;-1:-1:-1;;;48048:30:0;;48072:4;48048:30;;;;;;48013:5;;47991:12;;-1:-1:-1;;;;;48048:15:0;;;;;:30;;;;;;;;;;;;;;:15;:30;;;5:2:-1;;;;30:1;27;20:12;5:2;48048:30:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;48048:30:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;48048:30:0;;-1:-1:-1;48097:17:0;;;;48089:56;;;;;-1:-1:-1;;;48089:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;48159:543;48249:20;48263:5;48249:13;:20::i;:::-;48245:233;;;48417:28;;;-1:-1:-1;;;48417:28:0;;-1:-1:-1;;;;;48417:28:0;;;;;;;;;;;;;;;48396:5;;48417:16;;;;;:28;;;;;48356:24;;48417:28;;;;;;;48356:24;48417:16;:28;;;5:2:-1;;;;30:1;27;20:12;5:2;48417:28:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;48417:28:0;;;;48460:7;;;48245:233;48545:30;;;-1:-1:-1;;;48545:30:0;;48569:4;48545:30;;;;;;48510:5;;48488:12;;-1:-1:-1;;;;;48545:15:0;;;;;:30;;;;;;;;;;;;;;:15;:30;;;5:2:-1;;;;30:1;27;20:12;5:2;48545:30:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;48545:30:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;48545:30:0;;-1:-1:-1;48594:17:0;;;;48586:56;;;;;-1:-1:-1;;;48586:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;48653:41;-1:-1:-1;;;;;48653:18:0;;48672:2;48676:6;48684:9;48653:41;:18;:41;:::i;43062:600::-;43131:4;;43148:485;43169:4;:11;43165:1;:15;43148:485;;;43202:16;43221:4;43226:1;43221:7;;;;;;;;;;;;;;43202:26;;43267:1;-1:-1:-1;;;;;43247:22:0;:8;-1:-1:-1;;;;;43247:22:0;;43243:68;;;43290:5;;;43243:68;43343:1;43339:5;;43325:297;43350:4;:11;43346:1;:15;43325:297;;;43387:16;43406:4;43411:1;43406:7;;;;;;;;;;;;;;43387:26;;43456:1;-1:-1:-1;;;;;43436:22:0;:8;-1:-1:-1;;;;;43436:22:0;;43432:76;;;43483:5;;;43432:76;43542:8;-1:-1:-1;;;;;43530:20:0;:8;-1:-1:-1;;;;;43530:20:0;;43526:81;;;43582:5;43575:12;;;;;;;;43526:81;-1:-1:-1;43363:3:0;;43325:297;;;-1:-1:-1;;43182:3:0;;43148:485;;;-1:-1:-1;43650:4:0;;43062:600;-1:-1:-1;;43062:600:0:o;42609:445::-;42710:4;;;42757:268;42778:4;:11;42774:1;:15;42757:268;;;42825:4;42830:1;42825:7;;;;;;;;;;;;;;42811:21;;42874:1;-1:-1:-1;;;;;42851:25:0;:11;-1:-1:-1;;;;;42851:25:0;;42847:71;;;42897:5;;42847:71;42951:14;-1:-1:-1;;;;;42936:29:0;:11;-1:-1:-1;;;;;42936:29:0;;42932:82;;;42993:5;42986:12;;;;;;42932:82;42791:3;;42757:268;;;-1:-1:-1;43042:4:0;;42609:445;-1:-1:-1;;;;42609:445:0:o;41684:917::-;41838:17;;41780:4;;;;;;41838:38;;35729:2;41838:38;:21;:38;:::i;:::-;41825:51;;41887:23;41927:5;41913:20;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;41913:20:0;-1:-1:-1;41887:46:0;-1:-1:-1;41944:6:0;;;41987:432;42008:5;42004:1;:9;41987:432;;;42035:17;42055:36;:10;42072:1;35729:2;42055:36;:16;:36;:::i;:::-;42035:56;;42106:16;42125:22;42136:4;42142;42125:10;:22::i;:::-;42106:41;-1:-1:-1;;;;;;42170:22:0;;42162:51;;;;;-1:-1:-1;;;42162:51:0;;;;;;;;;;;;-1:-1:-1;;;42162:51:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;42261:18:0;;;;;;:8;:18;;;;;;;;;:23;42257:116;;;42335:11;;42305;;;;;42342:3;;;42349:8;;42335:6;;:11;;;;;;;;;;;;;;:22;-1:-1:-1;;;;;42335:22:0;;;-1:-1:-1;;;;;42335:22:0;;;;;42257:116;-1:-1:-1;;35729:2:0;42387:20;;;;;42015:3;;41987:432;;;;42463:8;42474:21;42488:6;42474:13;:21::i;:::-;42463:32;;42506:13;;;42538:3;42530:36;;;;;-1:-1:-1;;;42530:36:0;;;;;;;;;;;;-1:-1:-1;;;42530:36:0;;;;;;;;;;;;;;;-1:-1:-1;42584:9:0;;41684:917;-1:-1:-1;;;;;;;41684:917:0:o;4311:1238::-;4960:27;4968:5;-1:-1:-1;;;;;4960:25:0;;:27::i;:::-;4952:71;;;;;-1:-1:-1;;;4952:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;5097:12;5111:23;5146:5;-1:-1:-1;;;;;5138:19:0;5158:4;5138:25;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;5138:25:0;;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;5096:67:0;;;;5182:7;5174:52;;;;;-1:-1:-1;;;5174:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5243:25:0;;;;;;;;;;;;;;;;:30;5239:69;;5290:7;;;;5239:69;5322:17;;:21;5318:224;;5464:10;5453:30;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5453:30:0;5445:85;;;;-1:-1:-1;;;5445:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11324:132;11382:7;11409:39;11413:1;11416;11409:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;11402:46;11324:132;-1:-1:-1;;;11324:132:0:o;25320:2515::-;25455:12;25520:7;25511:6;:16;25493:6;:13;:35;;25485:44;;;;;;25542:22;25608:15;;25637:1933;;;;27714:4;27708:11;27695:24;;27767:4;27756:9;27752:20;27746:4;27739:34;25601:2187;;25637:1933;25814:4;25808:11;25795:24;;26451:2;26442:7;26438:16;26823:9;26816:17;26810:4;26806:28;26794:9;26783;26779:25;26775:60;26872:7;26868:2;26864:16;27121:6;27107:9;27100:17;27094:4;27090:28;27078:9;27070:6;27066:22;27062:57;27058:70;26900:426;27155:3;27151:2;27148:11;26900:426;;;27297:9;;27286:21;;27197:4;27189:13;;;;27230;26900:426;;;-1:-1:-1;;27346:26:0;;;27550:2;27533:11;-1:-1:-1;;27529:25:0;27523:4;27516:39;-1:-1:-1;25601:2187:0;-1:-1:-1;27818:9:0;25320:2515;-1:-1:-1;;;;25320:2515:0:o;43670:771::-;43745:7;43765:9;43785;43805:7;35729:2;43827:3;:10;:29;43823:79;;43888:1;43873:17;;;;;;;43823:79;-1:-1:-1;;;43956:2:0;43947:12;;43941:19;43994:2;43985:12;;43979:19;44040:2;44031:12;;44025:19;44022:1;44017:28;44082:66;44069:79;;44066:128;;;44180:1;44165:17;;;;;;;44066:128;44276:2;44272:1;:6;;;44268:46;;;44300:2;44295:7;44268:46;44328:1;:7;;44333:2;44328:7;;:18;;;;;44339:1;:7;;44344:2;44339:7;;44328:18;44324:68;;;44378:1;44363:17;;;;;;;44324:68;44409:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;44409:24:0;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;44409:24:0;;-1:-1:-1;;44409:24:0;;;43670:771;-1:-1:-1;;;;;;;43670:771:0:o;11986:345::-;12072:7;12174:12;12167:5;12159:28;;;;-1:-1:-1;;;12159:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;12159:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12198:9;12214:1;12210;:5;;;;;;;11986:345;-1:-1:-1;;;;;11986:345:0:o;34916:19678::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Swarm Source
bzzr://2ce81f3c4d9fec98f3d031400e8f6718da89f94f0974002eb64daeab9101d302
Loading...
Loading
Loading...
Loading
Loading...
Loading
Net Worth in USD
$79,866.46
Net Worth in ETH
Token Allocations
ETH
81.38%
JNS
11.58%
USDT
2.39%
Others
4.65%
Multichain Portfolio | 35 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|---|---|---|---|---|
| BLAST | 48.83% | $2,937.63 | 13.2763 | $39,000.86 | |
| OP | 15.94% | $2,937.62 | 4.3327 | $12,727.77 | |
| OP | 0.04% | $0.998505 | 34.2443 | $34.19 | |
| OP | 0.02% | $0.999605 | 18.8644 | $18.86 | |
| AVAX | 11.58% | $0.024622 | 375,490.3764 | $9,245.29 | |
| AVAX | 2.35% | $0.998417 | 1,878.1663 | $1,875.19 | |
| AVAX | 0.98% | $11.91 | 65.5774 | $781.16 | |
| AVAX | 0.05% | $0.999755 | 36.3158 | $36.31 | |
| AVAX | 0.01% | $0.998417 | 10.6096 | $10.59 | |
| SCROLL | 13.78% | $2,937.61 | 3.7452 | $11,001.84 | |
| SCROLL | 0.58% | $0.075393 | 6,168.3661 | $465.05 | |
| BASE | 2.77% | $2,937.46 | 0.7535 | $2,213.42 | |
| BASE | 0.97% | $0.999605 | 776.3808 | $776.07 | |
| CELO | 2.02% | $0.116478 | 13,827.1733 | $1,610.56 | |
| CELO | 0.01% | $0.999718 | 10.7739 | $10.77 | |
| LINEA | 0.07% | $2,937.61 | 0.0185 | $54.26 | |
| BSC | <0.01% | $879.68 | 0.003912 | $3.44 | |
| POL | <0.01% | $0.124192 | 6.63 | $0.823394 |
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.