// 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 Address {
/**
* @dev Returns true if `account` is a contract.
*
* [IMPORTANT]
* ====
* It is unsafe to assume that an address for which this function returns
* false is an externally-owned account (EOA) and not a contract.
*
* Among others, `isContract` will return false for the following
* types of addresses:
*
* - an externally-owned account
* - a contract in construction
* - an address where a contract will be created
* - an address where a contract lived, but was destroyed
* ====
*
* [IMPORTANT]
* ====
* You shouldn't rely on `isContract` to protect against flash loan attacks!
*
* Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
* like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
* constructor.
* ====
*/
function isContract(address account) internal view returns (bool) {
// This method relies on extcodesize/address.code.length, which returns 0
// for contracts in construction, since the code is only stored at the end
// of the constructor execution.
return account.code.length > 0;
}
/**
* @dev Replacement for Solidity's `transfer`: sends `amount` wei to
* `recipient`, forwarding all available gas and reverting on errors.
*
* https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
* of certain opcodes, possibly making contracts go over the 2300 gas limit
* imposed by `transfer`, making them unable to receive funds via
* `transfer`. {sendValue} removes this limitation.
*
* https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
*
* IMPORTANT: because control is transferred to `recipient`, care must be
* taken to not create reentrancy vulnerabilities. Consider using
* {ReentrancyGuard} or the
* https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
*/
function sendValue(address payable recipient, uint256 amount) internal {
require(address(this).balance >= amount, "Address: insufficient balance");
(bool success, ) = recipient.call{value: amount}("");
require(success, "Address: unable to send value, recipient may have reverted");
}
/**
* @dev Performs a Solidity function call using a low level `call`. A
* plain `call` is an unsafe replacement for a function call: use this
* function instead.
*
* If `target` reverts with a revert reason, it is bubbled up by this
* function (like regular Solidity function calls).
*
* Returns the raw returned data. To convert to the expected return value,
* use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
*
* Requirements:
*
* - `target` must be a contract.
* - calling `target` with `data` must not revert.
*
* _Available since v3.1._
*/
function functionCall(address target, bytes memory data) internal returns (bytes memory) {
return functionCall(target, data, "Address: low-level call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
* `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
return functionCallWithValue(target, data, 0, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but also transferring `value` wei to `target`.
*
* Requirements:
*
* - the calling contract must have an ETH balance of at least `value`.
* - the called Solidity function must be `payable`.
*
* _Available since v3.1._
*/
function functionCallWithValue(
address target,
bytes memory data,
uint256 value
) internal returns (bytes memory) {
return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
}
/**
* @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
* with `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCallWithValue(
address target,
bytes memory data,
uint256 value,
string memory errorMessage
) internal returns (bytes memory) {
require(address(this).balance >= value, "Address: insufficient balance for call");
require(isContract(target), "Address: call to non-contract");
(bool success, bytes memory returndata) = target.call{value: value}(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
return functionStaticCall(target, data, "Address: low-level static call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(
address target,
bytes memory data,
string memory errorMessage
) internal view returns (bytes memory) {
require(isContract(target), "Address: static call to non-contract");
(bool success, bytes memory returndata) = target.staticcall(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
return functionDelegateCall(target, data, "Address: low-level delegate call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
require(isContract(target), "Address: delegate call to non-contract");
(bool success, bytes memory returndata) = target.delegatecall(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
* revert reason using the provided one.
*
* _Available since v4.3._
*/
function verifyCallResult(
bool success,
bytes memory returndata,
string memory errorMessage
) internal pure returns (bytes memory) {
if (success) {
return returndata;
} else {
// Look for revert reason and bubble it up if present
if (returndata.length > 0) {
// The easiest way to bubble the revert reason is using memory via assembly
/// @solidity memory-safe-assembly
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert(errorMessage);
}
}
}
}
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
/// @author: manifold.xyz
import "@openzeppelin/contracts/proxy/Proxy.sol";
import "@openzeppelin/contracts/utils/Address.sol";
import "@openzeppelin/contracts/utils/StorageSlot.sol";
contract ERC721Creator is Proxy {
constructor(string memory name, string memory symbol) {
assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256("eip1967.proxy.implementation")) - 1));
StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = 0xe4E4003afE3765Aca8149a82fc064C0b125B9e5a;
Address.functionDelegateCall(
0xe4E4003afE3765Aca8149a82fc064C0b125B9e5a,
abi.encodeWithSignature("initialize(string,string)", name, symbol)
);
}
/**
* @dev Storage slot with the address of the current implementation.
* This is the keccak-256 hash of "eip1967.proxy.implementation" subtracted by 1, and is
* validated in the constructor.
*/
bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;
/**
* @dev Returns the current implementation address.
*/
function implementation() public view returns (address) {
return _implementation();
}
function _implementation() internal override view returns (address) {
return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;
}
}
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
/// @title: Editions
/// @author: manifold.xyz
import "./ERC721Creator.sol";
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// //
// //
// ;S8. .S@88S%S8;t:;@:;;X@; ttXS;;;:.:::.:.:.::::::::::tSS;:%;::::::::::;;::::..::.:.. %%...... . . ..: S8@.;Xt. %8:8: //
// X8t@:8t: 8S%8%X@8SX%.;; X@%%; :t8%S:..........::.:.:.:.:t%@%;;:.::::::::.:........... ..::;......::t;:tX8 %X8S8XXSXt @88 //
// 88.8.S;8; 8; 88SXXSX8..;:%;: ;St::@..:.::....:.:.::::::.::;::.:::.::::........:;. ... .....;;.%S8@S%%:SS: ;%:;@S@S@.8 //
// @88t:@8@X;%X8SXX@ %8 8t ;t% : S@Stt:S .:.:..:.:.:.....:.:..::....::.:.::.:.:....::: ... ;tttS88.%.;;%%@. 88t%:8X ;@.t:%@ //
// t. X@S88SStt X@SS8X88S@@8@. %SX%: t: :.:tXXt..:......:.:..::..:.:.::..:::::. :...:...t8@8@@S88S@S %X ;t;;888@;S:.8 8X. //
// @S.:SX%:XS ..:8 888S@: @ @X88888@t .X;::X%XS8..::......................:.::::..:..:. @SX8@S@@X%:.;t% . :: 88X .;S. 8 //
// : 8:@X8@ X t8: X8St@ t;: 888S; @ X.; t @@Xtt.::::::.::::.::.::...;;;::...::....... 8@8%8@8%t.: %t; S% 88.X .%8;8.8 //
// S8XX :. @S% 888 XSX%SX@ 8 .X8.S t@t8.;S;8StX8888SX@XSt888@8@XXS@888888888@SX%S%;.;X888 8:;8.::.:;::.... .:t //
// S:%8;t8X S8t8@888X 888 .8X:.S88@X%t%@88X8S@8X888888t88%S88S%S:.: ;888888@8S%;@X8%ttXS 8:;8 8;8S8@S8 8 ::8 88::;@ 8 ::.8 //
// . %:8St88@ @8 @S %88X: 8%8::.8;@;tS8XtSX8888X888X8@X@8@@@S ;%8%88S88@888@@t888tt%.8@; 8 .88:; @.8 8. 8%;. S;%8.:;; @ //
// S88888 tXX;;tt;;t;;:@:.;% ;t8%S@8;8 8@888@X888XX8 t8888:S@S8: 8:8X 8tX;8888S8;8;. 888 8.; 8;88 .% @;%.888 t:.X %@8.@ 8 //
// : 8 @8S::;t%;::::;S8%8.8:. XS8%8%@%88t8@8X888888tt. @@S; ;;;;;8tSt8: @ X88@888@8X88S. S8888888 %8 t888@8.XX:@X8.;;.%S 8 //
// S8X@8:8:@SSS.SSXt8S888Xt%tXS8. .X@X%8SX8S8X8XX@t .88XtX 8888@SX8 8%S;t%t 888@tX; 8t: 88@8XS8%.; 8S88 :8tt88%S:.8 .8 //
// 8X8 S%.88%;;8tS8tt%SS8X.S XXX8X8S8:;t;88X;S88S@88.:888@888@S8 @S :8.: ..88. @@88888 .;SSS X 8%t 8XS X.:t@:t:t:t8 .@ //
// X X8 X tt88t@:X%St%S%8@%8XS8%X%8 8X8S S@8888X8S8888@S8@X8888888 88888 X888 S8 88;XXt88:.: @.8tXttSX88S:.;tX %%t;% 8 8X //
// 8.8@8 @@.X8S8t8;X@XX8%@S;;8:88t;@%XSS :S88;t8X@.@88S88X 8888t;8: 88@: :;.88S .@ 8 888.8 8Xt888 ;;S% ;;8; :% @8@8 ;8 S8 8 //
// : 8 :.XtX88@.X%8X8S .8 8 X88%tt;8SS X8%Xt8:. S88;%88:8t X@.:8 %%.88888:t88%t 8::@ ;X8t8%8 8888 ;@.%t%S .%8@ 8.%8% //
// %t8 X S8SS88. X 8888 88 8X;S;t;8%8@@8@S8;;.;.8; 88:%S8888;; XS88X8X;@8 S@S8X.@ S :X8 .8 %.8S SSS; 8 @SS @t8@ 8X8% //
// X 8:@SS@8 888 X 8% 8888;X@ S.;;%@8S8888.88 8%8. 8%t8; S8:88 88:8. X8 88888XS8888%:8 t@88888:%X @ 8 8 8 :: //
// 8X: 8Xt;S88@S888 88%;8 8 8888 8:% t8.:S88888;.8t888 t;t888888 t XX8 :8:8 ;;:tXS%%ttt@%88%. 8t8 ttX .@8 X .:8..8.S //
// 8;;;@X@8 88888 88@ t 88S 8:SX8 88888@%88888:8X@S8X%@ tX8t8S888:8t8tt8888t888888tS8:X8:; @ 8 : : 8 88.;8::8:;8 //
// 8 X8 X.:X@S 8 8888%SX88 ;;8@%SSX.t%X8S 8:SX8S 8t88%8S. .S8888%88t8S8t 8S8X888888%8 88S8tt 8: 8@.8X8 88.;t8t8.8 8S //
// @ t@@8t8:tS88@8XSXX X ;8@ 88;X8;t8ttXX S XX%S;SS88SS8::tt;SX@SX88% 8%tt8;888888@88@tS8;88X8.t:X888%@ 8888%%%8;t8:8.8S //
// X@88.:t@8SS @ SSS %8S8S::8SX@:X888 8X% X8X .888:8:%;;tt%88@X88.% S88S88%X8@@88@88t 888888;t@%@88t8 88X%SX8%S8;8;8S. //
// ;;.S8;t.t;:8t; 8 t@t8888S88 8@.8 ;8@8 8 88@ S%88S.t8t8S;.;;@@88.8@S8;;88%8%8%X8@@8888X88:88%%88S8X%.:%:8SS8XXX8t8.S8:8@ //
// X8S8%%%. X8X8 8X88SS@8@88; %8X8 888 88@8 88888 S@@t.t: tt;%88@@8t%S:S@;;X@%SX@X88S;%8%8%8888%8 X;XS88tX@@88SXX%8:Xt@8 //
// 88%.8.X: 8.8@SX8@XSS88S%t88%XSS8t8888@888:8;8 8@88SS8X;:;;:. ..;@ Xt;:.. ;tt%X8Xt;t;t88888S8@8XSt8%Xt@88::@X8S8.%8XtS8 //
// t88X88@;88@X888:8XSS@888S8@XX@tS%8@.88%8.@88X8888%888SS%X SSX;X:: S %S: 8@:. :%tttt%%t8St88@888;@8%8S;X8%%8:8.SS@@@8;%8 //
// X@@8@@888X@88888%XSX88S8%88X@ t@t;% 8t88@8%XSX8 88S88888%% 8SX8S%%8; 8.:.88S @%%S%S@X8X%8S8;; 8:S@X8:8X. ;8;8t@8S8S% 8 //
// 8 ;:@8@8 S ;8XX@@88t%S8X8%%X%8 S;8 88888S88;888@ XX;@;%%S8X@.%8t8888%888 X ;X%%tS8S8888%:t8S8%8@8.8S8 8S::S8%8%8%8 % //
// @ 8::8:. @S888t@8;%8S%8t8%;;:t;X888 8%8XX X SStSXXS8%S888%%S.88:8@888888:8 8 ::@t%%t@:.; .8t8.%8SX%8@@X@@:@t8XXtS.:88X; //
// t8:8t8 8 @888X88;.%8 8S;t%S%SX;8%8t8 S@@S88X8%t :.8@ 8888888X88888X88@%88 8 : %8X%@8 ;;.;:@X@@@;X%:.;:S.XX:8St%;88%;8;% //
// 8@ 8tX;X%S%S8888%.88.888t8SS@X@88@:@8;8 %:8tX%@;888;@@@SS%tS:;X88X88888888S@XS88t8SX 88XXS@t@X8S8@@;tS tt:X8@ .8X;tSXXX //
// ;%S:;@8:tt% S%.888:8X@X8 8@%%@SX@%SX8%t. SX@X88t%;XXt.;:;@88888 8SS%%SSSS;;S .8;8 :: ;8;:.8XXS8 @:.t8t88X;S88@X88 ..S8 //
// :@ttX:X@S%;S8X;@SX8888888X8%8t@8%X8X 8.8:X;t:8; ;8@888S%XX88@ 88 88Xt;;tXS@88 8 ;;: .8;88S;t @@@% ;.8S: Xt ;; %XX; :88 //
// %@8: ;:t8%S8%tS8X8%@8S8@@8.SXtSX8XXS::tX8@S8;888Xt X88;8@@ 88 .8 88t8 8X 8 8:8888X.888888888@88:88888@888@8X8X 8 //
// S%@@8%t%;S88X.8 S88@t; %@tS%@;%%t888X8@. XS8@@8@ %X8 8 t;.t888 8 8 @ 8 888 8.8 88. .:.%%%%%S:%t;.8 ;SX8XStXttXX.:;8 //
// S;8: ;@8;8@888;88%@@8X8%88XX.SS%S88X88.%X 8. @S@ 888t88t ::88 888 X 8 8 8 8tS88@8@8888@8@@%.%S%%%: S:SS //
// 8888S@S8;8:X8;%Xt;.;88% :@X@8S@8S8@@@ :@@.8;8 S8 @ @8X 88 88 8S888 88 S@X 88 ;8S;;.:t;:....:;;;t;tt;::: tX:t; //
// 8X88S8:8X8X888 .tS88 %;%. 888S8.SXX@XS:8@8; 88@@t S ;: 8 :88 S888X @8X@8 888@X88888t%8 .: . .:::;t%ttt;t;;;;;;:SX.;S% //
// 88@S8:88.888 8t888%X@XS8St8S.S:@:S 8.8S; SX::tt 8 8 ; SX S % 8 8 8 ;8:..;;;;;;:t@8:88X;;;;;:; t;. @ //
// 88X.%8t.@8SStX8%8 XtXX8888X;StX.S;8@X. 8 @: X88X @88 SX8X88 S8 :: .8 t8 X%:.t;t.88SSXX:8;S;S;;;:;:SSt.8@ //
// 8X8S @t8X%X.::.@@t;X@8S8tXS88@t8 S8S8.:X88@88%8:%tS8888XS8@;8S88888 8 : .;8.. 88@Xt.:%t:%%88. 88t @t8tt;;t %%S%: //
// 888 88888 S@X@8%8t@:8X.8%@%;X 8. S.;88.8@ @X:8X8X@88XSX8X@%88@8@@@%Xt@ ; .. ..8.: 8S %%..St8@SSXt8888@ 8SX%t;t:%%SX8X //
// @ X: @ @888XS S :S8888 8 8X .t.Xt;. % 8.S8888888888S88888X88@X@@8 : .;;;.;;:; t 888 t: tX8S:Xt SSX ;88%888S%..;SS88 //
// ;8 ;t 8 X88888 X; t8 8@88 8SX:%t%t.t :::@ .8888X8888888XX8@88888@@: 88 : 8.t t 88 S8; %@%%S 8888S;88:%8t%;8tX%8S //
// .;t: SX @XX8 ;888:.8 X88X88@8 ;Xt%%%.:t8X@888888@8888@S8X888SX8@8@@ t @ %888% :%X888 88 8SX;888SS8S;8%Xt.% //
// St% .%% 88 @88.X8888@88 ;%t.:: %8S@@88X8@8@8888888@@88SX8@@S8 X 88 @88 8 @% 8@.;X@8:t S888 8 8t:8888%%SSS%8X //
// 8%: : : 8 X8@88.8 88S @ 8 X8 8. :.. ;X888888X8;88XS888@@88X8;@888888S8 S8888:88;88%:%888%888S888S 8 888X %;S8@X8@ //
// .S%. 88 X X88888 888 8 88@ X%;t.;@88@8888@8@88S8X8%8 8@8X88;88@8X8@@8S@ 8@88888.;S :tX8 X88 888S88@%88;% 8@X8 //
// . 8 888 @ @S%X 8SX .88%%8S 888 S S tt. @8@88X888X@X@X8@8X@@88@@88X8t88888888X8 8%8%@8;%S%8@8XS 8XSX8X8.SXS8%t% @8@S8 //
// :8%8% 88 @ S 88888888 888888888888% 8 @ @@@888888%X888X8t8888888888t t;S:88888X888:88:;X 8.X8;8X 8X8SS88 ;X888SX:@:S //
// SS;% @88 S8 88888888888%8888888888@X88t8888S88888888@XX8@88888888@888@8S8;88@88S X888@S8; :8888X%;888t88@%tXX888@;S;X8t //
// t8t% 888@ 8S%88888S@88X88 888888888X8 8@888XXS8@@@8%8@S888888.8888;t88.S 8S8@8X@@ 888;88S8.888888@888888%888@S88X8t88 S //
// :XS 88 S88X8@8888%88S8888888888% X@SS 8%t@@SXX@888t8888;88S%888888%X8 88X88@ 8S8X;t:%@888%:.88 ::%SXS88X88@888@; //
// 88SS :8X; S 8 8@S88t%@88S888888888 88888 @88888@88@@@88888@@@@88@;88@8888888 8 8 :8;.8.888:@:@X88@88888@XX@8888;%%8 t //
// t 88 888 S%%S8X88 X S@88@X888888888S:88 88S8888S@88S88SS88S8888%@8@X.888@ 8. 8 @8% .X8X888@8X888@888888888888%8S:XS //
// @tS88 . S@8SX@:SSSS %SS@88S8 88888@;8 88. 8888%8X88@S8Xtt @8 XS%8 S::88888 ;S88X 88;%XX8@88@@8@8@X8@S88XS88888.88@.: //
// ;@XX8 8@8%88@X8888t8%S;8X@@t8S8888 8%;8t888%888888@8 S:S;X.:t@S X ;S @ %t88t@@8888.8888888S88888X88@S88@88888888@88% //
// X88 8SS@S@X:8 88SX8X@88%%8;@8888888%@SS ;888S88888%@ .%8%@ @; 8 %88 8 S8 8 8:S8888XX88888S@S@88@888888@XS88@SX8 //
// %8X 8: 8S8X 88888%888S%8%8S8X88 88XS 8@8XS8XX8888@8 X%8 888 8888@ 8X 8 S%8 .888X@8X888888;S@88;t:8888S88888 ;8@.8 //
// ; .8 .8 8S 88 888S@@XS888888888 88S8t8@8@8;8S88@X8t.S@@t.888.8.8S;888%8@X8@% % :t8888 XX@8888X8X 8X 8;8@88 X 888@% //
// ;X 888.8888@@SSX888X SSS 8XXS8@888888SX@.. X:X%88X8X;8X ;888888888X888X88X8%8.;.8888X;8X@X888@8S@@ 888 @;8S:88S888@88 //
// X 8 88:X8 :%X888XXS;.%X8SS8888@8XSS8@@8tS8%S8@X8.S88;S%X@8XS88X8X8888@X88S@@88Xt8888XX8SX888888%8888@S:8@8;8 @ 88S88 //
// 8St ;S88888 % @S@X@S@%888t %X8@X@88%@@S88X8 8%tX8%88.8888SS8888X@SS%S8@88S8888 St 8;@888tXS@ 8%%@ X8 88X8X88888S8888X //
// 8t @S8%.8t ..%X@X@;;8;X@8@8 @%88S:@8@%@@88@%;8 S8888 8X888%t@@%SSSXXX8888t@X8S8S88888S tS88.X;@:@; .S88SS 8S888XXS..8X //
// S% 8:8888@S%t8@%@@Xt8S88@888@@888@ @ ;SX8; S88 8XSX8 8;8@@X%XX%S%SSXX@@XX@8 ;XS;t888 @ .;t 8@8St8 8S.8S888X%@88X@ S @X //
// %% @ @8%8S@@8Xt@:%%:XXX@X@.X8@%88X%8;XX @8 :S8;@S8888@88t8XX88@X%X@S8S@SXX@@S :St %@8S8@8%@:8@8X8@8%XS8888@X88888X8@:8X% //
// tt%. 8SX .S8;88@@X;.@%@S8 : 8; %:%% :S@88;t%8;S% .S8%8 :@@88888SXS8S@SX88888t@t;; @:@;88X88888S@@888@8ttX888888XS8X8t:@ //
// .:.8888S@@S :%%.;: % ;X88;X8; %tS: ;ttt@%:@8@8 S8@% t .8S888888S88@@S88888888% 8:88S:S%X8SS8888X888@88@88@8 ;8@S8888888 //
// t8888;S%S8@8tt%t;t;%X8:.88@ @@8S88S @8 %X S8 8;8 X %8%88@88@8X@@S888@88888t 88X8:8@8 :88XS88@88S@@%XX8@8888@88@88X88 //
// t8.:@S@S@8:888S;;t:@@@t@888%88 88SS888@SS8X 8 8X.8t8 8 S@888888@X8888888@888@ 8t%@:X8X%88t88X@88S8888@8.X888X@X88888:8@ //
// . 8S8S8X8X;8X8%t;tt8 @ 888S8 88888888888S @8 88. 8:S @@8S8SX88888888S8X888@8X88:.;8888@S@X8S@S8X8@88S@88888t@S8S8888S //
// 8%8t8@@8%@ % X;t;S %@ 8.888888 XXX@88888888St:. 888888t8888S88@8X88S888t88S X ..X ;888 @S8X@@88@@888@%8888@S8X888 @@ S //
// :S8tX88S8t8XX88S;;St8S%8 88@S :t;;.::...:;%@ @8S8SX:;S8@SX8888888888SX88%@888@@ .8 8:8888 8S8888@XS@X888@@X88@8.%%XS8 88 //
// : t@%8X@SX%;888::;t88X:t... .;::...;::..:::%8@SX... :8t8XX8888@88;8888S%X8XX88 8 8X88%888%8@88S88888@8@@88888888SS88X 8 //
// 8:.@@888ttX%X;8;88@. . . . ...;:....::%XXX S S;X8 8%8@8888S8888888@8@8X8S%:88 888 @8t X@.S88S888S88%S88888;8%XX@. 8 //
// :: t8X8%X;t%;XSS8Xtt:. . . . .....: .:;:%X% 8 ;@@ SSS8888X8@8888888888%8@88 @ .8888888% @8;%@@@888@8@X@S8 8tX;S888@ //
// .;8%8@;%8tX8%8;S8%%S%t%;t;;t;tt%S%%%%tt;:8;8X; 88 : ;;S@88888888t88X8@:8XX8; 888 .8@%.@ %% 8S8@X88S@@@88X8SX88@8S8;8S //
// ;%@8@t8t@tS@SSt@8t:t%%%%%%%%%%t%t%t%%%%%St888; 8@:t8 %;S88888888@X@88888%@S8% . @8X8888 888%88t888%888X88%8@8888% 8:8 //
// :8 S;.SttX8% .X@%tS@@%%%%%%%tt%ttt%%%%%%StXt %88 8;St ;%S@8X@X8888@8@88XSSX8@X888888X:888 XX88@X88%88@8888@8S88@8X X: //
// .:tS % ; 8S:%tXt8@88;S; 8t;tt%t;t;t;ttS%SSt88;888%SX.X@SSX@@@8@8@%S88888@@S@8.X 8 88.888S8S88 :8@88XX88X8% 8 88S 88S:8 //
// XS88.@ 8@8% .;%t8888@8 8t :X%tt;;;t;;ttX%XS8 .tSXSX S%@ XS8@88888%@XX888X8X88@% 888:8%88 88 888 @88X%8%8S8:@888SS 8S88t //
// .@% .%X8S88S ...X%t88S88 t 888X%;;ttt%XXX@tXS : tX8%; 8X88@@@8S@@88S@88S8Xt@%888t8@8@88888888@X ;@8.S888888S8@@888X8:8 //
// XS; X; 88X t@S..:888X88S 8.@@88.%XS%:t%XX@@8 SX : : %@ t%t tS 8@@@:.88SX@@ :;X8 8t88.S8888 88888S8@ 8 SX.@ ; S8 8S88 //
// XXS%88 8S8 8:;.;:;t;:t;.SS@@St8X88 @;%SXX8 t8.8:%:.; X88S 8%.XS888 88XS. .%8: % 8 8888:8888S8X.@8X8SX88S8;X8.S 888.t@% //
// S8@ ..;8 8 @ SX:@SS%%%ttt%@X%; 8S :.St%SXX@ @t8%XX 8.;S88@@@t.:@:: X:8@X; tS.. .Xt.%XX 88 88888X 88S 88S88@8S 8888 t%. //
// ;t;XS 8.@88X88@%S%;%SSS8@S88@%@888%@@@@X8@ S%8SX % @ t8X:88;S t 8.S8.S %S: :.@888%8;;@888 88XS8@8S8S88888 888 8 X%X //
// :@88X8@S8;S@88SXX8 ::: .::. ;:..:;%8t8S@% S:8%888%.S SS%X:@@8%@8 8 88tX;SttX.8:8 888 8.X888@X8.;@%StX%8SSX 88SS@88.X //
// ;;8.88X8S8X@S888SX:. S%t% ;S@;;8@88X888@8t;;88S8@ 8:@@ % . @ @ 88:8S.@S ;S8%%%@t%8888t8888 8 S;t@@@@@@Xt8@8@%SSS8S:S //
// t8:.S@:;S ;%S8 . :X@88@8S%: SS X8 ..@888tt@8X 8%;8%@ 888XX;@St.XS S ; @S:8 %:8t;:888%:888%8X8S St8t:88S:S@88%8@@:88S //
// 8@@ 8S;8X8%tX88.S@8@S8X8.tX8%8.@X888@@;SS.@SXX @t8S88XX:88 X@; 8 8 8@;t 8X Xt88 %t8tX8S%:S8 % 8t8X@S8%X@SXX:S@@ .@ //
// 8t:: XX.%8X;t@;@X%@XS@@SXXt:S88 %:;8:;t@.S88 @%8:.8@ ; . t8X8%.:tS t888X %8%tX8. :%8S.X@SXSS8%8;%8St8S8 SS@XS88@:X@ //
// S88@;S%@8SSX@@:;SS. .XS88:t8X@SS8SS@ %X:t%St:XS X % @:.:%888%.tX: .8X.8:8tS@XS.88S%tS@;88S SSS8 . ; tX%S@XX: .:@ X //
// %8X@%: @;88%.X 88t ;;t8 8@ @8X 8X8 @X:t @ 8 SS;@S@ t:@@t ;S%t%S8S .t8X 88;S 8@8 ;@t@88SX; :8;:;%8;St88 ;.; @t@;tSS //
// //
// //
// //
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
contract FEMALE is ERC721Creator {
constructor() ERC721Creator("Editions", "FEMALE") {}
}
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.6.0) (proxy/Proxy.sol)
pragma solidity ^0.8.0;
/**
* @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM
* instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to
* be specified by overriding the virtual {_implementation} function.
*
* Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a
* different contract through the {_delegate} function.
*
* The success and return data of the delegated call will be returned back to the caller of the proxy.
*/
abstract contract Proxy {
/**
* @dev Delegates the current call to `implementation`.
*
* This function does not return to its internal call site, it will return directly to the external caller.
*/
function _delegate(address implementation) internal virtual {
assembly {
// Copy msg.data. We take full control of memory in this inline assembly
// block because it will not return to Solidity code. We overwrite the
// Solidity scratch pad at memory position 0.
calldatacopy(0, 0, calldatasize())
// Call the implementation.
// out and outsize are 0 because we don't know the size yet.
let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)
// Copy the returned data.
returndatacopy(0, 0, returndatasize())
switch result
// delegatecall returns 0 on error.
case 0 {
revert(0, returndatasize())
}
default {
return(0, returndatasize())
}
}
}
/**
* @dev This is a virtual function that should be overridden so it returns the address to which the fallback function
* and {_fallback} should delegate.
*/
function _implementation() internal view virtual returns (address);
/**
* @dev Delegates the current call to the address returned by `_implementation()`.
*
* This function does not return to its internal call site, it will return directly to the external caller.
*/
function _fallback() internal virtual {
_beforeFallback();
_delegate(_implementation());
}
/**
* @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other
* function in the contract matches the call data.
*/
fallback() external payable virtual {
_fallback();
}
/**
* @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data
* is empty.
*/
receive() external payable virtual {
_fallback();
}
/**
* @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`
* call, or as part of the Solidity `fallback` or `receive` functions.
*
* If overridden should call `super._beforeFallback()`.
*/
function _beforeFallback() internal virtual {}
}
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (utils/StorageSlot.sol)
pragma solidity ^0.8.0;
/**
* @dev Library for reading and writing primitive types to specific storage slots.
*
* Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.
* This library helps with reading and writing to such slots without the need for inline assembly.
*
* The functions in this library return Slot structs that contain a `value` member that can be used to read or write.
*
* Example usage to set ERC1967 implementation slot:
* ```
* contract ERC1967 {
* bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;
*
* function _getImplementation() internal view returns (address) {
* return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;
* }
*
* function _setImplementation(address newImplementation) internal {
* require(Address.isContract(newImplementation), "ERC1967: new implementation is not a contract");
* StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;
* }
* }
* ```
*
* _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._
*/
library StorageSlot {
struct AddressSlot {
address value;
}
struct BooleanSlot {
bool value;
}
struct Bytes32Slot {
bytes32 value;
}
struct Uint256Slot {
uint256 value;
}
/**
* @dev Returns an `AddressSlot` with member `value` located at `slot`.
*/
function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {
/// @solidity memory-safe-assembly
assembly {
r.slot := slot
}
}
/**
* @dev Returns an `BooleanSlot` with member `value` located at `slot`.
*/
function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {
/// @solidity memory-safe-assembly
assembly {
r.slot := slot
}
}
/**
* @dev Returns an `Bytes32Slot` with member `value` located at `slot`.
*/
function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {
/// @solidity memory-safe-assembly
assembly {
r.slot := slot
}
}
/**
* @dev Returns an `Uint256Slot` with member `value` located at `slot`.
*/
function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {
/// @solidity memory-safe-assembly
assembly {
r.slot := slot
}
}
}
{
"compilationTarget": {
"contracts/FEMALE.sol": "FEMALE"
},
"evmVersion": "london",
"libraries": {},
"metadata": {
"bytecodeHash": "ipfs"
},
"optimizer": {
"enabled": true,
"runs": 300
},
"remappings": [
":@openzeppelin/=node_modules/@openzeppelin/"
]
}
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"implementation","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]