Source Code
Overview
POL Balance
More Info
ContractCreator
Multichain Info
N/A
Latest 25 from a total of 75 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Set Epoch Merkle... | 18243897 | 1 hr ago | IN | 0 POL | 0.00138929 | ||||
Mint Spot Batch | 18228507 | 10 hrs ago | IN | 0 POL | 0.01160719 | ||||
Mint GEMNFT | 18226934 | 11 hrs ago | IN | 0 POL | 0.01054329 | ||||
Mint Spot Batch | 18226790 | 11 hrs ago | IN | 0 POL | 0.00811762 | ||||
Mint Spot Batch | 18217440 | 17 hrs ago | IN | 0 POL | 0.00859314 | ||||
Set Epoch Merkle... | 18203273 | 25 hrs ago | IN | 0 POL | 0.00135112 | ||||
Mint Spot Batch | 18184099 | 37 hrs ago | IN | 0 POL | 0.01460128 | ||||
Mint GEMNFT | 18177024 | 41 hrs ago | IN | 0 POL | 0.01549751 | ||||
Set Epoch Merkle... | 18163233 | 2 days ago | IN | 0 POL | 0.00087266 | ||||
Set Epoch Merkle... | 18122599 | 3 days ago | IN | 0 POL | 0.00085695 | ||||
Set Epoch Merkle... | 18083174 | 4 days ago | IN | 0 POL | 0.00079361 | ||||
Mint GEMNFT | 18064908 | 4 days ago | IN | 0 POL | 0.01099299 | ||||
Mint GEMNFT | 18054173 | 4 days ago | IN | 0 POL | 0.0151416 | ||||
Mint GEMNFT | 18052292 | 4 days ago | IN | 0 POL | 0.01437491 | ||||
Set Epoch Merkle... | 18042549 | 5 days ago | IN | 0 POL | 0.00146558 | ||||
Mint GEMNFT | 18036769 | 5 days ago | IN | 0 POL | 0.01224908 | ||||
Mint GEMNFT | 18031135 | 5 days ago | IN | 0 POL | 0.0337265 | ||||
Mint GEMNFT | 18031105 | 5 days ago | IN | 0 POL | 0.0337255 | ||||
Mint GEMNFT | 18028571 | 5 days ago | IN | 0 POL | 0.00847342 | ||||
Mint GEMNFT | 18028512 | 5 days ago | IN | 0 POL | 0.01152694 | ||||
Mint GEMNFT | 18026773 | 5 days ago | IN | 0 POL | 0.06204759 | ||||
Mint GEMNFT | 18020341 | 5 days ago | IN | 0 POL | 0.01181831 | ||||
Mint GEMNFT | 18020164 | 5 days ago | IN | 0 POL | 0.00876644 | ||||
Mint GEMNFT | 18016832 | 5 days ago | IN | 0 POL | 0.01218631 | ||||
Mint GEMNFT | 18016221 | 5 days ago | IN | 0 POL | 0.01531201 |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
GEMMinting
Compiler Version
v0.8.26+commit.8a97fa7a
Contract Source Code (Solidity Multiple files format)
// SPDX-License-Identifier: MIT /** * * @title: GEMNFT Minting * @date: 07-January-2025 * @version: 1.9 * @author: IPMB Dev Team */ pragma solidity ^0.8.25; import "./MerkleProof.sol"; import "./IERC20.sol"; import "./IPriceFeed.sol"; import "./IStaking.sol"; import "./Ownable.sol"; import "./IGEMNFT.sol"; contract GEMMinting is Ownable { // declaration of variables mapping(address => bool) public adminPermissions; address public burnAddr; address public goldProAddress; IStaking public stakingAddress; IPriceFeed public priceFeedAddress; IGEMNFT public gemNFTAddress; mapping(bytes32 => bool) public mintedSt; mapping(uint256 => bytes32) public merkleRoots; uint256 premium1; uint256 premium2; uint256 premium3; // declaration of modifiers modifier adminRequired { require((adminPermissions[msg.sender] == true) || (msg.sender == owner()), "User is not an admin"); _; } // constructor constructor(address _stakingAddress, address _goldProAddress, address _priceFeedAddress, address _gemNFTAddress) { adminPermissions[msg.sender] = true; stakingAddress = IStaking(_stakingAddress); goldProAddress = _goldProAddress; priceFeedAddress = IPriceFeed(_priceFeedAddress); gemNFTAddress = IGEMNFT(_gemNFTAddress); burnAddr = 0x000000000000000000000000000000000000dEaD; } /* * Mint GEM NFT either on-spot or using a staking position */ function mintGEMNFT(string memory _id, address _receiver, uint256 _poolID, uint256 _epoch, uint256 _index, bytes32[] calldata merkleProof) public payable { string memory id = _id; (uint256 price, uint256 counter, uint256 supply, uint256 fee, bool status) = gemNFTAddress.retrieveCategoryData(id); require(msg.value == fee, "Fee error"); require(stakingAddress.retrieveBlackListStatus(msg.sender) == false, "Address is blacklisted"); require(gemNFTAddress.contractIsActive(), "Contract must be active to mint"); require(status == true, "Data does not exist"); require(counter < supply, "Supply Reached"); validateDiscount(price, _poolID, msg.sender, _index, _epoch, merkleProof); gemNFTAddress.mintGEMNFTAUTH(id, _receiver); } /* * Mint GEM NFT on-spot batch */ function mintSpotBatch(string[] memory _id, address _receiver, bytes32[] calldata merkleProof) public { for (uint256 i=0; i < _id.length; i++ ) { mintGEMNFT(_id[i], _receiver , 0 ,0 ,0, merkleProof); } } /* * Function to check Discount */ function validateDiscount(uint256 price, uint256 poolID, address _sender, uint256 indx, uint256 epch, bytes32[] calldata merkleProof) internal { uint256 prc = price; uint256 plID = poolID; uint256 index = indx; address sender = _sender; if (stakingAddress.getDiscount(poolID, sender, indx) > 0) { require(stakingAddress.poolStatus(plID) == true, "Pool is inactive"); // merkle root checks for specific epoch bytes32 node = keccak256(bytes.concat(keccak256((abi.encodePacked(sender , epch, poolID, indx))))); require(MerkleProof.verifyCalldata(merkleProof, merkleRoots[epch], node), 'invalid proof'); require(mintedSt[node] == false, "already minted"); mintedSt[node] = true; (uint256 goldProPrice, uint256 goldPrice, , ,) = priceFeedAddress.getEpochPrices(epch); address resetAddr = sender; uint256 discountPrice; require(stakingAddress.poolAmountPerAddress(plID, sender, index) == price, "No deposit"); if (goldPrice >= goldProPrice) { // scenario A and B discountPrice = prc * stakingAddress.getDiscount(plID, sender, index) / 100; stakingAddress.updateAddressPool(resetAddr, plID, index); IERC20(goldProAddress).transferFrom(address(stakingAddress), burnAddr, prc - discountPrice); IERC20(goldProAddress).transferFrom(address(stakingAddress), sender, discountPrice); } else if (goldProPrice > goldPrice) { // scenario C and D uint256 dynPrice = prc * goldPrice / goldProPrice; discountPrice = dynPrice - (dynPrice * stakingAddress.poolDiscount(plID) / 100); uint256 dynDiscount = prc - discountPrice; stakingAddress.updateAddressPool(resetAddr, plID, index); IERC20(goldProAddress).transferFrom(address(stakingAddress), burnAddr, discountPrice); IERC20(goldProAddress).transferFrom(address(stakingAddress), sender, dynDiscount); } } else { // spot buy with current prices and premium (, uint256 goldProPrice, , uint256 goldDailyPrice, ,) = priceFeedAddress.getLatestPrices(); uint256 dynPrice = price * goldDailyPrice / goldProPrice; uint256 premiumPrice = dynPrice + (dynPrice * getPremium(prc) / 10000); IERC20(goldProAddress).transferFrom(sender, burnAddr, premiumPrice); } } /* * Withdraw POL funds sent to the smart contract */ function withdraw(address _to) public onlyOwner { uint balance = address(this).balance; payable(_to).transfer(balance); } /* * Withdraw any ERC20 funds sent to the smart contract */ function withdrawERC20(address _contractAddress, address _to) public onlyOwner { uint amount = IERC20(_contractAddress).balanceOf(address(this)); IERC20(_contractAddress).transfer(_to, amount); } /** * Set MerkleRoot per epoch */ function setEpochMerkleRoot(uint256 _epoch, bytes32 _merkleRoot) public adminRequired { merkleRoots[_epoch] = _merkleRoot; } /** * Set Staking contract address */ function setStakingAddress(address _staking) public onlyOwner { stakingAddress = IStaking(_staking); } /** * Set Update Prices Contract */ function updatePricesContract(address _address) public onlyOwner { priceFeedAddress = IPriceFeed(_address); } /** * Function to register Admin */ function registerAdmin(address _admin, bool _status) public onlyOwner { adminPermissions[_admin] = _status; } /** * Function to set premium */ function setPremium(uint256 _premium1, uint256 _premium2, uint256 _premium3) public adminRequired { premium1 = _premium1; premium2 = _premium2; premium3 = _premium3; } /** * Function to get premium */ function getPremium(uint256 _price) public view returns(uint256) { if (_price >= 1000000000000000000 && _price <= 1000000000000000000000) { return premium1; } else if (_price > 1000000000000000000000 && _price <= 5000000000000000000000) { return premium2; } else { return premium3; } } /** * Function to simulate prices and discount at a given epoch */ function priceSimulation(uint256 _opt, string memory _id, uint256 _poolID, uint256 _epoch) public view returns (uint256, uint256) { (uint256 price, , , , ) = gemNFTAddress.retrieveCategoryData(_id); if (_opt == 1) { uint256 polID = _poolID; (uint256 goldProPrice, uint256 goldPrice , , ,) = priceFeedAddress.getEpochPrices(_epoch); uint256 discountPrice; if (goldPrice >= goldProPrice) { // scenario A and B discountPrice = price * stakingAddress.poolDiscount(polID) / 100; return (price - discountPrice, discountPrice); } else if (goldProPrice > goldPrice) { // scenario C and D uint256 dynPrice = price * goldPrice / goldProPrice; discountPrice = dynPrice - (dynPrice * stakingAddress.poolDiscount(polID) / 100); uint256 dynDiscount = price - discountPrice; return (discountPrice, dynDiscount); } } else { // spot buy with current prices and premium (, uint256 goldProPrice, , uint256 goldDailyPrice, ,) = priceFeedAddress.getLatestPrices(); uint256 dynPrice = price * goldDailyPrice / goldProPrice; uint256 premiumPrice = dynPrice + (dynPrice * getPremium(price) / 10000); return (premiumPrice, 0); } } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.5; /* * @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 GSN 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 Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } }
// SPDX-License-Identifier: MIT /** * * @title IERC20 */ pragma solidity ^0.8.5; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @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. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address from, address to, uint256 amount) external returns (bool); }
// SPDX-License-Identifier: MIT /** * * @title GEMNFT Interface */ pragma solidity ^0.8.5; interface IGEMNFT { function retrieveCategoryData(string memory _id) external view returns (uint256, uint256, uint256, uint256, bool); function contractIsActive() external view returns (bool); function mintGEMNFTAUTH(string memory _id, address _receiver) external; }
// SPDX-License-Identifier: MIT /** * * @title Price Feed Interface */ pragma solidity ^0.8.5; interface IPriceFeed { function getLatestPrices() external view returns (uint256, uint256, uint256, uint256, bytes32, uint256); function getEpochPrices(uint256 _epoch) external view returns (uint256, uint256, uint256, bytes32, uint256); function getEpochDataSetHash(uint256 _epoch) external view returns (bytes32, bytes32); }
// SPDX-License-Identifier: MIT /** * * @title Interface of the Staking contract */ pragma solidity ^0.8.5; interface IStaking { function getDiscount(uint256 _poolID, address _address, uint256 _index) external view returns (uint256); function poolStatus(uint256 _poolID) external view returns (bool); function poolAmountPerAddress(uint256 _poolID, address _address, uint256 _index) external view returns (uint256); function updateAddressPool(address _address, uint256 _poolID, uint256 _index) external; function poolDataPerAddress(uint256 _poolID, address _address, uint256 _index) external view returns (uint256, uint256, uint256, uint256, uint256); function poolGPROPricePerAddress(uint256 _poolID, address _address, uint256 _index) external view returns (uint256); function poolGoldPricePerAddress(uint256 _poolID, address _address, uint256 _index) external view returns (uint256); function poolEpochPerAddress(uint256 _poolID, address _address, uint256 _index) external view returns (uint256); function poolPrice(uint256 _poolID) external view returns (uint256); function retrieveKYCStatus(address _address) external view returns (bool); function retrieveBlackListStatus(address _address) external view returns (bool); function withdrawalPool(uint256 _poolID, uint256 _index) external; function depositPool(uint256 _poolID) external; function poolDiscount(uint256 _poolID) external view returns (uint256); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.9.0) (utils/cryptography/MerkleProof.sol) pragma solidity ^0.8.18; /** * @dev These functions deal with verification of Merkle Tree proofs. * * The tree and the proofs can be generated using our * https://github.com/OpenZeppelin/merkle-tree[JavaScript library]. * You will find a quickstart guide in the readme. * * 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. * OpenZeppelin's JavaScript library generates merkle trees that are safe * against this attack out of the box. */ 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. */ function verify(bytes32[] memory proof, bytes32 root, bytes32 leaf) internal pure returns (bool) { return processProof(proof, leaf) == root; } /** * @dev Calldata version of {verify} * * _Available since v4.7._ */ function verifyCalldata(bytes32[] calldata proof, bytes32 root, bytes32 leaf) internal pure returns (bool) { return processProofCalldata(proof, leaf) == root; } /** * @dev Returns the rebuilt hash obtained by traversing a Merkle tree up * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt * hash matches the root of the tree. When processing the proof, the pairs * of leafs & pre-images are assumed to be sorted. * * _Available since v4.4._ */ function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) { bytes32 computedHash = leaf; for (uint256 i = 0; i < proof.length; i++) { computedHash = _hashPair(computedHash, proof[i]); } return computedHash; } /** * @dev Calldata version of {processProof} * * _Available since v4.7._ */ function processProofCalldata(bytes32[] calldata proof, bytes32 leaf) internal pure returns (bytes32) { bytes32 computedHash = leaf; for (uint256 i = 0; i < proof.length; i++) { computedHash = _hashPair(computedHash, proof[i]); } return computedHash; } /** * @dev Returns true if the `leaves` can be simultaneously proven to be a part of a merkle tree defined by * `root`, according to `proof` and `proofFlags` as described in {processMultiProof}. * * CAUTION: Not all merkle trees admit multiproofs. See {processMultiProof} for details. * * _Available since v4.7._ */ function multiProofVerify( bytes32[] memory proof, bool[] memory proofFlags, bytes32 root, bytes32[] memory leaves ) internal pure returns (bool) { return processMultiProof(proof, proofFlags, leaves) == root; } /** * @dev Calldata version of {multiProofVerify} * * CAUTION: Not all merkle trees admit multiproofs. See {processMultiProof} for details. * * _Available since v4.7._ */ function multiProofVerifyCalldata( bytes32[] calldata proof, bool[] calldata proofFlags, bytes32 root, bytes32[] memory leaves ) internal pure returns (bool) { return processMultiProofCalldata(proof, proofFlags, leaves) == root; } /** * @dev Returns the root of a tree reconstructed from `leaves` and sibling nodes in `proof`. The reconstruction * proceeds by incrementally reconstructing all inner nodes by combining a leaf/inner node with either another * leaf/inner node or a proof sibling node, depending on whether each `proofFlags` item is true or false * respectively. * * CAUTION: Not all merkle trees admit multiproofs. To use multiproofs, it is sufficient to ensure that: 1) the tree * is complete (but not necessarily perfect), 2) the leaves to be proven are in the opposite order they are in the * tree (i.e., as seen from right to left starting at the deepest layer and continuing at the next layer). * * _Available since v4.7._ */ function processMultiProof( bytes32[] memory proof, bool[] memory proofFlags, bytes32[] memory leaves ) internal pure returns (bytes32 merkleRoot) { // This function rebuilds the root hash by traversing the tree up from the leaves. The root is rebuilt by // consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the // `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of // the merkle tree. uint256 leavesLen = leaves.length; uint256 totalHashes = proofFlags.length; // Check proof validity. require(leavesLen + proof.length - 1 == totalHashes, "MerkleProof: invalid multiproof"); // The xxxPos values are "pointers" to the next value to consume in each array. All accesses are done using // `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's "pop". bytes32[] memory hashes = new bytes32[](totalHashes); uint256 leafPos = 0; uint256 hashPos = 0; uint256 proofPos = 0; // At each step, we compute the next hash using two values: // - a value from the "main queue". If not all leaves have been consumed, we get the next leaf, otherwise we // get the next hash. // - depending on the flag, either another value from the "main queue" (merging branches) or an element from the // `proof` array. for (uint256 i = 0; i < totalHashes; i++) { bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++]; bytes32 b = proofFlags[i] ? (leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++]) : proof[proofPos++]; hashes[i] = _hashPair(a, b); } if (totalHashes > 0) { unchecked { return hashes[totalHashes - 1]; } } else if (leavesLen > 0) { return leaves[0]; } else { return proof[0]; } } /** * @dev Calldata version of {processMultiProof}. * * CAUTION: Not all merkle trees admit multiproofs. See {processMultiProof} for details. * * _Available since v4.7._ */ function processMultiProofCalldata( bytes32[] calldata proof, bool[] calldata proofFlags, bytes32[] memory leaves ) internal pure returns (bytes32 merkleRoot) { // This function rebuilds the root hash by traversing the tree up from the leaves. The root is rebuilt by // consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the // `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of // the merkle tree. uint256 leavesLen = leaves.length; uint256 totalHashes = proofFlags.length; // Check proof validity. require(leavesLen + proof.length - 1 == totalHashes, "MerkleProof: invalid multiproof"); // The xxxPos values are "pointers" to the next value to consume in each array. All accesses are done using // `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's "pop". bytes32[] memory hashes = new bytes32[](totalHashes); uint256 leafPos = 0; uint256 hashPos = 0; uint256 proofPos = 0; // At each step, we compute the next hash using two values: // - a value from the "main queue". If not all leaves have been consumed, we get the next leaf, otherwise we // get the next hash. // - depending on the flag, either another value from the "main queue" (merging branches) or an element from the // `proof` array. for (uint256 i = 0; i < totalHashes; i++) { bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++]; bytes32 b = proofFlags[i] ? (leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++]) : proof[proofPos++]; hashes[i] = _hashPair(a, b); } if (totalHashes > 0) { unchecked { return hashes[totalHashes - 1]; } } else if (leavesLen > 0) { return leaves[0]; } else { return proof[0]; } } function _hashPair(bytes32 a, bytes32 b) private pure returns (bytes32) { return a < b ? _efficientHash(a, b) : _efficientHash(b, a); } function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) { /// @solidity memory-safe-assembly assembly { mstore(0x00, a) mstore(0x20, b) value := keccak256(0x00, 0x40) } } }
// SPDX-License-Identifier: MIT // File: @openzeppelin/contracts/access/Ownable.sol pragma solidity ^0.8.5; /** * @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. */ import "./Context.sol"; abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () internal { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } }
[{"inputs":[{"internalType":"address","name":"_stakingAddress","type":"address"},{"internalType":"address","name":"_goldProAddress","type":"address"},{"internalType":"address","name":"_priceFeedAddress","type":"address"},{"internalType":"address","name":"_gemNFTAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"adminPermissions","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gemNFTAddress","outputs":[{"internalType":"contract IGEMNFT","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"getPremium","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"goldProAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"merkleRoots","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_id","type":"string"},{"internalType":"address","name":"_receiver","type":"address"},{"internalType":"uint256","name":"_poolID","type":"uint256"},{"internalType":"uint256","name":"_epoch","type":"uint256"},{"internalType":"uint256","name":"_index","type":"uint256"},{"internalType":"bytes32[]","name":"merkleProof","type":"bytes32[]"}],"name":"mintGEMNFT","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"string[]","name":"_id","type":"string[]"},{"internalType":"address","name":"_receiver","type":"address"},{"internalType":"bytes32[]","name":"merkleProof","type":"bytes32[]"}],"name":"mintSpotBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"mintedSt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"priceFeedAddress","outputs":[{"internalType":"contract IPriceFeed","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_opt","type":"uint256"},{"internalType":"string","name":"_id","type":"string"},{"internalType":"uint256","name":"_poolID","type":"uint256"},{"internalType":"uint256","name":"_epoch","type":"uint256"}],"name":"priceSimulation","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_admin","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"registerAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_epoch","type":"uint256"},{"internalType":"bytes32","name":"_merkleRoot","type":"bytes32"}],"name":"setEpochMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_premium1","type":"uint256"},{"internalType":"uint256","name":"_premium2","type":"uint256"},{"internalType":"uint256","name":"_premium3","type":"uint256"}],"name":"setPremium","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_staking","type":"address"}],"name":"setStakingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stakingAddress","outputs":[{"internalType":"contract IStaking","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"updatePricesContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_contractAddress","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"withdrawERC20","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405234801561000f575f80fd5b506040516121c73803806121c783398101604081905261002e91610106565b5f80546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350335f908152600160208190526040909120805460ff19169091179055600480546001600160a01b03199081166001600160a01b0396871617909155600380548216948616949094179093556005805484169285169290921790915560068054831691909316179091556002805461dead9216919091179055610157565b80516001600160a01b0381168114610101575f80fd5b919050565b5f805f8060808587031215610119575f80fd5b610122856100eb565b9350610130602086016100eb565b925061013e604086016100eb565b915061014c606086016100eb565b905092959194509250565b612063806101645f395ff3fe608060405260043610610131575f3560e01c806390a9b86c116100a8578063d7b4be241161006d578063d7b4be2414610378578063d9d5ffc614610397578063e0abca0b146103c5578063e5ad621d146103e4578063f2fde38b14610403578063f4e0d9ac14610422575f80fd5b806390a9b86c146102be5780639456fbcc146102fc578063c5c1dbdf1461031b578063d246d4111461033a578063d5a805b014610359575f80fd5b80635a21eeae116100f95780635a21eeae146101e55780636c2094a61461021c5780636d2e375914610250578063715018a61461026357806371c5ecb1146102775780638da5cb5b146102a2575f80fd5b80630864719e14610135578063141c21c8146101565780631bf1fffb14610175578063365e5253146101a757806351cff8d9146101c6575b5f80fd5b348015610140575f80fd5b5061015461014f3660046119ef565b610441565b005b348015610161575f80fd5b50610154610170366004611a2e565b6104c3565b348015610180575f80fd5b5061019461018f366004611a47565b61050e565b6040519081526020015b60405180910390f35b3480156101b2575f80fd5b506101546101c1366004611b57565b610579565b3480156101d1575f80fd5b506101546101e0366004611a2e565b6105bb565b3480156101f0575f80fd5b50600354610204906001600160a01b031681565b6040516001600160a01b03909116815260200161019e565b348015610227575f80fd5b5061023b610236366004611c62565b61061e565b6040805192835260208301919091520161019e565b61015461025e366004611cb5565b61096a565b34801561026e575f80fd5b50610154610cb0565b348015610282575f80fd5b50610194610291366004611a47565b60086020525f908152604090205481565b3480156102ad575f80fd5b505f546001600160a01b0316610204565b3480156102c9575f80fd5b506102ec6102d8366004611a2e565b60016020525f908152604090205460ff1681565b604051901515815260200161019e565b348015610307575f80fd5b50610154610316366004611d4b565b610d21565b348015610326575f80fd5b50600654610204906001600160a01b031681565b348015610345575f80fd5b50600254610204906001600160a01b031681565b348015610364575f80fd5b50610154610373366004611d7c565b610e2c565b348015610383575f80fd5b50600454610204906001600160a01b031681565b3480156103a2575f80fd5b506102ec6103b1366004611a47565b60076020525f908152604090205460ff1681565b3480156103d0575f80fd5b50600554610204906001600160a01b031681565b3480156103ef575f80fd5b506101546103fe366004611dac565b610eac565b34801561040e575f80fd5b5061015461041d366004611a2e565b610eff565b34801561042d575f80fd5b5061015461043c366004611a2e565b610fe6565b335f9081526001602081905260409091205460ff161515148061046d57505f546001600160a01b031633145b6104b55760405162461bcd60e51b81526020600482015260146024820152732ab9b2b91034b9903737ba1030b71030b236b4b760611b60448201526064015b60405180910390fd5b600992909255600a55600b55565b5f546001600160a01b031633146104ec5760405162461bcd60e51b81526004016104ac90611de1565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b5f670de0b6b3a764000082101580156105305750683635c9adc5dea000008211155b1561053d57505060095490565b683635c9adc5dea000008211801561055f575069010f0cf064dd592000008211155b1561056c575050600a5490565b5050600b5490565b919050565b5f5b84518110156105b4576105ac85828151811061059957610599611e16565b6020026020010151855f805f888861096a565b60010161057b565b5050505050565b5f546001600160a01b031633146105e45760405162461bcd60e51b81526004016104ac90611de1565b60405147906001600160a01b0383169082156108fc029083905f818181858888f19350505050158015610619573d5f803e3d5ffd5b505050565b600654604051632c2569ff60e21b81525f91829182916001600160a01b03169063b095a7fc90610652908990600401611e58565b60a060405180830381865afa15801561066d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106919190611e6a565b5050505090508660010361088c576005546040516397f75f9f60e01b81526004810186905286915f9182916001600160a01b0316906397f75f9f9060240160a060405180830381865afa1580156106ea573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061070e9190611eb5565b505050915091505f8282106107b9576004805460405163012266c560e11b81529182018690526064916001600160a01b0390911690630244cd8a90602401602060405180830381865afa158015610767573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061078b9190611ef1565b6107959087611f1c565b61079f9190611f33565b90506107ab8186611f52565b965094506109619350505050565b81831115610883575f836107cd8488611f1c565b6107d79190611f33565b6004805460405163012266c560e11b81529182018890529192506064916001600160a01b031690630244cd8a90602401602060405180830381865afa158015610822573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108469190611ef1565b6108509083611f1c565b61085a9190611f33565b6108649082611f52565b91505f6108718388611f52565b92985091965061096195505050505050565b5050505061095f565b5f8060055f9054906101000a90046001600160a01b03166001600160a01b031663ff61ba5c6040518163ffffffff1660e01b815260040160c060405180830381865afa1580156108de573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109029190611f65565b50509350509250505f8282856109189190611f1c565b6109229190611f33565b90505f6127106109318661050e565b61093b9084611f1c565b6109459190611f33565b61094f9083611fab565b96505f9550610961945050505050565b505b94509492505050565b600654604051632c2569ff60e21b815288915f9182918291829182916001600160a01b039091169063b095a7fc906109a6908990600401611e58565b60a060405180830381865afa1580156109c1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109e59190611e6a565b94509450945094509450813414610a2a5760405162461bcd60e51b81526020600482015260096024820152682332b29032b93937b960b91b60448201526064016104ac565b60048054604051631a47bd9360e01b815233928101929092526001600160a01b031690631a47bd9390602401602060405180830381865afa158015610a71573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a959190611fbe565b15610adb5760405162461bcd60e51b81526020600482015260166024820152751059191c995cdcc81a5cc8189b1858dadb1a5cdd195960521b60448201526064016104ac565b60065f9054906101000a90046001600160a01b03166001600160a01b0316630d60ea196040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b2b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b4f9190611fbe565b610b9b5760405162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206d7573742062652061637469766520746f206d696e740060448201526064016104ac565b600181151514610be35760405162461bcd60e51b815260206004820152601360248201527211185d1848191bd95cc81b9bdd08195e1a5cdd606a1b60448201526064016104ac565b828410610c235760405162461bcd60e51b815260206004820152600e60248201526d14dd5c1c1b1e4814995858da195960921b60448201526064016104ac565b610c32858c338c8e8d8d611031565b60065f9054906101000a90046001600160a01b03166001600160a01b031663c9ef54b5878e6040518363ffffffff1660e01b8152600401610c74929190611fe0565b5f604051808303815f87803b158015610c8b575f80fd5b505af1158015610c9d573d5f803e3d5ffd5b5050505050505050505050505050505050565b5f546001600160a01b03163314610cd95760405162461bcd60e51b81526004016104ac90611de1565b5f80546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a35f80546001600160a01b0319169055565b5f546001600160a01b03163314610d4a5760405162461bcd60e51b81526004016104ac90611de1565b6040516370a0823160e01b81523060048201525f906001600160a01b038416906370a0823190602401602060405180830381865afa158015610d8e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610db29190611ef1565b60405163a9059cbb60e01b81526001600160a01b038481166004830152602482018390529192509084169063a9059cbb906044016020604051808303815f875af1158015610e02573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e269190611fbe565b50505050565b335f9081526001602081905260409091205460ff1615151480610e5857505f546001600160a01b031633145b610e9b5760405162461bcd60e51b81526020600482015260146024820152732ab9b2b91034b9903737ba1030b71030b236b4b760611b60448201526064016104ac565b5f9182526008602052604090912055565b5f546001600160a01b03163314610ed55760405162461bcd60e51b81526004016104ac90611de1565b6001600160a01b03919091165f908152600160205260409020805460ff1916911515919091179055565b5f546001600160a01b03163314610f285760405162461bcd60e51b81526004016104ac90611de1565b6001600160a01b038116610f8d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016104ac565b5f80546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35f80546001600160a01b0319166001600160a01b0392909216919091179055565b5f546001600160a01b0316331461100f5760405162461bcd60e51b81526004016104ac90611de1565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6004805460405163037b80a760e41b81529182018890526001600160a01b038088166024840152604483018790528992899288928a925f9291909116906337b80a7090606401602060405180830381865afa158015611092573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110b69190611ef1565b1115611815576004805460405163f665d10b60e01b81529182018590526001600160a01b03169063f665d10b90602401602060405180830381865afa158015611101573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111259190611fbe565b15156001146111695760405162461bcd60e51b815260206004820152601060248201526f506f6f6c20697320696e61637469766560801b60448201526064016104ac565b6040516bffffffffffffffffffffffff19606083901b16602082015260348101889052605481018b9052607481018990525f9060940160408051601f19818403018152828252805160209182012090830152016040516020818303038152906040528051906020012090506111f1878760085f8c81526020019081526020015f205484611966565b61122d5760405162461bcd60e51b815260206004820152600d60248201526c34b73b30b634b210383937b7b360991b60448201526064016104ac565b5f8181526007602052604090205460ff161561127c5760405162461bcd60e51b815260206004820152600e60248201526d185b1c9958591e481b5a5b9d195960921b60448201526064016104ac565b5f81815260076020526040808220805460ff1916600117905560055490516397f75f9f60e01b8152600481018b905282916001600160a01b0316906397f75f9f9060240160a060405180830381865afa1580156112db573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112ff9190611eb5565b505050915091505f8490505f8f60045f9054906101000a90046001600160a01b03166001600160a01b031663ee60bd4a8a898b6040518463ffffffff1660e01b815260040161136a939291909283526001600160a01b03919091166020830152604082015260600190565b602060405180830381865afa158015611385573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113a99190611ef1565b146113e35760405162461bcd60e51b815260206004820152600a602482015269139bc819195c1bdcda5d60b21b60448201526064016104ac565b8383106115ec576004805460405163037b80a760e41b81529182018a90526001600160a01b038881166024840152604483018a90526064929116906337b80a70908301602060405180830381865afa158015611441573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114659190611ef1565b61146f908b611f1c565b6114799190611f33565b60048054604051633239f76360e11b81526001600160a01b0386811693820193909352602481018c9052604481018b90529293501690636473eec6906064015f604051808303815f87803b1580156114cf575f80fd5b505af11580156114e1573d5f803e3d5ffd5b50506003546004546002546001600160a01b0392831694506323b872dd9350908216911661150f858e611f52565b6040518463ffffffff1660e01b815260040161152d93929190612009565b6020604051808303815f875af1158015611549573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061156d9190611fbe565b50600354600480546040516323b872dd60e01b81526001600160a01b03938416936323b872dd936115a693909116918b91879101612009565b6020604051808303815f875af11580156115c2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115e69190611fbe565b5061180b565b8284111561180b575f84611600858c611f1c565b61160a9190611f33565b6004805460405163012266c560e11b81529182018c90529192506064916001600160a01b031690630244cd8a90602401602060405180830381865afa158015611655573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116799190611ef1565b6116839083611f1c565b61168d9190611f33565b6116979082611f52565b91505f6116a4838c611f52565b60048054604051633239f76360e11b81526001600160a01b0388811693820193909352602481018e9052604481018d90529293501690636473eec6906064015f604051808303815f87803b1580156116fa575f80fd5b505af115801561170c573d5f803e3d5ffd5b5050600354600480546002546040516323b872dd60e01b81526001600160a01b0394851696506323b872dd955061174e94928316939190921691899101612009565b6020604051808303815f875af115801561176a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061178e9190611fbe565b50600354600480546040516323b872dd60e01b81526001600160a01b03938416936323b872dd936117c793909116918d91879101612009565b6020604051808303815f875af11580156117e3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118079190611fbe565b5050505b5050505050611959565b5f8060055f9054906101000a90046001600160a01b03166001600160a01b031663ff61ba5c6040518163ffffffff1660e01b815260040160c060405180830381865afa158015611867573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061188b9190611f65565b50509350509250505f82828f6118a19190611f1c565b6118ab9190611f33565b90505f6127106118ba8961050e565b6118c49084611f1c565b6118ce9190611f33565b6118d89083611fab565b6003546002546040516323b872dd60e01b81529293506001600160a01b03918216926323b872dd92611913928a929116908690600401612009565b6020604051808303815f875af115801561192f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119539190611fbe565b50505050505b5050505050505050505050565b5f8261197386868561197d565b1495945050505050565b5f81815b848110156119b5576119ab8287878481811061199f5761199f611e16565b905060200201356119be565b9150600101611981565b50949350505050565b5f8183106119d8575f8281526020849052604090206119e6565b5f8381526020839052604090205b90505b92915050565b5f805f60608486031215611a01575f80fd5b505081359360208301359350604090920135919050565b80356001600160a01b0381168114610574575f80fd5b5f60208284031215611a3e575f80fd5b6119e682611a18565b5f60208284031215611a57575f80fd5b5035919050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611a9b57611a9b611a5e565b604052919050565b5f82601f830112611ab2575f80fd5b813567ffffffffffffffff811115611acc57611acc611a5e565b611adf601f8201601f1916602001611a72565b818152846020838601011115611af3575f80fd5b816020850160208301375f918101602001919091529392505050565b5f8083601f840112611b1f575f80fd5b50813567ffffffffffffffff811115611b36575f80fd5b6020830191508360208260051b8501011115611b50575f80fd5b9250929050565b5f805f8060608587031215611b6a575f80fd5b843567ffffffffffffffff811115611b80575f80fd5b8501601f81018713611b90575f80fd5b803567ffffffffffffffff811115611baa57611baa611a5e565b8060051b611bba60208201611a72565b9182526020818401810192908101908a841115611bd5575f80fd5b6020850192505b83831015611c1b57823567ffffffffffffffff811115611bfa575f80fd5b611c098c602083890101611aa3565b83525060209283019290910190611bdc565b8098505050505050611c2f60208601611a18565b9250604085013567ffffffffffffffff811115611c4a575f80fd5b611c5687828801611b0f565b95989497509550505050565b5f805f8060808587031215611c75575f80fd5b84359350602085013567ffffffffffffffff811115611c92575f80fd5b611c9e87828801611aa3565b949794965050505060408301359260600135919050565b5f805f805f805f60c0888a031215611ccb575f80fd5b873567ffffffffffffffff811115611ce1575f80fd5b611ced8a828b01611aa3565b975050611cfc60208901611a18565b955060408801359450606088013593506080880135925060a088013567ffffffffffffffff811115611d2c575f80fd5b611d388a828b01611b0f565b989b979a50959850939692959293505050565b5f8060408385031215611d5c575f80fd5b611d6583611a18565b9150611d7360208401611a18565b90509250929050565b5f8060408385031215611d8d575f80fd5b50508035926020909101359150565b8015158114611da9575f80fd5b50565b5f8060408385031215611dbd575f80fd5b611dc683611a18565b91506020830135611dd681611d9c565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52603260045260245ffd5b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6119e66020830184611e2a565b5f805f805f60a08688031215611e7e575f80fd5b855160208701516040880151606089015160808a015193985091965094509250611ea781611d9c565b809150509295509295909350565b5f805f805f60a08688031215611ec9575f80fd5b5050835160208501516040860151606087015160809097015192989197509594509092509050565b5f60208284031215611f01575f80fd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b80820281158282048414176119e9576119e9611f08565b5f82611f4d57634e487b7160e01b5f52601260045260245ffd5b500490565b818103818111156119e9576119e9611f08565b5f805f805f8060c08789031215611f7a575f80fd5b50508451602086015160408701516060880151608089015160a090990151939a929950909790965094509092509050565b808201808211156119e9576119e9611f08565b5f60208284031215611fce575f80fd5b8151611fd981611d9c565b9392505050565b604081525f611ff26040830185611e2a565b905060018060a01b03831660208301529392505050565b6001600160a01b03938416815291909216602082015260408101919091526060019056fea2646970667358221220b99ee352cd908149ad986c45c9d47209c55a05a4a1743779319827ca7340f9cd64736f6c634300081a0033000000000000000000000000db886f0a75dfd735118b201c3426a1fa40180e2d000000000000000000000000ff22c94ffb6bb5d1df18beb5fd1dfe7583d3b214000000000000000000000000b2f7243b6c5f3a3660941bb77bf82d274e664587000000000000000000000000acac111bbf412f9b41a6f171df93a824aa4d7706
Deployed Bytecode
0x608060405260043610610131575f3560e01c806390a9b86c116100a8578063d7b4be241161006d578063d7b4be2414610378578063d9d5ffc614610397578063e0abca0b146103c5578063e5ad621d146103e4578063f2fde38b14610403578063f4e0d9ac14610422575f80fd5b806390a9b86c146102be5780639456fbcc146102fc578063c5c1dbdf1461031b578063d246d4111461033a578063d5a805b014610359575f80fd5b80635a21eeae116100f95780635a21eeae146101e55780636c2094a61461021c5780636d2e375914610250578063715018a61461026357806371c5ecb1146102775780638da5cb5b146102a2575f80fd5b80630864719e14610135578063141c21c8146101565780631bf1fffb14610175578063365e5253146101a757806351cff8d9146101c6575b5f80fd5b348015610140575f80fd5b5061015461014f3660046119ef565b610441565b005b348015610161575f80fd5b50610154610170366004611a2e565b6104c3565b348015610180575f80fd5b5061019461018f366004611a47565b61050e565b6040519081526020015b60405180910390f35b3480156101b2575f80fd5b506101546101c1366004611b57565b610579565b3480156101d1575f80fd5b506101546101e0366004611a2e565b6105bb565b3480156101f0575f80fd5b50600354610204906001600160a01b031681565b6040516001600160a01b03909116815260200161019e565b348015610227575f80fd5b5061023b610236366004611c62565b61061e565b6040805192835260208301919091520161019e565b61015461025e366004611cb5565b61096a565b34801561026e575f80fd5b50610154610cb0565b348015610282575f80fd5b50610194610291366004611a47565b60086020525f908152604090205481565b3480156102ad575f80fd5b505f546001600160a01b0316610204565b3480156102c9575f80fd5b506102ec6102d8366004611a2e565b60016020525f908152604090205460ff1681565b604051901515815260200161019e565b348015610307575f80fd5b50610154610316366004611d4b565b610d21565b348015610326575f80fd5b50600654610204906001600160a01b031681565b348015610345575f80fd5b50600254610204906001600160a01b031681565b348015610364575f80fd5b50610154610373366004611d7c565b610e2c565b348015610383575f80fd5b50600454610204906001600160a01b031681565b3480156103a2575f80fd5b506102ec6103b1366004611a47565b60076020525f908152604090205460ff1681565b3480156103d0575f80fd5b50600554610204906001600160a01b031681565b3480156103ef575f80fd5b506101546103fe366004611dac565b610eac565b34801561040e575f80fd5b5061015461041d366004611a2e565b610eff565b34801561042d575f80fd5b5061015461043c366004611a2e565b610fe6565b335f9081526001602081905260409091205460ff161515148061046d57505f546001600160a01b031633145b6104b55760405162461bcd60e51b81526020600482015260146024820152732ab9b2b91034b9903737ba1030b71030b236b4b760611b60448201526064015b60405180910390fd5b600992909255600a55600b55565b5f546001600160a01b031633146104ec5760405162461bcd60e51b81526004016104ac90611de1565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b5f670de0b6b3a764000082101580156105305750683635c9adc5dea000008211155b1561053d57505060095490565b683635c9adc5dea000008211801561055f575069010f0cf064dd592000008211155b1561056c575050600a5490565b5050600b5490565b919050565b5f5b84518110156105b4576105ac85828151811061059957610599611e16565b6020026020010151855f805f888861096a565b60010161057b565b5050505050565b5f546001600160a01b031633146105e45760405162461bcd60e51b81526004016104ac90611de1565b60405147906001600160a01b0383169082156108fc029083905f818181858888f19350505050158015610619573d5f803e3d5ffd5b505050565b600654604051632c2569ff60e21b81525f91829182916001600160a01b03169063b095a7fc90610652908990600401611e58565b60a060405180830381865afa15801561066d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106919190611e6a565b5050505090508660010361088c576005546040516397f75f9f60e01b81526004810186905286915f9182916001600160a01b0316906397f75f9f9060240160a060405180830381865afa1580156106ea573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061070e9190611eb5565b505050915091505f8282106107b9576004805460405163012266c560e11b81529182018690526064916001600160a01b0390911690630244cd8a90602401602060405180830381865afa158015610767573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061078b9190611ef1565b6107959087611f1c565b61079f9190611f33565b90506107ab8186611f52565b965094506109619350505050565b81831115610883575f836107cd8488611f1c565b6107d79190611f33565b6004805460405163012266c560e11b81529182018890529192506064916001600160a01b031690630244cd8a90602401602060405180830381865afa158015610822573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108469190611ef1565b6108509083611f1c565b61085a9190611f33565b6108649082611f52565b91505f6108718388611f52565b92985091965061096195505050505050565b5050505061095f565b5f8060055f9054906101000a90046001600160a01b03166001600160a01b031663ff61ba5c6040518163ffffffff1660e01b815260040160c060405180830381865afa1580156108de573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109029190611f65565b50509350509250505f8282856109189190611f1c565b6109229190611f33565b90505f6127106109318661050e565b61093b9084611f1c565b6109459190611f33565b61094f9083611fab565b96505f9550610961945050505050565b505b94509492505050565b600654604051632c2569ff60e21b815288915f9182918291829182916001600160a01b039091169063b095a7fc906109a6908990600401611e58565b60a060405180830381865afa1580156109c1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109e59190611e6a565b94509450945094509450813414610a2a5760405162461bcd60e51b81526020600482015260096024820152682332b29032b93937b960b91b60448201526064016104ac565b60048054604051631a47bd9360e01b815233928101929092526001600160a01b031690631a47bd9390602401602060405180830381865afa158015610a71573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a959190611fbe565b15610adb5760405162461bcd60e51b81526020600482015260166024820152751059191c995cdcc81a5cc8189b1858dadb1a5cdd195960521b60448201526064016104ac565b60065f9054906101000a90046001600160a01b03166001600160a01b0316630d60ea196040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b2b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b4f9190611fbe565b610b9b5760405162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206d7573742062652061637469766520746f206d696e740060448201526064016104ac565b600181151514610be35760405162461bcd60e51b815260206004820152601360248201527211185d1848191bd95cc81b9bdd08195e1a5cdd606a1b60448201526064016104ac565b828410610c235760405162461bcd60e51b815260206004820152600e60248201526d14dd5c1c1b1e4814995858da195960921b60448201526064016104ac565b610c32858c338c8e8d8d611031565b60065f9054906101000a90046001600160a01b03166001600160a01b031663c9ef54b5878e6040518363ffffffff1660e01b8152600401610c74929190611fe0565b5f604051808303815f87803b158015610c8b575f80fd5b505af1158015610c9d573d5f803e3d5ffd5b5050505050505050505050505050505050565b5f546001600160a01b03163314610cd95760405162461bcd60e51b81526004016104ac90611de1565b5f80546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a35f80546001600160a01b0319169055565b5f546001600160a01b03163314610d4a5760405162461bcd60e51b81526004016104ac90611de1565b6040516370a0823160e01b81523060048201525f906001600160a01b038416906370a0823190602401602060405180830381865afa158015610d8e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610db29190611ef1565b60405163a9059cbb60e01b81526001600160a01b038481166004830152602482018390529192509084169063a9059cbb906044016020604051808303815f875af1158015610e02573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e269190611fbe565b50505050565b335f9081526001602081905260409091205460ff1615151480610e5857505f546001600160a01b031633145b610e9b5760405162461bcd60e51b81526020600482015260146024820152732ab9b2b91034b9903737ba1030b71030b236b4b760611b60448201526064016104ac565b5f9182526008602052604090912055565b5f546001600160a01b03163314610ed55760405162461bcd60e51b81526004016104ac90611de1565b6001600160a01b03919091165f908152600160205260409020805460ff1916911515919091179055565b5f546001600160a01b03163314610f285760405162461bcd60e51b81526004016104ac90611de1565b6001600160a01b038116610f8d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016104ac565b5f80546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35f80546001600160a01b0319166001600160a01b0392909216919091179055565b5f546001600160a01b0316331461100f5760405162461bcd60e51b81526004016104ac90611de1565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6004805460405163037b80a760e41b81529182018890526001600160a01b038088166024840152604483018790528992899288928a925f9291909116906337b80a7090606401602060405180830381865afa158015611092573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110b69190611ef1565b1115611815576004805460405163f665d10b60e01b81529182018590526001600160a01b03169063f665d10b90602401602060405180830381865afa158015611101573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111259190611fbe565b15156001146111695760405162461bcd60e51b815260206004820152601060248201526f506f6f6c20697320696e61637469766560801b60448201526064016104ac565b6040516bffffffffffffffffffffffff19606083901b16602082015260348101889052605481018b9052607481018990525f9060940160408051601f19818403018152828252805160209182012090830152016040516020818303038152906040528051906020012090506111f1878760085f8c81526020019081526020015f205484611966565b61122d5760405162461bcd60e51b815260206004820152600d60248201526c34b73b30b634b210383937b7b360991b60448201526064016104ac565b5f8181526007602052604090205460ff161561127c5760405162461bcd60e51b815260206004820152600e60248201526d185b1c9958591e481b5a5b9d195960921b60448201526064016104ac565b5f81815260076020526040808220805460ff1916600117905560055490516397f75f9f60e01b8152600481018b905282916001600160a01b0316906397f75f9f9060240160a060405180830381865afa1580156112db573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112ff9190611eb5565b505050915091505f8490505f8f60045f9054906101000a90046001600160a01b03166001600160a01b031663ee60bd4a8a898b6040518463ffffffff1660e01b815260040161136a939291909283526001600160a01b03919091166020830152604082015260600190565b602060405180830381865afa158015611385573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113a99190611ef1565b146113e35760405162461bcd60e51b815260206004820152600a602482015269139bc819195c1bdcda5d60b21b60448201526064016104ac565b8383106115ec576004805460405163037b80a760e41b81529182018a90526001600160a01b038881166024840152604483018a90526064929116906337b80a70908301602060405180830381865afa158015611441573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114659190611ef1565b61146f908b611f1c565b6114799190611f33565b60048054604051633239f76360e11b81526001600160a01b0386811693820193909352602481018c9052604481018b90529293501690636473eec6906064015f604051808303815f87803b1580156114cf575f80fd5b505af11580156114e1573d5f803e3d5ffd5b50506003546004546002546001600160a01b0392831694506323b872dd9350908216911661150f858e611f52565b6040518463ffffffff1660e01b815260040161152d93929190612009565b6020604051808303815f875af1158015611549573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061156d9190611fbe565b50600354600480546040516323b872dd60e01b81526001600160a01b03938416936323b872dd936115a693909116918b91879101612009565b6020604051808303815f875af11580156115c2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115e69190611fbe565b5061180b565b8284111561180b575f84611600858c611f1c565b61160a9190611f33565b6004805460405163012266c560e11b81529182018c90529192506064916001600160a01b031690630244cd8a90602401602060405180830381865afa158015611655573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116799190611ef1565b6116839083611f1c565b61168d9190611f33565b6116979082611f52565b91505f6116a4838c611f52565b60048054604051633239f76360e11b81526001600160a01b0388811693820193909352602481018e9052604481018d90529293501690636473eec6906064015f604051808303815f87803b1580156116fa575f80fd5b505af115801561170c573d5f803e3d5ffd5b5050600354600480546002546040516323b872dd60e01b81526001600160a01b0394851696506323b872dd955061174e94928316939190921691899101612009565b6020604051808303815f875af115801561176a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061178e9190611fbe565b50600354600480546040516323b872dd60e01b81526001600160a01b03938416936323b872dd936117c793909116918d91879101612009565b6020604051808303815f875af11580156117e3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118079190611fbe565b5050505b5050505050611959565b5f8060055f9054906101000a90046001600160a01b03166001600160a01b031663ff61ba5c6040518163ffffffff1660e01b815260040160c060405180830381865afa158015611867573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061188b9190611f65565b50509350509250505f82828f6118a19190611f1c565b6118ab9190611f33565b90505f6127106118ba8961050e565b6118c49084611f1c565b6118ce9190611f33565b6118d89083611fab565b6003546002546040516323b872dd60e01b81529293506001600160a01b03918216926323b872dd92611913928a929116908690600401612009565b6020604051808303815f875af115801561192f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119539190611fbe565b50505050505b5050505050505050505050565b5f8261197386868561197d565b1495945050505050565b5f81815b848110156119b5576119ab8287878481811061199f5761199f611e16565b905060200201356119be565b9150600101611981565b50949350505050565b5f8183106119d8575f8281526020849052604090206119e6565b5f8381526020839052604090205b90505b92915050565b5f805f60608486031215611a01575f80fd5b505081359360208301359350604090920135919050565b80356001600160a01b0381168114610574575f80fd5b5f60208284031215611a3e575f80fd5b6119e682611a18565b5f60208284031215611a57575f80fd5b5035919050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611a9b57611a9b611a5e565b604052919050565b5f82601f830112611ab2575f80fd5b813567ffffffffffffffff811115611acc57611acc611a5e565b611adf601f8201601f1916602001611a72565b818152846020838601011115611af3575f80fd5b816020850160208301375f918101602001919091529392505050565b5f8083601f840112611b1f575f80fd5b50813567ffffffffffffffff811115611b36575f80fd5b6020830191508360208260051b8501011115611b50575f80fd5b9250929050565b5f805f8060608587031215611b6a575f80fd5b843567ffffffffffffffff811115611b80575f80fd5b8501601f81018713611b90575f80fd5b803567ffffffffffffffff811115611baa57611baa611a5e565b8060051b611bba60208201611a72565b9182526020818401810192908101908a841115611bd5575f80fd5b6020850192505b83831015611c1b57823567ffffffffffffffff811115611bfa575f80fd5b611c098c602083890101611aa3565b83525060209283019290910190611bdc565b8098505050505050611c2f60208601611a18565b9250604085013567ffffffffffffffff811115611c4a575f80fd5b611c5687828801611b0f565b95989497509550505050565b5f805f8060808587031215611c75575f80fd5b84359350602085013567ffffffffffffffff811115611c92575f80fd5b611c9e87828801611aa3565b949794965050505060408301359260600135919050565b5f805f805f805f60c0888a031215611ccb575f80fd5b873567ffffffffffffffff811115611ce1575f80fd5b611ced8a828b01611aa3565b975050611cfc60208901611a18565b955060408801359450606088013593506080880135925060a088013567ffffffffffffffff811115611d2c575f80fd5b611d388a828b01611b0f565b989b979a50959850939692959293505050565b5f8060408385031215611d5c575f80fd5b611d6583611a18565b9150611d7360208401611a18565b90509250929050565b5f8060408385031215611d8d575f80fd5b50508035926020909101359150565b8015158114611da9575f80fd5b50565b5f8060408385031215611dbd575f80fd5b611dc683611a18565b91506020830135611dd681611d9c565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52603260045260245ffd5b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6119e66020830184611e2a565b5f805f805f60a08688031215611e7e575f80fd5b855160208701516040880151606089015160808a015193985091965094509250611ea781611d9c565b809150509295509295909350565b5f805f805f60a08688031215611ec9575f80fd5b5050835160208501516040860151606087015160809097015192989197509594509092509050565b5f60208284031215611f01575f80fd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b80820281158282048414176119e9576119e9611f08565b5f82611f4d57634e487b7160e01b5f52601260045260245ffd5b500490565b818103818111156119e9576119e9611f08565b5f805f805f8060c08789031215611f7a575f80fd5b50508451602086015160408701516060880151608089015160a090990151939a929950909790965094509092509050565b808201808211156119e9576119e9611f08565b5f60208284031215611fce575f80fd5b8151611fd981611d9c565b9392505050565b604081525f611ff26040830185611e2a565b905060018060a01b03831660208301529392505050565b6001600160a01b03938416815291909216602082015260408101919091526060019056fea2646970667358221220b99ee352cd908149ad986c45c9d47209c55a05a4a1743779319827ca7340f9cd64736f6c634300081a0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000db886f0a75dfd735118b201c3426a1fa40180e2d000000000000000000000000ff22c94ffb6bb5d1df18beb5fd1dfe7583d3b214000000000000000000000000b2f7243b6c5f3a3660941bb77bf82d274e664587000000000000000000000000acac111bbf412f9b41a6f171df93a824aa4d7706
-----Decoded View---------------
Arg [0] : _stakingAddress (address): 0xdB886f0a75DFd735118B201C3426a1fA40180e2d
Arg [1] : _goldProAddress (address): 0xFF22c94FFb6bB5d1DF18bEb5fd1dFE7583D3B214
Arg [2] : _priceFeedAddress (address): 0xB2F7243b6C5f3A3660941BB77bf82D274E664587
Arg [3] : _gemNFTAddress (address): 0xACac111bBf412f9B41A6F171dF93a824AA4D7706
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 000000000000000000000000db886f0a75dfd735118b201c3426a1fa40180e2d
Arg [1] : 000000000000000000000000ff22c94ffb6bb5d1df18beb5fd1dfe7583d3b214
Arg [2] : 000000000000000000000000b2f7243b6c5f3a3660941bb77bf82d274e664587
Arg [3] : 000000000000000000000000acac111bbf412f9b41a6f171df93a824aa4d7706
Deployed Bytecode Sourcemap
341:8394:1:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6636:199;;;;;;;;;;-1:-1:-1;6636:199:1;;;;;:::i;:::-;;:::i;:::-;;6271:123;;;;;;;;;;-1:-1:-1;6271:123:1;;;;;:::i;:::-;;:::i;6893:365::-;;;;;;;;;;-1:-1:-1;6893:365:1;;;;;:::i;:::-;;:::i;:::-;;;1231:25:8;;;1219:2;1204:18;6893:365:1;;;;;;;;2439:239;;;;;;;;;;-1:-1:-1;2439:239:1;;;;;:::i;:::-;;:::i;5369:144::-;;;;;;;;;;-1:-1:-1;5369:144:1;;;;;:::i;:::-;;:::i;501:29::-;;;;;;;;;;-1:-1:-1;501:29:1;;;;-1:-1:-1;;;;;501:29:1;;;;;;-1:-1:-1;;;;;4308:32:8;;;4290:51;;4278:2;4263:18;501:29:1;4144:203:8;7350:1380:1;;;;;;;;;;-1:-1:-1;7350:1380:1;;;;;:::i;:::-;;:::i;:::-;;;;5208:25:8;;;5264:2;5249:18;;5242:34;;;;5181:18;7350:1380:1;5034:248:8;1563:811:1;;;;;;:::i;:::-;;:::i;1816:148:7:-;;;;;;;;;;;;;:::i;697:46:1:-;;;;;;;;;;-1:-1:-1;697:46:1;;;;;:::i;:::-;;;;;;;;;;;;;;1165:87:7;;;;;;;;;;-1:-1:-1;1211:7:7;1238:6;-1:-1:-1;;;;;1238:6:7;1165:87;;416:48:1;;;;;;;;;;-1:-1:-1;416:48:1;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;6723:14:8;;6716:22;6698:41;;6686:2;6671:18;416:48:1;6558:187:8;5603:231:1;;;;;;;;;;-1:-1:-1;5603:231:1;;;;;:::i;:::-;;:::i;615:28::-;;;;;;;;;;-1:-1:-1;615:28:1;;;;-1:-1:-1;;;;;615:28:1;;;471:23;;;;;;;;;;-1:-1:-1;471:23:1;;;;-1:-1:-1;;;;;471:23:1;;;5893:138;;;;;;;;;;-1:-1:-1;5893:138:1;;;;;:::i;:::-;;:::i;537:30::-;;;;;;;;;;-1:-1:-1;537:30:1;;;;-1:-1:-1;;;;;537:30:1;;;650:40;;;;;;;;;;-1:-1:-1;650:40:1;;;;;:::i;:::-;;;;;;;;;;;;;;;;574:34;;;;;;;;;;-1:-1:-1;574:34:1;;;;-1:-1:-1;;;;;574:34:1;;;6455:123;;;;;;;;;;-1:-1:-1;6455:123:1;;;;;:::i;:::-;;:::i;2119:244:7:-;;;;;;;;;;-1:-1:-1;2119:244:7;;;;;:::i;:::-;;:::i;6094:116:1:-;;;;;;;;;;-1:-1:-1;6094:116:1;;;;;:::i;:::-;;:::i;6636:199::-;914:10;897:28;;;;:16;:28;;;;;;;;;;;:36;;;;896:65;;-1:-1:-1;1211:7:7;1238:6;-1:-1:-1;;;;;1238:6:7;939:10:1;:21;896:65;888:98;;;;-1:-1:-1;;;888:98:1;;8917:2:8;888:98:1;;;8899:21:8;8956:2;8936:18;;;8929:30;-1:-1:-1;;;8975:18:8;;;8968:50;9035:18;;888:98:1;;;;;;;;;6745:8:::1;:20:::0;;;;6776:8:::1;:20:::0;6807:8:::1;:20:::0;6636:199::o;6271:123::-;1211:7:7;1238:6;-1:-1:-1;;;;;1238:6:7;685:10:0;1385:23:7;1377:68;;;;-1:-1:-1;;;1377:68:7;;;;;;;:::i;:::-;6347:16:1::1;:39:::0;;-1:-1:-1;;;;;;6347:39:1::1;-1:-1:-1::0;;;;;6347:39:1;;;::::1;::::0;;;::::1;::::0;;6271:123::o;6893:365::-;6949:7;6983:19;6973:6;:29;;:65;;;;;7016:22;7006:6;:32;;6973:65;6969:282;;;-1:-1:-1;;7062:8:1;;;6893:365::o;6969:282::-;7101:22;7092:6;:31;:67;;;;;7137:22;7127:6;:32;;7092:67;7088:163;;;-1:-1:-1;;7183:8:1;;;6893:365::o;7088:163::-;-1:-1:-1;;7231:8:1;;;6893:365::o;7088:163::-;6893:365;;;:::o;2439:239::-;2557:9;2552:119;2574:3;:10;2570:1;:14;2552:119;;;2607:52;2618:3;2622:1;2618:6;;;;;;;;:::i;:::-;;;;;;;2626:9;2638:1;2641;2644;2647:11;;2607:10;:52::i;:::-;2586:3;;2552:119;;;;2439:239;;;;:::o;5369:144::-;1211:7:7;1238:6;-1:-1:-1;;;;;1238:6:7;685:10:0;1385:23:7;1377:68;;;;-1:-1:-1;;;1377:68:7;;;;;;;:::i;:::-;5475:30:1::1;::::0;5443:21:::1;::::0;-1:-1:-1;;;;;5475:21:1;::::1;::::0;:30;::::1;;;::::0;5443:21;;5428:12:::1;5475:30:::0;5428:12;5475:30;5443:21;5475;:30;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;5417:96;5369:144:::0;:::o;7350:1380::-;7517:13;;:39;;-1:-1:-1;;;7517:39:1;;7462:7;;;;;;-1:-1:-1;;;;;7517:13:1;;:34;;:39;;7552:3;;7517:39;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7491:65;;;;;;7571:4;7579:1;7571:9;7567:1156;;7685:16;;:39;;-1:-1:-1;;;7685:39:1;;;;;1231:25:8;;;7613:7:1;;7597:13;;;;-1:-1:-1;;;;;7685:16:1;;:31;;1204:18:8;;7685:39:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7635:89;;;;;;;7739:21;7792:12;7779:9;:25;7775:572;;7869:14;;;:34;;-1:-1:-1;;;7869:34:1;;;;;1231:25:8;;;7906:3:1;;-1:-1:-1;;;;;7869:14:1;;;;:27;;1204:18:8;;7869:34:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7861:42;;:5;:42;:::i;:::-;:48;;;;:::i;:::-;7845:64;-1:-1:-1;7936:21:1;7845:64;7936:5;:21;:::i;:::-;7928:45;-1:-1:-1;7959:13:1;-1:-1:-1;7928:45:1;;-1:-1:-1;;;;7928:45:1;7775:572;8014:9;7999:12;:24;7995:352;;;8065:16;8104:12;8084:17;8092:9;8084:5;:17;:::i;:::-;:32;;;;:::i;:::-;8174:14;;;:34;;-1:-1:-1;;;8174:34:1;;;;;1231:25:8;;;8065:51:1;;-1:-1:-1;8211:3:1;;-1:-1:-1;;;;;8174:14:1;;:27;;1204:18:8;;8174:34:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8163:45;;:8;:45;:::i;:::-;:51;;;;:::i;:::-;8151:64;;:8;:64;:::i;:::-;8135:80;-1:-1:-1;8234:19:1;8256:21;8135:80;8256:5;:21;:::i;:::-;8304:13;;-1:-1:-1;8234:43:1;;-1:-1:-1;8296:35:1;;-1:-1:-1;;;;;;8296:35:1;7995:352;7582:776;;;;7567:1156;;;8427:20;8451:22;8480:16;;;;;;;;;-1:-1:-1;;;;;8480:16:1;-1:-1:-1;;;;;8480:32:1;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8424:90;;;;;;;;8529:16;8573:12;8556:14;8548:5;:22;;;;:::i;:::-;:37;;;;:::i;:::-;8529:56;;8600:20;8666:5;8646:17;8657:5;8646:10;:17::i;:::-;8635:28;;:8;:28;:::i;:::-;:36;;;;:::i;:::-;8623:49;;:8;:49;:::i;:::-;8600:72;-1:-1:-1;8709:1:1;;-1:-1:-1;8687:24:1;;-1:-1:-1;;;;;8687:24:1;7567:1156;7480:1250;7350:1380;;;;;;;;:::o;1563:811::-;1838:13;;:38;;-1:-1:-1;;;1838:38:1;;1747:3;;1728:16;;;;;;;;;;-1:-1:-1;;;;;1838:13:1;;;;:34;;:38;;1747:3;;1838:38;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1761:115;;;;;;;;;;1908:3;1895:9;:16;1887:38;;;;-1:-1:-1;;;1887:38:1;;13499:2:8;1887:38:1;;;13481:21:8;13538:1;13518:18;;;13511:29;-1:-1:-1;;;13556:18:8;;;13549:39;13605:18;;1887:38:1;13297:332:8;1887:38:1;1944:14;;;:50;;-1:-1:-1;;;1944:50:1;;1983:10;1944:50;;;4290:51:8;;;;-1:-1:-1;;;;;1944:14:1;;:38;;4263:18:8;;1944:50:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:59;1936:94;;;;-1:-1:-1;;;1936:94:1;;14086:2:8;1936:94:1;;;14068:21:8;14125:2;14105:18;;;14098:30;-1:-1:-1;;;14144:18:8;;;14137:52;14206:18;;1936:94:1;13884:346:8;1936:94:1;2049:13;;;;;;;;;-1:-1:-1;;;;;2049:13:1;-1:-1:-1;;;;;2049:30:1;;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2041:76;;;;-1:-1:-1;;;2041:76:1;;14437:2:8;2041:76:1;;;14419:21:8;14476:2;14456:18;;;14449:30;14515:33;14495:18;;;14488:61;14566:18;;2041:76:1;14235:355:8;2041:76:1;2146:4;2136:14;;;;2128:46;;;;-1:-1:-1;;;2128:46:1;;14797:2:8;2128:46:1;;;14779:21:8;14836:2;14816:18;;;14809:30;-1:-1:-1;;;14855:18:8;;;14848:49;14914:18;;2128:46:1;14595:343:8;2128:46:1;2203:6;2193:7;:16;2185:43;;;;-1:-1:-1;;;2185:43:1;;15145:2:8;2185:43:1;;;15127:21:8;15184:2;15164:18;;;15157:30;-1:-1:-1;;;15203:18:8;;;15196:44;15257:18;;2185:43:1;14943:338:8;2185:43:1;2239:73;2256:5;2263:7;2272:10;2284:6;2292;2300:11;;2239:16;:73::i;:::-;2323:13;;;;;;;;;-1:-1:-1;;;;;2323:13:1;-1:-1:-1;;;;;2323:28:1;;2352:2;2356:9;2323:43;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1717:657;;;;;;1563:811;;;;;;;:::o;1816:148:7:-;1211:7;1238:6;-1:-1:-1;;;;;1238:6:7;685:10:0;1385:23:7;1377:68;;;;-1:-1:-1;;;1377:68:7;;;;;;;:::i;:::-;1923:1:::1;1907:6:::0;;1886:40:::1;::::0;-1:-1:-1;;;;;1907:6:7;;::::1;::::0;1886:40:::1;::::0;1923:1;;1886:40:::1;1954:1;1937:19:::0;;-1:-1:-1;;;;;;1937:19:7::1;::::0;;1816:148::o;5603:231:1:-;1211:7:7;1238:6;-1:-1:-1;;;;;1238:6:7;685:10:0;1385:23:7;1377:68;;;;-1:-1:-1;;;1377:68:7;;;;;;;:::i;:::-;5707:49:1::1;::::0;-1:-1:-1;;;5707:49:1;;5750:4:::1;5707:49;::::0;::::1;4290:51:8::0;5693:11:1::1;::::0;-1:-1:-1;;;;;5707:34:1;::::1;::::0;::::1;::::0;4263:18:8;;5707:49:1::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5767:46;::::0;-1:-1:-1;;;5767:46:1;;-1:-1:-1;;;;;15800:32:8;;;5767:46:1::1;::::0;::::1;15782:51:8::0;15849:18;;;15842:34;;;5693:63:1;;-1:-1:-1;5767:33:1;;::::1;::::0;::::1;::::0;15755:18:8;;5767:46:1::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;5682:152;5603:231:::0;;:::o;5893:138::-;914:10;897:28;;;;:16;:28;;;;;;;;;;;:36;;;;896:65;;-1:-1:-1;1211:7:7;1238:6;-1:-1:-1;;;;;1238:6:7;939:10:1;:21;896:65;888:98;;;;-1:-1:-1;;;888:98:1;;8917:2:8;888:98:1;;;8899:21:8;8956:2;8936:18;;;8929:30;-1:-1:-1;;;8975:18:8;;;8968:50;9035:18;;888:98:1;8715:344:8;888:98:1;5990:19:::1;::::0;;;:11:::1;:19;::::0;;;;;:33;5893:138::o;6455:123::-;1211:7:7;1238:6;-1:-1:-1;;;;;1238:6:7;685:10:0;1385:23:7;1377:68;;;;-1:-1:-1;;;1377:68:7;;;;;;;:::i;:::-;-1:-1:-1;;;;;6536:24:1;;;::::1;;::::0;;;:16:::1;:24;::::0;;;;:34;;-1:-1:-1;;6536:34:1::1;::::0;::::1;;::::0;;;::::1;::::0;;6455:123::o;2119:244:7:-;1211:7;1238:6;-1:-1:-1;;;;;1238:6:7;685:10:0;1385:23:7;1377:68;;;;-1:-1:-1;;;1377:68:7;;;;;;;:::i;:::-;-1:-1:-1;;;;;2208:22:7;::::1;2200:73;;;::::0;-1:-1:-1;;;2200:73:7;;16089:2:8;2200:73:7::1;::::0;::::1;16071:21:8::0;16128:2;16108:18;;;16101:30;16167:34;16147:18;;;16140:62;-1:-1:-1;;;16218:18:8;;;16211:36;16264:19;;2200:73:7::1;15887:402:8::0;2200:73:7::1;2310:6;::::0;;2289:38:::1;::::0;-1:-1:-1;;;;;2289:38:7;;::::1;::::0;2310:6;::::1;::::0;2289:38:::1;::::0;::::1;2338:6;:17:::0;;-1:-1:-1;;;;;;2338:17:7::1;-1:-1:-1::0;;;;;2338:17:7;;;::::1;::::0;;;::::1;::::0;;2119:244::o;6094:116:1:-;1211:7:7;1238:6;-1:-1:-1;;;;;1238:6:7;685:10:0;1385:23:7;1377:68;;;;-1:-1:-1;;;1377:68:7;;;;;;;:::i;:::-;6167:14:1::1;:35:::0;;-1:-1:-1;;;;;;6167:35:1::1;-1:-1:-1::0;;;;;6167:35:1;;;::::1;::::0;;;::::1;::::0;;6094:116::o;2743:2542::-;3029:14;;;:48;;-1:-1:-1;;;3029:48:1;;;;;16496:25:8;;;-1:-1:-1;;;;;16557:32:8;;;16537:18;;;16530:60;16606:18;;;16599:34;;;2911:5:1;;2942:6;;2975:4;;3007:7;;2897:11;;3029:14;;;;;:26;;16469:18:8;;3029:48:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:52;3025:2253;;;3106:14;;;:31;;-1:-1:-1;;;3106:31:1;;;;;1231:25:8;;;-1:-1:-1;;;;;3106:14:1;;:25;;1204:18:8;;3106:31:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:39;;3141:4;3106:39;3098:68;;;;-1:-1:-1;;;3098:68:1;;16846:2:8;3098:68:1;;;16828:21:8;16885:2;16865:18;;;16858:30;-1:-1:-1;;;16904:18:8;;;16897:46;16960:18;;3098:68:1;16644:340:8;3098:68:1;3284:45;;-1:-1:-1;;17222:2:8;17218:15;;;17214:53;3284:45:1;;;17202:66:8;17284:12;;;17277:28;;;17321:12;;;17314:28;;;17358:12;;;17351:28;;;3235:12:1;;17395:13:8;;3284:45:1;;;-1:-1:-1;;3284:45:1;;;;;;;;;3273:58;;3284:45;3273:58;;;;3260:72;;;17548:19:8;17583:12;3260:72:1;;;;;;;;;;;;3250:83;;;;;;3235:98;;3356:64;3383:11;;3396;:17;3408:4;3396:17;;;;;;;;;;;;3415:4;3356:26;:64::i;:::-;3348:90;;;;-1:-1:-1;;;3348:90:1;;17808:2:8;3348:90:1;;;17790:21:8;17847:2;17827:18;;;17820:30;-1:-1:-1;;;17866:18:8;;;17859:43;17919:18;;3348:90:1;17606:337:8;3348:90:1;3461:14;;;;:8;:14;;;;;;;;:23;3453:50;;;;-1:-1:-1;;;3453:50:1;;18150:2:8;3453:50:1;;;18132:21:8;18189:2;18169:18;;;18162:30;-1:-1:-1;;;18208:18:8;;;18201:44;18262:18;;3453:50:1;17948:338:8;3453:50:1;3518:14;;;;:8;:14;;;;;;:21;;-1:-1:-1;;3518:21:1;3535:4;3518:21;;;3603:16;;:37;;-1:-1:-1;;;3603:37:1;;;;;1231:25:8;;;3518:14:1;;-1:-1:-1;;;;;3603:16:1;;:31;;1204:18:8;;3603:37:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3554:86;;;;;;;3655:17;3675:6;3655:26;;3696:21;3800:5;3740:14;;;;;;;;;-1:-1:-1;;;;;3740:14:1;-1:-1:-1;;;;;3740:35:1;;3776:4;3782:6;3790:5;3740:56;;;;;;;;;;;;;;;;16496:25:8;;;-1:-1:-1;;;;;16557:32:8;;;;16552:2;16537:18;;16530:60;16621:2;16606:18;;16599:34;16484:2;16469:18;;16294:345;3740:56:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:65;3732:88;;;;-1:-1:-1;;;3732:88:1;;18493:2:8;3732:88:1;;;18475:21:8;18532:2;18512:18;;;18505:30;-1:-1:-1;;;18551:18:8;;;18544:40;18601:18;;3732:88:1;18291:334:8;3732:88:1;3852:12;3839:9;:25;3835:1026;;3927:14;;;:47;;-1:-1:-1;;;3927:47:1;;;;;16496:25:8;;;-1:-1:-1;;;;;16557:32:8;;;16537:18;;;16530:60;16606:18;;;16599:34;;;3977:3:1;;3927:14;;;:26;;16469:18:8;;3927:47:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3921:53;;:3;:53;:::i;:::-;:59;;;;:::i;:::-;3999:14;;;:56;;-1:-1:-1;;;3999:56:1;;-1:-1:-1;;;;;18850:32:8;;;3999:56:1;;;18832:51:8;;;;18899:18;;;18892:34;;;18942:18;;;18935:34;;;3905:75:1;;-1:-1:-1;3999:14:1;;:32;;18805:18:8;;3999:56:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4081:14:1;;4118;;4135:8;;-1:-1:-1;;;;;4081:14:1;;;;-1:-1:-1;4074:35:1;;-1:-1:-1;4118:14:1;;;;4135:8;4145:19;4151:13;4145:3;:19;:::i;:::-;4074:91;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;4191:14:1;;4228;;;4184:83;;-1:-1:-1;;;4184:83:1;;-1:-1:-1;;;;;4191:14:1;;;;4184:35;;:83;;4228:14;;;;4245:6;;4253:13;;4184:83;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;3835:1026;;;4308:9;4293:12;:24;4289:572;;;4359:16;4396:12;4378:15;4384:9;4378:3;:15;:::i;:::-;:30;;;;:::i;:::-;4466:14;;;:33;;-1:-1:-1;;;4466:33:1;;;;;1231:25:8;;;4359:49:1;;-1:-1:-1;4502:3:1;;-1:-1:-1;;;;;4466:14:1;;:27;;1204:18:8;;4466:33:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4455:44;;:8;:44;:::i;:::-;:50;;;;:::i;:::-;4443:63;;:8;:63;:::i;:::-;4427:79;-1:-1:-1;4525:19:1;4547;4427:79;4547:3;:19;:::i;:::-;4585:14;;;:56;;-1:-1:-1;;;4585:56:1;;-1:-1:-1;;;;;18850:32:8;;;4585:56:1;;;18832:51:8;;;;18899:18;;;18892:34;;;18942:18;;;18935:34;;;4525:41:1;;-1:-1:-1;4585:14:1;;:32;;18805:18:8;;4585:56:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4667:14:1;;4704;;;4721:8;;4660:85;;-1:-1:-1;;;4660:85:1;;-1:-1:-1;;;;;4667:14:1;;;;-1:-1:-1;4660:35:1;;-1:-1:-1;4660:85:1;;4704:14;;;;4721:8;;;;;4731:13;;4660:85;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;4771:14:1;;4808;;;4764:81;;-1:-1:-1;;;4764:81:1;;-1:-1:-1;;;;;4771:14:1;;;;4764:35;;:81;;4808:14;;;;4825:6;;4833:11;;4764:81;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;4319:542;;4289:572;3083:1789;;;;;3025:2253;;;4941:20;4965:22;4994:16;;;;;;;;;-1:-1:-1;;;;;4994:16:1;-1:-1:-1;;;;;4994:32:1;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4938:90;;;;;;;;5043:16;5087:12;5070:14;5062:5;:22;;;;:::i;:::-;:37;;;;:::i;:::-;5043:56;;5114:20;5178:5;5160:15;5171:3;5160:10;:15::i;:::-;5149:26;;:8;:26;:::i;:::-;:34;;;;:::i;:::-;5137:47;;:8;:47;:::i;:::-;5206:14;;5243:8;;5199:67;;-1:-1:-1;;;5199:67:1;;5114:70;;-1:-1:-1;;;;;;5206:14:1;;;;5199:35;;:67;;5235:6;;5243:8;;;5114:70;;5199:67;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;4878:400;;;;3025:2253;2886:2399;;;;2743:2542;;;;;;;:::o;1447:174:6:-;1548:4;1609;1572:33;1593:5;;1600:4;1572:20;:33::i;:::-;:41;;1447:174;-1:-1:-1;;;;;1447:174:6:o;2392:306::-;2485:7;2528:4;2485:7;2543:118;2563:16;;;2543:118;;;2616:33;2626:12;2640:5;;2646:1;2640:8;;;;;;;:::i;:::-;;;;;;;2616:9;:33::i;:::-;2601:48;-1:-1:-1;2581:3:6;;2543:118;;;-1:-1:-1;2678:12:6;2392:306;-1:-1:-1;;;;2392:306:6:o;9186:149::-;9249:7;9280:1;9276;:5;:51;;9411:13;9505:15;;;9541:4;9534:15;;;9588:4;9572:21;;9276:51;;;9411:13;9505:15;;;9541:4;9534:15;;;9588:4;9572:21;;9284:20;9269:58;;9186:149;;;;;:::o;14:466:8:-;91:6;99;107;160:2;148:9;139:7;135:23;131:32;128:52;;;176:1;173;166:12;128:52;-1:-1:-1;;221:23:8;;;341:2;326:18;;313:32;;-1:-1:-1;444:2:8;429:18;;;416:32;;14:466;-1:-1:-1;14:466:8:o;485:173::-;553:20;;-1:-1:-1;;;;;602:31:8;;592:42;;582:70;;648:1;645;638:12;663:186;722:6;775:2;763:9;754:7;750:23;746:32;743:52;;;791:1;788;781:12;743:52;814:29;833:9;814:29;:::i;854:226::-;913:6;966:2;954:9;945:7;941:23;937:32;934:52;;;982:1;979;972:12;934:52;-1:-1:-1;1027:23:8;;854:226;-1:-1:-1;854:226:8:o;1267:127::-;1328:10;1323:3;1319:20;1316:1;1309:31;1359:4;1356:1;1349:15;1383:4;1380:1;1373:15;1399:275;1470:2;1464:9;1535:2;1516:13;;-1:-1:-1;;1512:27:8;1500:40;;1570:18;1555:34;;1591:22;;;1552:62;1549:88;;;1617:18;;:::i;:::-;1653:2;1646:22;1399:275;;-1:-1:-1;1399:275:8:o;1679:559::-;1722:5;1775:3;1768:4;1760:6;1756:17;1752:27;1742:55;;1793:1;1790;1783:12;1742:55;1833:6;1820:20;1863:18;1855:6;1852:30;1849:56;;;1885:18;;:::i;:::-;1929:59;1976:2;1953:17;;-1:-1:-1;;1949:31:8;1982:4;1945:42;1929:59;:::i;:::-;2013:6;2004:7;1997:23;2067:3;2060:4;2051:6;2043;2039:19;2035:30;2032:39;2029:59;;;2084:1;2081;2074:12;2029:59;2149:6;2142:4;2134:6;2130:17;2123:4;2114:7;2110:18;2097:59;2205:1;2176:20;;;2198:4;2172:31;2165:42;;;;2180:7;1679:559;-1:-1:-1;;;1679:559:8:o;2243:367::-;2306:8;2316:6;2370:3;2363:4;2355:6;2351:17;2347:27;2337:55;;2388:1;2385;2378:12;2337:55;-1:-1:-1;2411:20:8;;2454:18;2443:30;;2440:50;;;2486:1;2483;2476:12;2440:50;2523:4;2515:6;2511:17;2499:29;;2583:3;2576:4;2566:6;2563:1;2559:14;2551:6;2547:27;2543:38;2540:47;2537:67;;;2600:1;2597;2590:12;2537:67;2243:367;;;;;:::o;2615:1524::-;2754:6;2762;2770;2778;2831:2;2819:9;2810:7;2806:23;2802:32;2799:52;;;2847:1;2844;2837:12;2799:52;2887:9;2874:23;2920:18;2912:6;2909:30;2906:50;;;2952:1;2949;2942:12;2906:50;2975:22;;3028:4;3020:13;;3016:27;-1:-1:-1;3006:55:8;;3057:1;3054;3047:12;3006:55;3097:2;3084:16;3123:18;3115:6;3112:30;3109:56;;;3145:18;;:::i;:::-;3191:6;3188:1;3184:14;3218:30;3242:4;3238:2;3234:13;3218:30;:::i;:::-;3282:19;;;3326:4;3358:11;;;3354:22;;;3317:14;;;;3388:19;;;3385:39;;;3420:1;3417;3410:12;3385:39;3452:4;3448:2;3444:13;3433:24;;3466:305;3482:6;3477:3;3474:15;3466:305;;;3570:3;3557:17;3606:18;3593:11;3590:35;3587:55;;;3638:1;3635;3628:12;3587:55;3667:59;3718:7;3711:4;3697:11;3693:2;3689:20;3685:31;3667:59;:::i;:::-;3655:72;;-1:-1:-1;3756:4:8;3499:14;;;;3747;;;;3466:305;;;3790:5;3780:15;;;;;;;3814:40;3848:4;3837:9;3833:20;3814:40;:::i;:::-;3804:50;;3907:2;3896:9;3892:18;3879:32;3936:18;3926:8;3923:32;3920:52;;;3968:1;3965;3958:12;3920:52;4007:72;4071:7;4060:8;4049:9;4045:24;4007:72;:::i;:::-;2615:1524;;;;-1:-1:-1;4098:8:8;-1:-1:-1;;;;2615:1524:8:o;4352:677::-;4448:6;4456;4464;4472;4525:3;4513:9;4504:7;4500:23;4496:33;4493:53;;;4542:1;4539;4532:12;4493:53;4587:23;;;-1:-1:-1;4685:2:8;4670:18;;4657:32;4712:18;4701:30;;4698:50;;;4744:1;4741;4734:12;4698:50;4767;4809:7;4800:6;4789:9;4785:22;4767:50;:::i;:::-;4352:677;;4757:60;;-1:-1:-1;;;;4890:2:8;4875:18;;4862:32;;4993:2;4978:18;4965:32;;4352:677;-1:-1:-1;4352:677:8:o;5287:1084::-;5428:6;5436;5444;5452;5460;5468;5476;5529:3;5517:9;5508:7;5504:23;5500:33;5497:53;;;5546:1;5543;5536:12;5497:53;5586:9;5573:23;5619:18;5611:6;5608:30;5605:50;;;5651:1;5648;5641:12;5605:50;5674;5716:7;5707:6;5696:9;5692:22;5674:50;:::i;:::-;5664:60;;;5743:38;5777:2;5766:9;5762:18;5743:38;:::i;:::-;5733:48;-1:-1:-1;5850:2:8;5835:18;;5822:32;;-1:-1:-1;5951:2:8;5936:18;;5923:32;;-1:-1:-1;6054:3:8;6039:19;;6026:33;;-1:-1:-1;6138:3:8;6123:19;;6110:33;6168:18;6155:32;;6152:52;;;6200:1;6197;6190:12;6152:52;6239:72;6303:7;6292:8;6281:9;6277:24;6239:72;:::i;:::-;5287:1084;;;;-1:-1:-1;5287:1084:8;;-1:-1:-1;5287:1084:8;;;;6213:98;;-1:-1:-1;;;5287:1084:8:o;6750:260::-;6818:6;6826;6879:2;6867:9;6858:7;6854:23;6850:32;6847:52;;;6895:1;6892;6885:12;6847:52;6918:29;6937:9;6918:29;:::i;:::-;6908:39;;6966:38;7000:2;6989:9;6985:18;6966:38;:::i;:::-;6956:48;;6750:260;;;;;:::o;7238:346::-;7306:6;7314;7367:2;7355:9;7346:7;7342:23;7338:32;7335:52;;;7383:1;7380;7373:12;7335:52;-1:-1:-1;;7428:23:8;;;7548:2;7533:18;;;7520:32;;-1:-1:-1;7238:346:8:o;8272:118::-;8358:5;8351:13;8344:21;8337:5;8334:32;8324:60;;8380:1;8377;8370:12;8324:60;8272:118;:::o;8395:315::-;8460:6;8468;8521:2;8509:9;8500:7;8496:23;8492:32;8489:52;;;8537:1;8534;8527:12;8489:52;8560:29;8579:9;8560:29;:::i;:::-;8550:39;;8639:2;8628:9;8624:18;8611:32;8652:28;8674:5;8652:28;:::i;:::-;8699:5;8689:15;;;8395:315;;;;;:::o;9064:356::-;9266:2;9248:21;;;9285:18;;;9278:30;9344:34;9339:2;9324:18;;9317:62;9411:2;9396:18;;9064:356::o;9425:127::-;9486:10;9481:3;9477:20;9474:1;9467:31;9517:4;9514:1;9507:15;9541:4;9538:1;9531:15;9557:289;9599:3;9637:5;9631:12;9664:6;9659:3;9652:19;9720:6;9713:4;9706:5;9702:16;9695:4;9690:3;9686:14;9680:47;9772:1;9765:4;9756:6;9751:3;9747:16;9743:27;9736:38;9835:4;9828:2;9824:7;9819:2;9811:6;9807:15;9803:29;9798:3;9794:39;9790:50;9783:57;;;9557:289;;;;:::o;9851:220::-;10000:2;9989:9;9982:21;9963:4;10020:45;10061:2;10050:9;10046:18;10038:6;10020:45;:::i;10076:699::-;10179:6;10187;10195;10203;10211;10264:3;10252:9;10243:7;10239:23;10235:33;10232:53;;;10281:1;10278;10271:12;10232:53;10326:16;;10432:2;10417:18;;10411:25;10528:2;10513:18;;10507:25;10624:2;10609:18;;10603:25;10699:3;10684:19;;10678:26;10326:16;;-1:-1:-1;10411:25:8;;-1:-1:-1;10507:25:8;-1:-1:-1;10603:25:8;-1:-1:-1;10713:30:8;10678:26;10713:30;:::i;:::-;10762:7;10752:17;;;10076:699;;;;;;;;:::o;10780:684::-;10886:6;10894;10902;10910;10918;10971:3;10959:9;10950:7;10946:23;10942:33;10939:53;;;10988:1;10985;10978:12;10939:53;-1:-1:-1;;11033:16:8;;11139:2;11124:18;;11118:25;11235:2;11220:18;;11214:25;11331:2;11316:18;;11310:25;11427:3;11412:19;;;11406:26;11033:16;;11118:25;;-1:-1:-1;11214:25:8;11310;-1:-1:-1;11406:26:8;;-1:-1:-1;10780:684:8;-1:-1:-1;10780:684:8:o;11469:230::-;11539:6;11592:2;11580:9;11571:7;11567:23;11563:32;11560:52;;;11608:1;11605;11598:12;11560:52;-1:-1:-1;11653:16:8;;11469:230;-1:-1:-1;11469:230:8:o;11704:127::-;11765:10;11760:3;11756:20;11753:1;11746:31;11796:4;11793:1;11786:15;11820:4;11817:1;11810:15;11836:168;11909:9;;;11940;;11957:15;;;11951:22;;11937:37;11927:71;;11978:18;;:::i;12009:217::-;12049:1;12075;12065:132;;12119:10;12114:3;12110:20;12107:1;12100:31;12154:4;12151:1;12144:15;12182:4;12179:1;12172:15;12065:132;-1:-1:-1;12211:9:8;;12009:217::o;12231:128::-;12298:9;;;12319:11;;;12316:37;;;12333:18;;:::i;12364:798::-;12479:6;12487;12495;12503;12511;12519;12572:3;12560:9;12551:7;12547:23;12543:33;12540:53;;;12589:1;12586;12579:12;12540:53;-1:-1:-1;;12634:16:8;;12740:2;12725:18;;12719:25;12836:2;12821:18;;12815:25;12932:2;12917:18;;12911:25;13028:3;13013:19;;13007:26;13125:3;13110:19;;;13104:26;12634:16;;12719:25;;-1:-1:-1;12815:25:8;;12911;;-1:-1:-1;13007:26:8;-1:-1:-1;13104:26:8;;-1:-1:-1;12364:798:8;-1:-1:-1;12364:798:8:o;13167:125::-;13232:9;;;13253:10;;;13250:36;;;13266:18;;:::i;13634:245::-;13701:6;13754:2;13742:9;13733:7;13729:23;13725:32;13722:52;;;13770:1;13767;13760:12;13722:52;13802:9;13796:16;13821:28;13843:5;13821:28;:::i;:::-;13868:5;13634:245;-1:-1:-1;;;13634:245:8:o;15286:317::-;15463:2;15452:9;15445:21;15426:4;15483:45;15524:2;15513:9;15509:18;15501:6;15483:45;:::i;:::-;15475:53;;15593:1;15589;15584:3;15580:11;15576:19;15568:6;15564:32;15559:2;15548:9;15544:18;15537:60;15286:317;;;;;:::o;18980:371::-;-1:-1:-1;;;;;19200:32:8;;;19182:51;;19269:32;;;;19264:2;19249:18;;19242:60;19333:2;19318:18;;19311:34;;;;19170:2;19155:18;;18980:371::o
Swarm Source
ipfs://b99ee352cd908149ad986c45c9d47209c55a05a4a1743779319827ca7340f9cd
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.