Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Advanced mode: Intended for advanced users or developers and will display all Internal Transactions including zero value transfers. Name tag integration is not available in advanced view.
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
||||
---|---|---|---|---|---|---|---|
21844868 | 8 days ago | 0 ETH | |||||
21843399 | 8 days ago | 0 ETH | |||||
20587391 | 184 days ago | 0 ETH | |||||
19970711 | 270 days ago | 0 ETH | |||||
19833914 | 289 days ago | 0 ETH | |||||
19496703 | 336 days ago | 0 ETH | |||||
18907589 | 419 days ago | 0 ETH | |||||
18907589 | 419 days ago | 0 ETH | |||||
18907573 | 419 days ago | 0 ETH | |||||
18041806 | 540 days ago | 0 ETH | |||||
17618052 | 600 days ago | 0 ETH | |||||
17062638 | 678 days ago | 0 ETH | |||||
17043646 | 680 days ago | 0 ETH | |||||
16770917 | 719 days ago | 0 ETH | |||||
16657048 | 735 days ago | 0 ETH | |||||
16647748 | 736 days ago | 0 ETH | |||||
16646791 | 736 days ago | 0 ETH | |||||
16646791 | 736 days ago | 0 ETH | |||||
16646791 | 736 days ago | 0 ETH | |||||
16638184 | 738 days ago | 0 ETH | |||||
16634924 | 738 days ago | 0 ETH | |||||
16631782 | 739 days ago | 0 ETH | |||||
16617202 | 741 days ago | 0 ETH | |||||
16617202 | 741 days ago | 0 ETH | |||||
16592968 | 744 days ago | 0 ETH |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
SHNJidai
Compiler Version
v0.8.4+commit.c7e474f2
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity ^0.8.4;import "@chocolate-factory/contracts/token/ERC721/presets/TwoStage.sol";contract SHNJidai is TwoStage {function initialize(bytes32 whitelistMerkleTreeRoot_,address royaltiesRecipient_,uint256 royaltiesValue_,address[] memory shareholders,uint256[] memory shares) public initializerERC721A initializer {__ERC721A_init("SHOUNEN", "SHN");__Ownable_init();__AdminManager_init_unchained();__Supply_init_unchained(5555);__AdminMint_init_unchained();__Whitelist_init_unchained();__BalanceLimit_init_unchained();__UriManager_init_unchained("https://ipfs.io/ipfs/QmSqBvu4AMtxMg5TYrzxHdqVXJD2dsGq6bkLJJJS7sTxvR/",".json");__CustomPaymentSplitter_init(shareholders, shares);__Royalties_init_unchained(royaltiesRecipient_, royaltiesValue_);
1234567891011121314151617181920212223242526//SPDX-License-Identifier: MITpragma solidity ^0.8.4;contract AdminManager {mapping(address => bool) internal _admins;constructor() {_admins[msg.sender] = true;_admins[address(this)] = true;}function setAdminPermissions(address account_, bool enable_)externalonlyAdmin{_admins[account_] = enable_;}function isAdmin(address account_) public view returns (bool) {return _admins[account_];}modifier onlyAdmin() {require(isAdmin(msg.sender), "Not an admin");_;
1234567891011121314151617181920212223242526//SPDX-License-Identifier: MITpragma solidity ^0.8.4;import "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol";contract AdminManagerUpgradable is Initializable {mapping(address => bool) private _admins;function __AdminManager_init() internal onlyInitializing {__AdminManager_init_unchained();}function __AdminManager_init_unchained() internal onlyInitializing {_admins[msg.sender] = true;}function setAdminPermissions(address account_, bool enable_)externalonlyAdmin{_admins[account_] = enable_;}function isAdmin(address account_) public view returns (bool) {return _admins[account_];}
1234567891011121314151617181920212223242526//SPDX-License-Identifier: MITpragma solidity ^0.8.4;import "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol";import "../admin-manager/AdminManagerUpgradable.sol";abstract contract AdminMintUpgradable is Initializable, AdminManagerUpgradable {function __AdminMint_init() internal onlyInitializing {__AdminManager_init_unchained();__AdminMint_init_unchained();}function __AdminMint_init_unchained() internal onlyInitializing {}function adminMint(address[] calldata accounts_,uint256[] calldata amounts_) external onlyAdmin {uint256 accountsLength = accounts_.length;require(accountsLength == amounts_.length, "Admin mint: bad request");for (uint256 i; i < accountsLength; i++) {_adminMint(accounts_[i], amounts_[i]);}}
1234567891011121314151617181920212223242526//SPDX-License-Identifier: MITpragma solidity ^0.8.4;import "../admin-manager/AdminManager.sol";import "./BalanceLimitStorage.sol";contract BalanceLimit is AdminManager {using BalanceLimitStorage for BalanceLimitStorage.Data;mapping(uint8 => BalanceLimitStorage.Data) internal _balanceLimits;function _increaseBalance(uint8 stageId_,address account_,uint256 amount_) internal {_balanceLimits[stageId_].increaseBalance(account_, amount_);}function currentBalance(uint8 stageId_, address account_)externalviewreturns (uint256){return _balanceLimits[stageId_].balances[account_];
12345678910111213141516171819202122//SPDX-License-Identifier: MITpragma solidity ^0.8.4;library BalanceLimitStorage {struct Data {uint256 limit;mapping(address => uint256) balances;}function increaseBalance(Data storage data_,address account_,uint256 amount_) internal {require(data_.balances[account_] + amount_ <= data_.limit,"Exceeds limit");data_.balances[account_] += amount_;}}
1234567891011121314151617181920212223242526//SPDX-License-Identifier: MITpragma solidity ^0.8.4;import "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol";import "../admin-manager/AdminManagerUpgradable.sol";import "./BalanceLimitStorage.sol";contract BalanceLimitUpgradable is Initializable, AdminManagerUpgradable {using BalanceLimitStorage for BalanceLimitStorage.Data;mapping(uint8 => BalanceLimitStorage.Data) internal _balanceLimits;function __BalanceLimit_init() internal onlyInitializing {__AdminManager_init_unchained();__BalanceLimit_init_unchained();}function __BalanceLimit_init_unchained() internal onlyInitializing {}function _increaseBalance(uint8 stageId_,address account_,uint256 amount_) internal {_balanceLimits[stageId_].increaseBalance(account_, amount_);
1234567891011121314151617181920212223242526//SPDX-License-Identifier: MITpragma solidity ^0.8.4;import "@openzeppelin/contracts-upgradeable/finance/PaymentSplitterUpgradeable.sol";import "@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol";contract CustomPaymentSplitterUpgradeable is PaymentSplitterUpgradeable {uint256 public payeesLength;function __CustomPaymentSplitter_init(address[] memory shareholders_,uint256[] memory shares_) internal onlyInitializing {__PaymentSplitter_init(shareholders_, shares_);payeesLength = shareholders_.length;}function releaseAll() external {for (uint256 i; i < payeesLength; ) {address toPay = payee(i);release(payable(toPay));unchecked {i++;}}}
1234567891011121314151617181920212223242526//SPDX-License-Identifier: MITpragma solidity ^0.8.4;import "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol";import "../admin-manager/AdminManagerUpgradable.sol";import "../balance-limit/BalanceLimit.sol";contract PriceUpgradable is Initializable, AdminManagerUpgradable {mapping(uint8 => uint256) private _price;function __Price_init() internal onlyInitializing {__AdminManager_init_unchained();__Price_init_unchained();}function __Price_init_unchained() internal onlyInitializing {}function setPrice(uint8 stage_, uint256 value_) public onlyAdmin {_price[stage_] = value_;}function price(uint8 stage_) public view returns (uint256) {return _price[stage_];}
123456789// SPDX-License-Identifier: MITpragma solidity ^0.8.4;interface IERC2981Royalties {function royaltyInfo(uint256 tokenId_, uint256 value_)externalviewreturns (address receiver, uint256 royaltyAmount);}
1234567891011121314151617181920212223242526//SPDX-License-Identifier: MITpragma solidity ^0.8.4;import "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol";import "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol";import "../admin-manager/AdminManagerUpgradable.sol";import "./IERC2981Royalties.sol";contract RoyaltiesUpgradable isInitializable,ERC165Upgradeable,IERC2981Royalties,AdminManagerUpgradable{struct RoyaltyInfo {address recipient;uint24 amount;}RoyaltyInfo private _royalties;uint256 constant maxValue = 10000;event RoyaltiesSet(address recipient, uint256 amount);function __Royalties_init(address recipient_, uint256 amount_)
1234567891011121314151617181920212223242526//SPDX-License-Identifier: MITpragma solidity ^0.8.4;import "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol";import "../admin-manager/AdminManagerUpgradable.sol";abstract contract SupplyUpgradable is Initializable, AdminManagerUpgradable {uint256 internal _maxSupply;function __Supply_init(uint256 maxSupply_) internal onlyInitializing {__AdminManager_init_unchained();__Supply_init_unchained(maxSupply_);}function __Supply_init_unchained(uint256 maxSupply_)internalonlyInitializing{_maxSupply = maxSupply_;}function setMaxSupply(uint256 maxSupply_) external onlyAdmin {_maxSupply = maxSupply_;}
1234567891011121314151617181920212223242526//SPDX-License-Identifier: MITpragma solidity ^0.8.4;import "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol";import "erc721a-upgradeable/contracts/extensions/ERC721AQueryableUpgradeable.sol";import "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol";import "@divergencetech/ethier/contracts/thirdparty/opensea/OpenSeaGasFreeListing.sol";import "../../../supply/SupplyUpgradable.sol";import "../../../admin-mint/AdminMintUpgradable.sol";import "../../../whitelist/WhitelistUpgradable.sol";import "../../../balance-limit/BalanceLimitUpgradable.sol";import "../../../uri-manager/UriManagerUpgradable.sol";import "../../../royalties/RoyaltiesUpgradable.sol";import "../../../price/PriceUpgradable.sol";import "../../../payments/CustomPaymentSplitterUpgradeable.sol";contract TwoStage isInitializable,ERC721AQueryableUpgradeable,OwnableUpgradeable,SupplyUpgradable,AdminMintUpgradable,WhitelistUpgradable,BalanceLimitUpgradable,UriManagerUpgradable,
1234567891011121314151617181920212223242526//SPDX-License-Identifier: MITpragma solidity ^0.8.4;import "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol";import "@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol";import "../admin-manager/AdminManagerUpgradable.sol";contract UriManagerUpgradable is Initializable, AdminManagerUpgradable {using StringsUpgradeable for uint256;string internal _prefix;string internal _suffix;function prefix() public view returns (string memory) {return _prefix;}function suffix() public view returns (string memory) {return _suffix;}function __UriManager_init(string memory prefix_, string memory suffix_)internalonlyInitializing{
12345678910111213141516171819202122//SPDX-License-Identifier: MITpragma solidity ^0.8.4;import "@openzeppelin/contracts/utils/cryptography/MerkleProof.sol";library WhitelistStorage {struct Data {bytes32 merkleTreeRoot;mapping(address => bool) accounts;}function isWhitelisted(Data storage data_,address account_,bytes32[] calldata proof_) internal view returns (bool) {bytes32 leaf = keccak256(abi.encodePacked(account_));returnMerkleProof.verify(proof_, data_.merkleTreeRoot, leaf) || data_.accounts[account_];}}
1234567891011121314151617181920212223242526//SPDX-License-Identifier: MITpragma solidity ^0.8.4;import "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol";import "../admin-manager/AdminManagerUpgradable.sol";import "./WhitelistStorage.sol";contract WhitelistUpgradable is Initializable, AdminManagerUpgradable {using WhitelistStorage for WhitelistStorage.Data;mapping(uint8 => WhitelistStorage.Data) internal _whitelists;function __Whitelist_init() internal onlyInitializing {__AdminManager_init_unchained();__Whitelist_init_unchained();}function __Whitelist_init_unchained() internal onlyInitializing {}function updateMerkleTreeRoot(uint8 stageId_, bytes32 merkleTreeRoot_)publiconlyAdmin{_whitelists[stageId_].merkleTreeRoot = merkleTreeRoot_;}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// Copyright (c) 2021 the ethier authors (github.com/divergencetech/ethier)pragma solidity >=0.8.0 <0.9.0;// Inspired by BaseOpenSea by Simon Fremaux (@dievardump) but without the need// to pass specific addresses depending on deployment network.// https://gist.github.com/dievardump/483eb43bc6ed30b14f01e01842e3339b/import "./ProxyRegistry.sol";/// @notice Library to achieve gas-free listings on OpenSea.library OpenSeaGasFreeListing {/**@notice Returns whether the operator is an OpenSea proxy for the owner, thusallowing it to list without the token owner paying gas.@dev ERC{721,1155}.isApprovedForAll should be overriden to also check ifthis function returns true.*/function isApprovedForAll(address owner, address operator)internalviewreturns (bool){address proxy = proxyFor(owner);return proxy != address(0) && proxy == operator;}
12345678910111213141516171819// SPDX-License-Identifier: MIT// Copyright (c) 2021 the ethier authors (github.com/divergencetech/ethier)pragma solidity >=0.8.0 <0.9.0;/// @notice A minimal interface describing OpenSea's Wyvern proxy registry.contract ProxyRegistry {mapping(address => OwnableDelegateProxy) public proxies;}/**@dev This pattern of using an empty contract is cargo-culted directly fromOpenSea's example code. TODO: it's likely that the above mapping can be changedto address => address without affecting anything, but further investigation isneeded (i.e. is there a subtle reason that OpenSea released it like this?).*/// solhint-disable-next-line no-empty-blockscontract OwnableDelegateProxy {}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)pragma solidity ^0.8.0;import "../utils/ContextUpgradeable.sol";import "../proxy/utils/Initializable.sol";/*** @dev Contract module which provides a basic access control mechanism, where* there is an account (an owner) that can be granted exclusive access to* specific functions.** By default, the owner account will be the one that deploys the contract. This* can later be changed with {transferOwnership}.** This module is used through inheritance. It will make available the modifier* `onlyOwner`, which can be applied to your functions to restrict their use to* the owner.*/abstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {address private _owner;event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);/**
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v4.7.0) (finance/PaymentSplitter.sol)pragma solidity ^0.8.0;import "../token/ERC20/utils/SafeERC20Upgradeable.sol";import "../utils/AddressUpgradeable.sol";import "../utils/ContextUpgradeable.sol";import "../proxy/utils/Initializable.sol";/*** @title PaymentSplitter* @dev This contract allows to split Ether payments among a group of accounts. The sender does not need to be aware* that the Ether will be split in this way, since it is handled transparently by the contract.** The split can be in equal parts or in any other arbitrary proportion. The way this is specified is by assigning each* account to a number of shares. Of all the Ether that this contract receives, each account will then be able to claim* an amount proportional to the percentage of total shares they were assigned. The distribution of shares is set at the* time of contract deployment and can't be updated thereafter.** `PaymentSplitter` follows a _pull payment_ model. This means that payments are not automatically forwarded to the* accounts but kept in this contract, and the actual transfer is triggered as a separate step by calling the {release}* function.** NOTE: This contract assumes that ERC20 tokens will behave similarly to native tokens (Ether). Rebasing tokens, and* tokens that apply fees during transfers, are likely to not be supported as expected. If in doubt, we encourage you
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v4.7.0) (proxy/utils/Initializable.sol)pragma solidity ^0.8.2;import "../../utils/AddressUpgradeable.sol";/*** @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed* behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an* external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer* function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.** The initialization functions use a version number. Once a version number is used, it is consumed and cannot be* reused. This mechanism prevents re-execution of each "step" but allows the creation of new initialization steps in* case an upgrade adds a module that needs to be initialized.** For example:** [.hljs-theme-light.nopadding]* ```* contract MyToken is ERC20Upgradeable {* function initialize() initializer public {* __ERC20_init("MyToken", "MTK");* }* }
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/draft-IERC20Permit.sol)pragma solidity ^0.8.0;/*** @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in* https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].** Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by* presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't* need to send a transaction, and thus is not required to hold Ether at all.*/interface IERC20PermitUpgradeable {/*** @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens,* given ``owner``'s signed approval.** IMPORTANT: The same issues {IERC20-approve} has related to transaction* ordering also apply here.** Emits an {Approval} event.** Requirements:** - `spender` cannot be the zero address.
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)pragma solidity ^0.8.0;/*** @dev Interface of the ERC20 standard as defined in the EIP.*/interface IERC20Upgradeable {/*** @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);/*** @dev Returns the amount of tokens in existence.*/
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v4.7.0) (token/ERC20/utils/SafeERC20.sol)pragma solidity ^0.8.0;import "../IERC20Upgradeable.sol";import "../extensions/draft-IERC20PermitUpgradeable.sol";import "../../../utils/AddressUpgradeable.sol";/*** @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 IERC20;` statement to your contract,* which allows you to call the safe operations as `token.safeTransfer(...)`, etc.*/library SafeERC20Upgradeable {using AddressUpgradeable for address;function safeTransfer(IERC20Upgradeable token,address to,uint256 value) internal {
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol)pragma solidity ^0.8.1;/*** @dev Collection of functions related to the address type*/library AddressUpgradeable {/*** @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* ====*
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)pragma solidity ^0.8.0;import "../proxy/utils/Initializable.sol";/*** @dev Provides information about the current execution context, including the* sender of the transaction and its data. While these are generally available* via msg.sender and msg.data, they should not be accessed in such a direct* manner, since when dealing with meta-transactions the account sending and* paying for execution may not be the actual sender (as far as an application* is concerned).** This contract is only required for intermediate, library-like contracts.*/abstract contract ContextUpgradeable is Initializable {function __Context_init() internal onlyInitializing {}function __Context_init_unchained() internal onlyInitializing {}function _msgSender() internal view virtual returns (address) {return msg.sender;}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)pragma solidity ^0.8.0;import "./IERC165Upgradeable.sol";import "../../proxy/utils/Initializable.sol";/*** @dev Implementation of the {IERC165} interface.** Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check* for the additional interface id that will be supported. For example:** ```solidity* function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {* return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);* }* ```** Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.*/abstract contract ERC165Upgradeable is Initializable, IERC165Upgradeable {function __ERC165_init() internal onlyInitializing {}
12345678910111213141516171819202122232425// SPDX-License-Identifier: MIT// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)pragma solidity ^0.8.0;/*** @dev Interface of the ERC165 standard, as defined in the* https://eips.ethereum.org/EIPS/eip-165[EIP].** Implementers can declare support of contract interfaces, which can then be* queried by others ({ERC165Checker}).** For an implementation, see {ERC165}.*/interface IERC165Upgradeable {/*** @dev Returns true if this contract implements the interface defined by* `interfaceId`. See the corresponding* https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]* to learn more about how these ids are created.** This function call must use less than 30 000 gas.*/function supportsInterface(bytes4 interfaceId) external view returns (bool);}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v4.7.0) (utils/Strings.sol)pragma solidity ^0.8.0;/*** @dev String operations.*/library StringsUpgradeable {bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";uint8 private constant _ADDRESS_LENGTH = 20;/*** @dev Converts a `uint256` to its ASCII `string` decimal representation.*/function toString(uint256 value) internal pure returns (string memory) {// Inspired by OraclizeAPI's implementation - MIT licence// https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.solif (value == 0) {return "0";}uint256 temp = value;uint256 digits;while (temp != 0) {digits++;
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v4.7.0) (utils/cryptography/MerkleProof.sol)pragma solidity ^0.8.0;/*** @dev These functions deal with verification of Merkle Tree proofs.** The proofs can be generated using the JavaScript library* https://github.com/miguelmota/merkletreejs[merkletreejs].* Note: the hashing algorithm should be keccak256 and pair sorting should be enabled.** See `test/utils/cryptography/MerkleProof.test.js` for some examples.** WARNING: You should avoid using leaf values that are 64 bytes long prior to* hashing, or use a hash function other than keccak256 for hashing leaves.* This is because the concatenation of a sorted pair of internal nodes in* the merkle tree could be reinterpreted as a leaf value.*/library MerkleProof {/*** @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree* defined by `root`. For this, a `proof` must be provided, containing* sibling hashes on the branch from the leaf to the root of the tree. Each* pair of leaves and each pair of pre-images are assumed to be sorted.*/
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity ^0.8.0;/*** @dev This is a base contract to aid in writing upgradeable diamond facet contracts, or any kind of contract that will be deployed* behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an* external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer* function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.** TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as* possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.** CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure* that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.*/import {ERC721A__InitializableStorage} from './ERC721A__InitializableStorage.sol';abstract contract ERC721A__Initializable {using ERC721A__InitializableStorage for ERC721A__InitializableStorage.Layout;/*** @dev Modifier to protect an initializer function from being invoked twice.*/modifier initializerERC721A() {// If the contract is initializing we ignore whether _initialized is set in order to support multiple
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity ^0.8.0;/*** @dev This is a base storage for the initialization function for upgradeable diamond facet contracts**/library ERC721A__InitializableStorage {struct Layout {/** Indicates that the contract has been initialized.*/bool _initialized;/** Indicates that the contract is in the process of being initialized.*/bool _initializing;}bytes32 internal constant STORAGE_SLOT = keccak256('ERC721A.contracts.storage.initializable.facet');function layout() internal pure returns (Layout storage l) {bytes32 slot = STORAGE_SLOT;assembly {l.slot := slot
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity ^0.8.0;library ERC721AStorage {// Reference type for token approval.struct TokenApprovalRef {address value;}struct Layout {// =============================================================// STORAGE// =============================================================// The next token ID to be minted.uint256 _currentIndex;// The number of tokens burned.uint256 _burnCounter;// Token namestring _name;// Token symbolstring _symbol;// Mapping from token ID to ownership details// An empty struct value does not necessarily mean the token is unowned.// See {_packedOwnershipOf} implementation for details.
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// ERC721A Contracts v4.2.2// Creator: Chiru Labspragma solidity ^0.8.4;import './IERC721AUpgradeable.sol';import {ERC721AStorage} from './ERC721AStorage.sol';import './ERC721A__Initializable.sol';/*** @dev Interface of ERC721 token receiver.*/interface ERC721A__IERC721ReceiverUpgradeable {function onERC721Received(address operator,address from,uint256 tokenId,bytes calldata data) external returns (bytes4);}/*** @title ERC721A** @dev Implementation of the [ERC721](https://eips.ethereum.org/EIPS/eip-721)
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// ERC721A Contracts v4.2.2// Creator: Chiru Labspragma solidity ^0.8.4;import './IERC721AQueryableUpgradeable.sol';import '../ERC721AUpgradeable.sol';import '../ERC721A__Initializable.sol';/*** @title ERC721AQueryable.** @dev ERC721A subclass with convenience query functions.*/abstract contract ERC721AQueryableUpgradeable isERC721A__Initializable,ERC721AUpgradeable,IERC721AQueryableUpgradeable{function __ERC721AQueryable_init() internal onlyInitializingERC721A {__ERC721AQueryable_init_unchained();}function __ERC721AQueryable_init_unchained() internal onlyInitializingERC721A {}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// ERC721A Contracts v4.2.2// Creator: Chiru Labspragma solidity ^0.8.4;import '../IERC721AUpgradeable.sol';/*** @dev Interface of ERC721AQueryable.*/interface IERC721AQueryableUpgradeable is IERC721AUpgradeable {/*** Invalid query range (`start` >= `stop`).*/error InvalidQueryRange();/*** @dev Returns the `TokenOwnership` struct at `tokenId` without reverting.** If the `tokenId` is out of bounds:** - `addr = address(0)`* - `startTimestamp = 0`* - `burned = false`* - `extraData = 0`
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// ERC721A Contracts v4.2.2// Creator: Chiru Labspragma solidity ^0.8.4;/*** @dev Interface of ERC721A.*/interface IERC721AUpgradeable {/*** The caller must own the token or be an approved operator.*/error ApprovalCallerNotOwnerNorApproved();/*** The token does not exist.*/error ApprovalQueryForNonexistentToken();/*** The caller cannot approve to their own address.*/error ApproveToCaller();/**
12345678910111213141516171819{"optimizer": {"enabled": true,"runs": 200},"outputSelection": {"*": {"*": ["evm.bytecode","evm.deployedBytecode","devdoc","userdoc","metadata","abi"]}},"libraries": {}}
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"ApproveToCaller","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"InvalidQueryRange","type":"error"},{"inputs":[],"name":"MintERC2309QuantityExceedsLimit","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"OwnershipNotInitializedForExtraData","type":"error"},{"inputs":[],"name":"TransferCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"TransferFromIncorrectOwner","type":"error"},{"inputs":[],"name":"TransferToNonERC721ReceiverImplementer","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","type":"error"},{"inputs":[],"name":"URIQueryForNonexistentToken","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"fromTokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"toTokenId","type":"uint256"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"ConsecutiveTransfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC20Upgradeable","name":"token","type":"address"},{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ERC20PaymentReleased","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"version","type":"uint8"}],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"shares","type":"uint256"}],"name":"PayeeAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"PaymentReceived","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"PaymentReleased","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"RoyaltiesSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"uint8","name":"stageId_","type":"uint8"},{"internalType":"address[]","name":"accounts_","type":"address[]"}],"name":"addToWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts_","type":"address[]"},{"internalType":"uint256[]","name":"amounts_","type":"uint256[]"}],"name":"adminMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"stageId_","type":"uint8"}],"name":"balanceLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"stageId_","type":"uint8"},{"internalType":"address","name":"account_","type":"address"}],"name":"currentBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"explicitOwnershipOf","outputs":[{"components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint64","name":"startTimestamp","type":"uint64"},{"internalType":"bool","name":"burned","type":"bool"},{"internalType":"uint24","name":"extraData","type":"uint24"}],"internalType":"struct IERC721AUpgradeable.TokenOwnership","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"explicitOwnershipsOf","outputs":[{"components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint64","name":"startTimestamp","type":"uint64"},{"internalType":"bool","name":"burned","type":"bool"},{"internalType":"uint24","name":"extraData","type":"uint24"}],"internalType":"struct IERC721AUpgradeable.TokenOwnership[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"whitelistMerkleTreeRoot_","type":"bytes32"},{"internalType":"address","name":"royaltiesRecipient_","type":"address"},{"internalType":"uint256","name":"royaltiesValue_","type":"uint256"},{"internalType":"address[]","name":"shareholders","type":"address[]"},{"internalType":"uint256[]","name":"shares","type":"uint256[]"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account_","type":"address"}],"name":"isAdmin","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner_","type":"address"},{"internalType":"address","name":"operator_","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"stageId_","type":"uint8"},{"internalType":"address","name":"account_","type":"address"},{"internalType":"bytes32[]","name":"proof_","type":"bytes32[]"}],"name":"isWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"stageId_","type":"uint8"}],"name":"merkleTreeRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"payee","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"payeesLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"prefix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"stage_","type":"uint8"}],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount_","type":"uint256"}],"name":"publicMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"releasable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20Upgradeable","name":"token","type":"address"},{"internalType":"address","name":"account","type":"address"}],"name":"releasable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"account","type":"address"}],"name":"release","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20Upgradeable","name":"token","type":"address"},{"internalType":"address","name":"account","type":"address"}],"name":"release","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20Upgradeable","name":"token","type":"address"}],"name":"releaseAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"releaseAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20Upgradeable","name":"token","type":"address"},{"internalType":"address","name":"account","type":"address"}],"name":"released","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"released","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"stageId_","type":"uint8"},{"internalType":"address","name":"account_","type":"address"}],"name":"remainingBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"stageId_","type":"uint8"},{"internalType":"address[]","name":"accounts_","type":"address[]"}],"name":"removeFromWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"value_","type":"uint256"}],"name":"royaltyInfo","outputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"royaltyAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account_","type":"address"},{"internalType":"bool","name":"enable_","type":"bool"}],"name":"setAdminPermissions","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxSupply_","type":"uint256"}],"name":"setMaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"prefix_","type":"string"}],"name":"setPrefix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"stage_","type":"uint8"},{"internalType":"uint256","name":"value_","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"recipient_","type":"address"},{"internalType":"uint256","name":"amount_","type":"uint256"}],"name":"setRoyalties","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"enum TwoStage.Stage","name":"stage_","type":"uint8"}],"name":"setStage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"suffix_","type":"string"}],"name":"setSuffix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"shares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stage","outputs":[{"internalType":"enum TwoStage.Stage","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"suffix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"tokensOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"start","type":"uint256"},{"internalType":"uint256","name":"stop","type":"uint256"}],"name":"tokensOfOwnerIn","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20Upgradeable","name":"token","type":"address"}],"name":"totalReleased","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalReleased","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"stageId_","type":"uint8"},{"internalType":"uint256","name":"limit_","type":"uint256"}],"name":"updateBalanceLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"stageId_","type":"uint8"},{"internalType":"bytes32","name":"merkleTreeRoot_","type":"bytes32"}],"name":"updateMerkleTreeRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount_","type":"uint256"},{"internalType":"bytes32[]","name":"proof_","type":"bytes32[]"}],"name":"whitelistMint","outputs":[],"stateMutability":"payable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
608060405234801561001057600080fd5b506149f4806100206000396000f3fe6080604052600436106103b15760003560e01c80638b83209b116101e7578063c45ac0501161010d578063d79779b2116100a0578063e919ecad1161006f578063e919ecad14610c25578063e985e9c514610c3c578063f2fde38b14610c5c578063f7073c3a14610c7c57600080fd5b8063d79779b214610b6c578063da19480914610ba3578063e33b7de314610bc3578063e4ab4bb914610bd957600080fd5b8063ce3cd997116100dc578063ce3cd99714610aed578063ce7c2ac214610b0d578063d2cab05614610b44578063d5abeb0114610b5757600080fd5b8063c45ac05014610a6d578063c519cd1c14610a8d578063c87b56dd14610aad578063cb3afdb614610acd57600080fd5b8063a3f8eace11610185578063b7fafcd711610154578063b7fafcd7146109c7578063b88d4fde146109f8578063c040e6b814610a18578063c23dc68f14610a4057600080fd5b8063a3f8eace14610925578063a49340cc14610945578063ad0127f014610965578063b1ba72d61461099657600080fd5b806395d89b41116101c157806395d89b41146108995780639852595c146108ae57806399a2557a146108e5578063a22cb4651461090557600080fd5b80638b83209b1461083b5780638c7ea24b1461085b5780638da5cb5b1461087b57600080fd5b806342842e0e116102d75780636dba11631161026a57806375d5ae9f1161023957806375d5ae9f146107b957806375dadb32146107d95780638462151c146107ee57806385cb593b1461081b57600080fd5b80636dba1163146107445780636f8b44b01461076457806370a0823114610784578063715018a6146107a457600080fd5b80635be7fde8116102a65780635be7fde8146106cf5780635ee54e23146106e45780636352211e146107045780636a00670b1461072457600080fd5b806342842e0e1461064257806348b7504414610662578063580fc80a146106825780635bbb2177146106a257600080fd5b806323b872dd1161034f5780632db115441161031e5780632db11544146105b25780632f59f741146105c55780633a98ef39146105e5578063406072a9146105fb57600080fd5b806323b872dd14610513578063240ff27f1461053357806324d7806c146105535780632a55205a1461057357600080fd5b8063095ea7b31161038b578063095ea7b31461048e57806318160ddd146104b057806319165587146104d357806321a588de146104f357600080fd5b806301ffc9a7146103ff57806306fdde0314610434578063081812fc1461045657600080fd5b366103fa577f6ef95f06320e7a25a04a175ca677b7052bdd97131872c2192525a629f51be77033604080516001600160a01b0390921682523460208301520160405180910390a1005b600080fd5b34801561040b57600080fd5b5061041f61041a36600461419e565b610c91565b60405190151581526020015b60405180910390f35b34801561044057600080fd5b50610449610cb1565b60405161042b919061461d565b34801561046257600080fd5b5061047661047136600461428f565b610d4c565b6040516001600160a01b03909116815260200161042b565b34801561049a57600080fd5b506104ae6104a9366004613f92565b610d99565b005b3480156104bc57600080fd5b506104c5610e47565b60405190815260200161042b565b3480156104df57600080fd5b506104ae6104ee366004613e16565b610e67565b3480156104ff57600080fd5b506104ae61050e3660046143b2565b610f6a565b34801561051f57600080fd5b506104ae61052e366004613e6a565b611029565b34801561053f57600080fd5b506104ae61054e366004613f65565b611219565b34801561055f57600080fd5b5061041f61056e366004613e16565b611269565b34801561057f57600080fd5b5061059361058e366004614308565b611287565b604080516001600160a01b03909316835260208301919091520161042b565b6104ae6105c036600461428f565b6112dd565b3480156105d157600080fd5b506104ae6105e03660046143b2565b611399565b3480156105f157600080fd5b506101f5546104c5565b34801561060757600080fd5b506104c56106163660046141d6565b6001600160a01b0391821660009081526101fb6020908152604080832093909416825291909152205490565b34801561064e57600080fd5b506104ae61065d366004613e6a565b611448565b34801561066e57600080fd5b506104ae61067d3660046141d6565b611468565b34801561068e57600080fd5b506104ae61069d366004613e16565b61158b565b3480156106ae57600080fd5b506106c26106bd366004614059565b6115b9565b60405161042b919061457b565b3480156106db57600080fd5b506104ae6116ae565b3480156106f057600080fd5b506104ae6106ff3660046143e9565b6116de565b34801561071057600080fd5b5061047661071f36600461428f565b61171a565b34801561073057600080fd5b506104ae61073f3660046143e9565b611725565b34801561075057600080fd5b506104c561075f366004614343565b611761565b34801561077057600080fd5b506104ae61077f36600461428f565b6117a6565b34801561079057600080fd5b506104c561079f366004613e16565b6117d0565b3480156107b057600080fd5b506104ae611838565b3480156107c557600080fd5b506104ae6107d4366004614223565b61184c565b3480156107e557600080fd5b5061044961187e565b3480156107fa57600080fd5b5061080e610809366004613e16565b61188e565b60405161042b91906145bd565b34801561082757600080fd5b506104ae610836366004614223565b6119b9565b34801561084757600080fd5b5061047661085636600461428f565b6119eb565b34801561086757600080fd5b506104ae610876366004613f92565b611a2a565b34801561088757600080fd5b506033546001600160a01b0316610476565b3480156108a557600080fd5b50610449611a59565b3480156108ba57600080fd5b506104c56108c9366004613e16565b6001600160a01b031660009081526101f8602052604090205490565b3480156108f157600080fd5b5061080e610900366004613fbd565b611a71565b34801561091157600080fd5b506104ae610920366004613f65565b611c15565b34801561093157600080fd5b506104c5610940366004613e16565b611cbc565b34801561095157600080fd5b506104ae610960366004613ff1565b611cff565b34801561097157600080fd5b506104c5610980366004614329565b60ff16600090815261012d602052604090205490565b3480156109a257600080fd5b506104c56109b1366004614329565b60ff16600090815261015e602052604090205490565b3480156109d357600080fd5b506104c56109e2366004614329565b60ff1660009081526101c3602052604090205490565b348015610a0457600080fd5b506104ae610a13366004613eaa565b611df5565b348015610a2457600080fd5b5061025954610a339060ff1681565b60405161042b91906145f5565b348015610a4c57600080fd5b50610a60610a5b36600461428f565b611e39565b60405161042b9190614786565b348015610a7957600080fd5b506104c5610a883660046141d6565b611ec6565b348015610a9957600080fd5b506104ae610aa83660046143e9565b611fa2565b348015610ab957600080fd5b50610449610ac836600461428f565b611fde565b348015610ad957600080fd5b5061041f610ae836600461435e565b61200f565b348015610af957600080fd5b506104ae610b08366004614204565b612037565b348015610b1957600080fd5b506104c5610b28366004613e16565b6001600160a01b031660009081526101f7602052604090205490565b6104ae610b523660046142bf565b612092565b348015610b6357600080fd5b5060c9546104c5565b348015610b7857600080fd5b506104c5610b87366004613e16565b6001600160a01b031660009081526101fa602052604090205490565b348015610baf57600080fd5b506104ae610bbe3660046140b4565b61219e565b348015610bcf57600080fd5b506101f6546104c5565b348015610be557600080fd5b506104c5610bf4366004614343565b60ff8216600090815261015e602090815260408083206001600160a01b038516845260010190915290205492915050565b348015610c3157600080fd5b506104c56102275481565b348015610c4857600080fd5b5061041f610c57366004613e32565b6124bb565b348015610c6857600080fd5b506104ae610c77366004613e16565b6124d7565b348015610c8857600080fd5b5061044961254d565b6000610c9c8261255d565b80610cab5750610cab82612592565b92915050565b6060610cbb6125e0565b6002018054610cc990614875565b80601f0160208091040260200160405190810160405280929190818152602001828054610cf590614875565b8015610d425780601f10610d1757610100808354040283529160200191610d42565b820191906000526020600020905b815481529060010190602001808311610d2557829003601f168201915b5050505050905090565b6000610d5782612604565b610d74576040516333d1c03960e21b815260040160405180910390fd5b610d7c6125e0565b60009283526006016020525060409020546001600160a01b031690565b6000610da48261171a565b9050336001600160a01b03821614610ddd57610dc081336124bb565b610ddd576040516367d9dca160e11b815260040160405180910390fd5b82610de66125e0565b6000848152600691909101602052604080822080546001600160a01b0319166001600160a01b0394851617905551849286811692908516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259190a4505050565b60006001610e536125e0565b60010154610e5f6125e0565b540303919050565b6001600160a01b03811660009081526101f76020526040902054610ea65760405162461bcd60e51b8152600401610e9d90614684565b60405180910390fd5b6000610eb182611cbc565b905080610ed05760405162461bcd60e51b8152600401610e9d906146ca565b6001600160a01b03821660009081526101f8602052604081208054839290610ef99084906147e7565b92505081905550806101f66000828254610f1391906147e7565b90915550610f239050828261264d565b604080516001600160a01b0384168152602081018390527fdf20fd1e76bc69d672e4814fafb2c449bba3a5369d8359adf9e05e6fde87b05691015b60405180910390a15050565b610f7333611269565b610f8f5760405162461bcd60e51b8152600401610e9d90614715565b60005b818110156110235760ff8416600090815261012d6020526040812060019190820190858585818110610fd457634e487b7160e01b600052603260045260246000fd5b9050602002016020810190610fe99190613e16565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061101b816148b0565b915050610f92565b50505050565b600061103482612766565b9050836001600160a01b0316816001600160a01b0316146110675760405162a1148160e81b815260040160405180910390fd5b600080611073846127f5565b9150915061109881876110833390565b6001600160a01b039081169116811491141790565b6110c3576110a686336124bb565b6110c357604051632ce44b5f60e11b815260040160405180910390fd5b6001600160a01b0385166110ea57604051633a954ecd60e21b815260040160405180910390fd5b80156110f557600082555b6110fd6125e0565b6001600160a01b03871660009081526005919091016020526040902080546000190190556111296125e0565b6001600160a01b03861660008181526005929092016020526040909120805460010190554260a01b17600160e11b176111606125e0565b60008681526004919091016020526040902055600160e11b83166111cf576001840161118a6125e0565b600082815260049190910160205260409020546111cd576111a96125e0565b5481146111cd57836111b96125e0565b600083815260049190910160205260409020555b505b83856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45b505050505050565b61122233611269565b61123e5760405162461bcd60e51b8152600401610e9d90614715565b6001600160a01b03919091166000908152609760205260409020805460ff1916911515919091179055565b6001600160a01b031660009081526097602052604090205460ff1690565b60408051808201909152610191546001600160a01b038116808352600160a01b90910462ffffff16602083018190529091600091612710906112c99086614813565b6112d391906147ff565b9150509250929050565b60026102595460ff16600281111561130557634e487b7160e01b600052602160045260246000fd5b146113525760405162461bcd60e51b815260206004820152601760248201527f5075626c69632073616c65206e6f7420656e61626c65640000000000000000006044820152606401610e9d565b600261135f81338461281d565b611369338361283b565b6113956113868260ff1660009081526101c3602052604090205490565b6113909084614813565b6128d4565b5050565b6113a233611269565b6113be5760405162461bcd60e51b8152600401610e9d90614715565b60005b818110156110235760ff8416600090815261012d602052604081206001019084848481811061140057634e487b7160e01b600052603260045260246000fd5b90506020020160208101906114159190613e16565b6001600160a01b031681526020810191909152604001600020805460ff1916905580611440816148b0565b9150506113c1565b61146383838360405180602001604052806000815250611df5565b505050565b6001600160a01b03811660009081526101f7602052604090205461149e5760405162461bcd60e51b8152600401610e9d90614684565b60006114aa8383611ec6565b9050806114c95760405162461bcd60e51b8152600401610e9d906146ca565b6001600160a01b0380841660009081526101fb60209081526040808320938616835292905290812080548392906115019084906147e7565b90915550506001600160a01b03831660009081526101fa60205260408120805483929061152f9084906147e7565b909155506115409050838383612956565b604080516001600160a01b038481168252602082018490528516917f3be5b7a71e84ed12875d241991c70855ac5817d847039e17a9d895c1ceb0f18a910160405180910390a2505050565b60005b610227548110156113955760006115a4826119eb565b90506115b08382611468565b5060010161158e565b6060816000816001600160401b038111156115e457634e487b7160e01b600052604160045260246000fd5b60405190808252806020026020018201604052801561163657816020015b6040805160808101825260008082526020808301829052928201819052606082015282526000199092019101816116025790505b50905060005b8281146116a55761167286868381811061166657634e487b7160e01b600052603260045260246000fd5b90506020020135611e39565b82828151811061169257634e487b7160e01b600052603260045260246000fd5b602090810291909101015260010161163c565b50949350505050565b60005b610227548110156116db5760006116c7826119eb565b90506116d281610e67565b506001016116b1565b50565b6116e733611269565b6117035760405162461bcd60e51b8152600401610e9d90614715565b60ff909116600090815261012d6020526040902055565b6000610cab82612766565b61172e33611269565b61174a5760405162461bcd60e51b8152600401610e9d90614715565b60ff90911660009081526101c36020526040902055565b60ff8216600081815261015e602081815260408084206001600160a01b03871685526001810183529084205494845291905254909161179f91614832565b9392505050565b6117af33611269565b6117cb5760405162461bcd60e51b8152600401610e9d90614715565b60c955565b60006001600160a01b0382166117f9576040516323d3ad8160e21b815260040160405180910390fd5b6001600160401b036118096125e0565b6005016000846001600160a01b03166001600160a01b0316815260200190815260200160002054169050919050565b6118406129a8565b61184a6000612a02565b565b61185533611269565b6118715760405162461bcd60e51b8152600401610e9d90614715565b6114636101608383613c3b565b606061015f8054610cc990614875565b6060600080600061189e856117d0565b90506000816001600160401b038111156118c857634e487b7160e01b600052604160045260246000fd5b6040519080825280602002602001820160405280156118f1578160200160208202803683370190505b50905061191e60408051608081018252600080825260208201819052918101829052606081019190915290565b60015b8386146119ad5761193181612a54565b9150816040015115611942576119a5565b81516001600160a01b03161561195757815194505b876001600160a01b0316856001600160a01b031614156119a5578083878060010198508151811061199857634e487b7160e01b600052603260045260246000fd5b6020026020010181815250505b600101611921565b50909695505050505050565b6119c233611269565b6119de5760405162461bcd60e51b8152600401610e9d90614715565b61146361015f8383613c3b565b60006101f98281548110611a0f57634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b031692915050565b611a3333611269565b611a4f5760405162461bcd60e51b8152600401610e9d90614715565b6113958282612a9b565b6060611a636125e0565b6003018054610cc990614875565b6060818310611a9357604051631960ccad60e11b815260040160405180910390fd5b600080611a9e612b63565b90506001851015611aae57600194505b80841115611aba578093505b6000611ac5876117d0565b905084861015611ae45785850381811015611ade578091505b50611ae8565b5060005b6000816001600160401b03811115611b1057634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015611b39578160200160208202803683370190505b50905081611b4c57935061179f92505050565b6000611b5788611e39565b905060008160400151611b68575080515b885b888114158015611b7a5750848714155b15611c0457611b8881612a54565b9250826040015115611b9957611bfc565b82516001600160a01b031615611bae57825191505b8a6001600160a01b0316826001600160a01b03161415611bfc5780848880600101995081518110611bef57634e487b7160e01b600052603260045260246000fd5b6020026020010181815250505b600101611b6a565b505050928352509095945050505050565b6001600160a01b038216331415611c3f5760405163b06307db60e01b815260040160405180910390fd5b80611c486125e0565b336000818152600792909201602090815260408084206001600160a01b03881680865290835293819020805460ff19169515159590951790945592518415158152919290917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b600080611cc96101f65490565b611cd390476147e7565b905061179f8382611cfa866001600160a01b031660009081526101f8602052604090205490565b612b73565b611d0833611269565b611d245760405162461bcd60e51b8152600401610e9d90614715565b82818114611d745760405162461bcd60e51b815260206004820152601760248201527f41646d696e206d696e743a2062616420726571756573740000000000000000006044820152606401610e9d565b60005b8181101561121157611de3868683818110611da257634e487b7160e01b600052603260045260246000fd5b9050602002016020810190611db79190613e16565b858584818110611dd757634e487b7160e01b600052603260045260246000fd5b90506020020135612bb3565b80611ded816148b0565b915050611d77565b611e00848484611029565b6001600160a01b0383163b1561102357611e1c84848484612bbd565b611023576040516368d2bf6b60e11b815260040160405180910390fd5b6040805160808101825260008082526020820181905291810182905260608101919091526040805160808101825260008082526020820181905291810182905260608101919091526001831080611e975750611e93612b63565b8310155b15611ea25792915050565b611eab83612a54565b9050806040015115611ebd5792915050565b61179f83612cb1565b6001600160a01b03821660009081526101fa602052604081205481906040516370a0823160e01b81523060048201526001600160a01b038616906370a082319060240160206040518083038186803b158015611f2157600080fd5b505afa158015611f35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f5991906142a7565b611f6391906147e7565b6001600160a01b0380861660009081526101fb6020908152604080832093881683529290522054909150611f9a9084908390612b73565b949350505050565b611fab33611269565b611fc75760405162461bcd60e51b8152600401610e9d90614715565b60ff909116600090815261015e6020526040902055565b6060611fe982612604565b61200657604051630a14c4b560e41b815260040160405180910390fd5b610cab82612ce6565b60ff8416600090815261012d6020526040812061202e90858585612d1f565b95945050505050565b61204033611269565b61205c5760405162461bcd60e51b8152600401610e9d90614715565b610259805482919060ff1916600183600281111561208a57634e487b7160e01b600052602160045260246000fd5b021790555050565b60013383836120a38484848461200f565b6120e15760405162461bcd60e51b815260206004820152600f60248201526e139bdd081dda1a5d195b1a5cdd1959608a1b6044820152606401610e9d565b60016102595460ff16600281111561210957634e487b7160e01b600052602160045260246000fd5b146121565760405162461bcd60e51b815260206004820152601a60248201527f57686974656c6973742073616c65206e6f7420656e61626c65640000000000006044820152606401610e9d565b600161216381338a61281d565b61216d338961283b565b61219461218a8260ff1660009081526101c3602052604090205490565b611390908a614813565b5050505050505050565b60008051602061499f83398151915254610100900460ff166121d35760008051602061499f8339815191525460ff16156121d7565b303b155b6122495760405162461bcd60e51b815260206004820152603760248201527f455243373231415f5f496e697469616c697a61626c653a20636f6e747261637460448201527f20697320616c726561647920696e697469616c697a65640000000000000000006064820152608401610e9d565b60008051602061499f83398151915254610100900460ff161580156122855760008051602061499f833981519152805461ffff19166101011790555b600054610100900460ff16158080156122a55750600054600160ff909116105b806122bf5750303b1580156122bf575060005460ff166001145b6123225760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610e9d565b6000805460ff191660011790558015612345576000805461ff0019166101001790555b6123896040518060400160405280600781526020016629a427aaa722a760c91b8152506040518060400160405280600381526020016229a42760e91b815250612dca565b612391612e08565b612399612e37565b6123a46115b3612e7a565b6123ac612ea1565b6123b4612ea1565b6123bc612ea1565b6123fb60405180608001604052806044815260200161495b6044913960405180604001604052806005815260200164173539b7b760d91b815250612ec8565b6124058484612f18565b61240f8686612f51565b61241a6001886116de565b61242760015b6001611fa2565b6124316002612420565b61244460015b666a94d74f430000611725565b61244e6002612437565b8015612494576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50801561121157505060008051602061499f833981519152805461ff001916905550505050565b60006124c78383612f78565b8061179f575061179f8383612fb5565b6124df6129a8565b6001600160a01b0381166125445760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610e9d565b6116db81612a02565b60606101608054610cc990614875565b60006001600160e01b0319821663152a902d60e11b1480610cab57506301ffc9a760e01b6001600160e01b0319831614610cab565b60006301ffc9a760e01b6001600160e01b0319831614806125c357506380ac58cd60e01b6001600160e01b03198316145b80610cab5750506001600160e01b031916635b5e139f60e01b1490565b7f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c4090565b60008160011115801561261e575061261a6125e0565b5482105b8015610cab5750600160e01b6126326125e0565b60008481526004919091016020526040902054161592915050565b8047101561269d5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610e9d565b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146126ea576040519150601f19603f3d011682016040523d82523d6000602084013e6126ef565b606091505b50509050806114635760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610e9d565b600081806001116127dc576127796125e0565b548110156127dc57600061278b6125e0565b600083815260049190910160205260409020549050600160e01b81166127da575b8061179f576127b96125e0565b600019909201600081815260049390930160205260409092205490506127ac565b505b604051636f96cda160e11b815260040160405180910390fd5b60008060006128026125e0565b60009485526006016020525050604090912080549092909150565b60ff8316600090815261015e60205260409020611463908383612ff4565b8060c9548161284861308e565b61285291906147e7565b11156128915760405162461bcd60e51b815260206004820152600e60248201526d4578636565647320737570706c7960901b6044820152606401610e9d565b3233146128ca5760405162461bcd60e51b81526020600482015260076024820152664e6f20626f747360c81b6044820152606401610e9d565b611463838361309d565b803410156129155760405162461bcd60e51b815260206004820152600e60248201526d141c9a58d94e881a5b9d985b1a5960921b6044820152606401610e9d565b60006129218234614832565b9050801561139557604051339082156108fc029083906000818181858888f19350505050158015611463573d6000803e3d6000fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526114639084906130b7565b6033546001600160a01b0316331461184a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610e9d565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b604080516080810182526000808252602082018190529181018290526060810191909152610cab612a836125e0565b60008481526004919091016020526040902054613189565b612710811115612aed5760405162461bcd60e51b815260206004820152601c60248201527f526f79616c746965733a2076616c756520697320746f6f2068696768000000006044820152606401610e9d565b6040805180820182526001600160a01b03841680825262ffffff8416602092830181905261019180546001600160b81b0319168317600160a01b90920291909117905582519081529081018390527f908669f35f6fb3977a956ba70597841fe541d1e8491ca3c025161e258d3bfdb69101610f5e565b6000612b6d6125e0565b54919050565b6101f5546001600160a01b03841660009081526101f7602052604081205490918391612b9f9086614813565b612ba991906147ff565b611f9a9190614832565b611395828261283b565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a0290612bf2903390899088908890600401614548565b602060405180830381600087803b158015612c0c57600080fd5b505af1925050508015612c3c575060408051601f3d908101601f19168201909252612c39918101906141ba565b60015b612c97573d808015612c6a576040519150601f19603f3d011682016040523d82523d6000602084013e612c6f565b606091505b508051612c8f576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611f9a565b604080516080810182526000808252602082018190529181018290526060810191909152610cab612ce183612766565b613189565b606061015f612cf4836131d0565b610160604051602001612d0993929190614520565b6040516020818303038152906040529050919050565b6040516bffffffffffffffffffffffff19606085901b1660208201526000908190603401604051602081830303815290604052805190602001209050612d9b84848080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050895491508490506132e9565b80612dc057506001600160a01b038516600090815260018701602052604090205460ff165b9695505050505050565b60008051602061499f83398151915254610100900460ff16612dfe5760405162461bcd60e51b8152600401610e9d90614630565b61139582826132ff565b600054610100900460ff16612e2f5760405162461bcd60e51b8152600401610e9d9061473b565b61184a613382565b600054610100900460ff16612e5e5760405162461bcd60e51b8152600401610e9d9061473b565b336000908152609760205260409020805460ff19166001179055565b600054610100900460ff166117cb5760405162461bcd60e51b8152600401610e9d9061473b565b600054610100900460ff1661184a5760405162461bcd60e51b8152600401610e9d9061473b565b600054610100900460ff16612eef5760405162461bcd60e51b8152600401610e9d9061473b565b8151612f039061015f906020850190613cbf565b50805161146390610160906020840190613cbf565b600054610100900460ff16612f3f5760405162461bcd60e51b8152600401610e9d9061473b565b612f4982826133b2565b505161022755565b600054610100900460ff16611a4f5760405162461bcd60e51b8152600401610e9d9061473b565b6000612f826125e0565b6001600160a01b039384166000908152600791909101602090815260408083209490951682529290925250205460ff1690565b600080612fc1846133e3565b90506001600160a01b03811615801590611f9a5750826001600160a01b0316816001600160a01b03161491505092915050565b82546001600160a01b038316600090815260018501602052604090205461301c9083906147e7565b111561305a5760405162461bcd60e51b815260206004820152600d60248201526c115e18d959591cc81b1a5b5a5d609a1b6044820152606401610e9d565b6001600160a01b0382166000908152600184016020526040812080548392906130849084906147e7565b9091555050505050565b6000613098610e47565b905090565b611395828260405180602001604052806000815250613549565b600061310c826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166135c69092919063ffffffff16565b805190915015611463578080602001905181019061312a9190614098565b6114635760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610e9d565b604080516080810182526001600160a01b038316815260a083901c6001600160401b03166020820152600160e01b831615159181019190915260e89190911c606082015290565b6060816131f45750506040805180820190915260018152600360fc1b602082015290565b8160005b811561321e5780613208816148b0565b91506132179050600a836147ff565b91506131f8565b6000816001600160401b0381111561324657634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015613270576020820181803683370190505b5090505b8415611f9a57613285600183614832565b9150613292600a866148cb565b61329d9060306147e7565b60f81b8183815181106132c057634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a9053506132e2600a866147ff565b9450613274565b6000826132f685846135d5565b14949350505050565b60008051602061499f83398151915254610100900460ff166133335760405162461bcd60e51b8152600401610e9d90614630565b8161333c6125e0565b6002019080519060200190613352929190613cbf565b508061335c6125e0565b6003019080519060200190613372929190613cbf565b50600161337d6125e0565b555050565b600054610100900460ff166133a95760405162461bcd60e51b8152600401610e9d9061473b565b61184a33612a02565b600054610100900460ff166133d95760405162461bcd60e51b8152600401610e9d9061473b565b6113958282613630565b600080468060018114613418576089811461343457600481146134505762013881811461346c576105398114613488576134a0565b73a5409ec958c83c3f309868babaca7c86dcb077c192506134a0565b7358807bad0b376efc12f5ad86aac70e78ed67deae92506134a0565b73f57b2c51ded3a29e6891aba85459d600256cf31792506134a0565b73ff7ca10af37178bdd056628ef42fd7f799fac77c92506134a0565b73e1a2bbc877b29adbc56d2659dbcb0ae14ee6207192505b506001600160a01b03821615806134b75750806089145b806134c457508062013881145b156134d0575092915050565b60405163c455279160e01b81526001600160a01b03858116600483015283169063c45527919060240160206040518083038186803b15801561351157600080fd5b505afa158015613525573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f9a91906141e8565b613553838361378a565b6001600160a01b0383163b1561146357600061356d6125e0565b5490508281035b6135876000868380600101945086612bbd565b6135a4576040516368d2bf6b60e11b815260040160405180910390fd5b81811061357457816135b46125e0565b54146135bf57600080fd5b5050505050565b6060611f9a84846000856138be565b600081815b8451811015613628576136148286838151811061360757634e487b7160e01b600052603260045260246000fd5b60200260200101516139ef565b915080613620816148b0565b9150506135da565b509392505050565b600054610100900460ff166136575760405162461bcd60e51b8152600401610e9d9061473b565b80518251146136c35760405162461bcd60e51b815260206004820152603260248201527f5061796d656e7453706c69747465723a2070617965657320616e6420736861726044820152710cae640d8cadccee8d040dad2e6dac2e8c6d60731b6064820152608401610e9d565b60008251116137145760405162461bcd60e51b815260206004820152601a60248201527f5061796d656e7453706c69747465723a206e6f207061796565730000000000006044820152606401610e9d565b60005b82518110156114635761377883828151811061374357634e487b7160e01b600052603260045260246000fd5b602002602001015183838151811061376b57634e487b7160e01b600052603260045260246000fd5b6020026020010151613a1e565b80613782816148b0565b915050613717565b60006137946125e0565b549050816137b55760405163b562e8dd60e01b815260040160405180910390fd5b6801000000000000000182026137c96125e0565b6001600160a01b038516600081815260059290920160205260409091208054929092019091554260a01b6001841460e11b17176138046125e0565b600083815260049190910160205260408120919091556001600160a01b0384169083830190839083907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8180a4600183015b81811461388e57808360007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a4600101613856565b50816138ac57604051622e076360e81b815260040160405180910390fd5b806138b56125e0565b55506114639050565b60608247101561391f5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610e9d565b6001600160a01b0385163b6139765760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610e9d565b600080866001600160a01b031685876040516139929190614504565b60006040518083038185875af1925050503d80600081146139cf576040519150601f19603f3d011682016040523d82523d6000602084013e6139d4565b606091505b50915091506139e4828286613c02565b979650505050505050565b6000818310613a0b57600082815260208490526040902061179f565b600083815260208390526040902061179f565b6001600160a01b038216613a895760405162461bcd60e51b815260206004820152602c60248201527f5061796d656e7453706c69747465723a206163636f756e74206973207468652060448201526b7a65726f206164647265737360a01b6064820152608401610e9d565b60008111613ad95760405162461bcd60e51b815260206004820152601d60248201527f5061796d656e7453706c69747465723a207368617265732061726520300000006044820152606401610e9d565b6001600160a01b03821660009081526101f7602052604090205415613b545760405162461bcd60e51b815260206004820152602b60248201527f5061796d656e7453706c69747465723a206163636f756e7420616c726561647960448201526a206861732073686172657360a81b6064820152608401610e9d565b6101f98054600181019091557f29eba5f30ca2030a69ed2d7f74871c83bbc526b071320256f127653c7dfff4e90180546001600160a01b0319166001600160a01b03841690811790915560009081526101f7602052604090208190556101f554613bbf9082906147e7565b6101f555604080516001600160a01b0384168152602081018390527f40c340f65e17194d14ddddb073d3c9f888e3cb52b5aae0c6c7706b4fbc905fac9101610f5e565b60608315613c1157508161179f565b825115613c215782518084602001fd5b8160405162461bcd60e51b8152600401610e9d919061461d565b828054613c4790614875565b90600052602060002090601f016020900481019282613c695760008555613caf565b82601f10613c825782800160ff19823516178555613caf565b82800160010185558215613caf579182015b82811115613caf578235825591602001919060010190613c94565b50613cbb929150613d33565b5090565b828054613ccb90614875565b90600052602060002090601f016020900481019282613ced5760008555613caf565b82601f10613d0657805160ff1916838001178555613caf565b82800160010185558215613caf579182015b82811115613caf578251825591602001919060010190613d18565b5b80821115613cbb5760008155600101613d34565b60008083601f840112613d59578182fd5b5081356001600160401b03811115613d6f578182fd5b6020830191508360208260051b8501011115613d8a57600080fd5b9250929050565b600082601f830112613da1578081fd5b81356020613db6613db1836147c4565b614794565b80838252828201915082860187848660051b8901011115613dd5578586fd5b855b85811015613df357813584529284019290840190600101613dd7565b5090979650505050505050565b803560ff81168114613e1157600080fd5b919050565b600060208284031215613e27578081fd5b813561179f81614921565b60008060408385031215613e44578081fd5b8235613e4f81614921565b91506020830135613e5f81614921565b809150509250929050565b600080600060608486031215613e7e578081fd5b8335613e8981614921565b92506020840135613e9981614921565b929592945050506040919091013590565b60008060008060808587031215613ebf578182fd5b8435613eca81614921565b9350602085810135613edb81614921565b93506040860135925060608601356001600160401b0380821115613efd578384fd5b818801915088601f830112613f10578384fd5b813581811115613f2257613f2261490b565b613f34601f8201601f19168501614794565b91508082528984828501011115613f49578485fd5b8084840185840137810190920192909252939692955090935050565b60008060408385031215613f77578182fd5b8235613f8281614921565b91506020830135613e5f81614936565b60008060408385031215613fa4578182fd5b8235613faf81614921565b946020939093013593505050565b600080600060608486031215613fd1578081fd5b8335613fdc81614921565b95602085013595506040909401359392505050565b60008060008060408587031215614006578182fd5b84356001600160401b038082111561401c578384fd5b61402888838901613d48565b90965094506020870135915080821115614040578384fd5b5061404d87828801613d48565b95989497509550505050565b6000806020838503121561406b578182fd5b82356001600160401b03811115614080578283fd5b61408c85828601613d48565b90969095509350505050565b6000602082840312156140a9578081fd5b815161179f81614936565b600080600080600060a086880312156140cb578283fd5b853594506020808701356140de81614921565b94506040870135935060608701356001600160401b0380821115614100578384fd5b818901915089601f830112614113578384fd5b8135614121613db1826147c4565b8082825285820191508585018d878560051b8801011115614140578788fd5b8795505b8386101561416b57803561415781614921565b835260019590950194918601918601614144565b50965050506080890135925080831115614183578384fd5b505061419188828901613d91565b9150509295509295909350565b6000602082840312156141af578081fd5b813561179f81614944565b6000602082840312156141cb578081fd5b815161179f81614944565b60008060408385031215613e44578182fd5b6000602082840312156141f9578081fd5b815161179f81614921565b600060208284031215614215578081fd5b81356003811061179f578182fd5b60008060208385031215614235578182fd5b82356001600160401b038082111561424b578384fd5b818501915085601f83011261425e578384fd5b81358181111561426c578485fd5b86602082850101111561427d578485fd5b60209290920196919550909350505050565b6000602082840312156142a0578081fd5b5035919050565b6000602082840312156142b8578081fd5b5051919050565b6000806000604084860312156142d3578081fd5b8335925060208401356001600160401b038111156142ef578182fd5b6142fb86828701613d48565b9497909650939450505050565b6000806040838503121561431a578182fd5b50508035926020909101359150565b60006020828403121561433a578081fd5b61179f82613e00565b60008060408385031215614355578182fd5b613e4f83613e00565b60008060008060608587031215614373578182fd5b61437c85613e00565b9350602085013561438c81614921565b925060408501356001600160401b038111156143a6578283fd5b61404d87828801613d48565b6000806000604084860312156143c6578081fd5b6143cf84613e00565b925060208401356001600160401b038111156142ef578182fd5b600080604083850312156143fb578182fd5b613faf83613e00565b6000815180845261441c816020860160208601614849565b601f01601f19169290920160200192915050565b8054600090600181811c908083168061444a57607f831692505b602080841082141561446a57634e487b7160e01b86526022600452602486fd5b81801561447e576001811461448f576144bc565b60ff198616895284890196506144bc565b60008881526020902060005b868110156144b45781548b82015290850190830161449b565b505084890196505b50505050505092915050565b80516001600160a01b031682526020808201516001600160401b03169083015260408082015115159083015260609081015162ffffff16910152565b60008251614516818460208701614849565b9190910192915050565b600061452c8286614430565b845161453c818360208901614849565b6139e481830186614430565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612dc090830184614404565b6020808252825182820181905260009190848201906040850190845b818110156119ad576145aa8385516144c8565b9284019260809290920191600101614597565b6020808252825182820181905260009190848201906040850190845b818110156119ad578351835292840192918401916001016145d9565b602081016003831061461757634e487b7160e01b600052602160045260246000fd5b91905290565b60208152600061179f6020830184614404565b60208082526034908201527f455243373231415f5f496e697469616c697a61626c653a20636f6e7472616374604082015273206973206e6f7420696e697469616c697a696e6760601b606082015260800190565b60208082526026908201527f5061796d656e7453706c69747465723a206163636f756e7420686173206e6f2060408201526573686172657360d01b606082015260800190565b6020808252602b908201527f5061796d656e7453706c69747465723a206163636f756e74206973206e6f742060408201526a191d59481c185e5b595b9d60aa1b606082015260800190565b6020808252600c908201526b2737ba1030b71030b236b4b760a11b604082015260600190565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b60808101610cab82846144c8565b604051601f8201601f191681016001600160401b03811182821017156147bc576147bc61490b565b604052919050565b60006001600160401b038211156147dd576147dd61490b565b5060051b60200190565b600082198211156147fa576147fa6148df565b500190565b60008261480e5761480e6148f5565b500490565b600081600019048311821515161561482d5761482d6148df565b500290565b600082821015614844576148446148df565b500390565b60005b8381101561486457818101518382015260200161484c565b838111156110235750506000910152565b600181811c9082168061488957607f821691505b602082108114156148aa57634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156148c4576148c46148df565b5060010190565b6000826148da576148da6148f5565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146116db57600080fd5b80151581146116db57600080fd5b6001600160e01b0319811681146116db57600080fdfe68747470733a2f2f697066732e696f2f697066732f516d537142767534414d74784d67355459727a7848647156584a44326473477136626b4c4a4a4a533773547876522fee151c8401928dc223602bb187aff91b9a56c7cae5476ef1b3287b085a16c85fa26469706673582212201ba13f2976c9496379f4c994a1dd63c63c84cc3a0b7412aca6703d9c8f54c47864736f6c63430008040033
Deployed Bytecode
0x6080604052600436106103b15760003560e01c80638b83209b116101e7578063c45ac0501161010d578063d79779b2116100a0578063e919ecad1161006f578063e919ecad14610c25578063e985e9c514610c3c578063f2fde38b14610c5c578063f7073c3a14610c7c57600080fd5b8063d79779b214610b6c578063da19480914610ba3578063e33b7de314610bc3578063e4ab4bb914610bd957600080fd5b8063ce3cd997116100dc578063ce3cd99714610aed578063ce7c2ac214610b0d578063d2cab05614610b44578063d5abeb0114610b5757600080fd5b8063c45ac05014610a6d578063c519cd1c14610a8d578063c87b56dd14610aad578063cb3afdb614610acd57600080fd5b8063a3f8eace11610185578063b7fafcd711610154578063b7fafcd7146109c7578063b88d4fde146109f8578063c040e6b814610a18578063c23dc68f14610a4057600080fd5b8063a3f8eace14610925578063a49340cc14610945578063ad0127f014610965578063b1ba72d61461099657600080fd5b806395d89b41116101c157806395d89b41146108995780639852595c146108ae57806399a2557a146108e5578063a22cb4651461090557600080fd5b80638b83209b1461083b5780638c7ea24b1461085b5780638da5cb5b1461087b57600080fd5b806342842e0e116102d75780636dba11631161026a57806375d5ae9f1161023957806375d5ae9f146107b957806375dadb32146107d95780638462151c146107ee57806385cb593b1461081b57600080fd5b80636dba1163146107445780636f8b44b01461076457806370a0823114610784578063715018a6146107a457600080fd5b80635be7fde8116102a65780635be7fde8146106cf5780635ee54e23146106e45780636352211e146107045780636a00670b1461072457600080fd5b806342842e0e1461064257806348b7504414610662578063580fc80a146106825780635bbb2177146106a257600080fd5b806323b872dd1161034f5780632db115441161031e5780632db11544146105b25780632f59f741146105c55780633a98ef39146105e5578063406072a9146105fb57600080fd5b806323b872dd14610513578063240ff27f1461053357806324d7806c146105535780632a55205a1461057357600080fd5b8063095ea7b31161038b578063095ea7b31461048e57806318160ddd146104b057806319165587146104d357806321a588de146104f357600080fd5b806301ffc9a7146103ff57806306fdde0314610434578063081812fc1461045657600080fd5b366103fa577f6ef95f06320e7a25a04a175ca677b7052bdd97131872c2192525a629f51be77033604080516001600160a01b0390921682523460208301520160405180910390a1005b600080fd5b34801561040b57600080fd5b5061041f61041a36600461419e565b610c91565b60405190151581526020015b60405180910390f35b34801561044057600080fd5b50610449610cb1565b60405161042b919061461d565b34801561046257600080fd5b5061047661047136600461428f565b610d4c565b6040516001600160a01b03909116815260200161042b565b34801561049a57600080fd5b506104ae6104a9366004613f92565b610d99565b005b3480156104bc57600080fd5b506104c5610e47565b60405190815260200161042b565b3480156104df57600080fd5b506104ae6104ee366004613e16565b610e67565b3480156104ff57600080fd5b506104ae61050e3660046143b2565b610f6a565b34801561051f57600080fd5b506104ae61052e366004613e6a565b611029565b34801561053f57600080fd5b506104ae61054e366004613f65565b611219565b34801561055f57600080fd5b5061041f61056e366004613e16565b611269565b34801561057f57600080fd5b5061059361058e366004614308565b611287565b604080516001600160a01b03909316835260208301919091520161042b565b6104ae6105c036600461428f565b6112dd565b3480156105d157600080fd5b506104ae6105e03660046143b2565b611399565b3480156105f157600080fd5b506101f5546104c5565b34801561060757600080fd5b506104c56106163660046141d6565b6001600160a01b0391821660009081526101fb6020908152604080832093909416825291909152205490565b34801561064e57600080fd5b506104ae61065d366004613e6a565b611448565b34801561066e57600080fd5b506104ae61067d3660046141d6565b611468565b34801561068e57600080fd5b506104ae61069d366004613e16565b61158b565b3480156106ae57600080fd5b506106c26106bd366004614059565b6115b9565b60405161042b919061457b565b3480156106db57600080fd5b506104ae6116ae565b3480156106f057600080fd5b506104ae6106ff3660046143e9565b6116de565b34801561071057600080fd5b5061047661071f36600461428f565b61171a565b34801561073057600080fd5b506104ae61073f3660046143e9565b611725565b34801561075057600080fd5b506104c561075f366004614343565b611761565b34801561077057600080fd5b506104ae61077f36600461428f565b6117a6565b34801561079057600080fd5b506104c561079f366004613e16565b6117d0565b3480156107b057600080fd5b506104ae611838565b3480156107c557600080fd5b506104ae6107d4366004614223565b61184c565b3480156107e557600080fd5b5061044961187e565b3480156107fa57600080fd5b5061080e610809366004613e16565b61188e565b60405161042b91906145bd565b34801561082757600080fd5b506104ae610836366004614223565b6119b9565b34801561084757600080fd5b5061047661085636600461428f565b6119eb565b34801561086757600080fd5b506104ae610876366004613f92565b611a2a565b34801561088757600080fd5b506033546001600160a01b0316610476565b3480156108a557600080fd5b50610449611a59565b3480156108ba57600080fd5b506104c56108c9366004613e16565b6001600160a01b031660009081526101f8602052604090205490565b3480156108f157600080fd5b5061080e610900366004613fbd565b611a71565b34801561091157600080fd5b506104ae610920366004613f65565b611c15565b34801561093157600080fd5b506104c5610940366004613e16565b611cbc565b34801561095157600080fd5b506104ae610960366004613ff1565b611cff565b34801561097157600080fd5b506104c5610980366004614329565b60ff16600090815261012d602052604090205490565b3480156109a257600080fd5b506104c56109b1366004614329565b60ff16600090815261015e602052604090205490565b3480156109d357600080fd5b506104c56109e2366004614329565b60ff1660009081526101c3602052604090205490565b348015610a0457600080fd5b506104ae610a13366004613eaa565b611df5565b348015610a2457600080fd5b5061025954610a339060ff1681565b60405161042b91906145f5565b348015610a4c57600080fd5b50610a60610a5b36600461428f565b611e39565b60405161042b9190614786565b348015610a7957600080fd5b506104c5610a883660046141d6565b611ec6565b348015610a9957600080fd5b506104ae610aa83660046143e9565b611fa2565b348015610ab957600080fd5b50610449610ac836600461428f565b611fde565b348015610ad957600080fd5b5061041f610ae836600461435e565b61200f565b348015610af957600080fd5b506104ae610b08366004614204565b612037565b348015610b1957600080fd5b506104c5610b28366004613e16565b6001600160a01b031660009081526101f7602052604090205490565b6104ae610b523660046142bf565b612092565b348015610b6357600080fd5b5060c9546104c5565b348015610b7857600080fd5b506104c5610b87366004613e16565b6001600160a01b031660009081526101fa602052604090205490565b348015610baf57600080fd5b506104ae610bbe3660046140b4565b61219e565b348015610bcf57600080fd5b506101f6546104c5565b348015610be557600080fd5b506104c5610bf4366004614343565b60ff8216600090815261015e602090815260408083206001600160a01b038516845260010190915290205492915050565b348015610c3157600080fd5b506104c56102275481565b348015610c4857600080fd5b5061041f610c57366004613e32565b6124bb565b348015610c6857600080fd5b506104ae610c77366004613e16565b6124d7565b348015610c8857600080fd5b5061044961254d565b6000610c9c8261255d565b80610cab5750610cab82612592565b92915050565b6060610cbb6125e0565b6002018054610cc990614875565b80601f0160208091040260200160405190810160405280929190818152602001828054610cf590614875565b8015610d425780601f10610d1757610100808354040283529160200191610d42565b820191906000526020600020905b815481529060010190602001808311610d2557829003601f168201915b5050505050905090565b6000610d5782612604565b610d74576040516333d1c03960e21b815260040160405180910390fd5b610d7c6125e0565b60009283526006016020525060409020546001600160a01b031690565b6000610da48261171a565b9050336001600160a01b03821614610ddd57610dc081336124bb565b610ddd576040516367d9dca160e11b815260040160405180910390fd5b82610de66125e0565b6000848152600691909101602052604080822080546001600160a01b0319166001600160a01b0394851617905551849286811692908516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259190a4505050565b60006001610e536125e0565b60010154610e5f6125e0565b540303919050565b6001600160a01b03811660009081526101f76020526040902054610ea65760405162461bcd60e51b8152600401610e9d90614684565b60405180910390fd5b6000610eb182611cbc565b905080610ed05760405162461bcd60e51b8152600401610e9d906146ca565b6001600160a01b03821660009081526101f8602052604081208054839290610ef99084906147e7565b92505081905550806101f66000828254610f1391906147e7565b90915550610f239050828261264d565b604080516001600160a01b0384168152602081018390527fdf20fd1e76bc69d672e4814fafb2c449bba3a5369d8359adf9e05e6fde87b05691015b60405180910390a15050565b610f7333611269565b610f8f5760405162461bcd60e51b8152600401610e9d90614715565b60005b818110156110235760ff8416600090815261012d6020526040812060019190820190858585818110610fd457634e487b7160e01b600052603260045260246000fd5b9050602002016020810190610fe99190613e16565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061101b816148b0565b915050610f92565b50505050565b600061103482612766565b9050836001600160a01b0316816001600160a01b0316146110675760405162a1148160e81b815260040160405180910390fd5b600080611073846127f5565b9150915061109881876110833390565b6001600160a01b039081169116811491141790565b6110c3576110a686336124bb565b6110c357604051632ce44b5f60e11b815260040160405180910390fd5b6001600160a01b0385166110ea57604051633a954ecd60e21b815260040160405180910390fd5b80156110f557600082555b6110fd6125e0565b6001600160a01b03871660009081526005919091016020526040902080546000190190556111296125e0565b6001600160a01b03861660008181526005929092016020526040909120805460010190554260a01b17600160e11b176111606125e0565b60008681526004919091016020526040902055600160e11b83166111cf576001840161118a6125e0565b600082815260049190910160205260409020546111cd576111a96125e0565b5481146111cd57836111b96125e0565b600083815260049190910160205260409020555b505b83856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45b505050505050565b61122233611269565b61123e5760405162461bcd60e51b8152600401610e9d90614715565b6001600160a01b03919091166000908152609760205260409020805460ff1916911515919091179055565b6001600160a01b031660009081526097602052604090205460ff1690565b60408051808201909152610191546001600160a01b038116808352600160a01b90910462ffffff16602083018190529091600091612710906112c99086614813565b6112d391906147ff565b9150509250929050565b60026102595460ff16600281111561130557634e487b7160e01b600052602160045260246000fd5b146113525760405162461bcd60e51b815260206004820152601760248201527f5075626c69632073616c65206e6f7420656e61626c65640000000000000000006044820152606401610e9d565b600261135f81338461281d565b611369338361283b565b6113956113868260ff1660009081526101c3602052604090205490565b6113909084614813565b6128d4565b5050565b6113a233611269565b6113be5760405162461bcd60e51b8152600401610e9d90614715565b60005b818110156110235760ff8416600090815261012d602052604081206001019084848481811061140057634e487b7160e01b600052603260045260246000fd5b90506020020160208101906114159190613e16565b6001600160a01b031681526020810191909152604001600020805460ff1916905580611440816148b0565b9150506113c1565b61146383838360405180602001604052806000815250611df5565b505050565b6001600160a01b03811660009081526101f7602052604090205461149e5760405162461bcd60e51b8152600401610e9d90614684565b60006114aa8383611ec6565b9050806114c95760405162461bcd60e51b8152600401610e9d906146ca565b6001600160a01b0380841660009081526101fb60209081526040808320938616835292905290812080548392906115019084906147e7565b90915550506001600160a01b03831660009081526101fa60205260408120805483929061152f9084906147e7565b909155506115409050838383612956565b604080516001600160a01b038481168252602082018490528516917f3be5b7a71e84ed12875d241991c70855ac5817d847039e17a9d895c1ceb0f18a910160405180910390a2505050565b60005b610227548110156113955760006115a4826119eb565b90506115b08382611468565b5060010161158e565b6060816000816001600160401b038111156115e457634e487b7160e01b600052604160045260246000fd5b60405190808252806020026020018201604052801561163657816020015b6040805160808101825260008082526020808301829052928201819052606082015282526000199092019101816116025790505b50905060005b8281146116a55761167286868381811061166657634e487b7160e01b600052603260045260246000fd5b90506020020135611e39565b82828151811061169257634e487b7160e01b600052603260045260246000fd5b602090810291909101015260010161163c565b50949350505050565b60005b610227548110156116db5760006116c7826119eb565b90506116d281610e67565b506001016116b1565b50565b6116e733611269565b6117035760405162461bcd60e51b8152600401610e9d90614715565b60ff909116600090815261012d6020526040902055565b6000610cab82612766565b61172e33611269565b61174a5760405162461bcd60e51b8152600401610e9d90614715565b60ff90911660009081526101c36020526040902055565b60ff8216600081815261015e602081815260408084206001600160a01b03871685526001810183529084205494845291905254909161179f91614832565b9392505050565b6117af33611269565b6117cb5760405162461bcd60e51b8152600401610e9d90614715565b60c955565b60006001600160a01b0382166117f9576040516323d3ad8160e21b815260040160405180910390fd5b6001600160401b036118096125e0565b6005016000846001600160a01b03166001600160a01b0316815260200190815260200160002054169050919050565b6118406129a8565b61184a6000612a02565b565b61185533611269565b6118715760405162461bcd60e51b8152600401610e9d90614715565b6114636101608383613c3b565b606061015f8054610cc990614875565b6060600080600061189e856117d0565b90506000816001600160401b038111156118c857634e487b7160e01b600052604160045260246000fd5b6040519080825280602002602001820160405280156118f1578160200160208202803683370190505b50905061191e60408051608081018252600080825260208201819052918101829052606081019190915290565b60015b8386146119ad5761193181612a54565b9150816040015115611942576119a5565b81516001600160a01b03161561195757815194505b876001600160a01b0316856001600160a01b031614156119a5578083878060010198508151811061199857634e487b7160e01b600052603260045260246000fd5b6020026020010181815250505b600101611921565b50909695505050505050565b6119c233611269565b6119de5760405162461bcd60e51b8152600401610e9d90614715565b61146361015f8383613c3b565b60006101f98281548110611a0f57634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b031692915050565b611a3333611269565b611a4f5760405162461bcd60e51b8152600401610e9d90614715565b6113958282612a9b565b6060611a636125e0565b6003018054610cc990614875565b6060818310611a9357604051631960ccad60e11b815260040160405180910390fd5b600080611a9e612b63565b90506001851015611aae57600194505b80841115611aba578093505b6000611ac5876117d0565b905084861015611ae45785850381811015611ade578091505b50611ae8565b5060005b6000816001600160401b03811115611b1057634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015611b39578160200160208202803683370190505b50905081611b4c57935061179f92505050565b6000611b5788611e39565b905060008160400151611b68575080515b885b888114158015611b7a5750848714155b15611c0457611b8881612a54565b9250826040015115611b9957611bfc565b82516001600160a01b031615611bae57825191505b8a6001600160a01b0316826001600160a01b03161415611bfc5780848880600101995081518110611bef57634e487b7160e01b600052603260045260246000fd5b6020026020010181815250505b600101611b6a565b505050928352509095945050505050565b6001600160a01b038216331415611c3f5760405163b06307db60e01b815260040160405180910390fd5b80611c486125e0565b336000818152600792909201602090815260408084206001600160a01b03881680865290835293819020805460ff19169515159590951790945592518415158152919290917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b600080611cc96101f65490565b611cd390476147e7565b905061179f8382611cfa866001600160a01b031660009081526101f8602052604090205490565b612b73565b611d0833611269565b611d245760405162461bcd60e51b8152600401610e9d90614715565b82818114611d745760405162461bcd60e51b815260206004820152601760248201527f41646d696e206d696e743a2062616420726571756573740000000000000000006044820152606401610e9d565b60005b8181101561121157611de3868683818110611da257634e487b7160e01b600052603260045260246000fd5b9050602002016020810190611db79190613e16565b858584818110611dd757634e487b7160e01b600052603260045260246000fd5b90506020020135612bb3565b80611ded816148b0565b915050611d77565b611e00848484611029565b6001600160a01b0383163b1561102357611e1c84848484612bbd565b611023576040516368d2bf6b60e11b815260040160405180910390fd5b6040805160808101825260008082526020820181905291810182905260608101919091526040805160808101825260008082526020820181905291810182905260608101919091526001831080611e975750611e93612b63565b8310155b15611ea25792915050565b611eab83612a54565b9050806040015115611ebd5792915050565b61179f83612cb1565b6001600160a01b03821660009081526101fa602052604081205481906040516370a0823160e01b81523060048201526001600160a01b038616906370a082319060240160206040518083038186803b158015611f2157600080fd5b505afa158015611f35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f5991906142a7565b611f6391906147e7565b6001600160a01b0380861660009081526101fb6020908152604080832093881683529290522054909150611f9a9084908390612b73565b949350505050565b611fab33611269565b611fc75760405162461bcd60e51b8152600401610e9d90614715565b60ff909116600090815261015e6020526040902055565b6060611fe982612604565b61200657604051630a14c4b560e41b815260040160405180910390fd5b610cab82612ce6565b60ff8416600090815261012d6020526040812061202e90858585612d1f565b95945050505050565b61204033611269565b61205c5760405162461bcd60e51b8152600401610e9d90614715565b610259805482919060ff1916600183600281111561208a57634e487b7160e01b600052602160045260246000fd5b021790555050565b60013383836120a38484848461200f565b6120e15760405162461bcd60e51b815260206004820152600f60248201526e139bdd081dda1a5d195b1a5cdd1959608a1b6044820152606401610e9d565b60016102595460ff16600281111561210957634e487b7160e01b600052602160045260246000fd5b146121565760405162461bcd60e51b815260206004820152601a60248201527f57686974656c6973742073616c65206e6f7420656e61626c65640000000000006044820152606401610e9d565b600161216381338a61281d565b61216d338961283b565b61219461218a8260ff1660009081526101c3602052604090205490565b611390908a614813565b5050505050505050565b60008051602061499f83398151915254610100900460ff166121d35760008051602061499f8339815191525460ff16156121d7565b303b155b6122495760405162461bcd60e51b815260206004820152603760248201527f455243373231415f5f496e697469616c697a61626c653a20636f6e747261637460448201527f20697320616c726561647920696e697469616c697a65640000000000000000006064820152608401610e9d565b60008051602061499f83398151915254610100900460ff161580156122855760008051602061499f833981519152805461ffff19166101011790555b600054610100900460ff16158080156122a55750600054600160ff909116105b806122bf5750303b1580156122bf575060005460ff166001145b6123225760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610e9d565b6000805460ff191660011790558015612345576000805461ff0019166101001790555b6123896040518060400160405280600781526020016629a427aaa722a760c91b8152506040518060400160405280600381526020016229a42760e91b815250612dca565b612391612e08565b612399612e37565b6123a46115b3612e7a565b6123ac612ea1565b6123b4612ea1565b6123bc612ea1565b6123fb60405180608001604052806044815260200161495b6044913960405180604001604052806005815260200164173539b7b760d91b815250612ec8565b6124058484612f18565b61240f8686612f51565b61241a6001886116de565b61242760015b6001611fa2565b6124316002612420565b61244460015b666a94d74f430000611725565b61244e6002612437565b8015612494576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50801561121157505060008051602061499f833981519152805461ff001916905550505050565b60006124c78383612f78565b8061179f575061179f8383612fb5565b6124df6129a8565b6001600160a01b0381166125445760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610e9d565b6116db81612a02565b60606101608054610cc990614875565b60006001600160e01b0319821663152a902d60e11b1480610cab57506301ffc9a760e01b6001600160e01b0319831614610cab565b60006301ffc9a760e01b6001600160e01b0319831614806125c357506380ac58cd60e01b6001600160e01b03198316145b80610cab5750506001600160e01b031916635b5e139f60e01b1490565b7f2569078dfb4b0305704d3008e7403993ae9601b85f7ae5e742de3de8f8011c4090565b60008160011115801561261e575061261a6125e0565b5482105b8015610cab5750600160e01b6126326125e0565b60008481526004919091016020526040902054161592915050565b8047101561269d5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610e9d565b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146126ea576040519150601f19603f3d011682016040523d82523d6000602084013e6126ef565b606091505b50509050806114635760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610e9d565b600081806001116127dc576127796125e0565b548110156127dc57600061278b6125e0565b600083815260049190910160205260409020549050600160e01b81166127da575b8061179f576127b96125e0565b600019909201600081815260049390930160205260409092205490506127ac565b505b604051636f96cda160e11b815260040160405180910390fd5b60008060006128026125e0565b60009485526006016020525050604090912080549092909150565b60ff8316600090815261015e60205260409020611463908383612ff4565b8060c9548161284861308e565b61285291906147e7565b11156128915760405162461bcd60e51b815260206004820152600e60248201526d4578636565647320737570706c7960901b6044820152606401610e9d565b3233146128ca5760405162461bcd60e51b81526020600482015260076024820152664e6f20626f747360c81b6044820152606401610e9d565b611463838361309d565b803410156129155760405162461bcd60e51b815260206004820152600e60248201526d141c9a58d94e881a5b9d985b1a5960921b6044820152606401610e9d565b60006129218234614832565b9050801561139557604051339082156108fc029083906000818181858888f19350505050158015611463573d6000803e3d6000fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526114639084906130b7565b6033546001600160a01b0316331461184a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610e9d565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b604080516080810182526000808252602082018190529181018290526060810191909152610cab612a836125e0565b60008481526004919091016020526040902054613189565b612710811115612aed5760405162461bcd60e51b815260206004820152601c60248201527f526f79616c746965733a2076616c756520697320746f6f2068696768000000006044820152606401610e9d565b6040805180820182526001600160a01b03841680825262ffffff8416602092830181905261019180546001600160b81b0319168317600160a01b90920291909117905582519081529081018390527f908669f35f6fb3977a956ba70597841fe541d1e8491ca3c025161e258d3bfdb69101610f5e565b6000612b6d6125e0565b54919050565b6101f5546001600160a01b03841660009081526101f7602052604081205490918391612b9f9086614813565b612ba991906147ff565b611f9a9190614832565b611395828261283b565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a0290612bf2903390899088908890600401614548565b602060405180830381600087803b158015612c0c57600080fd5b505af1925050508015612c3c575060408051601f3d908101601f19168201909252612c39918101906141ba565b60015b612c97573d808015612c6a576040519150601f19603f3d011682016040523d82523d6000602084013e612c6f565b606091505b508051612c8f576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611f9a565b604080516080810182526000808252602082018190529181018290526060810191909152610cab612ce183612766565b613189565b606061015f612cf4836131d0565b610160604051602001612d0993929190614520565b6040516020818303038152906040529050919050565b6040516bffffffffffffffffffffffff19606085901b1660208201526000908190603401604051602081830303815290604052805190602001209050612d9b84848080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050895491508490506132e9565b80612dc057506001600160a01b038516600090815260018701602052604090205460ff165b9695505050505050565b60008051602061499f83398151915254610100900460ff16612dfe5760405162461bcd60e51b8152600401610e9d90614630565b61139582826132ff565b600054610100900460ff16612e2f5760405162461bcd60e51b8152600401610e9d9061473b565b61184a613382565b600054610100900460ff16612e5e5760405162461bcd60e51b8152600401610e9d9061473b565b336000908152609760205260409020805460ff19166001179055565b600054610100900460ff166117cb5760405162461bcd60e51b8152600401610e9d9061473b565b600054610100900460ff1661184a5760405162461bcd60e51b8152600401610e9d9061473b565b600054610100900460ff16612eef5760405162461bcd60e51b8152600401610e9d9061473b565b8151612f039061015f906020850190613cbf565b50805161146390610160906020840190613cbf565b600054610100900460ff16612f3f5760405162461bcd60e51b8152600401610e9d9061473b565b612f4982826133b2565b505161022755565b600054610100900460ff16611a4f5760405162461bcd60e51b8152600401610e9d9061473b565b6000612f826125e0565b6001600160a01b039384166000908152600791909101602090815260408083209490951682529290925250205460ff1690565b600080612fc1846133e3565b90506001600160a01b03811615801590611f9a5750826001600160a01b0316816001600160a01b03161491505092915050565b82546001600160a01b038316600090815260018501602052604090205461301c9083906147e7565b111561305a5760405162461bcd60e51b815260206004820152600d60248201526c115e18d959591cc81b1a5b5a5d609a1b6044820152606401610e9d565b6001600160a01b0382166000908152600184016020526040812080548392906130849084906147e7565b9091555050505050565b6000613098610e47565b905090565b611395828260405180602001604052806000815250613549565b600061310c826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166135c69092919063ffffffff16565b805190915015611463578080602001905181019061312a9190614098565b6114635760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610e9d565b604080516080810182526001600160a01b038316815260a083901c6001600160401b03166020820152600160e01b831615159181019190915260e89190911c606082015290565b6060816131f45750506040805180820190915260018152600360fc1b602082015290565b8160005b811561321e5780613208816148b0565b91506132179050600a836147ff565b91506131f8565b6000816001600160401b0381111561324657634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015613270576020820181803683370190505b5090505b8415611f9a57613285600183614832565b9150613292600a866148cb565b61329d9060306147e7565b60f81b8183815181106132c057634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a9053506132e2600a866147ff565b9450613274565b6000826132f685846135d5565b14949350505050565b60008051602061499f83398151915254610100900460ff166133335760405162461bcd60e51b8152600401610e9d90614630565b8161333c6125e0565b6002019080519060200190613352929190613cbf565b508061335c6125e0565b6003019080519060200190613372929190613cbf565b50600161337d6125e0565b555050565b600054610100900460ff166133a95760405162461bcd60e51b8152600401610e9d9061473b565b61184a33612a02565b600054610100900460ff166133d95760405162461bcd60e51b8152600401610e9d9061473b565b6113958282613630565b600080468060018114613418576089811461343457600481146134505762013881811461346c576105398114613488576134a0565b73a5409ec958c83c3f309868babaca7c86dcb077c192506134a0565b7358807bad0b376efc12f5ad86aac70e78ed67deae92506134a0565b73f57b2c51ded3a29e6891aba85459d600256cf31792506134a0565b73ff7ca10af37178bdd056628ef42fd7f799fac77c92506134a0565b73e1a2bbc877b29adbc56d2659dbcb0ae14ee6207192505b506001600160a01b03821615806134b75750806089145b806134c457508062013881145b156134d0575092915050565b60405163c455279160e01b81526001600160a01b03858116600483015283169063c45527919060240160206040518083038186803b15801561351157600080fd5b505afa158015613525573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f9a91906141e8565b613553838361378a565b6001600160a01b0383163b1561146357600061356d6125e0565b5490508281035b6135876000868380600101945086612bbd565b6135a4576040516368d2bf6b60e11b815260040160405180910390fd5b81811061357457816135b46125e0565b54146135bf57600080fd5b5050505050565b6060611f9a84846000856138be565b600081815b8451811015613628576136148286838151811061360757634e487b7160e01b600052603260045260246000fd5b60200260200101516139ef565b915080613620816148b0565b9150506135da565b509392505050565b600054610100900460ff166136575760405162461bcd60e51b8152600401610e9d9061473b565b80518251146136c35760405162461bcd60e51b815260206004820152603260248201527f5061796d656e7453706c69747465723a2070617965657320616e6420736861726044820152710cae640d8cadccee8d040dad2e6dac2e8c6d60731b6064820152608401610e9d565b60008251116137145760405162461bcd60e51b815260206004820152601a60248201527f5061796d656e7453706c69747465723a206e6f207061796565730000000000006044820152606401610e9d565b60005b82518110156114635761377883828151811061374357634e487b7160e01b600052603260045260246000fd5b602002602001015183838151811061376b57634e487b7160e01b600052603260045260246000fd5b6020026020010151613a1e565b80613782816148b0565b915050613717565b60006137946125e0565b549050816137b55760405163b562e8dd60e01b815260040160405180910390fd5b6801000000000000000182026137c96125e0565b6001600160a01b038516600081815260059290920160205260409091208054929092019091554260a01b6001841460e11b17176138046125e0565b600083815260049190910160205260408120919091556001600160a01b0384169083830190839083907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8180a4600183015b81811461388e57808360007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a4600101613856565b50816138ac57604051622e076360e81b815260040160405180910390fd5b806138b56125e0565b55506114639050565b60608247101561391f5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610e9d565b6001600160a01b0385163b6139765760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610e9d565b600080866001600160a01b031685876040516139929190614504565b60006040518083038185875af1925050503d80600081146139cf576040519150601f19603f3d011682016040523d82523d6000602084013e6139d4565b606091505b50915091506139e4828286613c02565b979650505050505050565b6000818310613a0b57600082815260208490526040902061179f565b600083815260208390526040902061179f565b6001600160a01b038216613a895760405162461bcd60e51b815260206004820152602c60248201527f5061796d656e7453706c69747465723a206163636f756e74206973207468652060448201526b7a65726f206164647265737360a01b6064820152608401610e9d565b60008111613ad95760405162461bcd60e51b815260206004820152601d60248201527f5061796d656e7453706c69747465723a207368617265732061726520300000006044820152606401610e9d565b6001600160a01b03821660009081526101f7602052604090205415613b545760405162461bcd60e51b815260206004820152602b60248201527f5061796d656e7453706c69747465723a206163636f756e7420616c726561647960448201526a206861732073686172657360a81b6064820152608401610e9d565b6101f98054600181019091557f29eba5f30ca2030a69ed2d7f74871c83bbc526b071320256f127653c7dfff4e90180546001600160a01b0319166001600160a01b03841690811790915560009081526101f7602052604090208190556101f554613bbf9082906147e7565b6101f555604080516001600160a01b0384168152602081018390527f40c340f65e17194d14ddddb073d3c9f888e3cb52b5aae0c6c7706b4fbc905fac9101610f5e565b60608315613c1157508161179f565b825115613c215782518084602001fd5b8160405162461bcd60e51b8152600401610e9d919061461d565b828054613c4790614875565b90600052602060002090601f016020900481019282613c695760008555613caf565b82601f10613c825782800160ff19823516178555613caf565b82800160010185558215613caf579182015b82811115613caf578235825591602001919060010190613c94565b50613cbb929150613d33565b5090565b828054613ccb90614875565b90600052602060002090601f016020900481019282613ced5760008555613caf565b82601f10613d0657805160ff1916838001178555613caf565b82800160010185558215613caf579182015b82811115613caf578251825591602001919060010190613d18565b5b80821115613cbb5760008155600101613d34565b60008083601f840112613d59578182fd5b5081356001600160401b03811115613d6f578182fd5b6020830191508360208260051b8501011115613d8a57600080fd5b9250929050565b600082601f830112613da1578081fd5b81356020613db6613db1836147c4565b614794565b80838252828201915082860187848660051b8901011115613dd5578586fd5b855b85811015613df357813584529284019290840190600101613dd7565b5090979650505050505050565b803560ff81168114613e1157600080fd5b919050565b600060208284031215613e27578081fd5b813561179f81614921565b60008060408385031215613e44578081fd5b8235613e4f81614921565b91506020830135613e5f81614921565b809150509250929050565b600080600060608486031215613e7e578081fd5b8335613e8981614921565b92506020840135613e9981614921565b929592945050506040919091013590565b60008060008060808587031215613ebf578182fd5b8435613eca81614921565b9350602085810135613edb81614921565b93506040860135925060608601356001600160401b0380821115613efd578384fd5b818801915088601f830112613f10578384fd5b813581811115613f2257613f2261490b565b613f34601f8201601f19168501614794565b91508082528984828501011115613f49578485fd5b8084840185840137810190920192909252939692955090935050565b60008060408385031215613f77578182fd5b8235613f8281614921565b91506020830135613e5f81614936565b60008060408385031215613fa4578182fd5b8235613faf81614921565b946020939093013593505050565b600080600060608486031215613fd1578081fd5b8335613fdc81614921565b95602085013595506040909401359392505050565b60008060008060408587031215614006578182fd5b84356001600160401b038082111561401c578384fd5b61402888838901613d48565b90965094506020870135915080821115614040578384fd5b5061404d87828801613d48565b95989497509550505050565b6000806020838503121561406b578182fd5b82356001600160401b03811115614080578283fd5b61408c85828601613d48565b90969095509350505050565b6000602082840312156140a9578081fd5b815161179f81614936565b600080600080600060a086880312156140cb578283fd5b853594506020808701356140de81614921565b94506040870135935060608701356001600160401b0380821115614100578384fd5b818901915089601f830112614113578384fd5b8135614121613db1826147c4565b8082825285820191508585018d878560051b8801011115614140578788fd5b8795505b8386101561416b57803561415781614921565b835260019590950194918601918601614144565b50965050506080890135925080831115614183578384fd5b505061419188828901613d91565b9150509295509295909350565b6000602082840312156141af578081fd5b813561179f81614944565b6000602082840312156141cb578081fd5b815161179f81614944565b60008060408385031215613e44578182fd5b6000602082840312156141f9578081fd5b815161179f81614921565b600060208284031215614215578081fd5b81356003811061179f578182fd5b60008060208385031215614235578182fd5b82356001600160401b038082111561424b578384fd5b818501915085601f83011261425e578384fd5b81358181111561426c578485fd5b86602082850101111561427d578485fd5b60209290920196919550909350505050565b6000602082840312156142a0578081fd5b5035919050565b6000602082840312156142b8578081fd5b5051919050565b6000806000604084860312156142d3578081fd5b8335925060208401356001600160401b038111156142ef578182fd5b6142fb86828701613d48565b9497909650939450505050565b6000806040838503121561431a578182fd5b50508035926020909101359150565b60006020828403121561433a578081fd5b61179f82613e00565b60008060408385031215614355578182fd5b613e4f83613e00565b60008060008060608587031215614373578182fd5b61437c85613e00565b9350602085013561438c81614921565b925060408501356001600160401b038111156143a6578283fd5b61404d87828801613d48565b6000806000604084860312156143c6578081fd5b6143cf84613e00565b925060208401356001600160401b038111156142ef578182fd5b600080604083850312156143fb578182fd5b613faf83613e00565b6000815180845261441c816020860160208601614849565b601f01601f19169290920160200192915050565b8054600090600181811c908083168061444a57607f831692505b602080841082141561446a57634e487b7160e01b86526022600452602486fd5b81801561447e576001811461448f576144bc565b60ff198616895284890196506144bc565b60008881526020902060005b868110156144b45781548b82015290850190830161449b565b505084890196505b50505050505092915050565b80516001600160a01b031682526020808201516001600160401b03169083015260408082015115159083015260609081015162ffffff16910152565b60008251614516818460208701614849565b9190910192915050565b600061452c8286614430565b845161453c818360208901614849565b6139e481830186614430565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612dc090830184614404565b6020808252825182820181905260009190848201906040850190845b818110156119ad576145aa8385516144c8565b9284019260809290920191600101614597565b6020808252825182820181905260009190848201906040850190845b818110156119ad578351835292840192918401916001016145d9565b602081016003831061461757634e487b7160e01b600052602160045260246000fd5b91905290565b60208152600061179f6020830184614404565b60208082526034908201527f455243373231415f5f496e697469616c697a61626c653a20636f6e7472616374604082015273206973206e6f7420696e697469616c697a696e6760601b606082015260800190565b60208082526026908201527f5061796d656e7453706c69747465723a206163636f756e7420686173206e6f2060408201526573686172657360d01b606082015260800190565b6020808252602b908201527f5061796d656e7453706c69747465723a206163636f756e74206973206e6f742060408201526a191d59481c185e5b595b9d60aa1b606082015260800190565b6020808252600c908201526b2737ba1030b71030b236b4b760a11b604082015260600190565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b60808101610cab82846144c8565b604051601f8201601f191681016001600160401b03811182821017156147bc576147bc61490b565b604052919050565b60006001600160401b038211156147dd576147dd61490b565b5060051b60200190565b600082198211156147fa576147fa6148df565b500190565b60008261480e5761480e6148f5565b500490565b600081600019048311821515161561482d5761482d6148df565b500290565b600082821015614844576148446148df565b500390565b60005b8381101561486457818101518382015260200161484c565b838111156110235750506000910152565b600181811c9082168061488957607f821691505b602082108114156148aa57634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156148c4576148c46148df565b5060010190565b6000826148da576148da6148f5565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146116db57600080fd5b80151581146116db57600080fd5b6001600160e01b0319811681146116db57600080fdfe68747470733a2f2f697066732e696f2f697066732f516d537142767534414d74784d67355459727a7848647156584a44326473477136626b4c4a4a4a533773547876522fee151c8401928dc223602bb187aff91b9a56c7cae5476ef1b3287b085a16c85fa26469706673582212201ba13f2976c9496379f4c994a1dd63c63c84cc3a0b7412aca6703d9c8f54c47864736f6c63430008040033
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 31 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
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.