From 184b3899d6324a75faf4904381e2c69263da8e06 Mon Sep 17 00:00:00 2001 From: Mihai Moldovanu Date: Thu, 10 Mar 2022 23:33:32 +0200 Subject: [PATCH] Intial version imported --- .gitignore | 4 +- README.md | 17 +- TODO.md | 7 + config-sample.yml | 7 + config.go | 235 +++++++++ go.mod | 5 + go.sum | 573 +++++++++++++++++++++ item_info.txt | 1195 +++++++++++++++++++++++++++++++++++++++++++ main.go | 516 +++++++++++++++++++ sending.go | 88 ++++ templates/home.tmpl | 4 + templates/inv.tmpl | 36 ++ templates/test.tmpl | 38 ++ 13 files changed, 2722 insertions(+), 3 deletions(-) create mode 100644 TODO.md create mode 100644 config-sample.yml create mode 100644 config.go create mode 100644 go.mod create mode 100644 go.sum create mode 100644 item_info.txt create mode 100644 main.go create mode 100644 sending.go create mode 100644 templates/home.tmpl create mode 100644 templates/inv.tmpl create mode 100644 templates/test.tmpl diff --git a/.gitignore b/.gitignore index f4d432a..19b5792 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,3 @@ -# ---> Go # Binaries for programs and plugins *.exe *.exe~ @@ -15,3 +14,6 @@ # Dependency directories (remove the comment below to include it) # vendor/ +# configs +config.yml +__debug_bin diff --git a/README.md b/README.md index ce6fac1..b1828e5 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,16 @@ -# elbot +# GoEl bot + +Eternal lands trade bot written in go + +* Commands implemented so far from game: + - #ver + - #get id + - #set id price - Set price for an item + - #inv - List inventory + +* Web routes implemented ( to some extent so far) + - /hello - testing route + - /inv - List inventoru + - /save - Save inventory list to disk + - /test - testing route -Eternal Lands Bot written in go \ No newline at end of file diff --git a/TODO.md b/TODO.md new file mode 100644 index 0000000..34ca64d --- /dev/null +++ b/TODO.md @@ -0,0 +1,7 @@ +# Todo + +* [S] Extend inventory to take into account wear items slots +* [B] Add web management interface + * [S] Add templates + * [S] add /save, /inv, /set , /get routes + diff --git a/config-sample.yml b/config-sample.yml new file mode 100644 index 0000000..29489b0 --- /dev/null +++ b/config-sample.yml @@ -0,0 +1,7 @@ +server: + ip: "192.99.21.222" + port: 2001 + +credential: + user: "YourUser" + password: "YourPass" \ No newline at end of file diff --git a/config.go b/config.go new file mode 100644 index 0000000..90c2a7f --- /dev/null +++ b/config.go @@ -0,0 +1,235 @@ +package main + +type serverConfigurations struct { + Ip string + Port int +} + +type credentialConfigurations struct { + User string + Password string +} + +type configurations struct { + Server serverConfigurations + Credential credentialConfigurations +} + +type item struct { + Id int + Text string + Price float64 + Quantity int +} + +type invPos struct { + Quantity int + Id int + Pos int +} + +type webPageData struct { + PageTitle string + Ite []item +} +type tradeStr struct { + Id int + Quantity int + Type int + ImageId int +} + +// Money item id +const MONEY = 20 + +/* + To server communication protocol id's +*/ +const MOVE_TO = 1 +const SEND_PM = 2 +const GET_PLAYER_INFO = 5 +const RUN_TO = 6 +const SIT_DOWN = 7 +const SEND_ME_MY_ACTORS = 8 +const SEND_OPENING_SCREEN = 9 +const SEND_VERSION = 10 +const TURN_LEFT = 11 +const TURN_RIGHT = 12 +const PING = 13 +const HEART_BEAT = 14 +const LOCATE_ME = 15 +const USE_MAP_OBJECT = 16 +const SEND_MY_STATS = 17 +const SEND_MY_INVENTORY = 18 +const LOOK_AT_INVENTORY_ITEM = 19 +const MOVE_INVENTORY_ITEM = 20 +const HARVEST = 21 +const DROP_ITEM = 22 +const PICK_UP_ITEM = 23 +const LOOK_AT_GROUND_ITEM = 24 +const INSPECT_BAG = 25 +const S_CLOSE_BAG = 26 +const LOOK_AT_MAP_OBJECT = 27 +const TOUCH_PLAYER = 28 +const RESPOND_TO_NPC = 29 +const MANUFACTURE_THIS = 30 +const USE_INVENTORY_ITEM = 31 +const TRADE_WITH = 32 +const ACCEPT_TRADE = 33 +const REJECT_TRADE = 34 +const EXIT_TRADE = 35 +const PUT_OBJECT_ON_TRADE = 36 +const REMOVE_OBJECT_FROM_TRADE = 37 +const LOOK_AT_TRADE_ITEM = 38 +const CAST_SPELL = 39 +const ATTACK_SOMEONE = 40 +const GET_KNOWLEDGE_INFO = 41 +const ITEM_ON_ITEM = 42 +const SEND_BOOK = 43 +const GET_STORAGE_CATEGORY = 44 +const DEPOSITE_ITEM = 45 +const WITHDRAW_ITEM = 46 +const LOOK_AT_STORAGE_ITEM = 47 +const SPELL_NAME = 48 +const SEND_VIDEO_INFO = 49 +const POPUP_REPLY = 50 +const FIRE_MISSILE_AT_OBJECT = 51 +const PING_RESPONSE = 60 +const SET_ACTIVE_CHANNEL = 61 +const WHAT_QUEST_IS_THIS_ID = 63 +const DO_EMOTE = 70 +const GET_BUFF_DURATION = 71 +const LOG_IN = 140 +const CREATE_CHAR = 141 +const GET_DATE = 230 +const GET_TIME = 231 +const SERVER_STATS = 232 +const ORIGINAL_IP = 233 + +/* + From server communication protocol Id's +*/ +const ADD_NEW_ACTOR = 1 +const ADD_ACTOR_COMMAND = 2 +const YOU_ARE = 3 +const SYNC_CLOCK = 4 +const NEW_MINUTE = 5 +const REMOVE_ACTOR = 6 +const CHANGE_MAP = 7 +const COMBAT_MODE = 8 +const KILL_ALL_ACTORS = 9 +const GET_TELEPORTERS_LIST = 10 +const PONG = 11 +const TELEPORT_IN = 12 +const TELEPORT_OUT = 13 +const PLAY_SOUND = 14 +const START_RAIN = 15 //delete later on +const STOP_RAIN = 16 //delete later on +const THUNDER = 17 +const HERE_YOUR_STATS = 18 +const HERE_YOUR_INVENTORY = 19 +const INVENTORY_ITEM_TEXT = 20 +const GET_NEW_INVENTORY_ITEM = 21 +const REMOVE_ITEM_FROM_INVENTORY = 22 +const HERE_YOUR_GROUND_ITEMS = 23 +const GET_NEW_GROUND_ITEM = 24 +const REMOVE_ITEM_FROM_GROUND = 25 +const CLOSE_BAG = 26 +const GET_NEW_BAG = 27 +const GET_BAGS_LIST = 28 +const DESTROY_BAG = 29 +const NPC_TEXT = 30 +const NPC_OPTIONS_LIST = 31 +const CLOSE_NPC_MENU = 32 +const SEND_NPC_INFO = 33 +const GET_TRADE_INFO = 34 //delete later on +const GET_TRADE_OBJECT = 35 +const GET_TRADE_ACCEPT = 36 +const GET_TRADE_REJECT = 37 +const GET_TRADE_EXIT = 38 +const REMOVE_TRADE_OBJECT = 39 +const GET_YOUR_TRADEOBJECTS = 40 +const GET_TRADE_PARTNER_NAME = 41 +const GET_YOUR_SIGILS = 42 +const SPELL_ITEM_TEXT = 43 +const GET_ACTIVE_SPELL = 44 +const GET_ACTIVE_SPELL_LIST = 45 +const REMOVE_ACTIVE_SPELL = 46 +const GET_ACTOR_DAMAGE = 47 +const GET_ACTOR_HEAL = 48 +const SEND_PARTIAL_STAT = 49 +const SPAWN_BAG_PARTICLES = 50 +const ADD_NEW_ENHANCED_ACTOR = 51 +const ACTOR_WEAR_ITEM = 52 +const ACTOR_UNWEAR_ITEM = 53 +const PLAY_MUSIC = 54 +const GET_KNOWLEDGE_LIST = 55 +const GET_NEW_KNOWLEDGE = 56 +const GET_KNOWLEDGE_TEXT = 57 +const BUDDY_EVENT = 59 +const PING_REQUEST = 60 +const FIRE_PARTICLES = 61 +const REMOVE_FIRE_AT = 62 +const DISPLAY_CLIENT_WINDOW = 63 +const OPEN_BOOK = 64 +const READ_BOOK = 65 +const CLOSE_BOOK = 66 +const STORAGE_LIST = 67 +const STORAGE_ITEMS = 68 +const STORAGE_TEXT = 69 +const SPELL_CAST = 70 +const GET_ACTIVE_CHANNELS = 71 +const MAP_FLAGS = 72 +const GET_ACTOR_HEALTH = 73 +const GET_3D_OBJ_LIST = 74 +const GET_3D_OBJ = 75 +const REMOVE_3D_OBJ = 76 +const GET_ITEMS_COOLDOWN = 77 +const SEND_BUFFS = 78 +const SEND_SPECIAL_EFFECT = 79 +const REMOVE_MINE = 80 +const GET_NEW_MINE = 81 +const GET_MINES_LIST = 82 +const DISPLAY_POPUP = 83 +const MISSILE_AIM_A_AT_B = 84 +const MISSILE_AIM_A_AT_XYZ = 85 +const MISSILE_FIRE_A_TO_B = 86 +const MISSILE_FIRE_A_TO_XYZ = 87 +const MISSILE_FIRE_XYZ_TO_B = 88 +const ADD_ACTOR_ANIMATION = 89 +const SEND_MAP_MARKER = 90 +const REMOVE_MAP_MARKER = 91 + +/* sent: 16 bit quest id for the next npc message */ +const NEXT_NPC_MESSAGE_IS_QUEST = 92 + +/* sent: non null terminated string giving the title of the quest */ +const HERE_IS_QUEST_ID = 93 + +/* sent: 16 bit quest id, this quest should be shown as finished */ +const QUEST_FINISHED = 94 + +/* sent: 5 x 32 bit integers, each active bit is an achievement the last "You see: name" player has */ +const SEND_ACHIEVEMENTS = 95 + +/* sent: 1 single byte buff duration, time remaining in seconds */ +const SEND_BUFF_DURATION = 96 + +const SEND_WEATHER = 100 + +// reserved for future expansion 220-229, not being used in the server yet +const MAP_SET_OBJECTS = 220 +const MAP_STATE_OBJECTS = 221 + +const UPGRADE_NEW_VERSION = 240 // TODO: Consider combining all this into one packet followed by one byte (plus optional text) +const UPGRADE_TOO_OLD = 241 +const REDEFINE_YOUR_COLORS = 248 +const YOU_DONT_EXIST = 249 +const LOG_IN_OK = 250 +const LOG_IN_NOT_OK = 251 +const CREATE_CHAR_OK = 252 +const CREATE_CHAR_NOT_OK = 253 + +const RAW_TEXT = 0 +const PROXY = 254 +const BYE = 255 diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..d3946db --- /dev/null +++ b/go.mod @@ -0,0 +1,5 @@ +module tfm.ro/elbot + +go 1.16 + +require github.com/spf13/viper v1.8.1 // indirect diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..306a424 --- /dev/null +++ b/go.sum @@ -0,0 +1,573 @@ +cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= +cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= +cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= +cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= +cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= +cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= +cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4= +cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= +cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= +cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= +cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= +cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= +cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= +cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI= +cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk= +cloud.google.com/go v0.78.0/go.mod h1:QjdrLG0uq+YwhjoVOLsS1t7TW8fs36kLs4XO5R5ECHg= +cloud.google.com/go v0.79.0/go.mod h1:3bzgcEeQlzbuEAYu4mrWhKqWjmpprinYgKJLgKHnbb8= +cloud.google.com/go v0.81.0/go.mod h1:mk/AM35KwGk/Nm2YSeZbxXdrNK3KZOYHmLkOqC2V6E0= +cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= +cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= +cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= +cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= +cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= +cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= +cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= +cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= +cloud.google.com/go/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqClKRT5SZwBmk= +cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= +cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= +cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= +cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= +cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= +cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= +cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= +cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= +cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= +dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= +github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= +github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= +github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= +github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= +github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= +github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= +github.com/bketelsen/crypt v0.0.4/go.mod h1:aI6NrJ0pMGgvZKL1iVgXLnfIFJtfV+bKCoqOes/6LfM= +github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= +github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= +github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= +github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= +github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= +github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= +github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= +github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= +github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po= +github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= +github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= +github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= +github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4= +github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= +github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= +github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= +github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= +github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= +github.com/golang/mock v1.5.0/go.mod h1:CWnOUgYIOo4TcNZ0wHX3YZCqsaM1I1Jvs6v3mP3KVu8= +github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= +github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= +github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= +github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= +github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= +github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= +github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= +github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= +github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM= +github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= +github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= +github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= +github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= +github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= +github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= +github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= +github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= +github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q= +github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= +github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= +github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= +github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= +github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= +github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= +github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= +github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= +github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= +github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90= +github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= +github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= +github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= +github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ= +github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= +github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= +github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= +github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= +github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= +github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= +github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= +github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/magiconair/properties v1.8.5 h1:b6kJs+EmPFMYGkow9GiUyCyOvIwYetYJ3fSaWak/Gls= +github.com/magiconair/properties v1.8.5/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= +github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= +github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= +github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= +github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= +github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= +github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= +github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg= +github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY= +github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= +github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= +github.com/mitchellh/mapstructure v1.4.1 h1:CpVNEelQCZBooIPDn+AR3NpivK/TIKU8bDxdASFVQag= +github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= +github.com/pelletier/go-toml v1.9.3 h1:zeC5b1GviRUyKYd6OJPvBU/mcVDVoL1OhT17FCt5dSQ= +github.com/pelletier/go-toml v1.9.3/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= +github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= +github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= +github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= +github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= +github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= +github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= +github.com/spf13/afero v1.6.0 h1:xoax2sJ2DT8S8xA2paPFjDCScCNeWsg75VG0DLRreiY= +github.com/spf13/afero v1.6.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I= +github.com/spf13/cast v1.3.1 h1:nFm6S0SMdyzrzcmThSipiEubIDy8WEXKNZ0UOgiRpng= +github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= +github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk= +github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= +github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= +github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/spf13/viper v1.8.1 h1:Kq1fyeebqsBfbjZj4EL7gj2IO0mMaiyjYUWcUsl2O44= +github.com/spf13/viper v1.8.1/go.mod h1:o0Pch8wJ9BVSWGQMbra6iw0oQ5oktSIBaujf1rJH9Ns= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= +github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/subosito/gotenv v1.2.0 h1:Slr1R9HxAlEKefgq5jn9U+DnETlIUa6HfgEzj0g5d7s= +github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= +github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +go.etcd.io/etcd/api/v3 v3.5.0/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs= +go.etcd.io/etcd/client/pkg/v3 v3.5.0/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= +go.etcd.io/etcd/client/v2 v2.305.0/go.mod h1:h9puh54ZTgAKtEbut2oe9P4L/oqKCVB6xsXlzd7alYQ= +go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= +go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= +go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= +go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= +go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= +go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= +go.uber.org/zap v1.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo= +golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= +golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= +golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= +golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= +golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= +golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= +golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= +golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= +golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= +golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= +golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= +golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= +golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= +golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= +golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210402161424-2e8d93401602/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210510120138-977fb7262007 h1:gG67DSER+11cZvqIMb8S8bt0vZtiN6xWYARwirrOSfE= +golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.5 h1:i6eZZ+zk0SOf0xgBpEpPD18qWcJda6q1sxt3S0kzyUQ= +golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= +golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191112195655-aa38f8e97acc/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= +golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= +golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= +golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= +golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= +golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= +google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= +google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= +google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= +google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= +google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc= +google.golang.org/api v0.35.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg= +google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34qYtE= +google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8= +google.golang.org/api v0.41.0/go.mod h1:RkxM5lITDfTzmyKFPt+wGrCJbVfniCr2ool8kTBzRTU= +google.golang.org/api v0.43.0/go.mod h1:nQsDGjRXMo4lvh5hP0TKqF244gqhGcr/YSIykhUk/94= +google.golang.org/api v0.44.0/go.mod h1:EBOGZqzyhtvMDoxwS97ctnh0zUmYY6CxqXsc1AvkYD8= +google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= +google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= +google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= +google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA= +google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= +google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= +google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= +google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210222152913-aa3ee6e6a81c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210303154014-9728d6b83eeb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= +google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= +google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= +google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= +google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= +google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= +google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= +google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= +google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= +google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8= +google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= +google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= +google.golang.org/grpc v1.36.1/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= +google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= +google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= +google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= +google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= +google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= +google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= +google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= +google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= +google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= +google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= +gopkg.in/ini.v1 v1.62.0 h1:duBzk771uxoUuOlyRLkHsygud9+5lrlGjdFBb4mSKDU= +gopkg.in/ini.v1 v1.62.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= +gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= +honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= +honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= +rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= +rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= +rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= diff --git a/item_info.txt b/item_info.txt new file mode 100644 index 0000000..8561905 --- /dev/null +++ b/item_info.txt @@ -0,0 +1,1195 @@ +0 | Sunflower | 1.00 +1 | Blue Star Flower | 0.00 +2 | Impatiens | 0.00 +3 | Chrysanthemum | 0.00 +4 | Tiger Lilly | 0.00 +5 | Yellow Rose | 0.00 +6 | Red Rose | 0.00 +7 | Black Rose | 0.00 +8 | White Asiatic Lilly | 0.00 +9 | Blue Lupine | 0.00 +10 | Red Snapdragons | 2.00 +11 | Lilacs | 0.00 +12 | Swamp Candles | 0.00 +13 | Quartz | 0.00 +14 | Rose Quartz | 0.00 +15 | Blue Quartz | 0.00 +16 | Mercury | 0.00 +17 | Sulfur | 0.00 +18 | Silver Ore | 0.00 +19 | Polished Ruby | 0.00 +20 | Gold Coins | 1.00 +21 | Bread | 0.00 +22 | Mead | 0.00 +23 | Wine | 0.00 +24 | Ale | 0.00 +25 | Empty Vial | 0.00 +26 | Polished Emerald | 0.00 +27 | Potion of Body Restoration | 0.00 +28 | Potion of Spirit Restoration | 0.00 +29 | Polished Sapphire | 0.00 +30 | Polished Diamond | 0.00 +31 | Fire Essence | 0.00 +32 | Water Essence | 0.00 +33 | Earth Essence | 0.00 +34 | Air Essence | 0.00 +35 | Spirit Essence | 0.00 +36 | Matter Essence | 0.00 +37 | Energy Essence | 0.00 +38 | Life Essence | 0.00 +39 | Death Essence | 0.00 +40 | Health Essence | 0.00 +41 | Magic Essence | 0.00 +42 | Vegetables | 0.00 +43 | Fruits | 0.00 +44 | Ring of Naralik | 0.00 +45 | Gold Ore | 0.00 +46 | Iron Ore | 0.00 +47 | Coal | 0.00 +48 | Emerald | 0.00 +49 | Sapphire | 0.00 +50 | Ruby | 0.00 +51 | Diamond | 0.00 +52 | Mortar & Pestle | 0.00 +53 | Cactus | 0.00 +54 | Bones | 1.00 +55 | Raw Meat | 0.50 +56 | Phoenix Feather | 0.00 +57 | Mule Skin | 0.00 +58 | Small Dragon Scale | 0.00 +59 | Bear Fur | 0.00 +60 | Deer Fur | 0.00 +61 | Wolf Fur | 0.00 +62 | Deer Antlers | 0.00 +63 | Bones Powder | 0.00 +64 | Potion of Coordination | 0.00 +65 | Potion of Vitality | 0.00 +66 | White rabbit fur | 0.00 +67 | Brown rabbit fur | 0.00 +68 | Potion of Wildness | 0.00 +69 | Potion of Reasoning | 0.00 +70 | Potion of Will | 0.00 +71 | Potion of Physique | 0.00 +72 | Potion of Harvesting | 0.00 +73 | Potion of Attack | 0.00 +74 | Potion of Defense | 0.00 +75 | Potion of Minor Healing | 0.00 +76 | Potion of Mana | 0.00 +77 | Potion of Feasting | 0.00 +78 | Titanium Ore | 0.00 +79 | Potion of Summoning | 0.00 +80 | Silver Ring | 0.00 +81 | Cooked Meat | 0.00 +82 | Green Snake Skin | 0.00 +83 | Red Snake Skin | 0.00 +84 | Brown Snake Skin | 0.00 +85 | Fox Fur | 0.00 +86 | Puma Fur | 0.00 +87 | Needle | 0.00 +88 | Thread | 0.00 +89 | Warm Fur Gloves | 0.00 +90 | Fox Scarf | 0.00 +91 | Fur Hat | 0.00 +92 | Fur Cloak | 0.00 +93 | Leather Gloves | 0.00 +94 | Gold Ring | 0.00 +95 | Silver Medallion | 0.00 +96 | Gold Medallion | 0.00 +97 | Padded Leather Armor | 0.00 +98 | Iron Chain Mail | 0.00 +99 | Ring of White Stone | 0.00 +100 | Ring of Isla Prima | 0.00 +101 | Ring of Desert Pines | 0.00 +102 | Ring of Portland | 0.00 +103 | Ring of Valley of the Dwarves | 0.00 +104 | Unicorn Medallion | 0.00 +105 | Sun Medallion | 0.00 +106 | Moon Medallion | 0.00 +107 | Stars Medallion | 0.00 +108 | Iron Bar | 0.00 +109 | Silver Bar | 0.00 +110 | Gold Bar | 0.00 +111 | Steel Bar | 0.00 +112 | Titanium Bar | 0.00 +113 | Pickaxe | 0.00 +114 | Gem Sanding Paper | 0.00 +115 | Iron Sword | 0.00 +116 | Iron Broad Sword | 0.00 +117 | Steel Long Sword | 0.00 +118 | Steel Two Edged Sword | 0.00 +119 | Titanium/Steel Alloy Short Sword | 0.00 +120 | Titanium/Steel Alloy Long Sword | 0.00 +121 | Titanium Serpent Sword | 0.00 +122 | Wooden Battle Hammer | 0.00 +123 | Wooden Staff | 0.00 +124 | Quarterstaff | 0.00 +125 | Hammer | 0.00 +126 | Leather | 0.00 +127 | Ring of Disengagement | 0.00 +128 | Ring of Damage | 0.00 +129 | Wooden Shield | 0.00 +130 | Enhanced Wooden Shield | 0.00 +131 | Iron Shield | 0.00 +132 | Steel Shield | 0.00 +133 | Platinum Coins | 0.00 +134 | Body Piercing Cloak | 0.00 +135 | Excavator Cape | 0.00 +136 | Monster Magnetism Cloak | 0.00 +137 | Conjurer Cloak | 0.00 +138 | Fast Regeneration Cape | 0.00 +139 | Iron Battle Hammer | 0.00 +140 | Iron Helm | 0.00 +141 | Steel Chain Mail | 0.00 +142 | Leather Pants | 0.00 +143 | Leather Boots | 0.00 +144 | Titanium Chain Mail | 0.00 +145 | Beaver fur | 0.00 +146 | Rat tail | 0.00 +147 | Potion of Manufacturing | 0.00 +148 | Mirror Cloak | 0.00 +149 | Powersaving Cloak | 0.00 +150 | Serpent Stone | 0.00 +151 | Book of Metallurgy | 0.00 +152 | Book of Metal Smelting | 0.00 +153 | Book of Metal Mining | 0.00 +154 | Book of Metal Molding | 0.00 +155 | Book of Gold Smelting | 0.00 +156 | Book of Iron Smelting | 0.00 +157 | Book of Silver Smelting | 0.00 +158 | Book of Steel Smelting | 0.00 +159 | Book of Titanium Smelting | 0.00 +160 | Book of Gold Mining | 0.00 +161 | Book of Iron Mining | 0.00 +162 | Book of Silver Mining | 0.00 +163 | Book of Titanium Mining | 0.00 +164 | Book of Steel Molding | 0.00 +165 | Book of Gold Molding | 0.00 +166 | Book of Iron Molding | 0.00 +167 | Book of Silver Molding | 0.00 +168 | Book of Titanium Molding | 0.00 +169 | Weapon Construction | 0.00 +170 | Sword Construction | 0.00 +171 | Iron Sword Construction | 0.00 +172 | Iron Broad Sword Construction | 0.00 +173 | Steel Long Sword Construction | 0.00 +174 | Two Edged Steel Sword Construction | 0.00 +175 | Titanium Short Construction | 0.00 +176 | Titanium Long Construction | 0.00 +177 | Titanium Serpent Sword Construction | 0.00 +178 | Armor Construction | 0.00 +179 | Torso Armor Construction | 0.00 +180 | Feet Armor Construction | 0.00 +181 | Legs Armor Construction | 0.00 +182 | Head Armor Construction | 0.00 +183 | Leather Helmet Construction | 0.00 +184 | Iron Helmet Construction | 0.00 +185 | Iron Greaves Construction | 0.00 +186 | Iron Cuisses Construction | 0.00 +187 | Padded Leather Pants Construction | 0.00 +188 | Iron Chainmail Torso Construction | 0.00 +189 | Iron Plate Mail Construction | 0.00 +190 | Steel Chainmail Torso Construction | 0.00 +191 | Titanium Chainmail Torso Construction | 0.00 +192 | Torso Padded Leather Construction | 0.00 +193 | Shields Construction | 0.00 +194 | Iron Shield Construction | 0.00 +195 | Steel Shield Construction | 0.00 +196 | Crystal Technology | 0.00 +197 | Crystal Mining | 0.00 +198 | Quartz Mining | 0.00 +199 | Rose Quartz Mining | 0.00 +200 | Blue Quartz Mining | 0.00 +201 | Ruby Mining | 0.00 +202 | Emerald Mining | 0.00 +203 | Sapphire Mining | 0.00 +204 | Diamond Mining | 0.00 +205 | Crystal Processing | 0.00 +206 | Diamond Processing | 0.00 +207 | Sapphire Processing | 0.00 +208 | Emerald Processing | 0.00 +209 | Ruby Processing | 0.00 +210 | Jewlery Technology | 0.00 +211 | Crystal embedding | 0.00 +212 | Generic Rings Building | 0.00 +213 | Generic Medallions Building | 0.00 +214 | Diamond embedding | 0.00 +215 | Sapphire embedding | 0.00 +216 | Emerald embedding | 0.00 +217 | Ruby embedding | 0.00 +218 | Silver Rings Building | 0.00 +219 | Gold Rings Building | 0.00 +220 | Silver Medallions Building | 0.00 +221 | Gold Medallions Building | 0.00 +222 | Sun Medallion Building | 0.00 +223 | Unicorn Medallion Building | 0.00 +224 | Moon Medallion Building | 0.00 +225 | Stars Medallion Building | 0.00 +226 | VOTD Ring Building | 0.00 +227 | Naralik Ring Building | 0.00 +228 | Disengagement Ring Building | 0.00 +229 | Ring of Damage Building | 0.00 +230 | Isla Prima Ring Building | 0.00 +231 | Portland Ring Building | 0.00 +232 | WhiteStone Ring Building | 0.00 +233 | Desert Pines Ring Building | 0.00 +234 | Book of Biology | 0.00 +235 | Book of Biochemistry | 0.00 +236 | Book of Botanics | 0.00 +237 | Book of Anatomy | 0.00 +238 | Book of Advanced Alchemy | 0.00 +239 | Book of Advanced Potions | 0.00 +240 | Book of Life Essence | 0.00 +241 | Book of Death Essence | 0.00 +242 | Book of Health Essence | 0.00 +243 | Book of Magic Essence | 0.00 +244 | Book of Potion of Body Restoration | 0.00 +245 | Book of Potion of Wildness | 0.00 +246 | Book of Potion of Vitality | 0.00 +247 | Book of Potion of Coordination | 0.00 +248 | Book of Potion of Will | 0.00 +249 | Book of Potion of Physique | 0.00 +250 | Book of Potion of Feasting | 0.00 +251 | Book of Potion of Manufacturing | 0.00 +252 | Book of Potion of Summoning | 0.00 +253 | Book of Advanced Summoning | 0.00 +254 | Book of Snakes Summoning | 0.00 +255 | Book of Wolf Summoning | 0.00 +256 | Book of Boar Summoning | 0.00 +257 | Book of Skeleton Summoning | 0.00 +258 | Book of Gargoyles Summoning | 0.00 +259 | Book of Puma Summoning | 0.00 +260 | Book of Bear Summoning | 0.00 +261 | Book of Combat Tactics | 0.00 +262 | Book of Goblin Fighting | 0.00 +263 | Book of Skeleton Fighting | 0.00 +264 | Book of Gargoyle Fighting | 0.00 +265 | Book of Puma Fighting | 0.00 +266 | Book of Orc Fighting | 0.00 +267 | Book of Bear Fighting | 0.00 +268 | Book of Troll Fighting | 0.00 +269 | Book of Cyclops Fighting | 0.00 +270 | Book of Dwarf Fighting | 0.00 +271 | Book of Elf Fighting | 0.00 +272 | Book of Humans Fighting | 0.00 +273 | Book of Humans Fighting | 0.00 +274 | Gemstone hammer & chisel | 0.00 +275 | Ring Mold | 0.00 +276 | Medallion Mold | 0.00 +277 | Pre-owned Serpent Sword | 0.00 +278 | Second Hand Titanium Long Sword | 0.00 +279 | Pre-Owned Titanium/Steel Alloy Short Sword | 0.00 +280 | Used Steel Two Edged Sword | 0.00 +281 | Second Hand Titanium Chain Mail | 0.00 +282 | Enriched Fire Essence | 0.00 +283 | Enriched Water Essence | 0.00 +284 | Potion of Extra Mana | 0.00 +285 | Potion of Great Healing | 0.00 +286 | Enriched Magic Essence | 0.00 +287 | Modable Iron Sword | 0.00 +288 | Modable Iron Broad Sword | 0.00 +289 | Modable Steel Long Sword | 0.00 +290 | Modable Steel Two Edged Sword | 0.00 +291 | Modable Titanium/Steel Alloy Short Sword | 0.00 +292 | Modable Titanium/Steel Alloy Long Sword | 0.00 +293 | Modable Titanium Serpent Sword | 0.00 +294 | Iron Sword of Fire | 0.00 +295 | Iron Broad Sword of Fire | 0.00 +296 | Iron Broad Sword of Ice | 0.00 +297 | Steel Long Sword of Fire | 0.00 +298 | Steel Long Sword of Ice | 0.00 +299 | Steel Long Sword of Magic | 0.00 +300 | Steel Two Edged Sword of Fire | 0.00 +301 | Steel Two Edged Sword of Ice | 0.00 +302 | Steel Two Edged Sword of Magic | 0.00 +303 | Steel Two Edged Sword of Thermal | 0.00 +304 | Titanium/Steel Alloy Short Sword of Fire | 0.00 +305 | Titanium/Steel Alloy Short Sword of Ice | 0.00 +306 | Titanium/Steel Alloy Short Sword of Magic | 0.00 +307 | Titanium/Steel Alloy Short Sword of Thermal | 0.00 +308 | Titanium/Steel Alloy Long Sword of Fire | 0.00 +309 | Titanium/Steel Alloy Long Sword of Ice | 0.00 +310 | Titanium/Steel Alloy Long Sword of Magic | 0.00 +311 | Titanium/Steel Alloy Long Sword of Thermal | 0.00 +312 | Titanium Serpent Sword of Fire | 0.00 +313 | Titanium Serpent Sword of Ice | 0.00 +314 | Titanium Serpent Sword of Magic | 0.00 +315 | Titanium Serpent Sword of Thermal | 0.00 +316 | Iron Axe | 0.00 +317 | Steel Axe | 0.00 +318 | Titanium Axe | 0.00 +319 | Iron Plate Mail | 0.00 +320 | Iron Cuisses | 0.00 +321 | Fur Boots | 0.00 +322 | Iron Greave | 0.00 +323 | Leather Helm | 0.00 +324 | Book of Axe Construction | 0.00 +325 | Book of Iron Axe Construction | 0.00 +326 | Book of Steel Axe Construction | 0.00 +327 | Book of Titanium Axe Construction | 0.00 +328 | Damaged Iron Plate Mail | 0.00 +329 | Enriched Life Essence | 0.00 +330 | Book of Fluffy Summoning | 0.00 +331 | Chimeran Mountain Wolf Summoning | 0.00 +332 | Damaged Iron Cuisses | 0.00 +333 | Damaged Iron Greave | 0.00 +334 | Wood Branches | 0.00 +335 | Wood Logs | 0.00 +336 | The artificer cape | 0.00 +337 | Cape of No More Warlock | 0.00 +338 | Cape of passive camouflage | 0.00 +339 | Warlock's Cloak | 0.00 +340 | Cape of The Unbreakable | 0.00 +341 | No More Tears Cape | 0.00 +342 | Fur Torso | 0.00 +343 | Fur Pants | 0.00 +344 | Mod Cloak | 0.00 +345 | Derin Cloak | 0.00 +346 | Ravenod Cloak | 0.00 +347 | Placid Cloak | 0.00 +348 | Acelon Cloak | 0.00 +349 | Aislinn Cloak | 0.00 +350 | Used Iron Axe | 0.00 +351 | Second Hand Steel Axe | 0.00 +352 | Pre-owned Titanium Axe | 0.00 +353 | Wood Handle | 0.00 +354 | Ring of Power | 0.00 +355 | Rostogol Stone | 0.00 +356 | Potion of Crafting | 0.00 +357 | Magic Potion | 0.00 +358 | Book of Crafting Potion | 0.00 +359 | Book of Magic Potion | 0.00 +360 | Bone | 0.00 +361 | Branch | 0.00 +362 | Raccoon fur | 0.00 +363 | Skunk fur | 0.00 +364 | Raccoon hat | 0.00 +365 | Skunk hat | 0.00 +366 | Polar Bear Fur | 0.00 +367 | Crown of Life | 0.00 +368 | Crown of Mana | 0.00 +369 | Pickaxe of Magic | 0.00 +370 | Staff of the mage | 0.00 +371 | Branch Of Destruction | 0.00 +372 | Bone of Death | 0.00 +373 | Staff of Protection | 0.00 +374 | Axe of freezing | 0.00 +375 | Ring of Anitora | 0.00 +376 | Ring of Idaloran | 0.00 +377 | Ring of Bethel | 0.00 +378 | Ring of Sedicolis | 0.00 +379 | Ring of Palon Vertas | 0.00 +380 | Ring of Kusamura | 0.00 +381 | Ring of Egratia | 0.00 +382 | Ring of Iscalrith | 0.00 +383 | Ring of Irinveron | 0.00 +384 | Ring of Hulda | 0.00 +385 | Ring of Trassian | 0.00 +386 | Ring of Isle of the Forgotten | 0.00 +387 | Ring of Imbroglio Islands | 0.00 +388 | Ring of Hurquin | 0.00 +389 | Ring of Glacmor | 0.00 +390 | Ring of Emerald Valley | 0.00 +391 | Anitora Ring Building | 0.00 +392 | Idaloran Ring Building | 0.00 +393 | Bethel Ring Building | 0.00 +394 | Sedicolis Ring Building | 0.00 +395 | Palon Vertas Ring Building | 0.00 +396 | Kusamura Ring Building | 0.00 +397 | Egratia Ring Building | 0.00 +398 | Iscalrith Ring Building | 0.00 +399 | Irinveron Ring Building | 0.00 +400 | Hulda Ring Building | 0.00 +401 | Trassian Ring Building | 0.00 +402 | Isle of the Forgotten Ring Building | 0.00 +403 | Imbroglio Islands Ring Building | 0.00 +404 | Hurquin Ring Building | 0.00 +405 | Glacmor Ring Building | 0.00 +406 | Emerald Valley Ring Building | 0.00 +407 | Binding Stone | 0.00 +408 | Enrichment Stone | 0.00 +409 | Skull key | 0.00 +410 | Skeleton key | 0.00 +411 | Book of special swords | 0.00 +412 | Book of Fire sword | 0.00 +413 | Book of Ice sword | 0.00 +414 | Book of Magic sword | 0.00 +415 | Book of Thermal sword | 0.00 +416 | Book of Iron sword of fire | 0.00 +417 | Book of Iron Broad sword of fire | 0.00 +418 | Book of Iron Broad sword of ice | 0.00 +419 | Book of Steel long sword of fire | 0.00 +420 | Book of Steel long sword of ice | 0.00 +421 | Book of Steel long sword of magic | 0.00 +422 | Book of Steel two edged sword of fire | 0.00 +423 | Book of Steel two edged sword of ice | 0.00 +424 | Book of Steel two edged sword of magic | 0.00 +425 | Book of Steel two edged sword of thermal | 0.00 +426 | Book of Female Goblin Sum. | 0.00 +427 | Book of Armed Male Goblin Sum. | 0.00 +428 | Book of Armed Skeleton Sum. | 0.00 +429 | Book of Female Orc Sum. | 0.00 +430 | Book of Male Orc Sum. | 0.00 +431 | Book of Armed Female Orc Sum. | 0.00 +432 | Book of Armed Male Orc Sum. | 0.00 +433 | Book of Cyclop Sum. | 0.00 +434 | Book of Polar Bear Sum. | 0.00 +435 | Damaged Crown of Life | 0.00 +436 | Damaged Crown of Mana | 0.00 +437 | Book of Hydrogenium mining | 0.00 +438 | Book of Hydrogenium molding | 0.00 +439 | Book of Hydrogenium smelting | 0.00 +440 | Hydrogenium Ore | 0.00 +441 | Hydrogenium Bar | 0.00 +442 | Black panther fur | 0.00 +443 | Leopard fur | 0.00 +444 | Snow Leopard fur | 0.00 +445 | Tiger fur | 0.00 +446 | White Tiger fur | 0.00 +447 | Feran Horn | 0.00 +448 | Steel Greave | 0.00 +449 | Steel Cuisses | 0.00 +450 | Titanium Shield | 0.00 +451 | Steel Helm | 0.00 +452 | Titanium Helm | 0.00 +453 | Titanium Greave | 0.00 +454 | Titanium Cuisses | 0.00 +455 | Steel Plate Mail | 0.00 +456 | Titanium Plate Mail | 0.00 +457 | Emerald Claymore | 0.00 +458 | Cutlass | 0.00 +459 | Sunbreaker | 0.00 +460 | Orc Slayer | 0.00 +461 | Eagle Wing | 0.00 +462 | Rapier | 0.00 +463 | Jagged Saber | 0.00 +464 | Used Steel Greave | 0.00 +465 | Used Steel Cuisses | 0.00 +466 | Used Titanium Shield | 0.00 +467 | Used Steel Helm | 0.00 +468 | Used Titanium Helm | 0.00 +469 | Used Titanium Greave | 0.00 +470 | Used Titanium Cuisses | 0.00 +471 | Used Steel Plate Mail | 0.00 +472 | Used Titanium Plate Mail | 0.00 +473 | Used Emerald Claymore | 0.00 +474 | Used Cutlass | 0.00 +475 | Used Sunbreaker | 0.00 +476 | Used Orc Slayer | 0.00 +477 | Used Eagle Wing | 0.00 +478 | Used Rapier | 0.00 +479 | Used Jagged Saber | 0.00 +480 | Titanium Helm of Life | 0.00 +481 | Steel Helm of Mana | 0.00 +482 | Wolframite | 0.00 +483 | Wolfram Bar | 0.00 +484 | Book of Wolframite Smelting | 0.00 +485 | Book of Wolframite Mining | 0.00 +486 | Book of Wolfram Molding | 0.00 +487 | Book of Steel Greaves | 0.00 +488 | Book of Steel Cuisses | 0.00 +489 | Book of Titanium Shield | 0.00 +490 | Book of Steel Helmet | 0.00 +491 | Book of Titanium Helmet | 0.00 +492 | Book of Titanium Greaves | 0.00 +493 | Book of Titanium Cuisses | 0.00 +494 | Book of Steel Plate Mail | 0.00 +495 | Book of Titanium Plate Mail | 0.00 +496 | Book of Emerald Claymore | 0.00 +497 | Book of Cutlass | 0.00 +498 | Book of Sunbreaker | 0.00 +499 | Book of Orc Slayer | 0.00 +500 | Book of Eagle Wing | 0.00 +501 | Book of Rapier | 0.00 +502 | Book of Jagged Saber | 0.00 +503 | Augmented Leather Armor | 0.00 +504 | Cotton | 0.00 +505 | Toadstool | 0.00 +506 | True Sight Potion | 0.00 +507 | Daffodils | 0.00 +508 | Mugwort | 0.00 +509 | Valerian | 0.00 +510 | Rue | 0.00 +511 | Poppies | 0.00 +512 | Dandelion | 0.00 +513 | Poison Ivy | 0.00 +514 | Tulips | 0.00 +515 | Red Currents | 0.00 +516 | Blue Berries | 0.00 +517 | Henbane | 0.00 +518 | Mullein | 0.00 +519 | Nightshade | 0.00 +520 | Yarrow | 0.00 +521 | Wormwood | 0.00 +522 | Invisibility Potion | 0.00 +523 | Poison Antidote | 0.00 +524 | Book of Poison Antidote | 0.00 +525 | Book of True Sight | 0.00 +526 | Book of Invisibility | 0.00 +527 | Soldus Cloak | 0.00 +528 | Lotharion Cloak | 0.00 +529 | Learner Cloak | 0.00 +530 | Potion of Accuracy | 0.00 +531 | Potion of Evasion | 0.00 +532 | Book of Accuracy | 0.00 +533 | Book of Evasion | 0.00 +534 | Gypsum | 0.00 +535 | Honey Comb | 0.00 +536 | Wheat | 0.00 +537 | White Chanterelle | 0.00 +538 | Ogre Toes | 0.00 +539 | Tree Mushroom | 0.00 +540 | Augmented Leather Pants | 0.00 +541 | Rapier of death | 0.00 +542 | Sunbreaker of destruction | 0.00 +543 | Cutlass of the mage | 0.00 +544 | Orc Slayer of Mana Nullification | 0.00 +545 | Eagle Wing of Extra Damage | 0.00 +546 | Jagged Saber of Cooling | 0.00 +547 | Emerald Claymore of Life and Mana | 0.00 +548 | Titanium Shield of Life Drain | 0.00 +549 | Titanium Plate Mail of Freezing | 0.00 +550 | Steel Plate Mail of Healing | 0.00 +551 | Steel Cuisses of Mana Drain | 0.00 +552 | Steel Greave of Ubber Defense | 0.00 +553 | Titanium Cuisses of Cooldown Removal | 0.00 +554 | Titanium Greave of Mirroring | 0.00 +555 | Arctic Chimeran Summoning | 0.00 +556 | Yeti Summoning | 0.00 +557 | Giant Summoning | 0.00 +558 | Crown of Life Building | 0.00 +559 | Crown of Mana Building | 0.00 +560 | Ring of Mana Destruction Building | 0.00 +561 | Ring of Massive Mana Destruction Building | 0.00 +562 | Ring of Mana Destruction | 0.00 +563 | Ring of Massive Mana Destruction | 0.00 +564 | Book of Gypsum Harvesting | 0.00 +565 | Book of Gypsum Molding | 0.00 +566 | Enriched Death Essence | 0.00 +567 | Potion of Alchemy | 0.00 +568 | Potion of Potion | 0.00 +569 | Sslessar Summoning Stone | 0.00 +570 | Bear Summoning Stone | 0.00 +571 | Tiger Summoning Stone | 0.00 +572 | Yeti Summoning Stone | 0.00 +573 | Giant Spider Summoning Stone | 0.00 +574 | Arctic Chim Summoning Stone | 0.00 +575 | Phantom Warrior Summoning Stone | 0.00 +576 | Fluffy Summoning Stone | 0.00 +577 | Armed Orc Summoning Stone | 0.00 +578 | Giant Summoning Stone | 0.00 +579 | Sslessar Stone Construction | 0.00 +580 | Bear Stone Construction | 0.00 +581 | Tiger Stone Construction | 0.00 +582 | Yeti Stone Construction | 0.00 +583 | Giant Spider Stone Construction | 0.00 +584 | Arctic Chim Stone Construction | 0.00 +585 | Phantom Warrior Stone Construction | 0.00 +586 | Fluffy Stone Construction | 0.00 +587 | Armed Orc Stone Construction | 0.00 +588 | Giant Stone Construction | 0.00 +589 | Potion of Alchemy Construction | 0.00 +590 | Potion of Potion Construction | 0.00 +591 | Bronze Plate Mail | 0.00 +592 | Bronze Cuisses | 0.00 +593 | Bronze Greave | 0.00 +594 | Bronze Helm | 0.00 +595 | Bronze Shield | 0.00 +596 | Copper Mining | 0.00 +597 | Tin Mining | 0.00 +598 | Copper Smelting | 0.00 +599 | Tin Smelting | 0.00 +600 | Copper Molding | 0.00 +601 | Tin Molding | 0.00 +602 | Bronze Plate Mail Construction | 0.00 +603 | Bronze Cuisses Construction | 0.00 +604 | Bronze Greaves Construction | 0.00 +605 | Bronze Helm Construction | 0.00 +606 | Bronze Shield Construction | 0.00 +607 | Copper Ore | 0.00 +608 | Tin Ore | 0.00 +609 | Copper Bar | 0.00 +610 | Tin Bar | 0.00 +611 | Bronze Bar | 0.00 +612 | Matter Conglomerate | 0.00 +613 | Seridium Mining | 0.00 +614 | Seridium Smelting | 0.00 +615 | Seridium Molding | 0.00 +616 | Seridium Medallion Building | 0.00 +617 | Seridium Ore | 0.00 +618 | Seridium Bar | 0.00 +619 | Heavenspawn Medallion | 0.00 +620 | Harvester Medallion | 0.00 +621 | Turquoise | 0.00 +622 | Heavenspawn Medallion Building | 0.00 +623 | Harvester Medallion Building | 0.00 +624 | Red Dragon Scale | 0.00 +625 | Vial Mold | 0.00 +626 | Alembic | 0.00 +627 | Cinnabar | 0.00 +628 | Cinnabar Mining | 0.00 +629 | Mercury Extraction | 0.00 +630 | Vial Mold Building | 0.00 +631 | Alembic Building | 0.00 +632 | Medallion of Life Building | 0.00 +633 | Medallion of Life | 0.00 +634 | Yarrow - Wormwood - Tulips Extract | 0.00 +635 | Nightshade - Mullein - Dandelion Extract | 0.00 +636 | Poison Ivy - Henbane - Poppies Extract | 0.00 +637 | Red Currents - Blue Berries - Rue Extract | 0.00 +638 | White Chanterelle - Ogre Toes - Tree Mushroom Extract | 0.00 +639 | Wheat - Valerian - Mugwort Extract | 0.00 +640 | Wheat - Daffodils - Feran Horn Extract | 0.00 +641 | Refined Vegetal Mixture | 0.00 +642 | Mixture of Power | 0.00 +643 | Coordination Removal Stone | 0.00 +644 | Physique Removal Stone | 0.00 +645 | Reasoning Removal Stone | 0.00 +646 | Will Removal Stone | 0.00 +647 | Instinct Removal Stone | 0.00 +648 | Vitality Removal Stone | 0.00 +649 | Human Removal Stone | 0.00 +650 | Animal Removal Stone | 0.00 +651 | Vegetal Removal Stone | 0.00 +652 | Inorganic Removal Stone | 0.00 +653 | Artificial Removal Stone | 0.00 +654 | Magic Removal Stone | 0.00 +655 | Red Dragon Helm | 0.00 +656 | Blue Adventurer's cap | 0.00 +657 | Brown Adventurer's cap | 0.00 +658 | Green Adventurer's cap | 0.00 +659 | Black Adventurer's cap | 0.00 +660 | Red Adventurer's cap | 0.00 +661 | Gold Circlet | 0.00 +662 | Silver Circlet | 0.00 +663 | Gold Tiara | 0.00 +664 | Silver Tiara | 0.00 +665 | Gold Crown | 0.00 +666 | Silver Crown | 0.00 +667 | Brown Bandana | 0.00 +668 | Blue Bandana | 0.00 +669 | Red Bandana | 0.00 +670 | Black Bandana | 0.00 +671 | Green Bandana | 0.00 +672 | Night Visor | 0.00 +673 | Red Dragon Greave | 0.00 +674 | Red Dragon Cuisses | 0.00 +675 | Red Dragon Mail | 0.00 +676 | Red Royal Cape | 0.00 +677 | Purple Royal Cape | 0.00 +678 | Custom Cape | 0.00 +679 | Bronze Sword | 0.00 +680 | Custom Shield | 0.00 +681 | Spear | 0.00 +682 | Halberd | 0.00 +683 | Dragon Blade | 0.00 +684 | Golden Star Mace | 0.00 +685 | Frying Pan | 0.00 +686 | Book of Bronze Sword | 0.00 +687 | Book of Red Dragon Torso Armor | 0.00 +688 | Book of Red Dragon Greaves Armor | 0.00 +689 | Book of Red Dragon Cuisses Armor | 0.00 +690 | Book of Red Dragon Helm Armor | 0.00 +691 | Book of Spear | 0.00 +692 | Book of Halberd | 0.00 +693 | Book of Dragon Blade | 0.00 +694 | Book of Golden Star Mace | 0.00 +695 | Book of Frying Pan | 0.00 +696 | Book of Night Visor | 0.00 +697 | Book of Caltrops | 0.00 +698 | Book of Blackpowder | 0.00 +699 | Book of Camouflage Cape | 0.00 +700 | Book of Rope | 0.00 +701 | Book of Snare | 0.00 +702 | Book of Nails | 0.00 +703 | Book of Poisoned Caltrops | 0.00 +704 | Book of Small Landmine | 0.00 +705 | Book of Saltpetre | 0.00 +706 | Book of Saving Stone | 0.00 +707 | Hawk Feather | 0.00 +708 | Falcon Feather | 0.00 +709 | Black Dragon Scale | 0.00 +710 | Blackpowder | 0.00 +711 | Saving Stone | 0.00 +712 | Caltrop | 0.00 +713 | Poisoned Caltrop | 0.00 +714 | Rope | 0.00 +715 | Snare | 0.00 +716 | Ashes | 0.00 +717 | Saltpeter | 0.00 +718 | Medium Mine | 0.00 +719 | Dung | 0.00 +720 | Bucket | 0.00 +721 | Cockatrice Feather | 0.00 +722 | Nail | 0.00 +723 | Small Mine | 0.00 +724 | Book of Hawk Summoning | 0.00 +725 | Book of Falcon Summoning | 0.00 +726 | Book of Potion of Engineering | 0.00 +727 | Book of Barricade | 0.00 +728 | Potion of Engineering | 0.00 +729 | Book of Ogre Fighting | 0.00 +730 | Book of Phantom Warrior Fighting | 0.00 +731 | Book of Fluffy Fighting | 0.00 +732 | Book of Yeti Fighting | 0.00 +733 | Book of Giant Fighting | 0.00 +734 | Book of Red Dragon Fighting | 0.00 +735 | Book of Black Dragon Fighting | 0.00 +736 | A/D Indicator | 0.00 +737 | Criticals Indicator | 0.00 +738 | Accuracy/Magic Indicator | 0.00 +739 | Harvest/Degrade Indicator | 0.00 +740 | Make Rare/Fail Indicator | 0.00 +741 | Attack predictor | 0.00 +742 | Defense predictor | 0.00 +743 | To Hit predictor | 0.00 +744 | To Damage predictor | 0.00 +745 | Accuracy predictor | 0.00 +746 | Magic predictor | 0.00 +747 | Harvest predictor | 0.00 +748 | Degrade predictor | 0.00 +749 | Make Rare predictor | 0.00 +750 | Failure predictor | 0.00 +751 | Book of Red Dragon Summoning | 0.00 +752 | Book of Astrology Indicators | 0.00 +753 | Book of A/D Indicator Building | 0.00 +754 | Book of Criticals Indicator Building | 0.00 +755 | Book of Accuracy/Magic Indicator Building | 0.00 +756 | Book of Harvest/Degrade Indicator Building | 0.00 +757 | Book of Rare/Fail Indicator Building | 0.00 +758 | Lightmeter | 0.00 +759 | Book of Lightmeter | 0.00 +760 | High Explosive Mine | 0.00 +761 | Brown Tunic | 0.00 +762 | Lavender Tunic | 0.00 +763 | Green Tunic | 0.00 +764 | Black Tunic | 0.00 +765 | Red Tunic | 0.00 +766 | Blue Tunic | 0.00 +767 | White Tunic | 0.00 +768 | Red Tunic White Shirt | 0.00 +769 | Blue Tunic White Shirt | 0.00 +770 | Brown Tunic White Shirt | 0.00 +771 | Black Tunic White Shirt | 0.00 +772 | Black Tunic Green Shirt | 0.00 +773 | Black Tunic Purple Shirt | 0.00 +774 | Black Tunic Red Shirt | 0.00 +775 | Black Tunic Black Shirt | 0.00 +776 | Brown Tunic Blue Shirt | 0.00 +777 | Purple Robe | 0.00 +778 | Green Robe | 0.00 +779 | Light Blue Robe | 0.00 +780 | White Robe | 0.00 +781 | Blue Robe | 0.00 +782 | Black Robe | 0.00 +783 | Gray Robe | 0.00 +784 | Brown Robe | 0.00 +785 | Red Robe | 0.00 +786 | Yellow Robe | 0.00 +787 | Black Robe Skirt | 0.00 +788 | Gray Robe Skirt | 0.00 +789 | Brown Robe Skirt | 0.00 +790 | White Robe Skirt | 0.00 +791 | Blue Robe Skirt | 0.00 +792 | Purple Robe Skirt | 0.00 +793 | Green Robe Skirt | 0.00 +794 | Light Blue Robe Skirt | 0.00 +795 | Red Robe Skirt | 0.00 +796 | Yellow Robe Skirt | 0.00 +797 | Black Red Striped Baggy Pants | 0.00 +798 | White Red Striped Baggy Pants | 0.00 +799 | Black Purple Striped Baggy Pants | 0.00 +800 | Black Blue Striped Baggy Pants | 0.00 +801 | Black Baggy Pants | 0.00 +802 | Brown Baggy Pants | 0.00 +803 | Skull Crossbones Scarf | 0.00 +804 | Black Scarf | 0.00 +805 | Red Scarf | 0.00 +806 | Black Tricorn Hat | 0.00 +807 | Brown Tricorn Hat | 0.00 +808 | Blue Tricorn Hat | 0.00 +809 | Brown Buccaneer Hat | 0.00 +810 | Black Buccaneer Hat | 0.00 +811 | Black Cavalier Peacock Hat | 0.00 +812 | Green Cavalier Peacock Hat | 0.00 +813 | Blue Cavalier Hat | 0.00 +814 | Black Cavalier Hat | 0.00 +815 | Santa Hat | 0.00 +816 | Universal Hood | 0.00 +817 | Black Dragon Helm | 0.00 +818 | Black Dragon Mail | 0.00 +819 | Black Dragon Cuisses | 0.00 +820 | Black Dragon Greave | 0.00 +821 | Red Dye | 0.00 +822 | Orange Dye | 0.00 +823 | Yellow Dye | 0.00 +824 | Green Dye | 0.00 +825 | Blue Dye | 0.00 +826 | Purple Dye | 0.00 +827 | Black Dye | 0.00 +828 | White Fabric | 0.00 +829 | Black Fabric | 0.00 +830 | Red Fabric | 0.00 +831 | Orange Fabric | 0.00 +832 | Yellow Fabric | 0.00 +833 | Green Fabric | 0.00 +834 | Blue Fabric | 0.00 +835 | Purple Fabric | 0.00 +836 | Gray Fabric | 0.00 +837 | Brown Fabric | 0.00 +838 | Loom | 0.00 +839 | Scissor | 0.00 +840 | Book of Fabric Weaving | 0.00 +841 | Book of Red Dye | 0.00 +842 | Book of Orange Dye | 0.00 +843 | Book of Yellow Dye | 0.00 +844 | Book of Green Dye | 0.00 +845 | Book of Blue Dye | 0.00 +846 | Book of Purple Dye | 0.00 +847 | Book of Black Dye | 0.00 +848 | Book of Fabric Dyeing | 0.00 +849 | Book of Tunic | 0.00 +850 | Book of Tunic/Shirt | 0.00 +851 | Book of Robe | 0.00 +852 | Book of Robe Skirts | 0.00 +853 | Book of Baggy Pants | 0.00 +854 | Book of Scarves | 0.00 +855 | Book of Tricorn Hat | 0.00 +856 | Book of Buccaneer Hat | 0.00 +857 | Book of Santa Hat | 0.00 +858 | Book of Hood | 0.00 +859 | Book of Black Dragon Helm | 0.00 +860 | Book of Black Dragon Torso Armor | 0.00 +861 | Book of Black Dragon Cuisses | 0.00 +862 | Book of Black Dragon Greaves | 0.00 +863 | Book of Titanium/Steel Short Sword of Fire | 0.00 +864 | Book of Titanium/Steel Short Sword of Ice | 0.00 +865 | Book of Titanium/Steel Short Sword of Magic | 0.00 +866 | Book of Titanium/Steel Short Sword of Thermal | 0.00 +867 | Book of Titanium/Steel Long Sword of Fire | 0.00 +868 | Book of Titanium/Steel Long Sword of Ice | 0.00 +869 | Book of Titanium/Steel Long Sword of Magic | 0.00 +870 | Book of Titanium/Steel Long Sword of Thermal | 0.00 +871 | Book of Serpent Sword of Fire | 0.00 +872 | Book of Serpent Sword of Ice | 0.00 +873 | Book of Serpent Sword of Magic | 0.00 +874 | Book of Serpent Sword of Thermal | 0.00 +875 | Square Vial | 0.00 +876 | Book of No More Warlock | 0.00 +877 | Book of Medium Landmine | 0.00 +878 | Book High Explosive Mine | 0.00 +879 | Long Bow | 0.00 +880 | Training arrows | 0.00 +881 | Short Bow | 0.00 +882 | Crossbow | 0.00 +883 | Crossbow training bolts | 0.00 +884 | Invasionmeter | 0.00 +885 | Book of Invasionmeter | 0.00 +886 | Recurve Bow | 0.00 +887 | Elven Bow | 0.00 +888 | Magic arrows | 0.00 +889 | Fire arrows | 0.00 +890 | Ice arrows | 0.00 +891 | Magic bolts | 0.00 +892 | Fire bolts | 0.00 +893 | Ice bolts | 0.00 +894 | Yew | 0.00 +895 | Arrow/bolt head mold | 0.00 +896 | Arrow/bolt head | 0.00 +897 | Ice Dragon Scale | 0.00 +898 | Carving Knife | 0.00 +899 | Saw | 0.00 +900 | Book of Bows and Crossbows | 0.00 +901 | Book of Arrows and bolts | 0.00 +902 | Book of PK arrows | 0.00 +903 | Book of Ice arrows | 0.00 +904 | Book of Fire arrows | 0.00 +905 | Book of Magic arrows | 0.00 +906 | Book of PK bolts | 0.00 +907 | Book of Ice bolts | 0.00 +908 | Book of Fire bolts | 0.00 +909 | Book of Magic bolts | 0.00 +910 | Book of Arrows/Bolts head mold | 0.00 +911 | Book of Arrow/Bolt head | 0.00 +912 | Pking arrows | 0.00 +913 | Pking bolts | 0.00 +914 | Damaged Bronze Plate Mail | 0.00 +915 | Damaged Bronze Cuisses | 0.00 +916 | Damaged Bronze Greave | 0.00 +917 | Damaged Red Dragon Greave | 0.00 +918 | Damaged Red Dragon Cuisses | 0.00 +919 | Damaged Red Dragon Mail | 0.00 +920 | Damaged Black Dragon Mail | 0.00 +921 | Damaged Black Dragon Cuisses | 0.00 +922 | Damaged Black Dragon Greave | 0.00 +923 | Invasion Token | 0.00 +924 | Gelatine Bones removal | 0.00 +925 | Hellspawn removal | 0.00 +926 | I can't Dance removal | 0.00 +927 | Antisocial removal | 0.00 +928 | RC Mine | 0.00 +929 | RC Mine Detonator | 0.00 +930 | Book of RC Mine | 0.00 +931 | Book of RC Detonator | 0.00 +932 | Mana Drain Ward | 0.00 +933 | Book of Mana Drain Ward | 0.00 +934 | Book of Mana Burn Ward | 0.00 +935 | Book of Invisibility Removal Ward | 0.00 +936 | Book of Immunity Removal Ward | 0.00 +937 | Scythe | 0.00 +938 | Ice Dragon Helm | 0.00 +939 | Ice Dragon Mail | 0.00 +940 | Ice Dragon Cuisses | 0.00 +941 | Ice Dragon Greave | 0.00 +942 | Mana Burn Ward | 0.00 +943 | Book of Ice Dragon Torso Armor | 0.00 +944 | Book of Ice Dragon Greaves Armor | 0.00 +945 | Book of Ice Dragon Cuisses Armor | 0.00 +946 | Book of Ice Dragon Helm Armor | 0.00 +947 | Book of Scythe | 0.00 +948 | MI Removal Ward | 0.00 +949 | Invisibility Removal Ward | 0.00 +950 | Potion of Cold Protection | 0.00 +951 | Potion of Heat Protection | 0.00 +952 | Potion of Radiation Protection | 0.00 +953 | Book of Cold Protection | 0.00 +954 | Book of Heat Protection | 0.00 +955 | Book of Radiation Protection | 0.00 +956 | Creature food | 0.00 +957 | Mule Glyph | 0.00 +958 | Book of Creature Food | 0.00 +959 | Book of Mule Glyph | 0.00 +960 | Brown Horse Whistle | 0.00 +961 | Fast Regeneration Removal | 0.00 +962 | I Eat Dead People Removal | 0.00 +963 | Book of Enhanced Items | 0.00 +964 | Book of Enhanced Armor | 0.00 +965 | Book of Enhanced Weapons | 0.00 +966 | Enhanced Iron Greave | 0.00 +967 | Enhanced Iron Cuisses | 0.00 +968 | Enhanced Iron Plate Mail | 0.00 +969 | Red Dragon Helm Of Life and Mana | 0.00 +970 | Damaged Ice Dragon Helm | 0.00 +971 | Damaged Ice Dragon Mail | 0.00 +972 | Damaged Ice Dragon Cuisses | 0.00 +973 | Damaged Ice Dragon Greave | 0.00 +974 | Cheap Cutlass | 0.00 +975 | Mage Robe Shirt | 0.00 +976 | Mage Robe Pants | 0.00 +977 | Rose Bouquet | 0.00 +978 | Leonard fur | 0.00 +979 | Potion of Speed Hax | 0.00 +980 | Book of Speed Hax | 0.00 +981 | Potion of Attack Reduction | 0.00 +982 | Potion of Defense Reduction | 0.00 +983 | Book of Attack Reduction | 0.00 +984 | Book of Defense Reduction | 0.00 +985 | Dvarium Smelting | 0.00 +986 | Dvarium Mining | 0.00 +987 | Dvarium Molding | 0.00 +988 | Potion of Archery AP | 0.00 +989 | Dvarium Ore | 0.00 +990 | Dvarium Bar | 0.00 +991 | Radioactive Titanium Long Sword | 0.00 +992 | Godless removal | 0.00 +993 | Archery Arena Ticket | 0.00 +994 | Radioactive Rapier From the Shop | 0.00 +995 | White Horse Whistle | 0.00 +996 | Black Horse Whistle | 0.00 +997 | Gatherer Medallion | 0.00 +998 | Book of Medallion of the Gatherer | 0.00 +999 | Book of Radioactive Rapier | 0.00 +1000 | Book of Medallion of Mana | 0.00 +1001 | Book of Mage Robes | 0.00 +1002 | Book of Tunic of the Ninja | 0.00 +1003 | Radioactive Rapier | 0.00 +1004 | One removal | 0.00 +1005 | Tunic of the Ninja | 0.00 +1006 | Medallion of Mana | 0.00 +1007 | Monster Magnetism removal | 0.00 +1008 | Palomino Whistle | 0.00 +1009 | Dapple Gray Whistle | 0.00 +1010 | Painted Whistle | 0.00 +1011 | Black and White Whistle | 0.00 +1012 | Harvester of Sorrow removal | 0.00 +1013 | Boat Ticket | 0.00 +1014 | Big Book of Manufacturing | 0.00 +1015 | Big Book of Tailoring | 0.00 +1016 | Big Book of Crafting | 0.00 +1017 | Big Book of Potions | 0.00 +1018 | Big Book of Engineering | 0.00 +1019 | 10% Shop Coupon | 0.00 +1020 | P2P Shop Coupon | 0.00 +1021 | Bot Blessing Coupon | 0.00 +1022 | 5% Coupon | 0.00 +1023 | Phoenix Glyph | 0.00 +1024 | I glow in the dark removal | 0.00 +1025 | Color change stone | 0.00 +1026 | Evanescence removal | 0.00 +1027 | Skeptic removal | 0.00 +1028 | Orange | 0.00 +1029 | NMT removal | 0.00 +1030 | Whilhelm Hood removal | 0.00 +1031 | Artificer removal | 0.00 +1032 | Mirror Skin removal | 0.00 +1033 | Fatal Man removal | 0.00 +1034 | Point Defense | 0.00 +1035 | Bad Day Removal | 0.00 +1036 | Sun Tzu Stone | 0.00 +1037 | Body Piercing removal | 0.00 +1038 | Nexus transfer stone | 0.00 +1039 | Joules Stone | 0.00 +1040 | Ethereal Ranger removal | 0.00 +1041 | Underworlder removal | 0.00 +1042 | There is no fork removal | 0.00 +1043 | Book of Cockatrice Fighting | 0.00 +1044 | Book of AC Fighting | 0.00 +1045 | Day of Robin Tell Stone | 0.00 +1046 | Day of Stakhanov Stone | 0.00 +1047 | Day of Non Stop Stone | 0.00 +1048 | Day of Schools Stone | 0.00 +1049 | Day of Magic Stone | 0.00 +1050 | Pear | 0.00 +1051 | Blue green vest | 0.00 +1052 | Red vest | 0.00 +1053 | Black vest | 0.00 +1054 | Brown vest | 0.00 +1055 | Purple white dress | 0.00 +1056 | Green white dress | 0.00 +1057 | Black white dress | 0.00 +1058 | Red pink dress | 0.00 +1059 | Purple white skirt | 0.00 +1060 | Green white skirt | 0.00 +1061 | Black white skirt | 0.00 +1062 | Red pink skirt | 0.00 +1063 | Grapes | 0.00 +1064 | Day of Faster respawns Stone | 0.00 +1065 | Day of Half cooldowns Stone | 0.00 +1066 | Day of Summoners Stone | 0.00 +1067 | Day of Alfred Nobel Stone | 0.00 +1068 | Haidir pass | 0.00 +1069 | Amber | 0.00 +1070 | Quill and ink | 0.00 +1071 | Blank paper | 0.00 +1072 | Book of Books | 0.00 +1073 | Enhanced Unicorn Medallion | 0.00 +1074 | Enhanced Sun Medallion | 0.00 +1075 | Excavator removal | 0.00 +1076 | Book of Skirts | 0.00 +1077 | Book of Dresses | 0.00 +1078 | Book of Vests | 0.00 +1079 | Book of Enhanced Unicorn Medallion | 0.00 +1080 | Book of Enhanced Sun Medallion | 0.00 +1081 | Ring of Morcraven Marsh | 0.00 +1082 | Ring of SRM | 0.00 +1083 | Ring of Melinis | 0.00 +1084 | Power Hungry removal | 0.00 +1085 | The Summoner removal | 0.00 +1086 | Blue Dragon Greave | 0.00 +1087 | Blue Dragon Cuisses | 0.00 +1088 | Blue Dragon Mail | 0.00 +1089 | Blue Dragon Shield | 0.00 +1090 | Blue dragon sword | 0.00 +1091 | Blue Dragon Helm | 0.00 +1092 | Black boots | 0.00 +1093 | Brown boots | 0.00 +1094 | White boots | 0.00 +1095 | Gray Wizard Hat | 0.00 +1096 | Black Wizard Hat | 0.00 +1097 | White Wizard Hat | 0.00 +1098 | White gold wedding dress | 0.00 +1099 | White silver wedding dress | 0.00 +1100 | White red peasant dress | 0.00 +1101 | White blue peasant dress | 0.00 +1102 | Brown blue peasant dress | 0.00 +1103 | Purple peasant dress | 0.00 +1104 | White doublet | 0.00 +1105 | Black doublet | 0.00 +1106 | Navy doublet | 0.00 +1107 | Brown doublet | 0.00 +1108 | Brown jacket | 0.00 +1109 | Green jacket | 0.00 +1110 | Navy jacket | 0.00 +1111 | Black jacket | 0.00 +1112 | White Gold wedding skirt | 0.00 +1113 | White Silver wedding skirt | 0.00 +1114 | White Red Peasant skirt | 0.00 +1115 | White Blue Peasant skirt | 0.00 +1116 | Brown Blue Peasant skirt | 0.00 +1117 | Purple Peasant skirt | 0.00 +1118 | Book of Blue Dragon Torso Armor | 0.00 +1119 | Book of Blue Dragon Greaves Armor | 0.00 +1120 | Book of Blue Dragon Cuisses Armor | 0.00 +1121 | Book of Blue Dragon Helm Armor | 0.00 +1122 | Book of Blue Dragon Shield | 0.00 +1123 | Book of Blue Dragon Sword | 0.00 +1124 | Blue Dragon Scale | 0.00 +1125 | Book of Boots Making | 0.00 +1126 | Book of Wizard Hats Making | 0.00 +1127 | Book of Wedding Dress Making | 0.00 +1128 | Book of Peasant Dress Making | 0.00 +1129 | Powersaving removal | 0.00 +1130 | Book of Doublets Making | 0.00 +1131 | Book of Jackets Making | 0.00 +1132 | Book of Wedding Skirts Making | 0.00 +1133 | Book of Peasant Skirts Making | 0.00 +1134 | Book of Ice Dragons Fighting | 0.00 +1135 | Book of Blue Dragons Fighting | 0.00 +1136 | Book of Bulangiu Fighting | 0.00 +1137 | Book of Mare Bulangiu Fighting | 0.00 +1138 | Treasure finder | 0.00 +1139 | Book of Treasure finder | 0.00 +1140 | Book of Pear finder | 0.00 +1141 | Pear finder | 0.00 +1142 | Potion of Action Points | 0.00 +1143 | Book of Potion of Action Points | 0.00 +1144 | Used Blue Dragon Greave | 0.00 +1145 | Used Blue Dragon Cuisses | 0.00 +1146 | Used Blue Dragon Mail | 0.00 +1147 | Used Blue Dragon Shield | 0.00 +1148 | Used Blue Dragon Helm | 0.00 +1149 | Conjurer removal | 0.00 +1150 | Little Dragon Blue Summoning Stone | 0.00 +1151 | Enriched Energy Essence | 0.00 +1152 | Dung teleporter | 0.00 +1153 | Day of Reconstruction | 0.00 +1154 | Daily cooldown reducer | 0.00 +1155 | Attribute reset stone | 0.00 +1156 | Dedicated Harvester removal | 0.00 +1157 | Scotty Died removal | 0.00 +1158 | Halberd of action | 0.00 +1159 | Book of RHoLM | 0.00 +1160 | Collateral Damage removal | 0.00 +1161 | Day of Recycling | 0.00 +1162 | Unicorn Dung | 0.00 +1163 | Banana | 0.00 +1164 | Random item giver | 0.00 +1165 | Random exp giver | 0.00 +1166 | Day of Tailoring | 0.00 +1167 | Ring of Hydro | 0.00 +1168 | Sharp Shooter removal | 0.00 +1169 | Marksman's Crossbow | 0.00 +1170 | Dragon Blade of Mirroring | 0.00 +1171 | Elven Bow of Wilhelm Hood | 0.00 +1172 | Titanium Axe of Evanescence | 0.00 +1173 | Rabbit token | 0.00 +1174 | Beaver token | 0.00 +1175 | Rat token | 0.00 +1176 | Snake token | 0.00 +1177 | Woodsprite token | 0.00 +1178 | Brownie token | 0.00 +1179 | Ogre token | 0.00 +1180 | Goblin token | 0.00 +1181 | Female Goblin token | 0.00 +1182 | Spider token | 0.00 +1183 | Skeleton token | 0.00 +1184 | Tiger token | 0.00 +1185 | Panther token | 0.00 +1186 | Male Orc token | 0.00 +1187 | Female Orc token | 0.00 +1188 | Careful guy removal | 0.00 +1189 | White Wizard Hat of Life and Mana | 0.00 +1190 | Book of Wizard hat of life and mana | 0.00 +1191 | Short Bow of Ethereal Ranger | 0.00 +1192 | Staff of the action mage | 0.00 +1193 | Runner's cape | 0.00 +1194 | Little Blue Dragon Scale | 0.00 diff --git a/main.go b/main.go new file mode 100644 index 0000000..41f53c6 --- /dev/null +++ b/main.go @@ -0,0 +1,516 @@ +package main + +import ( + "bufio" + "encoding/binary" + "fmt" + "log" + "net" + "net/http" + "os" + "strconv" + "strings" + "text/template" + "time" + + "github.com/spf13/viper" +) + +var items []item +var inventar []invPos + +func checkErr(err error) { + if err != nil { + + log.Fatal(err) + } +} + +var gActors = make(map[int]string) + +var isInTrade int + +var myTrade [16]tradeStr +var hisTrade [16]tradeStr + +// read items list and create the array +func populateItems() { + file, err := os.Open("item_info.txt") + if err != nil { + log.Fatal(err) + } + defer file.Close() + + scanner := bufio.NewScanner(file) + + for scanner.Scan() { + a := strings.Split(string(scanner.Text()), "|") + id, _ := strconv.Atoi(strings.ReplaceAll(a[0], " ", "")) + text_id := strings.TrimSpace(a[1]) + item_price, _ := strconv.ParseFloat(strings.TrimSpace(a[2]), 32) + n := item{Id: id, Text: text_id, Price: item_price} + items = append(items, n) + } + + if err := scanner.Err(); err != nil { + log.Fatal(err) + } +} + +// Process incoming text messages from game +func processPmMessage(c net.Conn, user string, mesaj string) { + // fmt.Printf("PM MESSAGE command: |%s|\n", mesaj) + msg := strings.Split(mesaj, " ")[1] + switch msg { + case "#ver", "ver": + sendMessage(c, user, "GoEl bot v1 - written by mihaim") + case "#inv", "inv": + sendMessage(c, user, "Bot inventory:") + for i := 0; i < 36; i++ { + if inventar[i].Quantity != 0 { + for _, it := range items { + if inventar[i].Id == it.Id { + sendMessage(c, user, "Item: "+strconv.Itoa(inventar[i].Quantity)+" "+it.Text+" sell price: "+fmt.Sprintf("%.2f", it.Price)) + } + } + } + } + case "#set": + if len(strings.Split(mesaj, " ")) != 4 { + sendMessage(c, user, "#set ") + break + } + itemId, _ := strconv.ParseInt(strings.Split(mesaj, " ")[2], 0, 0) + newPrice, _ := strconv.ParseFloat(strings.Split(mesaj, " ")[3], 64) + items[itemId].Price = newPrice + + a1 := fmt.Sprintf("Set price for %s to %.2f", items[itemId].Text, items[itemId].Price) + sendMessage(c, user, a1) + case "#get", "get": + if len(strings.Split(mesaj, " ")) != 3 { + sendMessage(c, user, "#get ") + break + } + itemId, _ := strconv.ParseInt(strings.Split(mesaj, " ")[2], 0, 0) + a1 := fmt.Sprintf("Price for %s is %.2f", items[itemId].Text, items[itemId].Price) + sendMessage(c, user, a1) + + case "#buy", "buy": + if len(strings.Split(mesaj, " ")) < 3 { + sendMessage(c, user, "usage: #buy ") + break + } + if isInTrade == 0 { + sendMessage(c, user, "You need to trade with me before buying something") + break + } + + q, _ := strconv.ParseInt(strings.Split(mesaj, " ")[2], 0, 0) + search_for := strings.Join(strings.Split(mesaj, " ")[3:], " ") + + // search in inventory , add to trade window + i := 0 + for i = 0; i < 36; i++ { + if inventar[i].Quantity != 0 && strings.Contains(strings.ToLower(items[inventar[i].Id].Text), strings.ToLower(search_for)) { + putItemOnTrade(c, int(q), i) + sendMessage(c, user, fmt.Sprintf("Added to trade window %d %s", int(q), items[inventar[i].Id].Text)) + break + } + } + case "#help", "help": + sendMessage(c, user, "GoEl trade bot v1 - written by mihaim") + sendMessage(c, user, "Available commands: #buy, #inv, #ver, #help") + + case "#acc", "acc": + acceptTrade(c) + //sendMessage(c, user, "Accepting trade") + + case "#dbg", "dbg": + for i := 0; i < 16; i++ { + if hisTrade[i].Quantity != 0 { + sendMessage(c, user, fmt.Sprintf("His_Trade: %s %d\n", items[hisTrade[i].Id].Text, hisTrade[i].Quantity)) + } + } + for i := 0; i < 16; i++ { + if myTrade[i].Quantity != 0 { + sendMessage(c, user, fmt.Sprintf("My_Trade: %s %d\n", items[myTrade[i].Id].Text, myTrade[i].Quantity)) + } + } + + default: + fmt.Printf("command: |%s|", strings.Split(mesaj, " ")[1]) + switch user { + case "mihaim": + sendMessage(c, user, "Sar'na conashu' mihai") + case "radu": + sendMessage(c, user, "Sa traiasca dom' shef. Dulapu raporteaza ca nu's probleme") + case "domino": + sendMessage(c, user, "Traiasca dom' sherif. Dulapu la raport . Niem problem. All good") + default: + sendMessage(c, user, "Unknown command but hello to you too . And use #help for more informations") + } + } +} + +func processBuffer(c net.Conn, buffer []byte, length int) { + + ping_reply := make([]byte, 7) + + switch buffer[0] { + + // received inventory + case HERE_YOUR_INVENTORY: + + for i := 0; i < int(buffer[3]); i++ { + quantity := binary.LittleEndian.Uint32(buffer[i*10+3+3 : i*10+3+3+4]) + itemId := int(buffer[i*10+3+3+3+3]) + 256*int(buffer[i*10+3+3+3+4]) + pos := int(buffer[i*10+3+7]) + inventar[pos].Id = itemId + inventar[pos].Quantity = int(quantity) + inventar[pos].Pos = pos + } + + // Ping from server + case PING_REQUEST: + a := int(buffer[1]) + 256*int(buffer[2]) + ping_reply[0] = buffer[0] + ping_reply[1] = buffer[1] + ping_reply[2] = buffer[2] + ping_reply[3] = buffer[3] + ping_reply[4] = buffer[4] + ping_reply[5] = buffer[5] + ping_reply[6] = buffer[6] + + fmt.Printf("->Command: %d %d PING_REQUEST\n", buffer[0], a) + binary.Write(c, binary.LittleEndian, ping_reply) + + // text message received + case RAW_TEXT: + // trade request + if strings.Split(string(buffer[5:]), " ")[1] == "wants" { + name := strings.Split(string(buffer[5:]), " ")[0] + //sendMessage(c, name, "Wanna trade? "+fmt.Sprint(is_in_trade)) + // if we have the actor ... send trade + // Oare ce dracu se intimpla daca nu exista actorul ... :D will see + + for key, value := range gActors { + // sendMessage(c, name, "Wanna trade? |"+value+"|") + if strings.Split(value, " ")[0] == name { + sendTrade(c, key) + isInTrade = 1 + break + } + } + } + + // normal PM message + if string(buffer[5:14]) == "[PM from " { + msg := buffer[14 : length-1] + dela := strings.Split(string(msg), ":") + + pm := string(strings.Join(dela[1:], ":")) + + processPmMessage(c, dela[0], pm) + break + } + + if strings.Split(string(buffer[5:]), " ")[1] == "aborted" { + isInTrade = 0 + resetTrade() + } + + fmt.Printf("Alt mesaj |%s|\n", buffer[5:]) + + // add new actor + case ADD_NEW_ACTOR: + actorName := make([]byte, 30) + actorId := int(buffer[3]) + 256*int(buffer[4]) + for i := 0; i < 30; i++ { + if buffer[i+20] != 0 { + actorName[i] = buffer[i+20] + } else { + break + } + } + act := strings.TrimRight(string(actorName), "\t \n\x00") + gActors[actorId] = act + fmt.Printf("NE Actor: Id: %d Name: |%s|\n", actorId, act) + + // new minute + case NEW_MINUTE: + break + + case GET_TRADE_OBJECT: + fmt.Printf("GET_TRADE_OBJECT ") + img := int(buffer[3]) + 256*int(buffer[4]) + qua := int(buffer[5]) + 256*int(buffer[6]) + 65535*(int(buffer[7])+256*int(buffer[8])) + pos := int(buffer[7+3]) + tipe := int(buffer[3+6]) + us := int(buffer[11]) + id := int(buffer[12]) + 256*int(buffer[13]) + if us == 0 { + fmt.Printf("Noi am pus %d %s \n", qua, items[id].Text) + myTrade[pos].Id = id + myTrade[pos].ImageId = img + myTrade[pos].Quantity += qua + myTrade[pos].Type = tipe + + } else { + fmt.Printf("El a pus %d %s \n", qua, items[id].Text) + hisTrade[pos].Id = id + hisTrade[pos].ImageId = img + hisTrade[pos].Quantity += qua + hisTrade[pos].Type = tipe + } + + for i := 0; i < length-3; i++ { + fmt.Printf("%2x ", buffer[i+3]) + } + fmt.Printf("\n") + + case REMOVE_TRADE_OBJECT: + fmt.Printf("REMOVE_TRADE_OBJECT ") + qua := int(buffer[3]) + 256*int(buffer[4]) + 65535*(int(buffer[5])+256*int(buffer[6])) + pos := int(buffer[3+4]) + us := int(buffer[3+5]) + if us == 0 { + fmt.Printf("Noi am retras %d %s \n", qua, items[myTrade[pos].Id].Text) + myTrade[pos].Quantity -= qua + } else { + fmt.Printf("El a retras %d %s \n", qua, items[hisTrade[pos].Id].Text) + hisTrade[pos].Quantity -= qua + } + + for i := 0; i < length-3; i++ { + fmt.Printf("%2x ", buffer[i+3]) + } + fmt.Printf("\n") + + case GET_TRADE_ACCEPT: + // fmt.Printf("GET_TRADE ACCEPT %02x %02x %02x %02x\n", buffer[0], buffer[1], buffer[2], buffer[3]) + if buffer[3] == 0 { + break + } + trade_value := 0.0 + for i := 0; i < 16; i++ { + trade_value += float64(myTrade[i].Quantity) * float64(items[myTrade[i].Id].Price) + } + + fmt.Printf("Total trade value %d\n", int(trade_value)) + for i := 0; i < 16; i++ { + //fmt.Printf("GET_TRADE_ACCEPT: index %d valoare = %d %d %d \n", i, his_trade[i].Id, his_trade[i].Quantity, int(trade_value)) + if hisTrade[i].Id == MONEY && int(hisTrade[i].Quantity) == int(trade_value) { + //fmt.Printf("GET_TRADE_ACCEPT: valoare = %d %d \n", his_trade[i].Quantity, int(trade_value)) + acceptTrade(c) + break + } + } + //fmt.Printf("GET_TRADE_ACCEPT: valoare = %d \n", int(trade_value)) + + case GET_TRADE_REJECT: + fmt.Printf("GET_TRADE REJECT\n") + case GET_TRADE_EXIT: + fmt.Printf("GET_TRADE EXIT\n") + + // get partial stat + case SEND_PARTIAL_STAT: + // fmt.Printf("get_partial_stat from server") + break + // add new enhanced actor + case ADD_NEW_ENHANCED_ACTOR: + actorName := make([]byte, 30) + actorId := int(buffer[3]) + 256*int(buffer[4]) + for i := 0; i < 30; i++ { + if buffer[i+31] != 0 { + actorName[i] = buffer[i+31] + } else { + break + } + } + act := strings.TrimRight(string(actorName), "\t \n\x00") + gActors[actorId] = act + fmt.Printf("Actor: Id: %d Name: |%s|\n", actorId, act) + + // remove actor + case REMOVE_ACTOR: + actorId := int(buffer[3]) + 256*int(buffer[4]) + delete(gActors, actorId) + fmt.Printf("Remove Actor Id: %d \n", actorId) + + // add actor command ( do nothing with this ) + case ADD_ACTOR_COMMAND: + break + + // everything else ( commands not implemented yet) + default: + a := int(buffer[1]) + 256*int(buffer[2]) + fmt.Printf("->Command: %d %d\n", buffer[0], a) + fmt.Printf("->: %s \n", buffer[3:]) + } +} + +func main() { + + isInTrade = 0 + resetTrade() + viper.SetConfigName("config") + viper.AddConfigPath(".") + viper.AutomaticEnv() + viper.SetConfigType("yml") + var configuration configurations + + populateItems() + + // Start adding web interface and handlers ( for now listen on 8080 . move it to config.yml in the end) + http.HandleFunc("/hello", webHello) + http.HandleFunc("/", webSlash) + http.HandleFunc("/inv", webShowInventory) + http.HandleFunc("/save", saveItemsAndPrices) + + http.HandleFunc("/test", func(w http.ResponseWriter, r *http.Request) { + tmpl := template.Must(template.ParseFiles("templates/test.tmpl")) + data := webPageData{ + PageTitle: "Items list and prices", + Ite: items, + } + tmpl.Execute(w, data) + }) + + go func() { + fmt.Println("listen on 8082") + log.Fatal(http.ListenAndServe(":8082", nil)) + }() + + if err := viper.ReadInConfig(); err != nil { + fmt.Printf("Error reading config file, %s", err) + } + + if err := viper.Unmarshal(&configuration); err != nil { + fmt.Printf("Unable to decode into struct, %s", err) + } + + c, err := net.Dial("tcp", configuration.Server.Ip+":"+fmt.Sprint(configuration.Server.Port)) + + if err != nil { + fmt.Println(err) + return + } + // initial inventory is empty + for i := 0; i < 36; i++ { + var v1 = new(invPos) + v1.Id = 0 + v1.Quantity = 0 + v1.Pos = 0 + inventar = append(inventar, *v1) + } + + binary.Write(c, binary.LittleEndian, sendLogin(configuration.Credential.User, configuration.Credential.Password)) + + sec := time.Now().Unix() + + // main loop for communicating with el server + + // One thread to rule them all :P ( and keep us connected) + go func() { + for { + if time.Now().Unix()-sec > 30 { + sendHeartBeat(c) + sec = time.Now().Unix() + fmt.Printf(time.Now().Format("2006-01-02 15:04:05") + "Avoid lagging out. Sending heartbeat pack\n") + } + time.Sleep(2 * time.Second) + } + }() + + for { + reply := make([]byte, 4096) + length, err := c.Read(reply) + + checkErr(err) + + //fmt.Printf("Received command: %d and length %d \n", reply[0], length) + //fmt.Printf("Hex dump: %s\n", hex.Dump(reply)) + + indexul := 0 + for ok := true; ok; ok = (indexul+int(reply[indexul+1])+256*int(reply[indexul+2]) < length) { + packLen := int(reply[indexul+1]) + 256*int(reply[indexul+2]) + if packLen >= 2 { + process := reply[indexul : indexul+packLen+2] + // fmt.Printf("->Command imbinata: %d %s\n", process[0], process[3:]) + processBuffer(c, process, len(process)) + + } + indexul = indexul + int(reply[indexul+1]) + 256*int(reply[indexul+2]) + 2 + } + } +} + +func webHello(w http.ResponseWriter, req *http.Request) { + fmt.Fprintf(w, "hello\n") + // testing modify variable from web + isInTrade++ +} + +func webSlash(w http.ResponseWriter, req *http.Request) { + tmpl := template.Must(template.ParseFiles("templates/home.tmpl")) + data := webPageData{ + PageTitle: "Home page", + Ite: nil, + } + tmpl.Execute(w, data) +} + +func webShowInventory(w http.ResponseWriter, req *http.Request) { + var inv_full []item + + // Create structure to be rendered in webpage + for i := 0; i < 36; i++ { + if inventar[i].Quantity != 0 { + for _, it := range items { + if inventar[i].Id == it.Id { + + n := item{Id: it.Id, Text: it.Text, Price: it.Price, Quantity: inventar[i].Quantity} + inv_full = append(inv_full, n) + } + } + } + } + + tmpl := template.Must(template.ParseFiles("templates/inv.tmpl")) + + tmpl.Execute(w, inv_full) +} + +func saveItemsAndPrices(w http.ResponseWriter, req *http.Request) { + // a test + // items[0].Price++ + + file, err := os.OpenFile("item_info.txt", os.O_CREATE|os.O_WRONLY, 0644) + if err != nil { + log.Fatal(err) + } + defer file.Close() + + datawriter := bufio.NewWriter(file) + + for _, data := range items { + _, _ = datawriter.WriteString(fmt.Sprintf("%d | %s | %.2f\n", data.Id, data.Text, data.Price)) + } + + datawriter.Flush() +} + +func resetTrade() { + fmt.Printf("Reset Trade\n") + + for i := 0; i < 16; i++ { + myTrade[i].Id = 0 + myTrade[i].ImageId = 0 + myTrade[i].Quantity = 0 + myTrade[i].Type = 0 + hisTrade[i].Id = 0 + hisTrade[i].ImageId = 0 + hisTrade[i].Quantity = 0 + hisTrade[i].Type = 0 + } +} diff --git a/sending.go b/sending.go new file mode 100644 index 0000000..9029993 --- /dev/null +++ b/sending.go @@ -0,0 +1,88 @@ +package main + +import ( + "encoding/binary" + "encoding/hex" + "fmt" + "net" +) + +/* login to El */ +func sendLogin(user string, password string) []byte { + s := user + " " + password + lungime := len(s) + 3 + b := make([]byte, lungime+2) + b[0] = 140 + b[1] = byte(lungime % 256) + b[2] = byte(lungime / 256) + copy(b[3:], s) + b[lungime+1] = 0 + return b +} + +func sendMessage(c net.Conn, user string, mesaj string) { + s := user + " " + mesaj + msg := make([]byte, len(s)+3) + msg[0] = 2 + msg[1] = byte((len(s) + 1) % 256) + msg[2] = byte((len(s) + 1) / 256) + copy(msg[3:], s) + binary.Write(c, binary.LittleEndian, msg) +} + +func sendHeartBeat(c net.Conn) { + hb := make([]byte, 3) + hb[0] = 14 + hb[1] = 1 + hb[2] = 0 + binary.Write(c, binary.LittleEndian, hb) +} + +/* // Not used right now +func sendMeMyActors(c net.Conn) { + msg := make([]byte, 3) + msg[0] = 8 + msg[1] = 1 + msg[2] = 0 + binary.Write(c, binary.LittleEndian, msg) +} +*/ +func sendTrade(c net.Conn, actor int) { + msg := make([]byte, 7) + msg[0] = 32 + msg[1] = 5 + msg[2] = 0 + msg[3] = byte(actor % 256) + msg[4] = byte(actor / 256) + msg[5] = 0 + msg[6] = 0 + fmt.Printf("Send trade hex dump: %s\n", hex.Dump(msg)) + binary.Write(c, binary.LittleEndian, msg) + +} + +func putItemOnTrade(c net.Conn, quantity int, inv_index int) { + + msg := make([]byte, 9) + msg[0] = PUT_OBJECT_ON_TRADE + msg[1] = 7 + msg[2] = 0 + msg[3] = 1 + msg[4] = byte(inventar[inv_index].Pos) + msg[5] = byte(quantity % 256) + msg[6] = byte(quantity / 256) + msg[7] = 0 + msg[8] = 0 + binary.Write(c, binary.LittleEndian, msg) +} + +func acceptTrade(c net.Conn) { + msg := make([]byte, 19) + msg[0] = ACCEPT_TRADE + msg[1] = 17 + msg[2] = 0 + for i := 0; i < 16; i++ { + msg[3+i] = 1 + } + binary.Write(c, binary.LittleEndian, msg) +} diff --git a/templates/home.tmpl b/templates/home.tmpl new file mode 100644 index 0000000..1f71312 --- /dev/null +++ b/templates/home.tmpl @@ -0,0 +1,4 @@ +

{{.PageTitle}}

+

This is a sample homepage for GoEl Bot

+
+ Test 2-1 diff --git a/templates/inv.tmpl b/templates/inv.tmpl new file mode 100644 index 0000000..3de4ecc --- /dev/null +++ b/templates/inv.tmpl @@ -0,0 +1,36 @@ + + + + + + +

Inventory

+We have the following in our inventory:
+
+ + + + + + + {{range .}} + + + + {{end}} +
Item nameQuantityPrice
{{.Text}}{{.Quantity}}{{.Price}}
+ + \ No newline at end of file diff --git a/templates/test.tmpl b/templates/test.tmpl new file mode 100644 index 0000000..9e0e2c4 --- /dev/null +++ b/templates/test.tmpl @@ -0,0 +1,38 @@ + + + + + + +

{{.PageTitle}}

+We have the following price list: +

+ + + + + + + {{range .Ite}} + + + + + + {{end}} +
IdItem namePrice
{{.Id}}{{.Text}}{{.Price}}
+ +