aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorKevin <92656833+kevinthegreat1@users.noreply.github.com>2024-09-06 15:31:18 -0400
committerGitHub <noreply@github.com>2024-09-06 15:31:18 -0400
commit5ed09f8601022ef6cf51043410e0294cbfad4ad9 (patch)
treebd2e0910a5b8e1952af04d77912e84a918e1e3c0 /src/main/java
parentf7c414a757b8893f96cb3ba71e6c10541894f951 (diff)
parentbbfc1021c48886e5d65c9f600858d7ca7ec46bb1 (diff)
downloadSkyblocker-5ed09f8601022ef6cf51043410e0294cbfad4ad9.tar.gz
Skyblocker-5ed09f8601022ef6cf51043410e0294cbfad4ad9.tar.bz2
Skyblocker-5ed09f8601022ef6cf51043410e0294cbfad4ad9.zip
Merge pull request #884 from VeritasDL/bleeding-edge-bz
BazaarLookup Small Edit
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/de/hysky/skyblocker/config/categories/HelperCategory.java20
-rw-r--r--src/main/java/de/hysky/skyblocker/config/configs/HelperConfig.java9
-rw-r--r--src/main/java/de/hysky/skyblocker/mixins/HandledScreenMixin.java16
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/bazaar/BazaarHelper.java53
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/item/ItemPrice.java79
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/AvgBinTooltip.java3
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/BazaarPriceTooltip.java6
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/LBinTooltip.java10
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/searchoverlay/SearchOverManager.java2
9 files changed, 110 insertions, 88 deletions
diff --git a/src/main/java/de/hysky/skyblocker/config/categories/HelperCategory.java b/src/main/java/de/hysky/skyblocker/config/categories/HelperCategory.java
index e6d9fffb..ec34dea6 100644
--- a/src/main/java/de/hysky/skyblocker/config/categories/HelperCategory.java
+++ b/src/main/java/de/hysky/skyblocker/config/categories/HelperCategory.java
@@ -220,19 +220,19 @@ public class HelperCategory {
.controller(ConfigUtils::createBooleanController)
.build())
.option(Option.<Boolean>createBuilder()
- .name(Text.translatable("skyblocker.config.helpers.bazaar.enableBazaarLookup"))
- .description(OptionDescription.of(Text.translatable("skyblocker.config.helpers.bazaar.enableBazaarLookup.@Tooltip")))
- .binding(defaults.helpers.bazaar.enableBazaarLookup,
- () -> config.helpers.bazaar.enableBazaarLookup,
- newValue -> config.helpers.bazaar.enableBazaarLookup = newValue)
+ .name(Text.translatable("skyblocker.config.helpers.itemPrice.enableItemPriceLookup"))
+ .description(OptionDescription.of(Text.translatable("skyblocker.config.helpers.itemPrice.enableItemPriceLookup.@Tooltip")))
+ .binding(defaults.helpers.itemPrice.enableItemPriceLookup,
+ () -> config.helpers.itemPrice.enableItemPriceLookup,
+ newValue -> config.helpers.itemPrice.enableItemPriceLookup = newValue)
.controller(ConfigUtils::createBooleanController)
.build())
.option(Option.<Boolean>createBuilder()
- .name(Text.translatable("skyblocker.config.helpers.bazaar.enableRefreshItemPrices"))
- .description(OptionDescription.of(Text.translatable("skyblocker.config.helpers.bazaar.enableRefreshItemPrices.@Tooltip")))
- .binding(defaults.helpers.bazaar.enableBazaarRefresh,
- () -> config.helpers.bazaar.enableBazaarRefresh,
- newValue -> config.helpers.bazaar.enableBazaarRefresh = newValue)
+ .name(Text.translatable("skyblocker.config.helpers.itemPrice.enableItemPriceRefresh"))
+ .description(OptionDescription.of(Text.translatable("skyblocker.config.helpers.itemPrice.enableItemPriceRefresh.@Tooltip")))
+ .binding(defaults.helpers.itemPrice.enableItemPriceRefresh,
+ () -> config.helpers.itemPrice.enableItemPriceRefresh,
+ newValue -> config.helpers.itemPrice.enableItemPriceRefresh = newValue)
.controller(ConfigUtils::createBooleanController)
.build())
.option(ConfigUtils.createShortcutToKeybindsScreen())
diff --git a/src/main/java/de/hysky/skyblocker/config/configs/HelperConfig.java b/src/main/java/de/hysky/skyblocker/config/configs/HelperConfig.java
index 74ba8228..ad5a14ae 100644
--- a/src/main/java/de/hysky/skyblocker/config/configs/HelperConfig.java
+++ b/src/main/java/de/hysky/skyblocker/config/configs/HelperConfig.java
@@ -29,6 +29,9 @@ public class HelperConfig {
@SerialEntry
public Bazaar bazaar = new Bazaar();
+ @SerialEntry
+ public ItemPrice itemPrice = new ItemPrice();
+
public static class MythologicalRitual {
@SerialEntry
public boolean enableMythologicalRitualHelper = true;
@@ -101,11 +104,13 @@ public class HelperConfig {
public static class Bazaar {
@SerialEntry
public boolean enableBazaarHelper = true;
+ }
+ public static class ItemPrice {
@SerialEntry
- public boolean enableBazaarLookup = true;
+ public boolean enableItemPriceLookup = true;
@SerialEntry
- public boolean enableBazaarRefresh = true;
+ public boolean enableItemPriceRefresh = true;
}
}
diff --git a/src/main/java/de/hysky/skyblocker/mixins/HandledScreenMixin.java b/src/main/java/de/hysky/skyblocker/mixins/HandledScreenMixin.java
index 6ee70bb8..bb21092e 100644
--- a/src/main/java/de/hysky/skyblocker/mixins/HandledScreenMixin.java
+++ b/src/main/java/de/hysky/skyblocker/mixins/HandledScreenMixin.java
@@ -7,15 +7,11 @@ import de.hysky.skyblocker.SkyblockerMod;
import de.hysky.skyblocker.config.SkyblockerConfig;
import de.hysky.skyblocker.config.SkyblockerConfigManager;
import de.hysky.skyblocker.skyblock.PetCache;
-import de.hysky.skyblocker.skyblock.bazaar.BazaarHelper;
import de.hysky.skyblocker.skyblock.experiment.ExperimentSolver;
import de.hysky.skyblocker.skyblock.experiment.SuperpairsSolver;
import de.hysky.skyblocker.skyblock.experiment.UltrasequencerSolver;
import de.hysky.skyblocker.skyblock.garden.VisitorHelper;
-import de.hysky.skyblocker.skyblock.item.ItemProtection;
-import de.hysky.skyblocker.skyblock.item.ItemRarityBackgrounds;
-import de.hysky.skyblocker.skyblock.item.MuseumItemCache;
-import de.hysky.skyblocker.skyblock.item.WikiLookup;
+import de.hysky.skyblocker.skyblock.item.*;
import de.hysky.skyblocker.skyblock.item.slottext.SlotTextManager;
import de.hysky.skyblocker.skyblock.item.tooltip.BackpackPreview;
import de.hysky.skyblocker.skyblock.item.tooltip.CompactorDeletorPreview;
@@ -128,13 +124,13 @@ public abstract class HandledScreenMixin<T extends ScreenHandler> extends Screen
if (ItemProtection.itemProtection.matchesKey(keyCode, scanCode)) {
ItemProtection.handleKeyPressed(this.focusedSlot.getStack());
}
- //Bazaar Lookup
- if (config.helpers.bazaar.enableBazaarLookup && BazaarHelper.BAZAAR_LOOKUP.matchesKey(keyCode, scanCode)) {
- BazaarHelper.bazaarLookup(client.player, this.focusedSlot);
+ //Item Price Lookup
+ if (config.helpers.itemPrice.enableItemPriceLookup && ItemPrice.ITEM_PRICE_LOOKUP.matchesKey(keyCode, scanCode)) {
+ ItemPrice.itemPriceLookup(client.player, this.focusedSlot);
}
//Refresh Item Prices
- if (config.helpers.bazaar.enableBazaarRefresh && BazaarHelper.BAZAAR_REFRESH.matchesKey(keyCode, scanCode)) {
- BazaarHelper.refreshItemPrices(this.client.player);
+ if (config.helpers.itemPrice.enableItemPriceRefresh && ItemPrice.ITEM_PRICE_REFRESH.matchesKey(keyCode, scanCode)) {
+ ItemPrice.refreshItemPrices(this.client.player);
}
}
}
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/bazaar/BazaarHelper.java b/src/main/java/de/hysky/skyblocker/skyblock/bazaar/BazaarHelper.java
index ddbe7620..8fbeb6e0 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/bazaar/BazaarHelper.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/bazaar/BazaarHelper.java
@@ -1,19 +1,9 @@
package de.hysky.skyblocker.skyblock.bazaar;
-import de.hysky.skyblocker.annotations.Init;
import de.hysky.skyblocker.config.SkyblockerConfigManager;
import de.hysky.skyblocker.skyblock.item.slottext.SimpleSlotTextAdder;
import de.hysky.skyblocker.skyblock.item.slottext.SlotText;
-import de.hysky.skyblocker.skyblock.item.tooltip.ItemTooltip;
-import de.hysky.skyblocker.skyblock.item.tooltip.info.DataTooltipInfoType;
-import de.hysky.skyblocker.skyblock.item.tooltip.info.TooltipInfoType;
-import de.hysky.skyblocker.skyblock.itemlist.ItemRepository;
-import de.hysky.skyblocker.utils.Constants;
import de.hysky.skyblocker.utils.ItemUtils;
-import de.hysky.skyblocker.utils.scheduler.MessageScheduler;
-import net.fabricmc.fabric.api.client.keybinding.v1.KeyBindingHelper;
-import net.minecraft.client.network.ClientPlayerEntity;
-import net.minecraft.client.option.KeyBinding;
import net.minecraft.item.ItemStack;
import net.minecraft.screen.slot.Slot;
import net.minecraft.text.MutableText;
@@ -22,13 +12,10 @@ import net.minecraft.util.Formatting;
import org.apache.commons.lang3.math.NumberUtils;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
-import org.lwjgl.glfw.GLFW;
import java.util.List;
-import java.util.concurrent.CompletableFuture;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
-import java.util.stream.Stream;
public class BazaarHelper extends SimpleSlotTextAdder {
private static final Pattern FILLED_PATTERN = Pattern.compile("Filled: \\S+ \\(?([\\d.]+)%\\)?!?");
@@ -36,24 +23,10 @@ public class BazaarHelper extends SimpleSlotTextAdder {
private static final int YELLOW = 0xe6ba0b;
private static final int GREEN = 0x1ee60b;
- public static final KeyBinding BAZAAR_LOOKUP = KeyBindingHelper.registerKeyBinding(new KeyBinding(
- "key.bazaarLookup",
- GLFW.GLFW_KEY_F6,
- "key.categories.skyblocker"
- ));
- public static final KeyBinding BAZAAR_REFRESH = KeyBindingHelper.registerKeyBinding(new KeyBinding(
- "key.bazaarRefresh",
- GLFW.GLFW_KEY_Z,
- "key.categories.skyblocker"
- ));
-
- public BazaarHelper() {
+ public BazaarHelper() {
super("(?:Co-op|Your) Bazaar Orders");
}
- @Init
- public static void init() {}
-
@Override
public boolean isEnabled() {
return SkyblockerConfigManager.get().helpers.bazaar.enableBazaarHelper;
@@ -103,28 +76,4 @@ public class BazaarHelper extends SimpleSlotTextAdder {
if (filled < 100) return Text.literal("%").withColor(YELLOW).formatted(Formatting.BOLD);
return Text.literal("✅").withColor(GREEN).formatted(Formatting.BOLD);
}
-
- // ======== Other Bazaar Features ========
-
- public static void bazaarLookup(ClientPlayerEntity player, @NotNull Slot slot) {
- ItemStack stack = ItemRepository.getItemStack(slot.getStack().getNeuName());
- if (stack != null && !stack.isEmpty()) {
- MessageScheduler.INSTANCE.sendMessageAfterCooldown("/bz " + Formatting.strip(stack.getName().getString()));
- } else {
- player.sendMessage(Constants.PREFIX.get().append(Text.translatable("skyblocker.config.helpers.bazaar.bazaarLookupFailed")));
- }
- }
-
- public static void refreshItemPrices(ClientPlayerEntity player) {
- player.sendMessage(Constants.PREFIX.get().append(Text.translatable("skyblocker.config.helpers.bazaar.refreshingItemPrices")));
- CompletableFuture.allOf(Stream.of(TooltipInfoType.NPC, TooltipInfoType.BAZAAR, TooltipInfoType.LOWEST_BINS, TooltipInfoType.ONE_DAY_AVERAGE, TooltipInfoType.THREE_DAY_AVERAGE)
- .map(DataTooltipInfoType::downloadIfEnabled)
- .toArray(CompletableFuture[]::new)
- ).thenRun(() -> player.sendMessage(Constants.PREFIX.get().append(Text.translatable("skyblocker.config.helpers.bazaar.refreshedItemPrices"))))
- .exceptionally(e -> {
- ItemTooltip.LOGGER.error("[Skyblocker] Failed to refresh item prices", e);
- player.sendMessage(Constants.PREFIX.get().append(Text.translatable("skyblocker.config.helpers.bazaar.refreshItemPricesFailed")));
- return null;
- });
- }
}
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/ItemPrice.java b/src/main/java/de/hysky/skyblocker/skyblock/item/ItemPrice.java
new file mode 100644
index 00000000..d682884d
--- /dev/null
+++ b/src/main/java/de/hysky/skyblocker/skyblock/item/ItemPrice.java
@@ -0,0 +1,79 @@
+package de.hysky.skyblocker.skyblock.item;
+
+import de.hysky.skyblocker.annotations.Init;
+import de.hysky.skyblocker.skyblock.item.tooltip.ItemTooltip;
+import de.hysky.skyblocker.skyblock.item.tooltip.info.DataTooltipInfoType;
+import de.hysky.skyblocker.skyblock.item.tooltip.info.TooltipInfoType;
+import de.hysky.skyblocker.skyblock.itemlist.ItemRepository;
+import de.hysky.skyblocker.skyblock.searchoverlay.SearchOverManager;
+import de.hysky.skyblocker.utils.Constants;
+import de.hysky.skyblocker.utils.scheduler.MessageScheduler;
+import net.fabricmc.fabric.api.client.keybinding.v1.KeyBindingHelper;
+import net.minecraft.client.network.ClientPlayerEntity;
+import net.minecraft.client.option.KeyBinding;
+import net.minecraft.item.ItemStack;
+import net.minecraft.screen.slot.Slot;
+import net.minecraft.text.Text;
+import net.minecraft.util.Formatting;
+import org.jetbrains.annotations.NotNull;
+import org.lwjgl.glfw.GLFW;
+
+import java.util.concurrent.CompletableFuture;
+import java.util.stream.Stream;
+
+public class ItemPrice {
+ public static final KeyBinding ITEM_PRICE_LOOKUP = KeyBindingHelper.registerKeyBinding(new KeyBinding(
+ "key.itemPriceLookup",
+ GLFW.GLFW_KEY_F6,
+ "key.categories.skyblocker"
+ ));
+ public static final KeyBinding ITEM_PRICE_REFRESH = KeyBindingHelper.registerKeyBinding(new KeyBinding(
+ "key.itemPriceRefresh",
+ GLFW.GLFW_KEY_Z,
+ "key.categories.skyblocker"
+ ));
+
+ @Init
+ public static void init() {}
+
+ public static void itemPriceLookup(ClientPlayerEntity player, @NotNull Slot slot) {
+ ItemStack stack = slot.getStack();
+ String skyblockApiId = stack.getSkyblockApiId();
+ ItemStack neuStack = ItemRepository.getItemStack(stack.getNeuName());
+ if (neuStack != null && !neuStack.isEmpty()) {
+ String itemName = Formatting.strip(neuStack.getName().getString());
+
+ // Handle Pets
+ if (stack.getSkyblockId().equals("PET")) {
+ itemName = itemName.replaceFirst("\\[Lvl \\d+ ➡ \\d+] ", "");
+ }
+
+ // Handle Enchanted Books
+ if (itemName.equals("Enchanted Book")) {
+ itemName = SearchOverManager.capitalizeFully(skyblockApiId.replace("ENCHANTMENT_", "").replaceAll("_\\d+", ""));
+ }
+
+ // Search up the item in the bazaar or auction house
+ if (TooltipInfoType.BAZAAR.hasOrNullWarning(skyblockApiId)) {
+ MessageScheduler.INSTANCE.sendMessageAfterCooldown("/bz " + itemName);
+ } else if (TooltipInfoType.LOWEST_BINS.hasOrNullWarning(skyblockApiId)) {
+ MessageScheduler.INSTANCE.sendMessageAfterCooldown("/ahsearch " + itemName);
+ }
+ } else {
+ player.sendMessage(Constants.PREFIX.get().append(Text.translatable("skyblocker.config.helpers.itemPrice.itemPriceLookupFailed")));
+ }
+ }
+
+ public static void refreshItemPrices(ClientPlayerEntity player) {
+ player.sendMessage(Constants.PREFIX.get().append(Text.translatable("skyblocker.config.helpers.itemPrice.refreshingItemPrices")));
+ CompletableFuture.allOf(Stream.of(TooltipInfoType.NPC, TooltipInfoType.BAZAAR, TooltipInfoType.LOWEST_BINS, TooltipInfoType.ONE_DAY_AVERAGE, TooltipInfoType.THREE_DAY_AVERAGE)
+ .map(DataTooltipInfoType::downloadIfEnabled)
+ .toArray(CompletableFuture[]::new)
+ ).thenRun(() -> player.sendMessage(Constants.PREFIX.get().append(Text.translatable("skyblocker.config.helpers.itemPrice.refreshedItemPrices"))))
+ .exceptionally(e -> {
+ ItemTooltip.LOGGER.error("[Skyblocker Item Price] Failed to refresh item prices", e);
+ player.sendMessage(Constants.PREFIX.get().append(Text.translatable("skyblocker.config.helpers.itemPrice.itemPriceRefreshFailed")));
+ return null;
+ });
+ }
+}
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/AvgBinTooltip.java b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/AvgBinTooltip.java
index 4d0e32a4..7fe67c7c 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/AvgBinTooltip.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/AvgBinTooltip.java
@@ -19,6 +19,7 @@ public class AvgBinTooltip extends SimpleTooltipAdder {
@Override
public void addToTooltip(@Nullable Slot focusedSlot, ItemStack stack, List<Text> lines) {
+ String skyblockApiId = stack.getSkyblockApiId();
String neuName = stack.getNeuName();
if (TooltipInfoType.ONE_DAY_AVERAGE.getData() == null || TooltipInfoType.THREE_DAY_AVERAGE.getData() == null) {
@@ -28,7 +29,7 @@ public class AvgBinTooltip extends SimpleTooltipAdder {
We are skipping check average prices for potions, runes
and enchanted books because there is no data for their in API.
*/
- if (!neuName.isEmpty() && LBinTooltip.lbinExist) {
+ if (!neuName.isEmpty() && TooltipInfoType.LOWEST_BINS.hasOrNullWarning(skyblockApiId)) {
GeneralConfig.Average type = ItemTooltip.config.avg;
// "No data" line because of API not keeping old data, it causes NullPointerException
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/BazaarPriceTooltip.java b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/BazaarPriceTooltip.java
index 7c8c60cd..6d7d26c5 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/BazaarPriceTooltip.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/BazaarPriceTooltip.java
@@ -14,15 +14,12 @@ import org.jetbrains.annotations.Nullable;
import java.util.List;
public class BazaarPriceTooltip extends SimpleTooltipAdder {
- public static boolean bazaarExist = false;
-
- public BazaarPriceTooltip(int priority) {
+ public BazaarPriceTooltip(int priority) {
super(priority);
}
@Override
public void addToTooltip(@Nullable Slot focusedSlot, ItemStack stack, List<Text> lines) {
- bazaarExist = false;
String skyblockApiId = stack.getSkyblockApiId();
if (TooltipInfoType.BAZAAR.hasOrNullWarning(skyblockApiId)) {
@@ -46,7 +43,6 @@ public class BazaarPriceTooltip extends SimpleTooltipAdder {
.append(product.sellPrice().isEmpty()
? Text.literal("No data").formatted(Formatting.RED)
: ItemTooltip.getCoinsMessage(product.sellPrice().getAsDouble(), amount)));
- bazaarExist = true;
}
}
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/LBinTooltip.java b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/LBinTooltip.java
index 3838974a..8aabc13f 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/LBinTooltip.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/LBinTooltip.java
@@ -12,9 +12,7 @@ import org.jetbrains.annotations.Nullable;
import java.util.List;
public class LBinTooltip extends SimpleTooltipAdder {
- public static boolean lbinExist = false;
-
- public LBinTooltip(int priority) {
+ public LBinTooltip(int priority) {
super(priority);
}
@@ -25,15 +23,13 @@ public class LBinTooltip extends SimpleTooltipAdder {
@Override
public void addToTooltip(@Nullable Slot focusedSlot, ItemStack stack, List<Text> lines) {
- lbinExist = false;
String skyblockApiId = stack.getSkyblockApiId();
- // bazaarOpened & bazaarExist check for lbin, because Skytils keeps some bazaar item data in lbin api
- if (TooltipInfoType.LOWEST_BINS.hasOrNullWarning(skyblockApiId) && !BazaarPriceTooltip.bazaarExist) {
+ // Check for whether the item exist in bazaar price data, because Skytils keeps some bazaar item data in lbin api
+ if (TooltipInfoType.LOWEST_BINS.hasOrNullWarning(skyblockApiId) && !TooltipInfoType.BAZAAR.hasOrNullWarning(skyblockApiId)) {
lines.add(Text.literal(String.format("%-19s", "Lowest BIN Price:"))
.formatted(Formatting.GOLD)
.append(ItemTooltip.getCoinsMessage(TooltipInfoType.LOWEST_BINS.getData().getDouble(skyblockApiId), stack.getCount())));
- lbinExist = true;
}
}
}
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/searchoverlay/SearchOverManager.java b/src/main/java/de/hysky/skyblocker/skyblock/searchoverlay/SearchOverManager.java
index 905fc062..f3c36d8e 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/searchoverlay/SearchOverManager.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/searchoverlay/SearchOverManager.java
@@ -183,7 +183,7 @@ public class SearchOverManager {
*
* @param str string to capitalize
*/
- private static String capitalizeFully(String str) {
+ public static String capitalizeFully(String str) {
if (str == null || str.isEmpty()) {
return str;
}