aveyo

build_chatwheel_sound_qol_dota_mod

Jun 24th, 2019
1,214
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Batch 170.28 KB | None | 0 0
  1. /* 2>nul || @title VPKMOD by AveYo v2019.06.24 - chatwheel sound qol request
  2. @echo off & pushd %~dp0
  3.  
  4. :: Export bundled Source?Replacement pair list used by VPKMOD tool to generate the modded DOTA 2 pak01_dir.vpk  
  5.  >Mod.lst cd.
  6. ::------------------------------------------------------------------------------------------------------------------------------
  7. :: soundboard
  8. >>Mod.lst echo/sounds/misc/soundboard/absolutely_perfect.vsnd_c?sounds/null.vsnd_c
  9. >>Mod.lst echo/sounds/misc/soundboard/all_dead.vsnd_c?sounds/null.vsnd_c
  10. >>Mod.lst echo/sounds/misc/soundboard/ay_ay_ay.vsnd_c?sounds/null.vsnd_c
  11. >>Mod.lst echo/sounds/misc/soundboard/bai_tuo_shei_qu.vsnd_c?sounds/null.vsnd_c
  12. >>Mod.lst echo/sounds/misc/soundboard/bockbock.vsnd_c?sounds/null.vsnd_c
  13. >>Mod.lst echo/sounds/misc/soundboard/bozhe_kak_eto_bolno.vsnd_c?sounds/null.vsnd_c
  14. >>Mod.lst echo/sounds/misc/soundboard/bozhe_ti_posmotri.vsnd_c?sounds/null.vsnd_c
  15. >>Mod.lst echo/sounds/misc/soundboard/brutal.vsnd_c?sounds/null.vsnd_c
  16. >>Mod.lst echo/sounds/misc/soundboard/ceeeb_start.vsnd_c?sounds/null.vsnd_c
  17. >>Mod.lst echo/sounds/misc/soundboard/ceeeb_stop.vsnd_c?sounds/null.vsnd_c
  18. >>Mod.lst echo/sounds/misc/soundboard/champagne_celebration.vsnd_c?sounds/null.vsnd_c
  19. >>Mod.lst echo/sounds/misc/soundboard/charge.vsnd_c?sounds/null.vsnd_c
  20. >>Mod.lst echo/sounds/misc/soundboard/crash_burn.vsnd_c?sounds/null.vsnd_c
  21. >>Mod.lst echo/sounds/misc/soundboard/cricket.vsnd_c?sounds/null.vsnd_c
  22. >>Mod.lst echo/sounds/misc/soundboard/crybaby.vsnd_c?sounds/null.vsnd_c
  23. >>Mod.lst echo/sounds/misc/soundboard/da_da_da_nyet.vsnd_c?sounds/null.vsnd_c
  24. >>Mod.lst echo/sounds/misc/soundboard/ding_ding_ding.vsnd_c?sounds/null.vsnd_c
  25. >>Mod.lst echo/sounds/misc/soundboard/disastah.vsnd_c?sounds/null.vsnd_c
  26. >>Mod.lst echo/sounds/misc/soundboard/drum_roll.vsnd_c?sounds/null.vsnd_c
  27. >>Mod.lst echo/sounds/misc/soundboard/duiyou_ne.vsnd_c?sounds/null.vsnd_c
  28. >>Mod.lst echo/sounds/misc/soundboard/easiest_money.vsnd_c?sounds/null.vsnd_c
  29. >>Mod.lst echo/sounds/misc/soundboard/echo_slama_jama.vsnd_c?sounds/null.vsnd_c
  30. >>Mod.lst echo/sounds/misc/soundboard/ehto_g_g.vsnd_c?sounds/null.vsnd_c
  31. >>Mod.lst echo/sounds/misc/soundboard/eto_ge_popayx_feeda.vsnd_c?sounds/null.vsnd_c
  32. >>Mod.lst echo/sounds/misc/soundboard/eto_nenormalno.vsnd_c?sounds/null.vsnd_c
  33. >>Mod.lst echo/sounds/misc/soundboard/eto_prosto_netchto.vsnd_c?sounds/null.vsnd_c
  34. >>Mod.lst echo/sounds/misc/soundboard/eto_sochno.vsnd_c?sounds/null.vsnd_c
  35. >>Mod.lst echo/sounds/misc/soundboard/eughahaha.vsnd_c?sounds/null.vsnd_c
  36. >>Mod.lst echo/sounds/misc/soundboard/frog.vsnd_c?sounds/null.vsnd_c
  37. >>Mod.lst echo/sounds/misc/soundboard/frostivus_magic.vsnd_c?sounds/null.vsnd_c
  38. >>Mod.lst echo/sounds/misc/soundboard/gan_ma_ne_xiong_di.vsnd_c?sounds/null.vsnd_c
  39. >>Mod.lst echo/sounds/misc/soundboard/gao_fu_shuai.vsnd_c?sounds/null.vsnd_c
  40. >>Mod.lst echo/sounds/misc/soundboard/glados_chat_01.vsnd_c?sounds/null.vsnd_c
  41. >>Mod.lst echo/sounds/misc/soundboard/glados_chat_04.vsnd_c?sounds/null.vsnd_c
  42. >>Mod.lst echo/sounds/misc/soundboard/glados_chat_07.vsnd_c?sounds/null.vsnd_c
  43. >>Mod.lst echo/sounds/misc/soundboard/glados_chat_21.vsnd_c?sounds/null.vsnd_c
  44. >>Mod.lst echo/sounds/misc/soundboard/goodness_gracious.vsnd_c?sounds/null.vsnd_c
  45. >>Mod.lst echo/sounds/misc/soundboard/greevil_laugh01.vsnd_c?sounds/null.vsnd_c
  46. >>Mod.lst echo/sounds/misc/soundboard/greevil_laugh02.vsnd_c?sounds/null.vsnd_c
  47. >>Mod.lst echo/sounds/misc/soundboard/greevil_laugh03.vsnd_c?sounds/null.vsnd_c
  48. >>Mod.lst echo/sounds/misc/soundboard/greevil_laugh04.vsnd_c?sounds/null.vsnd_c
  49. >>Mod.lst echo/sounds/misc/soundboard/greevil_laugh05.vsnd_c?sounds/null.vsnd_c
  50. >>Mod.lst echo/sounds/misc/soundboard/greevil_laugh06.vsnd_c?sounds/null.vsnd_c
  51. >>Mod.lst echo/sounds/misc/soundboard/greevil_laugh07.vsnd_c?sounds/null.vsnd_c
  52. >>Mod.lst echo/sounds/misc/soundboard/hallo_mama.vsnd_c?sounds/null.vsnd_c
  53. >>Mod.lst echo/sounds/misc/soundboard/headshake.vsnd_c?sounds/null.vsnd_c
  54. >>Mod.lst echo/sounds/misc/soundboard/hu_lu_wa.vsnd_c?sounds/null.vsnd_c
  55. >>Mod.lst echo/sounds/misc/soundboard/jia_you.vsnd_c?sounds/null.vsnd_c
  56. >>Mod.lst echo/sounds/misc/soundboard/kak_boyge_te_byechenya.vsnd_c?sounds/null.vsnd_c
  57. >>Mod.lst echo/sounds/misc/soundboard/kiss.vsnd_c?sounds/null.vsnd_c
  58. >>Mod.lst echo/sounds/misc/soundboard/kor_immortality.vsnd_c?sounds/null.vsnd_c
  59. >>Mod.lst echo/sounds/misc/soundboard/kor_million_dollar_house.vsnd_c?sounds/null.vsnd_c
  60. >>Mod.lst echo/sounds/misc/soundboard/kor_roshan.vsnd_c?sounds/null.vsnd_c
  61. >>Mod.lst echo/sounds/misc/soundboard/kor_scan.vsnd_c?sounds/null.vsnd_c
  62. >>Mod.lst echo/sounds/misc/soundboard/kor_yes_no.vsnd_c?sounds/null.vsnd_c
  63. >>Mod.lst echo/sounds/misc/soundboard/kor_yolo.vsnd_c?sounds/null.vsnd_c
  64. >>Mod.lst echo/sounds/misc/soundboard/krasavchik.vsnd_c?sounds/null.vsnd_c
  65. >>Mod.lst echo/sounds/misc/soundboard/kreasa_kreasa.vsnd_c?sounds/null.vsnd_c
  66. >>Mod.lst echo/sounds/misc/soundboard/lets_play.vsnd_c?sounds/null.vsnd_c
  67. >>Mod.lst echo/sounds/misc/soundboard/lian_dou_xiu_wai_la.vsnd_c?sounds/null.vsnd_c
  68. >>Mod.lst echo/sounds/misc/soundboard/liu_liu_liu.vsnd_c?sounds/null.vsnd_c
  69. >>Mod.lst echo/sounds/misc/soundboard/looking_spicy.vsnd_c?sounds/null.vsnd_c
  70. >>Mod.lst echo/sounds/misc/soundboard/nakupuuu.vsnd_c?sounds/null.vsnd_c
  71. >>Mod.lst echo/sounds/misc/soundboard/next_level.vsnd_c?sounds/null.vsnd_c
  72. >>Mod.lst echo/sounds/misc/soundboard/ni_qi_bu_qi.vsnd_c?sounds/null.vsnd_c
  73. >>Mod.lst echo/sounds/misc/soundboard/no_chill.vsnd_c?sounds/null.vsnd_c
  74. >>Mod.lst echo/sounds/misc/soundboard/ny_celebration.vsnd_c?sounds/null.vsnd_c
  75. >>Mod.lst echo/sounds/misc/soundboard/ny_drums.vsnd_c?sounds/null.vsnd_c
  76. >>Mod.lst echo/sounds/misc/soundboard/ny_gong.vsnd_c?sounds/null.vsnd_c
  77. >>Mod.lst echo/sounds/misc/soundboard/ny_pig_snort.vsnd_c?sounds/null.vsnd_c
  78. >>Mod.lst echo/sounds/misc/soundboard/oh_my_lord.vsnd_c?sounds/null.vsnd_c
  79. >>Mod.lst echo/sounds/misc/soundboard/ow.vsnd_c?sounds/null.vsnd_c
  80. >>Mod.lst echo/sounds/misc/soundboard/oy_oy_bezhat.vsnd_c?sounds/null.vsnd_c
  81. >>Mod.lst echo/sounds/misc/soundboard/oy_oy_oy.vsnd_c?sounds/null.vsnd_c
  82. >>Mod.lst echo/sounds/misc/soundboard/party_horn.vsnd_c?sounds/null.vsnd_c
  83. >>Mod.lst echo/sounds/misc/soundboard/patience.vsnd_c?sounds/null.vsnd_c
  84. >>Mod.lst echo/sounds/misc/soundboard/piao_liang.vsnd_c?sounds/null.vsnd_c
  85. >>Mod.lst echo/sounds/misc/soundboard/playing_to_win.vsnd_c?sounds/null.vsnd_c
  86. >>Mod.lst echo/sounds/misc/soundboard/po_liang_lu.vsnd_c?sounds/null.vsnd_c
  87. >>Mod.lst echo/sounds/misc/soundboard/rimshot.vsnd_c?sounds/null.vsnd_c
  88. >>Mod.lst echo/sounds/misc/soundboard/sad_bone.vsnd_c?sounds/null.vsnd_c
  89. >>Mod.lst echo/sounds/misc/soundboard/sleighbells.vsnd_c?sounds/null.vsnd_c
  90. >>Mod.lst echo/sounds/misc/soundboard/snore.vsnd_c?sounds/null.vsnd_c
  91. >>Mod.lst echo/sounds/misc/soundboard/sproing.vsnd_c?sounds/null.vsnd_c
  92. >>Mod.lst echo/sounds/misc/soundboard/ta_daaaa.vsnd_c?sounds/null.vsnd_c
  93. >>Mod.lst echo/sounds/misc/soundboard/that_was_questionable.vsnd_c?sounds/null.vsnd_c
  94. >>Mod.lst echo/sounds/misc/soundboard/ti9_crowd_groan.vsnd_c?sounds/null.vsnd_c
  95. >>Mod.lst echo/sounds/misc/soundboard/ti9_head_bonk.vsnd_c?sounds/null.vsnd_c
  96. >>Mod.lst echo/sounds/misc/soundboard/ti9_kooka_laugh.vsnd_c?sounds/null.vsnd_c
  97. >>Mod.lst echo/sounds/misc/soundboard/ti9_monkey_biz.vsnd_c?sounds/null.vsnd_c
  98. >>Mod.lst echo/sounds/misc/soundboard/ti9_orangutan_kiss.vsnd_c?sounds/null.vsnd_c
  99. >>Mod.lst echo/sounds/misc/soundboard/ti9_record_scratch.vsnd_c?sounds/null.vsnd_c
  100. >>Mod.lst echo/sounds/misc/soundboard/ti9_skeeter.vsnd_c?sounds/null.vsnd_c
  101. >>Mod.lst echo/sounds/misc/soundboard/ti9_ta_da.vsnd_c?sounds/null.vsnd_c
  102. >>Mod.lst echo/sounds/misc/soundboard/tian_huo.vsnd_c?sounds/null.vsnd_c
  103. >>Mod.lst echo/sounds/misc/soundboard/wan_bu_liao_la.vsnd_c?sounds/null.vsnd_c
  104. >>Mod.lst echo/sounds/misc/soundboard/what_just_happened.vsnd_c?sounds/null.vsnd_c
  105. >>Mod.lst echo/sounds/misc/soundboard/whats_cooking.vsnd_c?sounds/null.vsnd_c
  106. >>Mod.lst echo/sounds/misc/soundboard/wot_eto_bru.vsnd_c?sounds/null.vsnd_c
  107. >>Mod.lst echo/sounds/misc/soundboard/wow.vsnd_c?sounds/null.vsnd_c
  108. >>Mod.lst echo/sounds/misc/soundboard/yahoo.vsnd_c?sounds/null.vsnd_c
  109. >>Mod.lst echo/sounds/misc/soundboard/youre_a_hero.vsnd_c?sounds/null.vsnd_c
  110. >>Mod.lst echo/sounds/misc/soundboard/zai_jian_le_bao_bei.vsnd_c?sounds/null.vsnd_c
  111. >>Mod.lst echo/sounds/misc/soundboard/zhil_do_konsta.vsnd_c?sounds/null.vsnd_c
  112. >>Mod.lst echo/sounds/misc/soundboard/zou_hao_bu_song.vsnd_c?sounds/null.vsnd_c
  113. :: misc
  114. >>Mod.lst echo/sounds/ambient/newyear/firecrackers01.vsnd_c?sounds/null.vsnd_c
  115. >>Mod.lst echo/sounds/ambient/newyear/firecrackers02.vsnd_c?sounds/null.vsnd_c
  116. >>Mod.lst echo/sounds/ambient/newyear/firecrackers03.vsnd_c?sounds/null.vsnd_c
  117. >>Mod.lst echo/sounds/ambient/newyear/firecrackers04.vsnd_c?sounds/null.vsnd_c
  118. >>Mod.lst echo/sounds/ambient/newyear/firecrackers05.vsnd_c?sounds/null.vsnd_c
  119. >>Mod.lst echo/sounds/ambient/newyear/firecrackers06.vsnd_c?sounds/null.vsnd_c
  120. >>Mod.lst echo/sounds/ambient/newyear/firecrackers07.vsnd_c?sounds/null.vsnd_c
  121. >>Mod.lst echo/sounds/ambient/newyear/firecrackers08.vsnd_c?sounds/null.vsnd_c
  122. >>Mod.lst echo/sounds/ambient/newyear/firecrackers09.vsnd_c?sounds/null.vsnd_c
  123. >>Mod.lst echo/sounds/ambient/newyear/fountain_firework.vsnd_c?sounds/null.vsnd_c
  124. >>Mod.lst echo/sounds/ambient/newyear/rocket_explode01.vsnd_c?sounds/null.vsnd_c
  125. >>Mod.lst echo/sounds/ambient/newyear/rocket_explode02.vsnd_c?sounds/null.vsnd_c
  126. >>Mod.lst echo/sounds/ambient/newyear/rocket_launch01.vsnd_c?sounds/null.vsnd_c
  127. >>Mod.lst echo/sounds/ambient/newyear/rocket_launch02.vsnd_c?sounds/null.vsnd_c
  128. >>Mod.lst echo/sounds/ambient/newyear/rocket_launch03.vsnd_c?sounds/null.vsnd_c
  129. >>Mod.lst echo/sounds/items/river_paint.vsnd_c?sounds/null.vsnd_c
  130. >>Mod.lst echo/sounds/misc/crowd_lv_01.vsnd_c?sounds/null.vsnd_c
  131. >>Mod.lst echo/sounds/misc/crowd_lv_02.vsnd_c?sounds/null.vsnd_c
  132. >>Mod.lst echo/sounds/misc/crowd_lv_03.vsnd_c?sounds/null.vsnd_c
  133. >>Mod.lst echo/sounds/misc/crowd_lv_04.vsnd_c?sounds/null.vsnd_c
  134. >>Mod.lst echo/sounds/misc/drum_hit01.vsnd_c?sounds/null.vsnd_c
  135. >>Mod.lst echo/sounds/misc/drum_hit02.vsnd_c?sounds/null.vsnd_c
  136. >>Mod.lst echo/sounds/misc/drum_hit03.vsnd_c?sounds/null.vsnd_c
  137. >>Mod.lst echo/sounds/misc/drum_hit04.vsnd_c?sounds/null.vsnd_c
  138. >>Mod.lst echo/sounds/misc/drum_spawn_lp.vsnd_c?sounds/null.vsnd_c
  139. >>Mod.lst echo/sounds/misc/happy_birthday.vsnd_c?sounds/null.vsnd_c
  140. >>Mod.lst echo/sounds/misc/hi_five_cast.vsnd_c?sounds/null.vsnd_c
  141. >>Mod.lst echo/sounds/misc/hi_five_fail.vsnd_c?sounds/null.vsnd_c
  142. >>Mod.lst echo/sounds/misc/hi_five_impact.vsnd_c?sounds/null.vsnd_c
  143. >>Mod.lst echo/sounds/misc/spraypaint.vsnd_c?sounds/null.vsnd_c
  144. >>Mod.lst echo/sounds/misc/ti9_balloon_impact.vsnd_c?sounds/null.vsnd_c
  145. >>Mod.lst echo/sounds/misc/ti9_balloon_pop.vsnd_c?sounds/null.vsnd_c
  146. >>Mod.lst echo/sounds/misc/ti9_balloon_spawn.vsnd_c?sounds/null.vsnd_c
  147. >>Mod.lst echo/sounds/misc/ti9_found_spiders.vsnd_c?sounds/null.vsnd_c
  148. >>Mod.lst echo/sounds/misc/ti9_monkey_happy.vsnd_c?sounds/null.vsnd_c
  149. >>Mod.lst echo/sounds/misc/ti9_monkey_impact.vsnd_c?sounds/null.vsnd_c
  150. >>Mod.lst echo/sounds/misc/ti9_monkey_mad.vsnd_c?sounds/null.vsnd_c
  151. >>Mod.lst echo/sounds/misc/ti9_monkey_spawn.vsnd_c?sounds/null.vsnd_c
  152. >>Mod.lst echo/sounds/misc/ti9_monkey_throw.vsnd_c?sounds/null.vsnd_c
  153. >>Mod.lst echo/sounds/physics/movement/hero/juggernaut/haste.vsnd_c?sounds/null.vsnd_c
  154. :: taunts
  155. >>Mod.lst echo/sounds/weapons/hero/ancient_apparition/taunt_ti9.vsnd_c?sounds/null.vsnd_c
  156. >>Mod.lst echo/sounds/weapons/hero/antimage/taunt_ti9.vsnd_c?sounds/null.vsnd_c
  157. >>Mod.lst echo/sounds/weapons/hero/beastmaster/taunt_ti9.vsnd_c?sounds/null.vsnd_c
  158. >>Mod.lst echo/sounds/weapons/hero/brewmaster/taunt_keg_roll.vsnd_c?sounds/null.vsnd_c
  159. >>Mod.lst echo/sounds/weapons/hero/centaur/taunt.vsnd_c?sounds/null.vsnd_c
  160. >>Mod.lst echo/sounds/weapons/hero/chaos_knight/taunt_ti9.vsnd_c?sounds/null.vsnd_c
  161. >>Mod.lst echo/sounds/weapons/hero/clinkz/taunt.vsnd_c?sounds/null.vsnd_c
  162. >>Mod.lst echo/sounds/weapons/hero/crystal_maiden/snowman_taunt.vsnd_c?sounds/null.vsnd_c
  163. >>Mod.lst echo/sounds/weapons/hero/death_prophet/ti8_taunt.vsnd_c?sounds/null.vsnd_c
  164. >>Mod.lst echo/sounds/weapons/hero/earth_spirit/taunt_ti9.vsnd_c?sounds/null.vsnd_c
  165. >>Mod.lst echo/sounds/weapons/hero/enigma/ti8_taunt.vsnd_c?sounds/null.vsnd_c
  166. >>Mod.lst echo/sounds/weapons/hero/furion/taunt_rain.vsnd_c?sounds/null.vsnd_c
  167. >>Mod.lst echo/sounds/weapons/hero/grimstroke/taunt_ti9.vsnd_c?sounds/null.vsnd_c
  168. >>Mod.lst echo/sounds/weapons/hero/gyrocopter/taunt_barrel_roll.vsnd_c?sounds/null.vsnd_c
  169. >>Mod.lst echo/sounds/weapons/hero/jakiro/taunt.vsnd_c?sounds/null.vsnd_c
  170. >>Mod.lst echo/sounds/weapons/hero/kunkka/taunt_jig.vsnd_c?sounds/null.vsnd_c
  171. >>Mod.lst echo/sounds/weapons/hero/legion_commander/taunt_ti9.vsnd_c?sounds/null.vsnd_c
  172. >>Mod.lst echo/sounds/weapons/hero/leshrac/taunt_party_on.vsnd_c?sounds/null.vsnd_c
  173. >>Mod.lst echo/sounds/weapons/hero/lich/taunt_ti9.vsnd_c?sounds/null.vsnd_c
  174. >>Mod.lst echo/sounds/weapons/hero/lifestealer/taunt.vsnd_c?sounds/null.vsnd_c
  175. >>Mod.lst echo/sounds/weapons/hero/lion/taunt_to_hell.vsnd_c?sounds/null.vsnd_c
  176. >>Mod.lst echo/sounds/weapons/hero/luna/taunt_catdance.vsnd_c?sounds/null.vsnd_c
  177. >>Mod.lst echo/sounds/weapons/hero/luna/taunt_land.vsnd_c?sounds/null.vsnd_c
  178. >>Mod.lst echo/sounds/weapons/hero/luna/taunt_leap.vsnd_c?sounds/null.vsnd_c
  179. >>Mod.lst echo/sounds/weapons/hero/mirana/ti8_taunt.vsnd_c?sounds/null.vsnd_c
  180. >>Mod.lst echo/sounds/weapons/hero/monkey_king/taunt_boing.vsnd_c?sounds/null.vsnd_c
  181. >>Mod.lst echo/sounds/weapons/hero/nevermore/taunt_swagger.vsnd_c?sounds/null.vsnd_c
  182. >>Mod.lst echo/sounds/weapons/hero/omniknight/ti8_taunt.vsnd_c?sounds/null.vsnd_c
  183. >>Mod.lst echo/sounds/weapons/hero/pangolier/taunt_kartwheel.vsnd_c?sounds/null.vsnd_c
  184. >>Mod.lst echo/sounds/weapons/hero/phantom_assassin/ti8_taunt.vsnd_c?sounds/null.vsnd_c
  185. >>Mod.lst echo/sounds/weapons/hero/phoenix/ti8_taunt.vsnd_c?sounds/null.vsnd_c
  186. >>Mod.lst echo/sounds/weapons/hero/phoenix/ti8_taunt_rare.vsnd_c?sounds/null.vsnd_c
  187. >>Mod.lst echo/sounds/weapons/hero/pudge/arc_taunt.vsnd_c?sounds/null.vsnd_c
  188. >>Mod.lst echo/sounds/weapons/hero/pudge/arc_taunt_finale.vsnd_c?sounds/null.vsnd_c
  189. >>Mod.lst echo/sounds/weapons/hero/pugna/ti8_taunt.vsnd_c?sounds/null.vsnd_c
  190. >>Mod.lst echo/sounds/weapons/hero/rattletrap/taunt_robot.vsnd_c?sounds/null.vsnd_c
  191. >>Mod.lst echo/sounds/weapons/hero/riki/ti8_taunt.vsnd_c?sounds/null.vsnd_c
  192. >>Mod.lst echo/sounds/weapons/hero/rubick/taunt_giddyup.vsnd_c?sounds/null.vsnd_c
  193. >>Mod.lst echo/sounds/weapons/hero/shadowshaman/taunt_ti9.vsnd_c?sounds/null.vsnd_c
  194. >>Mod.lst echo/sounds/weapons/hero/skeleton_king/ti8_taunt.vsnd_c?sounds/null.vsnd_c
  195. >>Mod.lst echo/sounds/weapons/hero/skywrath/taunt_chicken.vsnd_c?sounds/null.vsnd_c
  196. >>Mod.lst echo/sounds/weapons/hero/skywrath/taunt_clap.vsnd_c?sounds/null.vsnd_c
  197. >>Mod.lst echo/sounds/weapons/hero/slardar/taunt_ti9.vsnd_c?sounds/null.vsnd_c
  198. >>Mod.lst echo/sounds/weapons/hero/slark/taunt_flip.vsnd_c?sounds/null.vsnd_c
  199. >>Mod.lst echo/sounds/weapons/hero/spirit_breaker/raging_taunt.vsnd_c?sounds/null.vsnd_c
  200. >>Mod.lst echo/sounds/weapons/hero/storm_spirit/taunt_gong.vsnd_c?sounds/null.vsnd_c
  201. >>Mod.lst echo/sounds/weapons/hero/tidehunter/taunt_backstroke.vsnd_c?sounds/null.vsnd_c
  202. >>Mod.lst echo/sounds/weapons/hero/tiny/taunt_ti9.vsnd_c?sounds/null.vsnd_c
  203. >>Mod.lst echo/sounds/weapons/hero/troll_warlord/taunt_trollgroove.vsnd_c?sounds/null.vsnd_c
  204. >>Mod.lst echo/sounds/weapons/hero/tusk/ti8_taunt.vsnd_c?sounds/null.vsnd_c
  205. >>Mod.lst echo/sounds/weapons/hero/ursa/taunt_ti9.vsnd_c?sounds/null.vsnd_c
  206. >>Mod.lst echo/sounds/weapons/hero/weaver/ti8_taunt.vsnd_c?sounds/null.vsnd_c
  207. >>Mod.lst echo/sounds/weapons/hero/windrunner/taunt_kiss.vsnd_c?sounds/null.vsnd_c
  208. >>Mod.lst echo/sounds/weapons/hero/zuus/taunt_jump.vsnd_c?sounds/null.vsnd_c
  209. :: dota+ hero chatwheel
  210. >>Mod.lst echo/sounds/vo/abaddon/abad_cast_01.vsnd_c?sounds/null.vsnd_c
  211. >>Mod.lst echo/sounds/vo/abaddon/abad_death_03.vsnd_c?sounds/null.vsnd_c
  212. >>Mod.lst echo/sounds/vo/abaddon/abad_deny_06.vsnd_c?sounds/null.vsnd_c
  213. >>Mod.lst echo/sounds/vo/abaddon/abad_failure_01.vsnd_c?sounds/null.vsnd_c
  214. >>Mod.lst echo/sounds/vo/abaddon/abad_kill_05.vsnd_c?sounds/null.vsnd_c
  215. >>Mod.lst echo/sounds/vo/abaddon/abad_lasthit_06.vsnd_c?sounds/null.vsnd_c
  216. >>Mod.lst echo/sounds/vo/abaddon/abad_laugh_03.vsnd_c?sounds/null.vsnd_c
  217. >>Mod.lst echo/sounds/vo/abyssal_underlord/abys_darkrift_03.vsnd_c?sounds/null.vsnd_c
  218. >>Mod.lst echo/sounds/vo/abyssal_underlord/abys_failure_01.vsnd_c?sounds/null.vsnd_c
  219. >>Mod.lst echo/sounds/vo/abyssal_underlord/abys_kill_13.vsnd_c?sounds/null.vsnd_c
  220. >>Mod.lst echo/sounds/vo/abyssal_underlord/abys_laugh_02.vsnd_c?sounds/null.vsnd_c
  221. >>Mod.lst echo/sounds/vo/abyssal_underlord/abys_move_02.vsnd_c?sounds/null.vsnd_c
  222. >>Mod.lst echo/sounds/vo/abyssal_underlord/abys_move_12.vsnd_c?sounds/null.vsnd_c
  223. >>Mod.lst echo/sounds/vo/abyssal_underlord/abys_rival_01.vsnd_c?sounds/null.vsnd_c
  224. >>Mod.lst echo/sounds/vo/abyssal_underlord/abys_thanks_03.vsnd_c?sounds/null.vsnd_c
  225. >>Mod.lst echo/sounds/vo/alchemist/alch_ability_failure_02.vsnd_c?sounds/null.vsnd_c
  226. >>Mod.lst echo/sounds/vo/alchemist/alch_ability_rage_14.vsnd_c?sounds/null.vsnd_c
  227. >>Mod.lst echo/sounds/vo/alchemist/alch_ability_rage_25.vsnd_c?sounds/null.vsnd_c
  228. >>Mod.lst echo/sounds/vo/alchemist/alch_kill_02.vsnd_c?sounds/null.vsnd_c
  229. >>Mod.lst echo/sounds/vo/alchemist/alch_kill_08.vsnd_c?sounds/null.vsnd_c
  230. >>Mod.lst echo/sounds/vo/alchemist/alch_laugh_07.vsnd_c?sounds/null.vsnd_c
  231. >>Mod.lst echo/sounds/vo/alchemist/alch_respawn_06.vsnd_c?sounds/null.vsnd_c
  232. >>Mod.lst echo/sounds/vo/alchemist/alch_win_03.vsnd_c?sounds/null.vsnd_c
  233. >>Mod.lst echo/sounds/vo/ancient_apparition/appa_attack_05.vsnd_c?sounds/null.vsnd_c
  234. >>Mod.lst echo/sounds/vo/ancient_apparition/appa_battlebegins_01.vsnd_c?sounds/null.vsnd_c
  235. >>Mod.lst echo/sounds/vo/ancient_apparition/appa_death_13.vsnd_c?sounds/null.vsnd_c
  236. >>Mod.lst echo/sounds/vo/ancient_apparition/appa_kill_03.vsnd_c?sounds/null.vsnd_c
  237. >>Mod.lst echo/sounds/vo/ancient_apparition/appa_lasthit_04.vsnd_c?sounds/null.vsnd_c
  238. >>Mod.lst echo/sounds/vo/ancient_apparition/appa_laugh_01.vsnd_c?sounds/null.vsnd_c
  239. >>Mod.lst echo/sounds/vo/ancient_apparition/appa_purch_02.vsnd_c?sounds/null.vsnd_c
  240. >>Mod.lst echo/sounds/vo/ancient_apparition/appa_spawn_03.vsnd_c?sounds/null.vsnd_c
  241. >>Mod.lst echo/sounds/vo/antimage/anti_ability_failure_02.vsnd_c?sounds/null.vsnd_c
  242. >>Mod.lst echo/sounds/vo/antimage/anti_deny_12.vsnd_c?sounds/null.vsnd_c
  243. >>Mod.lst echo/sounds/vo/antimage/anti_kill_08.vsnd_c?sounds/null.vsnd_c
  244. >>Mod.lst echo/sounds/vo/antimage/anti_kill_13.vsnd_c?sounds/null.vsnd_c
  245. >>Mod.lst echo/sounds/vo/antimage/anti_laugh_04.vsnd_c?sounds/null.vsnd_c
  246. >>Mod.lst echo/sounds/vo/antimage/anti_laugh_05.vsnd_c?sounds/null.vsnd_c
  247. >>Mod.lst echo/sounds/vo/antimage/anti_magicuser_01.vsnd_c?sounds/null.vsnd_c
  248. >>Mod.lst echo/sounds/vo/antimage/anti_rare_02.vsnd_c?sounds/null.vsnd_c
  249. >>Mod.lst echo/sounds/vo/antimage/anti_respawn_09.vsnd_c?sounds/null.vsnd_c
  250. >>Mod.lst echo/sounds/vo/arc_warden/arcwar_death_02.vsnd_c?sounds/null.vsnd_c
  251. >>Mod.lst echo/sounds/vo/arc_warden/arcwar_deny_10.vsnd_c?sounds/null.vsnd_c
  252. >>Mod.lst echo/sounds/vo/arc_warden/arcwar_failure_03.vsnd_c?sounds/null.vsnd_c
  253. >>Mod.lst echo/sounds/vo/arc_warden/arcwar_flux_08.vsnd_c?sounds/null.vsnd_c
  254. >>Mod.lst echo/sounds/vo/arc_warden/arcwar_laugh_06.vsnd_c?sounds/null.vsnd_c
  255. >>Mod.lst echo/sounds/vo/arc_warden/arcwar_rival_05.vsnd_c?sounds/null.vsnd_c
  256. >>Mod.lst echo/sounds/vo/arc_warden/arcwar_tempest_double_killed_04.vsnd_c?sounds/null.vsnd_c
  257. >>Mod.lst echo/sounds/vo/arc_warden/arcwar_thanks_02.vsnd_c?sounds/null.vsnd_c
  258. >>Mod.lst echo/sounds/vo/axe/axe_ability_failure_01.vsnd_c?sounds/null.vsnd_c
  259. >>Mod.lst echo/sounds/vo/axe/axe_deny_08.vsnd_c?sounds/null.vsnd_c
  260. >>Mod.lst echo/sounds/vo/axe/axe_deny_16.vsnd_c?sounds/null.vsnd_c
  261. >>Mod.lst echo/sounds/vo/axe/axe_drop_medium_01.vsnd_c?sounds/null.vsnd_c
  262. >>Mod.lst echo/sounds/vo/axe/axe_kill_06.vsnd_c?sounds/null.vsnd_c
  263. >>Mod.lst echo/sounds/vo/axe/axe_laugh_03.vsnd_c?sounds/null.vsnd_c
  264. >>Mod.lst echo/sounds/vo/axe/axe_rival_01.vsnd_c?sounds/null.vsnd_c
  265. >>Mod.lst echo/sounds/vo/axe/axe_rival_22.vsnd_c?sounds/null.vsnd_c
  266. >>Mod.lst echo/sounds/vo/bane/bane_ability_enfeeble_05.vsnd_c?sounds/null.vsnd_c
  267. >>Mod.lst echo/sounds/vo/bane/bane_battlebegins_01.vsnd_c?sounds/null.vsnd_c
  268. >>Mod.lst echo/sounds/vo/bane/bane_kill_13.vsnd_c?sounds/null.vsnd_c
  269. >>Mod.lst echo/sounds/vo/bane/bane_lasthit_11.vsnd_c?sounds/null.vsnd_c
  270. >>Mod.lst echo/sounds/vo/bane/bane_level_06.vsnd_c?sounds/null.vsnd_c
  271. >>Mod.lst echo/sounds/vo/bane/bane_purch_04.vsnd_c?sounds/null.vsnd_c
  272. >>Mod.lst echo/sounds/vo/bane/bane_spawn_02.vsnd_c?sounds/null.vsnd_c
  273. >>Mod.lst echo/sounds/vo/bane/bane_thanks_02.vsnd_c?sounds/null.vsnd_c
  274. >>Mod.lst echo/sounds/vo/batrider/bat_ability_failure_03.vsnd_c?sounds/null.vsnd_c
  275. >>Mod.lst echo/sounds/vo/batrider/bat_ability_napalm_06.vsnd_c?sounds/null.vsnd_c
  276. >>Mod.lst echo/sounds/vo/batrider/bat_battlebegins_02.vsnd_c?sounds/null.vsnd_c
  277. >>Mod.lst echo/sounds/vo/batrider/bat_cast_01.vsnd_c?sounds/null.vsnd_c
  278. >>Mod.lst echo/sounds/vo/batrider/bat_kill_04.vsnd_c?sounds/null.vsnd_c
  279. >>Mod.lst echo/sounds/vo/batrider/bat_kill_10.vsnd_c?sounds/null.vsnd_c
  280. >>Mod.lst echo/sounds/vo/batrider/bat_laugh_02.vsnd_c?sounds/null.vsnd_c
  281. >>Mod.lst echo/sounds/vo/batrider/bat_win_03.vsnd_c?sounds/null.vsnd_c
  282. >>Mod.lst echo/sounds/vo/beastmaster/beas_ability_animalsound_01.vsnd_c?sounds/null.vsnd_c
  283. >>Mod.lst echo/sounds/vo/beastmaster/beas_ability_animalsound_02.vsnd_c?sounds/null.vsnd_c
  284. >>Mod.lst echo/sounds/vo/beastmaster/beas_ability_summonsboar_04.vsnd_c?sounds/null.vsnd_c
  285. >>Mod.lst echo/sounds/vo/beastmaster/beas_buysnecro_07.vsnd_c?sounds/null.vsnd_c
  286. >>Mod.lst echo/sounds/vo/beastmaster/beas_immort_02.vsnd_c?sounds/null.vsnd_c
  287. >>Mod.lst echo/sounds/vo/beastmaster/beas_kill_07.vsnd_c?sounds/null.vsnd_c
  288. >>Mod.lst echo/sounds/vo/beastmaster/beas_laugh_09.vsnd_c?sounds/null.vsnd_c
  289. >>Mod.lst echo/sounds/vo/beastmaster/beas_rare_01.vsnd_c?sounds/null.vsnd_c
  290. >>Mod.lst echo/sounds/vo/bloodseeker/blod_ability_rupture_02.vsnd_c?sounds/null.vsnd_c
  291. >>Mod.lst echo/sounds/vo/bloodseeker/blod_ability_rupture_04.vsnd_c?sounds/null.vsnd_c
  292. >>Mod.lst echo/sounds/vo/bloodseeker/blod_begin_01.vsnd_c?sounds/null.vsnd_c
  293. >>Mod.lst echo/sounds/vo/bloodseeker/blod_deny_09.vsnd_c?sounds/null.vsnd_c
  294. >>Mod.lst echo/sounds/vo/bloodseeker/blod_drop_rare_01.vsnd_c?sounds/null.vsnd_c
  295. >>Mod.lst echo/sounds/vo/bloodseeker/blod_kill_10.vsnd_c?sounds/null.vsnd_c
  296. >>Mod.lst echo/sounds/vo/bloodseeker/blod_laugh_02.vsnd_c?sounds/null.vsnd_c
  297. >>Mod.lst echo/sounds/vo/bloodseeker/blod_respawn_10.vsnd_c?sounds/null.vsnd_c
  298. >>Mod.lst echo/sounds/vo/bounty_hunter/bount_ability_track_02.vsnd_c?sounds/null.vsnd_c
  299. >>Mod.lst echo/sounds/vo/bounty_hunter/bount_ability_track_kill_02.vsnd_c?sounds/null.vsnd_c
  300. >>Mod.lst echo/sounds/vo/bounty_hunter/bount_ability_wind_attack_04.vsnd_c?sounds/null.vsnd_c
  301. >>Mod.lst echo/sounds/vo/bounty_hunter/bount_bottle_01.vsnd_c?sounds/null.vsnd_c
  302. >>Mod.lst echo/sounds/vo/bounty_hunter/bount_kill_14.vsnd_c?sounds/null.vsnd_c
  303. >>Mod.lst echo/sounds/vo/bounty_hunter/bount_laugh_07.vsnd_c?sounds/null.vsnd_c
  304. >>Mod.lst echo/sounds/vo/bounty_hunter/bount_level_09.vsnd_c?sounds/null.vsnd_c
  305. >>Mod.lst echo/sounds/vo/bounty_hunter/bount_rival_15.vsnd_c?sounds/null.vsnd_c
  306. >>Mod.lst echo/sounds/vo/brewmaster/brew_ability_failure_03.vsnd_c?sounds/null.vsnd_c
  307. >>Mod.lst echo/sounds/vo/brewmaster/brew_ability_primalsplit_11.vsnd_c?sounds/null.vsnd_c
  308. >>Mod.lst echo/sounds/vo/brewmaster/brew_kill_03.vsnd_c?sounds/null.vsnd_c
  309. >>Mod.lst echo/sounds/vo/brewmaster/brew_laugh_07.vsnd_c?sounds/null.vsnd_c
  310. >>Mod.lst echo/sounds/vo/brewmaster/brew_level_07.vsnd_c?sounds/null.vsnd_c
  311. >>Mod.lst echo/sounds/vo/brewmaster/brew_level_08.vsnd_c?sounds/null.vsnd_c
  312. >>Mod.lst echo/sounds/vo/brewmaster/brew_respawn_01.vsnd_c?sounds/null.vsnd_c
  313. >>Mod.lst echo/sounds/vo/brewmaster/brew_spawn_05.vsnd_c?sounds/null.vsnd_c
  314. >>Mod.lst echo/sounds/vo/bristleback/bristle_attack_22.vsnd_c?sounds/null.vsnd_c
  315. >>Mod.lst echo/sounds/vo/bristleback/bristle_deny_08.vsnd_c?sounds/null.vsnd_c
  316. >>Mod.lst echo/sounds/vo/bristleback/bristle_happy_04.vsnd_c?sounds/null.vsnd_c
  317. >>Mod.lst echo/sounds/vo/bristleback/bristle_kill_03.vsnd_c?sounds/null.vsnd_c
  318. >>Mod.lst echo/sounds/vo/bristleback/bristle_laugh_02.vsnd_c?sounds/null.vsnd_c
  319. >>Mod.lst echo/sounds/vo/bristleback/bristle_levelup_04.vsnd_c?sounds/null.vsnd_c
  320. >>Mod.lst echo/sounds/vo/bristleback/bristle_rival_31.vsnd_c?sounds/null.vsnd_c
  321. >>Mod.lst echo/sounds/vo/bristleback/bristle_spawn_03.vsnd_c?sounds/null.vsnd_c
  322. >>Mod.lst echo/sounds/vo/broodmother/broo_ability_spawn_05.vsnd_c?sounds/null.vsnd_c
  323. >>Mod.lst echo/sounds/vo/broodmother/broo_ability_spawn_06.vsnd_c?sounds/null.vsnd_c
  324. >>Mod.lst echo/sounds/vo/broodmother/broo_ability_spawn_10.vsnd_c?sounds/null.vsnd_c
  325. >>Mod.lst echo/sounds/vo/broodmother/broo_invis_02.vsnd_c?sounds/null.vsnd_c
  326. >>Mod.lst echo/sounds/vo/broodmother/broo_kill_01.vsnd_c?sounds/null.vsnd_c
  327. >>Mod.lst echo/sounds/vo/broodmother/broo_kill_16.vsnd_c?sounds/null.vsnd_c
  328. >>Mod.lst echo/sounds/vo/broodmother/broo_kill_17.vsnd_c?sounds/null.vsnd_c
  329. >>Mod.lst echo/sounds/vo/broodmother/broo_laugh_06.vsnd_c?sounds/null.vsnd_c
  330. >>Mod.lst echo/sounds/vo/centaur/cent_failure_03.vsnd_c?sounds/null.vsnd_c
  331. >>Mod.lst echo/sounds/vo/centaur/cent_happy_02.vsnd_c?sounds/null.vsnd_c
  332. >>Mod.lst echo/sounds/vo/centaur/cent_hoof_stomp_03.vsnd_c?sounds/null.vsnd_c
  333. >>Mod.lst echo/sounds/vo/centaur/cent_laugh_04.vsnd_c?sounds/null.vsnd_c
  334. >>Mod.lst echo/sounds/vo/centaur/cent_levelup_06.vsnd_c?sounds/null.vsnd_c
  335. >>Mod.lst echo/sounds/vo/centaur/cent_rival_21.vsnd_c?sounds/null.vsnd_c
  336. >>Mod.lst echo/sounds/vo/centaur/cent_thanks_02.vsnd_c?sounds/null.vsnd_c
  337. >>Mod.lst echo/sounds/vo/chaos_knight/chaknight_ability_phantasm_03.vsnd_c?sounds/null.vsnd_c
  338. >>Mod.lst echo/sounds/vo/chaos_knight/chaknight_ally_04.vsnd_c?sounds/null.vsnd_c
  339. >>Mod.lst echo/sounds/vo/chaos_knight/chaknight_battlebegins_01.vsnd_c?sounds/null.vsnd_c
  340. >>Mod.lst echo/sounds/vo/chaos_knight/chaknight_kill_10.vsnd_c?sounds/null.vsnd_c
  341. >>Mod.lst echo/sounds/vo/chaos_knight/chaknight_laugh_15.vsnd_c?sounds/null.vsnd_c
  342. >>Mod.lst echo/sounds/vo/chaos_knight/chaknight_levelup_04.vsnd_c?sounds/null.vsnd_c
  343. >>Mod.lst echo/sounds/vo/chaos_knight/chaknight_purch_02.vsnd_c?sounds/null.vsnd_c
  344. >>Mod.lst echo/sounds/vo/chaos_knight/chaknight_rival_10.vsnd_c?sounds/null.vsnd_c
  345. >>Mod.lst echo/sounds/vo/chen/chen_battlebegins_01.vsnd_c?sounds/null.vsnd_c
  346. >>Mod.lst echo/sounds/vo/chen/chen_bottle_02.vsnd_c?sounds/null.vsnd_c
  347. >>Mod.lst echo/sounds/vo/chen/chen_cast_04.vsnd_c?sounds/null.vsnd_c
  348. >>Mod.lst echo/sounds/vo/chen/chen_death_04.vsnd_c?sounds/null.vsnd_c
  349. >>Mod.lst echo/sounds/vo/chen/chen_kill_04.vsnd_c?sounds/null.vsnd_c
  350. >>Mod.lst echo/sounds/vo/chen/chen_laugh_09.vsnd_c?sounds/null.vsnd_c
  351. >>Mod.lst echo/sounds/vo/chen/chen_respawn_06.vsnd_c?sounds/null.vsnd_c
  352. >>Mod.lst echo/sounds/vo/chen/chen_thanks_02.vsnd_c?sounds/null.vsnd_c
  353. >>Mod.lst echo/sounds/vo/clinkz/clinkz_deny_07.vsnd_c?sounds/null.vsnd_c
  354. >>Mod.lst echo/sounds/vo/clinkz/clinkz_kill_02.vsnd_c?sounds/null.vsnd_c
  355. >>Mod.lst echo/sounds/vo/clinkz/clinkz_kill_06.vsnd_c?sounds/null.vsnd_c
  356. >>Mod.lst echo/sounds/vo/clinkz/clinkz_laugh_02.vsnd_c?sounds/null.vsnd_c
  357. >>Mod.lst echo/sounds/vo/clinkz/clinkz_rival_01.vsnd_c?sounds/null.vsnd_c
  358. >>Mod.lst echo/sounds/vo/clinkz/clinkz_rival_07.vsnd_c?sounds/null.vsnd_c
  359. >>Mod.lst echo/sounds/vo/clinkz/clinkz_thanks_04.vsnd_c?sounds/null.vsnd_c
  360. >>Mod.lst echo/sounds/vo/clinkz/clinkz_win_01.vsnd_c?sounds/null.vsnd_c
  361. >>Mod.lst echo/sounds/vo/crystalmaiden/cm_deny_02.vsnd_c?sounds/null.vsnd_c
  362. >>Mod.lst echo/sounds/vo/crystalmaiden/cm_kill_09.vsnd_c?sounds/null.vsnd_c
  363. >>Mod.lst echo/sounds/vo/crystalmaiden/cm_laugh_06.vsnd_c?sounds/null.vsnd_c
  364. >>Mod.lst echo/sounds/vo/crystalmaiden/cm_levelup_03.vsnd_c?sounds/null.vsnd_c
  365. >>Mod.lst echo/sounds/vo/crystalmaiden/cm_levelup_04.vsnd_c?sounds/null.vsnd_c
  366. >>Mod.lst echo/sounds/vo/crystalmaiden/cm_respawn_05.vsnd_c?sounds/null.vsnd_c
  367. >>Mod.lst echo/sounds/vo/crystalmaiden/cm_respawn_06.vsnd_c?sounds/null.vsnd_c
  368. >>Mod.lst echo/sounds/vo/crystalmaiden/cm_thanks_02.vsnd_c?sounds/null.vsnd_c
  369. >>Mod.lst echo/sounds/vo/dark_seer/dkseer_ability_wallr_05.vsnd_c?sounds/null.vsnd_c
  370. >>Mod.lst echo/sounds/vo/dark_seer/dkseer_deny_06.vsnd_c?sounds/null.vsnd_c
  371. >>Mod.lst echo/sounds/vo/dark_seer/dkseer_firstblood_02.vsnd_c?sounds/null.vsnd_c
  372. >>Mod.lst echo/sounds/vo/dark_seer/dkseer_happy_02.vsnd_c?sounds/null.vsnd_c
  373. >>Mod.lst echo/sounds/vo/dark_seer/dkseer_kill_01.vsnd_c?sounds/null.vsnd_c
  374. >>Mod.lst echo/sounds/vo/dark_seer/dkseer_laugh_10.vsnd_c?sounds/null.vsnd_c
  375. >>Mod.lst echo/sounds/vo/dark_seer/dkseer_move_03.vsnd_c?sounds/null.vsnd_c
  376. >>Mod.lst echo/sounds/vo/dark_seer/dkseer_rare_02.vsnd_c?sounds/null.vsnd_c
  377. >>Mod.lst echo/sounds/vo/dark_willow/sylph_drop_rare_02.vsnd_c?sounds/null.vsnd_c
  378. >>Mod.lst echo/sounds/vo/dark_willow/sylph_kill_06.vsnd_c?sounds/null.vsnd_c
  379. >>Mod.lst echo/sounds/vo/dark_willow/sylph_respawn_01.vsnd_c?sounds/null.vsnd_c
  380. >>Mod.lst echo/sounds/vo/dark_willow/sylph_wheel_all_02.vsnd_c?sounds/null.vsnd_c
  381. >>Mod.lst echo/sounds/vo/dark_willow/sylph_wheel_all_05.vsnd_c?sounds/null.vsnd_c
  382. >>Mod.lst echo/sounds/vo/dark_willow/sylph_wheel_all_10.vsnd_c?sounds/null.vsnd_c
  383. >>Mod.lst echo/sounds/vo/dark_willow/sylph_wheel_deny_02.vsnd_c?sounds/null.vsnd_c
  384. >>Mod.lst echo/sounds/vo/dark_willow/sylph_wheel_laugh_01.vsnd_c?sounds/null.vsnd_c
  385. >>Mod.lst echo/sounds/vo/dazzle/dazz_ability_shadowave_02.vsnd_c?sounds/null.vsnd_c
  386. >>Mod.lst echo/sounds/vo/dazzle/dazz_deny_08.vsnd_c?sounds/null.vsnd_c
  387. >>Mod.lst echo/sounds/vo/dazzle/dazz_kill_05.vsnd_c?sounds/null.vsnd_c
  388. >>Mod.lst echo/sounds/vo/dazzle/dazz_kill_10.vsnd_c?sounds/null.vsnd_c
  389. >>Mod.lst echo/sounds/vo/dazzle/dazz_lasthit_08.vsnd_c?sounds/null.vsnd_c
  390. >>Mod.lst echo/sounds/vo/dazzle/dazz_laugh_02.vsnd_c?sounds/null.vsnd_c
  391. >>Mod.lst echo/sounds/vo/dazzle/dazz_purch_03.vsnd_c?sounds/null.vsnd_c
  392. >>Mod.lst echo/sounds/vo/dazzle/dazz_respawn_09.vsnd_c?sounds/null.vsnd_c
  393. >>Mod.lst echo/sounds/vo/death_prophet/dpro_deny_16.vsnd_c?sounds/null.vsnd_c
  394. >>Mod.lst echo/sounds/vo/death_prophet/dpro_denyghost_04.vsnd_c?sounds/null.vsnd_c
  395. >>Mod.lst echo/sounds/vo/death_prophet/dpro_exorcism_15.vsnd_c?sounds/null.vsnd_c
  396. >>Mod.lst echo/sounds/vo/death_prophet/dpro_fail_05.vsnd_c?sounds/null.vsnd_c
  397. >>Mod.lst echo/sounds/vo/death_prophet/dpro_kill_11.vsnd_c?sounds/null.vsnd_c
  398. >>Mod.lst echo/sounds/vo/death_prophet/dpro_kill_18.vsnd_c?sounds/null.vsnd_c
  399. >>Mod.lst echo/sounds/vo/death_prophet/dpro_laugh_012.vsnd_c?sounds/null.vsnd_c
  400. >>Mod.lst echo/sounds/vo/death_prophet/dpro_levelup_10.vsnd_c?sounds/null.vsnd_c
  401. >>Mod.lst echo/sounds/vo/disruptor/dis_illus_02.vsnd_c?sounds/null.vsnd_c
  402. >>Mod.lst echo/sounds/vo/disruptor/dis_kill_10.vsnd_c?sounds/null.vsnd_c
  403. >>Mod.lst echo/sounds/vo/disruptor/dis_laugh_03.vsnd_c?sounds/null.vsnd_c
  404. >>Mod.lst echo/sounds/vo/disruptor/dis_purch_02.vsnd_c?sounds/null.vsnd_c
  405. >>Mod.lst echo/sounds/vo/disruptor/dis_rare_02.vsnd_c?sounds/null.vsnd_c
  406. >>Mod.lst echo/sounds/vo/disruptor/dis_respawn_10.vsnd_c?sounds/null.vsnd_c
  407. >>Mod.lst echo/sounds/vo/disruptor/dis_staticstorm_06.vsnd_c?sounds/null.vsnd_c
  408. >>Mod.lst echo/sounds/vo/disruptor/dis_underattack_02.vsnd_c?sounds/null.vsnd_c
  409. >>Mod.lst echo/sounds/vo/doom_bringer/doom_ability_fail_02.vsnd_c?sounds/null.vsnd_c
  410. >>Mod.lst echo/sounds/vo/doom_bringer/doom_ability_lvldeath_03.vsnd_c?sounds/null.vsnd_c
  411. >>Mod.lst echo/sounds/vo/doom_bringer/doom_happy_01.vsnd_c?sounds/null.vsnd_c
  412. >>Mod.lst echo/sounds/vo/doom_bringer/doom_laugh_10.vsnd_c?sounds/null.vsnd_c
  413. >>Mod.lst echo/sounds/vo/doom_bringer/doom_level_05.vsnd_c?sounds/null.vsnd_c
  414. >>Mod.lst echo/sounds/vo/doom_bringer/doom_lose_04.vsnd_c?sounds/null.vsnd_c
  415. >>Mod.lst echo/sounds/vo/doom_bringer/doom_respawn_08.vsnd_c?sounds/null.vsnd_c
  416. >>Mod.lst echo/sounds/vo/doom_bringer/doom_respawn_12.vsnd_c?sounds/null.vsnd_c
  417. >>Mod.lst echo/sounds/vo/dragon_knight/drag_ability_eldrag_06.vsnd_c?sounds/null.vsnd_c
  418. >>Mod.lst echo/sounds/vo/dragon_knight/drag_kill_01.vsnd_c?sounds/null.vsnd_c
  419. >>Mod.lst echo/sounds/vo/dragon_knight/drag_kill_11.vsnd_c?sounds/null.vsnd_c
  420. >>Mod.lst echo/sounds/vo/dragon_knight/drag_lasthit_09.vsnd_c?sounds/null.vsnd_c
  421. >>Mod.lst echo/sounds/vo/dragon_knight/drag_laugh_07.vsnd_c?sounds/null.vsnd_c
  422. >>Mod.lst echo/sounds/vo/dragon_knight/drag_level_05.vsnd_c?sounds/null.vsnd_c
  423. >>Mod.lst echo/sounds/vo/dragon_knight/drag_move_05.vsnd_c?sounds/null.vsnd_c
  424. >>Mod.lst echo/sounds/vo/dragon_knight/drag_purch_01.vsnd_c?sounds/null.vsnd_c
  425. >>Mod.lst echo/sounds/vo/drowranger/dro_deny_02.vsnd_c?sounds/null.vsnd_c
  426. >>Mod.lst echo/sounds/vo/drowranger/dro_kill_05.vsnd_c?sounds/null.vsnd_c
  427. >>Mod.lst echo/sounds/vo/drowranger/dro_laugh_04.vsnd_c?sounds/null.vsnd_c
  428. >>Mod.lst echo/sounds/vo/drowranger/dro_win_03.vsnd_c?sounds/null.vsnd_c
  429. >>Mod.lst echo/sounds/vo/drowranger/dro_win_04.vsnd_c?sounds/null.vsnd_c
  430. >>Mod.lst echo/sounds/vo/drowranger/drow_kill_13.vsnd_c?sounds/null.vsnd_c
  431. >>Mod.lst echo/sounds/vo/drowranger/drow_kill_17.vsnd_c?sounds/null.vsnd_c
  432. >>Mod.lst echo/sounds/vo/drowranger/drow_rival_13.vsnd_c?sounds/null.vsnd_c
  433. >>Mod.lst echo/sounds/vo/earth_spirit/earthspi_deny_05.vsnd_c?sounds/null.vsnd_c
  434. >>Mod.lst echo/sounds/vo/earth_spirit/earthspi_failure_06.vsnd_c?sounds/null.vsnd_c
  435. >>Mod.lst echo/sounds/vo/earth_spirit/earthspi_illus_02.vsnd_c?sounds/null.vsnd_c
  436. >>Mod.lst echo/sounds/vo/earth_spirit/earthspi_invis_03.vsnd_c?sounds/null.vsnd_c
  437. >>Mod.lst echo/sounds/vo/earth_spirit/earthspi_lasthit_10.vsnd_c?sounds/null.vsnd_c
  438. >>Mod.lst echo/sounds/vo/earth_spirit/earthspi_laugh_06.vsnd_c?sounds/null.vsnd_c
  439. >>Mod.lst echo/sounds/vo/earth_spirit/earthspi_rollingboulder_20.vsnd_c?sounds/null.vsnd_c
  440. >>Mod.lst echo/sounds/vo/earth_spirit/earthspi_thanks_04.vsnd_c?sounds/null.vsnd_c
  441. >>Mod.lst echo/sounds/vo/earthshaker/erth_ability_echo_06.vsnd_c?sounds/null.vsnd_c
  442. >>Mod.lst echo/sounds/vo/earthshaker/erth_death_09.vsnd_c?sounds/null.vsnd_c
  443. >>Mod.lst echo/sounds/vo/earthshaker/erth_kill_08.vsnd_c?sounds/null.vsnd_c
  444. >>Mod.lst echo/sounds/vo/earthshaker/erth_laugh_03.vsnd_c?sounds/null.vsnd_c
  445. >>Mod.lst echo/sounds/vo/earthshaker/erth_move_06.vsnd_c?sounds/null.vsnd_c
  446. >>Mod.lst echo/sounds/vo/earthshaker/erth_rare_05.vsnd_c?sounds/null.vsnd_c
  447. >>Mod.lst echo/sounds/vo/earthshaker/erth_respawn_06.vsnd_c?sounds/null.vsnd_c
  448. >>Mod.lst echo/sounds/vo/earthshaker/erth_rival_20.vsnd_c?sounds/null.vsnd_c
  449. >>Mod.lst echo/sounds/vo/elder_titan/elder_deny_06.vsnd_c?sounds/null.vsnd_c
  450. >>Mod.lst echo/sounds/vo/elder_titan/elder_failure_01.vsnd_c?sounds/null.vsnd_c
  451. >>Mod.lst echo/sounds/vo/elder_titan/elder_failure_02.vsnd_c?sounds/null.vsnd_c
  452. >>Mod.lst echo/sounds/vo/elder_titan/elder_kill_04.vsnd_c?sounds/null.vsnd_c
  453. >>Mod.lst echo/sounds/vo/elder_titan/elder_laugh_05.vsnd_c?sounds/null.vsnd_c
  454. >>Mod.lst echo/sounds/vo/elder_titan/elder_lose_05.vsnd_c?sounds/null.vsnd_c
  455. >>Mod.lst echo/sounds/vo/elder_titan/elder_move_11.vsnd_c?sounds/null.vsnd_c
  456. >>Mod.lst echo/sounds/vo/elder_titan/elder_purch_03.vsnd_c?sounds/null.vsnd_c
  457. >>Mod.lst echo/sounds/vo/ember_spirit/embr_attack_06.vsnd_c?sounds/null.vsnd_c
  458. >>Mod.lst echo/sounds/vo/ember_spirit/embr_failure_02.vsnd_c?sounds/null.vsnd_c
  459. >>Mod.lst echo/sounds/vo/ember_spirit/embr_itemrare_01.vsnd_c?sounds/null.vsnd_c
  460. >>Mod.lst echo/sounds/vo/ember_spirit/embr_kill_12.vsnd_c?sounds/null.vsnd_c
  461. >>Mod.lst echo/sounds/vo/ember_spirit/embr_laugh_12.vsnd_c?sounds/null.vsnd_c
  462. >>Mod.lst echo/sounds/vo/ember_spirit/embr_levelup_01.vsnd_c?sounds/null.vsnd_c
  463. >>Mod.lst echo/sounds/vo/ember_spirit/embr_move_02.vsnd_c?sounds/null.vsnd_c
  464. >>Mod.lst echo/sounds/vo/ember_spirit/embr_rival_03.vsnd_c?sounds/null.vsnd_c
  465. >>Mod.lst echo/sounds/vo/enchantress/ench_death_08.vsnd_c?sounds/null.vsnd_c
  466. >>Mod.lst echo/sounds/vo/enchantress/ench_deny_13.vsnd_c?sounds/null.vsnd_c
  467. >>Mod.lst echo/sounds/vo/enchantress/ench_deny_14.vsnd_c?sounds/null.vsnd_c
  468. >>Mod.lst echo/sounds/vo/enchantress/ench_deny_15.vsnd_c?sounds/null.vsnd_c
  469. >>Mod.lst echo/sounds/vo/enchantress/ench_kill_08.vsnd_c?sounds/null.vsnd_c
  470. >>Mod.lst echo/sounds/vo/enchantress/ench_laugh_05.vsnd_c?sounds/null.vsnd_c
  471. >>Mod.lst echo/sounds/vo/enchantress/ench_rare_01.vsnd_c?sounds/null.vsnd_c
  472. >>Mod.lst echo/sounds/vo/enchantress/ench_win_03.vsnd_c?sounds/null.vsnd_c
  473. >>Mod.lst echo/sounds/vo/enigma/enig_ability_black_01.vsnd_c?sounds/null.vsnd_c
  474. >>Mod.lst echo/sounds/vo/enigma/enig_ability_black_03.vsnd_c?sounds/null.vsnd_c
  475. >>Mod.lst echo/sounds/vo/enigma/enig_drop_medium_01.vsnd_c?sounds/null.vsnd_c
  476. >>Mod.lst echo/sounds/vo/enigma/enig_lasthit_01.vsnd_c?sounds/null.vsnd_c
  477. >>Mod.lst echo/sounds/vo/enigma/enig_laugh_03.vsnd_c?sounds/null.vsnd_c
  478. >>Mod.lst echo/sounds/vo/enigma/enig_purch_01.vsnd_c?sounds/null.vsnd_c
  479. >>Mod.lst echo/sounds/vo/enigma/enig_respawn_05.vsnd_c?sounds/null.vsnd_c
  480. >>Mod.lst echo/sounds/vo/enigma/enig_rival_20.vsnd_c?sounds/null.vsnd_c
  481. >>Mod.lst echo/sounds/vo/faceless_void/face_ability_chronos_failure_07.vsnd_c?sounds/null.vsnd_c
  482. >>Mod.lst echo/sounds/vo/faceless_void/face_ability_chronos_failure_08.vsnd_c?sounds/null.vsnd_c
  483. >>Mod.lst echo/sounds/vo/faceless_void/face_kill_01.vsnd_c?sounds/null.vsnd_c
  484. >>Mod.lst echo/sounds/vo/faceless_void/face_kill_11.vsnd_c?sounds/null.vsnd_c
  485. >>Mod.lst echo/sounds/vo/faceless_void/face_laugh_07.vsnd_c?sounds/null.vsnd_c
  486. >>Mod.lst echo/sounds/vo/faceless_void/face_lose_03.vsnd_c?sounds/null.vsnd_c
  487. >>Mod.lst echo/sounds/vo/faceless_void/face_rare_03.vsnd_c?sounds/null.vsnd_c
  488. >>Mod.lst echo/sounds/vo/faceless_void/face_win_03.vsnd_c?sounds/null.vsnd_c
  489. >>Mod.lst echo/sounds/vo/furion/furi_deny_07.vsnd_c?sounds/null.vsnd_c
  490. >>Mod.lst echo/sounds/vo/furion/furi_equipping_02.vsnd_c?sounds/null.vsnd_c
  491. >>Mod.lst echo/sounds/vo/furion/furi_equipping_04.vsnd_c?sounds/null.vsnd_c
  492. >>Mod.lst echo/sounds/vo/furion/furi_equipping_05.vsnd_c?sounds/null.vsnd_c
  493. >>Mod.lst echo/sounds/vo/furion/furi_kill_01.vsnd_c?sounds/null.vsnd_c
  494. >>Mod.lst echo/sounds/vo/furion/furi_kill_03.vsnd_c?sounds/null.vsnd_c
  495. >>Mod.lst echo/sounds/vo/furion/furi_kill_11.vsnd_c?sounds/null.vsnd_c
  496. >>Mod.lst echo/sounds/vo/furion/furi_laugh_01.vsnd_c?sounds/null.vsnd_c
  497. >>Mod.lst echo/sounds/vo/grimstroke/grimstroke_kill_10.vsnd_c?sounds/null.vsnd_c
  498. >>Mod.lst echo/sounds/vo/grimstroke/grimstroke_kill_11.vsnd_c?sounds/null.vsnd_c
  499. >>Mod.lst echo/sounds/vo/grimstroke/grimstroke_laugh_11.vsnd_c?sounds/null.vsnd_c
  500. >>Mod.lst echo/sounds/vo/grimstroke/grimstroke_spawn_14.vsnd_c?sounds/null.vsnd_c
  501. >>Mod.lst echo/sounds/vo/grimstroke/grimstroke_taunt_01.vsnd_c?sounds/null.vsnd_c
  502. >>Mod.lst echo/sounds/vo/grimstroke/grimstroke_taunt_01_02.vsnd_c?sounds/null.vsnd_c
  503. >>Mod.lst echo/sounds/vo/grimstroke/grimstroke_wheel_deny_01.vsnd_c?sounds/null.vsnd_c
  504. >>Mod.lst echo/sounds/vo/grimstroke/grimstroke_wheel_deny_03.vsnd_c?sounds/null.vsnd_c
  505. >>Mod.lst echo/sounds/vo/grimstroke/grimstroke_wheel_thanks_01.vsnd_c?sounds/null.vsnd_c
  506. >>Mod.lst echo/sounds/vo/gyrocopter/gyro_deny_05.vsnd_c?sounds/null.vsnd_c
  507. >>Mod.lst echo/sounds/vo/gyrocopter/gyro_failure_03.vsnd_c?sounds/null.vsnd_c
  508. >>Mod.lst echo/sounds/vo/gyrocopter/gyro_flak_cannon_09.vsnd_c?sounds/null.vsnd_c
  509. >>Mod.lst echo/sounds/vo/gyrocopter/gyro_homing_missile_destroyed_02.vsnd_c?sounds/null.vsnd_c
  510. >>Mod.lst echo/sounds/vo/gyrocopter/gyro_kill_02.vsnd_c?sounds/null.vsnd_c
  511. >>Mod.lst echo/sounds/vo/gyrocopter/gyro_kill_15.vsnd_c?sounds/null.vsnd_c
  512. >>Mod.lst echo/sounds/vo/gyrocopter/gyro_laugh_11.vsnd_c?sounds/null.vsnd_c
  513. >>Mod.lst echo/sounds/vo/gyrocopter/gyro_respawn_12.vsnd_c?sounds/null.vsnd_c
  514. >>Mod.lst echo/sounds/vo/huskar/husk_ability_brskrblood_03.vsnd_c?sounds/null.vsnd_c
  515. >>Mod.lst echo/sounds/vo/huskar/husk_ability_lifebrk_01.vsnd_c?sounds/null.vsnd_c
  516. >>Mod.lst echo/sounds/vo/huskar/husk_ability_lifebrk_05.vsnd_c?sounds/null.vsnd_c
  517. >>Mod.lst echo/sounds/vo/huskar/husk_kill_04.vsnd_c?sounds/null.vsnd_c
  518. >>Mod.lst echo/sounds/vo/huskar/husk_kill_06.vsnd_c?sounds/null.vsnd_c
  519. >>Mod.lst echo/sounds/vo/huskar/husk_lasthit_07.vsnd_c?sounds/null.vsnd_c
  520. >>Mod.lst echo/sounds/vo/huskar/husk_laugh_09.vsnd_c?sounds/null.vsnd_c
  521. >>Mod.lst echo/sounds/vo/huskar/husk_purch_01.vsnd_c?sounds/null.vsnd_c
  522. >>Mod.lst echo/sounds/vo/invoker/invo_ability_invoke_01.vsnd_c?sounds/null.vsnd_c
  523. >>Mod.lst echo/sounds/vo/invoker/invo_attack_05.vsnd_c?sounds/null.vsnd_c
  524. >>Mod.lst echo/sounds/vo/invoker/invo_failure_06.vsnd_c?sounds/null.vsnd_c
  525. >>Mod.lst echo/sounds/vo/invoker/invo_kill_01.vsnd_c?sounds/null.vsnd_c
  526. >>Mod.lst echo/sounds/vo/invoker/invo_lasthit_06.vsnd_c?sounds/null.vsnd_c
  527. >>Mod.lst echo/sounds/vo/invoker/invo_laugh_06.vsnd_c?sounds/null.vsnd_c
  528. >>Mod.lst echo/sounds/vo/invoker/invo_purch_01.vsnd_c?sounds/null.vsnd_c
  529. >>Mod.lst echo/sounds/vo/invoker/invo_rare_04.vsnd_c?sounds/null.vsnd_c
  530. >>Mod.lst echo/sounds/vo/jakiro/jak_ability_failure_07.vsnd_c?sounds/null.vsnd_c
  531. >>Mod.lst echo/sounds/vo/jakiro/jak_bottle_01.vsnd_c?sounds/null.vsnd_c
  532. >>Mod.lst echo/sounds/vo/jakiro/jak_bottle_03.vsnd_c?sounds/null.vsnd_c
  533. >>Mod.lst echo/sounds/vo/jakiro/jak_brother_02.vsnd_c?sounds/null.vsnd_c
  534. >>Mod.lst echo/sounds/vo/jakiro/jak_deny_12.vsnd_c?sounds/null.vsnd_c
  535. >>Mod.lst echo/sounds/vo/jakiro/jak_deny_13.vsnd_c?sounds/null.vsnd_c
  536. >>Mod.lst echo/sounds/vo/jakiro/jak_level_05.vsnd_c?sounds/null.vsnd_c
  537. >>Mod.lst echo/sounds/vo/jakiro/jak_rare_03.vsnd_c?sounds/null.vsnd_c
  538. >>Mod.lst echo/sounds/vo/juggernaut/jug_ability_stunteleport_03.vsnd_c?sounds/null.vsnd_c
  539. >>Mod.lst echo/sounds/vo/juggernaut/jug_kill_09.vsnd_c?sounds/null.vsnd_c
  540. >>Mod.lst echo/sounds/vo/juggernaut/jug_laugh_05.vsnd_c?sounds/null.vsnd_c
  541. >>Mod.lst echo/sounds/vo/juggernaut/jugg_set_complete_03.vsnd_c?sounds/null.vsnd_c
  542. >>Mod.lst echo/sounds/vo/juggernaut/jugg_set_complete_04.vsnd_c?sounds/null.vsnd_c
  543. >>Mod.lst echo/sounds/vo/juggernaut/jugg_set_complete_05.vsnd_c?sounds/null.vsnd_c
  544. >>Mod.lst echo/sounds/vo/juggernaut/jugg_set_complete_06.vsnd_c?sounds/null.vsnd_c
  545. >>Mod.lst echo/sounds/vo/juggernaut/jugg_taunt_06.vsnd_c?sounds/null.vsnd_c
  546. >>Mod.lst echo/sounds/vo/keeper_of_the_light/keep_cast_02.vsnd_c?sounds/null.vsnd_c
  547. >>Mod.lst echo/sounds/vo/keeper_of_the_light/keep_deny_12.vsnd_c?sounds/null.vsnd_c
  548. >>Mod.lst echo/sounds/vo/keeper_of_the_light/keep_deny_16.vsnd_c?sounds/null.vsnd_c
  549. >>Mod.lst echo/sounds/vo/keeper_of_the_light/keep_kill_09.vsnd_c?sounds/null.vsnd_c
  550. >>Mod.lst echo/sounds/vo/keeper_of_the_light/keep_kill_18.vsnd_c?sounds/null.vsnd_c
  551. >>Mod.lst echo/sounds/vo/keeper_of_the_light/keep_laugh_06.vsnd_c?sounds/null.vsnd_c
  552. >>Mod.lst echo/sounds/vo/keeper_of_the_light/keep_nomana_06.vsnd_c?sounds/null.vsnd_c
  553. >>Mod.lst echo/sounds/vo/keeper_of_the_light/keep_thanks_04.vsnd_c?sounds/null.vsnd_c
  554. >>Mod.lst echo/sounds/vo/kunkka/kunk_ability_tidebrng_02.vsnd_c?sounds/null.vsnd_c
  555. >>Mod.lst echo/sounds/vo/kunkka/kunk_ally_06.vsnd_c?sounds/null.vsnd_c
  556. >>Mod.lst echo/sounds/vo/kunkka/kunk_attack_08.vsnd_c?sounds/null.vsnd_c
  557. >>Mod.lst echo/sounds/vo/kunkka/kunk_kill_04.vsnd_c?sounds/null.vsnd_c
  558. >>Mod.lst echo/sounds/vo/kunkka/kunk_kill_10.vsnd_c?sounds/null.vsnd_c
  559. >>Mod.lst echo/sounds/vo/kunkka/kunk_kill_13.vsnd_c?sounds/null.vsnd_c
  560. >>Mod.lst echo/sounds/vo/kunkka/kunk_laugh_06.vsnd_c?sounds/null.vsnd_c
  561. >>Mod.lst echo/sounds/vo/kunkka/kunk_thanks_03.vsnd_c?sounds/null.vsnd_c
  562. >>Mod.lst echo/sounds/vo/legion_commander/legcom_ally_11.vsnd_c?sounds/null.vsnd_c
  563. >>Mod.lst echo/sounds/vo/legion_commander/legcom_deny_07.vsnd_c?sounds/null.vsnd_c
  564. >>Mod.lst echo/sounds/vo/legion_commander/legcom_duel_08.vsnd_c?sounds/null.vsnd_c
  565. >>Mod.lst echo/sounds/vo/legion_commander/legcom_duelfailure_06.vsnd_c?sounds/null.vsnd_c
  566. >>Mod.lst echo/sounds/vo/legion_commander/legcom_itemcommon_02.vsnd_c?sounds/null.vsnd_c
  567. >>Mod.lst echo/sounds/vo/legion_commander/legcom_kill_14.vsnd_c?sounds/null.vsnd_c
  568. >>Mod.lst echo/sounds/vo/legion_commander/legcom_laugh_05.vsnd_c?sounds/null.vsnd_c
  569. >>Mod.lst echo/sounds/vo/legion_commander/legcom_move_15.vsnd_c?sounds/null.vsnd_c
  570. >>Mod.lst echo/sounds/vo/leshrac/lesh_bottle_01.vsnd_c?sounds/null.vsnd_c
  571. >>Mod.lst echo/sounds/vo/leshrac/lesh_cast_01.vsnd_c?sounds/null.vsnd_c
  572. >>Mod.lst echo/sounds/vo/leshrac/lesh_deny_13.vsnd_c?sounds/null.vsnd_c
  573. >>Mod.lst echo/sounds/vo/leshrac/lesh_deny_14.vsnd_c?sounds/null.vsnd_c
  574. >>Mod.lst echo/sounds/vo/leshrac/lesh_kill_11.vsnd_c?sounds/null.vsnd_c
  575. >>Mod.lst echo/sounds/vo/leshrac/lesh_kill_13.vsnd_c?sounds/null.vsnd_c
  576. >>Mod.lst echo/sounds/vo/leshrac/lesh_lasthit_08.vsnd_c?sounds/null.vsnd_c
  577. >>Mod.lst echo/sounds/vo/leshrac/lesh_purch_01.vsnd_c?sounds/null.vsnd_c
  578. >>Mod.lst echo/sounds/vo/lich/lich_ability_armor_01.vsnd_c?sounds/null.vsnd_c
  579. >>Mod.lst echo/sounds/vo/lich/lich_ability_icefrog_01.vsnd_c?sounds/null.vsnd_c
  580. >>Mod.lst echo/sounds/vo/lich/lich_ability_nova_01.vsnd_c?sounds/null.vsnd_c
  581. >>Mod.lst echo/sounds/vo/lich/lich_attack_03.vsnd_c?sounds/null.vsnd_c
  582. >>Mod.lst echo/sounds/vo/lich/lich_immort_02.vsnd_c?sounds/null.vsnd_c
  583. >>Mod.lst echo/sounds/vo/lich/lich_kill_05.vsnd_c?sounds/null.vsnd_c
  584. >>Mod.lst echo/sounds/vo/lich/lich_kill_09.vsnd_c?sounds/null.vsnd_c
  585. >>Mod.lst echo/sounds/vo/lich/lich_level_09.vsnd_c?sounds/null.vsnd_c
  586. >>Mod.lst echo/sounds/vo/life_stealer/lifest_ability_infest_burst_05.vsnd_c?sounds/null.vsnd_c
  587. >>Mod.lst echo/sounds/vo/life_stealer/lifest_ability_infest_burst_06.vsnd_c?sounds/null.vsnd_c
  588. >>Mod.lst echo/sounds/vo/life_stealer/lifest_ability_infest_burst_08.vsnd_c?sounds/null.vsnd_c
  589. >>Mod.lst echo/sounds/vo/life_stealer/lifest_ability_rage_06.vsnd_c?sounds/null.vsnd_c
  590. >>Mod.lst echo/sounds/vo/life_stealer/lifest_attack_02.vsnd_c?sounds/null.vsnd_c
  591. >>Mod.lst echo/sounds/vo/life_stealer/lifest_kill_13.vsnd_c?sounds/null.vsnd_c
  592. >>Mod.lst echo/sounds/vo/life_stealer/lifest_laugh_07.vsnd_c?sounds/null.vsnd_c
  593. >>Mod.lst echo/sounds/vo/life_stealer/lifest_levelup_11.vsnd_c?sounds/null.vsnd_c
  594. >>Mod.lst echo/sounds/vo/lina/lina_drop_common_01.vsnd_c?sounds/null.vsnd_c
  595. >>Mod.lst echo/sounds/vo/lina/lina_kill_01.vsnd_c?sounds/null.vsnd_c
  596. >>Mod.lst echo/sounds/vo/lina/lina_kill_02.vsnd_c?sounds/null.vsnd_c
  597. >>Mod.lst echo/sounds/vo/lina/lina_kill_03.vsnd_c?sounds/null.vsnd_c
  598. >>Mod.lst echo/sounds/vo/lina/lina_kill_05.vsnd_c?sounds/null.vsnd_c
  599. >>Mod.lst echo/sounds/vo/lina/lina_laugh_09.vsnd_c?sounds/null.vsnd_c
  600. >>Mod.lst echo/sounds/vo/lina/lina_purch_02.vsnd_c?sounds/null.vsnd_c
  601. >>Mod.lst echo/sounds/vo/lina/lina_spawn_08.vsnd_c?sounds/null.vsnd_c
  602. >>Mod.lst echo/sounds/vo/lion/lion_cast_03.vsnd_c?sounds/null.vsnd_c
  603. >>Mod.lst echo/sounds/vo/lion/lion_deny_06.vsnd_c?sounds/null.vsnd_c
  604. >>Mod.lst echo/sounds/vo/lion/lion_kill_02.vsnd_c?sounds/null.vsnd_c
  605. >>Mod.lst echo/sounds/vo/lion/lion_kill_04.vsnd_c?sounds/null.vsnd_c
  606. >>Mod.lst echo/sounds/vo/lion/lion_kill_05.vsnd_c?sounds/null.vsnd_c
  607. >>Mod.lst echo/sounds/vo/lion/lion_laugh_01.vsnd_c?sounds/null.vsnd_c
  608. >>Mod.lst echo/sounds/vo/lion/lion_move_12.vsnd_c?sounds/null.vsnd_c
  609. >>Mod.lst echo/sounds/vo/lion/lion_respawn_01.vsnd_c?sounds/null.vsnd_c
  610. >>Mod.lst echo/sounds/vo/lone_druid/lone_druid_ability_failure_02.vsnd_c?sounds/null.vsnd_c
  611. >>Mod.lst echo/sounds/vo/lone_druid/lone_druid_ability_rabid_04.vsnd_c?sounds/null.vsnd_c
  612. >>Mod.lst echo/sounds/vo/lone_druid/lone_druid_ability_trueform_09.vsnd_c?sounds/null.vsnd_c
  613. >>Mod.lst echo/sounds/vo/lone_druid/lone_druid_bearform_ability_trueform_04.vsnd_c?sounds/null.vsnd_c
  614. >>Mod.lst echo/sounds/vo/lone_druid/lone_druid_death_03.vsnd_c?sounds/null.vsnd_c
  615. >>Mod.lst echo/sounds/vo/lone_druid/lone_druid_laugh_05.vsnd_c?sounds/null.vsnd_c
  616. >>Mod.lst echo/sounds/vo/lone_druid/lone_druid_level_03.vsnd_c?sounds/null.vsnd_c
  617. >>Mod.lst echo/sounds/vo/lone_druid/lone_druid_purch_02.vsnd_c?sounds/null.vsnd_c
  618. >>Mod.lst echo/sounds/vo/luna/luna_ability_eclipse_08.vsnd_c?sounds/null.vsnd_c
  619. >>Mod.lst echo/sounds/vo/luna/luna_ability_failure_03.vsnd_c?sounds/null.vsnd_c
  620. >>Mod.lst echo/sounds/vo/luna/luna_drop_common.vsnd_c?sounds/null.vsnd_c
  621. >>Mod.lst echo/sounds/vo/luna/luna_drop_medium.vsnd_c?sounds/null.vsnd_c
  622. >>Mod.lst echo/sounds/vo/luna/luna_kill_06.vsnd_c?sounds/null.vsnd_c
  623. >>Mod.lst echo/sounds/vo/luna/luna_laugh_09.vsnd_c?sounds/null.vsnd_c
  624. >>Mod.lst echo/sounds/vo/luna/luna_levelup_03.vsnd_c?sounds/null.vsnd_c
  625. >>Mod.lst echo/sounds/vo/luna/luna_shiwiz_02.vsnd_c?sounds/null.vsnd_c
  626. >>Mod.lst echo/sounds/vo/lycan/lycan_attack_02.vsnd_c?sounds/null.vsnd_c
  627. >>Mod.lst echo/sounds/vo/lycan/lycan_attack_05.vsnd_c?sounds/null.vsnd_c
  628. >>Mod.lst echo/sounds/vo/lycan/lycan_cast_02.vsnd_c?sounds/null.vsnd_c
  629. >>Mod.lst echo/sounds/vo/lycan/lycan_immort_02.vsnd_c?sounds/null.vsnd_c
  630. >>Mod.lst echo/sounds/vo/lycan/lycan_kill_01.vsnd_c?sounds/null.vsnd_c
  631. >>Mod.lst echo/sounds/vo/lycan/lycan_kill_04.vsnd_c?sounds/null.vsnd_c
  632. >>Mod.lst echo/sounds/vo/lycan/lycan_laugh_14.vsnd_c?sounds/null.vsnd_c
  633. >>Mod.lst echo/sounds/vo/lycan/lycan_level_05.vsnd_c?sounds/null.vsnd_c
  634. >>Mod.lst echo/sounds/vo/magnataur/magn_failure_03.vsnd_c?sounds/null.vsnd_c
  635. >>Mod.lst echo/sounds/vo/magnataur/magn_failure_08.vsnd_c?sounds/null.vsnd_c
  636. >>Mod.lst echo/sounds/vo/magnataur/magn_failure_10.vsnd_c?sounds/null.vsnd_c
  637. >>Mod.lst echo/sounds/vo/magnataur/magn_kill_01.vsnd_c?sounds/null.vsnd_c
  638. >>Mod.lst echo/sounds/vo/magnataur/magn_lasthit_02.vsnd_c?sounds/null.vsnd_c
  639. >>Mod.lst echo/sounds/vo/magnataur/magn_laugh_06.vsnd_c?sounds/null.vsnd_c
  640. >>Mod.lst echo/sounds/vo/magnataur/magn_purch_04.vsnd_c?sounds/null.vsnd_c
  641. >>Mod.lst echo/sounds/vo/magnataur/magn_rare_05.vsnd_c?sounds/null.vsnd_c
  642. >>Mod.lst echo/sounds/vo/mars/mars_ability4_09.vsnd_c?sounds/null.vsnd_c
  643. >>Mod.lst echo/sounds/vo/mars/mars_kill_09.vsnd_c?sounds/null.vsnd_c
  644. >>Mod.lst echo/sounds/vo/mars/mars_kill_10.vsnd_c?sounds/null.vsnd_c
  645. >>Mod.lst echo/sounds/vo/mars/mars_laugh_08.vsnd_c?sounds/null.vsnd_c
  646. >>Mod.lst echo/sounds/vo/mars/mars_lose_05.vsnd_c?sounds/null.vsnd_c
  647. >>Mod.lst echo/sounds/vo/mars/mars_song_02.vsnd_c?sounds/null.vsnd_c
  648. >>Mod.lst echo/sounds/vo/mars/mars_thanks_03.vsnd_c?sounds/null.vsnd_c
  649. >>Mod.lst echo/sounds/vo/mars/mars_wheel_all_11.vsnd_c?sounds/null.vsnd_c
  650. >>Mod.lst echo/sounds/vo/medusa/medus_begin_03.vsnd_c?sounds/null.vsnd_c
  651. >>Mod.lst echo/sounds/vo/medusa/medus_deny_01.vsnd_c?sounds/null.vsnd_c
  652. >>Mod.lst echo/sounds/vo/medusa/medus_deny_12.vsnd_c?sounds/null.vsnd_c
  653. >>Mod.lst echo/sounds/vo/medusa/medus_failure_01.vsnd_c?sounds/null.vsnd_c
  654. >>Mod.lst echo/sounds/vo/medusa/medus_illus_02.vsnd_c?sounds/null.vsnd_c
  655. >>Mod.lst echo/sounds/vo/medusa/medus_items_15.vsnd_c?sounds/null.vsnd_c
  656. >>Mod.lst echo/sounds/vo/medusa/medus_kill_09.vsnd_c?sounds/null.vsnd_c
  657. >>Mod.lst echo/sounds/vo/medusa/medus_laugh_05.vsnd_c?sounds/null.vsnd_c
  658. >>Mod.lst echo/sounds/vo/meepo/meepo_deny_16.vsnd_c?sounds/null.vsnd_c
  659. >>Mod.lst echo/sounds/vo/meepo/meepo_drop_medium.vsnd_c?sounds/null.vsnd_c
  660. >>Mod.lst echo/sounds/vo/meepo/meepo_earthbind_05.vsnd_c?sounds/null.vsnd_c
  661. >>Mod.lst echo/sounds/vo/meepo/meepo_failure_03.vsnd_c?sounds/null.vsnd_c
  662. >>Mod.lst echo/sounds/vo/meepo/meepo_lose_04.vsnd_c?sounds/null.vsnd_c
  663. >>Mod.lst echo/sounds/vo/meepo/meepo_lose_05.vsnd_c?sounds/null.vsnd_c
  664. >>Mod.lst echo/sounds/vo/meepo/meepo_purch_05.vsnd_c?sounds/null.vsnd_c
  665. >>Mod.lst echo/sounds/vo/meepo/meepo_respawn_08.vsnd_c?sounds/null.vsnd_c
  666. >>Mod.lst echo/sounds/vo/mirana/mir_attack_08.vsnd_c?sounds/null.vsnd_c
  667. >>Mod.lst echo/sounds/vo/mirana/mir_drop_common_01.vsnd_c?sounds/null.vsnd_c
  668. >>Mod.lst echo/sounds/vo/mirana/mir_illus_03.vsnd_c?sounds/null.vsnd_c
  669. >>Mod.lst echo/sounds/vo/mirana/mir_kill_02.vsnd_c?sounds/null.vsnd_c
  670. >>Mod.lst echo/sounds/vo/mirana/mir_kill_04.vsnd_c?sounds/null.vsnd_c
  671. >>Mod.lst echo/sounds/vo/mirana/mir_kill_09.vsnd_c?sounds/null.vsnd_c
  672. >>Mod.lst echo/sounds/vo/mirana/mir_laugh_03.vsnd_c?sounds/null.vsnd_c
  673. >>Mod.lst echo/sounds/vo/mirana/mir_rare_04.vsnd_c?sounds/null.vsnd_c
  674. >>Mod.lst echo/sounds/vo/monkey_king/monkey_ability5_07.vsnd_c?sounds/null.vsnd_c
  675. >>Mod.lst echo/sounds/vo/monkey_king/monkey_death_01.vsnd_c?sounds/null.vsnd_c
  676. >>Mod.lst echo/sounds/vo/monkey_king/monkey_deny_brood_01.vsnd_c?sounds/null.vsnd_c
  677. >>Mod.lst echo/sounds/vo/monkey_king/monkey_drop_common_01.vsnd_c?sounds/null.vsnd_c
  678. >>Mod.lst echo/sounds/vo/monkey_king/monkey_drop_medium_01.vsnd_c?sounds/null.vsnd_c
  679. >>Mod.lst echo/sounds/vo/monkey_king/monkey_laugh_17.vsnd_c?sounds/null.vsnd_c
  680. >>Mod.lst echo/sounds/vo/monkey_king/monkey_regen_02.vsnd_c?sounds/null.vsnd_c
  681. >>Mod.lst echo/sounds/vo/monkey_king/monkey_win_02.vsnd_c?sounds/null.vsnd_c
  682. >>Mod.lst echo/sounds/vo/morphling/mrph_ability_repfriend_02.vsnd_c?sounds/null.vsnd_c
  683. >>Mod.lst echo/sounds/vo/morphling/mrph_attack_09.vsnd_c?sounds/null.vsnd_c
  684. >>Mod.lst echo/sounds/vo/morphling/mrph_cast_01.vsnd_c?sounds/null.vsnd_c
  685. >>Mod.lst echo/sounds/vo/morphling/mrph_kill_06.vsnd_c?sounds/null.vsnd_c
  686. >>Mod.lst echo/sounds/vo/morphling/mrph_kill_09.vsnd_c?sounds/null.vsnd_c
  687. >>Mod.lst echo/sounds/vo/morphling/mrph_laugh_08.vsnd_c?sounds/null.vsnd_c
  688. >>Mod.lst echo/sounds/vo/morphling/mrph_regen_02.vsnd_c?sounds/null.vsnd_c
  689. >>Mod.lst echo/sounds/vo/morphling/mrph_respawn_02.vsnd_c?sounds/null.vsnd_c
  690. >>Mod.lst echo/sounds/vo/naga_siren/naga_cast_01.vsnd_c?sounds/null.vsnd_c
  691. >>Mod.lst echo/sounds/vo/naga_siren/naga_death_07.vsnd_c?sounds/null.vsnd_c
  692. >>Mod.lst echo/sounds/vo/naga_siren/naga_deny_08.vsnd_c?sounds/null.vsnd_c
  693. >>Mod.lst echo/sounds/vo/naga_siren/naga_kill_02.vsnd_c?sounds/null.vsnd_c
  694. >>Mod.lst echo/sounds/vo/naga_siren/naga_kill_12.vsnd_c?sounds/null.vsnd_c
  695. >>Mod.lst echo/sounds/vo/naga_siren/naga_laugh_04.vsnd_c?sounds/null.vsnd_c
  696. >>Mod.lst echo/sounds/vo/naga_siren/naga_rival_14.vsnd_c?sounds/null.vsnd_c
  697. >>Mod.lst echo/sounds/vo/naga_siren/naga_rival_21.vsnd_c?sounds/null.vsnd_c
  698. >>Mod.lst echo/sounds/vo/necrolyte/necr_breath_02.vsnd_c?sounds/null.vsnd_c
  699. >>Mod.lst echo/sounds/vo/necrolyte/necr_kill_03.vsnd_c?sounds/null.vsnd_c
  700. >>Mod.lst echo/sounds/vo/necrolyte/necr_laugh_07.vsnd_c?sounds/null.vsnd_c
  701. >>Mod.lst echo/sounds/vo/necrolyte/necr_lose_03.vsnd_c?sounds/null.vsnd_c
  702. >>Mod.lst echo/sounds/vo/necrolyte/necr_purch_04.vsnd_c?sounds/null.vsnd_c
  703. >>Mod.lst echo/sounds/vo/necrolyte/necr_rare_04.vsnd_c?sounds/null.vsnd_c
  704. >>Mod.lst echo/sounds/vo/necrolyte/necr_rare_05.vsnd_c?sounds/null.vsnd_c
  705. >>Mod.lst echo/sounds/vo/necrolyte/necr_respawn_12.vsnd_c?sounds/null.vsnd_c
  706. >>Mod.lst echo/sounds/vo/nevermore/nev_ability_presence_02.vsnd_c?sounds/null.vsnd_c
  707. >>Mod.lst echo/sounds/vo/nevermore/nev_attack_07.vsnd_c?sounds/null.vsnd_c
  708. >>Mod.lst echo/sounds/vo/nevermore/nev_attack_11.vsnd_c?sounds/null.vsnd_c
  709. >>Mod.lst echo/sounds/vo/nevermore/nev_deny_03.vsnd_c?sounds/null.vsnd_c
  710. >>Mod.lst echo/sounds/vo/nevermore/nev_kill_11.vsnd_c?sounds/null.vsnd_c
  711. >>Mod.lst echo/sounds/vo/nevermore/nev_lasthit_02.vsnd_c?sounds/null.vsnd_c
  712. >>Mod.lst echo/sounds/vo/nevermore/nev_laugh_02.vsnd_c?sounds/null.vsnd_c
  713. >>Mod.lst echo/sounds/vo/nevermore/nev_thanks_02.vsnd_c?sounds/null.vsnd_c
  714. >>Mod.lst echo/sounds/vo/night_stalker/nstalk_attack_11.vsnd_c?sounds/null.vsnd_c
  715. >>Mod.lst echo/sounds/vo/night_stalker/nstalk_battlebegins_01.vsnd_c?sounds/null.vsnd_c
  716. >>Mod.lst echo/sounds/vo/night_stalker/nstalk_cast_01.vsnd_c?sounds/null.vsnd_c
  717. >>Mod.lst echo/sounds/vo/night_stalker/nstalk_laugh_06.vsnd_c?sounds/null.vsnd_c
  718. >>Mod.lst echo/sounds/vo/night_stalker/nstalk_purch_01.vsnd_c?sounds/null.vsnd_c
  719. >>Mod.lst echo/sounds/vo/night_stalker/nstalk_purch_03.vsnd_c?sounds/null.vsnd_c
  720. >>Mod.lst echo/sounds/vo/night_stalker/nstalk_respawn_05.vsnd_c?sounds/null.vsnd_c
  721. >>Mod.lst echo/sounds/vo/night_stalker/nstalk_spawn_03.vsnd_c?sounds/null.vsnd_c
  722. >>Mod.lst echo/sounds/vo/nyx_assassin/nyx_burn_05.vsnd_c?sounds/null.vsnd_c
  723. >>Mod.lst echo/sounds/vo/nyx_assassin/nyx_chitter_02.vsnd_c?sounds/null.vsnd_c
  724. >>Mod.lst echo/sounds/vo/nyx_assassin/nyx_death_03.vsnd_c?sounds/null.vsnd_c
  725. >>Mod.lst echo/sounds/vo/nyx_assassin/nyx_items_11.vsnd_c?sounds/null.vsnd_c
  726. >>Mod.lst echo/sounds/vo/nyx_assassin/nyx_laugh_07.vsnd_c?sounds/null.vsnd_c
  727. >>Mod.lst echo/sounds/vo/nyx_assassin/nyx_levelup_10.vsnd_c?sounds/null.vsnd_c
  728. >>Mod.lst echo/sounds/vo/nyx_assassin/nyx_rival_25.vsnd_c?sounds/null.vsnd_c
  729. >>Mod.lst echo/sounds/vo/nyx_assassin/nyx_waiting_01.vsnd_c?sounds/null.vsnd_c
  730. >>Mod.lst echo/sounds/vo/ogre_magi/ogmag_ability_multi_05.vsnd_c?sounds/null.vsnd_c
  731. >>Mod.lst echo/sounds/vo/ogre_magi/ogmag_illus_02.vsnd_c?sounds/null.vsnd_c
  732. >>Mod.lst echo/sounds/vo/ogre_magi/ogmag_kill_03.vsnd_c?sounds/null.vsnd_c
  733. >>Mod.lst echo/sounds/vo/ogre_magi/ogmag_kill_11.vsnd_c?sounds/null.vsnd_c
  734. >>Mod.lst echo/sounds/vo/ogre_magi/ogmag_laugh_14.vsnd_c?sounds/null.vsnd_c
  735. >>Mod.lst echo/sounds/vo/ogre_magi/ogmag_rival_03.vsnd_c?sounds/null.vsnd_c
  736. >>Mod.lst echo/sounds/vo/ogre_magi/ogmag_rival_04.vsnd_c?sounds/null.vsnd_c
  737. >>Mod.lst echo/sounds/vo/ogre_magi/ogmag_rival_05.vsnd_c?sounds/null.vsnd_c
  738. >>Mod.lst echo/sounds/vo/omniknight/omni_ability_degaura_04.vsnd_c?sounds/null.vsnd_c
  739. >>Mod.lst echo/sounds/vo/omniknight/omni_ability_degaura_05.vsnd_c?sounds/null.vsnd_c
  740. >>Mod.lst echo/sounds/vo/omniknight/omni_death_13.vsnd_c?sounds/null.vsnd_c
  741. >>Mod.lst echo/sounds/vo/omniknight/omni_kill_02.vsnd_c?sounds/null.vsnd_c
  742. >>Mod.lst echo/sounds/vo/omniknight/omni_kill_09.vsnd_c?sounds/null.vsnd_c
  743. >>Mod.lst echo/sounds/vo/omniknight/omni_kill_12.vsnd_c?sounds/null.vsnd_c
  744. >>Mod.lst echo/sounds/vo/omniknight/omni_laugh_10.vsnd_c?sounds/null.vsnd_c
  745. >>Mod.lst echo/sounds/vo/omniknight/omni_level_09.vsnd_c?sounds/null.vsnd_c
  746. >>Mod.lst echo/sounds/vo/oracle/orac_death_11.vsnd_c?sounds/null.vsnd_c
  747. >>Mod.lst echo/sounds/vo/oracle/orac_itemare_02.vsnd_c?sounds/null.vsnd_c
  748. >>Mod.lst echo/sounds/vo/oracle/orac_kill_09.vsnd_c?sounds/null.vsnd_c
  749. >>Mod.lst echo/sounds/vo/oracle/orac_kill_22.vsnd_c?sounds/null.vsnd_c
  750. >>Mod.lst echo/sounds/vo/oracle/orac_lasthit_04.vsnd_c?sounds/null.vsnd_c
  751. >>Mod.lst echo/sounds/vo/oracle/orac_laugh_13.vsnd_c?sounds/null.vsnd_c
  752. >>Mod.lst echo/sounds/vo/oracle/orac_randomprophecies_02.vsnd_c?sounds/null.vsnd_c
  753. >>Mod.lst echo/sounds/vo/oracle/orac_respawn_06.vsnd_c?sounds/null.vsnd_c
  754. >>Mod.lst echo/sounds/vo/outworld_destroyer/odest_attack_11.vsnd_c?sounds/null.vsnd_c
  755. >>Mod.lst echo/sounds/vo/outworld_destroyer/odest_begin_02.vsnd_c?sounds/null.vsnd_c
  756. >>Mod.lst echo/sounds/vo/outworld_destroyer/odest_death_10.vsnd_c?sounds/null.vsnd_c
  757. >>Mod.lst echo/sounds/vo/outworld_destroyer/odest_death_12.vsnd_c?sounds/null.vsnd_c
  758. >>Mod.lst echo/sounds/vo/outworld_destroyer/odest_lasthit_03.vsnd_c?sounds/null.vsnd_c
  759. >>Mod.lst echo/sounds/vo/outworld_destroyer/odest_laugh_04.vsnd_c?sounds/null.vsnd_c
  760. >>Mod.lst echo/sounds/vo/outworld_destroyer/odest_rival_13.vsnd_c?sounds/null.vsnd_c
  761. >>Mod.lst echo/sounds/vo/outworld_destroyer/odest_win_04.vsnd_c?sounds/null.vsnd_c
  762. >>Mod.lst echo/sounds/vo/pangolin/pangolin_ability3_04.vsnd_c?sounds/null.vsnd_c
  763. >>Mod.lst echo/sounds/vo/pangolin/pangolin_ally_09.vsnd_c?sounds/null.vsnd_c
  764. >>Mod.lst echo/sounds/vo/pangolin/pangolin_doubledam_03.vsnd_c?sounds/null.vsnd_c
  765. >>Mod.lst echo/sounds/vo/pangolin/pangolin_kill_06.vsnd_c?sounds/null.vsnd_c
  766. >>Mod.lst echo/sounds/vo/pangolin/pangolin_kill_08.vsnd_c?sounds/null.vsnd_c
  767. >>Mod.lst echo/sounds/vo/pangolin/pangolin_laugh_14.vsnd_c?sounds/null.vsnd_c
  768. >>Mod.lst echo/sounds/vo/pangolin/pangolin_levelup_11.vsnd_c?sounds/null.vsnd_c
  769. >>Mod.lst echo/sounds/vo/phantom_assassin/phass_ability_blur_02.vsnd_c?sounds/null.vsnd_c
  770. >>Mod.lst echo/sounds/vo/phantom_assassin/phass_deny_14.vsnd_c?sounds/null.vsnd_c
  771. >>Mod.lst echo/sounds/vo/phantom_assassin/phass_happy_09.vsnd_c?sounds/null.vsnd_c
  772. >>Mod.lst echo/sounds/vo/phantom_assassin/phass_kill_01.vsnd_c?sounds/null.vsnd_c
  773. >>Mod.lst echo/sounds/vo/phantom_assassin/phass_kill_02.vsnd_c?sounds/null.vsnd_c
  774. >>Mod.lst echo/sounds/vo/phantom_assassin/phass_kill_10.vsnd_c?sounds/null.vsnd_c
  775. >>Mod.lst echo/sounds/vo/phantom_assassin/phass_laugh_07.vsnd_c?sounds/null.vsnd_c
  776. >>Mod.lst echo/sounds/vo/phantom_assassin/phass_level_06.vsnd_c?sounds/null.vsnd_c
  777. >>Mod.lst echo/sounds/vo/phantom_lancer/plance_cast_02.vsnd_c?sounds/null.vsnd_c
  778. >>Mod.lst echo/sounds/vo/phantom_lancer/plance_drop_rare.vsnd_c?sounds/null.vsnd_c
  779. >>Mod.lst echo/sounds/vo/phantom_lancer/plance_illus_02.vsnd_c?sounds/null.vsnd_c
  780. >>Mod.lst echo/sounds/vo/phantom_lancer/plance_kill_10.vsnd_c?sounds/null.vsnd_c
  781. >>Mod.lst echo/sounds/vo/phantom_lancer/plance_lasthit_06.vsnd_c?sounds/null.vsnd_c
  782. >>Mod.lst echo/sounds/vo/phantom_lancer/plance_laugh_03.vsnd_c?sounds/null.vsnd_c
  783. >>Mod.lst echo/sounds/vo/phantom_lancer/plance_respawn_05.vsnd_c?sounds/null.vsnd_c
  784. >>Mod.lst echo/sounds/vo/phantom_lancer/plance_win_02.vsnd_c?sounds/null.vsnd_c
  785. >>Mod.lst echo/sounds/vo/phoenix/phoenix_bird_death_defeat.vsnd_c?sounds/null.vsnd_c
  786. >>Mod.lst echo/sounds/vo/phoenix/phoenix_bird_denied.vsnd_c?sounds/null.vsnd_c
  787. >>Mod.lst echo/sounds/vo/phoenix/phoenix_bird_emote_bad.vsnd_c?sounds/null.vsnd_c
  788. >>Mod.lst echo/sounds/vo/phoenix/phoenix_bird_emote_good.vsnd_c?sounds/null.vsnd_c
  789. >>Mod.lst echo/sounds/vo/phoenix/phoenix_bird_inthebag.vsnd_c?sounds/null.vsnd_c
  790. >>Mod.lst echo/sounds/vo/phoenix/phoenix_bird_laugh.vsnd_c?sounds/null.vsnd_c
  791. >>Mod.lst echo/sounds/vo/phoenix/phoenix_bird_level_up.vsnd_c?sounds/null.vsnd_c
  792. >>Mod.lst echo/sounds/vo/phoenix/phoenix_bird_victory.vsnd_c?sounds/null.vsnd_c
  793. >>Mod.lst echo/sounds/vo/puck/puck_ability_dreamcoil_05.vsnd_c?sounds/null.vsnd_c
  794. >>Mod.lst echo/sounds/vo/puck/puck_ability_orb_03.vsnd_c?sounds/null.vsnd_c
  795. >>Mod.lst echo/sounds/vo/puck/puck_kill_09.vsnd_c?sounds/null.vsnd_c
  796. >>Mod.lst echo/sounds/vo/puck/puck_laugh_01.vsnd_c?sounds/null.vsnd_c
  797. >>Mod.lst echo/sounds/vo/puck/puck_lose_04.vsnd_c?sounds/null.vsnd_c
  798. >>Mod.lst echo/sounds/vo/puck/puck_spawn_04.vsnd_c?sounds/null.vsnd_c
  799. >>Mod.lst echo/sounds/vo/puck/puck_spawn_05.vsnd_c?sounds/null.vsnd_c
  800. >>Mod.lst echo/sounds/vo/puck/puck_win_04.vsnd_c?sounds/null.vsnd_c
  801. >>Mod.lst echo/sounds/vo/pudge/pud_ability_rot_07.vsnd_c?sounds/null.vsnd_c
  802. >>Mod.lst echo/sounds/vo/pudge/pud_acknow_05.vsnd_c?sounds/null.vsnd_c
  803. >>Mod.lst echo/sounds/vo/pudge/pud_attack_08.vsnd_c?sounds/null.vsnd_c
  804. >>Mod.lst echo/sounds/vo/pudge/pud_kill_07.vsnd_c?sounds/null.vsnd_c
  805. >>Mod.lst echo/sounds/vo/pudge/pud_lasthit_07.vsnd_c?sounds/null.vsnd_c
  806. >>Mod.lst echo/sounds/vo/pudge/pud_laugh_05.vsnd_c?sounds/null.vsnd_c
  807. >>Mod.lst echo/sounds/vo/pudge/pud_rare_05.vsnd_c?sounds/null.vsnd_c
  808. >>Mod.lst echo/sounds/vo/pudge/pud_thanks_02.vsnd_c?sounds/null.vsnd_c
  809. >>Mod.lst echo/sounds/vo/pugna/pugna_ability_life_08.vsnd_c?sounds/null.vsnd_c
  810. >>Mod.lst echo/sounds/vo/pugna/pugna_ability_nblast_05.vsnd_c?sounds/null.vsnd_c
  811. >>Mod.lst echo/sounds/vo/pugna/pugna_ability_nward_07.vsnd_c?sounds/null.vsnd_c
  812. >>Mod.lst echo/sounds/vo/pugna/pugna_battlebegins_01.vsnd_c?sounds/null.vsnd_c
  813. >>Mod.lst echo/sounds/vo/pugna/pugna_cast_05.vsnd_c?sounds/null.vsnd_c
  814. >>Mod.lst echo/sounds/vo/pugna/pugna_laugh_01.vsnd_c?sounds/null.vsnd_c
  815. >>Mod.lst echo/sounds/vo/pugna/pugna_level_06.vsnd_c?sounds/null.vsnd_c
  816. >>Mod.lst echo/sounds/vo/pugna/pugna_respawn_03.vsnd_c?sounds/null.vsnd_c
  817. >>Mod.lst echo/sounds/vo/queenofpain/pain_attack_04.vsnd_c?sounds/null.vsnd_c
  818. >>Mod.lst echo/sounds/vo/queenofpain/pain_cast_01.vsnd_c?sounds/null.vsnd_c
  819. >>Mod.lst echo/sounds/vo/queenofpain/pain_kill_08.vsnd_c?sounds/null.vsnd_c
  820. >>Mod.lst echo/sounds/vo/queenofpain/pain_kill_12.vsnd_c?sounds/null.vsnd_c
  821. >>Mod.lst echo/sounds/vo/queenofpain/pain_laugh_04.vsnd_c?sounds/null.vsnd_c
  822. >>Mod.lst echo/sounds/vo/queenofpain/pain_respawn_04.vsnd_c?sounds/null.vsnd_c
  823. >>Mod.lst echo/sounds/vo/queenofpain/pain_spawn_02.vsnd_c?sounds/null.vsnd_c
  824. >>Mod.lst echo/sounds/vo/queenofpain/pain_taunt_01.vsnd_c?sounds/null.vsnd_c
  825. >>Mod.lst echo/sounds/vo/rattletrap/ratt_ability_batt_09.vsnd_c?sounds/null.vsnd_c
  826. >>Mod.lst echo/sounds/vo/rattletrap/ratt_ability_batt_14.vsnd_c?sounds/null.vsnd_c
  827. >>Mod.lst echo/sounds/vo/rattletrap/ratt_ability_flare_12.vsnd_c?sounds/null.vsnd_c
  828. >>Mod.lst echo/sounds/vo/rattletrap/ratt_deny_09.vsnd_c?sounds/null.vsnd_c
  829. >>Mod.lst echo/sounds/vo/rattletrap/ratt_kill_14.vsnd_c?sounds/null.vsnd_c
  830. >>Mod.lst echo/sounds/vo/rattletrap/ratt_level_13.vsnd_c?sounds/null.vsnd_c
  831. >>Mod.lst echo/sounds/vo/rattletrap/ratt_respawn_18.vsnd_c?sounds/null.vsnd_c
  832. >>Mod.lst echo/sounds/vo/rattletrap/ratt_win_05.vsnd_c?sounds/null.vsnd_c
  833. >>Mod.lst echo/sounds/vo/razor/raz_ability_static_05.vsnd_c?sounds/null.vsnd_c
  834. >>Mod.lst echo/sounds/vo/razor/raz_cast_01.vsnd_c?sounds/null.vsnd_c
  835. >>Mod.lst echo/sounds/vo/razor/raz_kill_03.vsnd_c?sounds/null.vsnd_c
  836. >>Mod.lst echo/sounds/vo/razor/raz_kill_05.vsnd_c?sounds/null.vsnd_c
  837. >>Mod.lst echo/sounds/vo/razor/raz_kill_09.vsnd_c?sounds/null.vsnd_c
  838. >>Mod.lst echo/sounds/vo/razor/raz_kill_10.vsnd_c?sounds/null.vsnd_c
  839. >>Mod.lst echo/sounds/vo/razor/raz_lasthit_02.vsnd_c?sounds/null.vsnd_c
  840. >>Mod.lst echo/sounds/vo/razor/raz_laugh_05.vsnd_c?sounds/null.vsnd_c
  841. >>Mod.lst echo/sounds/vo/riki/riki_ability_blink_05.vsnd_c?sounds/null.vsnd_c
  842. >>Mod.lst echo/sounds/vo/riki/riki_ability_invis_03.vsnd_c?sounds/null.vsnd_c
  843. >>Mod.lst echo/sounds/vo/riki/riki_cast_01.vsnd_c?sounds/null.vsnd_c
  844. >>Mod.lst echo/sounds/vo/riki/riki_kill_01.vsnd_c?sounds/null.vsnd_c
  845. >>Mod.lst echo/sounds/vo/riki/riki_kill_03.vsnd_c?sounds/null.vsnd_c
  846. >>Mod.lst echo/sounds/vo/riki/riki_kill_14.vsnd_c?sounds/null.vsnd_c
  847. >>Mod.lst echo/sounds/vo/riki/riki_laugh_03.vsnd_c?sounds/null.vsnd_c
  848. >>Mod.lst echo/sounds/vo/riki/riki_respawn_07.vsnd_c?sounds/null.vsnd_c
  849. >>Mod.lst echo/sounds/vo/rubick/rubick_failure_02.vsnd_c?sounds/null.vsnd_c
  850. >>Mod.lst echo/sounds/vo/rubick/rubick_itemcommon_02.vsnd_c?sounds/null.vsnd_c
  851. >>Mod.lst echo/sounds/vo/rubick/rubick_itemrare_01.vsnd_c?sounds/null.vsnd_c
  852. >>Mod.lst echo/sounds/vo/rubick/rubick_lasthit_06.vsnd_c?sounds/null.vsnd_c
  853. >>Mod.lst echo/sounds/vo/rubick/rubick_laugh_06.vsnd_c?sounds/null.vsnd_c
  854. >>Mod.lst echo/sounds/vo/rubick/rubick_levelup_04.vsnd_c?sounds/null.vsnd_c
  855. >>Mod.lst echo/sounds/vo/rubick/rubick_move_12.vsnd_c?sounds/null.vsnd_c
  856. >>Mod.lst echo/sounds/vo/rubick/rubick_rival_07.vsnd_c?sounds/null.vsnd_c
  857. >>Mod.lst echo/sounds/vo/sandking/sand_thanks_03.vsnd_c?sounds/null.vsnd_c
  858. >>Mod.lst echo/sounds/vo/sandking/skg_ability_caustic_04.vsnd_c?sounds/null.vsnd_c
  859. >>Mod.lst echo/sounds/vo/sandking/skg_ability_epicenter_01.vsnd_c?sounds/null.vsnd_c
  860. >>Mod.lst echo/sounds/vo/sandking/skg_kill_03.vsnd_c?sounds/null.vsnd_c
  861. >>Mod.lst echo/sounds/vo/sandking/skg_kill_04.vsnd_c?sounds/null.vsnd_c
  862. >>Mod.lst echo/sounds/vo/sandking/skg_kill_09.vsnd_c?sounds/null.vsnd_c
  863. >>Mod.lst echo/sounds/vo/sandking/skg_laugh_07.vsnd_c?sounds/null.vsnd_c
  864. >>Mod.lst echo/sounds/vo/sandking/skg_win_04.vsnd_c?sounds/null.vsnd_c
  865. >>Mod.lst echo/sounds/vo/shadow_demon/shadow_demon_ability_soul_catcher_01.vsnd_c?sounds/null.vsnd_c
  866. >>Mod.lst echo/sounds/vo/shadow_demon/shadow_demon_attack_03.vsnd_c?sounds/null.vsnd_c
  867. >>Mod.lst echo/sounds/vo/shadow_demon/shadow_demon_attack_13.vsnd_c?sounds/null.vsnd_c
  868. >>Mod.lst echo/sounds/vo/shadow_demon/shadow_demon_doubdam_02.vsnd_c?sounds/null.vsnd_c
  869. >>Mod.lst echo/sounds/vo/shadow_demon/shadow_demon_kill_10.vsnd_c?sounds/null.vsnd_c
  870. >>Mod.lst echo/sounds/vo/shadow_demon/shadow_demon_kill_14.vsnd_c?sounds/null.vsnd_c
  871. >>Mod.lst echo/sounds/vo/shadow_demon/shadow_demon_lasthit_07.vsnd_c?sounds/null.vsnd_c
  872. >>Mod.lst echo/sounds/vo/shadow_demon/shadow_demon_laugh_03.vsnd_c?sounds/null.vsnd_c
  873. >>Mod.lst echo/sounds/vo/shadowshaman/shad_ability_entrap_03.vsnd_c?sounds/null.vsnd_c
  874. >>Mod.lst echo/sounds/vo/shadowshaman/shad_ability_voodoo_06.vsnd_c?sounds/null.vsnd_c
  875. >>Mod.lst echo/sounds/vo/shadowshaman/shad_ability_voodoo_08.vsnd_c?sounds/null.vsnd_c
  876. >>Mod.lst echo/sounds/vo/shadowshaman/shad_attack_07.vsnd_c?sounds/null.vsnd_c
  877. >>Mod.lst echo/sounds/vo/shadowshaman/shad_blink_02.vsnd_c?sounds/null.vsnd_c
  878. >>Mod.lst echo/sounds/vo/shadowshaman/shad_kill_03.vsnd_c?sounds/null.vsnd_c
  879. >>Mod.lst echo/sounds/vo/shadowshaman/shad_level_03.vsnd_c?sounds/null.vsnd_c
  880. >>Mod.lst echo/sounds/vo/shadowshaman/shad_refresh_02.vsnd_c?sounds/null.vsnd_c
  881. >>Mod.lst echo/sounds/vo/shredder/timb_drop_rare_02.vsnd_c?sounds/null.vsnd_c
  882. >>Mod.lst echo/sounds/vo/shredder/timb_happy_05.vsnd_c?sounds/null.vsnd_c
  883. >>Mod.lst echo/sounds/vo/shredder/timb_haste_02.vsnd_c?sounds/null.vsnd_c
  884. >>Mod.lst echo/sounds/vo/shredder/timb_kill_10.vsnd_c?sounds/null.vsnd_c
  885. >>Mod.lst echo/sounds/vo/shredder/timb_laugh_04.vsnd_c?sounds/null.vsnd_c
  886. >>Mod.lst echo/sounds/vo/shredder/timb_rival_08.vsnd_c?sounds/null.vsnd_c
  887. >>Mod.lst echo/sounds/vo/shredder/timb_thanks_03.vsnd_c?sounds/null.vsnd_c
  888. >>Mod.lst echo/sounds/vo/shredder/timb_whirlingdeath_05.vsnd_c?sounds/null.vsnd_c
  889. >>Mod.lst echo/sounds/vo/silencer/silen_ability_curse_02.vsnd_c?sounds/null.vsnd_c
  890. >>Mod.lst echo/sounds/vo/silencer/silen_ability_failure_04.vsnd_c?sounds/null.vsnd_c
  891. >>Mod.lst echo/sounds/vo/silencer/silen_ability_silence_05.vsnd_c?sounds/null.vsnd_c
  892. >>Mod.lst echo/sounds/vo/silencer/silen_death_10.vsnd_c?sounds/null.vsnd_c
  893. >>Mod.lst echo/sounds/vo/silencer/silen_deny_11.vsnd_c?sounds/null.vsnd_c
  894. >>Mod.lst echo/sounds/vo/silencer/silen_laugh_13.vsnd_c?sounds/null.vsnd_c
  895. >>Mod.lst echo/sounds/vo/silencer/silen_level_06.vsnd_c?sounds/null.vsnd_c
  896. >>Mod.lst echo/sounds/vo/silencer/silen_respawn_02.vsnd_c?sounds/null.vsnd_c
  897. >>Mod.lst echo/sounds/vo/skeleton_king/wraith_ally_01.vsnd_c?sounds/null.vsnd_c
  898. >>Mod.lst echo/sounds/vo/skeleton_king/wraith_attack_03.vsnd_c?sounds/null.vsnd_c
  899. >>Mod.lst echo/sounds/vo/skeleton_king/wraith_grunts_08.vsnd_c?sounds/null.vsnd_c
  900. >>Mod.lst echo/sounds/vo/skeleton_king/wraith_items_02.vsnd_c?sounds/null.vsnd_c
  901. >>Mod.lst echo/sounds/vo/skeleton_king/wraith_laugh_04.vsnd_c?sounds/null.vsnd_c
  902. >>Mod.lst echo/sounds/vo/skeleton_king/wraith_move_08.vsnd_c?sounds/null.vsnd_c
  903. >>Mod.lst echo/sounds/vo/skeleton_king/wraith_purch_03.vsnd_c?sounds/null.vsnd_c
  904. >>Mod.lst echo/sounds/vo/skeleton_king/wraith_rare_06.vsnd_c?sounds/null.vsnd_c
  905. >>Mod.lst echo/sounds/vo/skeleton_king/wraith_win_03.vsnd_c?sounds/null.vsnd_c
  906. >>Mod.lst echo/sounds/vo/skywrath_mage/drag_cast_02.vsnd_c?sounds/null.vsnd_c
  907. >>Mod.lst echo/sounds/vo/skywrath_mage/drag_deny_04.vsnd_c?sounds/null.vsnd_c
  908. >>Mod.lst echo/sounds/vo/skywrath_mage/drag_failure_01.vsnd_c?sounds/null.vsnd_c
  909. >>Mod.lst echo/sounds/vo/skywrath_mage/drag_fastres_01.vsnd_c?sounds/null.vsnd_c
  910. >>Mod.lst echo/sounds/vo/skywrath_mage/drag_inthebag_01.vsnd_c?sounds/null.vsnd_c
  911. >>Mod.lst echo/sounds/vo/skywrath_mage/drag_lasthit_07.vsnd_c?sounds/null.vsnd_c
  912. >>Mod.lst echo/sounds/vo/skywrath_mage/drag_laugh_01.vsnd_c?sounds/null.vsnd_c
  913. >>Mod.lst echo/sounds/vo/skywrath_mage/drag_thanks_02.vsnd_c?sounds/null.vsnd_c
  914. >>Mod.lst echo/sounds/vo/slardar/slar_cast_02.vsnd_c?sounds/null.vsnd_c
  915. >>Mod.lst echo/sounds/vo/slardar/slar_deny_05.vsnd_c?sounds/null.vsnd_c
  916. >>Mod.lst echo/sounds/vo/slardar/slar_kill_01.vsnd_c?sounds/null.vsnd_c
  917. >>Mod.lst echo/sounds/vo/slardar/slar_kill_03.vsnd_c?sounds/null.vsnd_c
  918. >>Mod.lst echo/sounds/vo/slardar/slar_kill_07.vsnd_c?sounds/null.vsnd_c
  919. >>Mod.lst echo/sounds/vo/slardar/slar_laugh_05.vsnd_c?sounds/null.vsnd_c
  920. >>Mod.lst echo/sounds/vo/slardar/slar_longdistance_02.vsnd_c?sounds/null.vsnd_c
  921. >>Mod.lst echo/sounds/vo/slardar/slar_win_05.vsnd_c?sounds/null.vsnd_c
  922. >>Mod.lst echo/sounds/vo/slark/slark_cast_03.vsnd_c?sounds/null.vsnd_c
  923. >>Mod.lst echo/sounds/vo/slark/slark_drop_rare_01.vsnd_c?sounds/null.vsnd_c
  924. >>Mod.lst echo/sounds/vo/slark/slark_failure_05.vsnd_c?sounds/null.vsnd_c
  925. >>Mod.lst echo/sounds/vo/slark/slark_happy_07.vsnd_c?sounds/null.vsnd_c
  926. >>Mod.lst echo/sounds/vo/slark/slark_illus_02.vsnd_c?sounds/null.vsnd_c
  927. >>Mod.lst echo/sounds/vo/slark/slark_kill_08.vsnd_c?sounds/null.vsnd_c
  928. >>Mod.lst echo/sounds/vo/slark/slark_laugh_01.vsnd_c?sounds/null.vsnd_c
  929. >>Mod.lst echo/sounds/vo/slark/slark_rival_03.vsnd_c?sounds/null.vsnd_c
  930. >>Mod.lst echo/sounds/vo/sniper/snip_ability_fail_04.vsnd_c?sounds/null.vsnd_c
  931. >>Mod.lst echo/sounds/vo/sniper/snip_ability_shrapnel_03.vsnd_c?sounds/null.vsnd_c
  932. >>Mod.lst echo/sounds/vo/sniper/snip_ability_shrapnel_06.vsnd_c?sounds/null.vsnd_c
  933. >>Mod.lst echo/sounds/vo/sniper/snip_kill_05.vsnd_c?sounds/null.vsnd_c
  934. >>Mod.lst echo/sounds/vo/sniper/snip_laugh_08.vsnd_c?sounds/null.vsnd_c
  935. >>Mod.lst echo/sounds/vo/sniper/snip_level_06.vsnd_c?sounds/null.vsnd_c
  936. >>Mod.lst echo/sounds/vo/sniper/snip_rare_04.vsnd_c?sounds/null.vsnd_c
  937. >>Mod.lst echo/sounds/vo/sniper/snip_tf2_04.vsnd_c?sounds/null.vsnd_c
  938. >>Mod.lst echo/sounds/vo/spectre/spec_ability_haunt_01.vsnd_c?sounds/null.vsnd_c
  939. >>Mod.lst echo/sounds/vo/spectre/spec_death_07.vsnd_c?sounds/null.vsnd_c
  940. >>Mod.lst echo/sounds/vo/spectre/spec_deny_01.vsnd_c?sounds/null.vsnd_c
  941. >>Mod.lst echo/sounds/vo/spectre/spec_doubdam_02.vsnd_c?sounds/null.vsnd_c
  942. >>Mod.lst echo/sounds/vo/spectre/spec_kill_01.vsnd_c?sounds/null.vsnd_c
  943. >>Mod.lst echo/sounds/vo/spectre/spec_kill_02.vsnd_c?sounds/null.vsnd_c
  944. >>Mod.lst echo/sounds/vo/spectre/spec_lasthit_01.vsnd_c?sounds/null.vsnd_c
  945. >>Mod.lst echo/sounds/vo/spectre/spec_laugh_13.vsnd_c?sounds/null.vsnd_c
  946. >>Mod.lst echo/sounds/vo/spirit_breaker/spir_ability_bash_03.vsnd_c?sounds/null.vsnd_c
  947. >>Mod.lst echo/sounds/vo/spirit_breaker/spir_ability_failure_02.vsnd_c?sounds/null.vsnd_c
  948. >>Mod.lst echo/sounds/vo/spirit_breaker/spir_cast_01.vsnd_c?sounds/null.vsnd_c
  949. >>Mod.lst echo/sounds/vo/spirit_breaker/spir_lasthit_07.vsnd_c?sounds/null.vsnd_c
  950. >>Mod.lst echo/sounds/vo/spirit_breaker/spir_laugh_06.vsnd_c?sounds/null.vsnd_c
  951. >>Mod.lst echo/sounds/vo/spirit_breaker/spir_level_07.vsnd_c?sounds/null.vsnd_c
  952. >>Mod.lst echo/sounds/vo/spirit_breaker/spir_lose_05.vsnd_c?sounds/null.vsnd_c
  953. >>Mod.lst echo/sounds/vo/spirit_breaker/spir_purch_03.vsnd_c?sounds/null.vsnd_c
  954. >>Mod.lst echo/sounds/vo/stormspirit/ss_ability_lightning_06.vsnd_c?sounds/null.vsnd_c
  955. >>Mod.lst echo/sounds/vo/stormspirit/ss_ability_static_02.vsnd_c?sounds/null.vsnd_c
  956. >>Mod.lst echo/sounds/vo/stormspirit/ss_attack_06.vsnd_c?sounds/null.vsnd_c
  957. >>Mod.lst echo/sounds/vo/stormspirit/ss_kill_02.vsnd_c?sounds/null.vsnd_c
  958. >>Mod.lst echo/sounds/vo/stormspirit/ss_kill_03.vsnd_c?sounds/null.vsnd_c
  959. >>Mod.lst echo/sounds/vo/stormspirit/ss_lasthit_04.vsnd_c?sounds/null.vsnd_c
  960. >>Mod.lst echo/sounds/vo/stormspirit/ss_laugh_06.vsnd_c?sounds/null.vsnd_c
  961. >>Mod.lst echo/sounds/vo/stormspirit/ss_win_03.vsnd_c?sounds/null.vsnd_c
  962. >>Mod.lst echo/sounds/vo/sven/sven_ability_teleport_01.vsnd_c?sounds/null.vsnd_c
  963. >>Mod.lst echo/sounds/vo/sven/sven_kill_02.vsnd_c?sounds/null.vsnd_c
  964. >>Mod.lst echo/sounds/vo/sven/sven_kill_05.vsnd_c?sounds/null.vsnd_c
  965. >>Mod.lst echo/sounds/vo/sven/sven_laugh_11.vsnd_c?sounds/null.vsnd_c
  966. >>Mod.lst echo/sounds/vo/sven/sven_rare_07.vsnd_c?sounds/null.vsnd_c
  967. >>Mod.lst echo/sounds/vo/sven/sven_respawn_02.vsnd_c?sounds/null.vsnd_c
  968. >>Mod.lst echo/sounds/vo/sven/sven_thanks_01.vsnd_c?sounds/null.vsnd_c
  969. >>Mod.lst echo/sounds/vo/sven/sven_win_04.vsnd_c?sounds/null.vsnd_c
  970. >>Mod.lst echo/sounds/vo/techies/tech_ally_03.vsnd_c?sounds/null.vsnd_c
  971. >>Mod.lst echo/sounds/vo/techies/tech_detonatekill_02.vsnd_c?sounds/null.vsnd_c
  972. >>Mod.lst echo/sounds/vo/techies/tech_failure_06.vsnd_c?sounds/null.vsnd_c
  973. >>Mod.lst echo/sounds/vo/techies/tech_kill_07.vsnd_c?sounds/null.vsnd_c
  974. >>Mod.lst echo/sounds/vo/techies/tech_kill_23.vsnd_c?sounds/null.vsnd_c
  975. >>Mod.lst echo/sounds/vo/techies/tech_settrap_08.vsnd_c?sounds/null.vsnd_c
  976. >>Mod.lst echo/sounds/vo/techies/tech_suicidesquad_09.vsnd_c?sounds/null.vsnd_c
  977. >>Mod.lst echo/sounds/vo/techies/tech_trapgoesoff_10.vsnd_c?sounds/null.vsnd_c
  978. >>Mod.lst echo/sounds/vo/templar_assassin/temp_kill_10.vsnd_c?sounds/null.vsnd_c
  979. >>Mod.lst echo/sounds/vo/templar_assassin/temp_kill_12.vsnd_c?sounds/null.vsnd_c
  980. >>Mod.lst echo/sounds/vo/templar_assassin/temp_lasthit_06.vsnd_c?sounds/null.vsnd_c
  981. >>Mod.lst echo/sounds/vo/templar_assassin/temp_laugh_02.vsnd_c?sounds/null.vsnd_c
  982. >>Mod.lst echo/sounds/vo/templar_assassin/temp_levelup_01.vsnd_c?sounds/null.vsnd_c
  983. >>Mod.lst echo/sounds/vo/templar_assassin/temp_psionictrap_04.vsnd_c?sounds/null.vsnd_c
  984. >>Mod.lst echo/sounds/vo/templar_assassin/temp_psionictrap_06.vsnd_c?sounds/null.vsnd_c
  985. >>Mod.lst echo/sounds/vo/templar_assassin/temp_refraction_04.vsnd_c?sounds/null.vsnd_c
  986. >>Mod.lst echo/sounds/vo/terrorblade/terr_conjureimage_03.vsnd_c?sounds/null.vsnd_c
  987. >>Mod.lst echo/sounds/vo/terrorblade/terr_doubdam_04.vsnd_c?sounds/null.vsnd_c
  988. >>Mod.lst echo/sounds/vo/terrorblade/terr_failure_05.vsnd_c?sounds/null.vsnd_c
  989. >>Mod.lst echo/sounds/vo/terrorblade/terr_kill_14.vsnd_c?sounds/null.vsnd_c
  990. >>Mod.lst echo/sounds/vo/terrorblade/terr_laugh_07.vsnd_c?sounds/null.vsnd_c
  991. >>Mod.lst echo/sounds/vo/terrorblade/terr_purch_02.vsnd_c?sounds/null.vsnd_c
  992. >>Mod.lst echo/sounds/vo/terrorblade/terr_reflection_06.vsnd_c?sounds/null.vsnd_c
  993. >>Mod.lst echo/sounds/vo/terrorblade/terr_sunder_03.vsnd_c?sounds/null.vsnd_c
  994. >>Mod.lst echo/sounds/vo/tidehunter/tide_ability_ravage_02.vsnd_c?sounds/null.vsnd_c
  995. >>Mod.lst echo/sounds/vo/tidehunter/tide_battlebegins_02.vsnd_c?sounds/null.vsnd_c
  996. >>Mod.lst echo/sounds/vo/tidehunter/tide_bottle_01.vsnd_c?sounds/null.vsnd_c
  997. >>Mod.lst echo/sounds/vo/tidehunter/tide_kill_12.vsnd_c?sounds/null.vsnd_c
  998. >>Mod.lst echo/sounds/vo/tidehunter/tide_laugh_05.vsnd_c?sounds/null.vsnd_c
  999. >>Mod.lst echo/sounds/vo/tidehunter/tide_level_18.vsnd_c?sounds/null.vsnd_c
  1000. >>Mod.lst echo/sounds/vo/tidehunter/tide_rare_01.vsnd_c?sounds/null.vsnd_c
  1001. >>Mod.lst echo/sounds/vo/tidehunter/tide_rival_25.vsnd_c?sounds/null.vsnd_c
  1002. >>Mod.lst echo/sounds/vo/tinker/tink_ability_laser_01.vsnd_c?sounds/null.vsnd_c
  1003. >>Mod.lst echo/sounds/vo/tinker/tink_ability_laser_03.vsnd_c?sounds/null.vsnd_c
  1004. >>Mod.lst echo/sounds/vo/tinker/tink_kill_03.vsnd_c?sounds/null.vsnd_c
  1005. >>Mod.lst echo/sounds/vo/tinker/tink_laugh_10.vsnd_c?sounds/null.vsnd_c
  1006. >>Mod.lst echo/sounds/vo/tinker/tink_levelup_06.vsnd_c?sounds/null.vsnd_c
  1007. >>Mod.lst echo/sounds/vo/tinker/tink_respawn_01.vsnd_c?sounds/null.vsnd_c
  1008. >>Mod.lst echo/sounds/vo/tinker/tink_respawn_03.vsnd_c?sounds/null.vsnd_c
  1009. >>Mod.lst echo/sounds/vo/tinker/tink_thanks_03.vsnd_c?sounds/null.vsnd_c
  1010. >>Mod.lst echo/sounds/vo/tiny/tiny_ability_toss_07.vsnd_c?sounds/null.vsnd_c
  1011. >>Mod.lst echo/sounds/vo/tiny/tiny_ability_toss_11.vsnd_c?sounds/null.vsnd_c
  1012. >>Mod.lst echo/sounds/vo/tiny/tiny_attack_03.vsnd_c?sounds/null.vsnd_c
  1013. >>Mod.lst echo/sounds/vo/tiny/tiny_attack_06.vsnd_c?sounds/null.vsnd_c
  1014. >>Mod.lst echo/sounds/vo/tiny/tiny_kill_09.vsnd_c?sounds/null.vsnd_c
  1015. >>Mod.lst echo/sounds/vo/tiny/tiny_laugh_05.vsnd_c?sounds/null.vsnd_c
  1016. >>Mod.lst echo/sounds/vo/tiny/tiny_level_02.vsnd_c?sounds/null.vsnd_c
  1017. >>Mod.lst echo/sounds/vo/tiny/tiny_spawn_03.vsnd_c?sounds/null.vsnd_c
  1018. >>Mod.lst echo/sounds/vo/treant/treant_ability_naturesguise_06.vsnd_c?sounds/null.vsnd_c
  1019. >>Mod.lst echo/sounds/vo/treant/treant_attack_07.vsnd_c?sounds/null.vsnd_c
  1020. >>Mod.lst echo/sounds/vo/treant/treant_cast_02.vsnd_c?sounds/null.vsnd_c
  1021. >>Mod.lst echo/sounds/vo/treant/treant_failure_01.vsnd_c?sounds/null.vsnd_c
  1022. >>Mod.lst echo/sounds/vo/treant/treant_failure_03.vsnd_c?sounds/null.vsnd_c
  1023. >>Mod.lst echo/sounds/vo/treant/treant_freakout.vsnd_c?sounds/null.vsnd_c
  1024. >>Mod.lst echo/sounds/vo/treant/treant_kill_05.vsnd_c?sounds/null.vsnd_c
  1025. >>Mod.lst echo/sounds/vo/treant/treant_laugh_07.vsnd_c?sounds/null.vsnd_c
  1026. >>Mod.lst echo/sounds/vo/troll_warlord/troll_ally_08.vsnd_c?sounds/null.vsnd_c
  1027. >>Mod.lst echo/sounds/vo/troll_warlord/troll_ally_11.vsnd_c?sounds/null.vsnd_c
  1028. >>Mod.lst echo/sounds/vo/troll_warlord/troll_battletrance_05.vsnd_c?sounds/null.vsnd_c
  1029. >>Mod.lst echo/sounds/vo/troll_warlord/troll_death_05.vsnd_c?sounds/null.vsnd_c
  1030. >>Mod.lst echo/sounds/vo/troll_warlord/troll_deny_09.vsnd_c?sounds/null.vsnd_c
  1031. >>Mod.lst echo/sounds/vo/troll_warlord/troll_kill_03.vsnd_c?sounds/null.vsnd_c
  1032. >>Mod.lst echo/sounds/vo/troll_warlord/troll_laugh_05.vsnd_c?sounds/null.vsnd_c
  1033. >>Mod.lst echo/sounds/vo/troll_warlord/troll_unknown_09.vsnd_c?sounds/null.vsnd_c
  1034. >>Mod.lst echo/sounds/vo/tusk/tusk_kill_22.vsnd_c?sounds/null.vsnd_c
  1035. >>Mod.lst echo/sounds/vo/tusk/tusk_kill_26.vsnd_c?sounds/null.vsnd_c
  1036. >>Mod.lst echo/sounds/vo/tusk/tusk_laugh_06.vsnd_c?sounds/null.vsnd_c
  1037. >>Mod.lst echo/sounds/vo/tusk/tusk_move_26.vsnd_c?sounds/null.vsnd_c
  1038. >>Mod.lst echo/sounds/vo/tusk/tusk_rival_19.vsnd_c?sounds/null.vsnd_c
  1039. >>Mod.lst echo/sounds/vo/tusk/tusk_snowball_17.vsnd_c?sounds/null.vsnd_c
  1040. >>Mod.lst echo/sounds/vo/tusk/tusk_snowball_23.vsnd_c?sounds/null.vsnd_c
  1041. >>Mod.lst echo/sounds/vo/tusk/tusk_snowball_24.vsnd_c?sounds/null.vsnd_c
  1042. >>Mod.lst echo/sounds/vo/undying/undying_deny_14.vsnd_c?sounds/null.vsnd_c
  1043. >>Mod.lst echo/sounds/vo/undying/undying_gummy_vit_01.vsnd_c?sounds/null.vsnd_c
  1044. >>Mod.lst echo/sounds/vo/undying/undying_kill_09.vsnd_c?sounds/null.vsnd_c
  1045. >>Mod.lst echo/sounds/vo/undying/undying_levelup_10.vsnd_c?sounds/null.vsnd_c
  1046. >>Mod.lst echo/sounds/vo/undying/undying_respawn_03.vsnd_c?sounds/null.vsnd_c
  1047. >>Mod.lst echo/sounds/vo/undying/undying_respawn_05.vsnd_c?sounds/null.vsnd_c
  1048. >>Mod.lst echo/sounds/vo/undying/undying_thanks_04.vsnd_c?sounds/null.vsnd_c
  1049. >>Mod.lst echo/sounds/vo/ursa/ursa_failure_02.vsnd_c?sounds/null.vsnd_c
  1050. >>Mod.lst echo/sounds/vo/ursa/ursa_kill_07.vsnd_c?sounds/null.vsnd_c
  1051. >>Mod.lst echo/sounds/vo/ursa/ursa_kill_10.vsnd_c?sounds/null.vsnd_c
  1052. >>Mod.lst echo/sounds/vo/ursa/ursa_lasthit_08.vsnd_c?sounds/null.vsnd_c
  1053. >>Mod.lst echo/sounds/vo/ursa/ursa_laugh_20.vsnd_c?sounds/null.vsnd_c
  1054. >>Mod.lst echo/sounds/vo/ursa/ursa_levelup_07.vsnd_c?sounds/null.vsnd_c
  1055. >>Mod.lst echo/sounds/vo/ursa/ursa_respawn_12.vsnd_c?sounds/null.vsnd_c
  1056. >>Mod.lst echo/sounds/vo/ursa/ursa_spawn_05.vsnd_c?sounds/null.vsnd_c
  1057. >>Mod.lst echo/sounds/vo/vengefulspirit/vng_deny_03.vsnd_c?sounds/null.vsnd_c
  1058. >>Mod.lst echo/sounds/vo/vengefulspirit/vng_deny_11.vsnd_c?sounds/null.vsnd_c
  1059. >>Mod.lst echo/sounds/vo/vengefulspirit/vng_kill_01.vsnd_c?sounds/null.vsnd_c
  1060. >>Mod.lst echo/sounds/vo/vengefulspirit/vng_rare_05.vsnd_c?sounds/null.vsnd_c
  1061. >>Mod.lst echo/sounds/vo/vengefulspirit/vng_rare_09.vsnd_c?sounds/null.vsnd_c
  1062. >>Mod.lst echo/sounds/vo/vengefulspirit/vng_rare_10.vsnd_c?sounds/null.vsnd_c
  1063. >>Mod.lst echo/sounds/vo/vengefulspirit/vng_regen_02.vsnd_c?sounds/null.vsnd_c
  1064. >>Mod.lst echo/sounds/vo/vengefulspirit/vng_respawn_06.vsnd_c?sounds/null.vsnd_c
  1065. >>Mod.lst echo/sounds/vo/venomancer/venm_ability_fail_07.vsnd_c?sounds/null.vsnd_c
  1066. >>Mod.lst echo/sounds/vo/venomancer/venm_ability_ward_02.vsnd_c?sounds/null.vsnd_c
  1067. >>Mod.lst echo/sounds/vo/venomancer/venm_attack_11.vsnd_c?sounds/null.vsnd_c
  1068. >>Mod.lst echo/sounds/vo/venomancer/venm_cast_02.vsnd_c?sounds/null.vsnd_c
  1069. >>Mod.lst echo/sounds/vo/venomancer/venm_kill_03.vsnd_c?sounds/null.vsnd_c
  1070. >>Mod.lst echo/sounds/vo/venomancer/venm_laugh_02.vsnd_c?sounds/null.vsnd_c
  1071. >>Mod.lst echo/sounds/vo/venomancer/venm_purch_01.vsnd_c?sounds/null.vsnd_c
  1072. >>Mod.lst echo/sounds/vo/venomancer/venm_rosh_04.vsnd_c?sounds/null.vsnd_c
  1073. >>Mod.lst echo/sounds/vo/viper/vipe_ability_viprstrik_02.vsnd_c?sounds/null.vsnd_c
  1074. >>Mod.lst echo/sounds/vo/viper/vipe_deny_06.vsnd_c?sounds/null.vsnd_c
  1075. >>Mod.lst echo/sounds/vo/viper/vipe_kill_03.vsnd_c?sounds/null.vsnd_c
  1076. >>Mod.lst echo/sounds/vo/viper/vipe_lasthit_05.vsnd_c?sounds/null.vsnd_c
  1077. >>Mod.lst echo/sounds/vo/viper/vipe_laugh_06.vsnd_c?sounds/null.vsnd_c
  1078. >>Mod.lst echo/sounds/vo/viper/vipe_move_14.vsnd_c?sounds/null.vsnd_c
  1079. >>Mod.lst echo/sounds/vo/viper/vipe_rare_03.vsnd_c?sounds/null.vsnd_c
  1080. >>Mod.lst echo/sounds/vo/viper/vipe_respawn_07.vsnd_c?sounds/null.vsnd_c
  1081. >>Mod.lst echo/sounds/vo/visage/visa_failure_01.vsnd_c?sounds/null.vsnd_c
  1082. >>Mod.lst echo/sounds/vo/visage/visa_happy_03.vsnd_c?sounds/null.vsnd_c
  1083. >>Mod.lst echo/sounds/vo/visage/visa_happy_07.vsnd_c?sounds/null.vsnd_c
  1084. >>Mod.lst echo/sounds/vo/visage/visa_kill_13.vsnd_c?sounds/null.vsnd_c
  1085. >>Mod.lst echo/sounds/vo/visage/visa_laugh_14.vsnd_c?sounds/null.vsnd_c
  1086. >>Mod.lst echo/sounds/vo/visage/visa_rival_02.vsnd_c?sounds/null.vsnd_c
  1087. >>Mod.lst echo/sounds/vo/visage/visa_rival_09.vsnd_c?sounds/null.vsnd_c
  1088. >>Mod.lst echo/sounds/vo/visage/visa_spawn_05.vsnd_c?sounds/null.vsnd_c
  1089. >>Mod.lst echo/sounds/vo/warlock/warl_ability_reign_07.vsnd_c?sounds/null.vsnd_c
  1090. >>Mod.lst echo/sounds/vo/warlock/warl_defusal_04.vsnd_c?sounds/null.vsnd_c
  1091. >>Mod.lst echo/sounds/vo/warlock/warl_doubdemon_06.vsnd_c?sounds/null.vsnd_c
  1092. >>Mod.lst echo/sounds/vo/warlock/warl_incant_18.vsnd_c?sounds/null.vsnd_c
  1093. >>Mod.lst echo/sounds/vo/warlock/warl_kill_05.vsnd_c?sounds/null.vsnd_c
  1094. >>Mod.lst echo/sounds/vo/warlock/warl_kill_07.vsnd_c?sounds/null.vsnd_c
  1095. >>Mod.lst echo/sounds/vo/warlock/warl_lasthit_02.vsnd_c?sounds/null.vsnd_c
  1096. >>Mod.lst echo/sounds/vo/warlock/warl_laugh_06.vsnd_c?sounds/null.vsnd_c
  1097. >>Mod.lst echo/sounds/vo/weaver/weav_ability_timelap_05.vsnd_c?sounds/null.vsnd_c
  1098. >>Mod.lst echo/sounds/vo/weaver/weav_fastres_01.vsnd_c?sounds/null.vsnd_c
  1099. >>Mod.lst echo/sounds/vo/weaver/weav_kill_03.vsnd_c?sounds/null.vsnd_c
  1100. >>Mod.lst echo/sounds/vo/weaver/weav_kill_07.vsnd_c?sounds/null.vsnd_c
  1101. >>Mod.lst echo/sounds/vo/weaver/weav_lasthit_07.vsnd_c?sounds/null.vsnd_c
  1102. >>Mod.lst echo/sounds/vo/weaver/weav_laugh_04.vsnd_c?sounds/null.vsnd_c
  1103. >>Mod.lst echo/sounds/vo/weaver/weav_respawn_02.vsnd_c?sounds/null.vsnd_c
  1104. >>Mod.lst echo/sounds/vo/weaver/weav_win_03.vsnd_c?sounds/null.vsnd_c
  1105. >>Mod.lst echo/sounds/vo/windrunner/wind_ability_shackleshot_01.vsnd_c?sounds/null.vsnd_c
  1106. >>Mod.lst echo/sounds/vo/windrunner/wind_attack_04.vsnd_c?sounds/null.vsnd_c
  1107. >>Mod.lst echo/sounds/vo/windrunner/wind_deny_06.vsnd_c?sounds/null.vsnd_c
  1108. >>Mod.lst echo/sounds/vo/windrunner/wind_kill_06.vsnd_c?sounds/null.vsnd_c
  1109. >>Mod.lst echo/sounds/vo/windrunner/wind_kill_11.vsnd_c?sounds/null.vsnd_c
  1110. >>Mod.lst echo/sounds/vo/windrunner/wind_lasthit_04.vsnd_c?sounds/null.vsnd_c
  1111. >>Mod.lst echo/sounds/vo/windrunner/wind_laugh_08.vsnd_c?sounds/null.vsnd_c
  1112. >>Mod.lst echo/sounds/vo/windrunner/wind_lose_06.vsnd_c?sounds/null.vsnd_c
  1113. >>Mod.lst echo/sounds/vo/winter_wyvern/winwyv_death_09.vsnd_c?sounds/null.vsnd_c
  1114. >>Mod.lst echo/sounds/vo/winter_wyvern/winwyv_deny_08.vsnd_c?sounds/null.vsnd_c
  1115. >>Mod.lst echo/sounds/vo/winter_wyvern/winwyv_kill_03.vsnd_c?sounds/null.vsnd_c
  1116. >>Mod.lst echo/sounds/vo/winter_wyvern/winwyv_lasthit_07.vsnd_c?sounds/null.vsnd_c
  1117. >>Mod.lst echo/sounds/vo/winter_wyvern/winwyv_laugh_03.vsnd_c?sounds/null.vsnd_c
  1118. >>Mod.lst echo/sounds/vo/winter_wyvern/winwyv_levelup_08.vsnd_c?sounds/null.vsnd_c
  1119. >>Mod.lst echo/sounds/vo/winter_wyvern/winwyv_thanks_01.vsnd_c?sounds/null.vsnd_c
  1120. >>Mod.lst echo/sounds/vo/winter_wyvern/winwyv_winterscurse_11.vsnd_c?sounds/null.vsnd_c
  1121. >>Mod.lst echo/sounds/vo/wisp/ally.vsnd_c?sounds/null.vsnd_c
  1122. >>Mod.lst echo/sounds/vo/wisp/battlebegins.vsnd_c?sounds/null.vsnd_c
  1123. >>Mod.lst echo/sounds/vo/wisp/deny.vsnd_c?sounds/null.vsnd_c
  1124. >>Mod.lst echo/sounds/vo/wisp/laugh.vsnd_c?sounds/null.vsnd_c
  1125. >>Mod.lst echo/sounds/vo/wisp/lose.vsnd_c?sounds/null.vsnd_c
  1126. >>Mod.lst echo/sounds/vo/wisp/no_mana_not_yet01.vsnd_c?sounds/null.vsnd_c
  1127. >>Mod.lst echo/sounds/vo/wisp/thanks.vsnd_c?sounds/null.vsnd_c
  1128. >>Mod.lst echo/sounds/vo/wisp/win.vsnd_c?sounds/null.vsnd_c
  1129. >>Mod.lst echo/sounds/vo/witchdoctor/wdoc_ability_cask_03.vsnd_c?sounds/null.vsnd_c
  1130. >>Mod.lst echo/sounds/vo/witchdoctor/wdoc_kill_11.vsnd_c?sounds/null.vsnd_c
  1131. >>Mod.lst echo/sounds/vo/witchdoctor/wdoc_killspecial_01.vsnd_c?sounds/null.vsnd_c
  1132. >>Mod.lst echo/sounds/vo/witchdoctor/wdoc_killspecial_03.vsnd_c?sounds/null.vsnd_c
  1133. >>Mod.lst echo/sounds/vo/witchdoctor/wdoc_laugh_02.vsnd_c?sounds/null.vsnd_c
  1134. >>Mod.lst echo/sounds/vo/witchdoctor/wdoc_laugh_03.vsnd_c?sounds/null.vsnd_c
  1135. >>Mod.lst echo/sounds/vo/witchdoctor/wdoc_level_08.vsnd_c?sounds/null.vsnd_c
  1136. >>Mod.lst echo/sounds/vo/witchdoctor/wdoc_move_06.vsnd_c?sounds/null.vsnd_c
  1137. >>Mod.lst echo/sounds/vo/zuus/zuus_ability_thunder_01.vsnd_c?sounds/null.vsnd_c
  1138. >>Mod.lst echo/sounds/vo/zuus/zuus_cast_02.vsnd_c?sounds/null.vsnd_c
  1139. >>Mod.lst echo/sounds/vo/zuus/zuus_death_07.vsnd_c?sounds/null.vsnd_c
  1140. >>Mod.lst echo/sounds/vo/zuus/zuus_kill_05.vsnd_c?sounds/null.vsnd_c
  1141. >>Mod.lst echo/sounds/vo/zuus/zuus_laugh_01.vsnd_c?sounds/null.vsnd_c
  1142. >>Mod.lst echo/sounds/vo/zuus/zuus_level_03.vsnd_c?sounds/null.vsnd_c
  1143. >>Mod.lst echo/sounds/vo/zuus/zuus_rival_13.vsnd_c?sounds/null.vsnd_c
  1144. >>Mod.lst echo/sounds/vo/zuus/zuus_win_05.vsnd_c?sounds/null.vsnd_c
  1145. ::------------------------------------------------------------------------------------------------------------------------------
  1146.  
  1147. :: Detect DOTA 2 path
  1148. call :reg_query STEAMPATH "HKCU\SOFTWARE\Valve\Steam" "SteamPath"
  1149. set "STEAMDATA=" & if defined STEAMPATH for %%# in ("%STEAMPATH%") do set "STEAMPATH=%%~dpnx#"
  1150. if not exist "%STEAMPATH%\Steam.exe" call :end ! Cannot find SteamPath in registry
  1151. call :reg_query ACTIVEUSER "HKCU\SOFTWARE\Valve\Steam\ActiveProcess" "ActiveUser" & set/a "STEAMID=ACTIVEUSER" >nul 2>nul
  1152. if exist "%STEAMPATH%\userdata\%STEAMID%\config\localconfig.vdf" set "STEAMDATA=%STEAMPATH%\userdata\%STEAMID%"
  1153. if not defined STEAMDATA for /f "delims=" %%# in ('dir "%STEAMPATH%\userdata" /b/o:d/t:w/s 2^>nul') do set "ACTIVEUSER=%%~dp#"
  1154. if not defined STEAMDATA for /f "delims=\" %%# in ("%ACTIVEUSER:*\userdata\=%") do set "STEAMID=%%#"
  1155. if exist "%STEAMPATH%\userdata\%STEAMID%\config\localconfig.vdf" set "STEAMDATA=%STEAMPATH%\userdata\%STEAMID%"
  1156. set "libfilter=LibraryFolders { TimeNextStatsReport ContentStatsID }"
  1157. if not exist "%STEAMPATH%\SteamApps\libraryfolders.vdf" call :end ! Cannot find "%STEAMPATH%\SteamApps\libraryfolders.vdf"
  1158. for /f usebackq^ delims^=^"^ tokens^=4 %%s in (`findstr /v "%libfilter%" "%STEAMPATH%\SteamApps\libraryfolders.vdf"`) do (
  1159. if exist "%%s\steamapps\appmanifest_570.acf" if exist "%%s\steamapps\common\dota 2 beta\game\dota\dota.fgd" set "libfs=%%s")
  1160. set "STEAMAPPS=%STEAMPATH%\steamapps" & if defined libfs set "STEAMAPPS=%libfs:\\=\%\steamapps"
  1161. if not exist "%STEAMAPPS%\common\dota 2 beta\game\dota\maps\dota.vpk" call :end ! Missing "%STEAMAPPS%\common\dota 2 beta\game"
  1162. set "DOTA=%STEAMAPPS%\common\dota 2 beta\game" & set "CONTENT=%STEAMAPPS%\common\dota 2 beta\content"
  1163.  
  1164. :: Compile VPKMOD tool if not already present (needs net framework 3.5+ or 4.0+ on Windows 7)
  1165. for /f "tokens=* delims=" %%v in ('dir /b /s /a:-d /o:-n "%Windir%\Microsoft.NET\Framework\*csc.exe"') do set "csc=%%v"
  1166. if not exist vpkmod.exe "%csc%" /out:vpkmod.exe /target:exe /platform:anycpu /optimize /nologo "%~f0"
  1167. if not exist vpkmod.exe echo [ERROR] Failed compiling c# snippet! .net framework 3.5+ compiler needed &timeout /t -1 & exit /b
  1168.  
  1169. : Clear previous mod
  1170. del /f /q "%DOTA%\dota_MOD\pak01_dir.vpk" >nul 2>nul
  1171.  
  1172. : Force-close dota2.exe
  1173. taskkill /f /im dota2.exe /t >nul 2>nul & timeout /t 2 >nul
  1174.  
  1175. :: In-memory file replacement mod using nothing but unaltered Valve authored files (custom vpkmod tool exclusive feature)
  1176. vpkmod -i "%DOTA%\dota\pak01_dir.vpk" -o "%DOTA%\dota_MOD\pak01_dir.vpk" -m "Mod.lst" &rem -s
  1177.  
  1178. : Done!
  1179. if not exist "%DOTA%\dota_MOD\pak01_dir.vpk" (echo ERROR :^() else echo SUCCESS! To use, add launch option: -language MOD
  1180. timeout /t -1
  1181. exit/b
  1182.  
  1183. :reg_query [USAGE] call :reg_query ResultVar "HKCU\KeyName" "ValueName"
  1184. (for /f "skip=2 delims=" %%s in ('reg query "%~2" /v "%~3" /z 2^>nul') do set ".=%%s" & call set "%~1=%%.:*)    =%%") & exit/b
  1185.  
  1186. :end Message[prefix with ! to signal failure]
  1187. (echo. & echo %* & if "%~1"=="!" color 0c) & pause>nul & exit
  1188.  
  1189. exit/b VPKMOD C# source */
  1190. using System;
  1191. using System.Collections.Generic;
  1192. using System.Diagnostics;
  1193. using System.Globalization;
  1194. using System.IO;
  1195. using System.Linq;
  1196. using System.Reflection;
  1197. using System.Runtime.Serialization;
  1198. using System.Security.Cryptography;
  1199. using System.Security.Permissions;
  1200. using System.Text;
  1201. using SteamDatabase.ValvePak;
  1202. using VPKMOD;
  1203.  
  1204. [assembly:AssemblyTitle("VPKMOD")]
  1205. [assembly:AssemblyCompanyAttribute("AveYo")]
  1206. [assembly:AssemblyCopyright("AveYo / SteamDatabase")]
  1207. [assembly:AssemblyVersionAttribute("2019.03.19")]
  1208.  
  1209. namespace SteamDatabase.ValvePak
  1210. {
  1211.     // [assembly: AssemblyTitle("Valve Pak Library")]
  1212.     // [assembly: AssemblyDescription("Library to work with Valve Pak archives")]
  1213.     // [assembly: AssemblyCompany("SteamDatabase")]
  1214.     // [assembly: AssemblyProduct("ValvePak")]
  1215.     // [assembly: AssemblyCopyright("Copyright ┬« SteamDatabase 2016")]
  1216.     // <auto-generated/>
  1217.     // Not actually auto generated, but this makes StyleCop ignore this file
  1218.     ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  1219.     // PackageEntry.cs
  1220.     ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  1221.     public class PackageEntry
  1222.     {
  1223.         /// <summary>
  1224.         /// Gets or sets file name of this entry.
  1225.         /// </summary>
  1226.         public string FileName { get; set; }
  1227.  
  1228.         /// <summary>
  1229.         /// Gets or sets the name of the directory this file is in.
  1230.         /// '/' is always used as a dictionary separator in Valve's implementation.
  1231.         /// Directory names are also always lower cased in Valve's implementation.
  1232.         /// </summary>
  1233.         public string DirectoryName { get; set; }
  1234.  
  1235.         /// <summary>
  1236.         /// Gets or sets the file extension.
  1237.         /// If the file has no extension, this is an empty string.
  1238.         /// </summary>
  1239.         public string TypeName { get; set; }
  1240.  
  1241.         /// <summary>
  1242.         /// Gets or sets the CRC32 checksum of this entry.
  1243.         /// </summary>
  1244.         public uint CRC32 { get; set; }
  1245.  
  1246.         /// <summary>
  1247.         /// Gets or sets the length in bytes.
  1248.         /// </summary>
  1249.         public uint Length { get; set; }
  1250.  
  1251.         /// <summary>
  1252.         /// Gets or sets the offset in the package.
  1253.         /// </summary>
  1254.         public uint Offset { get; set; }
  1255.  
  1256.         /// <summary>
  1257.         /// Gets or sets which archive this entry is in.
  1258.         /// </summary>
  1259.         public ushort ArchiveIndex { get; set; }
  1260.  
  1261.         /// <summary>
  1262.         /// Gets the length in bytes by adding Length and length of SmallData.
  1263.         /// </summary>
  1264.         public uint TotalLength
  1265.         {
  1266.             get
  1267.             {
  1268.                 var totalLength = Length;
  1269.  
  1270.                 if (SmallData != null)
  1271.                 {
  1272.                     totalLength += (uint)SmallData.Length;
  1273.                 }
  1274.  
  1275.                 return totalLength;
  1276.             }
  1277.         }
  1278.  
  1279.         /// <summary>
  1280.         /// Gets or sets the preloaded bytes.
  1281.         /// </summary>
  1282.         public byte[] SmallData { get; set; }
  1283.  
  1284.         /// <summary>
  1285.         /// Returns the file name and extension.
  1286.         /// </summary>
  1287.         /// <returns>File name and extension.</returns>
  1288.         public string GetFileName()
  1289.         {
  1290.             var fileName = FileName;
  1291.  
  1292.             if (TypeName != string.Empty)
  1293.             {
  1294.                 fileName += "." + TypeName;
  1295.             }
  1296.  
  1297.             return fileName;
  1298.         }
  1299.  
  1300.         /// <summary>
  1301.         /// Returns the absolute path of the file in the package.
  1302.         /// </summary>
  1303.         /// <returns>Absolute path.</returns>
  1304.         public string GetFullPath()
  1305.         {
  1306.             if (DirectoryName == null)
  1307.             {
  1308.                 return GetFileName();
  1309.             }
  1310.  
  1311.             return DirectoryName + Package.DirectorySeparatorChar + GetFileName();
  1312.         }
  1313.  
  1314.         public override string ToString()
  1315.         {
  1316.             //return $"{GetFullPath()} crc=0x{CRC32:x2} metadatasz={SmallData.Length} fnumber={ArchiveIndex} ofs=0x{Offset:x2} sz={Length}";
  1317.             return String.Format("{0} crc=0x{1:x2} metadatasz={2} fnumber={3} ofs=0x{4:x2} sz={5}", GetFullPath(), CRC32, SmallData.Length, ArchiveIndex, Offset, Length);
  1318.             //return ""+GetFullPath()+" crc=0x"+CRC32+" metadatasz="+SmallData.Length+" fnumber="+ArchiveIndex+" ofs=0x"+Offset+" sz="+Length;
  1319.         }
  1320.     }
  1321.     ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  1322.     // ArchiveMD5SectionEntry.cs
  1323.     ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  1324.     /// <summary>
  1325.     /// VPK_ArchiveMD5SectionEntry
  1326.     /// </summary>
  1327.     public class ArchiveMD5SectionEntry
  1328.     {
  1329.         /// <summary>
  1330.         /// Gets or sets the CRC32 checksum of this entry.
  1331.         /// </summary>
  1332.         public uint ArchiveIndex { get; set; }
  1333.  
  1334.         /// <summary>
  1335.         /// Gets or sets the offset in the package.
  1336.         /// </summary>
  1337.         public uint Offset { get; set; }
  1338.  
  1339.         /// <summary>
  1340.         /// Gets or sets the length in bytes.
  1341.         /// </summary>
  1342.         public uint Length { get; set; }
  1343.  
  1344.         /// <summary>
  1345.         /// Gets or sets the expected Checksum checksum.
  1346.         /// </summary>
  1347.         public byte[] Checksum { get; set; }
  1348.     }
  1349.     ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  1350.     // StreamHelpers.cs
  1351.     ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  1352.     internal static class StreamHelpers
  1353.     {
  1354.         /// <summary>
  1355.         /// Reads a null terminated string.
  1356.         /// </summary>
  1357.         /// <returns>String.</returns>
  1358.         /// <param name="stream">Stream.</param>
  1359.         /// <param name="encoding">Encoding.</param>
  1360.         public static string ReadNullTermString(this BinaryReader stream, Encoding encoding)
  1361.         {
  1362.             var characterSize = encoding.GetByteCount("e");
  1363.  
  1364.             using (var ms = new MemoryStream())
  1365.             {
  1366.                 while (true)
  1367.                 {
  1368.                     var data = new byte[characterSize];
  1369.                     stream.Read(data, 0, characterSize);
  1370.  
  1371.                     if (encoding.GetString(data, 0, characterSize) == "\0")
  1372.                     {
  1373.                         break;
  1374.                     }
  1375.  
  1376.                     ms.Write(data, 0, data.Length);
  1377.                 }
  1378.  
  1379.                 return encoding.GetString(ms.ToArray());
  1380.             }
  1381.         }
  1382.     }
  1383.     ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  1384.     // Crc32.cs
  1385.     ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  1386.     /// <summary>
  1387.     /// A utility class to compute CRC32.
  1388.     /// </summary>
  1389.     internal static class Crc32
  1390.     {
  1391.         /// <summary>
  1392.         /// CRC polynomial 0xEDB88320.
  1393.         /// </summary>
  1394.         private static readonly uint[] Table =
  1395.         {
  1396.             0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 0x076DC419,
  1397.             0x706AF48F, 0xE963A535, 0x9E6495A3, 0x0EDB8832, 0x79DCB8A4,
  1398.             0xE0D5E91E, 0x97D2D988, 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07,
  1399.             0x90BF1D91, 0x1DB71064, 0x6AB020F2, 0xF3B97148, 0x84BE41DE,
  1400.             0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7, 0x136C9856,
  1401.             0x646BA8C0, 0xFD62F97A, 0x8A65C9EC, 0x14015C4F, 0x63066CD9,
  1402.             0xFA0F3D63, 0x8D080DF5, 0x3B6E20C8, 0x4C69105E, 0xD56041E4,
  1403.             0xA2677172, 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B,
  1404.             0x35B5A8FA, 0x42B2986C, 0xDBBBC9D6, 0xACBCF940, 0x32D86CE3,
  1405.             0x45DF5C75, 0xDCD60DCF, 0xABD13D59, 0x26D930AC, 0x51DE003A,
  1406.             0xC8D75180, 0xBFD06116, 0x21B4F4B5, 0x56B3C423, 0xCFBA9599,
  1407.             0xB8BDA50F, 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924,
  1408.             0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D, 0x76DC4190,
  1409.             0x01DB7106, 0x98D220BC, 0xEFD5102A, 0x71B18589, 0x06B6B51F,
  1410.             0x9FBFE4A5, 0xE8B8D433, 0x7807C9A2, 0x0F00F934, 0x9609A88E,
  1411.             0xE10E9818, 0x7F6A0DBB, 0x086D3D2D, 0x91646C97, 0xE6635C01,
  1412.             0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E, 0x6C0695ED,
  1413.             0x1B01A57B, 0x8208F4C1, 0xF50FC457, 0x65B0D9C6, 0x12B7E950,
  1414.             0x8BBEB8EA, 0xFCB9887C, 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3,
  1415.             0xFBD44C65, 0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2,
  1416.             0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB, 0x4369E96A,
  1417.             0x346ED9FC, 0xAD678846, 0xDA60B8D0, 0x44042D73, 0x33031DE5,
  1418.             0xAA0A4C5F, 0xDD0D7CC9, 0x5005713C, 0x270241AA, 0xBE0B1010,
  1419.             0xC90C2086, 0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F,
  1420.             0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, 0x59B33D17,
  1421.             0x2EB40D81, 0xB7BD5C3B, 0xC0BA6CAD, 0xEDB88320, 0x9ABFB3B6,
  1422.             0x03B6E20C, 0x74B1D29A, 0xEAD54739, 0x9DD277AF, 0x04DB2615,
  1423.             0x73DC1683, 0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8,
  1424.             0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1, 0xF00F9344,
  1425.             0x8708A3D2, 0x1E01F268, 0x6906C2FE, 0xF762575D, 0x806567CB,
  1426.             0x196C3671, 0x6E6B06E7, 0xFED41B76, 0x89D32BE0, 0x10DA7A5A,
  1427.             0x67DD4ACC, 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5,
  1428.             0xD6D6A3E8, 0xA1D1937E, 0x38D8C2C4, 0x4FDFF252, 0xD1BB67F1,
  1429.             0xA6BC5767, 0x3FB506DD, 0x48B2364B, 0xD80D2BDA, 0xAF0A1B4C,
  1430.             0x36034AF6, 0x41047A60, 0xDF60EFC3, 0xA867DF55, 0x316E8EEF,
  1431.             0x4669BE79, 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236,
  1432.             0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F, 0xC5BA3BBE,
  1433.             0xB2BD0B28, 0x2BB45A92, 0x5CB36A04, 0xC2D7FFA7, 0xB5D0CF31,
  1434.             0x2CD99E8B, 0x5BDEAE1D, 0x9B64C2B0, 0xEC63F226, 0x756AA39C,
  1435.             0x026D930A, 0x9C0906A9, 0xEB0E363F, 0x72076785, 0x05005713,
  1436.             0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38, 0x92D28E9B,
  1437.             0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21, 0x86D3D2D4, 0xF1D4E242,
  1438.             0x68DDB3F8, 0x1FDA836E, 0x81BE16CD, 0xF6B9265B, 0x6FB077E1,
  1439.             0x18B74777, 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C,
  1440.             0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45, 0xA00AE278,
  1441.             0xD70DD2EE, 0x4E048354, 0x3903B3C2, 0xA7672661, 0xD06016F7,
  1442.             0x4969474D, 0x3E6E77DB, 0xAED16A4A, 0xD9D65ADC, 0x40DF0B66,
  1443.             0x37D83BF0, 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9,
  1444.             0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6, 0xBAD03605,
  1445.             0xCDD70693, 0x54DE5729, 0x23D967BF, 0xB3667A2E, 0xC4614AB8,
  1446.             0x5D681B02, 0x2A6F2B94, 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B,
  1447.             0x2D02EF8D
  1448.         };
  1449.  
  1450.         /// <summary>
  1451.         /// Compute a checksum for a given array of bytes.
  1452.         /// </summary>
  1453.         /// <param name="buffer">The array of bytes to compute the checksum for.</param>
  1454.         /// <returns>The computed checksum.</returns>
  1455.         public static uint Compute(byte[] buffer)
  1456.         {
  1457.             uint crc = 0xFFFFFFFF;
  1458.  
  1459.             for (var i = 0; i < buffer.Length; i++)
  1460.             {
  1461.                 crc = (crc >> 8) ^ Table[buffer[i] ^ crc & 0xff];
  1462.             }
  1463.  
  1464.             return ~crc;
  1465.         }
  1466.     }
  1467.     ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  1468.     // AsnKeyParser.cs
  1469.     ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  1470.     // <auto-generated/>
  1471.     // Not actually auto generated, but this makes StyleCop ignore this file
  1472.  
  1473.     /*
  1474.     This code is licenced under MIT
  1475.  
  1476.     // The MIT License
  1477.     //
  1478.     // Copyright (c) 2006-2008 TinyVine Software Limited.
  1479.     //
  1480.     // Permission is hereby granted, free of charge, to any person obtaining a copy
  1481.     // of this software and associated documentation files (the "Software"), to deal
  1482.     // in the Software without restriction, including without limitation the rights
  1483.     // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  1484.     // copies of the Software, and to permit persons to whom the Software is
  1485.     // furnished to do so, subject to the following conditions:
  1486.     //
  1487.     // The above copyright notice and this permission notice shall be included in
  1488.     // all copies or substantial portions of the Software.
  1489.     //
  1490.     // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  1491.     // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  1492.     // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  1493.     // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  1494.     // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  1495.     // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  1496.     // THE SOFTWARE.
  1497.  
  1498.     Portions of this software are Copyright of Simone Chiaretta
  1499.     Portions of this software are Copyright of Nate Kohari
  1500.     Portions of this software are Copyright of Alex Henderson
  1501.     */
  1502.     [Serializable]
  1503.     internal sealed class BerDecodeException : Exception
  1504.     {
  1505.         private readonly int _position;
  1506.  
  1507.         public BerDecodeException(string message, int position)
  1508.             : base(message)
  1509.         {
  1510.             _position = position;
  1511.         }
  1512.  
  1513.         public BerDecodeException(string message, int position, Exception ex)
  1514.             : base(message, ex)
  1515.         {
  1516.             _position = position;
  1517.         }
  1518.  
  1519.         private BerDecodeException(SerializationInfo info, StreamingContext context)
  1520.             : base(info, context)
  1521.         {
  1522.             _position = info.GetInt32("Position");
  1523.         }
  1524.  
  1525.         public override string Message
  1526.         {
  1527.             get
  1528.             {
  1529.                 var sb = new StringBuilder(base.Message);
  1530.  
  1531.                 sb.AppendFormat(" (Position {0}){1}",
  1532.                                 _position, Environment.NewLine);
  1533.  
  1534.                 return sb.ToString();
  1535.             }
  1536.         }
  1537.  
  1538.         [SecurityPermission(SecurityAction.Demand, SerializationFormatter = true)]
  1539.         public override void GetObjectData(SerializationInfo info, StreamingContext context)
  1540.         {
  1541.             base.GetObjectData(info, context);
  1542.             info.AddValue("Position", _position);
  1543.         }
  1544.     }
  1545.  
  1546.     internal sealed class AsnKeyParser
  1547.     {
  1548.         private readonly AsnParser _parser;
  1549.  
  1550.         public AsnKeyParser(ICollection<byte> contents)
  1551.         {
  1552.             _parser = new AsnParser(contents);
  1553.         }
  1554.  
  1555.         public static byte[] TrimLeadingZero(byte[] values)
  1556.         {
  1557.             byte[] r;
  1558.             if ((0x00 == values[0]) && (values.Length > 1))
  1559.             {
  1560.                 r = new byte[values.Length - 1];
  1561.                 Array.Copy(values, 1, r, 0, values.Length - 1);
  1562.             }
  1563.             else
  1564.             {
  1565.                 r = new byte[values.Length];
  1566.                 Array.Copy(values, r, values.Length);
  1567.             }
  1568.  
  1569.             return r;
  1570.         }
  1571.  
  1572.         public static bool EqualOid(byte[] first, byte[] second)
  1573.         {
  1574.             if (first.Length != second.Length)
  1575.             {
  1576.                 return false;
  1577.             }
  1578.  
  1579.             for (int i = 0; i < first.Length; i++)
  1580.             {
  1581.                 if (first[i] != second[i])
  1582.                 {
  1583.                     return false;
  1584.                 }
  1585.             }
  1586.  
  1587.             return true;
  1588.         }
  1589.  
  1590.         public RSAParameters ParseRSAPublicKey()
  1591.         {
  1592.             var parameters = new RSAParameters();
  1593.  
  1594.             // Current value
  1595.  
  1596.             // Sanity Check
  1597.  
  1598.             // Checkpoint
  1599.             int position = _parser.CurrentPosition();
  1600.  
  1601.             // Ignore Sequence - PublicKeyInfo
  1602.             int length = _parser.NextSequence();
  1603.             if (length != _parser.RemainingBytes())
  1604.             {
  1605.                 var sb = new StringBuilder("Incorrect Sequence Size. ");
  1606.                 sb.AppendFormat("Specified: {0}, Remaining: {1}",
  1607.                                 length.ToString(CultureInfo.InvariantCulture),
  1608.                                 _parser.RemainingBytes().ToString(CultureInfo.InvariantCulture));
  1609.                 throw new BerDecodeException(sb.ToString(), position);
  1610.             }
  1611.  
  1612.             // Checkpoint
  1613.             position = _parser.CurrentPosition();
  1614.  
  1615.             // Ignore Sequence - AlgorithmIdentifier
  1616.             length = _parser.NextSequence();
  1617.             if (length > _parser.RemainingBytes())
  1618.             {
  1619.                 var sb = new StringBuilder("Incorrect AlgorithmIdentifier Size. ");
  1620.                 sb.AppendFormat("Specified: {0}, Remaining: {1}",
  1621.                                 length.ToString(CultureInfo.InvariantCulture),
  1622.                                 _parser.RemainingBytes().ToString(CultureInfo.InvariantCulture));
  1623.                 throw new BerDecodeException(sb.ToString(), position);
  1624.             }
  1625.  
  1626.             // Checkpoint
  1627.             position = _parser.CurrentPosition();
  1628.             // Grab the OID
  1629.             byte[] value = _parser.NextOID();
  1630.             byte[] oid = { 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01 };
  1631.             if (!EqualOid(value, oid))
  1632.             {
  1633.                 throw new BerDecodeException("Expected OID 1.2.840.113549.1.1.1", position);
  1634.             }
  1635.  
  1636.             // Optional Parameters
  1637.             if (_parser.IsNextNull())
  1638.             {
  1639.                 _parser.NextNull();
  1640.                 // Also OK: value = _parser.Next();
  1641.             }
  1642.             else
  1643.             {
  1644.                 // Gracefully skip the optional data
  1645.                 _parser.Next();
  1646.             }
  1647.  
  1648.             // Checkpoint
  1649.             position = _parser.CurrentPosition();
  1650.  
  1651.             // Ignore BitString - PublicKey
  1652.             length = _parser.NextBitString();
  1653.             if (length > _parser.RemainingBytes())
  1654.             {
  1655.                 var sb = new StringBuilder("Incorrect PublicKey Size. ");
  1656.                 sb.AppendFormat("Specified: {0}, Remaining: {1}",
  1657.                                 length.ToString(CultureInfo.InvariantCulture),
  1658.                                 _parser.RemainingBytes().ToString(CultureInfo.InvariantCulture));
  1659.                 throw new BerDecodeException(sb.ToString(), position);
  1660.             }
  1661.  
  1662.             // Checkpoint
  1663.             position = _parser.CurrentPosition();
  1664.  
  1665.             // Ignore Sequence - RSAPublicKey
  1666.             length = _parser.NextSequence();
  1667.             if (length < _parser.RemainingBytes())
  1668.             {
  1669.                 var sb = new StringBuilder("Incorrect RSAPublicKey Size. ");
  1670.                 sb.AppendFormat("Specified: {0}, Remaining: {1}",
  1671.                                 length.ToString(CultureInfo.InvariantCulture),
  1672.                                 _parser.RemainingBytes().ToString(CultureInfo.InvariantCulture));
  1673.                 throw new BerDecodeException(sb.ToString(), position);
  1674.             }
  1675.  
  1676.             parameters.Modulus = TrimLeadingZero(_parser.NextInteger());
  1677.             parameters.Exponent = TrimLeadingZero(_parser.NextInteger());
  1678.  
  1679.             return parameters;
  1680.         }
  1681.     }
  1682.  
  1683.     internal sealed class AsnParser
  1684.     {
  1685.         private readonly int _initialCount;
  1686.         private readonly List<byte> _octets;
  1687.  
  1688.         public AsnParser(ICollection<byte> values)
  1689.         {
  1690.             _octets = new List<byte>(values.Count);
  1691.             _octets.AddRange(values);
  1692.  
  1693.             _initialCount = _octets.Count;
  1694.         }
  1695.  
  1696.         public int CurrentPosition()
  1697.         {
  1698.             return _initialCount - _octets.Count;
  1699.         }
  1700.  
  1701.         public int RemainingBytes()
  1702.         {
  1703.             return _octets.Count;
  1704.         }
  1705.  
  1706.         private int GetLength()
  1707.         {
  1708.             int length = 0;
  1709.  
  1710.             // Checkpoint
  1711.             int position = CurrentPosition();
  1712.  
  1713.             try
  1714.             {
  1715.                 byte b = GetNextOctet();
  1716.  
  1717.                 if (b == (b & 0x7f))
  1718.                 {
  1719.                     return b;
  1720.                 }
  1721.  
  1722.                 int i = b & 0x7f;
  1723.  
  1724.                 if (i > 4)
  1725.                 {
  1726.                     var sb = new StringBuilder("Invalid Length Encoding. ");
  1727.                     sb.AppendFormat("Length uses {0} _octets",
  1728.                                     i.ToString(CultureInfo.InvariantCulture));
  1729.                     throw new BerDecodeException(sb.ToString(), position);
  1730.                 }
  1731.  
  1732.                 while (0 != i--)
  1733.                 {
  1734.                     // shift left
  1735.                     length <<= 8;
  1736.  
  1737.                     length |= GetNextOctet();
  1738.                 }
  1739.             }
  1740.             catch (ArgumentOutOfRangeException ex)
  1741.             {
  1742.                 throw new BerDecodeException("Error Parsing Key", position, ex);
  1743.             }
  1744.  
  1745.             return length;
  1746.         }
  1747.  
  1748.         public byte[] Next()
  1749.         {
  1750.             int position = CurrentPosition();
  1751.  
  1752.             try
  1753.             {
  1754. #pragma warning disable 168
  1755. #pragma warning disable 219
  1756.                 byte b = GetNextOctet();
  1757. #pragma warning restore 219
  1758. #pragma warning restore 168
  1759.  
  1760.                 int length = GetLength();
  1761.                 if (length > RemainingBytes())
  1762.                 {
  1763.                     var sb = new StringBuilder("Incorrect Size. ");
  1764.                     sb.AppendFormat("Specified: {0}, Remaining: {1}",
  1765.                                     length.ToString(CultureInfo.InvariantCulture),
  1766.                                     RemainingBytes().ToString(CultureInfo.InvariantCulture));
  1767.                     throw new BerDecodeException(sb.ToString(), position);
  1768.                 }
  1769.  
  1770.                 return GetOctets(length);
  1771.             }
  1772.             catch (ArgumentOutOfRangeException ex)
  1773.             {
  1774.                 throw new BerDecodeException("Error Parsing Key", position, ex);
  1775.             }
  1776.         }
  1777.  
  1778.         private byte GetNextOctet()
  1779.         {
  1780.             int position = CurrentPosition();
  1781.  
  1782.             if (0 == RemainingBytes())
  1783.             {
  1784.                 var sb = new StringBuilder("Incorrect Size. ");
  1785.                 sb.AppendFormat("Specified: {0}, Remaining: {1}",
  1786.                                 1.ToString(CultureInfo.InvariantCulture),
  1787.                                 RemainingBytes().ToString(CultureInfo.InvariantCulture));
  1788.                 throw new BerDecodeException(sb.ToString(), position);
  1789.             }
  1790.  
  1791.             byte b = GetOctets(1)[0];
  1792.  
  1793.             return b;
  1794.         }
  1795.  
  1796.         private byte[] GetOctets(int octetCount)
  1797.         {
  1798.             int position = CurrentPosition();
  1799.  
  1800.             if (octetCount > RemainingBytes())
  1801.             {
  1802.                 var sb = new StringBuilder("Incorrect Size. ");
  1803.                 sb.AppendFormat("Specified: {0}, Remaining: {1}",
  1804.                                 octetCount.ToString(CultureInfo.InvariantCulture),
  1805.                                 RemainingBytes().ToString(CultureInfo.InvariantCulture));
  1806.                 throw new BerDecodeException(sb.ToString(), position);
  1807.             }
  1808.  
  1809.             var values = new byte[octetCount];
  1810.  
  1811.             try
  1812.             {
  1813.                 _octets.CopyTo(0, values, 0, octetCount);
  1814.                 _octets.RemoveRange(0, octetCount);
  1815.             }
  1816.             catch (ArgumentOutOfRangeException ex)
  1817.             {
  1818.                 throw new BerDecodeException("Error Parsing Key", position, ex);
  1819.             }
  1820.  
  1821.             return values;
  1822.         }
  1823.  
  1824.         public bool IsNextNull()
  1825.         {
  1826.             return _octets[0] == 0x05;
  1827.         }
  1828.  
  1829.         public int NextNull()
  1830.         {
  1831.             int position = CurrentPosition();
  1832.  
  1833.             try
  1834.             {
  1835.                 byte b = GetNextOctet();
  1836.                 if (0x05 != b)
  1837.                 {
  1838.                     var sb = new StringBuilder("Expected Null. ");
  1839.                     sb.AppendFormat("Specified Identifier: {0}", b.ToString(CultureInfo.InvariantCulture));
  1840.                     throw new BerDecodeException(sb.ToString(), position);
  1841.                 }
  1842.  
  1843.                 // Next octet must be 0
  1844.                 b = GetNextOctet();
  1845.                 if (0x00 != b)
  1846.                 {
  1847.                     var sb = new StringBuilder("Null has non-zero size. ");
  1848.                     sb.AppendFormat("Size: {0}", b.ToString(CultureInfo.InvariantCulture));
  1849.                     throw new BerDecodeException(sb.ToString(), position);
  1850.                 }
  1851.  
  1852.                 return 0;
  1853.             }
  1854.             catch (ArgumentOutOfRangeException ex)
  1855.             {
  1856.                 throw new BerDecodeException("Error Parsing Key", position, ex);
  1857.             }
  1858.         }
  1859.  
  1860.         public int NextSequence()
  1861.         {
  1862.             int position = CurrentPosition();
  1863.  
  1864.             try
  1865.             {
  1866.                 byte b = GetNextOctet();
  1867.                 if (0x30 != b)
  1868.                 {
  1869.                     var sb = new StringBuilder("Expected Sequence. ");
  1870.                     sb.AppendFormat("Specified Identifier: {0}",
  1871.                                     b.ToString(CultureInfo.InvariantCulture));
  1872.                     throw new BerDecodeException(sb.ToString(), position);
  1873.                 }
  1874.  
  1875.                 int length = GetLength();
  1876.                 if (length > RemainingBytes())
  1877.                 {
  1878.                     var sb = new StringBuilder("Incorrect Sequence Size. ");
  1879.                     sb.AppendFormat("Specified: {0}, Remaining: {1}",
  1880.                                     length.ToString(CultureInfo.InvariantCulture),
  1881.                                     RemainingBytes().ToString(CultureInfo.InvariantCulture));
  1882.                     throw new BerDecodeException(sb.ToString(), position);
  1883.                 }
  1884.  
  1885.                 return length;
  1886.             }
  1887.             catch (ArgumentOutOfRangeException ex)
  1888.             {
  1889.                 throw new BerDecodeException("Error Parsing Key", position, ex);
  1890.             }
  1891.         }
  1892.  
  1893.         public int NextBitString()
  1894.         {
  1895.             int position = CurrentPosition();
  1896.  
  1897.             try
  1898.             {
  1899.                 byte b = GetNextOctet();
  1900.                 if (0x03 != b)
  1901.                 {
  1902.                     var sb = new StringBuilder("Expected Bit String. ");
  1903.                     sb.AppendFormat("Specified Identifier: {0}", b.ToString(CultureInfo.InvariantCulture));
  1904.                     throw new BerDecodeException(sb.ToString(), position);
  1905.                 }
  1906.  
  1907.                 int length = GetLength();
  1908.  
  1909.                 // We need to consume unused bits, which is the first
  1910.                 //   octet of the remaing values
  1911.                 b = _octets[0];
  1912.                 _octets.RemoveAt(0);
  1913.                 length--;
  1914.  
  1915.                 if (0x00 != b)
  1916.                 {
  1917.                     throw new BerDecodeException("The first octet of BitString must be 0", position);
  1918.                 }
  1919.  
  1920.                 return length;
  1921.             }
  1922.             catch (ArgumentOutOfRangeException ex)
  1923.             {
  1924.                 throw new BerDecodeException("Error Parsing Key", position, ex);
  1925.             }
  1926.         }
  1927.  
  1928.         public byte[] NextInteger()
  1929.         {
  1930.             int position = CurrentPosition();
  1931.  
  1932.             try
  1933.             {
  1934.                 byte b = GetNextOctet();
  1935.                 if (0x02 != b)
  1936.                 {
  1937.                     var sb = new StringBuilder("Expected Integer. ");
  1938.                     sb.AppendFormat("Specified Identifier: {0}", b.ToString(CultureInfo.InvariantCulture));
  1939.                     throw new BerDecodeException(sb.ToString(), position);
  1940.                 }
  1941.  
  1942.                 int length = GetLength();
  1943.                 if (length > RemainingBytes())
  1944.                 {
  1945.                     var sb = new StringBuilder("Incorrect Integer Size. ");
  1946.                     sb.AppendFormat("Specified: {0}, Remaining: {1}",
  1947.                                     length.ToString(CultureInfo.InvariantCulture),
  1948.                                     RemainingBytes().ToString(CultureInfo.InvariantCulture));
  1949.                     throw new BerDecodeException(sb.ToString(), position);
  1950.                 }
  1951.  
  1952.                 return GetOctets(length);
  1953.             }
  1954.             catch (ArgumentOutOfRangeException ex)
  1955.             {
  1956.                 throw new BerDecodeException("Error Parsing Key", position, ex);
  1957.             }
  1958.         }
  1959.  
  1960.         public byte[] NextOID()
  1961.         {
  1962.             int position = CurrentPosition();
  1963.  
  1964.             try
  1965.             {
  1966.                 byte b = GetNextOctet();
  1967.                 if (0x06 != b)
  1968.                 {
  1969.                     var sb = new StringBuilder("Expected Object Identifier. ");
  1970.                     sb.AppendFormat("Specified Identifier: {0}",
  1971.                                     b.ToString(CultureInfo.InvariantCulture));
  1972.                     throw new BerDecodeException(sb.ToString(), position);
  1973.                 }
  1974.  
  1975.                 int length = GetLength();
  1976.                 if (length > RemainingBytes())
  1977.                 {
  1978.                     var sb = new StringBuilder("Incorrect Object Identifier Size. ");
  1979.                     sb.AppendFormat("Specified: {0}, Remaining: {1}",
  1980.                                     length.ToString(CultureInfo.InvariantCulture),
  1981.                                     RemainingBytes().ToString(CultureInfo.InvariantCulture));
  1982.                     throw new BerDecodeException(sb.ToString(), position);
  1983.                 }
  1984.  
  1985.                 var values = new byte[length];
  1986.  
  1987.                 for (int i = 0; i < length; i++)
  1988.                 {
  1989.                     values[i] = _octets[0];
  1990.                     _octets.RemoveAt(0);
  1991.                 }
  1992.  
  1993.                 return values;
  1994.             }
  1995.             catch (ArgumentOutOfRangeException ex)
  1996.             {
  1997.                 throw new BerDecodeException("Error Parsing Key", position, ex);
  1998.             }
  1999.         }
  2000.     }
  2001.     ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  2002.     // Package.cs
  2003.     ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  2004.     /*
  2005.      * Read() function was mostly taken from Rick's Gibbed.Valve.FileFormats,
  2006.      * which is subject to this license:
  2007.      *
  2008.      * Copyright (c) 2008 Rick (rick 'at' gibbed 'dot' us)
  2009.      *
  2010.      * This software is provided 'as-is', without any express or implied
  2011.      * warranty. In no event will the authors be held liable for any damages
  2012.      * arising from the use of this software.
  2013.      *
  2014.      * Permission is granted to anyone to use this software for any purpose,
  2015.      * including commercial applications, and to alter it and redistribute it
  2016.      * freely, subject to the following restrictions:
  2017.      *
  2018.      * 1. The origin of this software must not be misrepresented; you must not
  2019.      * claim that you wrote the original software. If you use this software
  2020.      * in a product, an acknowledgment in the product documentation would be
  2021.      * appreciated but is not required.
  2022.      *
  2023.      * 2. Altered source versions must be plainly marked as such, and must not be
  2024.      * misrepresented as being the original software.
  2025.      *
  2026.      * 3. This notice may not be removed or altered from any source
  2027.      * distribution.
  2028.      */
  2029.     public class Package : IDisposable
  2030.     {
  2031.         public const int MAGIC = 0x55AA1234;
  2032.  
  2033.         /// <summary>
  2034.         /// Always '/' as per Valve's vpk implementation.
  2035.         /// </summary>
  2036.         public const char DirectorySeparatorChar = '/';
  2037.  
  2038.         private BinaryReader Reader;
  2039.         private bool IsDirVPK;
  2040.         private uint HeaderSize;
  2041.  
  2042.         /// <summary>
  2043.         /// Gets the File Name
  2044.         /// </summary>
  2045.         public string FileName { get; private set; }
  2046.  
  2047.         /// <summary>
  2048.         /// Gets the VPK version.
  2049.         /// </summary>
  2050.         public uint Version { get; private set; }
  2051.  
  2052.         /// <summary>
  2053.         /// Gets the size in bytes of the directory tree.
  2054.         /// </summary>
  2055.         public uint TreeSize { get; private set; }
  2056.  
  2057.         /// <summary>
  2058.         /// Gets how many bytes of file content are stored in this VPK file (0 in CSGO).
  2059.         /// </summary>
  2060.         public uint FileDataSectionSize { get; private set; }
  2061.  
  2062.         /// <summary>
  2063.         /// Gets the size in bytes of the section containing MD5 checksums for external archive content.
  2064.         /// </summary>
  2065.         public uint ArchiveMD5SectionSize { get; private set; }
  2066.  
  2067.         /// <summary>
  2068.         /// Gets the size in bytes of the section containing MD5 checksums for content in this file.
  2069.         /// </summary>
  2070.         public uint OtherMD5SectionSize { get; private set; }
  2071.  
  2072.         /// <summary>
  2073.         /// Gets the size in bytes of the section containing the public key and signature.
  2074.         /// </summary>
  2075.         public uint SignatureSectionSize { get; private set; }
  2076.  
  2077.         /// <summary>
  2078.         /// Gets the MD5 checksum of the file tree.
  2079.         /// </summary>
  2080.         public byte[] TreeChecksum { get; private set; }
  2081.  
  2082.         /// <summary>
  2083.         /// Gets the MD5 checksum of the archive MD5 checksum section entries.
  2084.         /// </summary>
  2085.         public byte[] ArchiveMD5EntriesChecksum { get; private set; }
  2086.  
  2087.         /// <summary>
  2088.         /// Gets the MD5 checksum of the complete package until the signature structure.
  2089.         /// </summary>
  2090.         public byte[] WholeFileChecksum { get; private set; }
  2091.  
  2092.         /// <summary>
  2093.         /// Gets the public key.
  2094.         /// </summary>
  2095.         public byte[] PublicKey { get; private set; }
  2096.  
  2097.         /// <summary>
  2098.         /// Gets the signature.
  2099.         /// </summary>
  2100.         public byte[] Signature { get; private set; }
  2101.  
  2102.         /// <summary>
  2103.         /// Gets the package entries.
  2104.         /// </summary>
  2105.         public Dictionary<string, List<PackageEntry>> Entries { get; private set; }
  2106.  
  2107.         /// <summary>
  2108.         /// Gets the archive MD5 checksum section entries. Also known as cache line hashes.
  2109.         /// </summary>
  2110.         public List<ArchiveMD5SectionEntry> ArchiveMD5Entries { get; private set; }
  2111.  
  2112.         /// <summary>
  2113.         /// Releases binary reader.
  2114.         /// </summary>
  2115.         public void Dispose()
  2116.         {
  2117.             Dispose(true);
  2118.             GC.SuppressFinalize(this);
  2119.         }
  2120.  
  2121.         protected virtual void Dispose(bool disposing)
  2122.         {
  2123.             if (disposing && Reader != null)
  2124.             {
  2125.                 ((IDisposable)Reader).Dispose();
  2126.                 Reader = null;
  2127.             }
  2128.         }
  2129.  
  2130.         /// <summary>
  2131.         /// Sets the file name.
  2132.         /// </summary>
  2133.         /// <param name="fileName">Filename.</param>
  2134.         public void SetFileName(string fileName)
  2135.         {
  2136.             if (fileName.EndsWith(".vpk", StringComparison.Ordinal))
  2137.             {
  2138.                 fileName = fileName.Substring(0, fileName.Length - 4);
  2139.             }
  2140.  
  2141.             if (fileName.EndsWith("_dir", StringComparison.Ordinal))
  2142.             {
  2143.                 IsDirVPK = true;
  2144.  
  2145.                 fileName = fileName.Substring(0, fileName.Length - 4);
  2146.             }
  2147.  
  2148.             FileName = fileName;
  2149.         }
  2150.  
  2151.         /// <summary>
  2152.         /// Opens and reads the given filename.
  2153.         /// The file is held open until the object is disposed.
  2154.         /// </summary>
  2155.         /// <param name="filename">The file to open and read.</param>
  2156.         public void Read(string filename)
  2157.         {
  2158.             SetFileName(filename);
  2159.  
  2160.             var fs = new FileStream(String.Format("{0}{1}.vpk", FileName,(IsDirVPK ? "_dir" : string.Empty)), FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
  2161.             //var fs = new FileStream($"{FileName}{(IsDirVPK ? "_dir" : string.Empty)}.vpk", FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
  2162.  
  2163.             Read(fs);
  2164.         }
  2165.  
  2166.         /// <summary>
  2167.         /// Reads the given <see cref="Stream"/>.
  2168.         /// </summary>
  2169.         /// <param name="input">The input <see cref="Stream"/> to read from.</param>
  2170.         public void Read(Stream input)
  2171.         {
  2172.             if (FileName == null)
  2173.             {
  2174.                 throw new InvalidOperationException("If you call Read() directly with a stream, you must call SetFileName() first.");
  2175.             }
  2176.  
  2177.             Reader = new BinaryReader(input);
  2178.  
  2179.             if (Reader.ReadUInt32() != MAGIC)
  2180.             {
  2181.                 throw new InvalidDataException("Given file is not a VPK.");
  2182.             }
  2183.  
  2184.             Version = Reader.ReadUInt32();
  2185.             TreeSize = Reader.ReadUInt32();
  2186.  
  2187.             if (Version == 1)
  2188.             {
  2189.                 // Nothing else
  2190.             }
  2191.             else if (Version == 2)
  2192.             {
  2193.                 FileDataSectionSize = Reader.ReadUInt32();
  2194.                 ArchiveMD5SectionSize = Reader.ReadUInt32();
  2195.                 OtherMD5SectionSize = Reader.ReadUInt32();
  2196.                 SignatureSectionSize = Reader.ReadUInt32();
  2197.             }
  2198.             else
  2199.             {
  2200.                 throw new InvalidDataException(string.Format("Bad VPK version. ({0})", Version));
  2201.             }
  2202.  
  2203.             HeaderSize = (uint)input.Position;
  2204.  
  2205.             ReadEntries();
  2206.  
  2207.             if (Version == 2)
  2208.             {
  2209.                 // Skip over file data, if any
  2210.                 input.Position += FileDataSectionSize;
  2211.  
  2212.                 ReadArchiveMD5Section();
  2213.                 ReadOtherMD5Section();
  2214.                 ReadSignatureSection();
  2215.             }
  2216.         }
  2217.  
  2218.         /// <summary>
  2219.         /// Searches for a given file entry in the file list.
  2220.         /// </summary>
  2221.         /// <param name="filePath">Full path to the file to find.</param>
  2222.         public PackageEntry FindEntry(string filePath)
  2223.         {
  2224.             filePath = filePath.Replace('\\', DirectorySeparatorChar);
  2225.  
  2226.             // Even though technically we are passing in full path as file name, relevant functions in next overload fix it
  2227.             return FindEntry(Path.GetDirectoryName(filePath), filePath);
  2228.         }
  2229.  
  2230.         /// <summary>
  2231.         /// Searches for a given file entry in the file list.
  2232.         /// </summary>
  2233.         /// <param name="directory">Directory to search in.</param>
  2234.         /// <param name="fileName">File name to find.</param>
  2235.         public PackageEntry FindEntry(string directory, string fileName)
  2236.         {
  2237.             fileName = fileName.Replace('\\', DirectorySeparatorChar);
  2238.  
  2239.             return FindEntry(directory, Path.GetFileNameWithoutExtension(fileName), Path.GetExtension(fileName).TrimStart('.'));
  2240.         }
  2241.  
  2242.         /// <summary>
  2243.         /// Searches for a given file entry in the file list.
  2244.         /// </summary>
  2245.         /// <param name="directory">Directory to search in.</param>
  2246.         /// <param name="fileName">File name to find, without the extension.</param>
  2247.         /// <param name="extension">File extension, without the leading dot.</param>
  2248.         public PackageEntry FindEntry(string directory, string fileName, string extension)
  2249.         {
  2250.             // Assume no extension
  2251.             if (extension == null)
  2252.             {
  2253.                 extension = string.Empty;
  2254.             }
  2255.  
  2256.             if (!Entries.ContainsKey(extension))
  2257.             {
  2258.                 return null;
  2259.             }
  2260.  
  2261.             // We normalize path separators when reading the file list
  2262.             directory = directory.Replace('\\', DirectorySeparatorChar).Trim(DirectorySeparatorChar);
  2263.  
  2264.             // If the directory is empty after trimming, set it to null
  2265.             if (directory == string.Empty)
  2266.             {
  2267.                 directory = null;
  2268.             }
  2269.  
  2270.           //return Entries[extension].FirstOrDefault(x => x.DirectoryName == directory && x.FileName == fileName);
  2271.             foreach (PackageEntry x in Entries[extension])
  2272.             {
  2273.                 if (x.DirectoryName == directory && x.FileName == fileName)
  2274.                 {
  2275.                     return x;
  2276.                 }
  2277.             }
  2278.             return null;
  2279.         }
  2280.  
  2281.         /// <summary>
  2282.         /// Reads the entry from the VPK package.
  2283.         /// </summary>
  2284.         /// <param name="entry">Package entry.</param>
  2285.         /// <param name="output">Output buffer.</param>
  2286.         /// <param name="validateCrc">If true, CRC32 will be calculated and verified for read data.</param>
  2287.         public void ReadEntry(PackageEntry entry, out byte[] output)
  2288.         {
  2289.             ReadEntry(entry, out output, true);
  2290.         }
  2291.         public void ReadEntry(PackageEntry entry, out byte[] output, bool validateCrc)
  2292.         {
  2293.             output = new byte[entry.SmallData.Length + entry.Length];
  2294.  
  2295.             if (entry.SmallData.Length > 0)
  2296.             {
  2297.                 entry.SmallData.CopyTo(output, 0);
  2298.             }
  2299.  
  2300.             if (entry.Length > 0)
  2301.             {
  2302.                 Stream fs = null;
  2303.  
  2304.                 try
  2305.                 {
  2306.                     var offset = entry.Offset;
  2307.  
  2308.                     if (entry.ArchiveIndex != 0x7FFF)
  2309.                     {
  2310.                         if (!IsDirVPK)
  2311.                         {
  2312.                             throw new InvalidOperationException("Given VPK is not a _dir, but entry is referencing an external archive.");
  2313.                         }
  2314.  
  2315.                         //var fileName = FileName+"_"+entry.ArchiveIndex+".vpk";
  2316.                         var fileName = String.Format("{0}_{1:d3}.vpk",FileName,entry.ArchiveIndex);
  2317.  
  2318.                         fs = new FileStream(fileName, FileMode.Open, FileAccess.Read);
  2319.                     }
  2320.                     else
  2321.                     {
  2322.                         fs = Reader.BaseStream;
  2323.  
  2324.                         offset += HeaderSize + TreeSize;
  2325.                     }
  2326.  
  2327.                     fs.Seek(offset, SeekOrigin.Begin);
  2328.                     fs.Read(output, entry.SmallData.Length, (int)entry.Length);
  2329.                 }
  2330.                 finally
  2331.                 {
  2332.                     if (entry.ArchiveIndex != 0x7FFF)
  2333.                     {
  2334.                         fs.Close();
  2335.                     }
  2336.                 }
  2337.             }
  2338.  
  2339.             if (validateCrc && entry.CRC32 != Crc32.Compute(output))
  2340.             {
  2341.                 throw new InvalidDataException("CRC32 mismatch for read data.");
  2342.             }
  2343.         }
  2344.  
  2345.         private void ReadEntries()
  2346.         {
  2347.             var typeEntries = new Dictionary<string, List<PackageEntry>>();
  2348.  
  2349.             // Types
  2350.             while (true)
  2351.             {
  2352.                 var typeName = Reader.ReadNullTermString(Encoding.UTF8);
  2353.  
  2354.                 if (typeName == string.Empty)
  2355.                 {
  2356.                     break;
  2357.                 }
  2358.  
  2359.                 // Valve uses a space for missing extensions,
  2360.                 // we replace it with an empty string to match how System.IO.Path deals with it.
  2361.                 if (typeName == " ")
  2362.                 {
  2363.                     typeName = string.Empty;
  2364.                 }
  2365.  
  2366.                 var entries = new List<PackageEntry>();
  2367.  
  2368.                 // Directories
  2369.                 while (true)
  2370.                 {
  2371.                     var directoryName = Reader.ReadNullTermString(Encoding.UTF8);
  2372.  
  2373.                     if (directoryName == string.Empty)
  2374.                     {
  2375.                         break;
  2376.                     }
  2377.  
  2378.                     // Valve uses a space for blank directory names,
  2379.                     // we replace it with a null to match how System.IO.Path deals with root paths.
  2380.                     if (directoryName == " ")
  2381.                     {
  2382.                         directoryName = null;
  2383.                     }
  2384.  
  2385.                     // Files
  2386.                     while (true)
  2387.                     {
  2388.                         var fileName = Reader.ReadNullTermString(Encoding.UTF8);
  2389.  
  2390.                         if (fileName == string.Empty)
  2391.                         {
  2392.                             break;
  2393.                         }
  2394.  
  2395.                         var entry = new PackageEntry
  2396.                         {
  2397.                             FileName = fileName,
  2398.                             DirectoryName = directoryName,
  2399.                             TypeName = typeName,
  2400.                             CRC32 = Reader.ReadUInt32(),
  2401.                             SmallData = new byte[Reader.ReadUInt16()],
  2402.                             ArchiveIndex = Reader.ReadUInt16(),
  2403.                             Offset = Reader.ReadUInt32(),
  2404.                             Length = Reader.ReadUInt32()
  2405.                         };
  2406.  
  2407.                         if (Reader.ReadUInt16() != 0xFFFF)
  2408.                         {
  2409.                             throw new FormatException("Invalid terminator.");
  2410.                         }
  2411.  
  2412.                         if (entry.SmallData.Length > 0)
  2413.                         {
  2414.                             Reader.Read(entry.SmallData, 0, entry.SmallData.Length);
  2415.                         }
  2416.  
  2417.                         entries.Add(entry);
  2418.                     }
  2419.                 }
  2420.  
  2421.                 typeEntries.Add(typeName, entries);
  2422.             }
  2423.  
  2424.             Entries = typeEntries;
  2425.         }
  2426.  
  2427.         /// <summary>
  2428.         /// Verify checksums and signatures provided in the VPK
  2429.         /// </summary>
  2430.         public void VerifyHashes()
  2431.         {
  2432.             if (Version != 2)
  2433.             {
  2434.                 throw new InvalidDataException("Only version 2 is supported.");
  2435.             }
  2436.  
  2437.             using (var md5 = MD5.Create())
  2438.             {
  2439.                 Reader.BaseStream.Position = 0;
  2440.  
  2441.                 var hash = md5.ComputeHash(Reader.ReadBytes((int)(HeaderSize + TreeSize + FileDataSectionSize + ArchiveMD5SectionSize + 32)));
  2442.  
  2443.                 if (!hash.SequenceEqual(WholeFileChecksum))
  2444.                 {
  2445.                     //throw new InvalidDataException($"Package checksum mismatch ({BitConverter.ToString(hash)} != expected {BitConverter.ToString(WholeFileChecksum)})");
  2446.                     throw new InvalidDataException(String.Format("Package checksum mismatch ({0} != expected {1})", BitConverter.ToString(hash), BitConverter.ToString(WholeFileChecksum)));
  2447.                 }
  2448.  
  2449.                 Reader.BaseStream.Position = HeaderSize;
  2450.  
  2451.                 hash = md5.ComputeHash(Reader.ReadBytes((int)TreeSize));
  2452.  
  2453.                 if (!hash.SequenceEqual(TreeChecksum))
  2454.                 {
  2455.                     //throw new InvalidDataException($"File tree checksum mismatch ({BitConverter.ToString(hash)} != expected {BitConverter.ToString(TreeChecksum)})");
  2456.                     throw new InvalidDataException(String.Format("File tree checksum mismatch ({0} != expected {1})", BitConverter.ToString(hash), BitConverter.ToString(TreeChecksum)));
  2457.                 }
  2458.  
  2459.                 Reader.BaseStream.Position = HeaderSize + TreeSize + FileDataSectionSize;
  2460.  
  2461.                 hash = md5.ComputeHash(Reader.ReadBytes((int)ArchiveMD5SectionSize));
  2462.  
  2463.                 if (!hash.SequenceEqual(ArchiveMD5EntriesChecksum))
  2464.                 {
  2465.                     //throw new InvalidDataException($"Archive MD5 entries checksum mismatch ({BitConverter.ToString(hash)} != expected {BitConverter.ToString(ArchiveMD5EntriesChecksum)})");
  2466.                     throw new InvalidDataException(String.Format("Archive MD5 entries checksum mismatch ({0} != expected {1})", BitConverter.ToString(hash), BitConverter.ToString(ArchiveMD5EntriesChecksum)));
  2467.                 }
  2468.  
  2469.                 // TODO: verify archive checksums
  2470.             }
  2471.  
  2472.             if (PublicKey == null || Signature == null)
  2473.             {
  2474.                 return;
  2475.             }
  2476.  
  2477.             if (!IsSignatureValid())
  2478.             {
  2479.                 throw new InvalidDataException("VPK signature is not valid.");
  2480.             }
  2481.         }
  2482.  
  2483.         /// <summary>
  2484.         /// Verifies the RSA signature.
  2485.         /// </summary>
  2486.         /// <returns>True if signature is valid, false otherwise.</returns>
  2487.         public bool IsSignatureValid()
  2488.         {
  2489.             Reader.BaseStream.Position = 0;
  2490.  
  2491.             var keyParser = new AsnKeyParser(PublicKey);
  2492.  
  2493.             var rsa = new RSACryptoServiceProvider();
  2494.             rsa.ImportParameters(keyParser.ParseRSAPublicKey());
  2495.  
  2496.             var deformatter = new RSAPKCS1SignatureDeformatter(rsa);
  2497.             deformatter.SetHashAlgorithm("SHA256");
  2498.  
  2499.             var hash = new SHA256Managed().ComputeHash(Reader.ReadBytes((int)(HeaderSize + TreeSize + FileDataSectionSize + ArchiveMD5SectionSize + OtherMD5SectionSize)));
  2500.  
  2501.             return deformatter.VerifySignature(hash, Signature);
  2502.         }
  2503.  
  2504.         private void ReadArchiveMD5Section()
  2505.         {
  2506.             ArchiveMD5Entries = new List<ArchiveMD5SectionEntry>();
  2507.  
  2508.             if (ArchiveMD5SectionSize == 0)
  2509.             {
  2510.                 return;
  2511.             }
  2512.  
  2513.             var entries = ArchiveMD5SectionSize / 28; // 28 is sizeof(VPK_MD5SectionEntry), which is int + int + int + 16 chars
  2514.  
  2515.             for (var i = 0; i < entries; i++)
  2516.             {
  2517.                 ArchiveMD5Entries.Add(new ArchiveMD5SectionEntry
  2518.                 {
  2519.                     ArchiveIndex = Reader.ReadUInt32(),
  2520.                     Offset = Reader.ReadUInt32(),
  2521.                     Length = Reader.ReadUInt32(),
  2522.                     Checksum = Reader.ReadBytes(16)
  2523.                 });
  2524.             }
  2525.         }
  2526.  
  2527.         private void ReadOtherMD5Section()
  2528.         {
  2529.             if (OtherMD5SectionSize != 48)
  2530.             {
  2531.                 //throw new InvalidDataException($"Encountered OtherMD5Section with size of {OtherMD5SectionSize} (should be 48)");
  2532.                 throw new InvalidDataException(String.Format("Encountered OtherMD5Section with size of {0} (should be 48)", OtherMD5SectionSize));
  2533.             }
  2534.  
  2535.             TreeChecksum = Reader.ReadBytes(16);
  2536.             ArchiveMD5EntriesChecksum = Reader.ReadBytes(16);
  2537.             WholeFileChecksum = Reader.ReadBytes(16);
  2538.         }
  2539.  
  2540.         private void ReadSignatureSection()
  2541.         {
  2542.             if (SignatureSectionSize == 0)
  2543.             {
  2544.                 return;
  2545.             }
  2546.  
  2547.             var publicKeySize = Reader.ReadInt32();
  2548.             PublicKey = Reader.ReadBytes(publicKeySize);
  2549.  
  2550.             var signatureSize = Reader.ReadInt32();
  2551.             Signature = Reader.ReadBytes(signatureSize);
  2552.         }
  2553.     }
  2554. }
  2555.  
  2556. namespace VPKMOD
  2557. {
  2558.     public class Options
  2559.     {
  2560.         public string Input = string.Empty;
  2561.         public bool Recursive = false;
  2562.         public string Output = string.Empty;
  2563.         public List<string> ExtFilter = new List<string>();
  2564.         public List<string> PathFilter = new List<string>();
  2565.         public string FilterList = string.Empty;
  2566.         public string ModList = string.Empty;
  2567.         public bool OutputVPKDir = false;
  2568.         public bool CachedManifest = false;
  2569.         public bool VerifyVPKChecksums = false;
  2570.         public bool Silent = false;
  2571.         public bool Help = false;
  2572.         public Options()
  2573.         {
  2574.             Parsed = new Dictionary< string, List<string> >();
  2575.         }
  2576.         public IDictionary< string, List<string> > Parsed { get; private set; }
  2577.         public bool Find(string key)
  2578.         {
  2579.             return Find(key, false);
  2580.         }
  2581.         public bool Find(string key, bool keyonly)
  2582.         {
  2583.             if (Parsed.ContainsKey(key))
  2584.             {
  2585.                 if (keyonly) return true;
  2586.                 if (Parsed[key].Count != 0) return true;
  2587.                 Console.Error.WriteLine("VPKMOD ERROR! Missing argument for: -{0}", key);
  2588.             }
  2589.             return false;
  2590.         }
  2591.         public void Parse(string[] args)
  2592.         {
  2593.             var key = "";
  2594.             List<string> values = new List<string>();
  2595.             foreach (string arg in args)
  2596.             {
  2597.                 if (arg.StartsWith("-"))
  2598.                 {
  2599.                     if (key != "") Parsed[key] = values;
  2600.                     values =  new List<string>();
  2601.                     key = arg.Substring(1);
  2602.                 }
  2603.                 else if (key == "") Parsed[arg] = new List<string>();
  2604.                 else values = new List<string>(arg.Split(','));
  2605.             }
  2606.             if (key != "") Parsed[key] = values;
  2607.  
  2608.             if (Find("i"))
  2609.             {
  2610.                 Input = Parsed["i"].FirstOrDefault();
  2611.                 Console.WriteLine("VPKMOD -i Input:      {0}", Input);
  2612.             }
  2613.             if (Find("r", true))
  2614.             {
  2615.                 Recursive = true;
  2616.                 Console.WriteLine("VPKMOD -r Recursive:  {0} (if input is a folder)", Recursive);
  2617.             }
  2618.             if (Find("o"))
  2619.             {
  2620.                 Output = Parsed["o"].FirstOrDefault();
  2621.                 Console.WriteLine("VPKMOD -o Output:     {0}", Output);
  2622.             }
  2623.             if (Find("e"))
  2624.             {
  2625.                 ExtFilter = Parsed["e"];
  2626.                 Console.WriteLine("VPKMOD -e ExtFilter:  {0}", string.Join(", ", ExtFilter.ToArray()));
  2627.             }
  2628.             if (Find("p"))
  2629.             {
  2630.                 PathFilter = Parsed["p"];
  2631.                 Console.WriteLine("VPKMOD -p PathFilter: {0}", string.Join(", ", PathFilter.ToArray()));
  2632.             }
  2633.             if (Find("l"))
  2634.             {
  2635.                 FilterList = Parsed["l"].FirstOrDefault();
  2636.                 Console.WriteLine("VPKMOD -l Filter.lst: {0}", FilterList);
  2637.             }
  2638.             if (Find("m"))
  2639.             {
  2640.                 ModList = Parsed["m"].FirstOrDefault();
  2641.                 Console.WriteLine("VPKMOD -m Mod.lst:    {0}", ModList);
  2642.             }
  2643.             if (Find("d", true))
  2644.             {
  2645.                 OutputVPKDir = true;
  2646.                 Console.WriteLine("VPKMOD -d OutputVPKDir: {0}", OutputVPKDir);
  2647.             }
  2648.             if (Find("c", true))
  2649.             {
  2650.                 CachedManifest = true;
  2651.                 Console.WriteLine("VPKMOD -c CachedManifest: {0}", CachedManifest);
  2652.             }
  2653.             if (Find("v", true))
  2654.             {
  2655.                 VerifyVPKChecksums = true;
  2656.                 Console.WriteLine("VPKMOD -v VerifyVPKChecksums: {0}", VerifyVPKChecksums);
  2657.             }
  2658.             if (Find("s", true))
  2659.             {
  2660.                 Silent = true;
  2661.                 Console.WriteLine("VPKMOD -s Silent:     {0}", Silent);
  2662.             }
  2663.             if (Find("h", true) || args.Length == 0)
  2664.             {
  2665.                 Console.WriteLine("VPKMOD v1.0 \t AveYo / SteamDatabase");
  2666.                 Console.WriteLine(" -i  Input VPK file (unpak) or directory (pak)");
  2667.                 Console.WriteLine(" -r  Process all files in subdirectories (pak)");
  2668.                 Console.WriteLine(" -o  Output directory (unpak) or file.vpk (pak)");
  2669.                 Console.WriteLine(" -e  Extension(s) filter, example: \"vcss_c,vjs_c,vxml_c\"");
  2670.                 Console.WriteLine(" -p  Path(s) filter, example: \"particles/,models/\"");
  2671.                 Console.WriteLine(" -l  Import filters from external.lst,");
  2672.                 Console.WriteLine("     if -e or -p are also used, export filters");
  2673.                 Console.WriteLine(" -m  Import mod?src definitions from external.lst");
  2674.                 Console.WriteLine("     allowing in-memory unpak-rename-pak modding");
  2675.                 Console.WriteLine(" -d  Export VPK directory of files and their CRC");
  2676.                 Console.WriteLine(" -c  Use cached VPK manifest - only changed files get written to disk");
  2677.                 Console.WriteLine(" -v  Verify checksums and signatures");
  2678.                 Console.WriteLine(" -t  Parallel processing threads count");
  2679.                 Console.WriteLine(" -s  Silent processing");
  2680.                 Console.WriteLine(" -h  This help screen");
  2681.                 Console.WriteLine("Press ENTER to quit");
  2682.                 Console.ReadLine();
  2683.                 Environment.Exit(0);
  2684.             }
  2685.         }
  2686.     }
  2687.  
  2688.     public class Tree<TKey, TValue> : Dictionary<TKey, TValue> {}
  2689.     public class Tree<TKey1, TKey2, TValue> : Dictionary<TKey1, Tree<TKey2, TValue>> {}
  2690.     public class Tree<TKey1, TKey2, TKey3, TValue> : Dictionary<TKey1, Tree<TKey2, TKey3, TValue>> {}
  2691.     public static class TreeExtensions
  2692.     {
  2693.         public static Tree<TKey2, TValue> New<TKey1, TKey2, TValue>(this Tree<TKey1, TKey2, TValue> dictionary)
  2694.         {
  2695.             return new Tree<TKey2, TValue>();
  2696.         }
  2697.         public static Tree<TKey2, TKey3, TValue> New<TKey1,TKey2,TKey3,TValue>(this Tree<TKey1,TKey2,TKey3,TValue> dictionary)
  2698.         {
  2699.             return new Tree<TKey2, TKey3, TValue>();
  2700.         }
  2701.     }
  2702.  
  2703.     class Program
  2704.     {
  2705.         private static readonly object ConsoleWriterLock = new object();
  2706.         private static Options Options;
  2707.         private static int CurrentFile = 0;
  2708.         private static int TotalFiles = 0;
  2709.         private static Dictionary<string, uint> OldPakManifest = new Dictionary<string, uint>();
  2710.         private static Dictionary<string, Dictionary<string, bool>> ModSrc = new Dictionary<string, Dictionary<string, bool>>();
  2711.         private static Dictionary<string, string> SrcMod = new Dictionary<string, string>();
  2712.         private static List<string> FileFilter = new List<string>();
  2713.         private static List<string> ExtFilter = new List<string>();
  2714.         private static bool ExportFilter = false;
  2715.  
  2716.         public static void Main(string[] args)
  2717.         {
  2718.             Options = new Options();
  2719.             Options.Parse(args);
  2720.  
  2721.             if (String.IsNullOrEmpty(Options.Input))
  2722.             {
  2723.                 Echo("Missing -i input parameter!", ConsoleColor.Red);
  2724.                 return;
  2725.             }
  2726.             Options.Input = FixPathSlashes(Path.GetFullPath(Options.Input));
  2727.  
  2728.             if (!String.IsNullOrEmpty(Options.Output))
  2729.             {
  2730.                 Options.Output = FixPathSlashes(Path.GetFullPath(Options.Output));
  2731.             }
  2732.  
  2733.             if (!String.IsNullOrEmpty(Options.ModList))
  2734.             {
  2735.                 Options.ModList = FixPathSlashes(Path.GetFullPath(Options.ModList));
  2736.                 if (File.Exists(Options.ModList))
  2737.                 {
  2738.                     var file = new StreamReader(Options.ModList);
  2739.                     string line, ext, mod, src;
  2740.                     Dictionary<string, bool> m = new Dictionary<string, bool>();
  2741.                     while ((line = file.ReadLine()) != null)
  2742.                     {
  2743.                         var split = line.Split(new[] { '?' }, 2);
  2744.                         if (split.Length == 2)
  2745.                         {
  2746.                             mod = FixPathSlashes(split[0]);
  2747.                             src = FixPathSlashes(split[1]);
  2748.                             FileFilter.Add(src);
  2749.                             ext = Path.GetExtension(src);
  2750.                             if (ext.Length > 1) ExtFilter.Add(ext.Substring(1));
  2751.  
  2752.                             SrcMod[src] =  mod;
  2753.  
  2754.                             if (!ModSrc.ContainsKey(src))
  2755.                                 ModSrc.Add(src, new Dictionary<string, bool> { {mod , false} });
  2756.                             else
  2757.                               ModSrc[src].Add(mod, false);
  2758.                         }
  2759.                     }
  2760.                     file.Close();
  2761.                 }
  2762.             }
  2763.             else if (!String.IsNullOrEmpty(Options.FilterList))
  2764.             {
  2765.                 Options.FilterList = FixPathSlashes(Path.GetFullPath(Options.FilterList));
  2766.                 if (File.Exists(Options.FilterList))
  2767.                 {
  2768.                     var file = new StreamReader(Options.FilterList);
  2769.                     string line, ext;
  2770.                     while ((line = file.ReadLine()) != null)
  2771.                     {
  2772.                         FileFilter.Add(FixPathSlashes(line));
  2773.                         ext = Path.GetExtension(line);
  2774.                         if (ext.Length > 1) ExtFilter.Add(ext.Substring(1));
  2775.                     }
  2776.                     file.Close();
  2777.                 }
  2778.                 if (Options.PathFilter.Count > 0 || Options.ExtFilter.Count > 0)
  2779.                 {
  2780.                      ExportFilter = true;
  2781.                 }
  2782.             }
  2783.  
  2784.             if (Options.PathFilter.Count > 0)
  2785.             {
  2786.                 foreach (string filter in Options.PathFilter.ToList())
  2787.                 {
  2788.                     int index = Options.PathFilter.IndexOf(filter);
  2789.                     if (index != -1) Options.PathFilter[index] = FixPathSlashes(filter);
  2790.                 }
  2791.             }
  2792.  
  2793.             var paths = new List<string>();
  2794.  
  2795.             if (Directory.Exists(Options.Input))
  2796.             {
  2797.                 if (Path.GetExtension(Options.Output).ToLower() != ".vpk")
  2798.                 {
  2799.                     Echo(String.Format("Input \"{0}\" is a directory while Output \"{1}\" is not a VPK.", Options.Input, Options.Output), ConsoleColor.Red);
  2800.                     return;
  2801.                 }
  2802.                 paths.AddRange(Directory.GetFiles(Options.Input, "*.*", Options.Recursive ? SearchOption.AllDirectories : !!))
  2803.                 if (paths.Count == 0)
  2804.                 {
  2805.                     Echo(String.Format("No such file \"{0}\" or directory is empty. Did you mean to include -r (recursive) parameter?", Options.Input), ConsoleColor.Red);
  2806.                     return;
  2807.                 }
  2808.                 WriteVPK(paths, false); // pak directory into output.vpk
  2809.             }
  2810.             else if (File.Exists(Options.Input))
  2811.             {
  2812.                 if (Path.GetExtension(Options.Input).ToLower() != ".vpk")
  2813.                 {
  2814.                     Echo(String.Format("Input \"{0}\" is not a VPK.", Options.Input), ConsoleColor.Red);
  2815.                     return;
  2816.                 }
  2817.                 paths.Add(Options.Input);
  2818.                 if (Path.GetExtension(Options.Output).ToLower() != ".vpk")
  2819.                 {
  2820.                     ReadVPK(Options.Input); // unpak input.vpk into output dir
  2821.                 }
  2822.                 else
  2823.                 {
  2824.                     WriteVPK(paths, true); // mod input.vpk into output.vpk
  2825.                 }
  2826.             }
  2827.  
  2828.             CurrentFile = 0;
  2829.             TotalFiles = paths.Count;
  2830.         }
  2831.  
  2832.         private static void ReadVPK(string path)
  2833.         {
  2834.             Echo(String.Format("--- Listing files in package \"{0}\"", path), ConsoleColor.Green);
  2835.             var sw = Stopwatch.StartNew();
  2836.             var package = new Package();
  2837.             try
  2838.             {
  2839.                 package.Read(path);
  2840.             }
  2841.             catch (Exception e)
  2842.             {
  2843.                 Echo(e.ToString(), ConsoleColor.Yellow);
  2844.             }
  2845.  
  2846.             if (Options.VerifyVPKChecksums)
  2847.             {
  2848.                 try
  2849.                 {
  2850.                     package.VerifyHashes();
  2851.  
  2852.                     Console.WriteLine("VPK verification succeeded");
  2853.                 }
  2854.                 catch (Exception)
  2855.                 {
  2856.                     Echo("Failed to verify checksums and signature of given VPK:", ConsoleColor.Red);
  2857.                 }
  2858.                 return;
  2859.             }
  2860.  
  2861.             if (!String.IsNullOrEmpty(Options.Output) && !Options.OutputVPKDir)
  2862.             {
  2863.               //Console.WriteLine("--- Reading VPK files...");
  2864.                 var manifestPath = string.Concat(path, ".manifest.txt");
  2865.                 if (Options.CachedManifest && File.Exists(manifestPath))
  2866.                 {
  2867.                     var file = new StreamReader(manifestPath);
  2868.                     string line;
  2869.                     while ((line = file.ReadLine()) != null)
  2870.                     {
  2871.                         var split = line.Split(new[] { ' ' }, 2);
  2872.                         if (split.Length == 2)
  2873.                         {
  2874.                             OldPakManifest.Add(split[1], uint.Parse(split[0]));
  2875.                         }
  2876.                     }
  2877.                     file.Close();
  2878.                 }
  2879.  
  2880.                 foreach (var type in package.Entries)
  2881.                 {
  2882.                     if (ExtFilter.Count > 0 && !ExtFilter.Contains(type.Key))
  2883.                     {
  2884.                         continue;
  2885.                     }
  2886.                     else if (Options.ExtFilter.Count > 0 && !Options.ExtFilter.Contains(type.Key))
  2887.                     {
  2888.                         continue;
  2889.                     }
  2890.                     DumpVPK(package, type.Key);
  2891.                 }
  2892.  
  2893.                 if (Options.CachedManifest)
  2894.                 {
  2895.                     using (var file = new StreamWriter(manifestPath))
  2896.                     {
  2897.                         foreach (var hash in OldPakManifest)
  2898.                         {
  2899.                             if (package.FindEntry(hash.Key) == null)
  2900.                             {
  2901.                                 Console.WriteLine("\t{0} no longer exists in VPK", hash.Key);
  2902.                             }
  2903.                             file.WriteLine("{0} {1}", hash.Value, hash.Key);
  2904.                         }
  2905.                     }
  2906.                 }
  2907.             }
  2908.  
  2909.             if (Options.OutputVPKDir)
  2910.             {
  2911.                 foreach (var type in package.Entries)
  2912.                 {
  2913.                     foreach (var file in type.Value)
  2914.                     {
  2915.                         Console.WriteLine(file);
  2916.                     }
  2917.                 }
  2918.             }
  2919.  
  2920.             if (ExportFilter)
  2921.             {
  2922.                 using (var filter = new StreamWriter(Options.FilterList))
  2923.                 {
  2924.                     foreach (var type in package.Entries)
  2925.                     {
  2926.                         if (Options.ExtFilter.Count > 0 && !Options.ExtFilter.Contains(type.Key))
  2927.                         {
  2928.                             continue;
  2929.                         }
  2930.                         foreach (var file in type.Value)
  2931.                         {
  2932.                             var ListPath = FixPathSlashes(file.GetFullPath());
  2933.                             if (Options.PathFilter.Count > 0)
  2934.                             {
  2935.                                 var found = false;
  2936.                                 foreach (string pathfilter in Options.PathFilter)
  2937.                                 {
  2938.                                     if (ListPath.StartsWith(pathfilter, StringComparison.Ordinal)) found = true;
  2939.                                 }
  2940.                                 if (!found) continue;
  2941.                             }
  2942.                             filter.WriteLine(ListPath);
  2943.                             if (!Options.Silent) Console.WriteLine(ListPath);
  2944.                         }
  2945.                     }
  2946.                 }
  2947.             }
  2948.  
  2949.             sw.Stop();
  2950.  
  2951.             Echo(String.Format("--- Processed in {0}s", sw.Elapsed.TotalSeconds), ConsoleColor.Cyan);
  2952.         }
  2953.  
  2954.         private static void WriteVPK(List<string> paths, bool modding)
  2955.         {
  2956.  
  2957.             if (modding) Echo("--- Exporting filtered input", ConsoleColor.Green);
  2958.             else Echo("--- Paking input folder", ConsoleColor.Green);
  2959.             TotalFiles = paths.Count;
  2960.             var sw = Stopwatch.StartNew();
  2961.             Encoding iso = Encoding.GetEncoding("ISO-8859-1");
  2962.             Encoding utf = Encoding.UTF8;
  2963.             byte[] data = new byte[0];
  2964.             int Signature = 0x55AA1234;
  2965.             uint Version = 1;
  2966.             uint TreeSize = 0;
  2967.             uint HeaderSize = 4 * 3;
  2968.             var excluded = new List<string> { "zip", "reg", "rar", "msi", "exe", "dll", "com", "cmd", "bat", "vbs" };
  2969.             var tree = new Tree<string, string, string, byte[]>();
  2970.             var package = new Package();
  2971.  
  2972.             if (modding)
  2973.             {
  2974.                 try
  2975.                 {
  2976.                     package.Read(Options.Input);
  2977.                 }
  2978.                 catch (Exception e)
  2979.                 {
  2980.                     Echo(e.ToString(), ConsoleColor.Yellow);
  2981.                 }
  2982.                 foreach (var type in package.Entries)
  2983.                 {
  2984.                     if (ExtFilter.Count > 0 && !ExtFilter.Contains(type.Key))
  2985.                     {
  2986.                         continue;
  2987.                     }
  2988.                     else if (Options.ExtFilter.Count > 0 && !Options.ExtFilter.Contains(type.Key))
  2989.                     {
  2990.                         continue;
  2991.                     }
  2992.  
  2993.                     var entries = package.Entries[type.Key];
  2994.  
  2995.                     foreach (var file in entries)
  2996.                     {
  2997.                         var filePath = string.Format("{0}.{1}", file.FileName, file.TypeName);
  2998.                         if (file.DirectoryName.Length > 0)
  2999.                         {
  3000.                             filePath = Path.Combine(file.DirectoryName, filePath);
  3001.                         }
  3002.                         filePath = FixPathSlashes(filePath);
  3003.  
  3004.                         bool found = false;
  3005.                         if (FileFilter.Count > 0)
  3006.                         {
  3007.                             foreach (string filter in FileFilter)
  3008.                             {
  3009.                               //if (filePath.StartsWith(filter)) found = true;
  3010.                                 if (filePath == filter) found = true;
  3011.                             }
  3012.                             if (!found) continue;
  3013.                         }
  3014.                         else if (Options.PathFilter.Count > 0)
  3015.                         {
  3016.                             foreach (string filter in Options.PathFilter)
  3017.                             {
  3018.                               if (filePath.StartsWith(filter, StringComparison.Ordinal)) found = true;
  3019.                             }
  3020.                             if (!found) continue;
  3021.                         }
  3022.                         string root = string.Empty;
  3023.                         var ext = file.TypeName; //Path.GetExtension(root).TrimStart('.');
  3024.                         if (ext == string.Empty)
  3025.                         {
  3026.                             ext = " ";
  3027.                             if (!Options.Silent) Echo("  missing extension!", ConsoleColor.Red);
  3028.                             //continue;
  3029.                         }
  3030.                         if (excluded.Contains(ext))
  3031.                         {
  3032.                             if (!Options.Silent) Echo("  illegal extension!", ConsoleColor.Red);
  3033.                             continue;
  3034.                         }
  3035.                         var filename = file.FileName; //Path.GetFileNameWithoutExtension(root);
  3036.                         if (filename == string.Empty)
  3037.                         {
  3038.                             filename = " ";
  3039.                             if (!Options.Silent) Echo("  missing name!", ConsoleColor.Red);
  3040.                             //continue;
  3041.                         }
  3042.                         var rel = file.DirectoryName; //Path.GetDirectoryName(root).Replace('\\', '/');
  3043.  
  3044.                         byte[] output;
  3045.                         package.ReadEntry(file, out output);
  3046.  
  3047.                         if (ModSrc.ContainsKey(filePath))
  3048.                         {
  3049.                             if (!Options.Silent) Console.WriteLine("MOD: {0}", filePath);
  3050.                             foreach (var m in ModSrc[filePath])
  3051.                             {
  3052.                                 if (!Options.Silent) Console.WriteLine("   >>{0}", m);
  3053.                                 filePath = m.Key;
  3054.                                 ext = Path.GetExtension(m.Key).TrimStart('.');
  3055.                                 filename = Path.GetFileNameWithoutExtension(m.Key);
  3056.                                 rel = Path.GetDirectoryName(m.Key).Replace('\\', '/');
  3057.                                 if (rel == string.Empty) {
  3058.                                     rel = " ";
  3059.                                 }
  3060.                                 if (!tree.ContainsKey(ext)) {
  3061.                                     tree[ext] = tree.New();
  3062.                                 }
  3063.                                 if (!tree[ext].ContainsKey(rel)) {
  3064.                                     tree[ext][rel] = tree[ext].New();
  3065.                                 }
  3066.                                 tree[ext][rel][filename] = output; //File.ReadAllBytes(path);
  3067.                             }
  3068.                         }
  3069.                         else
  3070.                         {
  3071.                             if (rel == string.Empty) {
  3072.                                 rel = " ";
  3073.                             }
  3074.                             if (!tree.ContainsKey(ext)) {
  3075.                                 tree[ext] = tree.New();
  3076.                             }
  3077.                             if (!tree[ext].ContainsKey(rel)) {
  3078.                                 tree[ext][rel] = tree[ext].New();
  3079.                             }
  3080.                           //package.ReadEntry(file, out output);
  3081.                             tree[ext][rel][filename] = output; //File.ReadAllBytes(path);
  3082.                         }
  3083.  
  3084.                     }
  3085.                 }
  3086.             }
  3087.  
  3088.             if (!modding)
  3089.             {
  3090.                 foreach (var path in paths)
  3091.                 {
  3092.                     if (!Options.Silent) Console.WriteLine("[{0}/{1}] {2}", ++CurrentFile, TotalFiles, path);
  3093.                     byte[] latin = Encoding.Convert(utf, iso, utf.GetBytes(path.Substring(Options.Input.Length)));
  3094.                     string root = iso.GetString(latin).ToLower();
  3095.                     var ext = Path.GetExtension(root).TrimStart('.');
  3096.                     if (ext == string.Empty)
  3097.                     {
  3098.                         ext = " ";
  3099.                         if (!Options.Silent) Echo("  missing extension!", ConsoleColor.Red);
  3100.                         //continue;
  3101.                     }
  3102.                     if (excluded.Contains(ext))
  3103.                     {
  3104.                         if (!Options.Silent) Echo("  illegal extension!", ConsoleColor.Red);
  3105.                         continue;
  3106.                     }
  3107.                     var filename = Path.GetFileNameWithoutExtension(root);
  3108.                     if (filename == string.Empty)
  3109.                     {
  3110.                         filename = " ";
  3111.                         if (!Options.Silent) Echo("  missing name!", ConsoleColor.Red);
  3112.                         //continue;
  3113.                     }
  3114.                     var rel = Path.GetDirectoryName(root).Replace('\\', '/');
  3115.                     if (rel == string.Empty) {
  3116.                         rel = " ";
  3117.                     }
  3118.                     if (!tree.ContainsKey(ext)) {
  3119.                         tree[ext] = tree.New();
  3120.                     }
  3121.                     if (!tree[ext].ContainsKey(rel)) {
  3122.                         tree[ext][rel] = tree[ext].New();
  3123.                     }
  3124.                     tree[ext][rel][filename] = File.ReadAllBytes(path);
  3125.                 }
  3126.             }
  3127.  
  3128.             foreach (var ext in tree)
  3129.             {
  3130.                 TreeSize += (uint)ext.Key.Length + 2;
  3131.               //Console.WriteLine("[ {0} ]",ext.Key);
  3132.                 foreach (var relpath in tree[ext.Key]) {
  3133.                     TreeSize += (uint)relpath.Key.Length + 2;
  3134.                   //Console.WriteLine("[ --- {0}", relpath.Key);
  3135.                     foreach (var filename in tree[ext.Key][relpath.Key]) {
  3136.                         TreeSize += (uint)filename.Key.Length + 1 + 18;
  3137.                       //Console.WriteLine("[ --- : ---> {0}.{1}", filename.Key, ext.Key);
  3138.                     }
  3139.                 }
  3140.             }
  3141.             TreeSize += 1;
  3142.             using (var input = new MemoryStream())
  3143.             {
  3144.                 input.Write(BitConverter.GetBytes(Signature), 0, 4);
  3145.                 input.Write(BitConverter.GetBytes(Version), 0, 4);
  3146.                 input.Write(BitConverter.GetBytes(TreeSize), 0, 4);
  3147.                 HeaderSize = (uint)input.Position;
  3148.                 var data_offset = HeaderSize + TreeSize;
  3149.                 foreach (var ext in tree) {
  3150.                   input.Write(Encoding.UTF8.GetBytes(ext.Key), 0, ext.Key.Length);
  3151.                   input.Write(new byte[] { 0x0 }, 0, 1);
  3152.                   foreach (var relpath in tree[ext.Key]) {
  3153.                     input.Write(Encoding.UTF8.GetBytes(relpath.Key), 0, relpath.Key.Length);
  3154.                     input.Write(new byte[] { 0x0 }, 0, 1);
  3155.                     foreach (var filename in tree[ext.Key][relpath.Key]) {
  3156.                       input.Write(Encoding.UTF8.GetBytes(filename.Key), 0, filename.Key.Length);
  3157.                       input.Write(new byte[] { 0x0 }, 0, 1);
  3158.                       var metadata_offset = (uint)input.Position;
  3159.                       var file_offset = data_offset;
  3160.                       uint checksum = 0;
  3161.                       input.Position = data_offset;
  3162.                       var file = tree[ext.Key][relpath.Key][filename.Key];
  3163.                     //if (modding) checksum = package.FindEntry(relpath.Key, filename.Key, ext.Key).CRC32;
  3164.                     //else checksum = Crc32.Compute(file);
  3165.                       checksum = Crc32.Compute(file);
  3166.                       input.Write(file, 0, file.Length);
  3167.                       data_offset = (uint)input.Position;
  3168.                       var file_length = data_offset - file_offset;
  3169.                       input.Position = metadata_offset;
  3170.                       input.Write(BitConverter.GetBytes(checksum & 0xFFffFFff), 0, 4);
  3171.                       input.Write(new byte[] { 0x0, 0x0 }, 0, 2);
  3172.                       input.Write(BitConverter.GetBytes(0x7fff), 0, 2);
  3173.                       input.Write(BitConverter.GetBytes(file_offset - TreeSize - HeaderSize), 0, 4);
  3174.                       input.Write(BitConverter.GetBytes(file_length), 0, 4);
  3175.                       input.Write(BitConverter.GetBytes(0xffff), 0, 2);
  3176.                     }
  3177.                     // next relpath
  3178.                     input.Write(new byte[] { 0x0 }, 0, 1);
  3179.                   }
  3180.                   // next ext
  3181.                   input.Write(new byte[] { 0x0 }, 0, 1);
  3182.                 }
  3183.                 // end of file tree
  3184.                 input.Write(new byte[] { 0x0 }, 0, 1);
  3185.                 data = input.ToArray();
  3186.             }
  3187.             DumpFile(Options.Output, data);
  3188.             sw.Stop();
  3189.             Echo(String.Format("--- Processed in {0}s", sw.Elapsed.TotalSeconds), ConsoleColor.Cyan);
  3190.         }
  3191.  
  3192.         private static void DumpVPK(Package package, string type)
  3193.         {
  3194.             var entries = package.Entries[type];
  3195.  
  3196.             foreach (var file in entries)
  3197.             {
  3198.                 var filePath = string.Format("{0}.{1}", file.FileName, file.TypeName);
  3199.  
  3200.                 if (!String.IsNullOrEmpty(file.DirectoryName))
  3201.                 {
  3202.                     filePath = Path.Combine(file.DirectoryName, filePath);
  3203.                 }
  3204.  
  3205.                 filePath = FixPathSlashes(filePath);
  3206.  
  3207.                 bool found = false;
  3208.                 if (FileFilter.Count > 0)
  3209.                 {
  3210.                     foreach (string filter in FileFilter)
  3211.                     {
  3212.                       if (filePath.StartsWith(filter, StringComparison.Ordinal)) found = true;
  3213.                     }
  3214.                     if (!found) continue;
  3215.                 }
  3216.                 else if (Options.PathFilter.Count > 0)
  3217.                 {
  3218.                     foreach (string filter in Options.PathFilter)
  3219.                     {
  3220.                       if (filePath.StartsWith(filter, StringComparison.Ordinal)) found = true;
  3221.                     }
  3222.                     if (!found) continue;
  3223.                 }
  3224.  
  3225.                 if (!String.IsNullOrEmpty(Options.Output))
  3226.                 {
  3227.                     uint oldCrc32;
  3228.                     if (Options.CachedManifest && OldPakManifest.TryGetValue(filePath, out oldCrc32) && oldCrc32 == file.CRC32)
  3229.                     {
  3230.                         continue;
  3231.                     }
  3232.                     OldPakManifest[filePath] = file.CRC32;
  3233.                 }
  3234.  
  3235.                 byte[] output;
  3236.                 package.ReadEntry(file, out output);
  3237.  
  3238.                 if (!String.IsNullOrEmpty(Options.Output))
  3239.                 {
  3240.                     DumpFile(filePath, output);
  3241.                 }
  3242.             }
  3243.         }
  3244.  
  3245.         private static void DumpFile(string path, byte[] data)
  3246.         {
  3247.             var outputFile = Path.Combine(Options.Output, path);
  3248.             Directory.CreateDirectory(Path.GetDirectoryName(outputFile));
  3249.             File.WriteAllBytes(outputFile, data);
  3250.             if (!Options.Silent) Console.WriteLine("--- Dump written to \"{0}\"", outputFile);
  3251.         }
  3252.  
  3253.         private static string FixPathSlashes(string path)
  3254.         {
  3255.             path = path.Replace('\\', '/');
  3256. //          if (Path.DirectorySeparatorChar != '/')
  3257. //          {
  3258. //              path = path.Replace('/', Path.DirectorySeparatorChar);
  3259. //          }
  3260.             return path;
  3261.         }
  3262.  
  3263.         public static void Echo(string msg, ConsoleColor clr)
  3264.         {
  3265.             lock (ConsoleWriterLock)
  3266.             {
  3267.                 Console.ForegroundColor = clr;
  3268.                 Console.Error.WriteLine(msg);
  3269.                 Console.ResetColor();
  3270.             }
  3271.         }
  3272.  
  3273.     }
  3274. }
Add Comment
Please, Sign In to add comment