FoksiSep 22, 2022
Elixir bottle contract

// SPDX-License-Identifier: Unlicense
// Creator: 0xVeryBased

// ⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛
// ⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛//============\\⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛//============\\⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛
// ⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛\\============//⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛\\============//⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛
// ⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛\\ ( ( (  //⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛\\ ( ( (  //⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛
// ⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛||| ) ) ) |||⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛||| ) ) ) |||⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛
// ⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛||| ( ( ( |||⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛||| ( ( ( |||⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛
// ⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛||| ) ) ) |||⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛||| ) ) ) |||⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛
// ⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛||| ( ( ( |||⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛||| ( ( ( |||⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛
// ⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛||| ) ) ) |||⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛||| ) ) ) |||⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛
// ⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛||| ≈≈≈≈≈≈ |||⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛||| ≈≈≈≈≈≈ |||⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛
// ⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛||| ≈≈≈≈≈≈ |||⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛||| ≈≈≈≈≈≈ |||⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛
// ⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛/// ≈≈≈≈≈≈≈≈ \\\⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛||========== ≈≈≈≈≈≈≈≈ ==========||⊛⊛⊛⊛
// ⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛/// ≈≈≈≈≈≈≈≈≈≈ \\\⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛|| ≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈ ||⊛⊛⊛⊛
// ⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛/// ≈≈≈≈≈≈≈≈≈≈≈≈ \\\⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛|| ≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈ ||⊛⊛⊛⊛
// ⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛/// ≈≈≈≈≈≈≈≈≈≈≈≈≈≈ \\\⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛|| ≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈ ||⊛⊛⊛⊛
// ⊛⊛⊛⊛⊛⊛⊛⊛⊛/// ≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈ \\\⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛|| ≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈ ||⊛⊛⊛⊛
// ⊛⊛⊛⊛⊛⊛⊛⊛/// ≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈ \\\⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛|| ≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈ ||⊛⊛⊛⊛
// ⊛⊛⊛⊛⊛⊛⊛/// ≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈ \\\⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛|| ≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈ ||⊛⊛⊛⊛
// ⊛⊛⊛⊛⊛⊛/// ≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈ \\\⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛|| ≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈ ||⊛⊛⊛⊛
// ⊛⊛⊛⊛⊛/// ≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈ \\\⊛⊛⊛⊛⊛⊛⊛⊛⊛|| ≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈ ||⊛⊛⊛⊛
// ⊛⊛⊛⊛/// ≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈ \\\⊛⊛⊛⊛⊛⊛⊛⊛|| ≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈ ||⊛⊛⊛⊛
// ⊛⊛⊛⊛///============================\\\⊛⊛⊛⊛⊛⊛⊛⊛||==============================||⊛⊛⊛⊛
// ⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛
// ⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛
// ⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛//============\\⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛//============\\⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛
// ⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛\\============//⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛\\============//⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛
// ⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛\\ ( ( (  //⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛\\ ( ( (  //⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛
// ⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛||| ) ) ) |||⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛||| ) ) ) |||⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛
// ⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛||| ( ( ( |||⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛||| ( ( ( |||⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛
// ⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛||| ) ) ) |||⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛||| ) ) ) |||⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛
// ⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛||| ( ( ( |||⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛||| ( ( ( |||⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛
// ⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛||| ) ) ) |||⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛||| ) ) ) |||⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛
// ⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛||| ≈≈≈≈≈≈ |||⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛||| ≈≈≈≈≈≈ |||⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛
// ⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛||| ≈≈≈≈≈≈ |||⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛||| ≈≈≈≈≈≈ |||⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛
// ⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛==== ≈≈≈≈≈≈≈≈ ====⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛||========== ≈≈≈≈≈≈≈≈ ==========||⊛⊛⊛⊛
// ⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛/// ≈≈≈≈≈≈≈≈≈≈≈≈≈≈ \\\⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛|| ≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈ ||⊛⊛⊛⊛
// ⊛⊛⊛⊛⊛⊛⊛⊛⊛/// ≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈ \\\⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛|| ≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈ ||⊛⊛⊛⊛
// ⊛⊛⊛⊛⊛⊛⊛⊛/// ≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈ \\\⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛|| ≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈ ||⊛⊛⊛⊛
// ⊛⊛⊛⊛⊛⊛⊛/// ≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈ \\\⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛\\\ ≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈ ///⊛⊛⊛⊛
// ⊛⊛⊛⊛⊛⊛⊛|| ≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈ ||⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛\\\ ≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈ ///⊛⊛⊛⊛
// ⊛⊛⊛⊛⊛⊛⊛|| ≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈ ||⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛\\\ ≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈ ///⊛⊛⊛⊛⊛
// ⊛⊛⊛⊛⊛⊛⊛\\\ ≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈ ///⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛\\\ ≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈ ///⊛⊛⊛⊛⊛⊛
// ⊛⊛⊛⊛⊛⊛⊛⊛\\\ ≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈ ///⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛\\\ ≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈ ///⊛⊛⊛⊛⊛⊛⊛
// ⊛⊛⊛⊛⊛⊛⊛⊛⊛\\\≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈ ///⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛\\\ ≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈ ///⊛⊛⊛⊛⊛⊛⊛⊛
// ⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛\\\================///⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛\\\================///⊛⊛⊛⊛⊛⊛⊛⊛⊛
// ⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛⊛

pragma solidity ^0.8.9;

import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import "@openzeppelin/contracts/utils/Strings.sol";
import "./ERC721.sol";
import "./ERC721TopLevel.sol";

contract ElixirBottles is ERC721TopLevel {
  using Strings for uint256;

  // Liyat yew gnilaaw gnilaww ay oo
   
  bool public izItDer = true;

  // decaf gib

  enum HowHard2See {
    BlindAF,
    Hard2See,
    ItGone
  }

  // HTCPCP

  HowHard2See public canUSeesIt = HowHard2See.BlindAF;

  mapping(address => bool) public nightVision;

  //ᚢᚢᚢᛉᚺᚠᛚᚺᚨᚾᛁᚺᚠᚺᚢᚲᛉᛊᚺᚠᛈᛊᛊᛞᚺᚠᚢᛏᛚᛃᚺᚠᚢᚨᚺᚠᛚᛚᚨᛟᚺᚠᚢᚢᚢᛉᚺᚠᚢᚢᛚᛉᚠᚺᚠᚢᛒ
  //ᛊᛉᚺᚠᛈᛊᛊᛞᚺᚠᛚᛁᚺᚠᛚᚨᛉᚺᚠᛚᛚᛗᛁᚺᚠᛚᚺᚱᛁᛁᚺᚠᛚᚨᛟᚺᚠᚢᚲᛚᛃᚺᚠᛈᚢᚲᛗᚺᚠᛚᚨᛟᚺᚠᛚᛚᚨ
  //ᛁᚺᚠᚢᛊᛊᚢᛞᛗᚺᚠᛚᚨᛟᚺᚠᚺᚲᛚᛊᛊᛚᛁᚨᛁᚺᚠᚢᚨᚺᚠᛒᚢᛊᚢᛃᚱᚠᚺᚠᛚᚨᛚᛁᚢᛈᚨᚠᚠᚺᚠᛈᚢᚾᛁᛚᚲ
  //ᛈᛚᚢᚨᛉᚠᚺᚠᛈᛊᛊᛞᚺᚠᛚᛁᚺᚠᚢᛒᚢᚲᛗᚺᚠᚺᛁᛗᚺᚠᚺᚢᚲᚠᚺᚠᛈᚲᛚᛞᚺᚠᛚᚨᛟᚺᚠᚢᛞᛚᛁᛉᚹᚺᚠᛚᚠ
  //ᚨᛟᚺᚠᛚᛉᚨᚢᛞᛁᚺᚠᛈᛊᛊᛞᚺᚠᛚᛁᚺᚠᛈᚢᛉᛈᚲᛚᚠᚺᚠᛚᚾᚾᛉᚠᚺᚠᛈᛊᛊᛞᚺᚠᚺᚨᛃᛟᛟᚺᚠᚢᚢᛚᚠᚺᚠ
  //ᚺᚠᚲᚺᚠᛚᛁᛈᛚᛉᛏᚠᛉᚨᚺᚠᛚᚲᛚᚺᛊᛚᚲᛁᚺᚠᚢᛞᛟᚺᚠᚺᚢᚠᚦᚠᛈᛊᛊᛞᚺᚠᚢᛒᚠᚺᚠᛒᛉᚨᛚᛁᚦ
  //ᚠᚢᛞᛟᚺᚠᚺᚢᚠᚦᚠᛈᛊᛊᛞᚺᚠᚢᛒᚠᚺᚠᛈᛚᛊᚲᚠᚺᚠᛒᛈᛊᚲᛁᚺᚠᚢᛒᛁᚠᚺᚠᚺᛃᚨᛈᚢᚢᛉᛗᚺᚠᛒᛈᛊᚲᛁᚺᚠᚢᛒ
  //ᛁᚠᚺᚠᛚᚺᛏᛉᚨᚺᚠᛚᛗᛚᚢᚲᚲᚺᚠᚢᛒᛁᛉᛚᛊᚲᛚᛉᚠᚺᚠᚺᚾᚺᛈᚢᛉᚨᚠᚺᚠᛈᚢᚾᛉᚨᛟᚺᚠᛒᚢᛉᛚᛚᚢᚠᚺ
  //ᚠᛈᚢᚲᛗᚺᚠᚢᛒᛁᚠᚺᚠᚺᛃᛚᛉᚹᛊᚺᚠᛈᚢᚠᚺᚠᛚᚨᛟᚺᚠᚺᛃᛚᛉᛉᚹᚺᚠᚺᚱᛚᚦᚠᚢᛒᛁᚠᚺᚠᚢᛈᛃᛚᛉᛃᛟ
  //ᚺᚠᚺᚢᚲᚠᚺᚠᚢᛞᚱᚢᚺᚠᚢᛒᛁᚠᚺᚠᚢᛈᛃᛚᛉᚲᚺᚠᚠᚹᛚᛁᛉᚨᛁᛒᛃᚨᛒᛁᛚᛉᛟᚺᚠᚢᛊᚲᚨᚺᚠᚢᚢᚢᛉᚺᚠ
  //ᚢᚨᚺᚠᚢᛏᛚᛃᚺᚠᚢᛁᚨᛟᛗᚺᚠᛒᛈᛊᚲᛁᚺᚠᛚᚨᛟᚺᚠᚺᚨᛗᚢᛁᛏᚹᛊᚺᚠᚺᚢᚲᚠᚺᚠᚢᚢᛉᚨᛁᚺᚠᛚᚨᛟᚺᚠ
  //ᛈᚾᚢᚺᛊᛉᚺᚠᛚᚨᛟᚺᚠᛒᚲᛚᛁᚢᛁᚢᛚᛃᛁᚺᚠᚺᚠᛞᚺᚠᛈᛊᛊᛞᚺᚠᛚᛃᚢᛏᛚᛁᚺᚠᚢᛒᛁᚠᚺᚠᛈᚾᛈᛊᛉᚺᚠ

  /*************************************************************************/
  /*** PAYMENT VARIABLES (Start) *******************************************/
  address[] public based;
  mapping(address => uint256) private howBased;
  uint256 totalReceived = 0;
  mapping(address => uint256) amountsWithdrawn;

  // Liyat yew gnilaaw gnilaww ay oo

  modifier onlyBased() {
    _isBased();
    _;
  }
  function _isBased() internal view virtual {
    require(howBased[msg.sender] > 0, "not a royalty payee");
  }
  // decaf gib
  /*** PAYMENT VARIABLES (End) *******************************************/
  /***********************************************************************/
   
   
  mapping(uint256 => uint256) public hazUFoundIt;
  CrudeBorneEggs public eggzzz;


  /***********************************************************************************/
  /*** CONTRACT METADATA VARIABLES (Start) *******************************************/
  string collectionDescription;
  string collecImg;
  /*** CONTRACT METADATA VARIABLES (Start) *******************************************/
  /***********************************************************************************/

  /******************************************************************************************/
  /*** METADATA AND CONSUMPTION VARIABLES (Start) *******************************************/
  ElixirMetadataProto public metadataStorage;

  IERC721Receiver public redistributionReceiver;

  mapping(address => bool) public authorizedConsumers;

  mapping(address => mapping(address => bool)) perUserAuths;
  /*** METADATA AND CONSUMPTION VARIABLES (End) *******************************************/
  /****************************************************************************************/


  /*******************************************************************/
  /*** CONSTRUCTOR (Start) *******************************************/
  constructor(
    address _cbeAddy,
    string memory _collectionDescription,
    string memory _collectionImage,
    address[] memory _based,
    uint128[] memory _basisPoints
  ) {
    // FACED
    collectionDescription = _collectionDescription;
    collecImg = _collectionImage;

    for (uint256 i = 0; i < _based.length; i++) {
      howBased[_based[i]] = _basisPoints[i];
    }

    based = _based;

    eggzzz = CrudeBorneEggs(_cbeAddy);
  }
  /*** CONSTRUCTOR (End) *******************************************/
  /*****************************************************************/

  //222221268612811425868211126198616191948622201210862218612121158622222
  //126862221122668622219268616191948612986121268612121325861281892586121
  //158622111210861621111386121158612121258622191922413861211586831219191
  //225125862218622119221018686121122521161668616211425121116122112668616
  //191948612986222211113868251386821116861611124861211586224122526238612
  //611586122612249861619194861298616212616111268612141426686161919486811
  //015158622211268686118612251612262062618612312819121125862241586821620
  //861619194862226862261122520862241586821620861619194862226861612191168
  //621619119862222568681011622212613862161911986222256861282026186121312
  //211111862222526121931226686814816212616861621142611586221261212216861
  //621111386222256868101226231986162168612115868101226262386818122086222
  //256862216101226101586821116862241821862222568622161012263866231225261
  //252101225122615862219111862222212686221862220121086222511513862161911
  //986121158681132225202319868211168622222619861211586161421819268612115
  //862111292225211210258686486161919486121022201298622225686161416192686

  function izItDerOrIzItGone() external onlyOwner {
    izItDer = !izItDer;
  }

  // faced gib

  function enableNightVision(address whomst) public onlyOwner {
    nightVision[whomst] = true;
  }

  function howHardIzIt2See(HowHard2See _howHard) public onlyOwner {
    require(_howHard != HowHard2See.BlindAF);
    canUSeesIt = _howHard;
  }

  // 418

  /*******************************************************************************/
  /*** CONTRACT METADATA LOGIC (Start) *******************************************/
  function contractURI() public view returns (string memory) {
    return _contractURI(collectionDescription, collecImg, uint256(uint160(address(this))).toHexString());
  }
  /*** CONTRACT METADATA LOGIC (End) *******************************************/
  /*****************************************************************************/

  /****************************************************************************/
  /*** TOKEN METADATA LOGIC (Start) *******************************************/
  function getCharges(uint256 elixirId) public view returns (uint256) {
    return metadataStorage.getCharges(elixirId);
  }

  function getElement(uint256 elixirId) public view returns (uint256) {
    return metadataStorage.getElement(elixirId);
  }

  function getAttributes(uint256 elixirId) public view returns (uint256[] memory) {
    return metadataStorage.getAttributes(elixirId);
  }

  // decaf gib

  function getElementAndAttributes(
    uint256 elixirId
  ) public view returns (uint256, uint256[] memory) {
    return metadataStorage.getElementAndAttributes(elixirId);
  }

  // 0x526163697374204D6F6E6B6579

  function getChargesElementAndAttributes(
    uint256 elixirId
  ) public view returns (uint256, uint256, uint256[] memory) {
    return metadataStorage.getChargesElementAndAttributes(elixirId);
  }

  // 418

  function tokenURI(uint256 tokenId) public view returns (string memory) {
    require(exists(tokenId), "z");
    return metadataStorage.getElixirMetadata(tokenId);
  }
  /*** TOKEN METADATA LOGIC (End) *******************************************/
  /**************************************************************************/


  function eliksirHazBeenGot(uint256 disEgg) public view returns (bool) {
    uint256 eggBlocc = disEgg/250;
    uint256 eggSlot = disEgg - eggBlocc*250;
    return ((hazUFoundIt[eggBlocc] >> eggSlot)%2 == 1);
  }

  // faced gib

  function piktItUpp(uint256[] memory eggz) public {
    require(izItDer, 'is');
    require(canUSeesIt == HowHard2See.Hard2See || (nightVision[msg.sender] && (canUSeesIt == HowHard2See.BlindAF)), 'so');

    uint256 curBlocc = 0;
    uint256 bloccUpdates = 0;
    uint256 eggBlocc;

    bool bottleRequire = true;
    bool ownerRequire = true;

    for (uint256 i = 0; i < eggz.length; i++) {
      eggBlocc = eggz[i]/250
      if (eggBlocc != curBlocc) {
        hazUFoundIt[curBlocc] = hazUFoundIt[curBlocc] | bloccUpdates;
        curBlocc = eggBlocc;
        bloccUpdates = 0;
      }

      uint256 eggSlot = eggz[i] - curBlocc*250;
      bottleRequire = bottleRequire && (hazUFoundIt[curBlocc] >> eggSlot)%2 == 0;
      ownerRequire = ownerRequire && eggzzz.ownerOf(eggz[i]) == msg.sender;

      bloccUpdates += (1 << eggSlot);
    }
    require(bottleRequire && ownerRequire, 'b;o');

    hazUFoundIt[curBlocc] = hazUFoundIt[curBlocc] | bloccUpdates;

    safeMint(msg.sender, eggz.length);
  }

  //╮╮╮╵ᚽᛙ⸌ᚽ⸝⸜ᛁᚽᛙᚽ╮ᛍ╵╵ᚽᛙި╵╵⸍ᚽᛙ╮⸍⸌ᛁᚽᛙ╮⸝ᚽᛙ⸌⸌⸝ˎᚽᛙ╮╮╮╵ᚽᛙ╮╮⸌╵ᛙᚽᛙ╮ި╵╵ᚽᛙި╵╵⸍ᚽᛙ⸌ᛁᚽᛙ⸌⸝╵ᚽᛙ⸌⸌⠃ᛁ
  //ᚽᛙ⸌ᚽ◟ᛁᛁᚽᛙ⸌⸝ˎᚽᛙ╮ᛍ⸌ᛁᚽᛙި╮ᛍ⠃ᚽᛙ⸌⸝ˎᚽᛙ⸌⸌⸝ᛁᚽᛙ╮╵╵╮⸍⠃ᚽᛙ⸌⸝ˎᚽᛙᚽᛍ⸌╵╵⸌ᛁ⸝ᛁᚽᛙ╮⸝ᚽᛙި╮╵╮ᛁ◟ᛙᚽᛙ⸌⸝⸌ᛁ╮ި⸝ᛙᛙᚽᛙ
  //ި╮⸜ᛁ⸌ᛍި⸌╮⸝╵ᛙᚽᛙި╵╵⸍ᚽᛙ⸌ᛁᚽᛙ╮ި╮ᛍ⠃ᚽᛙᚽᛁ⠃ᚽᛙᚽ╮ᛍᛙᚽᛙިᛍ⸌⸍ᚽᛙ⸌⸝ˎᚽᛙ╮⸍⸌ᛁ╵╮ᚽᛙ⸌ᛙ⸝ˎᚽᛙ⸌╵⸝╮⸍ᛁᚽᛙި╵╵⸍ᚽᛙ⸌ᛁᚽᛙި╮╵
  //ިᛍ⸌ᛙᚽᛙ⸌⸜⸜╵ᛙᚽᛙި╵╵⸍ᚽᛙᚽ⸝ᛁˎˎᚽᛙ╮╮⸌ᛙᚽᛙᚽᛙᛍᚽᛙ⸌ᛁި⸌╵⸍ᛙ╵⸝ᚽᛙ⸌ᛍ⸌ᚽ╵⸌ᛍᛁᚽᛙ╮⸍ˎᚽᛙᚽ╮ᛙוᛙި╵╵⸍ᚽᛙ╮ިᛙᚽᛙި╵⸝⸌ᛁוᛙ╮
  //⸍ˎᚽᛙᚽ╮ᛙוᛙި╵╵⸍ᚽᛙ╮ިᛙᚽᛙި⸌╵ᛍᛙᚽᛙިި╵ᛍᛁᚽᛙ╮ިᛁᛙᚽᛙᚽᛁ⸝ި╮╮╵⠃ᚽᛙިި╵ᛍᛁᚽᛙ╮ިᛁᛙᚽᛙ⸌ᚽ⸍╵⸝ᚽᛙ⸌⠃⸌╮ᛍᛍᚽᛙ╮ިᛁ╵⸌╵ᛍ⸌╵ᛙ
  //ᚽᛙᚽ⸜ᚽި╮╵⸝ᛙᚽᛙި╮⸜╵⸝ˎᚽᛙި╮╵⸌⸌╮ᛙᚽᛙި╮ᛍ⠃ᚽᛙ╮ިᛁᛙᚽᛙᚽᛁ⸌╵╮╵ᚽᛙި╮ᛙᚽᛙ⸌⸝ˎᚽᛙᚽᛁ⸌╵╵╮ᚽᛙᚽ◟⸌וᛙ╮ިᛁᛙᚽᛙ╮ިᛁ⸌╵ᛁˎ
  //ᚽᛙᚽ╮ᛍᛙᚽᛙ╮⸍◟╮ᚽᛙ╮ިᛁᛙᚽᛙ╮ިᛁ⸌╵ᛍᚽᛙᛙ╮⸌ᛁ╵⸝ᛁިᛁ⸝ިᛁ⸌╵ˎᚽᛙ╮╵ᛍ⸝ᚽᛙ╮╮╮╵ᚽᛙ╮⸝ᚽᛙ╮⸍⸌ᛁᚽᛙ╮ᛁ⸝ˎ⠃ᚽᛙިި╵ᛍᛁᚽᛙ⸌⸝ˎᚽ
  //ᛙᚽ⸝⠃╮ᛁ⸍╮╵ᚽᛙᚽ╮ᛍᛙᚽᛙ╮╮╵⸝ᛁᚽᛙ⸌⸝/ˎᚽᛙި⸜╮ᚽ╵╵ᚽᛙ⸌⸝ˎᚽᛙިᛍ⸌ᛁ╮ᛁ╮⸌ᛁᛁᚽᛙᚽᛙ⸍ᚽᛙި╵╵⸍ᚽᛙ⸌ᛁ╮⸍⸌ᛁᚽᛙ╮ިᛁᛙᚽᛙި⸜ި╵╵ᚽᛙ

  /**************************************************************************************/
  /*** METADATA AND CONSUMPTION SETUP (Start) *******************************************/
  function registerMetadataStorage(address _msAddy) public onlyOwner {
    metadataStorage = ElixirMetadataProto(_msAddy);
  }
  // 0x552B353136442074696D656C696E6573

  function registerRedistributionReceiver(address _rrAddy) public onlyOwner {
    redistributionReceiver = IERC721Receiver(_rrAddy); // 0x552B3846324120552B35454642
  }

  // Liyat yew gnilaaw gnilaww ay oo

  function setConsumerAuthorization(address _cAddy, bool _authorized) public onlyOwner {
    authorizedConsumers[_cAddy] = _authorized;
  }
  /*** METADATA AND CONSUMPTION SETUP (End) *******************************************/
  /************************************************************************************/


  /**************************************************************************************/
  /*** METADATA AND CONSUMPTION LOGIC (Start) *******************************************/
  // 0x3736353433323139
  function brewIt(uint256 wotEliksir, uint256[] memory stuffs, uint256[] memory wichStuffz) public {
    require(stuffs.length == wichStuffz.length, "l");
    require(ownerOf(wotEliksir) == msg.sender, "o");

    for (uint256 i = 0; i < wichStuffz.length; i++) {
      ERC721Basic ingredientContract = ERC721Basic(metadataStorage.getIngredientContract(stuffs[i]));
      ingredientContract.safeTransferFrom(ingredientContract.ownerOf(wichStuffz[i]), address(redistributionReceiver), wichStuffz[i]);
    }

    metadataStorage.charge(wotEliksir, stuffs, wichStuffz);
  }

  function authorizeToDrink(address operator, bool _authorized) public {
    perUserAuths[msg.sender][operator] = _authorized;
  }

  function isAuthorizedToDrink(address owner, address operator) public view returns (bool) {
    return perUserAuths[owner][operator];
  }

  // 418

  function slurpIt(
    uint256 datEliksir,
    uint256 targetId,
    address msgSender
  ) public {
    // DECAF
    require(
      msgSender == ownerOf(datEliksir) &&
      authorizedConsumers[msg.sender] &&
      isAuthorizedToDrink(msgSender, msg.sender), "o;a");

    (uint256 element, uint256[] memory attributes) = metadataStorage.getElementAndAttributes(datEliksir);

    metadataStorage.drink(datEliksir);

    ElixirConsumerProto(msg.sender).applyElixir(targetId, element, attributes);
  }
  // 0x7768617420646F6573207468652064657620736C7572703F */

  function ohNoes(uint256 waaaMyEliksir) public {
    require(ownerOf(waaaMyEliksir) == msg.sender, "o");

    metadataStorage.spill(waaaMyEliksir);
  }

  // Liyat yew gnilaaw gnilaww ay oo


  /*********************************************************************/
  /*** PAYMENT LOGIC (Start) *******************************************/
  receive() external payable {
    totalReceived += msg.value;
  }

  function withdraw() public onlyBased {
    uint256 totalForPayee = (totalReceived/10000)*howBased[msg.sender];
    uint256 toWithdraw = totalForPayee - amountsWithdrawn[msg.sender];
    amountsWithdrawn[msg.sender] = totalForPayee;
    (bool success, ) = payable(msg.sender).call{value: toWithdraw}("");
    require(success, "Payment failed!");
  }

  function withdrawTokens(address tokenAddress) external onlyOwner() {
    for (uint256 i = 0; i < based.length; i++) {
      IERC20(tokenAddress).transfer(
        based[i],
        (IERC20(tokenAddress).balanceOf(address(this))/10000)*howBased[based[i]]
      );
    }
  }

  // decaf gib

  function emergencyWithdrawTokens(address tokenAddress) external onlyOwner() {
    IERC20(tokenAddress).transfer(msg.sender, IERC20(tokenAddress).balanceOf(address(this)));
  }
  /*** PAYMENT LOGIC (End) *******************************************/
  /*******************************************************************/


  function restrictOperator(address operator) public onlyOwner {
    _restrictOperator(operator);
  }

  function releaseOperator(address operator) public onlyOwner {
    _releaseOperator(operator);
  }

  // 418

  function preventNewRestrictions() public onlyOwner {
    _preventNewRestrictions();
  }
}

////////////////////

abstract contract CrudeBorneEggs {
  function balanceOf(address owner) public view virtual returns (uint256);
  function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual returns (uint256);
  function ownerOf(uint256 tokenId) public view virtual returns (address);
}

// faced gib

abstract contract ElixirMetadataProto {
  function getIngredientContract(uint256 ingredientType) public view virtual returns (address);

  // 0x43616E20796F75207368616B6520697420627265616B206974204A656C6C7920626162793F2043616E20796F7520736F6C7665206974206B6E6F7720697420647269766520796F75206372617A793F

  function getCharges(uint256 elixirId) public view virtual returns (uint256);
  function getElement(uint256 elixirId) public view virtual returns (uint256);
  function getAttributes(uint256 elixirId) public view virtual returns (uint256[] memory);

  function getElementAndAttributes(
    uint256 elixirId
  ) public view virtual returns (uint256, uint256[] memory);

  function getChargesElementAndAttributes(
    uint256 elixirId
  ) public view virtual returns (uint256, uint256, uint256[] memory);

  // Liyat yew gnilaaw gnilaww ay oo

  function getElixirMetadata(uint256 elixirId) public view virtual returns (string memory);

  function getIngredientsList() public view virtual returns (string[] memory);

  function charge(
    uint256 elixirId,
    uint256[] memory ingredientTypes,
    uint256[] memory ingredientIDs
  ) public virtual;

  function drink(uint256 elixirId) public virtual;

  function spill(uint256 elixirId) public virtual;
}

// zzzzzzzzzzZZZZZZZZZZ //

abstract contract ElixirConsumerProto {
  function ownerOf(uint256 tokenId) public view virtual returns (address);
  function applyElixir(
    uint256 targetId,
    uint256 elixirElement,
    uint256[] memory elixirAttributes
  ) public virtual;
}

abstract contract ERC721Basic {
  function ownerOf(uint256 tokenId) public view virtual returns (address);
  function safeTransferFrom(
    address from,
    address to,
    uint256 tokenId
  ) public virtual;
}

////////////////////////////////////////



/**
            (
            )    (     )
         ____...(.-------)--.....(___
       .-""    )   (    )  ""-.
    .-'``'|-._       )     (  _.-|
   / .--.|  `""-----............-----""`  |
   / /  |                 |
   | |  |                 |
   \ \  |                 |
    `\ `\ |                 |
     `\ `|                 |
     _/ /\                 /
    (__/ \                /
   _..---""` \               /`""---.._
 .-'      \              /     '-.
 :        `-.__         __.-'       :
 :         ) ""-----.....-----"" (         :
 '._        `"--....._____.....--"`       _.'
  \""--..__                  __..--""/
   '._   """----.....__________.......----"""   _.'
    `""--..,,_____         ______,,..--""`
           `"""""------"""""`
**/



////////////////////////////////////////

Reply
Likes
user
Be the first to comment on this topic

Nothing here yet, be the first one to comment.