namespace XFEWarframe.Client;
/// <summary>Audited ABI for the experimental binding; never guess offsets for a different executable.</summary>
public static class ExperimentalAbilityCompatibility
{
public const string ExecutableSha256 = "D01B5CB5CFF51AFC5FFB7D3AF051674AAFA84000BEE764780FF71D9D073CAD93";
public const int TypeBaseRva = 0x28A4800;
public sealed record Entry(string Name, int Rva, string Bytes);
public static IReadOnlyList<Entry> Entries { get; } = Array.AsReadOnly<Entry>([
new("ConfigSerialize", 0x26D280, "48895C241048896C241848897424205741544155415641574883EC40807A0A01"),
new("ConfigCopy", 0xA03DB0, "48895C24084889742410574883EC20488D05FA778601488BDA488901488BF948"),
new("ConfigMove", 0x2939E0, "48895C2408574883EC20488BF9488D05CC7BFD01488901488BDA0F1042080F11"),
new("ConfigAssign", 0x996BF0, "48895C2408574883EC20488BFA488BD94883C2084883C108E89351EF00488D57"),
new("ConfigMoveAssign", 0xD4B750, "48895C240848896C24104889742418574883EC20488BF1488BFA0FB6491748BD"),
new("ConfigDestroy", 0xB2CA20, "48895C2408574883EC20488D058FEB7301488BD94889014881C1C8010000E84D"),
new("BuildEquippedItem", 0x16FD050, "40555356574154415541564157488DAC24B8F5FFFF4881EC480B0000488B05"),
new("SuitInitialize", 0x1188240, "4055535657415541564157488D6C24D94881ECB00000004533ED4C89A424A800"),
new("SuitBeforeRanks", 0x11887E0, "E86BF30C008B1B448BD8418B8F7034000048C1E90448C1EB04483BCB480F42D9"),
new("OverrideSet", 0x11FA010, "48897C241841564883EC304C8B89C03600004C8BF2488B12488BF94C3BCA7511"),
new("OverrideApply", 0xE56050, "40555741564883EC404C8BF14881C1C0360000E8189BE2FF488B384885FF0F84"),
new("OverrideInheritScripts", 0xE56184, "E817C91200837B0C017546488B3B48C70300000000493BDF"),
new("SuitInput", 0x144CF80, "4053415541574883EC50450FB6E8448BFA488BD9E8A71F6C"),
new("SuitUpdate", 0x8E3180, "4C8BDC55535641564157498D6BC84881EC10010000450F29"),
new("AbilityUpdate", 0x17BFA30, "40534883EC70F30F108164060000488BD9"),
new("StrongReferenceCopy", 0x11DA70, "48895C2418574883EC20488B01488BFA488BD9483B0274"),
new("ProfileUpdate", 0x8DFD50, "48895C2408574883EC20488B01488BD933FFFF90E8000000"),
new("TryActivate", 0x42D2C0, "48895C24084889742410574883EC308B8150340000488BFA"),
new("Deactivate", 0x8CC310, "40574883EC50F6412107488BF9488B0188542468488D5424"),
new("SpecialItemLua", 0x1BBE150, "48895C2408574883EC20488BF9E8CEBB87FF488BCFE8766D"),
new("PushSpecialItem", 0x4BA6B0, "48895C24084889742410574883EC20498BD8488BFA4533C0"),
new("SpecialItem", 0x15374C0, "8D42FB3C0277110FB6C248050404000048C1E0044803C1C3"),
new("AtomText", 0x878810, "8B01488B0D87B102020FB7D048C1E20448C1E8104803040A"),
new("LuaType", 0x19768B0, "48895C241048897C241855488BEC4883EC50488B057793F1"),
new("AnimationSetLua", 0x19EB8E0, "48895C24084889742418574883EC40FF05C33AD400488D05"),
new("AnimationGetLua", 0x19EBBB0, "40534883EC20488BD9E8D2BE6CFF488BCBE81A93C5FF488B"),
new("SuitDestroy", 0xCDA7D0, "48895C241048896C2418565741564883EC20488BD94881C100430000E81FDA81"),
new("TypeSerialize", 0x1C5740, "48895C24084889742410574883EC4033C066C74424200A08488BFA8944242448"),
new("AbilityValidate", 0xC7FB80, "488B114C8BD14885D27463448B4208418BC0448B0DFFADD601410BC17C1B452B")
]);
public static bool Matches(BinaryImage image, string hash) => hash.Equals(ExecutableSha256, StringComparison.OrdinalIgnoreCase) &&
Entries.All(entry => image.Read(entry.Rva, entry.Bytes.Length / 2).AsSpan().SequenceEqual(Convert.FromHexString(entry.Bytes)));
}
namespace XFEWarframe.Client;
/// <summary>Audited ABI for the experimental binding; never guess offsets for a different executable.</summary>
public static class ExperimentalAbilityCompatibility
{
public const string ExecutableSha256 = "D01B5CB5CFF51AFC5FFB7D3AF051674AAFA84000BEE764780FF71D9D073CAD93";
public const int TypeBaseRva = 0x28A4800;
public sealed record Entry(string Name, int Rva, string Bytes);
public static IReadOnlyList<Entry> Entries { get; } = Array.AsReadOnly<Entry>([
new("ConfigSerialize", 0x26D280, "48895C241048896C241848897424205741544155415641574883EC40807A0A01"),
new("ConfigCopy", 0xA03DB0, "48895C24084889742410574883EC20488D05FA778601488BDA488901488BF948"),
new("ConfigMove", 0x2939E0, "48895C2408574883EC20488BF9488D05CC7BFD01488901488BDA0F1042080F11"),
new("ConfigAssign", 0x996BF0, "48895C2408574883EC20488BFA488BD94883C2084883C108E89351EF00488D57"),
new("ConfigMoveAssign", 0xD4B750, "48895C240848896C24104889742418574883EC20488BF1488BFA0FB6491748BD"),
new("ConfigDestroy", 0xB2CA20, "48895C2408574883EC20488D058FEB7301488BD94889014881C1C8010000E84D"),
new("BuildEquippedItem", 0x16FD050, "40555356574154415541564157488DAC24B8F5FFFF4881EC480B0000488B05"),
new("SuitInitialize", 0x1188240, "4055535657415541564157488D6C24D94881ECB00000004533ED4C89A424A800"),
new("SuitBeforeRanks", 0x11887E0, "E86BF30C008B1B448BD8418B8F7034000048C1E90448C1EB04483BCB480F42D9"),
new("OverrideSet", 0x11FA010, "48897C241841564883EC304C8B89C03600004C8BF2488B12488BF94C3BCA7511"),
new("OverrideApply", 0xE56050, "40555741564883EC404C8BF14881C1C0360000E8189BE2FF488B384885FF0F84"),
new("OverrideInheritScripts", 0xE56184, "E817C91200837B0C017546488B3B48C70300000000493BDF"),
new("SuitInput", 0x144CF80, "4053415541574883EC50450FB6E8448BFA488BD9E8A71F6C"),
new("SuitUpdate", 0x8E3180, "4C8BDC55535641564157498D6BC84881EC10010000450F29"),
new("AbilityUpdate", 0x17BFA30, "40534883EC70F30F108164060000488BD9"),
new("StrongReferenceCopy", 0x11DA70, "48895C2418574883EC20488B01488BFA488BD9483B0274"),
new("ProfileUpdate", 0x8DFD50, "48895C2408574883EC20488B01488BD933FFFF90E8000000"),
new("TryActivate", 0x42D2C0, "48895C24084889742410574883EC308B8150340000488BFA"),
new("Deactivate", 0x8CC310, "40574883EC50F6412107488BF9488B0188542468488D5424"),
new("SpecialItemLua", 0x1BBE150, "48895C2408574883EC20488BF9E8CEBB87FF488BCFE8766D"),
new("PushSpecialItem", 0x4BA6B0, "48895C24084889742410574883EC20498BD8488BFA4533C0"),
new("SpecialItem", 0x15374C0, "8D42FB3C0277110FB6C248050404000048C1E0044803C1C3"),
new("AtomText", 0x878810, "8B01488B0D87B102020FB7D048C1E20448C1E8104803040A"),
new("LuaType", 0x19768B0, "48895C241048897C241855488BEC4883EC50488B057793F1"),
new("AnimationSetLua", 0x19EB8E0, "48895C24084889742418574883EC40FF05C33AD400488D05"),
new("AnimationGetLua", 0x19EBBB0, "40534883EC20488BD9E8D2BE6CFF488BCBE81A93C5FF488B"),
new("SuitDestroy", 0xCDA7D0, "48895C241048896C2418565741564883EC20488BD94881C100430000E81FDA81"),
new("TypeSerialize", 0x1C5740, "48895C24084889742410574883EC4033C066C74424200A08488BFA8944242448"),
new("AbilityValidate", 0xC7FB80, "488B114C8BD14885D27463448B4208418BC0448B0DFFADD601410BC17C1B452B")
]);
public static bool Matches(BinaryImage image, string hash) => hash.Equals(ExecutableSha256, StringComparison.OrdinalIgnoreCase) &&
Entries.All(entry => image.Read(entry.Rva, entry.Bytes.Length / 2).AsSpan().SequenceEqual(Convert.FromHexString(entry.Bytes)));
}