From 56bc0a2d2b74c622c8300dcf0924d80b9b218dc4 Mon Sep 17 00:00:00 2001
From: MobiusDevelopment <8391001+MobiusDevelopment@users.noreply.github.com>
Date: Sat, 25 Jan 2020 13:24:58 +0000
Subject: [PATCH] Replaced Henna CSV data with aCis free version XML data.
---
.../db_installer/sql/game/henna_trees.sql | 7149 -----------------
.../dist/game/data/Hennas.xml | 183 +
.../dist/game/data/csv/henna.csv | 182 -
.../dist/game/data/xsd/Hennas.xsd | 26 +
.../java/org/l2jmobius/commons/util/Util.java | 53 +
.../org/l2jmobius/gameserver/GameServer.java | 13 +-
.../gameserver/datatables/csv/HennaTable.java | 160 -
.../datatables/sql/HennaTreeTable.java | 136 -
.../gameserver/datatables/xml/FishData.java | 2 +-
.../gameserver/datatables/xml/HennaData.java | 107 +
.../model/actor/instance/HennaInstance.java | 214 -
.../model/actor/instance/PlayerInstance.java | 264 +-
.../actor/instance/SymbolMakerInstance.java | 70 +-
.../gameserver/model/items/Henna.java | 94 +-
.../gameserver/network/GamePacketHandler.java | 15 +
.../gameserver/network/SystemMessageId.java | 18 +
.../clientpackets/RequestGMCommand.java | 3 +
.../clientpackets/RequestHennaEquip.java | 99 +-
.../clientpackets/RequestHennaItemInfo.java | 12 +-
.../RequestHennaItemRemoveInfo.java | 51 +
.../clientpackets/RequestHennaList.java | 13 +-
.../clientpackets/RequestHennaRemove.java | 59 +
.../clientpackets/RequestHennaRemoveList.java | 47 +
.../serverpackets/GMViewHennaInfo.java | 64 +
.../network/serverpackets/HennaEquipList.java | 39 +-
.../network/serverpackets/HennaInfo.java | 32 +-
.../network/serverpackets/HennaItemInfo.java | 24 +-
.../serverpackets/HennaItemRemoveInfo.java | 57 +
.../serverpackets/HennaRemoveList.java | 52 +
29 files changed, 1011 insertions(+), 8227 deletions(-)
delete mode 100644 L2J_Mobius_C6_Interlude/dist/db_installer/sql/game/henna_trees.sql
create mode 100644 L2J_Mobius_C6_Interlude/dist/game/data/Hennas.xml
delete mode 100644 L2J_Mobius_C6_Interlude/dist/game/data/csv/henna.csv
create mode 100644 L2J_Mobius_C6_Interlude/dist/game/data/xsd/Hennas.xsd
delete mode 100644 L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/datatables/csv/HennaTable.java
delete mode 100644 L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/datatables/sql/HennaTreeTable.java
create mode 100644 L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/datatables/xml/HennaData.java
delete mode 100644 L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/actor/instance/HennaInstance.java
create mode 100644 L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/clientpackets/RequestHennaItemRemoveInfo.java
create mode 100644 L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/clientpackets/RequestHennaRemove.java
create mode 100644 L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/clientpackets/RequestHennaRemoveList.java
create mode 100644 L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/serverpackets/GMViewHennaInfo.java
create mode 100644 L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/serverpackets/HennaItemRemoveInfo.java
create mode 100644 L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/serverpackets/HennaRemoveList.java
diff --git a/L2J_Mobius_C6_Interlude/dist/db_installer/sql/game/henna_trees.sql b/L2J_Mobius_C6_Interlude/dist/db_installer/sql/game/henna_trees.sql
deleted file mode 100644
index ab468ff78b..0000000000
--- a/L2J_Mobius_C6_Interlude/dist/db_installer/sql/game/henna_trees.sql
+++ /dev/null
@@ -1,7149 +0,0 @@
---
--- Table structure for henna_trees
---
-DROP TABLE IF EXISTS henna_trees;
-CREATE TABLE `henna_trees` (
- `class_id` decimal(10,0) NOT NULL default 0,
- `symbol_id` decimal(10,0) NOT NULL default 0,
- PRIMARY KEY (`class_id`,`symbol_id`)
-) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;
-
---
--- Records for table henna_trees
---
-
-insert into henna_trees values
-(1,1),
-(1,2),
-(1,3),
-(1,4),
-(1,5),
-(1,6),
-(1,8),
-(1,11),
-(1,13),
-(1,14),
-(1,15),
-(1,16),
-(1,17),
-(1,18),
-(1,20),
-(1,23),
-(1,25),
-(1,26),
-(1,27),
-(1,28),
-(1,29),
-(1,30),
-(1,32),
-(1,35),
-(2,37),
-(2,38),
-(2,39),
-(2,40),
-(2,41),
-(2,42),
-(2,44),
-(2,47),
-(2,49),
-(2,50),
-(2,51),
-(2,52),
-(2,53),
-(2,54),
-(2,56),
-(2,59),
-(2,61),
-(2,62),
-(2,63),
-(2,64),
-(2,65),
-(2,66),
-(2,68),
-(2,71),
-(2,73),
-(2,74),
-(2,75),
-(2,76),
-(2,77),
-(2,78),
-(2,80),
-(2,83),
-(2,85),
-(2,86),
-(2,87),
-(2,88),
-(2,89),
-(2,90),
-(2,92),
-(2,95),
-(2,97),
-(2,98),
-(2,99),
-(2,100),
-(2,101),
-(2,102),
-(2,104),
-(2,107),
-(2,109),
-(2,110),
-(2,111),
-(2,112),
-(2,113),
-(2,114),
-(2,116),
-(2,119),
-(2,121),
-(2,122),
-(2,123),
-(2,124),
-(2,125),
-(2,126),
-(2,128),
-(2,131),
-(2,133),
-(2,134),
-(2,135),
-(2,136),
-(2,137),
-(2,138),
-(2,140),
-(2,143),
-(2,145),
-(2,146),
-(2,147),
-(2,148),
-(2,149),
-(2,150),
-(2,152),
-(2,155),
-(2,157),
-(2,158),
-(2,159),
-(2,160),
-(2,161),
-(2,162),
-(2,164),
-(2,167),
-(2,169),
-(2,170),
-(2,171),
-(2,172),
-(2,173),
-(2,174),
-(2,176),
-(2,179),
-(3,37),
-(3,38),
-(3,39),
-(3,40),
-(3,41),
-(3,42),
-(3,44),
-(3,47),
-(3,49),
-(3,50),
-(3,51),
-(3,52),
-(3,53),
-(3,54),
-(3,56),
-(3,59),
-(3,61),
-(3,62),
-(3,63),
-(3,64),
-(3,65),
-(3,66),
-(3,68),
-(3,71),
-(3,73),
-(3,74),
-(3,75),
-(3,76),
-(3,77),
-(3,78),
-(3,80),
-(3,83),
-(3,85),
-(3,86),
-(3,87),
-(3,88),
-(3,89),
-(3,90),
-(3,92),
-(3,95),
-(3,97),
-(3,98),
-(3,99),
-(3,100),
-(3,101),
-(3,102),
-(3,104),
-(3,107),
-(3,109),
-(3,110),
-(3,111),
-(3,112),
-(3,113),
-(3,114),
-(3,116),
-(3,119),
-(3,121),
-(3,122),
-(3,123),
-(3,124),
-(3,125),
-(3,126),
-(3,128),
-(3,131),
-(3,133),
-(3,134),
-(3,135),
-(3,136),
-(3,137),
-(3,138),
-(3,140),
-(3,143),
-(3,145),
-(3,146),
-(3,147),
-(3,148),
-(3,149),
-(3,150),
-(3,152),
-(3,155),
-(3,157),
-(3,158),
-(3,159),
-(3,160),
-(3,161),
-(3,162),
-(3,164),
-(3,167),
-(3,169),
-(3,170),
-(3,171),
-(3,172),
-(3,173),
-(3,174),
-(3,176),
-(3,179),
-(4,1),
-(4,2),
-(4,3),
-(4,4),
-(4,5),
-(4,6),
-(4,8),
-(4,11),
-(4,13),
-(4,14),
-(4,15),
-(4,16),
-(4,17),
-(4,18),
-(4,20),
-(4,23),
-(4,25),
-(4,26),
-(4,27),
-(4,28),
-(4,29),
-(4,30),
-(4,32),
-(4,35),
-(5,37),
-(5,38),
-(5,39),
-(5,40),
-(5,41),
-(5,42),
-(5,44),
-(5,47),
-(5,49),
-(5,50),
-(5,51),
-(5,52),
-(5,53),
-(5,54),
-(5,56),
-(5,59),
-(5,61),
-(5,62),
-(5,63),
-(5,64),
-(5,65),
-(5,66),
-(5,68),
-(5,71),
-(5,73),
-(5,74),
-(5,75),
-(5,76),
-(5,77),
-(5,78),
-(5,80),
-(5,83),
-(5,85),
-(5,86),
-(5,87),
-(5,88),
-(5,89),
-(5,90),
-(5,92),
-(5,95),
-(5,97),
-(5,98),
-(5,99),
-(5,100),
-(5,101),
-(5,102),
-(5,104),
-(5,107),
-(5,109),
-(5,110),
-(5,111),
-(5,112),
-(5,113),
-(5,114),
-(5,116),
-(5,119),
-(5,121),
-(5,122),
-(5,123),
-(5,124),
-(5,125),
-(5,126),
-(5,128),
-(5,131),
-(5,133),
-(5,134),
-(5,135),
-(5,136),
-(5,137),
-(5,138),
-(5,140),
-(5,143),
-(5,145),
-(5,146),
-(5,147),
-(5,148),
-(5,149),
-(5,150),
-(5,152),
-(5,155),
-(5,157),
-(5,158),
-(5,159),
-(5,160),
-(5,161),
-(5,162),
-(5,164),
-(5,167),
-(5,169),
-(5,170),
-(5,171),
-(5,172),
-(5,173),
-(5,174),
-(5,176),
-(5,179),
-(6,37),
-(6,38),
-(6,39),
-(6,40),
-(6,41),
-(6,42),
-(6,44),
-(6,47),
-(6,49),
-(6,50),
-(6,51),
-(6,52),
-(6,53),
-(6,54),
-(6,56),
-(6,59),
-(6,61),
-(6,62),
-(6,63),
-(6,64),
-(6,65),
-(6,66),
-(6,68),
-(6,71),
-(6,73),
-(6,74),
-(6,75),
-(6,76),
-(6,77),
-(6,78),
-(6,80),
-(6,83),
-(6,85),
-(6,86),
-(6,87),
-(6,88),
-(6,89),
-(6,90),
-(6,92),
-(6,95),
-(6,97),
-(6,98),
-(6,99),
-(6,100),
-(6,101),
-(6,102),
-(6,104),
-(6,107),
-(6,109),
-(6,110),
-(6,111),
-(6,112),
-(6,113),
-(6,114),
-(6,116),
-(6,119),
-(6,121),
-(6,122),
-(6,123),
-(6,124),
-(6,125),
-(6,126),
-(6,128),
-(6,131),
-(6,133),
-(6,134),
-(6,135),
-(6,136),
-(6,137),
-(6,138),
-(6,140),
-(6,143),
-(6,145),
-(6,146),
-(6,147),
-(6,148),
-(6,149),
-(6,150),
-(6,152),
-(6,155),
-(6,157),
-(6,158),
-(6,159),
-(6,160),
-(6,161),
-(6,162),
-(6,164),
-(6,167),
-(6,169),
-(6,170),
-(6,171),
-(6,172),
-(6,173),
-(6,174),
-(6,176),
-(6,179),
-(7,1),
-(7,2),
-(7,3),
-(7,4),
-(7,5),
-(7,6),
-(7,8),
-(7,11),
-(7,13),
-(7,14),
-(7,15),
-(7,16),
-(7,17),
-(7,18),
-(7,20),
-(7,23),
-(7,25),
-(7,26),
-(7,27),
-(7,28),
-(7,29),
-(7,30),
-(7,32),
-(7,35),
-(8,37),
-(8,38),
-(8,39),
-(8,40),
-(8,41),
-(8,42),
-(8,44),
-(8,47),
-(8,49),
-(8,50),
-(8,51),
-(8,52),
-(8,53),
-(8,54),
-(8,56),
-(8,59),
-(8,61),
-(8,62),
-(8,63),
-(8,64),
-(8,65),
-(8,66),
-(8,68),
-(8,71),
-(8,73),
-(8,74),
-(8,75),
-(8,76),
-(8,77),
-(8,78),
-(8,80),
-(8,83),
-(8,85),
-(8,86),
-(8,87),
-(8,88),
-(8,89),
-(8,90),
-(8,92),
-(8,95),
-(8,97),
-(8,98),
-(8,99),
-(8,100),
-(8,101),
-(8,102),
-(8,104),
-(8,107),
-(8,109),
-(8,110),
-(8,111),
-(8,112),
-(8,113),
-(8,114),
-(8,116),
-(8,119),
-(8,121),
-(8,122),
-(8,123),
-(8,124),
-(8,125),
-(8,126),
-(8,128),
-(8,131),
-(8,133),
-(8,134),
-(8,135),
-(8,136),
-(8,137),
-(8,138),
-(8,140),
-(8,143),
-(8,145),
-(8,146),
-(8,147),
-(8,148),
-(8,149),
-(8,150),
-(8,152),
-(8,155),
-(8,157),
-(8,158),
-(8,159),
-(8,160),
-(8,161),
-(8,162),
-(8,164),
-(8,167),
-(8,169),
-(8,170),
-(8,171),
-(8,172),
-(8,173),
-(8,174),
-(8,176),
-(8,179),
-(9,37),
-(9,38),
-(9,39),
-(9,40),
-(9,41),
-(9,42),
-(9,44),
-(9,47),
-(9,49),
-(9,50),
-(9,51),
-(9,52),
-(9,53),
-(9,54),
-(9,56),
-(9,59),
-(9,61),
-(9,62),
-(9,63),
-(9,64),
-(9,65),
-(9,66),
-(9,68),
-(9,71),
-(9,73),
-(9,74),
-(9,75),
-(9,76),
-(9,77),
-(9,78),
-(9,80),
-(9,83),
-(9,85),
-(9,86),
-(9,87),
-(9,88),
-(9,89),
-(9,90),
-(9,92),
-(9,95),
-(9,97),
-(9,98),
-(9,99),
-(9,100),
-(9,101),
-(9,102),
-(9,104),
-(9,107),
-(9,109),
-(9,110),
-(9,111),
-(9,112),
-(9,113),
-(9,114),
-(9,116),
-(9,119),
-(9,121),
-(9,122),
-(9,123),
-(9,124),
-(9,125),
-(9,126),
-(9,128),
-(9,131),
-(9,133),
-(9,134),
-(9,135),
-(9,136),
-(9,137),
-(9,138),
-(9,140),
-(9,143),
-(9,145),
-(9,146),
-(9,147),
-(9,148),
-(9,149),
-(9,150),
-(9,152),
-(9,155),
-(9,157),
-(9,158),
-(9,159),
-(9,160),
-(9,161),
-(9,162),
-(9,164),
-(9,167),
-(9,169),
-(9,170),
-(9,171),
-(9,172),
-(9,173),
-(9,174),
-(9,176),
-(9,179),
-(10,1),
-(10,2),
-(10,3),
-(10,4),
-(10,5),
-(10,6),
-(10,7),
-(10,8),
-(10,9),
-(10,10),
-(10,11),
-(10,12),
-(10,13),
-(10,14),
-(10,15),
-(10,16),
-(10,17),
-(10,18),
-(10,19),
-(10,20),
-(10,21),
-(10,22),
-(10,23),
-(10,24),
-(10,25),
-(10,26),
-(10,27),
-(10,28),
-(10,29),
-(10,30),
-(10,31),
-(10,32),
-(10,33),
-(10,34),
-(10,35),
-(10,36),
-(11,1),
-(11,2),
-(11,3),
-(11,4),
-(11,5),
-(11,6),
-(11,7),
-(11,8),
-(11,9),
-(11,10),
-(11,11),
-(11,12),
-(11,13),
-(11,14),
-(11,15),
-(11,16),
-(11,17),
-(11,18),
-(11,19),
-(11,20),
-(11,21),
-(11,22),
-(11,23),
-(11,24),
-(11,25),
-(11,26),
-(11,27),
-(11,28),
-(11,29),
-(11,30),
-(11,31),
-(11,32),
-(11,33),
-(11,34),
-(11,35),
-(11,36),
-(12,37),
-(12,38),
-(12,39),
-(12,40),
-(12,41),
-(12,42),
-(12,43),
-(12,44),
-(12,45),
-(12,46),
-(12,47),
-(12,48),
-(12,49),
-(12,50),
-(12,51),
-(12,52),
-(12,53),
-(12,54),
-(12,55),
-(12,56),
-(12,57),
-(12,58),
-(12,59),
-(12,60),
-(12,61),
-(12,62),
-(12,63),
-(12,64),
-(12,65),
-(12,66),
-(12,67),
-(12,68),
-(12,69),
-(12,70),
-(12,71),
-(12,72),
-(12,73),
-(12,74),
-(12,75),
-(12,76),
-(12,77),
-(12,78),
-(12,79),
-(12,80),
-(12,81),
-(12,82),
-(12,83),
-(12,84),
-(12,85),
-(12,86),
-(12,87),
-(12,88),
-(12,89),
-(12,90),
-(12,91),
-(12,92),
-(12,93),
-(12,94),
-(12,95),
-(12,96),
-(12,97),
-(12,98),
-(12,99),
-(12,100),
-(12,101),
-(12,102),
-(12,103),
-(12,104),
-(12,105),
-(12,106),
-(12,107),
-(12,108),
-(12,109),
-(12,110),
-(12,111),
-(12,112),
-(12,113),
-(12,114),
-(12,115),
-(12,116),
-(12,117),
-(12,118),
-(12,119),
-(12,120),
-(12,121),
-(12,122),
-(12,123),
-(12,124),
-(12,125),
-(12,126),
-(12,127),
-(12,128),
-(12,129),
-(12,130),
-(12,131),
-(12,132),
-(12,133),
-(12,134),
-(12,135),
-(12,136),
-(12,137),
-(12,138),
-(12,139),
-(12,140),
-(12,141),
-(12,142),
-(12,143),
-(12,144),
-(12,145),
-(12,146),
-(12,147),
-(12,148),
-(12,149),
-(12,150),
-(12,151),
-(12,152),
-(12,153),
-(12,154),
-(12,155),
-(12,156),
-(12,157),
-(12,158),
-(12,159),
-(12,160),
-(12,161),
-(12,162),
-(12,163),
-(12,164),
-(12,165),
-(12,166),
-(12,167),
-(12,168),
-(12,169),
-(12,170),
-(12,171),
-(12,172),
-(12,173),
-(12,174),
-(12,175),
-(12,176),
-(12,177),
-(12,178),
-(12,179),
-(12,180),
-(13,37),
-(13,38),
-(13,39),
-(13,40),
-(13,41),
-(13,42),
-(13,43),
-(13,44),
-(13,45),
-(13,46),
-(13,47),
-(13,48),
-(13,49),
-(13,50),
-(13,51),
-(13,52),
-(13,53),
-(13,54),
-(13,55),
-(13,56),
-(13,57),
-(13,58),
-(13,59),
-(13,60),
-(13,61),
-(13,62),
-(13,63),
-(13,64),
-(13,65),
-(13,66),
-(13,67),
-(13,68),
-(13,69),
-(13,70),
-(13,71),
-(13,72),
-(13,73),
-(13,74),
-(13,75),
-(13,76),
-(13,77),
-(13,78),
-(13,79),
-(13,80),
-(13,81),
-(13,82),
-(13,83),
-(13,84),
-(13,85),
-(13,86),
-(13,87),
-(13,88),
-(13,89),
-(13,90),
-(13,91),
-(13,92),
-(13,93),
-(13,94),
-(13,95),
-(13,96),
-(13,97),
-(13,98),
-(13,99),
-(13,100),
-(13,101),
-(13,102),
-(13,103),
-(13,104),
-(13,105),
-(13,106),
-(13,107),
-(13,108),
-(13,109),
-(13,110),
-(13,111),
-(13,112),
-(13,113),
-(13,114),
-(13,115),
-(13,116),
-(13,117),
-(13,118),
-(13,119),
-(13,120),
-(13,121),
-(13,122),
-(13,123),
-(13,124),
-(13,125),
-(13,126),
-(13,127),
-(13,128),
-(13,129),
-(13,130),
-(13,131),
-(13,132),
-(13,133),
-(13,134),
-(13,135),
-(13,136),
-(13,137),
-(13,138),
-(13,139),
-(13,140),
-(13,141),
-(13,142),
-(13,143),
-(13,144),
-(13,145),
-(13,146),
-(13,147),
-(13,148),
-(13,149),
-(13,150),
-(13,151),
-(13,152),
-(13,153),
-(13,154),
-(13,155),
-(13,156),
-(13,157),
-(13,158),
-(13,159),
-(13,160),
-(13,161),
-(13,162),
-(13,163),
-(13,164),
-(13,165),
-(13,166),
-(13,167),
-(13,168),
-(13,169),
-(13,170),
-(13,171),
-(13,172);
-
-insert into henna_trees values
-(13,173),
-(13,174),
-(13,175),
-(13,176),
-(13,177),
-(13,178),
-(13,179),
-(13,180),
-(14,37),
-(14,38),
-(14,39),
-(14,40),
-(14,41),
-(14,42),
-(14,43),
-(14,44),
-(14,45),
-(14,46),
-(14,47),
-(14,48),
-(14,49),
-(14,50),
-(14,51),
-(14,52),
-(14,53),
-(14,54),
-(14,55),
-(14,56),
-(14,57),
-(14,58),
-(14,59),
-(14,60),
-(14,61),
-(14,62),
-(14,63),
-(14,64),
-(14,65),
-(14,66),
-(14,67),
-(14,68),
-(14,69),
-(14,70),
-(14,71),
-(14,72),
-(14,73),
-(14,74),
-(14,75),
-(14,76),
-(14,77),
-(14,78),
-(14,79),
-(14,80),
-(14,81),
-(14,82),
-(14,83),
-(14,84),
-(14,85),
-(14,86),
-(14,87),
-(14,88),
-(14,89),
-(14,90),
-(14,91),
-(14,92),
-(14,93),
-(14,94),
-(14,95),
-(14,96),
-(14,97),
-(14,98),
-(14,99),
-(14,100),
-(14,101),
-(14,102),
-(14,103),
-(14,104),
-(14,105),
-(14,106),
-(14,107),
-(14,108),
-(14,109),
-(14,110),
-(14,111),
-(14,112),
-(14,113),
-(14,114),
-(14,115),
-(14,116),
-(14,117),
-(14,118),
-(14,119),
-(14,120),
-(14,121),
-(14,122),
-(14,123),
-(14,124),
-(14,125),
-(14,126),
-(14,127),
-(14,128),
-(14,129),
-(14,130),
-(14,131),
-(14,132),
-(14,133),
-(14,134),
-(14,135),
-(14,136),
-(14,137),
-(14,138),
-(14,139),
-(14,140),
-(14,141),
-(14,142),
-(14,143),
-(14,144),
-(14,145),
-(14,146),
-(14,147),
-(14,148),
-(14,149),
-(14,150),
-(14,151),
-(14,152),
-(14,153),
-(14,154),
-(14,155),
-(14,156),
-(14,157),
-(14,158),
-(14,159),
-(14,160),
-(14,161),
-(14,162),
-(14,163),
-(14,164),
-(14,165),
-(14,166),
-(14,167),
-(14,168),
-(14,169),
-(14,170),
-(14,171),
-(14,172),
-(14,173),
-(14,174),
-(14,175),
-(14,176),
-(14,177),
-(14,178),
-(14,179),
-(14,180),
-(15,1),
-(15,2),
-(15,3),
-(15,4),
-(15,5),
-(15,6),
-(15,10),
-(15,12),
-(15,13),
-(15,14),
-(15,15),
-(15,16),
-(15,17),
-(15,18),
-(15,22),
-(15,24),
-(15,25),
-(15,26),
-(15,27),
-(15,28),
-(15,29),
-(15,30),
-(15,34),
-(15,36),
-(16,37),
-(16,38),
-(16,39),
-(16,40),
-(16,41),
-(16,42),
-(16,46),
-(16,48),
-(16,49),
-(16,50),
-(16,51),
-(16,52),
-(16,53),
-(16,54),
-(16,58),
-(16,60),
-(16,61),
-(16,62),
-(16,63),
-(16,64),
-(16,65),
-(16,66),
-(16,70),
-(16,72),
-(16,73),
-(16,74),
-(16,75),
-(16,76),
-(16,77),
-(16,78),
-(16,82),
-(16,84),
-(16,85),
-(16,86),
-(16,87),
-(16,88),
-(16,89),
-(16,90),
-(16,94),
-(16,96),
-(16,97),
-(16,98),
-(16,99),
-(16,100),
-(16,101),
-(16,102),
-(16,106),
-(16,108),
-(16,109),
-(16,110),
-(16,111),
-(16,112),
-(16,113),
-(16,114),
-(16,118),
-(16,120),
-(16,121),
-(16,122),
-(16,123),
-(16,124),
-(16,125),
-(16,126),
-(16,130),
-(16,132),
-(16,133),
-(16,134),
-(16,135),
-(16,136),
-(16,137),
-(16,138),
-(16,142),
-(16,144),
-(16,145),
-(16,146),
-(16,147),
-(16,148),
-(16,149),
-(16,150),
-(16,154),
-(16,156),
-(16,157),
-(16,158),
-(16,159),
-(16,160),
-(16,161),
-(16,162),
-(16,166),
-(16,168),
-(16,169),
-(16,170),
-(16,171),
-(16,172),
-(16,173),
-(16,174),
-(16,178),
-(16,180),
-(17,37),
-(17,38),
-(17,39),
-(17,40),
-(17,41),
-(17,42),
-(17,46),
-(17,48),
-(17,49),
-(17,50),
-(17,51),
-(17,52),
-(17,53),
-(17,54),
-(17,58),
-(17,60),
-(17,61),
-(17,62),
-(17,63),
-(17,64),
-(17,65),
-(17,66),
-(17,70),
-(17,72),
-(17,73),
-(17,74),
-(17,75),
-(17,76),
-(17,77),
-(17,78),
-(17,82),
-(17,84),
-(17,85),
-(17,86),
-(17,87),
-(17,88),
-(17,89),
-(17,90),
-(17,94),
-(17,96),
-(17,97),
-(17,98),
-(17,99),
-(17,100),
-(17,101),
-(17,102),
-(17,106),
-(17,108),
-(17,109),
-(17,110),
-(17,111),
-(17,112),
-(17,113),
-(17,114),
-(17,118),
-(17,120),
-(17,121),
-(17,122),
-(17,123),
-(17,124),
-(17,125),
-(17,126),
-(17,130),
-(17,132),
-(17,133),
-(17,134),
-(17,135),
-(17,136),
-(17,137),
-(17,138),
-(17,142),
-(17,144),
-(17,145),
-(17,146),
-(17,147),
-(17,148),
-(17,149),
-(17,150),
-(17,154),
-(17,156),
-(17,157),
-(17,158),
-(17,159),
-(17,160),
-(17,161),
-(17,162),
-(17,166),
-(17,168),
-(17,169),
-(17,170),
-(17,171),
-(17,172),
-(17,173),
-(17,174),
-(17,178),
-(17,180),
-(19,1),
-(19,2),
-(19,3),
-(19,4),
-(19,5),
-(19,6),
-(19,8),
-(19,11),
-(19,13),
-(19,14),
-(19,15),
-(19,16),
-(19,17),
-(19,18),
-(19,20),
-(19,23),
-(19,25),
-(19,26),
-(19,27),
-(19,28),
-(19,29),
-(19,30),
-(19,32),
-(19,35),
-(20,37),
-(20,38),
-(20,39),
-(20,40),
-(20,41),
-(20,42),
-(20,44),
-(20,47),
-(20,49),
-(20,50),
-(20,51),
-(20,52),
-(20,53),
-(20,54),
-(20,56),
-(20,59),
-(20,61),
-(20,62),
-(20,63),
-(20,64),
-(20,65),
-(20,66),
-(20,68),
-(20,71),
-(20,73),
-(20,74),
-(20,75),
-(20,76),
-(20,77),
-(20,78),
-(20,80),
-(20,83),
-(20,85),
-(20,86),
-(20,87),
-(20,88),
-(20,89),
-(20,90),
-(20,92),
-(20,95),
-(20,97),
-(20,98),
-(20,99),
-(20,100),
-(20,101),
-(20,102),
-(20,104),
-(20,107),
-(20,109),
-(20,110),
-(20,111),
-(20,112),
-(20,113),
-(20,114),
-(20,116),
-(20,119),
-(20,121),
-(20,122),
-(20,123),
-(20,124),
-(20,125),
-(20,126),
-(20,128),
-(20,131),
-(20,133),
-(20,134),
-(20,135),
-(20,136),
-(20,137),
-(20,138),
-(20,140),
-(20,143),
-(20,145),
-(20,146),
-(20,147),
-(20,148),
-(20,149),
-(20,150),
-(20,152),
-(20,155),
-(20,157),
-(20,158),
-(20,159),
-(20,160),
-(20,161),
-(20,162),
-(20,164),
-(20,167),
-(20,169),
-(20,170),
-(20,171),
-(20,172),
-(20,173),
-(20,174),
-(20,176),
-(20,179),
-(21,37),
-(21,38),
-(21,39),
-(21,40),
-(21,41),
-(21,42),
-(21,44),
-(21,47),
-(21,49),
-(21,50),
-(21,51),
-(21,52),
-(21,53),
-(21,54),
-(21,56),
-(21,59),
-(21,61),
-(21,62),
-(21,63),
-(21,64),
-(21,65),
-(21,66),
-(21,68),
-(21,71),
-(21,73),
-(21,74),
-(21,75),
-(21,76),
-(21,77),
-(21,78),
-(21,80),
-(21,83),
-(21,85),
-(21,86),
-(21,87),
-(21,88),
-(21,89),
-(21,90),
-(21,92),
-(21,95),
-(21,97),
-(21,98),
-(21,99),
-(21,100),
-(21,101),
-(21,102),
-(21,104),
-(21,107),
-(21,109),
-(21,110),
-(21,111),
-(21,112),
-(21,113),
-(21,114),
-(21,116),
-(21,119),
-(21,121),
-(21,122),
-(21,123),
-(21,124),
-(21,125),
-(21,126),
-(21,128),
-(21,131),
-(21,133),
-(21,134),
-(21,135),
-(21,136),
-(21,137),
-(21,138),
-(21,140),
-(21,143),
-(21,145),
-(21,146),
-(21,147),
-(21,148),
-(21,149),
-(21,150),
-(21,152),
-(21,155),
-(21,157),
-(21,158),
-(21,159),
-(21,160),
-(21,161),
-(21,162),
-(21,164),
-(21,167),
-(21,169),
-(21,170),
-(21,171),
-(21,172),
-(21,173),
-(21,174),
-(21,176),
-(21,179),
-(22,1),
-(22,2),
-(22,3),
-(22,4),
-(22,5),
-(22,6),
-(22,8),
-(22,11),
-(22,13),
-(22,14),
-(22,15),
-(22,16),
-(22,17),
-(22,18),
-(22,20),
-(22,23),
-(22,25),
-(22,26),
-(22,27),
-(22,28),
-(22,29),
-(22,30),
-(22,32),
-(22,35),
-(23,37),
-(23,38),
-(23,39),
-(23,40),
-(23,41),
-(23,42),
-(23,44),
-(23,47),
-(23,49),
-(23,50),
-(23,51),
-(23,52),
-(23,53),
-(23,54),
-(23,56),
-(23,59),
-(23,61),
-(23,62),
-(23,63),
-(23,64),
-(23,65),
-(23,66),
-(23,68),
-(23,71),
-(23,73),
-(23,74),
-(23,75),
-(23,76),
-(23,77),
-(23,78),
-(23,80),
-(23,83),
-(23,85),
-(23,86),
-(23,87),
-(23,88),
-(23,89),
-(23,90),
-(23,92),
-(23,95),
-(23,97),
-(23,98),
-(23,99),
-(23,100),
-(23,101),
-(23,102),
-(23,104),
-(23,107),
-(23,109),
-(23,110),
-(23,111),
-(23,112),
-(23,113),
-(23,114),
-(23,116),
-(23,119),
-(23,121),
-(23,122),
-(23,123),
-(23,124),
-(23,125),
-(23,126),
-(23,128),
-(23,131),
-(23,133),
-(23,134),
-(23,135),
-(23,136),
-(23,137),
-(23,138),
-(23,140),
-(23,143),
-(23,145),
-(23,146),
-(23,147),
-(23,148),
-(23,149),
-(23,150),
-(23,152),
-(23,155),
-(23,157),
-(23,158),
-(23,159),
-(23,160),
-(23,161),
-(23,162),
-(23,164),
-(23,167),
-(23,169),
-(23,170),
-(23,171),
-(23,172),
-(23,173),
-(23,174),
-(23,176),
-(23,179),
-(24,37),
-(24,38),
-(24,39),
-(24,40),
-(24,41),
-(24,42),
-(24,44),
-(24,47),
-(24,49),
-(24,50),
-(24,51),
-(24,52),
-(24,53),
-(24,54),
-(24,56),
-(24,59),
-(24,61),
-(24,62),
-(24,63),
-(24,64),
-(24,65),
-(24,66),
-(24,68),
-(24,71),
-(24,73),
-(24,74),
-(24,75),
-(24,76),
-(24,77),
-(24,78),
-(24,80),
-(24,83),
-(24,85),
-(24,86),
-(24,87),
-(24,88),
-(24,89),
-(24,90),
-(24,92),
-(24,95),
-(24,97),
-(24,98),
-(24,99),
-(24,100),
-(24,101),
-(24,102),
-(24,104),
-(24,107),
-(24,109),
-(24,110),
-(24,111),
-(24,112),
-(24,113),
-(24,114),
-(24,116),
-(24,119),
-(24,121),
-(24,122),
-(24,123),
-(24,124),
-(24,125),
-(24,126),
-(24,128),
-(24,131),
-(24,133),
-(24,134),
-(24,135),
-(24,136),
-(24,137),
-(24,138),
-(24,140),
-(24,143),
-(24,145),
-(24,146),
-(24,147),
-(24,148),
-(24,149),
-(24,150),
-(24,152),
-(24,155),
-(24,157),
-(24,158),
-(24,159),
-(24,160),
-(24,161),
-(24,162),
-(24,164),
-(24,167),
-(24,169),
-(24,170),
-(24,171),
-(24,172),
-(24,173),
-(24,174),
-(24,176),
-(24,179),
-(26,1),
-(26,2),
-(26,3),
-(26,4),
-(26,5),
-(26,6),
-(26,7),
-(26,8),
-(26,9),
-(26,10),
-(26,11),
-(26,12),
-(26,13),
-(26,14),
-(26,15),
-(26,16),
-(26,17),
-(26,18),
-(26,19),
-(26,20),
-(26,21),
-(26,22),
-(26,23),
-(26,24),
-(26,25),
-(26,26),
-(26,27),
-(26,28),
-(26,29),
-(26,30),
-(26,31),
-(26,32),
-(26,33),
-(26,34),
-(26,35),
-(26,36),
-(27,37),
-(27,38),
-(27,39),
-(27,40),
-(27,41),
-(27,42),
-(27,43),
-(27,44),
-(27,45),
-(27,46),
-(27,47),
-(27,48),
-(27,49),
-(27,50),
-(27,51),
-(27,52),
-(27,53),
-(27,54),
-(27,55),
-(27,56),
-(27,57),
-(27,58),
-(27,59),
-(27,60),
-(27,61),
-(27,62),
-(27,63),
-(27,64),
-(27,65),
-(27,66),
-(27,67),
-(27,68),
-(27,69),
-(27,70),
-(27,71),
-(27,72),
-(27,73),
-(27,74),
-(27,75),
-(27,76),
-(27,77),
-(27,78),
-(27,79),
-(27,80),
-(27,81),
-(27,82),
-(27,83),
-(27,84),
-(27,85),
-(27,86),
-(27,87),
-(27,88),
-(27,89),
-(27,90),
-(27,91),
-(27,92),
-(27,93),
-(27,94),
-(27,95),
-(27,96),
-(27,97),
-(27,98),
-(27,99),
-(27,100),
-(27,101),
-(27,102),
-(27,103),
-(27,104),
-(27,105),
-(27,106),
-(27,107),
-(27,108),
-(27,109),
-(27,110),
-(27,111),
-(27,112),
-(27,113),
-(27,114),
-(27,115),
-(27,116),
-(27,117),
-(27,118),
-(27,119),
-(27,120),
-(27,121),
-(27,122),
-(27,123),
-(27,124),
-(27,125),
-(27,126),
-(27,127),
-(27,128),
-(27,129),
-(27,130),
-(27,131),
-(27,132),
-(27,133),
-(27,134),
-(27,135),
-(27,136),
-(27,137),
-(27,138),
-(27,139),
-(27,140),
-(27,141),
-(27,142),
-(27,143),
-(27,144),
-(27,145),
-(27,146),
-(27,147),
-(27,148),
-(27,149),
-(27,150),
-(27,151),
-(27,152),
-(27,153),
-(27,154),
-(27,155),
-(27,156),
-(27,157),
-(27,158),
-(27,159),
-(27,160),
-(27,161),
-(27,162),
-(27,163),
-(27,164),
-(27,165),
-(27,166),
-(27,167),
-(27,168),
-(27,169),
-(27,170),
-(27,171),
-(27,172),
-(27,173),
-(27,174),
-(27,175),
-(27,176),
-(27,177),
-(27,178),
-(27,179),
-(27,180),
-(28,37),
-(28,38),
-(28,39),
-(28,40),
-(28,41),
-(28,42),
-(28,43),
-(28,44),
-(28,45),
-(28,46),
-(28,47),
-(28,48),
-(28,49),
-(28,50),
-(28,51),
-(28,52),
-(28,53),
-(28,54),
-(28,55),
-(28,56);
-
-insert into henna_trees values
-(28,57),
-(28,58),
-(28,59),
-(28,60),
-(28,61),
-(28,62),
-(28,63),
-(28,64),
-(28,65),
-(28,66),
-(28,67),
-(28,68),
-(28,69),
-(28,70),
-(28,71),
-(28,72),
-(28,73),
-(28,74),
-(28,75),
-(28,76),
-(28,77),
-(28,78),
-(28,79),
-(28,80),
-(28,81),
-(28,82),
-(28,83),
-(28,84),
-(28,85),
-(28,86),
-(28,87),
-(28,88),
-(28,89),
-(28,90),
-(28,91),
-(28,92),
-(28,93),
-(28,94),
-(28,95),
-(28,96),
-(28,97),
-(28,98),
-(28,99),
-(28,100),
-(28,101),
-(28,102),
-(28,103),
-(28,104),
-(28,105),
-(28,106),
-(28,107),
-(28,108),
-(28,109),
-(28,110),
-(28,111),
-(28,112),
-(28,113),
-(28,114),
-(28,115),
-(28,116),
-(28,117),
-(28,118),
-(28,119),
-(28,120),
-(28,121),
-(28,122),
-(28,123),
-(28,124),
-(28,125),
-(28,126),
-(28,127),
-(28,128),
-(28,129),
-(28,130),
-(28,131),
-(28,132),
-(28,133),
-(28,134),
-(28,135),
-(28,136),
-(28,137),
-(28,138),
-(28,139),
-(28,140),
-(28,141),
-(28,142),
-(28,143),
-(28,144),
-(28,145),
-(28,146),
-(28,147),
-(28,148),
-(28,149),
-(28,150),
-(28,151),
-(28,152),
-(28,153),
-(28,154),
-(28,155),
-(28,156),
-(28,157),
-(28,158),
-(28,159),
-(28,160),
-(28,161),
-(28,162),
-(28,163),
-(28,164),
-(28,165),
-(28,166),
-(28,167),
-(28,168),
-(28,169),
-(28,170),
-(28,171),
-(28,172),
-(28,173),
-(28,174),
-(28,175),
-(28,176),
-(28,177),
-(28,178),
-(28,179),
-(28,180),
-(29,1),
-(29,2),
-(29,3),
-(29,4),
-(29,5),
-(29,6),
-(29,10),
-(29,12),
-(29,13),
-(29,14),
-(29,15),
-(29,16),
-(29,17),
-(29,18),
-(29,22),
-(29,24),
-(29,25),
-(29,26),
-(29,27),
-(29,28),
-(29,29),
-(29,30),
-(29,34),
-(29,36),
-(30,37),
-(30,38),
-(30,39),
-(30,40),
-(30,41),
-(30,42),
-(30,46),
-(30,48),
-(30,49),
-(30,50),
-(30,51),
-(30,52),
-(30,53),
-(30,54),
-(30,58),
-(30,60),
-(30,61),
-(30,62),
-(30,63),
-(30,64),
-(30,65),
-(30,66),
-(30,70),
-(30,72),
-(30,73),
-(30,74),
-(30,75),
-(30,76),
-(30,77),
-(30,78),
-(30,82),
-(30,84),
-(30,85),
-(30,86),
-(30,87),
-(30,88),
-(30,89),
-(30,90),
-(30,94),
-(30,96),
-(30,97),
-(30,98),
-(30,99),
-(30,100),
-(30,101),
-(30,102),
-(30,106),
-(30,108),
-(30,109),
-(30,110),
-(30,111),
-(30,112),
-(30,113),
-(30,114),
-(30,118),
-(30,120),
-(30,121),
-(30,122),
-(30,123),
-(30,124),
-(30,125),
-(30,126),
-(30,130),
-(30,132),
-(30,133),
-(30,134),
-(30,135),
-(30,136),
-(30,137),
-(30,138),
-(30,142),
-(30,144),
-(30,145),
-(30,146),
-(30,147),
-(30,148),
-(30,149),
-(30,150),
-(30,154),
-(30,156),
-(30,157),
-(30,158),
-(30,159),
-(30,160),
-(30,161),
-(30,162),
-(30,166),
-(30,168),
-(30,169),
-(30,170),
-(30,171),
-(30,172),
-(30,173),
-(30,174),
-(30,178),
-(30,180),
-(32,1),
-(32,2),
-(32,3),
-(32,4),
-(32,5),
-(32,6),
-(32,8),
-(32,11),
-(32,13),
-(32,14),
-(32,15),
-(32,16),
-(32,17),
-(32,18),
-(32,20),
-(32,23),
-(32,25),
-(32,26),
-(32,27),
-(32,28),
-(32,29),
-(32,30),
-(32,32),
-(32,35),
-(33,37),
-(33,38),
-(33,39),
-(33,40),
-(33,41),
-(33,42),
-(33,44),
-(33,47),
-(33,49),
-(33,50),
-(33,51),
-(33,52),
-(33,53),
-(33,54),
-(33,56),
-(33,59),
-(33,61),
-(33,62),
-(33,63),
-(33,64),
-(33,65),
-(33,66),
-(33,68),
-(33,71),
-(33,73),
-(33,74),
-(33,75),
-(33,76),
-(33,77),
-(33,78),
-(33,80),
-(33,83),
-(33,85),
-(33,86),
-(33,87),
-(33,88),
-(33,89),
-(33,90),
-(33,92),
-(33,95),
-(33,97),
-(33,98),
-(33,99),
-(33,100),
-(33,101),
-(33,102),
-(33,104),
-(33,107),
-(33,109),
-(33,110),
-(33,111),
-(33,112),
-(33,113),
-(33,114),
-(33,116),
-(33,119),
-(33,121),
-(33,122),
-(33,123),
-(33,124),
-(33,125),
-(33,126),
-(33,128),
-(33,131),
-(33,133),
-(33,134),
-(33,135),
-(33,136),
-(33,137),
-(33,138),
-(33,140),
-(33,143),
-(33,145),
-(33,146),
-(33,147),
-(33,148),
-(33,149),
-(33,150),
-(33,152),
-(33,155),
-(33,157),
-(33,158),
-(33,159),
-(33,160),
-(33,161),
-(33,162),
-(33,164),
-(33,167),
-(33,169),
-(33,170),
-(33,171),
-(33,172),
-(33,173),
-(33,174),
-(33,176),
-(33,179),
-(34,37),
-(34,38),
-(34,39),
-(34,40),
-(34,41),
-(34,42),
-(34,44),
-(34,47),
-(34,49),
-(34,50),
-(34,51),
-(34,52),
-(34,53),
-(34,54),
-(34,56),
-(34,59),
-(34,61),
-(34,62),
-(34,63),
-(34,64),
-(34,65),
-(34,66),
-(34,68),
-(34,71),
-(34,73),
-(34,74),
-(34,75),
-(34,76),
-(34,77),
-(34,78),
-(34,80),
-(34,83),
-(34,85),
-(34,86),
-(34,87),
-(34,88),
-(34,89),
-(34,90),
-(34,92),
-(34,95),
-(34,97),
-(34,98),
-(34,99),
-(34,100),
-(34,101),
-(34,102),
-(34,104),
-(34,107),
-(34,109),
-(34,110),
-(34,111),
-(34,112),
-(34,113),
-(34,114),
-(34,116),
-(34,119),
-(34,121),
-(34,122),
-(34,123),
-(34,124),
-(34,125),
-(34,126),
-(34,128),
-(34,131),
-(34,133),
-(34,134),
-(34,135),
-(34,136),
-(34,137),
-(34,138),
-(34,140),
-(34,143),
-(34,145),
-(34,146),
-(34,147),
-(34,148),
-(34,149),
-(34,150),
-(34,152),
-(34,155),
-(34,157),
-(34,158),
-(34,159),
-(34,160),
-(34,161),
-(34,162),
-(34,164),
-(34,167),
-(34,169),
-(34,170),
-(34,171),
-(34,172),
-(34,173),
-(34,174),
-(34,176),
-(34,179),
-(35,1),
-(35,2),
-(35,3),
-(35,4),
-(35,5),
-(35,6),
-(35,8),
-(35,11),
-(35,13),
-(35,14),
-(35,15),
-(35,16),
-(35,17),
-(35,18),
-(35,20),
-(35,23),
-(35,25),
-(35,26),
-(35,27),
-(35,28),
-(35,29),
-(35,30),
-(35,32),
-(35,35),
-(36,37),
-(36,38),
-(36,39),
-(36,40),
-(36,41),
-(36,42),
-(36,44),
-(36,47),
-(36,49),
-(36,50),
-(36,51),
-(36,52),
-(36,53),
-(36,54),
-(36,56),
-(36,59),
-(36,61),
-(36,62),
-(36,63),
-(36,64),
-(36,65),
-(36,66),
-(36,68),
-(36,71),
-(36,73),
-(36,74),
-(36,75),
-(36,76),
-(36,77),
-(36,78),
-(36,80),
-(36,83),
-(36,85),
-(36,86),
-(36,87),
-(36,88),
-(36,89),
-(36,90),
-(36,92),
-(36,95),
-(36,97),
-(36,98),
-(36,99),
-(36,100),
-(36,101),
-(36,102),
-(36,104),
-(36,107),
-(36,109),
-(36,110),
-(36,111),
-(36,112),
-(36,113),
-(36,114),
-(36,116),
-(36,119),
-(36,121),
-(36,122),
-(36,123),
-(36,124),
-(36,125),
-(36,126),
-(36,128),
-(36,131),
-(36,133),
-(36,134),
-(36,135),
-(36,136),
-(36,137),
-(36,138),
-(36,140),
-(36,143),
-(36,145),
-(36,146),
-(36,147),
-(36,148),
-(36,149),
-(36,150),
-(36,152),
-(36,155),
-(36,157),
-(36,158),
-(36,159),
-(36,160),
-(36,161),
-(36,162),
-(36,164),
-(36,167),
-(36,169),
-(36,170),
-(36,171),
-(36,172),
-(36,173),
-(36,174),
-(36,176),
-(36,179),
-(37,37),
-(37,38),
-(37,39),
-(37,40),
-(37,41),
-(37,42),
-(37,44),
-(37,47),
-(37,49),
-(37,50),
-(37,51),
-(37,52),
-(37,53),
-(37,54),
-(37,56),
-(37,59),
-(37,61),
-(37,62),
-(37,63),
-(37,64),
-(37,65),
-(37,66),
-(37,68),
-(37,71),
-(37,73),
-(37,74),
-(37,75),
-(37,76),
-(37,77),
-(37,78),
-(37,80),
-(37,83),
-(37,85),
-(37,86),
-(37,87),
-(37,88),
-(37,89),
-(37,90),
-(37,92),
-(37,95),
-(37,97),
-(37,98),
-(37,99),
-(37,100),
-(37,101),
-(37,102),
-(37,104),
-(37,107),
-(37,109),
-(37,110),
-(37,111),
-(37,112),
-(37,113),
-(37,114),
-(37,116),
-(37,119),
-(37,121),
-(37,122),
-(37,123),
-(37,124),
-(37,125),
-(37,126),
-(37,128),
-(37,131),
-(37,133),
-(37,134),
-(37,135),
-(37,136),
-(37,137),
-(37,138),
-(37,140),
-(37,143),
-(37,145),
-(37,146),
-(37,147),
-(37,148),
-(37,149),
-(37,150),
-(37,152),
-(37,155),
-(37,157),
-(37,158),
-(37,159),
-(37,160),
-(37,161),
-(37,162),
-(37,164),
-(37,167),
-(37,169),
-(37,170),
-(37,171),
-(37,172),
-(37,173),
-(37,174),
-(37,176),
-(37,179),
-(39,1),
-(39,2),
-(39,3),
-(39,4),
-(39,5),
-(39,6),
-(39,7),
-(39,8),
-(39,9),
-(39,10),
-(39,11),
-(39,12),
-(39,13),
-(39,14),
-(39,15),
-(39,16),
-(39,17),
-(39,18),
-(39,19),
-(39,20),
-(39,21),
-(39,22),
-(39,23),
-(39,24),
-(39,25),
-(39,26),
-(39,27),
-(39,28),
-(39,29),
-(39,30),
-(39,31),
-(39,32),
-(39,33),
-(39,34),
-(39,35),
-(39,36),
-(40,37),
-(40,38),
-(40,39),
-(40,40),
-(40,41),
-(40,42),
-(40,43),
-(40,44),
-(40,45),
-(40,46),
-(40,47),
-(40,48),
-(40,49),
-(40,50),
-(40,51),
-(40,52),
-(40,53),
-(40,54),
-(40,55),
-(40,56),
-(40,57),
-(40,58),
-(40,59),
-(40,60),
-(40,61),
-(40,62),
-(40,63),
-(40,64),
-(40,65),
-(40,66),
-(40,67),
-(40,68),
-(40,69),
-(40,70),
-(40,71),
-(40,72),
-(40,73),
-(40,74),
-(40,75),
-(40,76),
-(40,77),
-(40,78),
-(40,79),
-(40,80),
-(40,81),
-(40,82),
-(40,83),
-(40,84),
-(40,85),
-(40,86),
-(40,87),
-(40,88),
-(40,89),
-(40,90),
-(40,91),
-(40,92),
-(40,93),
-(40,94),
-(40,95),
-(40,96),
-(40,97),
-(40,98),
-(40,99),
-(40,100),
-(40,101),
-(40,102),
-(40,103),
-(40,104),
-(40,105),
-(40,106),
-(40,107),
-(40,108),
-(40,109),
-(40,110),
-(40,111),
-(40,112),
-(40,113),
-(40,114),
-(40,115),
-(40,116),
-(40,117),
-(40,118),
-(40,119),
-(40,120),
-(40,121),
-(40,122),
-(40,123),
-(40,124),
-(40,125),
-(40,126),
-(40,127),
-(40,128),
-(40,129),
-(40,130),
-(40,131),
-(40,132),
-(40,133),
-(40,134),
-(40,135),
-(40,136),
-(40,137),
-(40,138),
-(40,139),
-(40,140),
-(40,141),
-(40,142),
-(40,143),
-(40,144),
-(40,145),
-(40,146),
-(40,147),
-(40,148),
-(40,149),
-(40,150),
-(40,151),
-(40,152),
-(40,153),
-(40,154),
-(40,155),
-(40,156),
-(40,157),
-(40,158),
-(40,159),
-(40,160),
-(40,161),
-(40,162),
-(40,163),
-(40,164),
-(40,165),
-(40,166),
-(40,167),
-(40,168),
-(40,169),
-(40,170),
-(40,171),
-(40,172),
-(40,173),
-(40,174),
-(40,175),
-(40,176),
-(40,177),
-(40,178),
-(40,179),
-(40,180),
-(41,37),
-(41,38),
-(41,39),
-(41,40),
-(41,41),
-(41,42),
-(41,43),
-(41,44),
-(41,45),
-(41,46),
-(41,47),
-(41,48),
-(41,49),
-(41,50),
-(41,51),
-(41,52),
-(41,53),
-(41,54),
-(41,55),
-(41,56),
-(41,57),
-(41,58),
-(41,59),
-(41,60),
-(41,61),
-(41,62),
-(41,63),
-(41,64),
-(41,65),
-(41,66),
-(41,67),
-(41,68),
-(41,69),
-(41,70),
-(41,71),
-(41,72),
-(41,73),
-(41,74),
-(41,75),
-(41,76),
-(41,77),
-(41,78),
-(41,79),
-(41,80),
-(41,81),
-(41,82),
-(41,83),
-(41,84),
-(41,85),
-(41,86),
-(41,87),
-(41,88),
-(41,89),
-(41,90),
-(41,91),
-(41,92),
-(41,93),
-(41,94),
-(41,95),
-(41,96),
-(41,97),
-(41,98),
-(41,99),
-(41,100),
-(41,101),
-(41,102),
-(41,103),
-(41,104),
-(41,105),
-(41,106),
-(41,107),
-(41,108),
-(41,109),
-(41,110),
-(41,111),
-(41,112),
-(41,113),
-(41,114),
-(41,115),
-(41,116),
-(41,117),
-(41,118),
-(41,119),
-(41,120),
-(41,121),
-(41,122),
-(41,123),
-(41,124),
-(41,125),
-(41,126),
-(41,127),
-(41,128),
-(41,129),
-(41,130),
-(41,131),
-(41,132),
-(41,133),
-(41,134),
-(41,135),
-(41,136),
-(41,137),
-(41,138),
-(41,139),
-(41,140),
-(41,141),
-(41,142),
-(41,143),
-(41,144),
-(41,145),
-(41,146),
-(41,147),
-(41,148),
-(41,149),
-(41,150),
-(41,151),
-(41,152),
-(41,153),
-(41,154),
-(41,155),
-(41,156),
-(41,157),
-(41,158),
-(41,159),
-(41,160),
-(41,161),
-(41,162),
-(41,163),
-(41,164),
-(41,165),
-(41,166),
-(41,167),
-(41,168),
-(41,169),
-(41,170),
-(41,171),
-(41,172),
-(41,173),
-(41,174),
-(41,175),
-(41,176),
-(41,177),
-(41,178),
-(41,179),
-(41,180);
-
-insert into henna_trees values
-(42,1),
-(42,2),
-(42,3),
-(42,4),
-(42,5),
-(42,6),
-(42,10),
-(42,12),
-(42,13),
-(42,14),
-(42,15),
-(42,16),
-(42,17),
-(42,18),
-(42,22),
-(42,24),
-(42,25),
-(42,26),
-(42,27),
-(42,28),
-(42,29),
-(42,30),
-(42,34),
-(42,36),
-(43,37),
-(43,38),
-(43,39),
-(43,40),
-(43,41),
-(43,42),
-(43,46),
-(43,48),
-(43,49),
-(43,50),
-(43,51),
-(43,52),
-(43,53),
-(43,54),
-(43,58),
-(43,60),
-(43,61),
-(43,62),
-(43,63),
-(43,64),
-(43,65),
-(43,66),
-(43,70),
-(43,72),
-(43,73),
-(43,74),
-(43,75),
-(43,76),
-(43,77),
-(43,78),
-(43,82),
-(43,84),
-(43,85),
-(43,86),
-(43,87),
-(43,88),
-(43,89),
-(43,90),
-(43,94),
-(43,96),
-(43,97),
-(43,98),
-(43,99),
-(43,100),
-(43,101),
-(43,102),
-(43,106),
-(43,108),
-(43,109),
-(43,110),
-(43,111),
-(43,112),
-(43,113),
-(43,114),
-(43,118),
-(43,120),
-(43,121),
-(43,122),
-(43,123),
-(43,124),
-(43,125),
-(43,126),
-(43,130),
-(43,132),
-(43,133),
-(43,134),
-(43,135),
-(43,136),
-(43,137),
-(43,138),
-(43,142),
-(43,144),
-(43,145),
-(43,146),
-(43,147),
-(43,148),
-(43,149),
-(43,150),
-(43,154),
-(43,156),
-(43,157),
-(43,158),
-(43,159),
-(43,160),
-(43,161),
-(43,162),
-(43,166),
-(43,168),
-(43,169),
-(43,170),
-(43,171),
-(43,172),
-(43,173),
-(43,174),
-(43,178),
-(43,180),
-(45,1),
-(45,2),
-(45,3),
-(45,4),
-(45,5),
-(45,6),
-(45,8),
-(45,11),
-(45,13),
-(45,14),
-(45,15),
-(45,16),
-(45,17),
-(45,18),
-(45,20),
-(45,23),
-(45,25),
-(45,26),
-(45,27),
-(45,28),
-(45,29),
-(45,30),
-(45,32),
-(45,35),
-(46,37),
-(46,38),
-(46,39),
-(46,40),
-(46,41),
-(46,42),
-(46,44),
-(46,47),
-(46,49),
-(46,50),
-(46,51),
-(46,52),
-(46,53),
-(46,54),
-(46,56),
-(46,59),
-(46,61),
-(46,62),
-(46,63),
-(46,64),
-(46,65),
-(46,66),
-(46,68),
-(46,71),
-(46,73),
-(46,74),
-(46,75),
-(46,76),
-(46,77),
-(46,78),
-(46,80),
-(46,83),
-(46,85),
-(46,86),
-(46,87),
-(46,88),
-(46,89),
-(46,90),
-(46,92),
-(46,95),
-(46,97),
-(46,98),
-(46,99),
-(46,100),
-(46,101),
-(46,102),
-(46,104),
-(46,107),
-(46,109),
-(46,110),
-(46,111),
-(46,112),
-(46,113),
-(46,114),
-(46,116),
-(46,119),
-(46,121),
-(46,122),
-(46,123),
-(46,124),
-(46,125),
-(46,126),
-(46,128),
-(46,131),
-(46,133),
-(46,134),
-(46,135),
-(46,136),
-(46,137),
-(46,138),
-(46,140),
-(46,143),
-(46,145),
-(46,146),
-(46,147),
-(46,148),
-(46,149),
-(46,150),
-(46,152),
-(46,155),
-(46,157),
-(46,158),
-(46,159),
-(46,160),
-(46,161),
-(46,162),
-(46,164),
-(46,167),
-(46,169),
-(46,170),
-(46,171),
-(46,172),
-(46,173),
-(46,174),
-(46,176),
-(46,179),
-(47,1),
-(47,2),
-(47,3),
-(47,4),
-(47,5),
-(47,6),
-(47,8),
-(47,11),
-(47,13),
-(47,14),
-(47,15),
-(47,16),
-(47,17),
-(47,18),
-(47,20),
-(47,23),
-(47,25),
-(47,26),
-(47,27),
-(47,28),
-(47,29),
-(47,30),
-(47,32),
-(47,35),
-(48,37),
-(48,38),
-(48,39),
-(48,40),
-(48,41),
-(48,42),
-(48,44),
-(48,47),
-(48,49),
-(48,50),
-(48,51),
-(48,52),
-(48,53),
-(48,54),
-(48,56),
-(48,59),
-(48,61),
-(48,62),
-(48,63),
-(48,64),
-(48,65),
-(48,66),
-(48,68),
-(48,71),
-(48,73),
-(48,74),
-(48,75),
-(48,76),
-(48,77),
-(48,78),
-(48,80),
-(48,83),
-(48,85),
-(48,86),
-(48,87),
-(48,88),
-(48,89),
-(48,90),
-(48,92),
-(48,95),
-(48,97),
-(48,98),
-(48,99),
-(48,100),
-(48,101),
-(48,102),
-(48,104),
-(48,107),
-(48,109),
-(48,110),
-(48,111),
-(48,112),
-(48,113),
-(48,114),
-(48,116),
-(48,119),
-(48,121),
-(48,122),
-(48,123),
-(48,124),
-(48,125),
-(48,126),
-(48,128),
-(48,131),
-(48,133),
-(48,134),
-(48,135),
-(48,136),
-(48,137),
-(48,138),
-(48,140),
-(48,143),
-(48,145),
-(48,146),
-(48,147),
-(48,148),
-(48,149),
-(48,150),
-(48,152),
-(48,155),
-(48,157),
-(48,158),
-(48,159),
-(48,160),
-(48,161),
-(48,162),
-(48,164),
-(48,167),
-(48,169),
-(48,170),
-(48,171),
-(48,172),
-(48,173),
-(48,174),
-(48,176),
-(48,179),
-(50,1),
-(50,2),
-(50,3),
-(50,4),
-(50,5),
-(50,6),
-(50,10),
-(50,12),
-(50,13),
-(50,14),
-(50,15),
-(50,16),
-(50,17),
-(50,18),
-(50,22),
-(50,24),
-(50,25),
-(50,26),
-(50,27),
-(50,28),
-(50,29),
-(50,30),
-(50,34),
-(50,36),
-(51,37),
-(51,38),
-(51,39),
-(51,40),
-(51,41),
-(51,42),
-(51,46),
-(51,48),
-(51,49),
-(51,50),
-(51,51),
-(51,52),
-(51,53),
-(51,54),
-(51,58),
-(51,60),
-(51,61),
-(51,62),
-(51,63),
-(51,64),
-(51,65),
-(51,66),
-(51,70),
-(51,72),
-(51,73),
-(51,74),
-(51,75),
-(51,76),
-(51,77),
-(51,78),
-(51,82),
-(51,84),
-(51,85),
-(51,86),
-(51,87),
-(51,88),
-(51,89),
-(51,90),
-(51,94),
-(51,96),
-(51,97),
-(51,98),
-(51,99),
-(51,100),
-(51,101),
-(51,102),
-(51,106),
-(51,108),
-(51,109),
-(51,110),
-(51,111),
-(51,112),
-(51,113),
-(51,114),
-(51,118),
-(51,120),
-(51,121),
-(51,122),
-(51,123),
-(51,124),
-(51,125),
-(51,126),
-(51,130),
-(51,132),
-(51,133),
-(51,134),
-(51,135),
-(51,136),
-(51,137),
-(51,138),
-(51,142),
-(51,144),
-(51,145),
-(51,146),
-(51,147),
-(51,148),
-(51,149),
-(51,150),
-(51,154),
-(51,156),
-(51,157),
-(51,158),
-(51,159),
-(51,160),
-(51,161),
-(51,162),
-(51,166),
-(51,168),
-(51,169),
-(51,170),
-(51,171),
-(51,172),
-(51,173),
-(51,174),
-(51,178),
-(51,180),
-(52,37),
-(52,38),
-(52,39),
-(52,40),
-(52,41),
-(52,42),
-(52,46),
-(52,48),
-(52,49),
-(52,50),
-(52,51),
-(52,52),
-(52,53),
-(52,54),
-(52,58),
-(52,60),
-(52,61),
-(52,62),
-(52,63),
-(52,64),
-(52,65),
-(52,66),
-(52,70),
-(52,72),
-(52,73),
-(52,74),
-(52,75),
-(52,76),
-(52,77),
-(52,78),
-(52,82),
-(52,84),
-(52,85),
-(52,86),
-(52,87),
-(52,88),
-(52,89),
-(52,90),
-(52,94),
-(52,96),
-(52,97),
-(52,98),
-(52,99),
-(52,100),
-(52,101),
-(52,102),
-(52,106),
-(52,108),
-(52,109),
-(52,110),
-(52,111),
-(52,112),
-(52,113),
-(52,114),
-(52,118),
-(52,120),
-(52,121),
-(52,122),
-(52,123),
-(52,124),
-(52,125),
-(52,126),
-(52,130),
-(52,132),
-(52,133),
-(52,134),
-(52,135),
-(52,136),
-(52,137),
-(52,138),
-(52,142),
-(52,144),
-(52,145),
-(52,146),
-(52,147),
-(52,148),
-(52,149),
-(52,150),
-(52,154),
-(52,156),
-(52,157),
-(52,158),
-(52,159),
-(52,160),
-(52,161),
-(52,162),
-(52,166),
-(52,168),
-(52,169),
-(52,170),
-(52,171),
-(52,172),
-(52,173),
-(52,174),
-(52,178),
-(52,180),
-(54,1),
-(54,2),
-(54,3),
-(54,4),
-(54,5),
-(54,6),
-(54,8),
-(54,11),
-(54,13),
-(54,14),
-(54,15),
-(54,16),
-(54,17),
-(54,18),
-(54,20),
-(54,23),
-(54,25),
-(54,26),
-(54,27),
-(54,28),
-(54,29),
-(54,30),
-(54,32),
-(54,35),
-(55,37),
-(55,38),
-(55,39),
-(55,40),
-(55,41),
-(55,42),
-(55,44),
-(55,47),
-(55,49),
-(55,50),
-(55,51),
-(55,52),
-(55,53),
-(55,54),
-(55,56),
-(55,59),
-(55,61),
-(55,62),
-(55,63),
-(55,64),
-(55,65),
-(55,66),
-(55,68),
-(55,71),
-(55,73),
-(55,74),
-(55,75),
-(55,76),
-(55,77),
-(55,78),
-(55,80),
-(55,83),
-(55,85),
-(55,86),
-(55,87),
-(55,88),
-(55,89),
-(55,90),
-(55,92),
-(55,95),
-(55,97),
-(55,98),
-(55,99),
-(55,100),
-(55,101),
-(55,102),
-(55,104),
-(55,107),
-(55,109),
-(55,110),
-(55,111),
-(55,112),
-(55,113),
-(55,114),
-(55,116),
-(55,119),
-(55,121),
-(55,122),
-(55,123),
-(55,124),
-(55,125),
-(55,126),
-(55,128),
-(55,131),
-(55,133),
-(55,134),
-(55,135),
-(55,136),
-(55,137),
-(55,138),
-(55,140),
-(55,143),
-(55,145),
-(55,146),
-(55,147),
-(55,148),
-(55,149),
-(55,150),
-(55,152),
-(55,155),
-(55,157),
-(55,158),
-(55,159),
-(55,160),
-(55,161),
-(55,162),
-(55,164),
-(55,167),
-(55,169),
-(55,170),
-(55,171),
-(55,172),
-(55,173),
-(55,174),
-(55,176),
-(55,179),
-(56,1),
-(56,2),
-(56,3),
-(56,4),
-(56,5),
-(56,6),
-(56,8),
-(56,11),
-(56,13),
-(56,14),
-(56,15),
-(56,16),
-(56,17),
-(56,18),
-(56,20),
-(56,23),
-(56,25),
-(56,26),
-(56,27),
-(56,28),
-(56,29),
-(56,30),
-(56,32),
-(56,35),
-(57,37),
-(57,38),
-(57,39),
-(57,40),
-(57,41),
-(57,42),
-(57,44),
-(57,47),
-(57,49),
-(57,50),
-(57,51),
-(57,52),
-(57,53),
-(57,54),
-(57,56),
-(57,59),
-(57,61),
-(57,62),
-(57,63),
-(57,64),
-(57,65),
-(57,66),
-(57,68),
-(57,71),
-(57,73),
-(57,74),
-(57,75),
-(57,76),
-(57,77),
-(57,78),
-(57,80),
-(57,83),
-(57,85),
-(57,86),
-(57,87),
-(57,88),
-(57,89),
-(57,90),
-(57,92),
-(57,95),
-(57,97),
-(57,98),
-(57,99),
-(57,100),
-(57,101),
-(57,102),
-(57,104),
-(57,107),
-(57,109),
-(57,110),
-(57,111),
-(57,112),
-(57,113),
-(57,114),
-(57,116),
-(57,119),
-(57,121),
-(57,122),
-(57,123),
-(57,124),
-(57,125),
-(57,126),
-(57,128),
-(57,131),
-(57,133),
-(57,134),
-(57,135),
-(57,136),
-(57,137),
-(57,138),
-(57,140),
-(57,143),
-(57,145),
-(57,146),
-(57,147),
-(57,148),
-(57,149),
-(57,150),
-(57,152),
-(57,155),
-(57,157),
-(57,158),
-(57,159),
-(57,160),
-(57,161),
-(57,162),
-(57,164),
-(57,167),
-(57,169),
-(57,170),
-(57,171),
-(57,172),
-(57,173),
-(57,174),
-(57,176),
-(57,179),
-(88,37),
-(88,38),
-(88,39),
-(88,40),
-(88,41),
-(88,42),
-(88,44),
-(88,47),
-(88,49),
-(88,50),
-(88,51),
-(88,52),
-(88,53),
-(88,54),
-(88,56),
-(88,59),
-(88,61),
-(88,62),
-(88,63),
-(88,64),
-(88,65),
-(88,66),
-(88,68),
-(88,71),
-(88,73),
-(88,74),
-(88,75),
-(88,76),
-(88,77),
-(88,78),
-(88,80),
-(88,83),
-(88,85),
-(88,86),
-(88,87),
-(88,88),
-(88,89),
-(88,90),
-(88,92),
-(88,95),
-(88,97),
-(88,98),
-(88,99),
-(88,100),
-(88,101),
-(88,102),
-(88,104),
-(88,107),
-(88,109),
-(88,110),
-(88,111),
-(88,112),
-(88,113),
-(88,114),
-(88,116),
-(88,119),
-(88,121),
-(88,122),
-(88,123),
-(88,124),
-(88,125),
-(88,126),
-(88,128),
-(88,131),
-(88,133),
-(88,134),
-(88,135),
-(88,136),
-(88,137),
-(88,138),
-(88,140),
-(88,143),
-(88,145),
-(88,146),
-(88,147),
-(88,148),
-(88,149),
-(88,150),
-(88,152),
-(88,155),
-(88,157),
-(88,158),
-(88,159),
-(88,160),
-(88,161),
-(88,162),
-(88,164),
-(88,167),
-(88,169),
-(88,170),
-(88,171),
-(88,172),
-(88,173),
-(88,174),
-(88,176),
-(88,179),
-(89,37),
-(89,38),
-(89,39),
-(89,40),
-(89,41),
-(89,42),
-(89,44),
-(89,47),
-(89,49),
-(89,50),
-(89,51),
-(89,52),
-(89,53),
-(89,54),
-(89,56),
-(89,59),
-(89,61),
-(89,62),
-(89,63),
-(89,64),
-(89,65),
-(89,66),
-(89,68),
-(89,71),
-(89,73),
-(89,74),
-(89,75),
-(89,76),
-(89,77),
-(89,78),
-(89,80),
-(89,83),
-(89,85),
-(89,86),
-(89,87),
-(89,88),
-(89,89),
-(89,90),
-(89,92),
-(89,95),
-(89,97),
-(89,98),
-(89,99),
-(89,100),
-(89,101),
-(89,102),
-(89,104),
-(89,107),
-(89,109),
-(89,110),
-(89,111),
-(89,112),
-(89,113),
-(89,114),
-(89,116),
-(89,119),
-(89,121),
-(89,122),
-(89,123),
-(89,124),
-(89,125),
-(89,126),
-(89,128),
-(89,131),
-(89,133),
-(89,134),
-(89,135),
-(89,136),
-(89,137),
-(89,138),
-(89,140),
-(89,143),
-(89,145),
-(89,146),
-(89,147),
-(89,148),
-(89,149),
-(89,150),
-(89,152),
-(89,155),
-(89,157),
-(89,158),
-(89,159),
-(89,160),
-(89,161),
-(89,162),
-(89,164),
-(89,167),
-(89,169),
-(89,170),
-(89,171),
-(89,172),
-(89,173),
-(89,174),
-(89,176),
-(89,179),
-(90,37),
-(90,38),
-(90,39),
-(90,40),
-(90,41),
-(90,42),
-(90,44),
-(90,47),
-(90,49),
-(90,50),
-(90,51),
-(90,52),
-(90,53),
-(90,54),
-(90,56),
-(90,59),
-(90,61),
-(90,62),
-(90,63),
-(90,64),
-(90,65),
-(90,66),
-(90,68),
-(90,71),
-(90,73),
-(90,74),
-(90,75),
-(90,76),
-(90,77),
-(90,78),
-(90,80),
-(90,83),
-(90,85),
-(90,86),
-(90,87),
-(90,88),
-(90,89),
-(90,90),
-(90,92),
-(90,95),
-(90,97),
-(90,98),
-(90,99),
-(90,100),
-(90,101),
-(90,102),
-(90,104),
-(90,107),
-(90,109),
-(90,110),
-(90,111),
-(90,112),
-(90,113),
-(90,114),
-(90,116),
-(90,119),
-(90,121),
-(90,122),
-(90,123),
-(90,124),
-(90,125),
-(90,126),
-(90,128),
-(90,131),
-(90,133),
-(90,134),
-(90,135),
-(90,136),
-(90,137),
-(90,138),
-(90,140),
-(90,143),
-(90,145),
-(90,146),
-(90,147),
-(90,148),
-(90,149),
-(90,150),
-(90,152),
-(90,155),
-(90,157),
-(90,158),
-(90,159),
-(90,160),
-(90,161),
-(90,162),
-(90,164),
-(90,167),
-(90,169),
-(90,170),
-(90,171),
-(90,172),
-(90,173),
-(90,174),
-(90,176),
-(90,179),
-(91,37),
-(91,38),
-(91,39),
-(91,40),
-(91,41),
-(91,42),
-(91,44),
-(91,47),
-(91,49),
-(91,50),
-(91,51),
-(91,52),
-(91,53),
-(91,54),
-(91,56),
-(91,59),
-(91,61),
-(91,62),
-(91,63),
-(91,64),
-(91,65),
-(91,66),
-(91,68),
-(91,71),
-(91,73),
-(91,74),
-(91,75),
-(91,76),
-(91,77),
-(91,78),
-(91,80),
-(91,83),
-(91,85),
-(91,86),
-(91,87),
-(91,88),
-(91,89),
-(91,90),
-(91,92),
-(91,95),
-(91,97),
-(91,98),
-(91,99),
-(91,100),
-(91,101),
-(91,102),
-(91,104),
-(91,107),
-(91,109),
-(91,110),
-(91,111),
-(91,112),
-(91,113),
-(91,114),
-(91,116),
-(91,119),
-(91,121),
-(91,122),
-(91,123),
-(91,124),
-(91,125),
-(91,126),
-(91,128),
-(91,131),
-(91,133),
-(91,134),
-(91,135),
-(91,136),
-(91,137),
-(91,138),
-(91,140),
-(91,143),
-(91,145),
-(91,146),
-(91,147),
-(91,148),
-(91,149),
-(91,150),
-(91,152),
-(91,155),
-(91,157),
-(91,158),
-(91,159),
-(91,160),
-(91,161),
-(91,162),
-(91,164),
-(91,167),
-(91,169),
-(91,170),
-(91,171),
-(91,172),
-(91,173),
-(91,174),
-(91,176),
-(91,179),
-(92,37),
-(92,38),
-(92,39),
-(92,40),
-(92,41),
-(92,42),
-(92,44),
-(92,47),
-(92,49),
-(92,50),
-(92,51),
-(92,52),
-(92,53),
-(92,54),
-(92,56),
-(92,59),
-(92,61),
-(92,62),
-(92,63),
-(92,64),
-(92,65),
-(92,66),
-(92,68),
-(92,71),
-(92,73),
-(92,74),
-(92,75),
-(92,76),
-(92,77),
-(92,78),
-(92,80),
-(92,83),
-(92,85),
-(92,86),
-(92,87),
-(92,88),
-(92,89),
-(92,90),
-(92,92),
-(92,95),
-(92,97),
-(92,98),
-(92,99),
-(92,100),
-(92,101),
-(92,102),
-(92,104),
-(92,107),
-(92,109),
-(92,110),
-(92,111),
-(92,112),
-(92,113),
-(92,114),
-(92,116),
-(92,119),
-(92,121),
-(92,122),
-(92,123),
-(92,124),
-(92,125),
-(92,126),
-(92,128),
-(92,131),
-(92,133),
-(92,134),
-(92,135),
-(92,136),
-(92,137),
-(92,138),
-(92,140),
-(92,143),
-(92,145),
-(92,146),
-(92,147),
-(92,148),
-(92,149),
-(92,150),
-(92,152),
-(92,155),
-(92,157),
-(92,158),
-(92,159),
-(92,160),
-(92,161),
-(92,162),
-(92,164),
-(92,167),
-(92,169),
-(92,170),
-(92,171),
-(92,172),
-(92,173),
-(92,174),
-(92,176),
-(92,179),
-(93,37),
-(93,38),
-(93,39),
-(93,40),
-(93,41),
-(93,42),
-(93,44),
-(93,47),
-(93,49),
-(93,50),
-(93,51),
-(93,52),
-(93,53),
-(93,54),
-(93,56),
-(93,59),
-(93,61),
-(93,62),
-(93,63),
-(93,64),
-(93,65),
-(93,66),
-(93,68),
-(93,71),
-(93,73),
-(93,74),
-(93,75),
-(93,76),
-(93,77),
-(93,78),
-(93,80),
-(93,83),
-(93,85),
-(93,86),
-(93,87),
-(93,88),
-(93,89),
-(93,90),
-(93,92),
-(93,95),
-(93,97),
-(93,98),
-(93,99),
-(93,100),
-(93,101),
-(93,102),
-(93,104),
-(93,107),
-(93,109),
-(93,110),
-(93,111),
-(93,112),
-(93,113),
-(93,114),
-(93,116),
-(93,119),
-(93,121),
-(93,122),
-(93,123),
-(93,124),
-(93,125),
-(93,126),
-(93,128),
-(93,131),
-(93,133),
-(93,134),
-(93,135),
-(93,136),
-(93,137),
-(93,138),
-(93,140),
-(93,143),
-(93,145),
-(93,146),
-(93,147),
-(93,148),
-(93,149),
-(93,150),
-(93,152),
-(93,155),
-(93,157),
-(93,158),
-(93,159),
-(93,160),
-(93,161),
-(93,162),
-(93,164),
-(93,167),
-(93,169),
-(93,170),
-(93,171),
-(93,172),
-(93,173),
-(93,174),
-(93,176),
-(93,179),
-(94,37),
-(94,38),
-(94,39),
-(94,40),
-(94,41),
-(94,42),
-(94,43),
-(94,44),
-(94,45),
-(94,46),
-(94,47),
-(94,48),
-(94,49),
-(94,50),
-(94,51),
-(94,52),
-(94,53),
-(94,54),
-(94,55),
-(94,56),
-(94,57),
-(94,58),
-(94,59),
-(94,60),
-(94,61),
-(94,62),
-(94,63),
-(94,64),
-(94,65),
-(94,66),
-(94,67),
-(94,68),
-(94,69),
-(94,70),
-(94,71),
-(94,72),
-(94,73),
-(94,74),
-(94,75),
-(94,76),
-(94,77),
-(94,78),
-(94,79),
-(94,80),
-(94,81),
-(94,82),
-(94,83),
-(94,84),
-(94,85),
-(94,86),
-(94,87),
-(94,88),
-(94,89),
-(94,90),
-(94,91),
-(94,92),
-(94,93),
-(94,94),
-(94,95),
-(94,96),
-(94,97),
-(94,98),
-(94,99),
-(94,100),
-(94,101),
-(94,102),
-(94,103),
-(94,104),
-(94,105),
-(94,106),
-(94,107),
-(94,108),
-(94,109),
-(94,110),
-(94,111),
-(94,112),
-(94,113),
-(94,114),
-(94,115),
-(94,116),
-(94,117),
-(94,118),
-(94,119),
-(94,120),
-(94,121),
-(94,122),
-(94,123),
-(94,124),
-(94,125),
-(94,126),
-(94,127),
-(94,128),
-(94,129),
-(94,130),
-(94,131),
-(94,132),
-(94,133),
-(94,134),
-(94,135),
-(94,136),
-(94,137),
-(94,138),
-(94,139),
-(94,140),
-(94,141),
-(94,142),
-(94,143),
-(94,144),
-(94,145),
-(94,146),
-(94,147),
-(94,148),
-(94,149),
-(94,150),
-(94,151),
-(94,152),
-(94,153),
-(94,154),
-(94,155),
-(94,156),
-(94,157),
-(94,158),
-(94,159),
-(94,160),
-(94,161),
-(94,162),
-(94,163),
-(94,164),
-(94,165),
-(94,166),
-(94,167),
-(94,168),
-(94,169),
-(94,170),
-(94,171),
-(94,172),
-(94,173),
-(94,174),
-(94,175),
-(94,176),
-(94,177),
-(94,178),
-(94,179),
-(94,180),
-(95,37),
-(95,38),
-(95,39),
-(95,40),
-(95,41),
-(95,42),
-(95,43),
-(95,44),
-(95,45),
-(95,46),
-(95,47),
-(95,48),
-(95,49),
-(95,50),
-(95,51),
-(95,52),
-(95,53),
-(95,54),
-(95,55),
-(95,56),
-(95,57),
-(95,58),
-(95,59),
-(95,60),
-(95,61),
-(95,62),
-(95,63),
-(95,64),
-(95,65),
-(95,66),
-(95,67),
-(95,68),
-(95,69),
-(95,70),
-(95,71),
-(95,72),
-(95,73),
-(95,74),
-(95,75),
-(95,76),
-(95,77),
-(95,78),
-(95,79),
-(95,80),
-(95,81),
-(95,82),
-(95,83),
-(95,84),
-(95,85),
-(95,86),
-(95,87),
-(95,88),
-(95,89),
-(95,90),
-(95,91),
-(95,92),
-(95,93),
-(95,94),
-(95,95),
-(95,96),
-(95,97),
-(95,98),
-(95,99),
-(95,100),
-(95,101),
-(95,102),
-(95,103),
-(95,104),
-(95,105),
-(95,106),
-(95,107),
-(95,108),
-(95,109),
-(95,110),
-(95,111),
-(95,112),
-(95,113),
-(95,114),
-(95,115),
-(95,116),
-(95,117),
-(95,118),
-(95,119),
-(95,120),
-(95,121),
-(95,122),
-(95,123),
-(95,124),
-(95,125),
-(95,126),
-(95,127),
-(95,128),
-(95,129),
-(95,130),
-(95,131),
-(95,132),
-(95,133),
-(95,134),
-(95,135),
-(95,136),
-(95,137),
-(95,138),
-(95,139),
-(95,140),
-(95,141),
-(95,142),
-(95,143),
-(95,144),
-(95,145),
-(95,146),
-(95,147),
-(95,148),
-(95,149),
-(95,150),
-(95,151),
-(95,152),
-(95,153),
-(95,154),
-(95,155),
-(95,156),
-(95,157),
-(95,158),
-(95,159),
-(95,160),
-(95,161),
-(95,162),
-(95,163),
-(95,164),
-(95,165),
-(95,166),
-(95,167),
-(95,168),
-(95,169),
-(95,170),
-(95,171),
-(95,172),
-(95,173),
-(95,174),
-(95,175),
-(95,176),
-(95,177),
-(95,178),
-(95,179),
-(95,180),
-(96,37),
-(96,38),
-(96,39),
-(96,40),
-(96,41),
-(96,42),
-(96,43),
-(96,44),
-(96,45),
-(96,46),
-(96,47),
-(96,48),
-(96,49),
-(96,50),
-(96,51),
-(96,52),
-(96,53),
-(96,54),
-(96,55),
-(96,56),
-(96,57),
-(96,58),
-(96,59),
-(96,60),
-(96,61),
-(96,62),
-(96,63),
-(96,64),
-(96,65),
-(96,66),
-(96,67),
-(96,68),
-(96,69),
-(96,70),
-(96,71),
-(96,72),
-(96,73),
-(96,74),
-(96,75),
-(96,76),
-(96,77),
-(96,78),
-(96,79),
-(96,80),
-(96,81),
-(96,82),
-(96,83),
-(96,84),
-(96,85),
-(96,86),
-(96,87),
-(96,88),
-(96,89),
-(96,90),
-(96,91),
-(96,92),
-(96,93),
-(96,94),
-(96,95),
-(96,96),
-(96,97),
-(96,98),
-(96,99),
-(96,100),
-(96,101),
-(96,102),
-(96,103),
-(96,104),
-(96,105),
-(96,106),
-(96,107),
-(96,108),
-(96,109),
-(96,110),
-(96,111),
-(96,112),
-(96,113),
-(96,114),
-(96,115),
-(96,116),
-(96,117),
-(96,118),
-(96,119),
-(96,120),
-(96,121),
-(96,122),
-(96,123),
-(96,124),
-(96,125),
-(96,126),
-(96,127),
-(96,128),
-(96,129),
-(96,130),
-(96,131),
-(96,132),
-(96,133),
-(96,134),
-(96,135),
-(96,136),
-(96,137),
-(96,138),
-(96,139),
-(96,140),
-(96,141),
-(96,142),
-(96,143),
-(96,144),
-(96,145),
-(96,146),
-(96,147),
-(96,148),
-(96,149),
-(96,150),
-(96,151),
-(96,152),
-(96,153),
-(96,154),
-(96,155),
-(96,156),
-(96,157),
-(96,158),
-(96,159),
-(96,160),
-(96,161),
-(96,162),
-(96,163),
-(96,164),
-(96,165),
-(96,166),
-(96,167),
-(96,168),
-(96,169),
-(96,170),
-(96,171),
-(96,172),
-(96,173),
-(96,174),
-(96,175),
-(96,176),
-(96,177),
-(96,178),
-(96,179),
-(96,180),
-(97,37),
-(97,38),
-(97,39),
-(97,40),
-(97,41),
-(97,42),
-(97,46),
-(97,48),
-(97,49),
-(97,50),
-(97,51),
-(97,52),
-(97,53),
-(97,54),
-(97,58),
-(97,60),
-(97,61),
-(97,62),
-(97,63),
-(97,64),
-(97,65),
-(97,66),
-(97,70),
-(97,72),
-(97,73),
-(97,74),
-(97,75),
-(97,76),
-(97,77),
-(97,78),
-(97,82),
-(97,84),
-(97,85),
-(97,86),
-(97,87),
-(97,88),
-(97,89),
-(97,90),
-(97,94),
-(97,96),
-(97,97),
-(97,98),
-(97,99),
-(97,100),
-(97,101),
-(97,102),
-(97,106),
-(97,108),
-(97,109),
-(97,110),
-(97,111),
-(97,112),
-(97,113),
-(97,114),
-(97,118),
-(97,120),
-(97,121),
-(97,122),
-(97,123),
-(97,124),
-(97,125),
-(97,126),
-(97,130),
-(97,132),
-(97,133),
-(97,134),
-(97,135),
-(97,136),
-(97,137),
-(97,138),
-(97,142),
-(97,144),
-(97,145),
-(97,146),
-(97,147),
-(97,148),
-(97,149),
-(97,150),
-(97,154),
-(97,156),
-(97,157),
-(97,158),
-(97,159),
-(97,160),
-(97,161),
-(97,162),
-(97,166),
-(97,168),
-(97,169),
-(97,170),
-(97,171),
-(97,172),
-(97,173),
-(97,174),
-(97,178),
-(97,180),
-(98,37),
-(98,38),
-(98,39),
-(98,40),
-(98,41),
-(98,42),
-(98,46),
-(98,48),
-(98,49),
-(98,50),
-(98,51),
-(98,52),
-(98,53),
-(98,54),
-(98,58),
-(98,60),
-(98,61),
-(98,62),
-(98,63),
-(98,64),
-(98,65),
-(98,66),
-(98,70),
-(98,72),
-(98,73),
-(98,74),
-(98,75),
-(98,76),
-(98,77),
-(98,78),
-(98,82),
-(98,84),
-(98,85),
-(98,86),
-(98,87),
-(98,88),
-(98,89),
-(98,90),
-(98,94),
-(98,96),
-(98,97),
-(98,98),
-(98,99),
-(98,100),
-(98,101),
-(98,102),
-(98,106),
-(98,108),
-(98,109),
-(98,110),
-(98,111),
-(98,112),
-(98,113),
-(98,114),
-(98,118),
-(98,120),
-(98,121),
-(98,122),
-(98,123),
-(98,124),
-(98,125),
-(98,126),
-(98,130),
-(98,132),
-(98,133),
-(98,134),
-(98,135),
-(98,136),
-(98,137),
-(98,138),
-(98,142),
-(98,144),
-(98,145),
-(98,146),
-(98,147),
-(98,148),
-(98,149),
-(98,150),
-(98,154),
-(98,156),
-(98,157),
-(98,158),
-(98,159),
-(98,160),
-(98,161),
-(98,162),
-(98,166),
-(98,168),
-(98,169),
-(98,170),
-(98,171),
-(98,172),
-(98,173),
-(98,174),
-(98,178),
-(98,180),
-(99,37),
-(99,38),
-(99,39),
-(99,40),
-(99,41),
-(99,42),
-(99,44),
-(99,47),
-(99,49),
-(99,50),
-(99,51),
-(99,52),
-(99,53),
-(99,54),
-(99,56),
-(99,59),
-(99,61),
-(99,62),
-(99,63),
-(99,64),
-(99,65),
-(99,66),
-(99,68),
-(99,71),
-(99,73),
-(99,74),
-(99,75),
-(99,76),
-(99,77),
-(99,78),
-(99,80),
-(99,83),
-(99,85),
-(99,86),
-(99,87),
-(99,88),
-(99,89),
-(99,90),
-(99,92),
-(99,95),
-(99,97),
-(99,98),
-(99,99),
-(99,100),
-(99,101),
-(99,102),
-(99,104),
-(99,107),
-(99,109),
-(99,110),
-(99,111),
-(99,112),
-(99,113),
-(99,114),
-(99,116),
-(99,119),
-(99,121),
-(99,122),
-(99,123),
-(99,124),
-(99,125),
-(99,126),
-(99,128),
-(99,131),
-(99,133),
-(99,134),
-(99,135),
-(99,136),
-(99,137),
-(99,138),
-(99,140),
-(99,143),
-(99,145),
-(99,146),
-(99,147),
-(99,148),
-(99,149),
-(99,150),
-(99,152),
-(99,155),
-(99,157),
-(99,158),
-(99,159),
-(99,160),
-(99,161),
-(99,162),
-(99,164),
-(99,167),
-(99,169),
-(99,170),
-(99,171),
-(99,172),
-(99,173),
-(99,174),
-(99,176),
-(99,179),
-(100,37),
-(100,38),
-(100,39),
-(100,40),
-(100,41),
-(100,42),
-(100,44),
-(100,47),
-(100,49),
-(100,50),
-(100,51),
-(100,52),
-(100,53),
-(100,54),
-(100,56),
-(100,59),
-(100,61),
-(100,62),
-(100,63),
-(100,64),
-(100,65),
-(100,66),
-(100,68),
-(100,71),
-(100,73),
-(100,74),
-(100,75),
-(100,76),
-(100,77),
-(100,78),
-(100,80),
-(100,83),
-(100,85),
-(100,86),
-(100,87),
-(100,88),
-(100,89),
-(100,90),
-(100,92),
-(100,95),
-(100,97),
-(100,98),
-(100,99),
-(100,100),
-(100,101),
-(100,102),
-(100,104),
-(100,107),
-(100,109),
-(100,110),
-(100,111),
-(100,112),
-(100,113),
-(100,114),
-(100,116),
-(100,119),
-(100,121),
-(100,122),
-(100,123),
-(100,124),
-(100,125),
-(100,126),
-(100,128),
-(100,131),
-(100,133),
-(100,134),
-(100,135),
-(100,136),
-(100,137),
-(100,138),
-(100,140),
-(100,143),
-(100,145),
-(100,146),
-(100,147),
-(100,148),
-(100,149),
-(100,150),
-(100,152),
-(100,155),
-(100,157),
-(100,158),
-(100,159),
-(100,160),
-(100,161),
-(100,162),
-(100,164),
-(100,167),
-(100,169),
-(100,170),
-(100,171),
-(100,172),
-(100,173),
-(100,174),
-(100,176),
-(100,179),
-(101,37),
-(101,38),
-(101,39),
-(101,40),
-(101,41),
-(101,42),
-(101,44),
-(101,47),
-(101,49),
-(101,50),
-(101,51),
-(101,52),
-(101,53),
-(101,54),
-(101,56),
-(101,59),
-(101,61),
-(101,62),
-(101,63),
-(101,64),
-(101,65),
-(101,66),
-(101,68),
-(101,71),
-(101,73),
-(101,74),
-(101,75),
-(101,76),
-(101,77),
-(101,78),
-(101,80),
-(101,83),
-(101,85),
-(101,86),
-(101,87),
-(101,88),
-(101,89),
-(101,90),
-(101,92),
-(101,95),
-(101,97),
-(101,98),
-(101,99),
-(101,100),
-(101,101),
-(101,102),
-(101,104),
-(101,107),
-(101,109),
-(101,110),
-(101,111),
-(101,112),
-(101,113),
-(101,114),
-(101,116),
-(101,119),
-(101,121),
-(101,122),
-(101,123),
-(101,124),
-(101,125),
-(101,126),
-(101,128),
-(101,131),
-(101,133),
-(101,134),
-(101,135),
-(101,136),
-(101,137),
-(101,138),
-(101,140),
-(101,143),
-(101,145),
-(101,146),
-(101,147),
-(101,148),
-(101,149),
-(101,150),
-(101,152),
-(101,155),
-(101,157),
-(101,158),
-(101,159),
-(101,160),
-(101,161),
-(101,162),
-(101,164),
-(101,167),
-(101,169),
-(101,170),
-(101,171),
-(101,172),
-(101,173),
-(101,174),
-(101,176),
-(101,179),
-(102,37),
-(102,38),
-(102,39),
-(102,40),
-(102,41),
-(102,42),
-(102,44),
-(102,47),
-(102,49),
-(102,50),
-(102,51),
-(102,52),
-(102,53),
-(102,54),
-(102,56),
-(102,59),
-(102,61),
-(102,62),
-(102,63),
-(102,64),
-(102,65),
-(102,66),
-(102,68),
-(102,71),
-(102,73),
-(102,74),
-(102,75),
-(102,76),
-(102,77),
-(102,78),
-(102,80),
-(102,83),
-(102,85),
-(102,86),
-(102,87),
-(102,88),
-(102,89),
-(102,90),
-(102,92),
-(102,95),
-(102,97),
-(102,98),
-(102,99),
-(102,100),
-(102,101),
-(102,102),
-(102,104),
-(102,107),
-(102,109),
-(102,110),
-(102,111),
-(102,112),
-(102,113),
-(102,114),
-(102,116),
-(102,119),
-(102,121),
-(102,122),
-(102,123),
-(102,124),
-(102,125),
-(102,126),
-(102,128),
-(102,131),
-(102,133),
-(102,134),
-(102,135),
-(102,136),
-(102,137),
-(102,138),
-(102,140),
-(102,143),
-(102,145),
-(102,146),
-(102,147),
-(102,148),
-(102,149),
-(102,150),
-(102,152),
-(102,155),
-(102,157),
-(102,158),
-(102,159),
-(102,160),
-(102,161),
-(102,162),
-(102,164),
-(102,167),
-(102,169),
-(102,170),
-(102,171),
-(102,172),
-(102,173),
-(102,174),
-(102,176),
-(102,179),
-(103,37),
-(103,38),
-(103,39),
-(103,40),
-(103,41),
-(103,42),
-(103,43),
-(103,44),
-(103,45),
-(103,46),
-(103,47),
-(103,48),
-(103,49),
-(103,50),
-(103,51),
-(103,52),
-(103,53),
-(103,54),
-(103,55),
-(103,56),
-(103,57),
-(103,58),
-(103,59),
-(103,60),
-(103,61),
-(103,62),
-(103,63),
-(103,64),
-(103,65),
-(103,66),
-(103,67),
-(103,68),
-(103,69),
-(103,70),
-(103,71),
-(103,72),
-(103,73),
-(103,74),
-(103,75),
-(103,76),
-(103,77),
-(103,78),
-(103,79),
-(103,80),
-(103,81),
-(103,82),
-(103,83),
-(103,84),
-(103,85),
-(103,86),
-(103,87),
-(103,88),
-(103,89),
-(103,90),
-(103,91),
-(103,92),
-(103,93),
-(103,94),
-(103,95),
-(103,96),
-(103,97),
-(103,98),
-(103,99),
-(103,100),
-(103,101),
-(103,102),
-(103,103),
-(103,104),
-(103,105),
-(103,106),
-(103,107),
-(103,108),
-(103,109),
-(103,110),
-(103,111),
-(103,112),
-(103,113),
-(103,114),
-(103,115),
-(103,116),
-(103,117),
-(103,118),
-(103,119),
-(103,120),
-(103,121),
-(103,122),
-(103,123),
-(103,124),
-(103,125),
-(103,126),
-(103,127),
-(103,128),
-(103,129),
-(103,130),
-(103,131),
-(103,132),
-(103,133),
-(103,134),
-(103,135),
-(103,136),
-(103,137),
-(103,138),
-(103,139),
-(103,140),
-(103,141),
-(103,142),
-(103,143),
-(103,144),
-(103,145),
-(103,146),
-(103,147),
-(103,148),
-(103,149),
-(103,150),
-(103,151),
-(103,152),
-(103,153),
-(103,154),
-(103,155),
-(103,156),
-(103,157),
-(103,158),
-(103,159),
-(103,160),
-(103,161),
-(103,162),
-(103,163),
-(103,164),
-(103,165),
-(103,166),
-(103,167),
-(103,168),
-(103,169),
-(103,170),
-(103,171),
-(103,172),
-(103,173),
-(103,174),
-(103,175),
-(103,176),
-(103,177),
-(103,178),
-(103,179),
-(103,180),
-(104,37),
-(104,38),
-(104,39),
-(104,40),
-(104,41),
-(104,42),
-(104,43),
-(104,44),
-(104,45),
-(104,46),
-(104,47),
-(104,48),
-(104,49),
-(104,50),
-(104,51),
-(104,52),
-(104,53),
-(104,54),
-(104,55),
-(104,56),
-(104,57),
-(104,58),
-(104,59),
-(104,60),
-(104,61),
-(104,62),
-(104,63),
-(104,64),
-(104,65),
-(104,66),
-(104,67),
-(104,68),
-(104,69),
-(104,70),
-(104,71),
-(104,72),
-(104,73),
-(104,74),
-(104,75),
-(104,76),
-(104,77),
-(104,78),
-(104,79),
-(104,80),
-(104,81),
-(104,82),
-(104,83),
-(104,84),
-(104,85),
-(104,86),
-(104,87),
-(104,88),
-(104,89),
-(104,90),
-(104,91),
-(104,92),
-(104,93),
-(104,94),
-(104,95),
-(104,96),
-(104,97),
-(104,98),
-(104,99),
-(104,100),
-(104,101),
-(104,102),
-(104,103),
-(104,104),
-(104,105),
-(104,106),
-(104,107),
-(104,108),
-(104,109),
-(104,110),
-(104,111),
-(104,112),
-(104,113),
-(104,114),
-(104,115),
-(104,116),
-(104,117),
-(104,118),
-(104,119),
-(104,120),
-(104,121),
-(104,122),
-(104,123),
-(104,124),
-(104,125),
-(104,126),
-(104,127),
-(104,128),
-(104,129),
-(104,130),
-(104,131),
-(104,132),
-(104,133),
-(104,134),
-(104,135),
-(104,136),
-(104,137),
-(104,138),
-(104,139),
-(104,140),
-(104,141),
-(104,142),
-(104,143),
-(104,144),
-(104,145),
-(104,146),
-(104,147),
-(104,148),
-(104,149),
-(104,150),
-(104,151),
-(104,152),
-(104,153),
-(104,154),
-(104,155),
-(104,156),
-(104,157),
-(104,158),
-(104,159),
-(104,160),
-(104,161),
-(104,162),
-(104,163),
-(104,164),
-(104,165),
-(104,166),
-(104,167),
-(104,168),
-(104,169),
-(104,170),
-(104,171),
-(104,172),
-(104,173),
-(104,174),
-(104,175),
-(104,176),
-(104,177),
-(104,178),
-(104,179),
-(104,180),
-(105,37),
-(105,38),
-(105,39),
-(105,40),
-(105,41),
-(105,42),
-(105,46),
-(105,48),
-(105,49),
-(105,50),
-(105,51),
-(105,52),
-(105,53),
-(105,54),
-(105,58),
-(105,60),
-(105,61),
-(105,62),
-(105,63),
-(105,64),
-(105,65),
-(105,66),
-(105,70),
-(105,72),
-(105,73),
-(105,74),
-(105,75),
-(105,76),
-(105,77),
-(105,78),
-(105,82),
-(105,84),
-(105,85),
-(105,86),
-(105,87),
-(105,88),
-(105,89),
-(105,90),
-(105,94),
-(105,96),
-(105,97),
-(105,98),
-(105,99),
-(105,100),
-(105,101),
-(105,102),
-(105,106),
-(105,108),
-(105,109),
-(105,110),
-(105,111),
-(105,112),
-(105,113),
-(105,114),
-(105,118),
-(105,120),
-(105,121),
-(105,122),
-(105,123),
-(105,124),
-(105,125),
-(105,126),
-(105,130),
-(105,132),
-(105,133),
-(105,134),
-(105,135),
-(105,136),
-(105,137),
-(105,138),
-(105,142),
-(105,144),
-(105,145),
-(105,146),
-(105,147),
-(105,148),
-(105,149),
-(105,150),
-(105,154),
-(105,156),
-(105,157),
-(105,158),
-(105,159),
-(105,160),
-(105,161),
-(105,162),
-(105,166),
-(105,168),
-(105,169),
-(105,170),
-(105,171),
-(105,172),
-(105,173),
-(105,174),
-(105,178),
-(105,180),
-(106,37),
-(106,38),
-(106,39),
-(106,40),
-(106,41),
-(106,42),
-(106,44),
-(106,47),
-(106,49),
-(106,50),
-(106,51),
-(106,52),
-(106,53),
-(106,54),
-(106,56),
-(106,59),
-(106,61),
-(106,62),
-(106,63),
-(106,64),
-(106,65),
-(106,66),
-(106,68),
-(106,71),
-(106,73),
-(106,74),
-(106,75),
-(106,76),
-(106,77),
-(106,78),
-(106,80),
-(106,83),
-(106,85),
-(106,86),
-(106,87),
-(106,88),
-(106,89),
-(106,90),
-(106,92),
-(106,95),
-(106,97),
-(106,98),
-(106,99),
-(106,100),
-(106,101),
-(106,102),
-(106,104),
-(106,107),
-(106,109),
-(106,110),
-(106,111),
-(106,112),
-(106,113),
-(106,114),
-(106,116),
-(106,119),
-(106,121),
-(106,122),
-(106,123),
-(106,124),
-(106,125),
-(106,126),
-(106,128),
-(106,131),
-(106,133),
-(106,134),
-(106,135),
-(106,136),
-(106,137),
-(106,138),
-(106,140),
-(106,143),
-(106,145),
-(106,146),
-(106,147),
-(106,148),
-(106,149),
-(106,150),
-(106,152),
-(106,155),
-(106,157),
-(106,158),
-(106,159),
-(106,160),
-(106,161),
-(106,162),
-(106,164),
-(106,167),
-(106,169),
-(106,170),
-(106,171),
-(106,172),
-(106,173),
-(106,174),
-(106,176),
-(106,179),
-(107,37),
-(107,38),
-(107,39),
-(107,40),
-(107,41),
-(107,42),
-(107,44),
-(107,47),
-(107,49),
-(107,50),
-(107,51),
-(107,52),
-(107,53),
-(107,54),
-(107,56),
-(107,59),
-(107,61),
-(107,62),
-(107,63),
-(107,64),
-(107,65),
-(107,66),
-(107,68),
-(107,71),
-(107,73),
-(107,74),
-(107,75),
-(107,76),
-(107,77),
-(107,78),
-(107,80),
-(107,83),
-(107,85),
-(107,86),
-(107,87),
-(107,88),
-(107,89),
-(107,90),
-(107,92),
-(107,95),
-(107,97),
-(107,98),
-(107,99),
-(107,100),
-(107,101),
-(107,102),
-(107,104),
-(107,107),
-(107,109),
-(107,110),
-(107,111),
-(107,112),
-(107,113),
-(107,114),
-(107,116),
-(107,119),
-(107,121),
-(107,122),
-(107,123),
-(107,124),
-(107,125),
-(107,126),
-(107,128),
-(107,131),
-(107,133),
-(107,134),
-(107,135),
-(107,136),
-(107,137),
-(107,138),
-(107,140),
-(107,143),
-(107,145),
-(107,146),
-(107,147),
-(107,148),
-(107,149),
-(107,150),
-(107,152),
-(107,155),
-(107,157),
-(107,158),
-(107,159),
-(107,160),
-(107,161),
-(107,162),
-(107,164),
-(107,167),
-(107,169),
-(107,170),
-(107,171),
-(107,172),
-(107,173),
-(107,174),
-(107,176),
-(107,179),
-(108,37),
-(108,38),
-(108,39),
-(108,40),
-(108,41),
-(108,42),
-(108,44),
-(108,47),
-(108,49),
-(108,50),
-(108,51),
-(108,52),
-(108,53),
-(108,54),
-(108,56),
-(108,59),
-(108,61),
-(108,62),
-(108,63),
-(108,64),
-(108,65),
-(108,66),
-(108,68),
-(108,71),
-(108,73),
-(108,74),
-(108,75),
-(108,76),
-(108,77),
-(108,78),
-(108,80),
-(108,83),
-(108,85),
-(108,86),
-(108,87),
-(108,88),
-(108,89),
-(108,90),
-(108,92),
-(108,95),
-(108,97),
-(108,98),
-(108,99),
-(108,100),
-(108,101),
-(108,102),
-(108,104),
-(108,107),
-(108,109),
-(108,110),
-(108,111),
-(108,112),
-(108,113),
-(108,114),
-(108,116),
-(108,119),
-(108,121),
-(108,122),
-(108,123),
-(108,124),
-(108,125),
-(108,126),
-(108,128),
-(108,131),
-(108,133),
-(108,134),
-(108,135),
-(108,136),
-(108,137),
-(108,138),
-(108,140),
-(108,143),
-(108,145),
-(108,146),
-(108,147),
-(108,148),
-(108,149),
-(108,150),
-(108,152),
-(108,155),
-(108,157),
-(108,158),
-(108,159),
-(108,160),
-(108,161),
-(108,162),
-(108,164),
-(108,167),
-(108,169),
-(108,170),
-(108,171),
-(108,172),
-(108,173),
-(108,174),
-(108,176),
-(108,179),
-(109,37),
-(109,38),
-(109,39),
-(109,40),
-(109,41),
-(109,42),
-(109,44),
-(109,47),
-(109,49),
-(109,50),
-(109,51),
-(109,52),
-(109,53),
-(109,54),
-(109,56),
-(109,59),
-(109,61),
-(109,62),
-(109,63),
-(109,64),
-(109,65),
-(109,66),
-(109,68),
-(109,71),
-(109,73),
-(109,74),
-(109,75),
-(109,76),
-(109,77),
-(109,78),
-(109,80),
-(109,83),
-(109,85),
-(109,86),
-(109,87),
-(109,88),
-(109,89),
-(109,90),
-(109,92),
-(109,95),
-(109,97),
-(109,98),
-(109,99),
-(109,100),
-(109,101),
-(109,102),
-(109,104),
-(109,107),
-(109,109),
-(109,110),
-(109,111),
-(109,112),
-(109,113),
-(109,114),
-(109,116),
-(109,119),
-(109,121),
-(109,122),
-(109,123),
-(109,124),
-(109,125),
-(109,126),
-(109,128),
-(109,131),
-(109,133),
-(109,134),
-(109,135),
-(109,136),
-(109,137),
-(109,138),
-(109,140),
-(109,143),
-(109,145),
-(109,146),
-(109,147),
-(109,148),
-(109,149),
-(109,150),
-(109,152),
-(109,155),
-(109,157),
-(109,158),
-(109,159),
-(109,160),
-(109,161),
-(109,162),
-(109,164),
-(109,167),
-(109,169),
-(109,170),
-(109,171),
-(109,172),
-(109,173),
-(109,174),
-(109,176),
-(109,179),
-(110,37),
-(110,38),
-(110,39),
-(110,40),
-(110,41),
-(110,42),
-(110,43),
-(110,44),
-(110,45),
-(110,46),
-(110,47),
-(110,48),
-(110,49),
-(110,50),
-(110,51),
-(110,52),
-(110,53),
-(110,54),
-(110,55),
-(110,56),
-(110,57),
-(110,58),
-(110,59),
-(110,60),
-(110,61),
-(110,62),
-(110,63),
-(110,64),
-(110,65),
-(110,66),
-(110,67),
-(110,68),
-(110,69),
-(110,70),
-(110,71),
-(110,72),
-(110,73),
-(110,74),
-(110,75),
-(110,76),
-(110,77),
-(110,78),
-(110,79),
-(110,80),
-(110,81),
-(110,82),
-(110,83),
-(110,84),
-(110,85),
-(110,86),
-(110,87),
-(110,88),
-(110,89),
-(110,90),
-(110,91),
-(110,92),
-(110,93),
-(110,94),
-(110,95),
-(110,96),
-(110,97),
-(110,98),
-(110,99),
-(110,100),
-(110,101),
-(110,102),
-(110,103),
-(110,104),
-(110,105),
-(110,106),
-(110,107),
-(110,108),
-(110,109),
-(110,110),
-(110,111),
-(110,112),
-(110,113),
-(110,114),
-(110,115),
-(110,116),
-(110,117),
-(110,118),
-(110,119),
-(110,120),
-(110,121),
-(110,122),
-(110,123),
-(110,124),
-(110,125),
-(110,126),
-(110,127),
-(110,128),
-(110,129),
-(110,130),
-(110,131),
-(110,132),
-(110,133),
-(110,134),
-(110,135),
-(110,136),
-(110,137),
-(110,138),
-(110,139),
-(110,140),
-(110,141),
-(110,142),
-(110,143),
-(110,144),
-(110,145),
-(110,146),
-(110,147),
-(110,148),
-(110,149),
-(110,150),
-(110,151),
-(110,152),
-(110,153),
-(110,154),
-(110,155),
-(110,156),
-(110,157),
-(110,158),
-(110,159),
-(110,160),
-(110,161),
-(110,162),
-(110,163),
-(110,164),
-(110,165),
-(110,166),
-(110,167),
-(110,168),
-(110,169),
-(110,170),
-(110,171),
-(110,172),
-(110,173),
-(110,174),
-(110,175),
-(110,176),
-(110,177),
-(110,178),
-(110,179),
-(110,180),
-(111,37),
-(111,38),
-(111,39),
-(111,40),
-(111,41),
-(111,42),
-(111,43),
-(111,44),
-(111,45),
-(111,46),
-(111,47),
-(111,48),
-(111,49),
-(111,50),
-(111,51),
-(111,52),
-(111,53),
-(111,54),
-(111,55),
-(111,56),
-(111,57),
-(111,58),
-(111,59),
-(111,60),
-(111,61),
-(111,62),
-(111,63),
-(111,64),
-(111,65),
-(111,66),
-(111,67),
-(111,68),
-(111,69),
-(111,70),
-(111,71),
-(111,72),
-(111,73),
-(111,74),
-(111,75),
-(111,76),
-(111,77),
-(111,78),
-(111,79),
-(111,80),
-(111,81),
-(111,82),
-(111,83),
-(111,84),
-(111,85),
-(111,86),
-(111,87),
-(111,88),
-(111,89),
-(111,90),
-(111,91),
-(111,92),
-(111,93),
-(111,94),
-(111,95),
-(111,96),
-(111,97),
-(111,98),
-(111,99),
-(111,100),
-(111,101),
-(111,102),
-(111,103),
-(111,104),
-(111,105),
-(111,106),
-(111,107),
-(111,108),
-(111,109),
-(111,110),
-(111,111),
-(111,112),
-(111,113),
-(111,114),
-(111,115),
-(111,116),
-(111,117),
-(111,118),
-(111,119),
-(111,120),
-(111,121),
-(111,122),
-(111,123),
-(111,124),
-(111,125),
-(111,126),
-(111,127),
-(111,128),
-(111,129),
-(111,130),
-(111,131),
-(111,132),
-(111,133),
-(111,134),
-(111,135),
-(111,136),
-(111,137),
-(111,138),
-(111,139),
-(111,140),
-(111,141),
-(111,142),
-(111,143),
-(111,144),
-(111,145),
-(111,146),
-(111,147),
-(111,148),
-(111,149),
-(111,150),
-(111,151),
-(111,152),
-(111,153),
-(111,154),
-(111,155),
-(111,156),
-(111,157),
-(111,158),
-(111,159),
-(111,160),
-(111,161),
-(111,162),
-(111,163),
-(111,164),
-(111,165),
-(111,166),
-(111,167),
-(111,168),
-(111,169),
-(111,170),
-(111,171),
-(111,172),
-(111,173),
-(111,174),
-(111,175),
-(111,176),
-(111,177),
-(111,178),
-(111,179),
-(111,180),
-(112,37),
-(112,38),
-(112,39),
-(112,40),
-(112,41),
-(112,42),
-(112,46),
-(112,48),
-(112,49),
-(112,50),
-(112,51),
-(112,52),
-(112,53),
-(112,54),
-(112,58),
-(112,60),
-(112,61),
-(112,62),
-(112,63),
-(112,64),
-(112,65),
-(112,66),
-(112,70),
-(112,72),
-(112,73),
-(112,74),
-(112,75),
-(112,76),
-(112,77),
-(112,78),
-(112,82),
-(112,84),
-(112,85),
-(112,86),
-(112,87),
-(112,88),
-(112,89),
-(112,90),
-(112,94),
-(112,96),
-(112,97),
-(112,98),
-(112,99),
-(112,100),
-(112,101),
-(112,102),
-(112,106),
-(112,108),
-(112,109),
-(112,110),
-(112,111),
-(112,112),
-(112,113),
-(112,114),
-(112,118),
-(112,120),
-(112,121),
-(112,122),
-(112,123),
-(112,124),
-(112,125),
-(112,126),
-(112,130),
-(112,132),
-(112,133),
-(112,134),
-(112,135),
-(112,136),
-(112,137),
-(112,138),
-(112,142),
-(112,144),
-(112,145),
-(112,146),
-(112,147),
-(112,148),
-(112,149),
-(112,150),
-(112,154),
-(112,156),
-(112,157),
-(112,158),
-(112,159),
-(112,160),
-(112,161),
-(112,162),
-(112,166),
-(112,168),
-(112,169),
-(112,170),
-(112,171),
-(112,172),
-(112,173),
-(112,174),
-(112,178),
-(112,180),
-(113,37),
-(113,38),
-(113,39),
-(113,40),
-(113,41),
-(113,42),
-(113,44),
-(113,47),
-(113,49),
-(113,50),
-(113,51),
-(113,52),
-(113,53),
-(113,54),
-(113,56),
-(113,59),
-(113,61),
-(113,62),
-(113,63),
-(113,64),
-(113,65),
-(113,66),
-(113,68),
-(113,71),
-(113,73),
-(113,74),
-(113,75),
-(113,76),
-(113,77),
-(113,78),
-(113,80),
-(113,83),
-(113,85),
-(113,86),
-(113,87),
-(113,88),
-(113,89),
-(113,90),
-(113,92),
-(113,95),
-(113,97),
-(113,98),
-(113,99),
-(113,100),
-(113,101),
-(113,102),
-(113,104),
-(113,107),
-(113,109),
-(113,110),
-(113,111),
-(113,112),
-(113,113),
-(113,114),
-(113,116),
-(113,119),
-(113,121),
-(113,122),
-(113,123),
-(113,124),
-(113,125),
-(113,126),
-(113,128),
-(113,131),
-(113,133),
-(113,134),
-(113,135),
-(113,136),
-(113,137),
-(113,138),
-(113,140),
-(113,143),
-(113,145),
-(113,146),
-(113,147),
-(113,148),
-(113,149),
-(113,150),
-(113,152),
-(113,155),
-(113,157),
-(113,158),
-(113,159),
-(113,160),
-(113,161),
-(113,162),
-(113,164),
-(113,167),
-(113,169),
-(113,170),
-(113,171),
-(113,172),
-(113,173),
-(113,174),
-(113,176),
-(113,179),
-(114,37),
-(114,38),
-(114,39),
-(114,40),
-(114,41),
-(114,42),
-(114,44),
-(114,47),
-(114,49),
-(114,50),
-(114,51),
-(114,52),
-(114,53),
-(114,54),
-(114,56),
-(114,59),
-(114,61),
-(114,62),
-(114,63),
-(114,64),
-(114,65),
-(114,66),
-(114,68),
-(114,71),
-(114,73),
-(114,74),
-(114,75),
-(114,76),
-(114,77),
-(114,78),
-(114,80),
-(114,83),
-(114,85),
-(114,86),
-(114,87),
-(114,88),
-(114,89),
-(114,90),
-(114,92),
-(114,95),
-(114,97),
-(114,98),
-(114,99),
-(114,100),
-(114,101),
-(114,102),
-(114,104),
-(114,107),
-(114,109),
-(114,110),
-(114,111),
-(114,112),
-(114,113),
-(114,114),
-(114,116),
-(114,119),
-(114,121),
-(114,122),
-(114,123),
-(114,124),
-(114,125),
-(114,126),
-(114,128),
-(114,131),
-(114,133),
-(114,134),
-(114,135),
-(114,136),
-(114,137),
-(114,138),
-(114,140),
-(114,143),
-(114,145),
-(114,146),
-(114,147),
-(114,148),
-(114,149),
-(114,150),
-(114,152),
-(114,155),
-(114,157),
-(114,158),
-(114,159),
-(114,160),
-(114,161),
-(114,162),
-(114,164),
-(114,167),
-(114,169),
-(114,170),
-(114,171),
-(114,172),
-(114,173),
-(114,174),
-(114,176),
-(114,179),
-(115,37),
-(115,38),
-(115,39),
-(115,40),
-(115,41),
-(115,42),
-(115,46),
-(115,48),
-(115,49),
-(115,50),
-(115,51),
-(115,52),
-(115,53),
-(115,54),
-(115,58),
-(115,60),
-(115,61),
-(115,62),
-(115,63),
-(115,64),
-(115,65),
-(115,66),
-(115,70),
-(115,72),
-(115,73),
-(115,74),
-(115,75),
-(115,76),
-(115,77),
-(115,78),
-(115,82),
-(115,84),
-(115,85),
-(115,86),
-(115,87),
-(115,88),
-(115,89),
-(115,90),
-(115,94),
-(115,96),
-(115,97),
-(115,98),
-(115,99),
-(115,100),
-(115,101),
-(115,102),
-(115,106),
-(115,108),
-(115,109),
-(115,110),
-(115,111),
-(115,112),
-(115,113),
-(115,114),
-(115,118),
-(115,120),
-(115,121),
-(115,122),
-(115,123),
-(115,124),
-(115,125),
-(115,126),
-(115,130),
-(115,132),
-(115,133),
-(115,134),
-(115,135),
-(115,136),
-(115,137),
-(115,138),
-(115,142),
-(115,144),
-(115,145),
-(115,146),
-(115,147),
-(115,148),
-(115,149),
-(115,150),
-(115,154),
-(115,156),
-(115,157),
-(115,158),
-(115,159),
-(115,160),
-(115,161),
-(115,162),
-(115,166),
-(115,168),
-(115,169),
-(115,170),
-(115,171),
-(115,172),
-(115,173),
-(115,174),
-(115,178),
-(115,180),
-(116,37),
-(116,38),
-(116,39),
-(116,40),
-(116,41),
-(116,42),
-(116,46),
-(116,48),
-(116,49),
-(116,50),
-(116,51),
-(116,52),
-(116,53),
-(116,54),
-(116,58),
-(116,60),
-(116,61),
-(116,62),
-(116,63),
-(116,64),
-(116,65),
-(116,66),
-(116,70),
-(116,72),
-(116,73),
-(116,74),
-(116,75),
-(116,76),
-(116,77),
-(116,78),
-(116,82),
-(116,84),
-(116,85),
-(116,86),
-(116,87),
-(116,88),
-(116,89),
-(116,90),
-(116,94),
-(116,96),
-(116,97),
-(116,98),
-(116,99),
-(116,100),
-(116,101),
-(116,102),
-(116,106),
-(116,108),
-(116,109),
-(116,110),
-(116,111),
-(116,112),
-(116,113),
-(116,114),
-(116,118),
-(116,120),
-(116,121),
-(116,122),
-(116,123),
-(116,124),
-(116,125),
-(116,126),
-(116,130),
-(116,132),
-(116,133),
-(116,134),
-(116,135),
-(116,136),
-(116,137),
-(116,138),
-(116,142),
-(116,144),
-(116,145),
-(116,146),
-(116,147),
-(116,148),
-(116,149),
-(116,150),
-(116,154),
-(116,156),
-(116,157),
-(116,158),
-(116,159),
-(116,160),
-(116,161),
-(116,162),
-(116,166),
-(116,168),
-(116,169),
-(116,170),
-(116,171),
-(116,172),
-(116,173),
-(116,174),
-(116,178),
-(116,180),
-(117,37),
-(117,38),
-(117,39),
-(117,40),
-(117,41),
-(117,42),
-(117,44),
-(117,47),
-(117,49),
-(117,50),
-(117,51),
-(117,52),
-(117,53),
-(117,54),
-(117,56),
-(117,59),
-(117,61),
-(117,62),
-(117,63),
-(117,64),
-(117,65),
-(117,66),
-(117,68),
-(117,71),
-(117,73),
-(117,74),
-(117,75),
-(117,76),
-(117,77),
-(117,78),
-(117,80),
-(117,83),
-(117,85),
-(117,86),
-(117,87),
-(117,88),
-(117,89),
-(117,90),
-(117,92),
-(117,95),
-(117,97),
-(117,98),
-(117,99),
-(117,100),
-(117,101),
-(117,102),
-(117,104),
-(117,107),
-(117,109),
-(117,110),
-(117,111),
-(117,112),
-(117,113),
-(117,114),
-(117,116),
-(117,119),
-(117,121),
-(117,122),
-(117,123),
-(117,124),
-(117,125),
-(117,126),
-(117,128),
-(117,131),
-(117,133),
-(117,134),
-(117,135),
-(117,136),
-(117,137),
-(117,138),
-(117,140),
-(117,143),
-(117,145),
-(117,146),
-(117,147),
-(117,148),
-(117,149),
-(117,150),
-(117,152),
-(117,155),
-(117,157),
-(117,158),
-(117,159),
-(117,160),
-(117,161),
-(117,162),
-(117,164),
-(117,167),
-(117,169),
-(117,170),
-(117,171),
-(117,172),
-(117,173),
-(117,174),
-(117,176),
-(117,179),
-(118,37),
-(118,38),
-(118,39),
-(118,40),
-(118,41),
-(118,42),
-(118,44),
-(118,47),
-(118,49),
-(118,50),
-(118,51),
-(118,52),
-(118,53),
-(118,54),
-(118,56),
-(118,59),
-(118,61),
-(118,62),
-(118,63),
-(118,64),
-(118,65),
-(118,66),
-(118,68),
-(118,71),
-(118,73),
-(118,74),
-(118,75),
-(118,76),
-(118,77),
-(118,78),
-(118,80),
-(118,83),
-(118,85),
-(118,86),
-(118,87),
-(118,88),
-(118,89),
-(118,90),
-(118,92),
-(118,95),
-(118,97),
-(118,98),
-(118,99),
-(118,100),
-(118,101),
-(118,102),
-(118,104),
-(118,107),
-(118,109),
-(118,110),
-(118,111),
-(118,112),
-(118,113),
-(118,114),
-(118,116),
-(118,119),
-(118,121),
-(118,122),
-(118,123),
-(118,124),
-(118,125),
-(118,126),
-(118,128),
-(118,131),
-(118,133),
-(118,134),
-(118,135),
-(118,136),
-(118,137),
-(118,138),
-(118,140),
-(118,143),
-(118,145),
-(118,146),
-(118,147),
-(118,148),
-(118,149),
-(118,150),
-(118,152),
-(118,155),
-(118,157),
-(118,158),
-(118,159),
-(118,160),
-(118,161),
-(118,162),
-(118,164),
-(118,167),
-(118,169),
-(118,170),
-(118,171),
-(118,172),
-(118,173),
-(118,174),
-(118,176),
-(118,179);
\ No newline at end of file
diff --git a/L2J_Mobius_C6_Interlude/dist/game/data/Hennas.xml b/L2J_Mobius_C6_Interlude/dist/game/data/Hennas.xml
new file mode 100644
index 0000000000..298683c256
--- /dev/null
+++ b/L2J_Mobius_C6_Interlude/dist/game/data/Hennas.xml
@@ -0,0 +1,183 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/L2J_Mobius_C6_Interlude/dist/game/data/csv/henna.csv b/L2J_Mobius_C6_Interlude/dist/game/data/csv/henna.csv
deleted file mode 100644
index 15d91f567d..0000000000
--- a/L2J_Mobius_C6_Interlude/dist/game/data/csv/henna.csv
+++ /dev/null
@@ -1,182 +0,0 @@
-# symbol_id;symbol_name;dye_id;dye_amount;price;stat_INT;stat_STR;stat_CON;stat_MEM;stat_DEX;stat_WIT;
-
-1;symbol_s+1c-3_d;4445;10;5100;0;1;-3;0;0;0
-2;symbol_s+1d-3_d;4446;10;5100;0;1;0;0;-3;0
-3;symbol_c+1s-3_d;4447;10;5100;0;-3;1;0;0;0
-4;symbol_c+1d-3_d;4448;10;5100;0;0;1;0;-3;0
-5;symbol_d+1s-3_d;4449;10;5100;0;-3;0;0;1;0
-6;symbol_d+1c-3_d;4450;10;5100;0;0;-3;0;1;0
-7;symbol_i+1m-3_d;4451;10;5100;1;0;0;-3;0;0
-8;symbol_i+1w-3_d;4452;10;5100;1;0;0;0;0;-3
-9;symbol_m+1i-3_d;4453;10;5100;-3;0;0;1;0;0
-10;symbol_m+1w-3_d;4454;10;5100;0;0;0;1;0;-3
-11;symbol_w+1i-3_d;4455;10;5100;-3;0;0;0;0;1
-12;symbol_w+1m-3_d;4456;10;5100;0;0;0;-3;0;1
-13;symbol_s+1c-2_d;4457;10;12000;0;1;-2;0;0;0
-14;symbol_s+1d-2_d;4458;10;12000;0;1;0;0;-2;0
-15;symbol_c+1s-2_d;4459;10;12000;0;-2;1;0;0;0
-16;symbol_c+1d-2_d;4460;10;12000;0;0;1;0;-2;0
-17;symbol_d+1s-2_d;4461;10;12000;0;-2;0;0;1;0
-18;symbol_d+1c-2_d;4462;10;12000;0;0;-2;0;1;0
-19;symbol_i+1m-2_d;4463;10;12000;1;0;0;-2;0;0
-20;symbol_i+1w-2_d;4464;10;12000;1;0;0;0;0;-2
-21;symbol_m+1i-2_d;4465;10;12000;-2;0;0;1;0;0
-22;symbol_m+1w-2_d;4466;10;12000;0;0;0;1;0;-2
-23;symbol_w+1i-2_d;4467;10;12000;-2;0;0;0;0;1
-24;symbol_w+1m-2_d;4468;10;12000;0;0;0;-2;0;1
-25;symbol_s+1c-1_d;4469;10;35000;0;1;-1;0;0;0
-26;symbol_s+1d-1_d;4470;10;35000;0;1;0;0;-1;0
-27;symbol_c+1s-1_d;4471;10;35000;0;-1;1;0;0;0
-28;symbol_c+1d-1_d;4472;10;35000;0;0;1;0;-1;0
-29;symbol_d+1s-1_d;4473;10;35000;0;-1;0;0;1;0
-30;symbol_d+1c-1_d;4474;10;35000;0;0;-1;0;1;0
-31;symbol_i+1m-1_d;4475;10;35000;1;0;0;-1;0;0
-32;symbol_i+1w-1_d;4476;10;35000;1;0;0;0;0;-1
-33;symbol_m+1i-1_d;4477;10;35000;-1;0;0;1;0;0
-34;symbol_m+1w-1_d;4478;10;35000;0;0;0;1;0;-1
-35;symbol_w+1i-1_d;4479;10;35000;-1;0;0;0;0;1
-36;symbol_w+1m-1_d;4480;10;35000;0;0;0;-1;0;1
-37;symbol_s+1c-3_c;4481;10;12000;0;1;-3;0;0;0
-38;symbol_s+1d-3_c;4482;10;24600;0;1;0;0;-3;0
-39;symbol_c+1s-3_c;4483;10;24600;0;-3;1;0;0;0
-40;symbol_c+1d-3_c;4484;10;24600;0;0;1;0;-3;0
-41;symbol_d+1s-3_c;4485;10;30000;0;-3;0;0;1;0
-42;symbol_d+1c-3_c;4486;10;30000;0;0;-3;0;1;0
-43;symbol_i+1m-3_c;4487;10;30000;1;0;0;-3;0;0
-44;symbol_i+1w-3_c;4488;10;30000;1;0;0;0;0;-3
-45;symbol_m+1i-3_c;4489;10;30000;-3;0;0;1;0;0
-46;symbol_m+1w-3_c;4490;10;12000;0;0;0;1;0;-3
-47;symbol_w+1i-3_c;4491;10;30000;-3;0;0;0;0;1
-48;symbol_w+1m-3_c;4492;10;12000;0;0;0;-3;0;1
-49;symbol_s+1c-2_c;4493;10;24600;0;1;-2;0;0;0
-50;symbol_s+1d-2_c;4494;10;30000;0;1;0;0;-2;0
-51;symbol_c+1s-2_c;4495;10;35000;0;-2;1;0;0;0
-52;symbol_c+1d-2_c;4496;10;35000;0;0;1;0;-2;0
-53;symbol_d+1s-2_c;4497;10;36000;0;-2;0;0;1;0
-54;symbol_d+1c-2_c;4498;10;36000;0;0;-2;0;1;0
-55;symbol_i+1m-2_c;4499;10;50000;1;0;0;-2;0;0
-56;symbol_i+1w-2_c;4500;10;36000;1;0;0;0;0;-2
-57;symbol_m+1i-2_c;4501;10;36000;-2;0;0;1;0;0
-58;symbol_m+1w-2_c;4502;10;21000;0;0;0;1;0;-2
-59;symbol_w+1i-2_c;4503;10;30000;-2;0;0;0;0;1
-60;symbol_w+1m-2_c;4504;10;36000;0;0;0;-2;0;1
-61;symbol_s+2c-4_c;4505;10;24600;0;2;-4;0;0;0
-62;symbol_s+2d-4_c;4506;10;24600;0;2;0;0;-4;0
-63;symbol_c+2s-4_c;4507;10;24600;0;-4;2;0;0;0
-64;symbol_c+2d-4_c;4508;10;24600;0;0;2;0;-4;0
-65;symbol_d+2s-4_c;4509;10;24600;0;-4;0;0;2;0
-66;symbol_d+2c-4_c;4510;10;24600;0;0;-4;0;2;0
-67;symbol_i+2m-4_c;4511;10;24600;2;0;0;-4;0;0
-68;symbol_i+2w-4_c;4512;10;24600;2;0;0;0;0;-4
-69;symbol_m+2i-4_c;4513;10;24600;-4;0;0;2;0;0
-70;symbol_m+2w-4_c;4514;10;30000;0;0;0;2;0;-4
-71;symbol_w+2i-4_c;4515;10;30000;-4;0;0;0;0;2
-72;symbol_w+2m-4_c;4516;10;30000;0;0;0;-4;0;2
-73;symbol_s+2c-3_c;4517;10;30000;0;2;-3;0;0;0
-74;symbol_s+2d-3_c;4518;10;35000;0;2;0;0;-3;0
-75;symbol_c+2s-3_c;4519;10;35000;0;-3;2;0;0;0
-76;symbol_c+2d-3_c;4520;10;35000;0;0;2;0;-3;0
-77;symbol_d+2s-3_c;4521;10;27000;0;-3;0;0;2;0
-78;symbol_d+2c-3_c;4522;10;27000;0;0;-3;0;2;0
-79;symbol_i+2m-3_c;4523;10;27000;2;0;0;-3;0;0
-80;symbol_i+2w-3_c;4524;10;30000;2;0;0;0;0;-3
-81;symbol_m+2i-3_c;4525;10;30000;-3;0;0;2;0;0
-82;symbol_m+2w-3_c;4526;10;30000;0;0;0;2;0;-3
-83;symbol_w+2i-3_c;4527;10;30000;-3;0;0;0;0;2
-84;symbol_w+2m-3_c;4528;10;30000;0;0;0;-3;0;2
-85;symbol_s+3c-5_c;4529;10;30000;0;3;-5;0;0;0
-86;symbol_s+3d-5_c;4530;10;30000;0;3;0;0;-5;0
-87;symbol_c+3s-5_c;4531;10;30000;0;-5;3;0;0;0
-88;symbol_c+3d-5_c;4532;10;30000;0;0;3;0;-5;0
-89;symbol_d+3s-5_c;4533;10;30000;0;-5;0;0;3;0
-90;symbol_d+3c-5_c;4534;10;30000;0;0;-5;0;3;0
-91;symbol_i+3m-5_c;4535;10;30000;3;0;0;-5;0;0
-92;symbol_i+3w-5_c;4536;10;30000;3;0;0;0;0;-5
-93;symbol_m+3i-5_c;4537;10;30000;-5;0;0;3;0;0
-94;symbol_m+3w-5_c;4538;10;30000;0;0;0;3;0;-5
-95;symbol_w+3i-5_c;4539;10;30000;-5;0;0;0;0;3
-96;symbol_w+3m-5_c;4540;10;30000;0;0;0;-5;0;3
-97;symbol_s+3c-4_c;4541;10;30000;0;3;-4;0;0;0
-98;symbol_s+3d-4_c;4542;10;30000;0;3;0;0;-4;0
-99;symbol_c+3s-4_c;4543;10;50000;0;-4;3;0;0;0
-100;symbol_c+3d-4_c;4544;10;50000;0;0;3;0;-4;0
-101;symbol_d+3s-4_c;4545;10;50000;0;-4;0;0;3;0
-102;symbol_d+3c-4_c;4546;10;50000;0;0;-4;0;3;0
-103;symbol_i+3m-4_c;4547;10;50000;3;0;0;-4;0;0
-104;symbol_i+3w-4_c;4548;10;50000;3;0;0;0;0;-4
-105;symbol_m+3i-4_c;4549;10;50000;-4;0;0;3;0;0
-106;symbol_m+3w-4_c;4550;10;50000;0;0;0;3;0;-4
-107;symbol_w+3i-4_c;4551;10;50000;-4;0;0;0;0;3
-108;symbol_w+3m-4_c;4552;10;50000;0;0;0;-4;0;3
-109;symbol_s+4c-6_c;4565;10;36000;0;4;-6;0;0;0
-110;symbol_s+4d-6_c;4566;10;36000;0;4;0;0;-6;0
-111;symbol_c+4s-6_c;4567;10;50000;0;-6;4;0;0;0
-112;symbol_c+4d-6_c;4568;10;50000;0;0;4;0;-6;0
-113;symbol_d+4s-6_c;4569;10;30000;0;-6;0;0;4;0
-114;symbol_d+4c-6_c;4570;10;36000;0;0;-6;0;4;0
-115;symbol_i+4m-6_c;4571;10;36000;4;0;0;-6;0;0
-116;symbol_i+4w-6_c;4572;10;30000;4;0;0;0;0;-6
-117;symbol_m+4i-6_c;4573;10;36000;-6;0;0;4;0;0
-118;symbol_m+4w-6_c;4574;10;36000;0;0;0;4;0;-6
-119;symbol_w+4i-6_c;4575;10;36000;-6;0;0;0;0;4
-120;symbol_w+4m-6_c;4576;10;30000;0;0;0;-6;0;4
-121;symbol_s+4c-5_c;4577;10;36000;0;4;-5;0;0;0
-122;symbol_s+4d-5_c;4578;10;90000;0;4;0;0;-5;0
-123;symbol_c+4s-5_c;4579;10;90000;0;-5;4;0;0;0
-124;symbol_c+4d-5_c;4580;10;90000;0;0;4;0;-5;0
-125;symbol_d+4s-5_c;4581;10;36000;0;-5;0;0;4;0
-126;symbol_d+4c-5_c;4582;10;36000;0;0;-5;0;4;0
-127;symbol_i+4m-5_c;4583;10;90000;4;0;0;-5;0;0
-128;symbol_i+4w-5_c;4584;10;36000;4;0;0;0;0;-5
-129;symbol_m+4i-5_c;4585;10;90000;-5;0;0;4;0;0
-130;symbol_m+4w-5_c;4586;10;90000;0;0;0;4;0;-5
-131;symbol_w+4i-5_c;4587;10;36000;-5;0;0;0;0;4
-132;symbol_w+4m-5_c;4588;10;36000;0;0;0;-5;0;4
-133;symbol_s+1c-1_c;4553;10;50000;0;1;-1;0;0;0
-134;symbol_s+1d-1_c;4554;10;50000;0;1;0;0;-1;0
-135;symbol_c+1s-1_c;4555;10;50000;0;-1;1;0;0;0
-136;symbol_c+1d-1_c;4556;10;50000;0;0;1;0;-1;0
-137;symbol_d+1s-1_c;4557;10;50000;0;-1;0;0;1;0
-138;symbol_d+1c-1_c;4558;10;50000;0;0;-1;0;1;0
-139;symbol_i+1m-1_c;4559;10;90000;1;0;0;-1;0;0
-140;symbol_i+1w-1_c;4560;10;50000;1;0;0;0;0;-1
-141;symbol_m+1i-1_c;4561;10;50000;-1;0;0;1;0;0
-142;symbol_m+1w-1_c;4562;10;50000;0;0;0;1;0;-1
-143;symbol_w+1i-1_c;4563;10;50000;-1;0;0;0;0;1
-144;symbol_w+1m-1_c;4564;10;50000;0;0;0;-1;0;1
-145;symbol_s+2c-2_c;4589;10;60000;0;2;-2;0;0;0
-146;symbol_s+2d-2_c;4590;10;60000;0;2;0;0;-2;0
-147;symbol_c+2s-2_c;4591;10;60000;0;-2;2;0;0;0
-148;symbol_c+2d-2_c;4592;10;60000;0;0;2;0;-2;0
-149;symbol_d+2s-2_c;4593;10;60000;0;-2;0;0;2;0
-150;symbol_d+2c-2_c;4594;10;60000;0;0;-2;0;2;0
-151;symbol_i+2m-2_c;4595;10;60000;2;0;0;-2;0;0
-152;symbol_i+2w-2_c;4596;10;90000;2;0;0;0;0;-2
-153;symbol_m+2i-2_c;4597;10;60000;-2;0;0;2;0;0
-154;symbol_m+2w-2_c;4598;10;60000;0;0;0;2;0;-2
-155;symbol_w+2i-2_c;4599;10;60000;-2;0;0;0;0;2
-156;symbol_w+2m-2_c;4600;10;60000;0;0;0;-2;0;2
-157;symbol_s+3c-3_c;4601;10;90000;0;3;-3;0;0;0
-158;symbol_s+3d-3_c;4602;10;90000;0;3;0;0;-3;0
-159;symbol_c+3s-3_c;4603;10;90000;0;-3;3;0;0;0
-160;symbol_c+3d-3_c;4604;10;90000;0;0;3;0;-3;0
-161;symbol_d+3s-3_c;4605;10;90000;0;-3;0;0;3;0
-162;symbol_d+3c-3_c;4606;10;90000;0;0;-3;0;3;0
-163;symbol_i+3m-3_c;4607;10;90000;3;0;0;-3;0;0
-164;symbol_i+3w-3_c;4608;10;90000;3;0;0;0;0;-3
-165;symbol_m+3i-3_c;4609;10;90000;-3;0;0;3;0;0
-166;symbol_m+3w-3_c;4610;10;90000;0;0;0;3;0;-3
-167;symbol_w+3i-3_c;4611;10;90000;-3;0;0;0;0;3
-168;symbol_w+3m-3_c;4612;10;90000;0;0;0;-3;0;3
-169;symbol_s+4c-4_c;4613;10;145000;0;4;-4;0;0;0
-170;symbol_s+4d-4_c;4614;10;145000;0;4;0;0;-4;0
-171;symbol_c+4s-4_c;4615;10;145000;0;-4;4;0;0;0
-172;symbol_c+4d-4_c;4616;10;145000;0;0;4;0;-4;0
-173;symbol_d+4s-4_c;4617;10;145000;0;-4;0;0;4;0
-174;symbol_d+4c-4_c;4618;10;145000;0;0;-4;0;4;0
-175;symbol_i+4m-4_c;4619;10;145000;4;0;0;-4;0;0
-176;symbol_i+4w-4_c;4620;10;145000;4;0;0;0;0;-4
-177;symbol_m+4i-4_c;4621;10;145000;-4;0;0;4;0;0
-178;symbol_m+4w-4_c;4622;10;145000;0;0;0;4;0;-4
-179;symbol_w+4i-4_c;4623;10;145000;-4;0;0;0;0;4
-180;symbol_w+4m-4_c;4624;10;145000;0;0;0;-4;0;4
\ No newline at end of file
diff --git a/L2J_Mobius_C6_Interlude/dist/game/data/xsd/Hennas.xsd b/L2J_Mobius_C6_Interlude/dist/game/data/xsd/Hennas.xsd
new file mode 100644
index 0000000000..36727e1726
--- /dev/null
+++ b/L2J_Mobius_C6_Interlude/dist/game/data/xsd/Hennas.xsd
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/commons/util/Util.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/commons/util/Util.java
index 8cd6ee6d93..f68274a889 100644
--- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/commons/util/Util.java
+++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/commons/util/Util.java
@@ -172,4 +172,57 @@ public class Util
}
return array;
}
+
+ /**
+ * @param
+ * @param array - the array to look into
+ * @param obj - the object to search for
+ * @return {@code true} if the {@code array} contains the {@code obj}, {@code false} otherwise.
+ */
+ public static boolean contains(T[] array, T obj)
+ {
+ for (T element : array)
+ {
+ if (element.equals(obj))
+ {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * @param array - the array to look into
+ * @param obj - the integer to search for
+ * @return {@code true} if the {@code array} contains the {@code obj}, {@code false} otherwise
+ */
+ public static boolean contains(int[] array, int obj)
+ {
+ for (int element : array)
+ {
+ if (element == obj)
+ {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * @param array - the array to look into
+ * @param obj - the object to search for
+ * @param ignoreCase
+ * @return {@code true} if the {@code array} contains the {@code obj}, {@code false} otherwise.
+ */
+ public static boolean contains(String[] array, String obj, boolean ignoreCase)
+ {
+ for (String element : array)
+ {
+ if (element.equals(obj) || (ignoreCase && element.equalsIgnoreCase(obj)))
+ {
+ return true;
+ }
+ }
+ return false;
+ }
}
diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/GameServer.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/GameServer.java
index 0effa9c621..40b435cdae 100644
--- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/GameServer.java
+++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/GameServer.java
@@ -48,7 +48,6 @@ import org.l2jmobius.gameserver.datatables.OfflineTradeTable;
import org.l2jmobius.gameserver.datatables.SchemeBufferTable;
import org.l2jmobius.gameserver.datatables.SkillTable;
import org.l2jmobius.gameserver.datatables.csv.ExtractableItemsData;
-import org.l2jmobius.gameserver.datatables.csv.HennaTable;
import org.l2jmobius.gameserver.datatables.csv.MapRegionTable;
import org.l2jmobius.gameserver.datatables.csv.NpcWalkerRoutesTable;
import org.l2jmobius.gameserver.datatables.csv.RecipeTable;
@@ -60,7 +59,6 @@ import org.l2jmobius.gameserver.datatables.sql.CharTemplateTable;
import org.l2jmobius.gameserver.datatables.sql.ClanTable;
import org.l2jmobius.gameserver.datatables.sql.CustomArmorSetsTable;
import org.l2jmobius.gameserver.datatables.sql.HelperBuffTable;
-import org.l2jmobius.gameserver.datatables.sql.HennaTreeTable;
import org.l2jmobius.gameserver.datatables.sql.LevelUpData;
import org.l2jmobius.gameserver.datatables.sql.NpcTable;
import org.l2jmobius.gameserver.datatables.sql.PetDataTable;
@@ -74,6 +72,7 @@ import org.l2jmobius.gameserver.datatables.xml.DoorData;
import org.l2jmobius.gameserver.datatables.xml.ExperienceData;
import org.l2jmobius.gameserver.datatables.xml.FenceData;
import org.l2jmobius.gameserver.datatables.xml.FishData;
+import org.l2jmobius.gameserver.datatables.xml.HennaData;
import org.l2jmobius.gameserver.datatables.xml.ZoneData;
import org.l2jmobius.gameserver.geoengine.GeoEngine;
import org.l2jmobius.gameserver.handler.AdminCommandHandler;
@@ -274,15 +273,7 @@ public class GameServer
ClanTable.getInstance();
CharTemplateTable.getInstance();
LevelUpData.getInstance();
- if (!HennaTable.getInstance().isInitialized())
- {
- throw new Exception("Could not initialize the Henna Table");
- }
-
- if (!HennaTreeTable.getInstance().isInitialized())
- {
- throw new Exception("Could not initialize the Henna Tree Table");
- }
+ HennaData.getInstance();
if (!HelperBuffTable.getInstance().isInitialized())
{
diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/datatables/csv/HennaTable.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/datatables/csv/HennaTable.java
deleted file mode 100644
index 514b8ec2bb..0000000000
--- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/datatables/csv/HennaTable.java
+++ /dev/null
@@ -1,160 +0,0 @@
-/*
- * This file is part of the L2J Mobius project.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-package org.l2jmobius.gameserver.datatables.csv;
-
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.FileReader;
-import java.io.IOException;
-import java.io.LineNumberReader;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.StringTokenizer;
-import java.util.logging.Logger;
-
-import org.l2jmobius.Config;
-import org.l2jmobius.gameserver.model.StatsSet;
-import org.l2jmobius.gameserver.model.items.Henna;
-
-public class HennaTable
-{
- private static final Logger LOGGER = Logger.getLogger(HennaTable.class.getName());
-
- private final Map _henna;
- private final boolean _initialized = true;
-
- private HennaTable()
- {
- _henna = new HashMap<>();
- restoreHennaData();
- }
-
- private void restoreHennaData()
- {
- FileReader reader = null;
- BufferedReader buff = null;
- LineNumberReader lnr = null;
-
- try
- {
- final File fileData = new File(Config.DATAPACK_ROOT + "/data/csv/henna.csv");
-
- reader = new FileReader(fileData);
- buff = new BufferedReader(reader);
- lnr = new LineNumberReader(buff);
-
- String line = null;
-
- while ((line = lnr.readLine()) != null)
- {
- // ignore comments
- if ((line.trim().length() == 0) || line.startsWith("#"))
- {
- continue;
- }
-
- final StringTokenizer st = new StringTokenizer(line, ";");
-
- final StatsSet hennaDat = new StatsSet();
- final int id = Integer.parseInt(st.nextToken());
- hennaDat.set("symbol_id", id);
- st.nextToken(); // next token...ignore name
- hennaDat.set("dye", Integer.parseInt(st.nextToken()));
- hennaDat.set("amount", Integer.parseInt(st.nextToken()));
- hennaDat.set("price", Integer.parseInt(st.nextToken()));
- hennaDat.set("stat_INT", Integer.parseInt(st.nextToken()));
- hennaDat.set("stat_STR", Integer.parseInt(st.nextToken()));
- hennaDat.set("stat_CON", Integer.parseInt(st.nextToken()));
- hennaDat.set("stat_MEM", Integer.parseInt(st.nextToken()));
- hennaDat.set("stat_DEX", Integer.parseInt(st.nextToken()));
- hennaDat.set("stat_WIT", Integer.parseInt(st.nextToken()));
-
- final Henna template = new Henna(hennaDat);
- _henna.put(id, template);
- }
-
- LOGGER.info("HennaTable: Loaded " + _henna.size() + " Templates.");
- }
- catch (FileNotFoundException e)
- {
- LOGGER.warning(Config.DATAPACK_ROOT + "/data/csv/henna.csv is missing in data folder");
- }
- catch (IOException e0)
- {
- LOGGER.warning("Error while creating table: " + e0.getMessage() + "\n" + e0);
- }
- finally
- {
- if (lnr != null)
- {
- try
- {
- lnr.close();
- }
- catch (Exception e1)
- {
- LOGGER.warning("Problem with HennaTable: " + e1.getMessage());
- }
- }
-
- if (buff != null)
- {
- try
- {
- buff.close();
- }
- catch (Exception e1)
- {
- LOGGER.warning("Problem with HennaTable: " + e1.getMessage());
- }
- }
-
- if (reader != null)
- {
- try
- {
- reader.close();
- }
- catch (Exception e1)
- {
- LOGGER.warning("Problem with HennaTable: " + e1.getMessage());
- }
- }
- }
- }
-
- public boolean isInitialized()
- {
- return _initialized;
- }
-
- public Henna getTemplate(int id)
- {
- return _henna.get(id);
- }
-
- public static HennaTable getInstance()
- {
- return SingletonHolder.INSTANCE;
- }
-
- private static class SingletonHolder
- {
- protected static final HennaTable INSTANCE = new HennaTable();
- }
-}
diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/datatables/sql/HennaTreeTable.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/datatables/sql/HennaTreeTable.java
deleted file mode 100644
index d6730dd19e..0000000000
--- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/datatables/sql/HennaTreeTable.java
+++ /dev/null
@@ -1,136 +0,0 @@
-/*
- * This file is part of the L2J Mobius project.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-package org.l2jmobius.gameserver.datatables.sql;
-
-import java.sql.Connection;
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
-import java.util.ArrayList;
-import java.util.EnumMap;
-import java.util.List;
-import java.util.Map;
-import java.util.logging.Logger;
-
-import org.l2jmobius.commons.database.DatabaseFactory;
-import org.l2jmobius.gameserver.datatables.csv.HennaTable;
-import org.l2jmobius.gameserver.model.actor.instance.HennaInstance;
-import org.l2jmobius.gameserver.model.base.ClassId;
-import org.l2jmobius.gameserver.model.items.Henna;
-
-public class HennaTreeTable
-{
- private static final Logger LOGGER = Logger.getLogger(HennaTreeTable.class.getName());
-
- private final Map> _hennaTrees;
- private final boolean _initialized = true;
-
- private HennaTreeTable()
- {
- _hennaTrees = new EnumMap<>(ClassId.class);
- int classId = 0;
- int count = 0;
-
- try (Connection con = DatabaseFactory.getConnection())
- {
- final PreparedStatement statement = con.prepareStatement("SELECT class_name, id, parent_id FROM class_list ORDER BY id");
- final ResultSet classlist = statement.executeQuery();
- List list;
-
- CLASSLIST: while (classlist.next())
- {
- list = new ArrayList<>();
- classId = classlist.getInt("id");
- final PreparedStatement statement2 = con.prepareStatement("SELECT class_id, symbol_id FROM henna_trees where class_id=? ORDER BY symbol_id");
- statement2.setInt(1, classId);
- final ResultSet hennatree = statement2.executeQuery();
-
- while (hennatree.next())
- {
- final int id = hennatree.getInt("symbol_id");
- // String name = hennatree.getString("name");
- final Henna template = HennaTable.getInstance().getTemplate(id);
-
- if (template == null)
- {
- hennatree.close();
- statement2.close();
- classlist.close();
- statement.close();
- continue CLASSLIST;
- }
-
- final HennaInstance temp = new HennaInstance(template);
- temp.setSymbolId(id);
- temp.setItemIdDye(template.getDyeId());
- temp.setAmountDyeRequire(template.getAmountDyeRequire());
- temp.setPrice(template.getPrice());
- temp.setStatINT(template.getStatINT());
- temp.setStatSTR(template.getStatSTR());
- temp.setStatCON(template.getStatCON());
- temp.setStatMEM(template.getStatMEM());
- temp.setStatDEX(template.getStatDEX());
- temp.setStatWIT(template.getStatWIT());
-
- list.add(temp);
- }
- _hennaTrees.put(ClassId.getClassId(classId), list);
-
- hennatree.close();
- statement2.close();
-
- count += list.size();
- }
-
- classlist.close();
- statement.close();
- }
- catch (Exception e)
- {
- LOGGER.warning("Error while creating henna tree for classId " + classId + " " + e);
- }
-
- LOGGER.info("HennaTreeTable: Loaded " + count + " Henna Tree Templates.");
- }
-
- public HennaInstance[] getAvailableHenna(ClassId classId)
- {
- final List henna = _hennaTrees.get(classId);
- if (henna == null)
- {
- // the hennatree for this class is undefined, so we give an empty list
- LOGGER.warning("Hennatree for class " + classId + " is not defined!");
- return new HennaInstance[0];
- }
-
- return henna.toArray(new HennaInstance[henna.size()]);
- }
-
- public boolean isInitialized()
- {
- return _initialized;
- }
-
- public static HennaTreeTable getInstance()
- {
- return SingletonHolder.INSTANCE;
- }
-
- private static class SingletonHolder
- {
- protected static final HennaTreeTable INSTANCE = new HennaTreeTable();
- }
-}
diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/datatables/xml/FishData.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/datatables/xml/FishData.java
index 8bd57cf97c..9bed05dea5 100644
--- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/datatables/xml/FishData.java
+++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/datatables/xml/FishData.java
@@ -52,7 +52,7 @@ public class FishData implements IXmlReader
@Override
public void parseDocument(Document doc, File f)
{
- // StatsSet used to feed informations.
+ // StatsSet used to feed informations. Cleaned on every entry.
final StatsSet set = new StatsSet();
// First element is never read.
diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/datatables/xml/HennaData.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/datatables/xml/HennaData.java
new file mode 100644
index 0000000000..7d5cd83eb8
--- /dev/null
+++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/datatables/xml/HennaData.java
@@ -0,0 +1,107 @@
+/*
+ * This file is part of the L2J Mobius project.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+package org.l2jmobius.gameserver.datatables.xml;
+
+import java.io.File;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.NamedNodeMap;
+import org.w3c.dom.Node;
+
+import org.l2jmobius.commons.util.IXmlReader;
+import org.l2jmobius.gameserver.model.StatsSet;
+import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
+import org.l2jmobius.gameserver.model.items.Henna;
+
+/**
+ * This class loads and stores {@link Henna}s infos. Hennas are called "dye" ingame.
+ */
+public class HennaData implements IXmlReader
+{
+ private final Map _hennas = new HashMap<>();
+
+ protected HennaData()
+ {
+ load();
+ }
+
+ @Override
+ public void load()
+ {
+ _hennas.clear();
+ parseDatapackFile("data/Hennas.xml");
+ LOGGER.info(getClass().getSimpleName() + ": Loaded " + _hennas.size() + " hennas.");
+ }
+
+ @Override
+ public void parseDocument(Document doc, File f)
+ {
+ // StatsSet used to feed informations. Cleaned on every entry.
+ final StatsSet set = new StatsSet();
+
+ // First element is never read.
+ final Node n = doc.getFirstChild();
+
+ for (Node node = n.getFirstChild(); node != null; node = node.getNextSibling())
+ {
+ if (!"henna".equalsIgnoreCase(node.getNodeName()))
+ {
+ continue;
+ }
+
+ // Parse and feed content.
+ final NamedNodeMap attrs = node.getAttributes();
+ for (int i = 0; i < attrs.getLength(); i++)
+ {
+ final Node attr = attrs.item(i);
+ set.set(attr.getNodeName(), attr.getNodeValue());
+ }
+
+ // Feed the map with new data.
+ _hennas.put(set.getInt("symbolId"), new Henna(set));
+ }
+ }
+
+ public Henna getHenna(int id)
+ {
+ return _hennas.get(id);
+ }
+
+ /**
+ * Retrieve all {@link Henna}s available for a {@link PlayerInstance} class.
+ * @param player : The Player used as class parameter.
+ * @return a List of all available Hennas for this Player.
+ */
+ public List getAvailableHennasFor(PlayerInstance player)
+ {
+ return _hennas.values().stream().filter(h -> h.canBeUsedBy(player)).collect(Collectors.toList());
+ }
+
+ public static HennaData getInstance()
+ {
+ return SingletonHolder.INSTANCE;
+ }
+
+ private static class SingletonHolder
+ {
+ protected static final HennaData INSTANCE = new HennaData();
+ }
+}
\ No newline at end of file
diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/actor/instance/HennaInstance.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/actor/instance/HennaInstance.java
deleted file mode 100644
index 1d68e9dc81..0000000000
--- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/actor/instance/HennaInstance.java
+++ /dev/null
@@ -1,214 +0,0 @@
-/*
- * This file is part of the L2J Mobius project.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-package org.l2jmobius.gameserver.model.actor.instance;
-
-import org.l2jmobius.gameserver.model.items.Henna;
-
-/**
- * This class represents a Non-Player-Creature in the world. it can be a monster or a friendly creature. it also uses a template to fetch some static values. the templates are hardcoded in the client, so we can rely on them.
- */
-
-public class HennaInstance
-{
- private final Henna _template;
- private int _symbolId;
- private int _itemIdDye;
- private int _price;
- private int _statINT;
- private int _statSTR;
- private int _statCON;
- private int _statMEM;
- private int _statDEX;
- private int _statWIT;
- private int _amountDyeRequire;
-
- public HennaInstance(Henna template)
- {
- _template = template;
- _symbolId = _template.symbolId;
- _itemIdDye = _template.dye;
- _amountDyeRequire = _template.amount;
- _price = _template.price;
- _statINT = _template.statINT;
- _statSTR = _template.statSTR;
- _statCON = _template.statCON;
- _statMEM = _template.statMEM;
- _statDEX = _template.statDEX;
- _statWIT = _template.statWIT;
- }
-
- public String getName()
- {
- String res = "";
- if (_statINT > 0)
- {
- res = res + "INT +" + _statINT;
- }
- else if (_statSTR > 0)
- {
- res = res + "STR +" + _statSTR;
- }
- else if (_statCON > 0)
- {
- res = res + "CON +" + _statCON;
- }
- else if (_statMEM > 0)
- {
- res = res + "MEN +" + _statMEM;
- }
- else if (_statDEX > 0)
- {
- res = res + "DEX +" + _statDEX;
- }
- else if (_statWIT > 0)
- {
- res = res + "WIT +" + _statWIT;
- }
-
- if (_statINT < 0)
- {
- res = res + ", INT " + _statINT;
- }
- else if (_statSTR < 0)
- {
- res = res + ", STR " + _statSTR;
- }
- else if (_statCON < 0)
- {
- res = res + ", CON " + _statCON;
- }
- else if (_statMEM < 0)
- {
- res = res + ", MEN " + _statMEM;
- }
- else if (_statDEX < 0)
- {
- res = res + ", DEX " + _statDEX;
- }
- else if (_statWIT < 0)
- {
- res = res + ", WIT " + _statWIT;
- }
-
- return res;
- }
-
- public Henna getTemplate()
- {
- return _template;
- }
-
- public int getSymbolId()
- {
- return _symbolId;
- }
-
- public void setSymbolId(int symbolId)
- {
- _symbolId = symbolId;
- }
-
- public int getItemIdDye()
- {
- return _itemIdDye;
- }
-
- public void setItemIdDye(int itemIdDye)
- {
- _itemIdDye = itemIdDye;
- }
-
- public int getAmountDyeRequire()
- {
- return _amountDyeRequire;
- }
-
- public void setAmountDyeRequire(int amountDyeRequire)
- {
- _amountDyeRequire = amountDyeRequire;
- }
-
- public int getPrice()
- {
- return _price;
- }
-
- public void setPrice(int price)
- {
- _price = price;
- }
-
- public int getStatINT()
- {
- return _statINT;
- }
-
- public void setStatINT(int statINT)
- {
- _statINT = statINT;
- }
-
- public int getStatSTR()
- {
- return _statSTR;
- }
-
- public void setStatSTR(int statSTR)
- {
- _statSTR = statSTR;
- }
-
- public int getStatCON()
- {
- return _statCON;
- }
-
- public void setStatCON(int statCON)
- {
- _statCON = statCON;
- }
-
- public int getStatMEM()
- {
- return _statMEM;
- }
-
- public void setStatMEM(int statMEM)
- {
- _statMEM = statMEM;
- }
-
- public int getStatDEX()
- {
- return _statDEX;
- }
-
- public void setStatDEX(int statDEX)
- {
- _statDEX = statDEX;
- }
-
- public int getStatWIT()
- {
- return _statWIT;
- }
-
- public void setStatWIT(int statWIT)
- {
- _statWIT = statWIT;
- }
-}
diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java
index 519ca92501..e8df27f055 100644
--- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java
+++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java
@@ -35,7 +35,6 @@ import java.util.concurrent.Future;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.ReentrantLock;
-import java.util.logging.Level;
import org.l2jmobius.Config;
import org.l2jmobius.commons.concurrent.ThreadPool;
@@ -57,7 +56,6 @@ import org.l2jmobius.gameserver.datatables.HeroSkillTable;
import org.l2jmobius.gameserver.datatables.ItemTable;
import org.l2jmobius.gameserver.datatables.NobleSkillTable;
import org.l2jmobius.gameserver.datatables.SkillTable;
-import org.l2jmobius.gameserver.datatables.csv.HennaTable;
import org.l2jmobius.gameserver.datatables.csv.MapRegionTable;
import org.l2jmobius.gameserver.datatables.csv.RecipeTable;
import org.l2jmobius.gameserver.datatables.sql.CharTemplateTable;
@@ -67,6 +65,7 @@ import org.l2jmobius.gameserver.datatables.sql.SkillTreeTable;
import org.l2jmobius.gameserver.datatables.xml.AdminData;
import org.l2jmobius.gameserver.datatables.xml.ExperienceData;
import org.l2jmobius.gameserver.datatables.xml.FishData;
+import org.l2jmobius.gameserver.datatables.xml.HennaData;
import org.l2jmobius.gameserver.enums.Race;
import org.l2jmobius.gameserver.geoengine.GeoEngine;
import org.l2jmobius.gameserver.handler.IItemHandler;
@@ -413,13 +412,15 @@ public class PlayerInstance extends Playable
private final List _snoopListener = new ArrayList<>();
private final List _snoopedPlayer = new ArrayList<>();
private ClassId _skillLearningClassId;
- private final HennaInstance[] _henna = new HennaInstance[3];
+
+ private final Henna[] _henna = new Henna[3];
private int _hennaSTR;
private int _hennaINT;
private int _hennaDEX;
private int _hennaMEN;
private int _hennaWIT;
private int _hennaCON;
+
private Summon _summon = null;
private TamedBeastInstance _tamedBeast = null;
private Radar _radar;
@@ -9962,61 +9963,6 @@ public class PlayerInstance extends Playable
updateEffectIcons();
}
- /**
- * Retrieve from the database all Henna of this PlayerInstance, add them to _henna and calculate stats of the PlayerInstance.
- *
- */
- private void restoreHenna()
- {
- try (Connection con = DatabaseFactory.getConnection())
- {
- final PreparedStatement statement = con.prepareStatement(RESTORE_CHAR_HENNAS);
- statement.setInt(1, getObjectId());
- statement.setInt(2, getClassIndex());
- final ResultSet rset = statement.executeQuery();
-
- for (int i = 0; i < 3; i++)
- {
- _henna[i] = null;
- }
-
- while (rset.next())
- {
- final int slot = rset.getInt("slot");
-
- if ((slot < 1) || (slot > 3))
- {
- continue;
- }
-
- final int symbol_id = rset.getInt("symbol_id");
-
- HennaInstance sym = null;
-
- if (symbol_id != 0)
- {
- final Henna tpl = HennaTable.getInstance().getTemplate(symbol_id);
-
- if (tpl != null)
- {
- sym = new HennaInstance(tpl);
- _henna[slot - 1] = sym;
- }
- }
- }
-
- rset.close();
- statement.close();
- }
- catch (Exception e)
- {
- LOGGER.warning("could not restore henna: " + e);
- }
-
- // Calculate Henna modifiers of this PlayerInstance
- recalcHennaStats();
- }
-
/**
* Retrieve from the database all Recommendation data of this PlayerInstance, add to _recomChars and calculate stats of the PlayerInstance.
*
@@ -10043,13 +9989,68 @@ public class PlayerInstance extends Playable
}
/**
- * Return the number of Henna empty slot of the PlayerInstance.
- *
- * @return the henna empty slots
+ * Retrieve from the database all Henna of this Player, add them to _henna and calculate stats of the Player.
+ */
+ private void restoreHenna()
+ {
+ try (Connection con = DatabaseFactory.getConnection())
+ {
+ PreparedStatement statement = con.prepareStatement(RESTORE_CHAR_HENNAS);
+ statement.setInt(1, getObjectId());
+ statement.setInt(2, getClassIndex());
+ ResultSet rset = statement.executeQuery();
+
+ for (int i = 0; i < 3; i++)
+ {
+ _henna[i] = null;
+ }
+
+ while (rset.next())
+ {
+ int slot = rset.getInt("slot");
+
+ if ((slot < 1) || (slot > 3))
+ {
+ continue;
+ }
+
+ int symbolId = rset.getInt("symbol_id");
+ if (symbolId != 0)
+ {
+ Henna tpl = HennaData.getInstance().getHenna(symbolId);
+ if (tpl != null)
+ {
+ _henna[slot - 1] = tpl;
+ }
+ }
+ }
+
+ rset.close();
+ statement.close();
+ }
+ catch (Exception e)
+ {
+ LOGGER.warning("Could not restore henna: " + e);
+ }
+
+ // Calculate Henna modifiers of this Player
+ recalcHennaStats();
+ }
+
+ /**
+ * @return the number of Henna empty slot of the Player.
*/
public int getHennaEmptySlots()
{
- int totalSlots = 1 + getClassId().level();
+ int totalSlots = 0;
+ if (getClassId().level() == 1)
+ {
+ totalSlots = 2;
+ }
+ else
+ {
+ totalSlots = 3;
+ }
for (int i = 0; i < 3; i++)
{
@@ -10068,10 +10069,9 @@ public class PlayerInstance extends Playable
}
/**
- * Remove a Henna of the PlayerInstance, save update in the character_hennas table of the database and send Server->Client HennaInfo/UserInfo packet to this PlayerInstance.
- *
- * @param slot the slot
- * @return true, if successful
+ * Remove a Henna of the Player, save update in the character_hennas table of the database and send HennaInfo/UserInfo packet to this Player.
+ * @param slot The slot number to make checks on.
+ * @return true if successful.
*/
public boolean removeHenna(int slot)
{
@@ -10082,106 +10082,89 @@ public class PlayerInstance extends Playable
slot--;
- final HennaInstance henna = _henna[slot];
- if (henna == null)
+ if (_henna[slot] == null)
{
return false;
}
+ Henna henna = _henna[slot];
_henna[slot] = null;
- try (Connection con = DatabaseFactory.getConnection();
- PreparedStatement ps = con.prepareStatement(DELETE_CHAR_HENNA))
+ try (Connection con = DatabaseFactory.getConnection())
{
- ps.setInt(1, getObjectId());
- ps.setInt(2, slot + 1);
- ps.setInt(3, _classIndex);
- ps.execute();
+ PreparedStatement statement = con.prepareStatement(DELETE_CHAR_HENNA);
+
+ statement.setInt(1, getObjectId());
+ statement.setInt(2, slot + 1);
+ statement.setInt(3, getClassIndex());
+
+ statement.execute();
+ statement.close();
}
catch (Exception e)
{
- LOGGER.log(Level.SEVERE, "Failed removing character henna.", e);
+ LOGGER.warning("Could not remove char henna: " + e);
}
- // Calculate Henna modifiers of this PlayerInstance
+ // Calculate Henna modifiers of this Player
recalcHennaStats();
- // Send Server->Client HennaInfo packet to this PlayerInstance
+ // Send HennaInfo packet to this Player
sendPacket(new HennaInfo(this));
- // Send Server->Client UserInfo packet to this PlayerInstance
+ // Send UserInfo packet to this Player
sendPacket(new UserInfo(this));
+ reduceAdena("Henna", henna.getPrice() / 5, this, false);
+
// Add the recovered dyes to the player's inventory and notify them.
- _inventory.addItem("Henna", henna.getItemIdDye(), henna.getAmountDyeRequire() / 2, this, null);
-
- final SystemMessage sm = new SystemMessage(SystemMessageId.EARNED_S2_S1_S);
- sm.addItemName(henna.getItemIdDye());
- sm.addNumber(henna.getAmountDyeRequire() / 2);
- sendPacket(sm);
-
+ addItem("Henna", henna.getDyeId(), Henna.getRequiredDyeAmount() / 2, this, true);
+ sendPacket(SystemMessageId.SYMBOL_DELETED);
return true;
}
/**
- * Add a Henna to the PlayerInstance, save update in the character_hennas table of the database and send Server->Client HennaInfo/UserInfo packet to this PlayerInstance.
- *
- * @param henna the henna
- * @return true, if successful
+ * Add a Henna to the Player, save update in the character_hennas table of the database and send Server->Client HennaInfo/UserInfo packet to this Player.
+ * @param henna The Henna template to add.
*/
- public boolean addHenna(HennaInstance henna)
+ public void addHenna(Henna henna)
{
- if (getHennaEmptySlots() == 0)
- {
- sendMessage("You may not have more than three equipped symbols at a time.");
- return false;
- }
-
- // int slot = 0;
for (int i = 0; i < 3; i++)
{
if (_henna[i] == null)
{
_henna[i] = henna;
- // Calculate Henna modifiers of this PlayerInstance
+ // Calculate Henna modifiers of this Player
recalcHennaStats();
try (Connection con = DatabaseFactory.getConnection())
{
- final PreparedStatement statement = con.prepareStatement(ADD_CHAR_HENNA);
+ PreparedStatement statement = con.prepareStatement(ADD_CHAR_HENNA);
+
statement.setInt(1, getObjectId());
statement.setInt(2, henna.getSymbolId());
statement.setInt(3, i + 1);
statement.setInt(4, getClassIndex());
+
statement.execute();
statement.close();
}
catch (Exception e)
{
- LOGGER.warning("could not save char henna: " + e);
+ LOGGER.warning("Could not save char henna: " + e);
}
- // Send Server->Client HennaInfo packet to this PlayerInstance
- final HennaInfo hi = new HennaInfo(this);
- sendPacket(hi);
-
- // Send Server->Client UserInfo packet to this PlayerInstance
- final UserInfo ui = new UserInfo(this);
- sendPacket(ui);
-
- getInventory().refreshWeight();
-
- return true;
+ sendPacket(new HennaInfo(this));
+ sendPacket(new UserInfo(this));
+ sendPacket(SystemMessageId.SYMBOL_ADDED);
+ return;
}
}
-
- return false;
}
/**
- * Calculate Henna modifiers of this PlayerInstance.
- *
+ * Calculate Henna modifiers of this Player.
*/
private void recalcHennaStats()
{
@@ -10198,12 +10181,13 @@ public class PlayerInstance extends Playable
{
continue;
}
- _hennaINT += _henna[i].getStatINT();
- _hennaSTR += _henna[i].getStatSTR();
- _hennaMEN += _henna[i].getStatMEM();
- _hennaCON += _henna[i].getStatCON();
- _hennaWIT += _henna[i].getStatWIT();
- _hennaDEX += _henna[i].getStatDEX();
+
+ _hennaINT += _henna[i].getINT();
+ _hennaSTR += _henna[i].getSTR();
+ _hennaMEN += _henna[i].getMEN();
+ _hennaCON += _henna[i].getCON();
+ _hennaWIT += _henna[i].getWIT();
+ _hennaDEX += _henna[i].getDEX();
}
if (_hennaINT > 5)
@@ -10238,12 +10222,10 @@ public class PlayerInstance extends Playable
}
/**
- * Return the Henna of this PlayerInstance corresponding to the selected slot.
- *
- * @param slot the slot
- * @return the hennas
+ * @param slot A slot to check.
+ * @return the Henna of this Player corresponding to the selected slot.
*/
- public HennaInstance getHennas(int slot)
+ public Henna getHenna(int slot)
{
if ((slot < 1) || (slot > 3))
{
@@ -10253,61 +10235,31 @@ public class PlayerInstance extends Playable
return _henna[slot - 1];
}
- /**
- * Return the INT Henna modifier of this PlayerInstance.
- *
- * @return the henna stat int
- */
public int getHennaStatINT()
{
return _hennaINT;
}
- /**
- * Return the STR Henna modifier of this PlayerInstance.
- *
- * @return the henna stat str
- */
public int getHennaStatSTR()
{
return _hennaSTR;
}
- /**
- * Return the CON Henna modifier of this PlayerInstance.
- *
- * @return the henna stat con
- */
public int getHennaStatCON()
{
return _hennaCON;
}
- /**
- * Return the MEN Henna modifier of this PlayerInstance.
- *
- * @return the henna stat men
- */
public int getHennaStatMEN()
{
return _hennaMEN;
}
- /**
- * Return the WIT Henna modifier of this PlayerInstance.
- *
- * @return the henna stat wit
- */
public int getHennaStatWIT()
{
return _hennaWIT;
}
- /**
- * Return the DEX Henna modifier of this PlayerInstance.
- *
- * @return the henna stat dex
- */
public int getHennaStatDEX()
{
return _hennaDEX;
diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/actor/instance/SymbolMakerInstance.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/actor/instance/SymbolMakerInstance.java
index f87a8f1db2..6d0df09a26 100644
--- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/actor/instance/SymbolMakerInstance.java
+++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/actor/instance/SymbolMakerInstance.java
@@ -16,40 +16,46 @@
*/
package org.l2jmobius.gameserver.model.actor.instance;
-import org.l2jmobius.gameserver.datatables.sql.HennaTreeTable;
+import org.l2jmobius.gameserver.datatables.xml.HennaData;
import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.templates.NpcTemplate;
+import org.l2jmobius.gameserver.network.SystemMessageId;
import org.l2jmobius.gameserver.network.serverpackets.HennaEquipList;
-import org.l2jmobius.gameserver.network.serverpackets.ItemList;
+import org.l2jmobius.gameserver.network.serverpackets.HennaRemoveList;
public class SymbolMakerInstance extends FolkInstance
{
+ public SymbolMakerInstance(int objectID, NpcTemplate template)
+ {
+ super(objectID, template);
+ }
+
@Override
public void onBypassFeedback(PlayerInstance player, String command)
{
if (command.equals("Draw"))
{
- final HennaInstance[] henna = HennaTreeTable.getInstance().getAvailableHenna(player.getClassId());
- final HennaEquipList hel = new HennaEquipList(player, henna);
- player.sendPacket(hel);
-
- player.sendPacket(new ItemList(player, false));
+ player.sendPacket(new HennaEquipList(player, HennaData.getInstance().getAvailableHennasFor(player)));
}
else if (command.equals("RemoveList"))
{
- showRemoveChat(player);
- }
- else if (command.startsWith("Remove "))
- {
- if (!player.getClient().getFloodProtectors().getTransaction().tryPerformAction("HennaRemove"))
+ boolean hasHennas = false;
+ for (int i = 1; i <= 3; i++)
{
- return;
+ if (player.getHenna(i) != null)
+ {
+ hasHennas = true;
+ }
}
- final int slot = Integer.parseInt(command.substring(7));
- player.removeHenna(slot);
-
- player.sendPacket(new ItemList(player, false));
+ if (hasHennas)
+ {
+ player.sendPacket(new HennaRemoveList(player));
+ }
+ else
+ {
+ player.sendPacket(SystemMessageId.SYMBOL_NOT_FOUND);
+ }
}
else
{
@@ -57,36 +63,6 @@ public class SymbolMakerInstance extends FolkInstance
}
}
- private void showRemoveChat(PlayerInstance player)
- {
- final StringBuilder html1 = new StringBuilder("");
- html1.append("Select symbol you would like to remove:
");
- boolean hasHennas = false;
-
- for (int i = 1; i <= 3; i++)
- {
- final HennaInstance henna = player.getHennas(i);
-
- if (henna != null)
- {
- hasHennas = true;
- html1.append("" + henna.getName() + "
");
- }
- }
- if (!hasHennas)
- {
- html1.append("You don't have any symbol to remove!");
- }
-
- html1.append("");
- insertObjectIdAndShowChatWindow(player, html1.toString());
- }
-
- public SymbolMakerInstance(int objectID, NpcTemplate template)
- {
- super(objectID, template);
- }
-
@Override
public String getHtmlPath(int npcId, int val)
{
diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/items/Henna.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/items/Henna.java
index b6ad57137c..1c8c4b34ca 100644
--- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/items/Henna.java
+++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/items/Henna.java
@@ -16,84 +16,98 @@
*/
package org.l2jmobius.gameserver.model.items;
+import org.l2jmobius.commons.util.Util;
import org.l2jmobius.gameserver.model.StatsSet;
+import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
+/**
+ * A datatype used to retain Henna infos. Hennas are called "dye" ingame, and enhance {@link PlayerInstance} stats for a fee.
+ * You can draw up to 3 hennas (depending about your current class rank), but accumulated boni for a stat can't be higher than +5. There is no limit in reduction.
+ */
public class Henna
{
- public int symbolId;
- public String symbolName;
- public int dye;
- public int price;
- public int amount;
- public int statINT;
- public int statSTR;
- public int statCON;
- public int statMEM;
- public int statDEX;
- public int statWIT;
+ private final int _symbolId;
+ private final int _dyeId;
+ private final int _price;
+ private final int _INT;
+ private final int _STR;
+ private final int _CON;
+ private final int _MEN;
+ private final int _DEX;
+ private final int _WIT;
+ private final int[] _classes;
public Henna(StatsSet set)
{
- symbolId = set.getInt("symbol_id");
- symbolName = ""; // set.getString("symbol_name");
- dye = set.getInt("dye");
- price = set.getInt("price");
- amount = set.getInt("amount");
- statINT = set.getInt("stat_INT");
- statSTR = set.getInt("stat_STR");
- statCON = set.getInt("stat_CON");
- statMEM = set.getInt("stat_MEM");
- statDEX = set.getInt("stat_DEX");
- statWIT = set.getInt("stat_WIT");
+ _symbolId = set.getInt("symbolId");
+ _dyeId = set.getInt("dyeId");
+ _price = set.getInt("price");
+ _INT = set.getInt("INT");
+ _STR = set.getInt("STR");
+ _CON = set.getInt("CON");
+ _MEN = set.getInt("MEN");
+ _DEX = set.getInt("DEX");
+ _WIT = set.getInt("WIT");
+ _classes = set.getIntArray("classes", ";");
}
public int getSymbolId()
{
- return symbolId;
+ return _symbolId;
}
public int getDyeId()
{
- return dye;
+ return _dyeId;
}
public int getPrice()
{
- return price;
+ return _price;
}
- public int getAmountDyeRequire()
+ public static final int getRequiredDyeAmount()
{
- return amount;
+ return 10;
}
- public int getStatINT()
+ public int getINT()
{
- return statINT;
+ return _INT;
}
- public int getStatSTR()
+ public int getSTR()
{
- return statSTR;
+ return _STR;
}
- public int getStatCON()
+ public int getCON()
{
- return statCON;
+ return _CON;
}
- public int getStatMEM()
+ public int getMEN()
{
- return statMEM;
+ return _MEN;
}
- public int getStatDEX()
+ public int getDEX()
{
- return statDEX;
+ return _DEX;
}
- public int getStatWIT()
+ public int getWIT()
{
- return statWIT;
+ return _WIT;
}
-}
+
+ /**
+ * Seek if this {@link Henna} can be used by a {@link PlayerInstance}, based on his classId.
+ * @param player : The Player to check.
+ * @return true if this Henna owns the Player classId.
+ */
+ public boolean canBeUsedBy(PlayerInstance player)
+ {
+ return Util.contains(_classes, player.getClassId().getId());
+ }
+}
\ No newline at end of file
diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/GamePacketHandler.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/GamePacketHandler.java
index d96b22b54a..ad6c77e3a1 100644
--- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/GamePacketHandler.java
+++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/GamePacketHandler.java
@@ -973,6 +973,21 @@ public class GamePacketHandler implements IPacketHandler, IClientFac
msg = new RequestHennaEquip();
break;
}
+ case 0xbd:
+ {
+ msg = new RequestHennaRemoveList();
+ break;
+ }
+ case 0xbe:
+ {
+ msg = new RequestHennaItemRemoveInfo();
+ break;
+ }
+ case 0xbf:
+ {
+ msg = new RequestHennaRemove();
+ break;
+ }
case 0xc0:
{
// Clan Privileges
diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/SystemMessageId.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/SystemMessageId.java
index c0cb57eb05..268ed2c3cc 100644
--- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/SystemMessageId.java
+++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/SystemMessageId.java
@@ -2328,6 +2328,12 @@ public enum SystemMessageId
*/
SYMBOL_ADDED(877),
+ /**
+ * ID: 878
+ * Message: The symbol has been deleted.
+ */
+ SYMBOL_DELETED(878),
+
/**
* ID: 879
* Message: The manor system is currently under maintenance.
@@ -2436,6 +2442,18 @@ public enum SystemMessageId
*/
CANT_DRAW_SYMBOL(899),
+ /**
+ * ID: 900
+ * Message: No slot exists to draw the symbol
+ */
+ SYMBOLS_FULL(900),
+
+ /**
+ * ID: 901
+ * Message: The symbol information cannot be found.
+ */
+ SYMBOL_NOT_FOUND(901),
+
/**
* ID: 910
* Message: Current location : $s1, $s2, $s3 (Near Talking Island Village)
diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/clientpackets/RequestGMCommand.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/clientpackets/RequestGMCommand.java
index f70c1e88e0..e952a5b5e2 100644
--- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/clientpackets/RequestGMCommand.java
+++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/clientpackets/RequestGMCommand.java
@@ -21,6 +21,7 @@ import java.util.logging.Logger;
import org.l2jmobius.gameserver.model.World;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.network.serverpackets.GMViewCharacterInfo;
+import org.l2jmobius.gameserver.network.serverpackets.GMViewHennaInfo;
import org.l2jmobius.gameserver.network.serverpackets.GMViewItemList;
import org.l2jmobius.gameserver.network.serverpackets.GMViewPledgeInfo;
import org.l2jmobius.gameserver.network.serverpackets.GMViewQuestList;
@@ -58,6 +59,7 @@ public class RequestGMCommand extends GameClientPacket
case 1: // player status
{
sendPacket(new GMViewCharacterInfo(player));
+ sendPacket(new GMViewHennaInfo(player));
break;
}
case 2: // player clan
@@ -81,6 +83,7 @@ public class RequestGMCommand extends GameClientPacket
case 5: // player inventory
{
sendPacket(new GMViewItemList(player));
+ sendPacket(new GMViewHennaInfo(player));
break;
}
case 6: // player warehouse
diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/clientpackets/RequestHennaEquip.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/clientpackets/RequestHennaEquip.java
index 5d8a396a3e..414868b894 100644
--- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/clientpackets/RequestHennaEquip.java
+++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/clientpackets/RequestHennaEquip.java
@@ -16,18 +16,11 @@
*/
package org.l2jmobius.gameserver.network.clientpackets;
-import org.l2jmobius.Config;
-import org.l2jmobius.gameserver.datatables.csv.HennaTable;
-import org.l2jmobius.gameserver.datatables.sql.HennaTreeTable;
-import org.l2jmobius.gameserver.model.actor.instance.HennaInstance;
+import org.l2jmobius.gameserver.datatables.xml.HennaData;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.items.Henna;
import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
import org.l2jmobius.gameserver.network.SystemMessageId;
-import org.l2jmobius.gameserver.network.serverpackets.InventoryUpdate;
-import org.l2jmobius.gameserver.network.serverpackets.ItemList;
-import org.l2jmobius.gameserver.network.serverpackets.SystemMessage;
-import org.l2jmobius.gameserver.util.Util;
public class RequestHennaEquip extends GameClientPacket
{
@@ -43,74 +36,50 @@ public class RequestHennaEquip extends GameClientPacket
protected void runImpl()
{
final PlayerInstance player = getClient().getPlayer();
-
if (player == null)
{
return;
}
- if (!getClient().getFloodProtectors().getTransaction().tryPerformAction("HennaEquip"))
+ final Henna henna = HennaData.getInstance().getHenna(_symbolId);
+ if (henna == null)
{
return;
}
- final Henna template = HennaTable.getInstance().getTemplate(_symbolId);
-
- if (template == null)
- {
- return;
- }
-
- final HennaInstance temp = new HennaInstance(template);
-
- // Prevents henna drawing exploit:
- // 1) talk to SymbolMakerInstance
- // 2) RequestHennaList
- // 3) Don't close the window and go to a GrandMaster and change your subclass
- // 4) Get SymbolMaker range again and press draw You could draw any kind of henna just having the required subclass...
- boolean cheater = true;
- for (HennaInstance h : HennaTreeTable.getInstance().getAvailableHenna(player.getClassId()))
- {
- if (h.getSymbolId() == temp.getSymbolId())
- {
- cheater = false;
- break;
- }
- }
-
- int count = 0;
- if ((player.getInventory() != null) && (player.getInventory().getItemByItemId(temp.getItemIdDye()) != null))
- {
- count = player.getInventory().getItemByItemId(temp.getItemIdDye()).getCount();
- }
-
- if (!cheater && (count >= temp.getAmountDyeRequire()) && (player.getAdena() >= temp.getPrice()) && player.addHenna(temp))
- {
- final SystemMessage sm = new SystemMessage(SystemMessageId.S1_DISAPPEARED);
- sm.addItemName(temp.getItemIdDye());
- player.sendPacket(sm);
- player.sendPacket(SystemMessageId.SYMBOL_ADDED);
-
- player.getInventory().reduceAdena("Henna", temp.getPrice(), player, player.getLastFolkNPC());
- final ItemInstance dyeToUpdate = player.getInventory().destroyItemByItemId("Henna", temp.getItemIdDye(), temp.getAmountDyeRequire(), player, player.getLastFolkNPC());
-
- // update inventory
- final InventoryUpdate iu = new InventoryUpdate();
- iu.addModifiedItem(player.getInventory().getAdenaInstance());
- iu.addModifiedItem(dyeToUpdate);
- player.sendPacket(iu);
-
- final ItemList il = new ItemList(getClient().getPlayer(), true);
- sendPacket(il);
- }
- else
+ if (!henna.canBeUsedBy(player))
{
player.sendPacket(SystemMessageId.CANT_DRAW_SYMBOL);
-
- if (!player.isGM() && cheater)
- {
- Util.handleIllegalPlayerAction(player, "Exploit attempt: Character " + player.getName() + " of account " + player.getAccountName() + " tryed to add a forbidden henna.", Config.DEFAULT_PUNISH);
- }
+ return;
}
+
+ if (player.getHennaEmptySlots() == 0)
+ {
+ player.sendPacket(SystemMessageId.SYMBOLS_FULL);
+ return;
+ }
+
+ final ItemInstance ownedDyes = player.getInventory().getItemByItemId(henna.getDyeId());
+ final int count = (ownedDyes == null) ? 0 : ownedDyes.getCount();
+
+ if (count < Henna.getRequiredDyeAmount())
+ {
+ player.sendPacket(SystemMessageId.CANT_DRAW_SYMBOL);
+ return;
+ }
+
+ // reduceAdena sends a message.
+ if (!player.reduceAdena("Henna", henna.getPrice(), player.getLastFolkNPC(), true))
+ {
+ return;
+ }
+
+ // destroyItemByItemId sends a message.
+ if (!player.destroyItemByItemId("Henna", henna.getDyeId(), Henna.getRequiredDyeAmount(), player, true))
+ {
+ return;
+ }
+
+ player.addHenna(henna);
}
}
diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/clientpackets/RequestHennaItemInfo.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/clientpackets/RequestHennaItemInfo.java
index 05dc529056..d83b52565f 100644
--- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/clientpackets/RequestHennaItemInfo.java
+++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/clientpackets/RequestHennaItemInfo.java
@@ -16,8 +16,7 @@
*/
package org.l2jmobius.gameserver.network.clientpackets;
-import org.l2jmobius.gameserver.datatables.csv.HennaTable;
-import org.l2jmobius.gameserver.model.actor.instance.HennaInstance;
+import org.l2jmobius.gameserver.datatables.xml.HennaData;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.items.Henna;
import org.l2jmobius.gameserver.network.serverpackets.HennaItemInfo;
@@ -36,22 +35,17 @@ public class RequestHennaItemInfo extends GameClientPacket
protected void runImpl()
{
final PlayerInstance player = getClient().getPlayer();
-
if (player == null)
{
return;
}
- final Henna template = HennaTable.getInstance().getTemplate(_symbolId);
-
+ final Henna template = HennaData.getInstance().getHenna(_symbolId);
if (template == null)
{
return;
}
- final HennaInstance temp = new HennaInstance(template);
-
- final HennaItemInfo hii = new HennaItemInfo(temp, player);
- player.sendPacket(hii);
+ player.sendPacket(new HennaItemInfo(template, player));
}
}
diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/clientpackets/RequestHennaItemRemoveInfo.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/clientpackets/RequestHennaItemRemoveInfo.java
new file mode 100644
index 0000000000..c3c836a7b7
--- /dev/null
+++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/clientpackets/RequestHennaItemRemoveInfo.java
@@ -0,0 +1,51 @@
+/*
+ * This file is part of the L2J Mobius project.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+package org.l2jmobius.gameserver.network.clientpackets;
+
+import org.l2jmobius.gameserver.datatables.xml.HennaData;
+import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
+import org.l2jmobius.gameserver.model.items.Henna;
+import org.l2jmobius.gameserver.network.serverpackets.HennaItemRemoveInfo;
+
+public final class RequestHennaItemRemoveInfo extends GameClientPacket
+{
+ private int _symbolId;
+
+ @Override
+ protected void readImpl()
+ {
+ _symbolId = readD();
+ }
+
+ @Override
+ protected void runImpl()
+ {
+ final PlayerInstance player = getClient().getPlayer();
+ if (player == null)
+ {
+ return;
+ }
+
+ final Henna template = HennaData.getInstance().getHenna(_symbolId);
+ if (template == null)
+ {
+ return;
+ }
+
+ player.sendPacket(new HennaItemRemoveInfo(template, player));
+ }
+}
\ No newline at end of file
diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/clientpackets/RequestHennaList.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/clientpackets/RequestHennaList.java
index 4155cf1e7a..2b9a3dc9c3 100644
--- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/clientpackets/RequestHennaList.java
+++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/clientpackets/RequestHennaList.java
@@ -16,18 +16,12 @@
*/
package org.l2jmobius.gameserver.network.clientpackets;
-import org.l2jmobius.gameserver.datatables.sql.HennaTreeTable;
-import org.l2jmobius.gameserver.model.actor.instance.HennaInstance;
+import org.l2jmobius.gameserver.datatables.xml.HennaData;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.network.serverpackets.HennaEquipList;
-/**
- * RequestHennaList - 0xba
- * @author Tempy
- */
public class RequestHennaList extends GameClientPacket
{
- // This is just a trigger packet...
@SuppressWarnings("unused")
private int _unknown;
@@ -41,14 +35,11 @@ public class RequestHennaList extends GameClientPacket
protected void runImpl()
{
final PlayerInstance player = getClient().getPlayer();
-
if (player == null)
{
return;
}
- final HennaInstance[] henna = HennaTreeTable.getInstance().getAvailableHenna(player.getClassId());
- final HennaEquipList he = new HennaEquipList(player, henna);
- player.sendPacket(he);
+ player.sendPacket(new HennaEquipList(player, HennaData.getInstance().getAvailableHennasFor(player)));
}
}
diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/clientpackets/RequestHennaRemove.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/clientpackets/RequestHennaRemove.java
new file mode 100644
index 0000000000..d79d7a1dcc
--- /dev/null
+++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/clientpackets/RequestHennaRemove.java
@@ -0,0 +1,59 @@
+/*
+ * This file is part of the L2J Mobius project.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+package org.l2jmobius.gameserver.network.clientpackets;
+
+import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
+import org.l2jmobius.gameserver.model.items.Henna;
+import org.l2jmobius.gameserver.network.SystemMessageId;
+
+/**
+ * format cd
+ */
+public final class RequestHennaRemove extends GameClientPacket
+{
+ private int _symbolId;
+
+ @Override
+ protected void readImpl()
+ {
+ _symbolId = readD();
+ }
+
+ @Override
+ protected void runImpl()
+ {
+ final PlayerInstance player = getClient().getPlayer();
+ if (player == null)
+ {
+ return;
+ }
+
+ for (int i = 1; i <= 3; i++)
+ {
+ final Henna henna = player.getHenna(i);
+ if ((henna != null) && (henna.getSymbolId() == _symbolId))
+ {
+ if (player.getAdena() >= (henna.getPrice() / 5))
+ {
+ player.removeHenna(i);
+ break;
+ }
+ player.sendPacket(SystemMessageId.YOU_NOT_ENOUGH_ADENA);
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/clientpackets/RequestHennaRemoveList.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/clientpackets/RequestHennaRemoveList.java
new file mode 100644
index 0000000000..c6ca26edf9
--- /dev/null
+++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/clientpackets/RequestHennaRemoveList.java
@@ -0,0 +1,47 @@
+/*
+ * This file is part of the L2J Mobius project.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+package org.l2jmobius.gameserver.network.clientpackets;
+
+import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
+import org.l2jmobius.gameserver.network.serverpackets.HennaRemoveList;
+
+/**
+ * @author Tempy
+ */
+public final class RequestHennaRemoveList extends GameClientPacket
+{
+ @SuppressWarnings("unused")
+ private int _unknown;
+
+ @Override
+ protected void readImpl()
+ {
+ _unknown = readD(); // ??
+ }
+
+ @Override
+ protected void runImpl()
+ {
+ final PlayerInstance player = getClient().getPlayer();
+ if (player == null)
+ {
+ return;
+ }
+
+ player.sendPacket(new HennaRemoveList(player));
+ }
+}
\ No newline at end of file
diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/serverpackets/GMViewHennaInfo.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/serverpackets/GMViewHennaInfo.java
new file mode 100644
index 0000000000..d27bf7de91
--- /dev/null
+++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/serverpackets/GMViewHennaInfo.java
@@ -0,0 +1,64 @@
+/*
+ * This file is part of the L2J Mobius project.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+package org.l2jmobius.gameserver.network.serverpackets;
+
+import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
+import org.l2jmobius.gameserver.model.items.Henna;
+
+public class GMViewHennaInfo extends GameServerPacket
+{
+ private final PlayerInstance _player;
+ private final Henna[] _hennas = new Henna[3];
+ private int _count;
+
+ public GMViewHennaInfo(PlayerInstance player)
+ {
+ _player = player;
+ _count = 0;
+
+ for (int i = 0; i < 3; i++)
+ {
+ final Henna h = _player.getHenna(i + 1);
+ if (h != null)
+ {
+ _hennas[_count++] = h;
+ }
+ }
+ }
+
+ @Override
+ protected void writeImpl()
+ {
+ writeC(0xea);
+
+ writeC(_player.getHennaStatINT());
+ writeC(_player.getHennaStatSTR());
+ writeC(_player.getHennaStatCON());
+ writeC(_player.getHennaStatMEN());
+ writeC(_player.getHennaStatDEX());
+ writeC(_player.getHennaStatWIT());
+
+ writeD(3); // slots?
+
+ writeD(_count); // size
+ for (int i = 0; i < _count; i++)
+ {
+ writeD(_hennas[i].getSymbolId());
+ writeD(_hennas[i].canBeUsedBy(_player) ? _hennas[i].getSymbolId() : 0);
+ }
+ }
+}
\ No newline at end of file
diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/serverpackets/HennaEquipList.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/serverpackets/HennaEquipList.java
index 23fcc146fb..96d0faa0e6 100644
--- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/serverpackets/HennaEquipList.java
+++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/serverpackets/HennaEquipList.java
@@ -16,15 +16,17 @@
*/
package org.l2jmobius.gameserver.network.serverpackets;
-import org.l2jmobius.gameserver.model.actor.instance.HennaInstance;
+import java.util.List;
+
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
+import org.l2jmobius.gameserver.model.items.Henna;
public class HennaEquipList extends GameServerPacket
{
private final PlayerInstance _player;
- private final HennaInstance[] _hennaEquipList;
+ private final List _hennaEquipList;
- public HennaEquipList(PlayerInstance player, HennaInstance[] hennaEquipList)
+ public HennaEquipList(PlayerInstance player, List hennaEquipList)
{
_player = player;
_hennaEquipList = hennaEquipList;
@@ -34,32 +36,21 @@ public class HennaEquipList extends GameServerPacket
protected final void writeImpl()
{
writeC(0xe2);
- writeD(_player.getAdena()); // activeChar current amount of aden
- writeD(3); // available equip slot
- // writeD(10); // total amount of symbol available which depends on difference classes
- writeD(_hennaEquipList.length);
+ writeD(_player.getAdena());
+ writeD(3);
+ writeD(_hennaEquipList.size());
- for (HennaInstance element : _hennaEquipList)
+ for (Henna temp : _hennaEquipList)
{
- /*
- * Player must have at least one dye in inventory to be able to see the henna that can be applied with it.
- */
- if (_player.getInventory().getItemByItemId(element.getItemIdDye()) != null)
+ // Player must have at least one dye in inventory to be able to see the henna that can be applied with it.
+ if ((_player.getInventory().getItemByItemId(temp.getDyeId())) != null)
{
- writeD(element.getSymbolId()); // symbolid
- writeD(element.getItemIdDye()); // itemid of dye
- writeD(element.getAmountDyeRequire()); // amount of dye require
- writeD(element.getPrice()); // amount of aden require
+ writeD(temp.getSymbolId()); // symbolid
+ writeD(temp.getDyeId()); // itemid of dye
+ writeD(Henna.getRequiredDyeAmount()); // amount of dyes required
+ writeD(temp.getPrice()); // amount of adenas required
writeD(1); // meet the requirement or not
}
- else
- {
- writeD(0x00);
- writeD(0x00);
- writeD(0x00);
- writeD(0x00);
- writeD(0x00);
- }
}
}
}
diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/serverpackets/HennaInfo.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/serverpackets/HennaInfo.java
index 6717457c5c..1ca28d13fa 100644
--- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/serverpackets/HennaInfo.java
+++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/serverpackets/HennaInfo.java
@@ -16,29 +16,28 @@
*/
package org.l2jmobius.gameserver.network.serverpackets;
-import org.l2jmobius.gameserver.model.actor.instance.HennaInstance;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
+import org.l2jmobius.gameserver.model.items.Henna;
public class HennaInfo extends GameServerPacket
{
private final PlayerInstance _player;
- private final HennaInstance[] _hennas = new HennaInstance[3];
- private final int _count;
+ private final Henna[] _hennas = new Henna[3];
+ private int _count;
public HennaInfo(PlayerInstance player)
{
_player = player;
+ _count = 0;
- int j = 0;
for (int i = 0; i < 3; i++)
{
- final HennaInstance h = _player.getHennas(i + 1);
- if (h != null)
+ Henna henna = _player.getHenna(i + 1);
+ if (henna != null)
{
- _hennas[j++] = h;
+ _hennas[_count++] = henna;
}
}
- _count = j;
}
@Override
@@ -53,13 +52,26 @@ public class HennaInfo extends GameServerPacket
writeC(_player.getHennaStatDEX()); // equip DEX
writeC(_player.getHennaStatWIT()); // equip WIT
- writeD(3); // slots?
+ // Henna slots
+ int classId = _player.getClassId().level();
+ if (classId == 1)
+ {
+ writeD(2);
+ }
+ else if (classId > 1)
+ {
+ writeD(3);
+ }
+ else
+ {
+ writeD(0);
+ }
writeD(_count); // size
for (int i = 0; i < _count; i++)
{
writeD(_hennas[i].getSymbolId());
- writeD(0x01);
+ writeD(_hennas[i].canBeUsedBy(_player) ? _hennas[i].getSymbolId() : 0);
}
}
}
diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/serverpackets/HennaItemInfo.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/serverpackets/HennaItemInfo.java
index 42514d6c41..5130efdc42 100644
--- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/serverpackets/HennaItemInfo.java
+++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/serverpackets/HennaItemInfo.java
@@ -16,15 +16,15 @@
*/
package org.l2jmobius.gameserver.network.serverpackets;
-import org.l2jmobius.gameserver.model.actor.instance.HennaInstance;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
+import org.l2jmobius.gameserver.model.items.Henna;
public class HennaItemInfo extends GameServerPacket
{
private final PlayerInstance _player;
- private final HennaInstance _henna;
+ private final Henna _henna;
- public HennaItemInfo(HennaInstance henna, PlayerInstance player)
+ public HennaItemInfo(Henna henna, PlayerInstance player)
{
_henna = henna;
_player = player;
@@ -35,23 +35,23 @@ public class HennaItemInfo extends GameServerPacket
{
writeC(0xe3);
writeD(_henna.getSymbolId()); // symbol Id
- writeD(_henna.getItemIdDye()); // item id of dye
- writeD(_henna.getAmountDyeRequire()); // total amount of dye require
- writeD(_henna.getPrice()); // total amount of aden require to draw symbol
+ writeD(_henna.getDyeId()); // item id of dye
+ writeD(Henna.getRequiredDyeAmount()); // total amount of dye required
+ writeD(_henna.getPrice()); // total amount of adenas required to draw symbol
writeD(1); // able to draw or not 0 is false and 1 is true
writeD(_player.getAdena());
writeD(_player.getINT()); // current INT
- writeC(_player.getINT() + _henna.getStatINT()); // equip INT
+ writeC(_player.getINT() + _henna.getINT()); // equip INT
writeD(_player.getSTR()); // current STR
- writeC(_player.getSTR() + _henna.getStatSTR()); // equip STR
+ writeC(_player.getSTR() + _henna.getSTR()); // equip STR
writeD(_player.getCON()); // current CON
- writeC(_player.getCON() + _henna.getStatCON()); // equip CON
+ writeC(_player.getCON() + _henna.getCON()); // equip CON
writeD(_player.getMEN()); // current MEM
- writeC(_player.getMEN() + _henna.getStatMEM()); // equip MEM
+ writeC(_player.getMEN() + _henna.getMEN()); // equip MEM
writeD(_player.getDEX()); // current DEX
- writeC(_player.getDEX() + _henna.getStatDEX()); // equip DEX
+ writeC(_player.getDEX() + _henna.getDEX()); // equip DEX
writeD(_player.getWIT()); // current WIT
- writeC(_player.getWIT() + _henna.getStatWIT()); // equip WIT
+ writeC(_player.getWIT() + _henna.getWIT()); // equip WIT
}
}
diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/serverpackets/HennaItemRemoveInfo.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/serverpackets/HennaItemRemoveInfo.java
new file mode 100644
index 0000000000..a51877ec59
--- /dev/null
+++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/serverpackets/HennaItemRemoveInfo.java
@@ -0,0 +1,57 @@
+/*
+ * This file is part of the L2J Mobius project.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+package org.l2jmobius.gameserver.network.serverpackets;
+
+import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
+import org.l2jmobius.gameserver.model.items.Henna;
+
+public class HennaItemRemoveInfo extends GameServerPacket
+{
+ private final PlayerInstance _player;
+ private final Henna _henna;
+
+ public HennaItemRemoveInfo(Henna henna, PlayerInstance player)
+ {
+ _henna = henna;
+ _player = player;
+ }
+
+ @Override
+ protected final void writeImpl()
+ {
+ writeC(0xe6);
+ writeD(_henna.getSymbolId()); // symbol Id
+ writeD(_henna.getDyeId()); // item id of dye
+ writeD(Henna.getRequiredDyeAmount() / 2); // amount of given dyes
+ writeD(_henna.getPrice() / 5); // amount of required adenas
+ writeD(1); // able to remove or not 0 is false and 1 is true
+ writeD(_player.getAdena());
+
+ writeD(_player.getINT()); // current INT
+ writeC(_player.getINT() - _henna.getINT()); // equip INT
+ writeD(_player.getSTR()); // current STR
+ writeC(_player.getSTR() - _henna.getSTR()); // equip STR
+ writeD(_player.getCON()); // current CON
+ writeC(_player.getCON() - _henna.getCON()); // equip CON
+ writeD(_player.getMEN()); // current MEM
+ writeC(_player.getMEN() - _henna.getMEN()); // equip MEM
+ writeD(_player.getDEX()); // current DEX
+ writeC(_player.getDEX() - _henna.getDEX()); // equip DEX
+ writeD(_player.getWIT()); // current WIT
+ writeC(_player.getWIT() - _henna.getWIT()); // equip WIT
+ }
+}
\ No newline at end of file
diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/serverpackets/HennaRemoveList.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/serverpackets/HennaRemoveList.java
new file mode 100644
index 0000000000..3fc2c3d249
--- /dev/null
+++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/serverpackets/HennaRemoveList.java
@@ -0,0 +1,52 @@
+/*
+ * This file is part of the L2J Mobius project.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+package org.l2jmobius.gameserver.network.serverpackets;
+
+import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
+import org.l2jmobius.gameserver.model.items.Henna;
+
+public class HennaRemoveList extends GameServerPacket
+{
+ private final PlayerInstance _player;
+
+ public HennaRemoveList(PlayerInstance player)
+ {
+ _player = player;
+ }
+
+ @Override
+ protected final void writeImpl()
+ {
+ writeC(0xe5);
+ writeD(_player.getAdena());
+ writeD(_player.getHennaEmptySlots());
+ writeD(Math.abs(_player.getHennaEmptySlots() - 3));
+
+ for (int i = 1; i <= 3; i++)
+ {
+ final Henna henna = _player.getHenna(i);
+ if (henna != null)
+ {
+ writeD(henna.getSymbolId());
+ writeD(henna.getDyeId());
+ writeD(Henna.getRequiredDyeAmount() / 2);
+ writeD(henna.getPrice() / 5);
+ writeD(0x01);
+ }
+ }
+ }
+}
\ No newline at end of file