Add GE limits to Grand Exchange Plugin Search

Fixes #4533
This commit is contained in:
Alessio
2018-08-14 16:39:29 -04:00
committed by Tomas Slusny
parent 2a81f11770
commit eab5848ab7
8 changed files with 881 additions and 28 deletions

View File

@@ -63,4 +63,15 @@ public interface GrandExchangeConfig extends Config
{
return false;
}
@ConfigItem(
position = 4,
keyName = "enableGeLimits",
name = "Enable GE Limits on GE",
description = "Shows the GE Limits on the GE"
)
default boolean enableGELimits()
{
return true;
}
}

View File

@@ -33,11 +33,14 @@ import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.border.CompoundBorder;
import javax.swing.border.EmptyBorder;
import net.runelite.client.ui.ColorScheme;
import net.runelite.client.game.AsyncBufferedImage;
import net.runelite.client.ui.ColorScheme;
import net.runelite.client.util.LinkBrowser;
import net.runelite.client.util.StackFormatter;
@@ -50,25 +53,26 @@ class GrandExchangeItemPanel extends JPanel
private static final Dimension ICON_SIZE = new Dimension(32, 32);
GrandExchangeItemPanel(AsyncBufferedImage icon, String name, int itemID, int gePrice, Double
haPrice)
haPrice, int geItemLimit)
{
BorderLayout layout = new BorderLayout();
layout.setHgap(5);
setLayout(layout);
setToolTipText(name);
setBackground(ColorScheme.MEDIUM_GRAY_COLOR);
Color background = getBackground();
addMouseListener(new MouseAdapter()
Color background = getBackground();
List<JPanel> panels = new ArrayList();
panels.add(this);
MouseAdapter itemPanelMouseListener = new MouseAdapter()
{
@Override
public void mouseEntered(MouseEvent e)
{
setBackground(background.brighter());
for (Component component : getComponents())
for (JPanel panel : panels)
{
component.setBackground(component.getBackground().brighter());
matchComponentBackground(panel, background.brighter());
}
setCursor(new Cursor(Cursor.HAND_CURSOR));
}
@@ -76,10 +80,9 @@ class GrandExchangeItemPanel extends JPanel
@Override
public void mouseExited(MouseEvent e)
{
setBackground(background);
for (Component component : getComponents())
for (JPanel panel : panels)
{
component.setBackground(background);
matchComponentBackground(panel, background);
}
setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
}
@@ -89,7 +92,9 @@ class GrandExchangeItemPanel extends JPanel
{
geLink(name, itemID);
}
});
};
addMouseListener(itemPanelMouseListener);
setBorder(new EmptyBorder(5, 5, 5, 0));
@@ -104,7 +109,8 @@ class GrandExchangeItemPanel extends JPanel
// Item details panel
JPanel rightPanel = new JPanel(new GridLayout(3, 1));
rightPanel.setBackground(ColorScheme.MEDIUM_GRAY_COLOR);
panels.add(rightPanel);
rightPanel.setBackground(background);
// Item name
JLabel itemName = new JLabel();
@@ -127,15 +133,38 @@ class GrandExchangeItemPanel extends JPanel
gePriceLabel.setForeground(ColorScheme.GRAND_EXCHANGE_PRICE);
rightPanel.add(gePriceLabel);
JPanel alchAndLimitPanel = new JPanel(new BorderLayout());
panels.add(alchAndLimitPanel);
alchAndLimitPanel.setBackground(background);
// Alch price
JLabel haPriceLabel = new JLabel();
haPriceLabel.setText(StackFormatter.formatNumber(haPrice.intValue()) + " alch");
haPriceLabel.setForeground(ColorScheme.GRAND_EXCHANGE_ALCH);
rightPanel.add(haPriceLabel);
alchAndLimitPanel.add(haPriceLabel, BorderLayout.WEST);
// GE Limit
JLabel geLimitLabel = new JLabel();
String limitLabelText = geItemLimit == 0 ? "" : "Limit " + StackFormatter.formatNumber(geItemLimit);
geLimitLabel.setText(limitLabelText);
geLimitLabel.setForeground(ColorScheme.GRAND_EXCHANGE_LIMIT);
geLimitLabel.setBorder(new CompoundBorder(geLimitLabel.getBorder(), new EmptyBorder(0, 0, 0, 7)));
alchAndLimitPanel.add(geLimitLabel, BorderLayout.EAST);
rightPanel.add(alchAndLimitPanel);
add(rightPanel, BorderLayout.CENTER);
}
private void matchComponentBackground(JPanel panel, Color color)
{
panel.setBackground(color);
for (Component c : panel.getComponents())
{
c.setBackground(color);
}
}
private void geLink(String name, int itemID)
{
final String url = "http://services.runescape.com/m=itemdb_oldschool/"

View File

@@ -24,10 +24,10 @@
*/
package net.runelite.client.plugins.grandexchange;
import lombok.Data;
import lombok.Value;
import net.runelite.client.game.AsyncBufferedImage;
@Data
@Value
public class GrandExchangeItems
{
private final AsyncBufferedImage icon;
@@ -35,13 +35,5 @@ public class GrandExchangeItems
private final int itemId;
private final int gePrice;
private final double haPrice;
GrandExchangeItems(AsyncBufferedImage icon, String name, int itemId, int gePrice, double haPrice)
{
this.icon = icon;
this.name = name;
this.itemId = itemId;
this.gePrice = gePrice;
this.haPrice = haPrice;
}
private final int geItemLimit;
}

View File

@@ -27,6 +27,7 @@
package net.runelite.client.plugins.grandexchange;
import java.awt.BorderLayout;
import java.util.Map;
import java.util.concurrent.ScheduledExecutorService;
import javax.inject.Inject;
import javax.swing.JPanel;
@@ -90,4 +91,9 @@ class GrandExchangePanel extends PluginPanel
tabGroup.select(searchTab);
revalidate();
}
void setGELimits(Map<Integer, Integer> itemGELimits)
{
searchPanel.setItemGELimits(itemGELimits);
}
}

View File

@@ -28,9 +28,14 @@
package net.runelite.client.plugins.grandexchange;
import com.google.common.eventbus.Subscribe;
import com.google.common.reflect.TypeToken;
import com.google.gson.Gson;
import com.google.inject.Provides;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.Map;
import java.util.concurrent.ScheduledExecutorService;
import javax.inject.Inject;
import javax.swing.SwingUtilities;
@@ -84,6 +89,12 @@ public class GrandExchangePlugin extends Plugin
private static final GrandExchangeClient CLIENT = new GrandExchangeClient();
private static final String OSB_GE_TEXT = "<br>OSBuddy Actively traded price: ";
private static final String BUY_LIMIT_GE_TEXT = "<br>Buy limit: ";
private static final Gson GSON = new Gson();
private static final TypeToken<Map<Integer, Integer>> BUY_LIMIT_TOKEN = new TypeToken<Map<Integer, Integer>>()
{
};
static final String SEARCH_GRAND_EXCHANGE = "Search Grand Exchange";
@Getter(AccessLevel.PACKAGE)
@@ -125,6 +136,7 @@ public class GrandExchangePlugin extends Plugin
private Widget grandExchangeText;
private Widget grandExchangeItem;
private Map<Integer, Integer> itemGELimits;
@Provides
GrandExchangeConfig provideConfig(ConfigManager configManager)
@@ -135,7 +147,9 @@ public class GrandExchangePlugin extends Plugin
@Override
protected void startUp()
{
itemGELimits = loadGELimits();
panel = injector.getInstance(GrandExchangePanel.class);
panel.setGELimits(itemGELimits);
final BufferedImage icon = ImageUtil.getResourceStreamFromClass(getClass(), "ge_icon.png");
@@ -163,6 +177,7 @@ public class GrandExchangePlugin extends Plugin
keyManager.unregisterKeyListener(inputListener);
grandExchangeText = null;
grandExchangeItem = null;
itemGELimits = null;
}
@Subscribe
@@ -301,6 +316,18 @@ public class GrandExchangePlugin extends Plugin
return;
}
if (config.enableGELimits() && itemGELimits != null && !geTextString.contains(BUY_LIMIT_GE_TEXT))
{
final Integer itemLimit = itemGELimits.get(itemId);
// If we have item buy limit, append it
if (itemLimit != null)
{
final String text = geText.getText() + BUY_LIMIT_GE_TEXT + StackFormatter.formatNumber(itemLimit);
geText.setText(text);
}
}
if (!config.enableOsbPrices() || geTextString.contains(OSB_GE_TEXT))
{
// OSB prices are disabled or price was already looked up, so no need to set it again
@@ -323,4 +350,12 @@ public class GrandExchangePlugin extends Plugin
}
});
}
private static Map<Integer, Integer> loadGELimits()
{
final InputStream geLimitData = GrandExchangePlugin.class.getResourceAsStream("ge_limits.json");
final Map<Integer, Integer> itemGELimits = GSON.fromJson(new InputStreamReader(geLimitData), BUY_LIMIT_TOKEN.getType());
log.debug("Loaded {} limits", itemGELimits.size());
return itemGELimits;
}
}

View File

@@ -32,13 +32,16 @@ import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ScheduledExecutorService;
import javax.swing.ImageIcon;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.SwingUtilities;
import javax.swing.border.EmptyBorder;
import lombok.Setter;
import lombok.extern.slf4j.Slf4j;
import net.runelite.api.ItemComposition;
import net.runelite.client.callback.ClientThread;
@@ -92,6 +95,9 @@ class GrandExchangeSearchPanel extends JPanel
private List<GrandExchangeItems> itemsList = new ArrayList<>();
@Setter
private Map<Integer, Integer> itemGELimits = Collections.emptyMap();
static
{
SEARCH_ICON = new ImageIcon(ImageUtil.alphaOffset(ImageUtil.grayscaleOffset(ImageUtil.getResourceStreamFromClass(IconTextField.class, "search.png"), 0f), 1.75f));
@@ -222,9 +228,10 @@ class GrandExchangeSearchPanel extends JPanel
}
int itemPrice = itemManager.getItemPrice(itemId);
int itemLimit = itemGELimits.getOrDefault(itemId, 0);
AsyncBufferedImage itemImage = itemManager.getImage(itemId);
itemsList.add(new GrandExchangeItems(itemImage, item.getName(), itemId, itemPrice, itemComp.getPrice() * 0.6));
itemsList.add(new GrandExchangeItems(itemImage, item.getName(), itemId, itemPrice, itemComp.getPrice() * 0.6, itemLimit));
// If using hotkey to lookup item, stop after finding match.
if (exactMatch && item.getName().equalsIgnoreCase(lookup))
@@ -246,7 +253,7 @@ class GrandExchangeSearchPanel extends JPanel
for (GrandExchangeItems item : itemsList)
{
GrandExchangeItemPanel panel = new GrandExchangeItemPanel(item.getIcon(), item.getName(),
item.getItemId(), item.getGePrice(), item.getHaPrice());
item.getItemId(), item.getGePrice(), item.getHaPrice(), item.getGeItemLimit());
/*
Add the first item directly, wrap the rest with margin. This margin hack is because

View File

@@ -42,7 +42,7 @@ public class ColorScheme
public static final Color MEDIUM_GRAY_COLOR = new Color(77, 77, 77);
public static final Color LIGHT_GRAY_COLOR = new Color(165, 165, 165);
public static final Color DARKER_GRAY_HOVER_COLOR = new Color(60, 60 , 60);
public static final Color DARKER_GRAY_HOVER_COLOR = new Color(60, 60, 60);
public static final Color DARK_GRAY_HOVER_COLOR = new Color(35, 35, 35);
/* The color for the green progress bar (used in ge offers, farming tracker, etc)*/
@@ -60,6 +60,10 @@ public class ColorScheme
/* The color for the high alch indicator in the ge search results */
public static final Color GRAND_EXCHANGE_ALCH = new Color(240, 207, 123);
/* The color for the limit indicator in the ge search results */
public static final Color GRAND_EXCHANGE_LIMIT = new Color(50, 160, 250);
/* The background color of the scrollbar's track */
public static final Color SCROLL_TRACK_COLOR = new Color(25, 25, 25);
}

View File

@@ -0,0 +1,769 @@
{
"2": 7000,
"41": 10000,
"43": 10000,
"44": 10000,
"45": 11000,
"52": 7000,
"53": 7000,
"62": 10000,
"64": 10000,
"66": 10000,
"68": 10000,
"70": 10000,
"103": 10000,
"105": 10000,
"107": 10000,
"199": 11000,
"201": 11000,
"203": 11000,
"205": 11000,
"207": 11000,
"209": 11000,
"211": 11000,
"213": 11000,
"215": 11000,
"217": 11000,
"219": 11000,
"221": 13000,
"225": 13000,
"227": 13000,
"229": 13000,
"231": 13000,
"239": 13000,
"245": 10000,
"249": 11000,
"251": 11000,
"253": 13000,
"255": 12000,
"257": 12000,
"259": 2000,
"261": 2000,
"263": 13000,
"265": 2000,
"267": 2000,
"269": 2000,
"288": 15,
"313": 8000,
"314": 13000,
"315": 15000,
"331": 15000,
"359": 15000,
"361": 6000,
"371": 15000,
"373": 6000,
"377": 15000,
"379": 6000,
"383": 15000,
"385": 10000,
"401": 13000,
"434": 13000,
"436": 13000,
"438": 13000,
"440": 13000,
"442": 13000,
"444": 13000,
"447": 13000,
"449": 4500,
"451": 4500,
"453": 13000,
"526": 7500,
"532": 3000,
"536": 7500,
"542": 125,
"544": 125,
"554": 20000,
"555": 20000,
"556": 20000,
"557": 20000,
"558": 12000,
"559": 12000,
"560": 10000,
"561": 12000,
"562": 12000,
"563": 12000,
"564": 12000,
"565": 10000,
"566": 10000,
"567": 10000,
"573": 10000,
"577": 250,
"581": 125,
"590": 40,
"592": 13000,
"753": 15,
"805": 70,
"806": 7000,
"807": 7000,
"808": 7000,
"809": 7000,
"810": 11000,
"811": 7000,
"819": 13000,
"822": 13000,
"823": 11000,
"824": 11000,
"829": 11000,
"830": 11000,
"839": 14000,
"845": 14000,
"847": 14000,
"851": 14000,
"855": 18000,
"857": 125,
"859": 18000,
"863": 7000,
"865": 7000,
"866": 7000,
"868": 7000,
"882": 7000,
"884": 7000,
"886": 7000,
"888": 7000,
"890": 11000,
"892": 11000,
"950": 18000,
"954": 250,
"960": 13000,
"962": 50,
"981": 5,
"985": 11000,
"987": 11000,
"1038": 15,
"1040": 15,
"1042": 15,
"1044": 15,
"1046": 15,
"1048": 15,
"1050": 5,
"1059": 125,
"1063": 125,
"1065": 125,
"1067": 125,
"1069": 125,
"1071": 125,
"1073": 125,
"1079": 70,
"1085": 125,
"1087": 125,
"1091": 125,
"1093": 70,
"1095": 125,
"1099": 125,
"1105": 125,
"1109": 100,
"1113": 70,
"1115": 125,
"1119": 125,
"1121": 125,
"1123": 125,
"1127": 70,
"1129": 125,
"1131": 125,
"1135": 125,
"1143": 125,
"1145": 125,
"1147": 70,
"1149": 8,
"1159": 125,
"1161": 125,
"1163": 70,
"1167": 125,
"1169": 125,
"1171": 125,
"1185": 70,
"1193": 125,
"1197": 125,
"1199": 125,
"1201": 70,
"1207": 125,
"1213": 70,
"1215": 70,
"1243": 125,
"1247": 70,
"1249": 70,
"1265": 40,
"1267": 40,
"1269": 40,
"1271": 40,
"1273": 40,
"1275": 40,
"1289": 70,
"1295": 125,
"1303": 70,
"1305": 70,
"1307": 125,
"1309": 125,
"1315": 125,
"1319": 70,
"1325": 125,
"1329": 125,
"1333": 70,
"1339": 125,
"1343": 125,
"1347": 70,
"1349": 40,
"1351": 40,
"1353": 40,
"1355": 40,
"1357": 40,
"1359": 40,
"1361": 40,
"1369": 125,
"1371": 125,
"1373": 70,
"1377": 70,
"1379": 125,
"1391": 11000,
"1393": 500,
"1395": 14000,
"1397": 14000,
"1399": 500,
"1432": 70,
"1434": 70,
"1464": 14000,
"1478": 5,
"1511": 14000,
"1513": 12000,
"1515": 12000,
"1517": 15000,
"1519": 15000,
"1521": 14000,
"1607": 13000,
"1609": 10000,
"1617": 10000,
"1619": 10000,
"1621": 10000,
"1623": 10000,
"1637": 10000,
"1649": 10000,
"1673": 18000,
"1704": 10000,
"1725": 125,
"1731": 125,
"1734": 7000,
"1739": 10000,
"1741": 13000,
"1743": 10000,
"1745": 13000,
"1747": 10000,
"1749": 10000,
"1751": 13000,
"1753": 13000,
"1759": 13000,
"1761": 13000,
"1771": 150,
"1775": 13000,
"1777": 13000,
"1779": 13000,
"1781": 13000,
"1783": 13000,
"1785": 40,
"1925": 13000,
"1927": 13000,
"1931": 13000,
"1935": 13000,
"1937": 13000,
"1939": 13000,
"1949": 150,
"1961": 50,
"1965": 6000,
"1967": 6000,
"1973": 13000,
"1975": 13000,
"1987": 13000,
"1993": 6000,
"2003": 10000,
"2114": 13000,
"2132": 13000,
"2309": 6000,
"2313": 50,
"2347": 40,
"2351": 10000,
"2353": 10000,
"2355": 10000,
"2357": 10000,
"2359": 10000,
"2361": 10000,
"2389": 13000,
"2390": 13000,
"2422": 15,
"2481": 2000,
"2483": 10000,
"2485": 11000,
"2487": 125,
"2489": 70,
"2493": 125,
"2495": 70,
"2497": 70,
"2499": 125,
"2501": 70,
"2503": 70,
"2505": 13000,
"2509": 11000,
"2511": 14000,
"2513": 70,
"2530": 7500,
"2550": 10000,
"2577": 6,
"2581": 8,
"2621": 8,
"2864": 5000,
"2961": 15,
"2970": 13000,
"2998": 12000,
"3000": 2000,
"3049": 11000,
"3051": 11000,
"3053": 8,
"3054": 8,
"3099": 125,
"3101": 70,
"3105": 20,
"3140": 70,
"3142": 12500,
"3144": 10000,
"3147": 10000,
"3187": 7500,
"3190": 15,
"3202": 70,
"3204": 70,
"3385": 70,
"3387": 70,
"3389": 70,
"3391": 70,
"3393": 70,
"3481": 8,
"3483": 8,
"3749": 70,
"3751": 70,
"3753": 70,
"4087": 70,
"4089": 125,
"4091": 125,
"4093": 125,
"4131": 70,
"4151": 10,
"4153": 70,
"4178": 10,
"4180": 70,
"4287": 13000,
"4498": 250,
"4544": null,
"4561": 10000,
"4585": 70,
"4587": 70,
"4694": 12000,
"4695": 12000,
"4696": 12000,
"4697": 12000,
"4698": 12000,
"4699": 12000,
"4712": 15,
"4740": 11000,
"5100": 600,
"5288": 200,
"5289": 200,
"5295": 200,
"5296": 600,
"5300": 200,
"5312": 200,
"5313": 200,
"5314": 200,
"5316": 200,
"5320": 600,
"5321": 200,
"5331": 40,
"5333": 40,
"5334": 40,
"5335": 40,
"5336": 40,
"5337": 40,
"5338": 40,
"5339": 40,
"5340": 40,
"5354": 600,
"5374": 200,
"5502": 200,
"5982": 11000,
"6032": 600,
"6034": 600,
"6306": 18000,
"6313": 15,
"6319": 100,
"6322": 125,
"6324": 125,
"6328": 100,
"6332": 11000,
"6422": 20000,
"6424": 20000,
"6426": 20000,
"6428": 20000,
"6430": 12000,
"6432": 10000,
"6434": 12000,
"6436": 12000,
"6438": 12000,
"6568": 70,
"6571": 11000,
"6573": 11000,
"6583": 8,
"6585": 8,
"6693": 11000,
"6724": 8,
"6729": 7500,
"6731": 8,
"6733": 6,
"6735": 8,
"6737": 8,
"6739": 40,
"6797": 40,
"6812": 7500,
"6889": 15,
"6894": 125,
"6895": 125,
"6897": 70,
"6918": 10,
"6920": 24,
"6924": 10,
"6967": 8,
"6969": 10000,
"7147": 7000,
"7155": 250,
"7156": 40,
"7158": 8,
"7198": 10000,
"7200": 10000,
"7416": 50,
"7418": 50,
"7552": 7000,
"7554": 20000,
"7556": 20000,
"7558": 20000,
"7560": 12000,
"7676": 125,
"7928": 50,
"7929": 50,
"7930": 50,
"7931": 50,
"7932": 50,
"7933": 50,
"7936": 20000,
"7944": 13000,
"7946": 13000,
"8007": 10000,
"8008": 10000,
"8009": 10000,
"8010": 10000,
"8011": 10000,
"8012": 10000,
"8013": 10000,
"8283": 10000,
"8714": 70,
"8716": 70,
"8718": 70,
"8720": 70,
"8722": 70,
"8724": 70,
"8726": 70,
"8728": 70,
"8730": 70,
"8732": 70,
"8734": 70,
"8736": 70,
"8738": 70,
"8740": 70,
"8742": 70,
"8744": 70,
"8746": 125,
"8748": 125,
"8750": 125,
"8752": 125,
"8754": 125,
"8756": 125,
"8758": 125,
"8760": 125,
"8762": 125,
"8764": 125,
"8766": 125,
"8768": 125,
"8770": 125,
"8772": 125,
"8774": 125,
"8776": 125,
"8778": 13000,
"8780": 13000,
"8782": 13000,
"8882": 13000,
"8986": 13000,
"9054": 15,
"9055": 15,
"9056": 15,
"9057": 15,
"9058": 15,
"9075": 10000,
"9086": 13000,
"9143": 11000,
"9144": 11000,
"9183": 70,
"9185": 70,
"9191": 11000,
"9192": 11000,
"9339": 11000,
"9342": 11000,
"9379": 13000,
"9380": 13000,
"9660": 13000,
"9691": 20000,
"9693": 20000,
"9695": 20000,
"9697": 12000,
"9699": 20000,
"9976": 7000,
"9977": 7000,
"10006": 250,
"10008": 250,
"10033": 7000,
"10034": 7000,
"10069": 125,
"10073": 125,
"10144": 7000,
"10145": 11000,
"10148": 125,
"10150": 40,
"10476": 10000,
"10601": 125,
"10606": 70,
"10636": 70,
"10663": 125,
"10696": 6,
"10782": 8,
"10796": 8,
"10828": 70,
"11027": 50,
"11028": 50,
"11029": 50,
"11030": 50,
"11037": 8,
"11046": 250,
"11068": 18000,
"11069": 18000,
"11088": 505,
"11133": 10,
"11212": 11000,
"11230": 11000,
"11235": 8,
"11248": 18000,
"11260": 13000,
"11283": 10,
"11284": 10,
"11286": 5,
"11335": 8,
"11371": 125,
"11377": 70,
"11686": 20000,
"11687": 20000,
"11688": 20000,
"11689": 20000,
"11690": 12000,
"11691": 12000,
"11692": 10000,
"11693": 12000,
"11694": 12000,
"11695": 12000,
"11696": 12000,
"11697": 10000,
"11698": 10000,
"11699": 10000,
"11700": 7000,
"11701": 7000,
"11702": 7000,
"11703": 7000,
"11712": 12000,
"11713": 10000,
"11714": 10000,
"11715": 20000,
"11717": 20000,
"11718": 20000,
"11719": 40,
"11720": 40,
"11721": 40,
"11787": 8,
"11789": 6,
"11791": 8,
"11802": 8,
"11804": 8,
"11806": 8,
"11808": 8,
"11824": 8,
"11826": 10,
"11828": 10,
"11830": 10,
"11832": 10,
"11834": 10,
"11836": 8,
"11838": 8,
"11840": 70,
"11875": 7000,
"11876": 7000,
"11889": 8,
"11902": 70,
"11905": 8,
"11920": 40,
"11924": 8,
"11926": 8,
"11940": 8000,
"11959": 6000,
"11972": 100,
"11994": 11000,
"12000": 6,
"12002": 5,
"12004": 70,
"12297": 40,
"12377": 3,
"12389": 70,
"12526": 4,
"12596": 4,
"12601": 8,
"12603": 8,
"12605": 8,
"12640": 11000,
"12746": 100,
"12765": 8,
"12766": 8,
"12767": 8,
"12768": 8,
"12769": 4,
"12771": 6,
"12795": 8,
"12796": 6,
"12797": 40,
"12806": 8,
"12807": 8,
"12817": 8,
"12821": 8,
"12829": 8,
"12831": 8,
"12833": 4,
"12848": 70,
"12877": 8,
"12913": 2000,
"12922": 5,
"12926": 8,
"12927": 5,
"12931": 8,
"12932": 10,
"12934": 30000,
"12938": 10000,
"13024": 8,
"13026": 8,
"13066": 2000,
"13227": 10,
"13229": 15,
"13231": 10,
"13235": 15,
"13237": 8,
"13239": 6,
"13263": 8,
"13265": 8,
"13385": 124,
"13387": 124,
"13391": 13000,
"13474": 3000,
"13475": 3000,
"13510": 9000,
"13511": 9000,
"13573": 13000,
"13576": 8,
"13652": 8,
"19478": 8,
"19481": 8,
"19484": 10000,
"19544": 8,
"19547": 8,
"19550": 8,
"19553": 8,
"19559": 8,
"19580": 10000,
"19582": 11000,
"19584": 7000,
"19669": 12000,
"19991": 4,
"19994": 8,
"20002": 5,
"20388": 11000,
"20389": 11000,
"20390": 10000,
"20401": 125,
"20402": 70,
"20405": 10,
"20406": 70,
"20407": 70,
"20408": 8,
"20415": 125,
"20416": 125,
"20417": 125,
"20418": 125,
"20421": 70,
"20422": 70,
"20423": 70,
"20424": 70,
"20425": 125,
"20426": 125,
"20428": 70,
"20429": 70,
"20547": 13000,
"20552": 70,
"20555": 70,
"20557": 70,
"20559": 8,
"20561": 125,
"20562": 125,
"20566": 70,
"20567": 70,
"20568": 70,
"20571": 70,
"20572": 70,
"20575": 10,
"20578": 20,
"20580": 100,
"20584": 5,
"20585": 125,
"20586": 10000,
"20587": 250,
"20593": 8,
"20598": 15,
"20600": 11000,
"20601": 8,
"20714": 15,
"20716": 15,
"20724": 8,
"20727": 70,
"20733": 6,
"20782": 8,
"20784": 8,
"20785": 8,
"21000": 8,
"21003": 8,
"21009": 8,
"21012": 8,
"21018": 8,
"21021": 8,
"21024": 8,
"21028": 5,
"21034": 8,
"21060": 8,
"21079": 8,
"21198": 8,
"21200": 8,
"21205": 8,
"21206": 8,
"21298": 10,
"21304": 70,
"21326": 11000,
"21338": 11000,
"21555": 18000,
"21622": 13000,
"21736": 8,
"21820": 30000
}