import net.runelite.mapping.Export; import net.runelite.mapping.Implements; import net.runelite.mapping.ObfuscatedGetter; import net.runelite.mapping.ObfuscatedName; import net.runelite.mapping.ObfuscatedSignature; @ObfuscatedName("hq") @Implements("AbstractArchive") public abstract class AbstractArchive { @ObfuscatedName("k") @ObfuscatedSignature( signature = "Llj;" ) @Export("gzipDecompressor") static GZipDecompressor gzipDecompressor; @ObfuscatedName("e") @ObfuscatedGetter( intValue = -1159865063 ) static int field3128; @ObfuscatedName("hs") @ObfuscatedGetter( intValue = 906312301 ) @Export("oculusOrbFocalPointY") static int oculusOrbFocalPointY; @ObfuscatedName("t") @ObfuscatedGetter( intValue = -869416099 ) @Export("groupCount") int groupCount; @ObfuscatedName("n") @Export("groupIds") int[] groupIds; @ObfuscatedName("q") @Export("groupNameHashes") int[] groupNameHashes; @ObfuscatedName("v") @ObfuscatedSignature( signature = "Lle;" ) @Export("groupNameHashTable") IntHashTable groupNameHashTable; @ObfuscatedName("l") @Export("groupCrcs") int[] groupCrcs; @ObfuscatedName("c") @Export("groupVersions") int[] groupVersions; @ObfuscatedName("o") @Export("fileCounts") int[] fileCounts; @ObfuscatedName("i") @Export("fileIds") int[][] fileIds; @ObfuscatedName("d") @Export("fileNameHashes") int[][] fileNameHashes; @ObfuscatedName("m") @ObfuscatedSignature( signature = "[Lle;" ) @Export("fileNameHashTables") IntHashTable[] fileNameHashTables; @ObfuscatedName("p") @Export("groups") Object[] groups; @ObfuscatedName("h") @Export("files") Object[][] files; @ObfuscatedName("x") @ObfuscatedGetter( intValue = -514507625 ) @Export("hash") public int hash; @ObfuscatedName("j") @Export("releaseGroups") boolean releaseGroups; @ObfuscatedName("r") @Export("shallowFiles") boolean shallowFiles; static { gzipDecompressor = new GZipDecompressor(); field3128 = 0; } AbstractArchive(boolean var1, boolean var2) { this.releaseGroups = var1; this.shallowFiles = var2; } @ObfuscatedName("a") @ObfuscatedSignature( signature = "([BI)V", garbageValue = "-702728253" ) @Export("decodeIndex") void decodeIndex(byte[] var1) { int var3 = var1.length; int var2 = class3.method50(var1, 0, var3); this.hash = var2; Buffer var4 = new Buffer(ArchiveLoader.decompressBytes(var1)); int var5 = var4.readUnsignedByte(); if (var5 >= 5 && var5 <= 7) { if (var5 >= 6) { var4.readInt(); } int var6 = var4.readUnsignedByte(); if (var5 >= 7) { this.groupCount = var4.method5624(); } else { this.groupCount = var4.readUnsignedShort(); } int var7 = 0; int var8 = -1; this.groupIds = new int[this.groupCount]; int var9; if (var5 >= 7) { for (var9 = 0; var9 < this.groupCount; ++var9) { this.groupIds[var9] = var7 += var4.method5624(); if (this.groupIds[var9] > var8) { var8 = this.groupIds[var9]; } } } else { for (var9 = 0; var9 < this.groupCount; ++var9) { this.groupIds[var9] = var7 += var4.readUnsignedShort(); if (this.groupIds[var9] > var8) { var8 = this.groupIds[var9]; } } } this.groupCrcs = new int[var8 + 1]; this.groupVersions = new int[var8 + 1]; this.fileCounts = new int[var8 + 1]; this.fileIds = new int[var8 + 1][]; this.groups = new Object[var8 + 1]; this.files = new Object[var8 + 1][]; if (var6 != 0) { this.groupNameHashes = new int[var8 + 1]; for (var9 = 0; var9 < this.groupCount; ++var9) { this.groupNameHashes[this.groupIds[var9]] = var4.readInt(); } this.groupNameHashTable = new IntHashTable(this.groupNameHashes); } for (var9 = 0; var9 < this.groupCount; ++var9) { this.groupCrcs[this.groupIds[var9]] = var4.readInt(); } for (var9 = 0; var9 < this.groupCount; ++var9) { this.groupVersions[this.groupIds[var9]] = var4.readInt(); } for (var9 = 0; var9 < this.groupCount; ++var9) { this.fileCounts[this.groupIds[var9]] = var4.readUnsignedShort(); } int var10; int var11; int var12; int var13; int var14; if (var5 >= 7) { for (var9 = 0; var9 < this.groupCount; ++var9) { var10 = this.groupIds[var9]; var11 = this.fileCounts[var10]; var7 = 0; var12 = -1; this.fileIds[var10] = new int[var11]; for (var13 = 0; var13 < var11; ++var13) { var14 = this.fileIds[var10][var13] = var7 += var4.method5624(); if (var14 > var12) { var12 = var14; } } this.files[var10] = new Object[var12 + 1]; } } else { for (var9 = 0; var9 < this.groupCount; ++var9) { var10 = this.groupIds[var9]; var11 = this.fileCounts[var10]; var7 = 0; var12 = -1; this.fileIds[var10] = new int[var11]; for (var13 = 0; var13 < var11; ++var13) { var14 = this.fileIds[var10][var13] = var7 += var4.readUnsignedShort(); if (var14 > var12) { var12 = var14; } } this.files[var10] = new Object[var12 + 1]; } } if (var6 != 0) { this.fileNameHashes = new int[var8 + 1][]; this.fileNameHashTables = new IntHashTable[var8 + 1]; for (var9 = 0; var9 < this.groupCount; ++var9) { var10 = this.groupIds[var9]; var11 = this.fileCounts[var10]; this.fileNameHashes[var10] = new int[this.files[var10].length]; for (var12 = 0; var12 < var11; ++var12) { this.fileNameHashes[var10][this.fileIds[var10][var12]] = var4.readInt(); } this.fileNameHashTables[var10] = new IntHashTable(this.fileNameHashes[var10]); } } } else { throw new RuntimeException(""); } } @ObfuscatedName("t") @ObfuscatedSignature( signature = "(IB)V", garbageValue = "117" ) @Export("loadRegionFromGroup") void loadRegionFromGroup(int var1) { } @ObfuscatedName("n") @ObfuscatedSignature( signature = "(III)[B", garbageValue = "-1573138603" ) @Export("takeFile") public byte[] takeFile(int var1, int var2) { return this.takeFileEncrypted(var1, var2, (int[])null); } @ObfuscatedName("q") @ObfuscatedSignature( signature = "(II[IB)[B", garbageValue = "0" ) @Export("takeFileEncrypted") public byte[] takeFileEncrypted(int var1, int var2, int[] var3) { if (var1 >= 0 && var1 < this.files.length && this.files[var1] != null && var2 >= 0 && var2 < this.files[var1].length) { if (this.files[var1][var2] == null) { boolean var4 = this.buildFiles(var1, var3); if (!var4) { this.loadGroup(var1); var4 = this.buildFiles(var1, var3); if (!var4) { return null; } } } byte[] var5 = Decimator.serialize(this.files[var1][var2], false); if (this.shallowFiles) { this.files[var1][var2] = null; } return var5; } else { return null; } } @ObfuscatedName("v") @ObfuscatedSignature( signature = "(III)Z", garbageValue = "2054202524" ) @Export("tryLoadFile") public boolean tryLoadFile(int var1, int var2) { if (var1 >= 0 && var1 < this.files.length && this.files[var1] != null && var2 >= 0 && var2 < this.files[var1].length) { if (this.files[var1][var2] != null) { return true; } else if (this.groups[var1] != null) { return true; } else { this.loadGroup(var1); return this.groups[var1] != null; } } else { return false; } } @ObfuscatedName("l") @ObfuscatedSignature( signature = "(IS)Z", garbageValue = "-31796" ) public boolean method4327(int var1) { if (this.files.length == 1) { return this.tryLoadFile(0, var1); } else if (this.files[var1].length == 1) { return this.tryLoadFile(var1, 0); } else { throw new RuntimeException(); } } @ObfuscatedName("c") @ObfuscatedSignature( signature = "(II)Z", garbageValue = "-1781242235" ) @Export("tryLoadGroup") public boolean tryLoadGroup(int var1) { if (this.groups[var1] != null) { return true; } else { this.loadGroup(var1); return this.groups[var1] != null; } } @ObfuscatedName("o") @ObfuscatedSignature( signature = "(I)Z", garbageValue = "-2109708107" ) @Export("isFullyLoaded") public boolean isFullyLoaded() { boolean var1 = true; for (int var2 = 0; var2 < this.groupIds.length; ++var2) { int var3 = this.groupIds[var2]; if (this.groups[var3] == null) { this.loadGroup(var3); if (this.groups[var3] == null) { var1 = false; } } } return var1; } @ObfuscatedName("i") @ObfuscatedSignature( signature = "(II)I", garbageValue = "-778670663" ) @Export("groupLoadPercent") int groupLoadPercent(int var1) { return this.groups[var1] != null ? 100 : 0; } @ObfuscatedName("d") @ObfuscatedSignature( signature = "(IB)[B", garbageValue = "-112" ) @Export("takeFileFlat") public byte[] takeFileFlat(int var1) { if (this.files.length == 1) { return this.takeFile(0, var1); } else if (this.files[var1].length == 1) { return this.takeFile(var1, 0); } else { throw new RuntimeException(); } } @ObfuscatedName("m") @ObfuscatedSignature( signature = "(III)[B", garbageValue = "-315309482" ) @Export("getFile") public byte[] getFile(int var1, int var2) { if (var1 >= 0 && var1 < this.files.length && this.files[var1] != null && var2 >= 0 && var2 < this.files[var1].length) { if (this.files[var1][var2] == null) { boolean var3 = this.buildFiles(var1, (int[])null); if (!var3) { this.loadGroup(var1); var3 = this.buildFiles(var1, (int[])null); if (!var3) { return null; } } } byte[] var4 = Decimator.serialize(this.files[var1][var2], false); return var4; } else { return null; } } @ObfuscatedName("p") @ObfuscatedSignature( signature = "(II)[B", garbageValue = "-2080975442" ) @Export("getFileFlat") public byte[] getFileFlat(int var1) { if (this.files.length == 1) { return this.getFile(0, var1); } else if (this.files[var1].length == 1) { return this.getFile(var1, 0); } else { throw new RuntimeException(); } } @ObfuscatedName("h") @ObfuscatedSignature( signature = "(II)V", garbageValue = "664192835" ) @Export("loadGroup") void loadGroup(int var1) { } @ObfuscatedName("k") @ObfuscatedSignature( signature = "(II)[I", garbageValue = "1547416359" ) @Export("getGroupFileIds") public int[] getGroupFileIds(int var1) { return var1 >= 0 && var1 < this.fileIds.length ? this.fileIds[var1] : null; } @ObfuscatedName("x") @ObfuscatedSignature( signature = "(II)I", garbageValue = "-829743673" ) @Export("getGroupFileCount") public int getGroupFileCount(int var1) { return this.files[var1].length; } @ObfuscatedName("j") @ObfuscatedSignature( signature = "(B)I", garbageValue = "107" ) @Export("getGroupCount") public int getGroupCount() { return this.files.length; } @ObfuscatedName("r") @ObfuscatedSignature( signature = "(I)V", garbageValue = "77380292" ) @Export("clearGroups") public void clearGroups() { for (int var1 = 0; var1 < this.groups.length; ++var1) { this.groups[var1] = null; } } @ObfuscatedName("e") @ObfuscatedSignature( signature = "(IB)V", garbageValue = "17" ) @Export("clearFilesGroup") public void clearFilesGroup(int var1) { for (int var2 = 0; var2 < this.files[var1].length; ++var2) { this.files[var1][var2] = null; } } @ObfuscatedName("s") @ObfuscatedSignature( signature = "(I)V", garbageValue = "1828023605" ) @Export("clearFiles") public void clearFiles() { for (int var1 = 0; var1 < this.files.length; ++var1) { if (this.files[var1] != null) { for (int var2 = 0; var2 < this.files[var1].length; ++var2) { this.files[var1][var2] = null; } } } } @ObfuscatedName("b") @ObfuscatedSignature( signature = "(I[II)Z", garbageValue = "1853690533" ) @Export("buildFiles") boolean buildFiles(int var1, int[] var2) { if (this.groups[var1] == null) { return false; } else { int var3 = this.fileCounts[var1]; int[] var4 = this.fileIds[var1]; Object[] var5 = this.files[var1]; boolean var6 = true; for (int var7 = 0; var7 < var3; ++var7) { if (var5[var4[var7]] == null) { var6 = false; break; } } if (var6) { return true; } else { byte[] var18; if (var2 == null || var2[0] == 0 && var2[1] == 0 && var2[2] == 0 && var2[3] == 0) { var18 = Decimator.serialize(this.groups[var1], false); } else { var18 = Decimator.serialize(this.groups[var1], true); Buffer var8 = new Buffer(var18); var8.xteaDecrypt(var2, 5, var8.array.length); } byte[] var20 = ArchiveLoader.decompressBytes(var18); if (this.releaseGroups) { this.groups[var1] = null; } if (var3 > 1) { int var9 = var20.length; --var9; int var10 = var20[var9] & 255; var9 -= var10 * var3 * 4; Buffer var11 = new Buffer(var20); int[] var12 = new int[var3]; var11.offset = var9; int var14; int var15; for (int var13 = 0; var13 < var10; ++var13) { var14 = 0; for (var15 = 0; var15 < var3; ++var15) { var14 += var11.readInt(); var12[var15] += var14; } } byte[][] var19 = new byte[var3][]; for (var14 = 0; var14 < var3; ++var14) { var19[var14] = new byte[var12[var14]]; var12[var14] = 0; } var11.offset = var9; var14 = 0; for (var15 = 0; var15 < var10; ++var15) { int var16 = 0; for (int var17 = 0; var17 < var3; ++var17) { var16 += var11.readInt(); System.arraycopy(var20, var14, var19[var17], var12[var17], var16); var12[var17] += var16; var14 += var16; } } for (var15 = 0; var15 < var3; ++var15) { if (!this.shallowFiles) { var5[var4[var15]] = MusicPatchPcmStream.method4064(var19[var15], false); } else { var5[var4[var15]] = var19[var15]; } } } else if (!this.shallowFiles) { var5[var4[0]] = MusicPatchPcmStream.method4064(var20, false); } else { var5[var4[0]] = var20; } return true; } } } @ObfuscatedName("w") @ObfuscatedSignature( signature = "(Ljava/lang/String;I)I", garbageValue = "-568803871" ) @Export("getGroupId") public int getGroupId(String var1) { var1 = var1.toLowerCase(); return this.groupNameHashTable.get(WorldMapIcon_0.hashString(var1)); } @ObfuscatedName("u") @ObfuscatedSignature( signature = "(ILjava/lang/String;B)I", garbageValue = "1" ) @Export("getFileId") public int getFileId(int var1, String var2) { var2 = var2.toLowerCase(); return this.fileNameHashTables[var1].get(WorldMapIcon_0.hashString(var2)); } @ObfuscatedName("ad") @ObfuscatedSignature( signature = "(Ljava/lang/String;Ljava/lang/String;B)Z", garbageValue = "-1" ) @Export("isValidFileName") public boolean isValidFileName(String var1, String var2) { var1 = var1.toLowerCase(); var2 = var2.toLowerCase(); int var3 = this.groupNameHashTable.get(WorldMapIcon_0.hashString(var1)); if (var3 < 0) { return false; } else { int var4 = this.fileNameHashTables[var3].get(WorldMapIcon_0.hashString(var2)); return var4 >= 0; } } @ObfuscatedName("ag") @ObfuscatedSignature( signature = "(Ljava/lang/String;Ljava/lang/String;I)[B", garbageValue = "1996624784" ) @Export("takeFileByNames") public byte[] takeFileByNames(String var1, String var2) { var1 = var1.toLowerCase(); var2 = var2.toLowerCase(); int var3 = this.groupNameHashTable.get(WorldMapIcon_0.hashString(var1)); int var4 = this.fileNameHashTables[var3].get(WorldMapIcon_0.hashString(var2)); return this.takeFile(var3, var4); } @ObfuscatedName("ak") @ObfuscatedSignature( signature = "(Ljava/lang/String;Ljava/lang/String;I)Z", garbageValue = "1453372171" ) @Export("tryLoadFileByNames") public boolean tryLoadFileByNames(String var1, String var2) { var1 = var1.toLowerCase(); var2 = var2.toLowerCase(); int var3 = this.groupNameHashTable.get(WorldMapIcon_0.hashString(var1)); int var4 = this.fileNameHashTables[var3].get(WorldMapIcon_0.hashString(var2)); return this.tryLoadFile(var3, var4); } @ObfuscatedName("av") @ObfuscatedSignature( signature = "(Ljava/lang/String;I)Z", garbageValue = "1150520386" ) @Export("tryLoadGroupByName") public boolean tryLoadGroupByName(String var1) { var1 = var1.toLowerCase(); int var2 = this.groupNameHashTable.get(WorldMapIcon_0.hashString(var1)); return this.tryLoadGroup(var2); } @ObfuscatedName("am") @ObfuscatedSignature( signature = "(Ljava/lang/String;B)V", garbageValue = "-94" ) @Export("loadRegionFromName") public void loadRegionFromName(String var1) { var1 = var1.toLowerCase(); int var2 = this.groupNameHashTable.get(WorldMapIcon_0.hashString(var1)); if (var2 >= 0) { this.loadRegionFromGroup(var2); } } @ObfuscatedName("ab") @ObfuscatedSignature( signature = "(Ljava/lang/String;B)I", garbageValue = "125" ) @Export("groupLoadPercentByName") public int groupLoadPercentByName(String var1) { var1 = var1.toLowerCase(); int var2 = this.groupNameHashTable.get(WorldMapIcon_0.hashString(var1)); return this.groupLoadPercent(var2); } @ObfuscatedName("t") @ObfuscatedSignature( signature = "(II)Ljava/lang/String;", garbageValue = "-1378160996" ) @Export("colorStartTag") static String colorStartTag(int var0) { return ""; } @ObfuscatedName("fm") @ObfuscatedSignature( signature = "(II)V", garbageValue = "-1166291616" ) @Export("getLoginError") static void getLoginError(int var0) { if (var0 == -3) { GrandExchangeOffer.setLoginResponseString("Connection timed out.", "Please try using a different world.", ""); } else if (var0 == -2) { GrandExchangeOffer.setLoginResponseString("", "Error connecting to server.", ""); } else if (var0 == -1) { GrandExchangeOffer.setLoginResponseString("No response from server.", "Please try using a different world.", ""); } else if (var0 == 3) { Login.loginIndex = 3; Login.field1166 = 1; } else if (var0 == 4) { Login.loginIndex = 12; Login.field1156 = 0; } else if (var0 == 5) { Login.field1166 = 2; GrandExchangeOffer.setLoginResponseString("Your account has not logged out from its last", "session or the server is too busy right now.", "Please try again in a few minutes."); } else if (var0 == 68 || !Client.onMobile && var0 == 6) { GrandExchangeOffer.setLoginResponseString("RuneScape has been updated!", "Please reload this page.", ""); } else if (var0 == 7) { GrandExchangeOffer.setLoginResponseString("This world is full.", "Please use a different world.", ""); } else if (var0 == 8) { GrandExchangeOffer.setLoginResponseString("Unable to connect.", "Login server offline.", ""); } else if (var0 == 9) { GrandExchangeOffer.setLoginResponseString("Login limit exceeded.", "Too many connections from your address.", ""); } else if (var0 == 10) { GrandExchangeOffer.setLoginResponseString("Unable to connect.", "Bad session id.", ""); } else if (var0 == 11) { GrandExchangeOffer.setLoginResponseString("We suspect someone knows your password.", "Press 'change your password' on front page.", ""); } else if (var0 == 12) { GrandExchangeOffer.setLoginResponseString("You need a members account to login to this world.", "Please subscribe, or use a different world.", ""); } else if (var0 == 13) { GrandExchangeOffer.setLoginResponseString("Could not complete login.", "Please try using a different world.", ""); } else if (var0 == 14) { GrandExchangeOffer.setLoginResponseString("The server is being updated.", "Please wait 1 minute and try again.", ""); } else if (var0 == 16) { GrandExchangeOffer.setLoginResponseString("Too many login attempts.", "Please wait a few minutes before trying again.", ""); } else if (var0 == 17) { GrandExchangeOffer.setLoginResponseString("You are standing in a members-only area.", "To play on this world move to a free area first", ""); } else if (var0 == 18) { Login.loginIndex = 12; Login.field1156 = 1; } else if (var0 == 19) { GrandExchangeOffer.setLoginResponseString("This world is running a closed Beta.", "Sorry invited players only.", "Please use a different world."); } else if (var0 == 20) { GrandExchangeOffer.setLoginResponseString("Invalid loginserver requested.", "Please try using a different world.", ""); } else if (var0 == 22) { GrandExchangeOffer.setLoginResponseString("Malformed login packet.", "Please try again.", ""); } else if (var0 == 23) { GrandExchangeOffer.setLoginResponseString("No reply from loginserver.", "Please wait 1 minute and try again.", ""); } else if (var0 == 24) { GrandExchangeOffer.setLoginResponseString("Error loading your profile.", "Please contact customer support.", ""); } else if (var0 == 25) { GrandExchangeOffer.setLoginResponseString("Unexpected loginserver response.", "Please try using a different world.", ""); } else if (var0 == 26) { GrandExchangeOffer.setLoginResponseString("This computers address has been blocked", "as it was used to break our rules.", ""); } else if (var0 == 27) { GrandExchangeOffer.setLoginResponseString("", "Service unavailable.", ""); } else if (var0 == 31) { GrandExchangeOffer.setLoginResponseString("Your account must have a displayname set", "in order to play the game. Please set it", "via the website, or the main game."); } else if (var0 == 32) { GrandExchangeOffer.setLoginResponseString("Your attempt to log into your account was", "unsuccessful. Don't worry, you can sort", "this out by visiting the billing system."); } else if (var0 == 37) { GrandExchangeOffer.setLoginResponseString("Your account is currently inaccessible.", "Please try again in a few minutes.", ""); } else if (var0 == 38) { GrandExchangeOffer.setLoginResponseString("You need to vote to play!", "Visit runescape.com and vote,", "and then come back here!"); } else if (var0 == 55) { Login.loginIndex = 8; } else { if (var0 == 56) { GrandExchangeOffer.setLoginResponseString("Enter the 6-digit code generated by your", "authenticator app.", ""); Tile.updateGameState(11); return; } if (var0 == 57) { GrandExchangeOffer.setLoginResponseString("The code you entered was incorrect.", "Please try again.", ""); Tile.updateGameState(11); return; } if (var0 == 61) { Login.loginIndex = 7; } else { GrandExchangeOffer.setLoginResponseString("Unexpected server response", "Please try using a different world.", ""); } } Tile.updateGameState(10); } }