Fichiers T4C Worlds et T4C Edit
Format des fichiers T4C Worlds.wda et T4C Edit.wda
Sur cette page vous seront exposés tous les algorithmes et les constantes nécessaires à la programmation de votre propre éditeur de ressources du jeu. Les index de liste déroulante sont les mêmes que ceux des listes déroulantes de l'éditeur Vircom. Le cryptage est un XOR sur des blocs de données de 3418 octets.
Valeurs des constantes et format des paramètres des effets de sort
Types d'effet de sort et paramètres (données provenant des WDAtools).
NOTE: l'effet "Player edit" n'est pas un effet présent dans le serveur T4C 1.25 de Vircom ; il s'agit d'une addition binaire faite par Jean Suifou sous forme de patch. Cet effet permet de lire/écrire dans un flag défini certains offsets de la structure du joueur, permettant ainsi à un sort de récupérer ou d'agir sur ce dernier de manière plus approfondie que ce que le format WDA de base et l'éditeur de Vircom ne permettent.
[EFFET] [PARAMETRE 1] [PARAMETRE 2] [PARAMETRE 3] [PARAMETRE 4] Modify health Formule Rayon %age de succès Attribute boost RT upd. TRUE|FALSE Nom de la stat Formule Modify flag ID du flag Valeur Player edit 0 = Get | 1 = Set Offset Taille des données ID flag dest Effect 5 Summon Type (Monster|NPC) ID texte Recall Position X Position Y Monde Effect 8 Spell hook Sort Type de hook %age de succès Délai initial Drain health Formule Rayon %Retourné %age de succès Sanctuary Vaporize [GM] Dispel Sort %age de succès Deal exhaust Epuis. attaque Epuis. mental Epuis. physique %age de succès Invisibility %age de succès Effet visuel Detect invis. %age de succès Effet visuel Detect hidden %age de succès Effet visuel
Les valeurs ci-dessous sont fournies pour référence seulement car elles concernent l'effet "Player Edit" de Jean Suifou.
[OFFSET] [TAILLE] [DESCRIPTION] 96 2 octets Intelligence pure 98 2 octets Endurance pure 100 2 octets Force pure 102 2 octets Agilité pure 106 2 octets Sagesse pure 110 2 octets Esquive pure 112 2 octets Attaque pure 120 4 octets ID du joueur dans la base de données 124 4 octets ID du skin du joueur 128 4 octets Karma 188 4 octets Position Y sur la carte 192 4 octets Numéro du monde (0,1,2,3...) 196 4 octets Position X sur la carte 238 4 octets Niveau 312 2 octets Points de vie maximum 316 2 octets Points de vie actuels 320 2 octets Mana maximum 322 2 octets Mana actuelle 336 4 octets XP (données incomplètes) 408 4 octets Or sur soi 480 2 octets Points de compétence disponibles 482 2 octets Points de caractéristiques disponibles 12512 2 octets Poids maximal transportable
Structure des fichiers T4C Worlds.wda et T4C Edit.wda décryptés
TODO: mettre en forme
Taille type Description
===============================================================================
4 unsigned long Marqueur (toujours 68775)
1 unsigned char Type de WDA (T4C Worlds(RO) = 0x01, T4C Edit(RW) = 0x00)
Bloc des Sorts
==============
4 unsigned long Nombre de sorts
Pour chaque sort:
{
4 unsigned long ID du sort (gamme: 10000 - 10999)
4 unsigned long Taille de la chaîne de caractères suivante
(variable) char * Nom du sort
4 unsigned long Taille de la chaîne de caractères suivante
(variable) char * Epuisement mental
4 unsigned long Taille de la chaîne de caractères suivante
(variable) char * Epuisement physique
4 unsigned long Taille de la chaîne de caractères suivante
(variable) char * Epuisement attaque
4 unsigned long Taille de la chaîne de caractères suivante
(variable) char * Durée
4 unsigned long Taille de la chaîne de caractères suivante
(variable) char * Fréquence de temps
4 unsigned long Elément (index liste déroulante, débute à 0)
4 unsigned long Taille de la chaîne de caractères suivante
(variable) char * Coût de mana
4 unsigned long Rayon des dégâts
4 unsigned long Effet visuel (index liste déroulante, débute à 30000)
4 unsigned long Effet visuel sur la cible (index liste déroulante, débute à 30000)
4 unsigned long Type de cible (index liste déroulante, débute à 0)
4 unsigned long Type d'attaque (index liste déroulante, 1 = physique, 2 = mentale)
4 unsigned long Minimum sagesse
4 unsigned long Minimum intelligence
4 unsigned long Level minimum
1 bool Ligne de vue
1 bool Contrôle PVP
1 bool Sort d'attaque
4 unsigned long Icône du sort (index liste déroulante, débute à 0)
4 unsigned long Taille de la chaîne de caractères suivante
(variable) char * % de réussite
4 unsigned long Taille de la chaîne de caractères suivante
(variable) char * Description
4 unsigned long Nombre d'effets du sort
Pour chaque effet de sort:
{
4 unsigned long Type d'effet (index liste déroulante, débute à 1)
4 unsigned long Nombre de paramètres dans l'effet
Pour chaque paramètre:
{
4 unsigned long Numéro du paramètre (débute à 1)
4 unsigned long Taille de la chaîne de caractères suivante
(variable) char * Expression littérale du paramètre
}
}
4 unsigned long Nombre de sorts pré-requis
Pour chaque sort pré-requis:
{
4 unsigned long ID du sort pré-requis
}
}
Bloc des Cartes
===============
4 unsigned long Nombre de cartes
Dans le cas du fichier T4C Edit.wda, ce fichier ne contient pas de cartes de collision ; la valeur ci-dessus est donc toujours 0 et les données du fichier passent directement au bloc des objets (voir plus loin). Dans le cas du fichier T4C Worlds, ce fichier contient des cartes de collision et les données du fichier incluent donc les structures suivantes.
Pour chaque carte:
{
2 unsigned short Numéro de la carte (indice Z)
4 unsigned long Taille de la chaîne de caractères suivante
(variable) char * Nom de la carte
2 unsigned short Taille X de la carte (en principe 3072)
2 unsigned short Taille Y de la carte (en principe 3072)
Pour chaque position Y sur la carte:
{
Pour chaque position X sur la carte:
{
0.5 4 bits Code de couleur (débute à 0)
}
}
}
Voici donc le bloc des objets, suivi des blocs restants du fichier :
Bloc des Objets
===============
4 unsigned long Nombre d'objets
Pour chaque objet:
{
4 unsigned long Taille de la chaîne de caractères suivante
(variable) char * ID de l'objet
4 unsigned long ID numérique de l'objet (gamme 89 - LONG_MAX)
4 unsigned long Structure de l'objet (index liste déroulante, débute à 0)
4 unsigned long Taille de la chaîne de caractères suivante
(variable) char * Nom de l'objet
4 unsigned long ID de l'apparence de l'objet
1 unsigned char Bitmask (type d'objet): ???|rebut|bijou|potion|magique|signe|armure|arme
1 unsigned char ??? (toujours 0x00)
1 unsigned char ??? (toujours 0x00)
1 unsigned char ??? (toujours 0x00)
4 unsigned long Position dans l'équipement (index liste déroulante, débute à 0. -1=non équip)
4 unsigned long Prix de vente
4 unsigned long Poids
8 double Classe d'Armure (CA)
4 unsigned long Esquive perdue
4 unsigned long Endurance minimum
4 unsigned long Taille de la chaîne de caractères suivante
(variable) char * Formule de dégâts
4 unsigned long Attaque requise
4 unsigned long Force requise
4 unsigned long Agilité requise
4 unsigned long Taille de la chaîne de caractères suivante
(variable) char * Nom de l'objet serrure
4 unsigned long Difficulté de la serrure
4 unsigned long Taille de la chaîne de caractères suivante
(variable) char * Texte du signe
4 unsigned long Pièces d'or dans le conteneur
4 unsigned long Temps de respawn global du conteneur
4 unsigned long Temps de respawn du conteneur
4 unsigned long Taille de la chaîne de caractères suivante
(variable) char * Temps entre chaque coup
4 unsigned long Radiance
4 unsigned long Nombre de charges
4 unsigned long Intelligence minimum
4 unsigned long Sagesse minimum
4 unsigned long ??? (toujours 0x00)
1 unsigned char Bitmask: Non-mul|détr.renaiss|non-cach|non-équip|non-rebut|non-vol|???|non-jet
1 unsigned char ??? (toujours 0x00)
1 unsigned char ??? (toujours 0x00)
1 unsigned char ??? (toujours 0x00)
1 bool Objet unique
4 unsigned long Taille de la chaîne de caractères suivante
(variable) char * Emplacement
1 bool Peut être invoqué
1 bool Arc
1 bool Usage illimité
1 unsigned long Nombre de groupes d'objets dans le conteneur
Pour chaque groupe d'objets dans le conteneur:
{
1 unsigned long Nombre d'objets dans le groupe
Pour chaque objet dans le groupe:
{
4 unsigned long Taille de la chaîne de caractères suivante
(variable) char * ID de l'objet
}
}
4 unsigned long Nombre de boosts associés à l'objet
Pour chaque boost associé à l'objet:
{
4 unsigned long ID du boost (ID sauvée dans la base de données)
4 unsigned long Stat à booster
4 unsigned long Taille de la chaîne de caractères suivante
(variable) char * Valeur du boost
4 unsigned long Intelligence minimum pour que le boost s'active
4 unsigned long Sagesse minimum pour que le boost s'active
}
4 unsigned long Nombre de sorts associés à l'objet
Pour chaque sort associé à l'objet:
{
4 unsigned long ID du sort
4 unsigned long Enclenchement (index liste déroulante, débute à 0, NON SEQUENTIEL!)
4 unsigned long Level minimum
}
}
Bloc des Positions des objets
=============================
4 unsigned long Nombre de positions d'objet
Pour chaque position d'objet:
{
4 unsigned long Taille de la chaîne de caractères suivante
(variable) char * Nom de la position d'objet
4 unsigned long Position X
4 unsigned long Position Y
4 unsigned long Numéro de la carte (indice Z)
}
Bloc des Créatures
==================
4 unsigned long Nombre de créatures
Pour chaque créature:
{
4 unsigned long ID numérique (gamme 1 - LONG_MAX)
4 unsigned long Taille de la chaîne de caractères suivante
(variable) char * ID de la créature
4 unsigned long Taille de la chaîne de caractères suivante
(variable) char * Nom de la créature
4 unsigned long Force
4 unsigned long Endurance
4 unsigned long Agilité
4 unsigned long Intelligence
4 unsigned long ??? (Volonté, toujours 0)
4 unsigned long Sagesse
4 unsigned long ??? (Chance, toujours 0)
4 unsigned long Résistance Air
4 unsigned long Résistance Terre
4 unsigned long Résistance Eau
4 unsigned long Résistance Feu
4 unsigned long Résistance Nécromancie
4 unsigned long Résistance Lumière
4 unsigned long Puissance Air
4 unsigned long Puissance Terre
4 unsigned long Puissance Eau
4 unsigned long Puissance Feu
4 unsigned long Puissance Nécromancie
4 unsigned long Puissance Lumière
4 unsigned long Niveau
4 unsigned long Points de vie (HP)
4 unsigned long Esquive
8 double Classe d'armure
4 unsigned long Apparence
4 unsigned long ID d'objet (vêtement corps)
4 unsigned long ID d'objet (vêtement pieds)
4 unsigned long ID d'objet (vêtement mains)
4 unsigned long ID d'objet (vêtement tête)
4 unsigned long ID d'objet (vêtement jambes)
4 unsigned long ID d'objet (arme)
4 unsigned long ID d'objet (bouclier)
4 unsigned long ID d'objet (vêtement dos)
4 unsigned long Agressivité
4 unsigned long ID du clan de la créature
4 unsigned long ??? (Vitesse, toujours 0)
8 double Expérience reçue par coup porté
8 double Expérience reçue à la mort de la créature
4 unsigned long Minimum de pièces d'or abandonné par la créature lors de sa mort
4 unsigned long Maximum de pièces d'or abandonné par la créature lors de sa mort
1 bool Peut attaquer
4 unsigned long Nombre de types d'attaque
Pour chaque type d'attaque:
{
4 unsigned long Taille de la chaîne de caractères suivante
(variable) char * Formule de dégâts
4 unsigned long Niveau d'attaque (0 pour les sorts)
4 unsigned long Pourcentage de succès
4 unsigned long ID du sort lié à l'attaque
4 unsigned long Distance minimale de lancement du sort
4 unsigned long Distance maximale de lancement du sort
}
4 unsigned long Nombre de flags donnés à la mort de la créature
Pour chaque flag donné à la mort de la créature:
{
4 unsigned long ID du flag
4 unsigned long Valeur du flag
1 bool Incrémenter la valeur précédente
}
4 unsigned long Nombre d'objets abandonnés par la créature à sa mort
Pour chaque objet abandonné par la créature à sa mort:
{
4 unsigned long ID de l'objet abandonné
8 double Pourcentage de chances que cet objet soit abandonné
}
}
Bloc des Groupes de créatures
=============================
4 unsigned long Nombre de groupes de créatures
Pour chaque groupe de créatures:
{
4 unsigned long Temps d'apparition minimum
4 unsigned long Temps d'apparition maximum
4 unsigned long Distance maximale d'apparition par-rapport à la position indiquée
4 unsigned long Nombre minimal d'apparitions
4 unsigned long Taille de la chaîne de caractères suivante
(variable) char * Nom du groupe de créatures
4 unsigned long Nombre de créatures
Pour chaque créature:
{
4 unsigned long Taille de la chaîne de caractères suivante
(variable) char * ID de la créature
}
4 unsigned long Nombre de positions d'apparition
Pour chaque position d'apparition:
{
4 unsigned long Position X
4 unsigned long Position Y
4 unsigned long Numéro de la carte (indice Z)
}
}
Bloc des Téléportations
=======================
4 unsigned long Nombre de téléportations
Pour chaque téléportation:
{
4 unsigned long Position X de départ
4 unsigned long Position Y de départ
4 unsigned long Numéro de la carte (indice Z) de départ
4 unsigned long Position X d'arrivée
4 unsigned long Position Y d'arrivée
4 unsigned long Numéro de la carte (indice Z) d'arrivée
}
Bloc des Relations entre clans
==============================
4 unsigned long ID du clan la plus élevée (cf. bloc des clans)
4 unsigned long Nombre de relations entre clans
Pour chaque relation entre clans:
{
2 unsigned short ID du premier clan
2 unsigned short ID du second clan
2 signed short Relation entre les clans (-100 = amour, 0 = neutre, 100 = haine)
}
Bloc des Clans
==============
4 unsigned long Nombre de clans
Pour chaque clan:
{
2 unsigned short ID du clan
4 unsigned long Taille de la chaîne de caractères suivante
(variable) char * Nom du clan
}
Bloc des Flags
==============
4 unsigned long Nombre de flags
Pour chaque flag:
{
4 unsigned long ID du flag
4 unsigned long Taille de la chaîne de caractères suivante
(variable) char * Nom du flag
}
1 unsigned char Présence ou non de blocs supplémentaires
Dans le cas du fichier T4C Edit.wda, les sections suivantes n'existent pas ; la valeur char ci-dessus est donc toujours 0, et c'est la fin du fichier. Dans le cas du fichier T4C Worlds.wda, ces blocs existent ; la valeur char ci-dessus est à un et les données du fichier continuent avec les blocs suivants :
Bloc des Apparences d'objets
============================
4 unsigned long Nombre d'apparences d'objets
Pour chaque apparence d'objet:
{
4 unsigned long ID de l'apparence d'objet
4 unsigned long Taille de la chaîne de caractères suivante
(variable) char * Nom de l'apparence d'objet
}
Bloc des Apparences de créatures
================================
4 unsigned long Nombre d'apparences de créatures
Pour chaque apparence de créature:
{
4 unsigned long ID de l'apparence n°1 de la créature
4 unsigned long ID de l'apparence n°2 de la créature (?)
4 unsigned long Taille de la chaîne de caractères suivante
(variable) char * Nom de l'apparence d'objet
}
Bloc des Lieux
==============
4 unsigned long Nombre de lieux
Pour chaque lieu:
{
4 unsigned long Taille de la chaîne de caractères suivante
(variable) char * Nom du lieu
}
Bloc des Icônes
===============
4 unsigned long Nombre d'icônes
Pour chaque icône:
{
4 unsigned long ID de l'icône
4 unsigned long Taille de la chaîne de caractères suivante
(variable) char * Nom de l'icône
}
Bloc des Effets de sort
=======================
4 unsigned long Nombre d'effets de sort
Pour chaque effet de sort:
{
4 unsigned long ID de l'effet de sort
4 unsigned long Taille de la chaîne de caractères suivante
(variable) char * Nom de l'effet de sort
}
Fin du fichier.
Cryptographie des fichiers WDA
Clé de cryptage
Il s'agit d'un tableau de 3418 octets choisit arbitrairement par Vircom pour masquer les données originales avec la technique du ou exclusif (XOR). Cette technique est la technique d'encryption la plus simple qui soit : la même clé, combinée à la même opération, soit encrypte soit décrypte chaque octet des données sur laquelle elle s'applique.
Voici la clé utilisée par Vircom pour masquer les données :
unsigned char key[3418] =
{
0xE1, 0xC4, 0x9B, 0x1B, 0xC0, 0xC6, 0x30, 0xC5, 0x0D, 0x58, 0xB7, 0x01, 0xCE, 0x7F, 0x33, 0xD3, 0x07, 0x3D, 0xA9,
0x3F, 0xBA, 0x99, 0x1C, 0x4A, 0xED, 0x94, 0x90, 0xF7, 0xA3, 0x33, 0x09, 0x4A, 0xE1, 0x7B, 0x8B, 0x47, 0xA9, 0x6F,
0x1B, 0xF3, 0x01, 0x14, 0xBC, 0x51, 0xED, 0x6C, 0x73, 0x65, 0x6F, 0x7D, 0x42, 0x34, 0x8D, 0x4A, 0x2F, 0xC1, 0x4A,
0xD8, 0x3D, 0x10, 0xAA, 0x2A, 0x71, 0x25, 0xB1, 0x43, 0xCD, 0x05, 0x64, 0x2A, 0x57, 0xB3, 0xC6, 0xE0, 0x12, 0x33,
0xDC, 0x6B, 0x03, 0x89, 0xA8, 0xCE, 0x2C, 0xBA, 0x30, 0x0D, 0x93, 0xC9, 0x77, 0x2D, 0x3C, 0xBA, 0x82, 0x31, 0x29,
0x91, 0x53, 0x1D, 0x60, 0x53, 0xF0, 0xF5, 0xE4, 0x03, 0x5C, 0xBE, 0xB9, 0xA5, 0x9C, 0x7B, 0xE4, 0x3E, 0xB2, 0x30,
0x68, 0xD1, 0xA4, 0xE1, 0x49, 0x62, 0x76, 0x93, 0x8B, 0xF5, 0x2A, 0x49, 0x33, 0x8F, 0xC6, 0x07, 0x44, 0x32, 0x4D,
0xD1, 0xC2, 0xE4, 0xC3, 0xAC, 0xB1, 0xA9, 0x2D, 0x9B, 0x16, 0x84, 0x8E, 0xA2, 0xF4, 0x78, 0xEA, 0xC6, 0x4F, 0x8C,
0x45, 0x0A, 0x2C, 0xC1, 0xA4, 0x72, 0x8D, 0x1D, 0x0A, 0x02, 0x79, 0xA3, 0x7B, 0xBF, 0xF1, 0x57, 0xFB, 0xAC, 0xFA,
0x3D, 0x8F, 0xCD, 0x99, 0x5A, 0x3A, 0x26, 0xD1, 0xB1, 0x00, 0xBC, 0xA7, 0x47, 0xE6, 0x92, 0x1D, 0x1E, 0xEE, 0xAC,
0x39, 0x3C, 0x1E, 0x0E, 0xFE, 0xA4, 0x7A, 0xBD, 0x71, 0x5A, 0x04, 0xBC, 0x94, 0x63, 0xC2, 0x0F, 0x6D, 0xC2, 0xB7,
0xBB, 0x00, 0x7B, 0xE7, 0xC3, 0x4F, 0x92, 0x57, 0x2B, 0x60, 0x0C, 0x0A, 0xF7, 0x36, 0xEC, 0x04, 0x2C, 0xD5, 0x36,
0x49, 0xCC, 0x42, 0xEF, 0xDE, 0x7F, 0x1A, 0xC6, 0x63, 0x92, 0xBB, 0x05, 0x61, 0x7F, 0xD6, 0xA0, 0xDB, 0x48, 0x6F,
0x99, 0xD5, 0xF3, 0x8B, 0xF6, 0x53, 0x83, 0x2D, 0xBB, 0x5A, 0xFD, 0x5A, 0xEA, 0xED, 0x63, 0x14, 0x89, 0x10, 0xBB,
0x61, 0x9B, 0xC8, 0x09, 0x44, 0x24, 0x17, 0x4F, 0xC2, 0x29, 0x03, 0x93, 0xDD, 0xAD, 0x90, 0xD8, 0x9B, 0xB4, 0xC0,
0x22, 0xFF, 0x42, 0x99, 0x76, 0x0E, 0x5C, 0x1E, 0xD6, 0xCB, 0x05, 0x54, 0x48, 0x3A, 0x41, 0x3D, 0xD0, 0x5F, 0x15,
0xDF, 0x70, 0x3E, 0x83, 0x3D, 0x2E, 0xDC, 0x91, 0x5C, 0x0D, 0x3C, 0x43, 0x3E, 0x12, 0x63, 0x9B, 0xE9, 0x3F, 0x53,
0x9F, 0x61, 0x9A, 0x12, 0x52, 0xA8, 0x26, 0xA3, 0xB8, 0xC4, 0xE8, 0x0B, 0xD6, 0xB8, 0xE3, 0x4C, 0xAF, 0x88, 0x1B,
0x6C, 0x47, 0x39, 0x94, 0x6E, 0xA2, 0xCD, 0x52, 0x57, 0xC5, 0x4B, 0x5A, 0x29, 0xB3, 0xB4, 0xAF, 0xEA, 0x70, 0x0E,
0x55, 0x9E, 0x00, 0x5B, 0x51, 0x47, 0x68, 0xA2, 0xA6, 0xEB, 0xAB, 0xE4, 0x58, 0x8D, 0xCD, 0x27, 0x6B, 0x31, 0xD3,
0x6E, 0xE4, 0xDC, 0xC0, 0xBD, 0xC6, 0x91, 0x98, 0x18, 0x15, 0x54, 0x5F, 0x84, 0xD5, 0x29, 0x19, 0x04, 0x0B, 0x15,
0xCB, 0x9C, 0xBA, 0x1B, 0x78, 0x51, 0xE6, 0x3F, 0x25, 0x26, 0x94, 0x85, 0xD4, 0x1F, 0xC7, 0xF2, 0x8B, 0x40, 0x83,
0x89, 0x4D, 0x8E, 0xCC, 0x4E, 0x1F, 0x0C, 0xA6, 0x46, 0x03, 0xBE, 0x16, 0x74, 0xFF, 0xA8, 0x1F, 0xDC, 0x17, 0xCF,
0xC6, 0x82, 0x4D, 0x36, 0x0D, 0x6A, 0xA7, 0xE1, 0xFA, 0x99, 0x28, 0xD4, 0x90, 0x12, 0xD4, 0x14, 0xD4, 0xDA, 0xB0,
0xA4, 0xC9, 0xF3, 0xBF, 0x88, 0x72, 0x63, 0x05, 0xC5, 0xD6, 0x2D, 0x86, 0x5E, 0xF6, 0x56, 0x47, 0x57, 0xD8, 0xE0,
0x4A, 0xB4, 0x7F, 0xD1, 0x96, 0x7A, 0xEF, 0x2D, 0x2C, 0xAB, 0x2D, 0xF6, 0x12, 0x4D, 0x3C, 0x32, 0x4B, 0x64, 0x20,
0xE4, 0xDB, 0xF3, 0xDD, 0x10, 0xC6, 0xFD, 0x78, 0xBB, 0x11, 0x89, 0xF3, 0xE8, 0xBF, 0x98, 0x55, 0x9B, 0xD4, 0x30,
0x9F, 0xD8, 0x55, 0x54, 0xD7, 0xA4, 0x45, 0x08, 0x00, 0x01, 0xA8, 0x50, 0x1E, 0xF6, 0x82, 0x31, 0x35, 0x84, 0xD8,
0xAE, 0x4A, 0xB1, 0xAD, 0xCC, 0x60, 0x80, 0x05, 0x8D, 0x7B, 0xF5, 0xE4, 0xF7, 0xA0, 0x14, 0x4F, 0x0D, 0xD1, 0xE2,
0x49, 0xD3, 0x15, 0x62, 0xD6, 0x4E, 0x6D, 0x98, 0xFA, 0x81, 0xDE, 0x89, 0xBA, 0x70, 0x6D, 0x38, 0x19, 0x20, 0x1D,
0xA9, 0x1B, 0x93, 0xF3, 0xE0, 0xC5, 0xCF, 0xF1, 0xE2, 0x1A, 0xD7, 0x1D, 0xB1, 0x1E, 0xB0, 0x7B, 0x54, 0xD5, 0x5D,
0x0D, 0xCC, 0x43, 0xE2, 0xD9, 0x1F, 0x6D, 0x43, 0xE2, 0x4F, 0x56, 0x85, 0x2C, 0x63, 0x03, 0xAA, 0xBB, 0x5C, 0x76,
0xB8, 0x94, 0x40, 0xB5, 0xB3, 0xBA, 0x12, 0xC4, 0x9D, 0x32, 0xD6, 0xA5, 0x7C, 0xFE, 0x91, 0x5E, 0x53, 0x24, 0x45,
0xF2, 0x27, 0xA7, 0xF8, 0x65, 0xFB, 0x8B, 0xAE, 0xBB, 0xD2, 0xD5, 0x69, 0xF9, 0xB3, 0x88, 0x2F, 0x22, 0x9F, 0xA8,
0x03, 0x3A, 0x9C, 0x3A, 0xEA, 0x46, 0xAD, 0x40, 0xE6, 0x49, 0xD6, 0xC0, 0xFD, 0x47, 0x1C, 0xBD, 0x32, 0x44, 0x82,
0x3C, 0x8A, 0x45, 0x0C, 0x40, 0x07, 0x4D, 0xBE, 0xCD, 0xAF, 0x60, 0x9D, 0xE7, 0x86, 0x82, 0xAB, 0x93, 0x8E, 0xB8,
0xEF, 0xD3, 0xCD, 0x05, 0x6A, 0xAE, 0x46, 0x6D, 0x22, 0x25, 0xFD, 0xF5, 0x1A, 0x3E, 0xF7, 0xA0, 0x56, 0xFB, 0x37,
0x72, 0xDA, 0x63, 0xC1, 0x6F, 0xAB, 0x77, 0x99, 0x9B, 0xCC, 0x3D, 0xC4, 0xFB, 0x41, 0xB8, 0x45, 0x92, 0x0F, 0xEC,
0x20, 0x65, 0x38, 0xDD, 0x59, 0x76, 0xC2, 0x90, 0xF5, 0xCB, 0xB1, 0x08, 0xF7, 0x67, 0x07, 0x49, 0x63, 0x4F, 0xCA,
0x58, 0x3E, 0x85, 0xFD, 0x38, 0x8A, 0x0F, 0xA5, 0xED, 0x4D, 0xF0, 0xC4, 0x7B, 0x8B, 0x2D, 0x60, 0xE7, 0x46, 0xC9,
0x7C, 0x34, 0x84, 0xC8, 0x1D, 0x66, 0x48, 0x2E, 0x46, 0x81, 0x96, 0xFF, 0xFB, 0x8A, 0x73, 0x40, 0x84, 0xE2, 0xF4,
0x19, 0x73, 0xE7, 0x20, 0x8B, 0x5B, 0x86, 0xC6, 0x99, 0x41, 0xC4, 0xEC, 0x47, 0x28, 0xA4, 0x95, 0x9A, 0x14, 0x2A,
0xC6, 0x95, 0x0A, 0x5B, 0x81, 0x3C, 0x0D, 0x39, 0xCC, 0x93, 0x21, 0xCA, 0xAA, 0x9F, 0x4A, 0x12, 0x20, 0x63, 0x8D,
0x13, 0x31, 0xE3, 0xEC, 0xD3, 0xE1, 0x23, 0x6E, 0x55, 0x34, 0x28, 0x14, 0x9D, 0x2E, 0xF5, 0xE4, 0xB0, 0xD4, 0x8E,
0xE1, 0x91, 0x29, 0xF8, 0x0F, 0x44, 0x32, 0x36, 0x72, 0xCD, 0xF1, 0x4C, 0x0F, 0x31, 0x6C, 0x3E, 0xE9, 0x73, 0xA6,
0x10, 0x04, 0x97, 0xA3, 0xC7, 0x65, 0xA2, 0x68, 0x66, 0x0E, 0x96, 0xF8, 0xF2, 0x05, 0x79, 0x57, 0x6D, 0x4E, 0x8A,
0xDD, 0xEB, 0x1A, 0x93, 0x45, 0xE2, 0xE0, 0x78, 0xAA, 0x36, 0xA4, 0x3D, 0x0E, 0xEC, 0x6A, 0xE4, 0x77, 0x06, 0x37,
0x73, 0xE9, 0x8A, 0x0E, 0xED, 0x66, 0x7B, 0xF3, 0x56, 0xF4, 0xDE, 0xEA, 0xB3, 0x96, 0xB5, 0xF8, 0x07, 0x50, 0x06,
0x20, 0x56, 0x27, 0xD5, 0x66, 0xA4, 0x1D, 0x24, 0xCE, 0xF6, 0x38, 0xF9, 0x5D, 0x4E, 0x7C, 0x57, 0x16, 0xB3, 0xEB,
0x42, 0xFD, 0x26, 0x8B, 0xBF, 0x17, 0xAD, 0x5F, 0xD1, 0x66, 0x4B, 0x6C, 0x7C, 0xF0, 0x04, 0xB4, 0xC4, 0xB9, 0xDC,
0x3D, 0xAE, 0xC3, 0xD8, 0x0B, 0x3D, 0x14, 0xFB, 0x20, 0x75, 0xAF, 0x49, 0x82, 0x5A, 0x98, 0xC7, 0x34, 0xF1, 0xD4,
0x78, 0x3A, 0x3D, 0x66, 0x60, 0x99, 0x42, 0x52, 0x83, 0x53, 0x04, 0x9D, 0xE6, 0x6E, 0x88, 0x49, 0x8C, 0xEE, 0xD1,
0x5C, 0x79, 0xD5, 0xE3, 0xD9, 0xB1, 0x29, 0xC3, 0xC5, 0x39, 0xED, 0x74, 0x23, 0x14, 0x26, 0xFA, 0xF7, 0x46, 0xD6,
0x59, 0x45, 0xD4, 0x03, 0x96, 0x11, 0xC0, 0xB0, 0xB4, 0x60, 0x10, 0xE2, 0xB7, 0x35, 0xC8, 0x9C, 0xA3, 0x95, 0xEA,
0xE1, 0x7D, 0x82, 0x7C, 0xB8, 0x48, 0x02, 0x81, 0x22, 0x08, 0x18, 0xFD, 0x25, 0xC1, 0xC9, 0xF5, 0xC4, 0x78, 0x17,
0x6C, 0x03, 0x30, 0x08, 0x66, 0xE7, 0xED, 0xA0, 0xE7, 0x73, 0xB4, 0xE1, 0xF4, 0xAB, 0x88, 0xD1, 0x90, 0x93, 0x6D,
0x73, 0xBF, 0x30, 0x67, 0xCB, 0x86, 0x85, 0x7B, 0xDE, 0xE7, 0x96, 0xAC, 0xAE, 0xE8, 0x67, 0xFE, 0x41, 0x8C, 0xFD,
0x75, 0x9B, 0xD8, 0x5B, 0x16, 0xBE, 0xCF, 0x85, 0xE4, 0xB0, 0x75, 0x80, 0xE3, 0x74, 0xCE, 0x4E, 0x17, 0x0F, 0xDF,
0xF5, 0x85, 0x83, 0xAB, 0x79, 0x30, 0xD6, 0x36, 0xDC, 0x1C, 0x0B, 0x84, 0x24, 0x4E, 0x27, 0x9A, 0x54, 0xC8, 0x2D,
0x7B, 0x71, 0x91, 0x21, 0x2B, 0x7D, 0xAA, 0x07, 0xAE, 0x7E, 0x18, 0xE3, 0x09, 0x77, 0xE0, 0xBA, 0x3F, 0x6D, 0x05,
0x8F, 0x54, 0x62, 0x8C, 0x66, 0x4D, 0x5C, 0x77, 0x44, 0x2C, 0x5E, 0xCC, 0x2C, 0xF7, 0x6D, 0x8E, 0x22, 0xB2, 0x8C,
0xC2, 0x2A, 0x5F, 0xBF, 0x6B, 0x49, 0x04, 0x0A, 0x8D, 0x82, 0xA4, 0x71, 0x2C, 0xD9, 0x44, 0xF9, 0x4C, 0x53, 0xE6,
0xA5, 0xF2, 0x90, 0x7A, 0x21, 0xBC, 0x45, 0x7A, 0xDD, 0xB4, 0x0A, 0xAB, 0x2B, 0xDF, 0xE1, 0x10, 0x0E, 0x40, 0xD0,
0xAE, 0x8A, 0xDB, 0x87, 0xA3, 0xB4, 0x04, 0xA1, 0x5E, 0xD0, 0x51, 0xFF, 0xBE, 0x31, 0xC5, 0xA6, 0xC7, 0xDD, 0x64,
0x99, 0x7D, 0xD8, 0x33, 0xDC, 0xE5, 0x24, 0x34, 0x73, 0x02, 0xC7, 0x6E, 0x62, 0xD8, 0xC5, 0xE2, 0xAE, 0x6C, 0x20,
0x95, 0x5A, 0xC0, 0xDE, 0x8C, 0x6B, 0xDA, 0x02, 0xCB, 0xE3, 0xBE, 0x90, 0x54, 0xC8, 0x6E, 0x8C, 0x2D, 0x1D, 0xF0,
0xFB, 0x59, 0xE7, 0x47, 0xE0, 0xDC, 0x28, 0x77, 0x3F, 0xBA, 0xE6, 0x85, 0x1D, 0xF8, 0x24, 0x74, 0x7D, 0x99, 0xE7,
0x48, 0x63, 0xA1, 0x31, 0x05, 0xD3, 0x15, 0x08, 0xB0, 0xD2, 0xF8, 0x70, 0x4C, 0x63, 0x4E, 0x6B, 0xDD, 0x8A, 0x1B,
0xFF, 0x68, 0x4B, 0x64, 0x2F, 0xEF, 0xAB, 0x2B, 0xFF, 0x78, 0xAD, 0x77, 0x74, 0x07, 0x55, 0x49, 0x91, 0x9E, 0xA7,
0x5A, 0x43, 0xA8, 0x94, 0xD3, 0xF9, 0x5B, 0x14, 0x01, 0xC4, 0x2B, 0xE7, 0xA9, 0xE8, 0xDE, 0x89, 0xAB, 0xCA, 0x30,
0xEB, 0xCE, 0x6E, 0x25, 0x12, 0x16, 0xD8, 0xC2, 0x01, 0x88, 0x0D, 0x09, 0xBC, 0x27, 0x10, 0x00, 0x48, 0xF7, 0xE5,
0xAB, 0xA7, 0xFC, 0x90, 0x0C, 0xDF, 0x3B, 0x16, 0x29, 0xF4, 0xB7, 0x7A, 0x05, 0xE8, 0x74, 0xC0, 0xA5, 0xC1, 0x77,
0xEC, 0x0B, 0x82, 0xC3, 0x03, 0x3D, 0x2F, 0x5C, 0x08, 0x3E, 0xCD, 0x46, 0xFF, 0x13, 0x5F, 0x86, 0xED, 0xBF, 0xE9,
0x1E, 0xD5, 0x46, 0x6F, 0x14, 0xBB, 0xAC, 0xF6, 0x6C, 0xA3, 0xF5, 0x81, 0x28, 0x91, 0x26, 0x14, 0x4E, 0x8A, 0x42,
0xB4, 0xE2, 0x91, 0x4D, 0x64, 0xE6, 0xAB, 0x4C, 0x28, 0x60, 0xDA, 0x42, 0x04, 0x53, 0x24, 0x33, 0xFC, 0xC3, 0x8C,
0x23, 0x15, 0xB4, 0x17, 0x52, 0x2B, 0xC8, 0x12, 0xB8, 0x2B, 0xA3, 0x18, 0x49, 0xB8, 0xAC, 0x2D, 0x0B, 0xD7, 0xE7,
0x56, 0x01, 0x8B, 0x59, 0x96, 0x30, 0xD8, 0x05, 0xF1, 0x9A, 0xC2, 0xEF, 0x6C, 0x45, 0x4E, 0x1C, 0x09, 0x34, 0x7F,
0x8F, 0xCE, 0x6C, 0x59, 0x4C, 0xBF, 0xF0, 0xE0, 0x57, 0xDE, 0xC4, 0x19, 0xB5, 0x31, 0xEC, 0x07, 0x69, 0xBB, 0x6C,
0xAE, 0x77, 0x81, 0x49, 0x13, 0xE3, 0x85, 0x86, 0x38, 0xB2, 0xCD, 0x27, 0x23, 0xE7, 0x5C, 0x31, 0xD8, 0x86, 0x37,
0xA7, 0x59, 0x94, 0x60, 0x8D, 0xAC, 0x13, 0xDD, 0xE7, 0xD4, 0x09, 0xB1, 0xBA, 0xD5, 0x7A, 0xE1, 0x09, 0xB4, 0x68,
0x70, 0xD8, 0x74, 0xD9, 0x62, 0x2C, 0x19, 0xD0, 0xBB, 0x07, 0xA7, 0x51, 0x7F, 0x6F, 0x23, 0x61, 0xB3, 0x67, 0x90,
0x03, 0x5A, 0xF4, 0xF2, 0x3B, 0x79, 0x19, 0x4E, 0x0D, 0x12, 0xDA, 0xA6, 0x7E, 0x2B, 0x3B, 0x00, 0x91, 0xC7, 0x41,
0x60, 0x4A, 0xEB, 0xEF, 0xC8, 0xAE, 0x99, 0x49, 0x3E, 0xC0, 0xD7, 0x53, 0xC5, 0x84, 0xA8, 0x12, 0x61, 0xFE, 0x11,
0x88, 0x17, 0x32, 0x14, 0xBC, 0xEA, 0x25, 0xB7, 0xAF, 0xDE, 0xDA, 0xFE, 0x67, 0xF7, 0x55, 0xEB, 0xE7, 0x3A, 0x9B,
0x84, 0x33, 0xAA, 0xAF, 0xCC, 0x4F, 0x4B, 0x95, 0xC7, 0x40, 0x22, 0x51, 0x7A, 0x09, 0x31, 0xE8, 0xAF, 0x7E, 0x5D,
0x15, 0x34, 0x0C, 0xB4, 0x05, 0x9E, 0xE0, 0xF2, 0xBD, 0xF0, 0xFD, 0x19, 0x40, 0x2E, 0x67, 0x2F, 0x92, 0x5D, 0x22,
0x38, 0xB7, 0x80, 0x33, 0x36, 0xB4, 0x9B, 0x9D, 0x2F, 0x8C, 0xB2, 0x64, 0x26, 0x43, 0xCA, 0x8C, 0x1F, 0xDE, 0xE6,
0x1A, 0x1F, 0x60, 0x0A, 0x11, 0x29, 0xCD, 0x3B, 0x75, 0x41, 0x29, 0x7B, 0x4A, 0x6B, 0x79, 0xD0, 0x95, 0xAC, 0xBF,
0x3E, 0x59, 0x07, 0x01, 0xC7, 0x9A, 0x80, 0x43, 0x71, 0x5D, 0x1B, 0x87, 0x3F, 0xA4, 0xDD, 0xD3, 0x35, 0x75, 0xC9,
0x2B, 0x58, 0xD4, 0xE3, 0x91, 0xAB, 0xC3, 0x30, 0x0B, 0x32, 0x48, 0xB2, 0x9C, 0xF1, 0x66, 0x6F, 0x48, 0xED, 0x21,
0x6B, 0x13, 0x29, 0x7E, 0xA8, 0x02, 0xA9, 0x80, 0x2C, 0x18, 0x72, 0x2B, 0xFA, 0x59, 0x86, 0x83, 0x17, 0xCA, 0xEB,
0x8D, 0x85, 0x6E, 0xA5, 0x4C, 0x4A, 0x49, 0xB6, 0xC4, 0x69, 0x5F, 0x24, 0xFA, 0xE7, 0xB5, 0xF2, 0xF1, 0xC6, 0x4E,
0x24, 0xAD, 0x0C, 0x2E, 0xBF, 0x32, 0xBD, 0x59, 0xC6, 0x84, 0xDB, 0xD4, 0x3D, 0xA8, 0x6C, 0xA2, 0x28, 0xA1, 0x73,
0xC7, 0x8C, 0x74, 0xF4, 0x47, 0x6C, 0x23, 0xF4, 0x27, 0xCC, 0xB4, 0x75, 0x6A, 0xB0, 0x2A, 0x7E, 0x14, 0x1D, 0x8A,
0x10, 0x2A, 0x16, 0xD6, 0x30, 0xAF, 0x9F, 0x14, 0xE3, 0xA7, 0xBD, 0x47, 0x2C, 0x16, 0x73, 0x74, 0x10, 0x01, 0xC5,
0x9E, 0x92, 0x6B, 0xB7, 0xC9, 0xB5, 0x58, 0x4E, 0xF9, 0x80, 0xCC, 0x8C, 0x32, 0xF4, 0xCC, 0x77, 0x79, 0x17, 0x5B,
0x13, 0xD1, 0xEC, 0x7D, 0x62, 0x3F, 0x77, 0x36, 0x6A, 0xC5, 0xBD, 0x8B, 0x2F, 0x69, 0xC0, 0x7F, 0xB3, 0x2E, 0x87,
0x16, 0xFC, 0x18, 0x13, 0x55, 0x0D, 0x2C, 0x69, 0x3F, 0xEA, 0x6D, 0x8E, 0xD8, 0x97, 0xDF, 0x85, 0x24, 0x19, 0x87,
0x53, 0x28, 0x73, 0x67, 0xFA, 0xE6, 0xA9, 0x85, 0x80, 0x65, 0xC0, 0xE5, 0xE9, 0xA6, 0xBB, 0x89, 0x37, 0xAF, 0x9E,
0x77, 0x70, 0x82, 0x6D, 0xB2, 0x97, 0x26, 0x2D, 0x3E, 0xB0, 0x9C, 0xE1, 0x20, 0xBF, 0xEA, 0x8D, 0x5B, 0xC9, 0x13,
0x35, 0xF3, 0xD1, 0x1B, 0xDE, 0xEC, 0xDC, 0x07, 0x8B, 0x4B, 0xEC, 0xD9, 0x40, 0x13, 0x07, 0x97, 0x02, 0x48, 0x30,
0x45, 0xD3, 0xEE, 0x6C, 0xE5, 0xB9, 0x0A, 0xBD, 0x7D, 0xB8, 0x9F, 0x29, 0x10, 0xD2, 0xB1, 0xB3, 0xA2, 0x0D, 0x45,
0x60, 0x38, 0x6C, 0x5D, 0x32, 0xD5, 0xF3, 0xFF, 0x2F, 0x7D, 0xA7, 0x2F, 0x5B, 0x35, 0x8B, 0xEF, 0xB8, 0xFF, 0xA3,
0x45, 0x4C, 0xE1, 0xF3, 0x34, 0x1A, 0xDE, 0x80, 0xC1, 0x26, 0xFB, 0x4D, 0xEE, 0x75, 0x3B, 0x5E, 0xC1, 0x0A, 0xA2,
0xB8, 0x3D, 0xE9, 0x34, 0x5D, 0x67, 0x16, 0xF6, 0x53, 0x41, 0x96, 0xEA, 0x9E, 0xD1, 0x6C, 0x16, 0x40, 0x1A, 0x9C,
0x7E, 0x3F, 0x21, 0x2A, 0x24, 0x9E, 0xE9, 0x1B, 0x0E, 0x61, 0x76, 0x72, 0x3F, 0x8D, 0xCC, 0x33, 0xBC, 0x25, 0xEF,
0x62, 0x87, 0x2D, 0xE4, 0x04, 0xA6, 0xA9, 0xAE, 0x1C, 0x1D, 0x9E, 0x52, 0xAE, 0xEE, 0x0F, 0xD2, 0xBF, 0x1F, 0x00,
0x34, 0x52, 0xB3, 0x75, 0x7B, 0x6B, 0xAE, 0x73, 0xAC, 0x0E, 0x15, 0xFD, 0xC9, 0x40, 0xEA, 0x17, 0xD8, 0x04, 0x34,
0xC6, 0xDD, 0x5E, 0xF4, 0x0D, 0xDA, 0x52, 0x2F, 0xF0, 0xD5, 0xE5, 0xEA, 0x73, 0xD1, 0x1A, 0x28, 0x9A, 0xD2, 0xF5,
0xEE, 0x6A, 0xDC, 0x7B, 0x3E, 0xE6, 0xF4, 0xAE, 0x1E, 0x13, 0x1D, 0x94, 0x92, 0xF3, 0x5C, 0x31, 0x9C, 0x8C, 0xB3,
0x87, 0x42, 0xE1, 0x28, 0x9C, 0x87, 0xF7, 0xBE, 0x73, 0x6F, 0xD1, 0x7A, 0x10, 0xFF, 0x72, 0x5E, 0x78, 0x39, 0xE1,
0x70, 0xAE, 0x23, 0x1F, 0xB3, 0xB6, 0xC1, 0x32, 0x2C, 0x94, 0x15, 0x1D, 0xDE, 0x4D, 0x25, 0xE4, 0xCC, 0xE4, 0xF4,
0x8C, 0xFD, 0x5D, 0x87, 0x18, 0x72, 0xBC, 0xE0, 0x8C, 0x31, 0x06, 0x05, 0xEC, 0x3D, 0x3E, 0xF9, 0x3D, 0x9A, 0x68,
0xC1, 0x82, 0x4D, 0x89, 0x5F, 0xBF, 0x59, 0xA4, 0xD9, 0xF8, 0xC2, 0xBD, 0x33, 0x32, 0x8C, 0xD8, 0x6F, 0x70, 0xBC,
0xFA, 0x93, 0xB6, 0x55, 0x25, 0xA2, 0x08, 0x5B, 0x60, 0xA0, 0x6B, 0xD2, 0xAC, 0x92, 0xE2, 0xBF, 0x0F, 0x7B, 0x71,
0x25, 0x8B, 0x5F, 0x1D, 0x08, 0x27, 0x42, 0xE9, 0x6D, 0xE4, 0x29, 0xD9, 0x57, 0xC8, 0x17, 0xF1, 0xCA, 0xD6, 0x10,
0x36, 0xCA, 0x12, 0x18, 0xAB, 0x5B, 0x80, 0x34, 0x54, 0x82, 0x25, 0x67, 0x35, 0x42, 0x04, 0xB5, 0x53, 0xA0, 0x22,
0x23, 0xB1, 0x9E, 0x81, 0xB3, 0x53, 0x42, 0x27, 0x6B, 0x3D, 0x8F, 0x17, 0x4F, 0x74, 0x8A, 0x55, 0x61, 0xFB, 0x35,
0xE6, 0xA7, 0xD6, 0x96, 0xCD, 0x24, 0x0A, 0xB1, 0x0E, 0xDC, 0x9A, 0x88, 0xAD, 0xD4, 0x8A, 0x21, 0xAF, 0x0F, 0xDE,
0x7F, 0x17, 0x91, 0x9B, 0xA6, 0xE9, 0x5E, 0xC4, 0x9B, 0x2A, 0x7B, 0x5D, 0x60, 0xDD, 0xEB, 0x6A, 0xFB, 0x06, 0xB2,
0xF0, 0x70, 0xA9, 0xD5, 0xF2, 0xC1, 0xCA, 0x56, 0x74, 0xF4, 0x6E, 0x3B, 0x7A, 0x0C, 0x98, 0x88, 0x09, 0x0E, 0x4D,
0x3F, 0x24, 0xFD, 0x8F, 0x66, 0xCF, 0xDC, 0x64, 0x00, 0x0F, 0xB2, 0xCF, 0x11, 0xE6, 0x80, 0xD5, 0x9E, 0x5A, 0x4C,
0x78, 0xAA, 0x6F, 0x19, 0xBE, 0x39, 0x27, 0xEB, 0xAA, 0x4F, 0x88, 0xC7, 0x41, 0xF1, 0x95, 0xAF, 0x86, 0x22, 0x53,
0xA9, 0x7D, 0xE6, 0xC4, 0xB9, 0x2A, 0x42, 0xEE, 0xE1, 0x91, 0x38, 0xD4, 0x27, 0xB7, 0xCE, 0x7B, 0x8E, 0x9F, 0x08,
0xE5, 0x1B, 0x4E, 0xE8, 0x18, 0xD0, 0xC6, 0x74, 0x18, 0xB3, 0x0D, 0xAF, 0xE7, 0xC7, 0x26, 0x9D, 0x8B, 0x11, 0x16,
0x43, 0x07, 0x94, 0xDF, 0xA4, 0x5F, 0x54, 0x87, 0xC4, 0x98, 0x55, 0x11, 0xA7, 0xB5, 0x9B, 0x82, 0x52, 0xBA, 0x2B,
0xDD, 0xC8, 0xAB, 0x08, 0x25, 0x0D, 0x8D, 0x36, 0x61, 0x25, 0x62, 0xBA, 0x92, 0x15, 0x31, 0x97, 0xBE, 0xE0, 0xFB,
0xD1, 0xE8, 0x8A, 0xC6, 0x6C, 0x14, 0x18, 0x95, 0x6D, 0x47, 0x8D, 0x6C, 0xD7, 0x84, 0xED, 0x4F, 0xAE, 0xCF, 0x3C,
0x43, 0xF7, 0x2C, 0x7E, 0x4B, 0xB4, 0xA0, 0xB8, 0x6B, 0xEB, 0x2E, 0xED, 0xA8, 0x9F, 0xDA, 0x22, 0x05, 0xD5, 0xA8,
0x59, 0x86, 0x90, 0x9D, 0x98, 0x2F, 0xD4, 0xBC, 0xE2, 0x05, 0xA5, 0x09, 0x3C, 0x0B, 0x08, 0x89, 0xA9, 0x45, 0xFF,
0x3F, 0x2C, 0xB7, 0x90, 0x2F, 0xCC, 0x66, 0xBF, 0x5D, 0x8A, 0x55, 0x8E, 0xCD, 0x6C, 0x88, 0x03, 0x84, 0x75, 0x03,
0x21, 0x85, 0xA9, 0xCB, 0xED, 0xD5, 0x0D, 0xE3, 0x6A, 0x76, 0xA4, 0x4F, 0x9B, 0x6E, 0x72, 0x14, 0x87, 0xC0, 0x7B,
0x35, 0x2F, 0x71, 0xC4, 0xB6, 0x99, 0x84, 0x50, 0x9B, 0xC8, 0xFC, 0x23, 0xE9, 0xC0, 0xE0, 0x41, 0xA2, 0x86, 0x31,
0xAF, 0xCD, 0x1D, 0xF5, 0x70, 0x6B, 0x89, 0x2F, 0x88, 0x82, 0xCE, 0xE3, 0xFB, 0x14, 0xF1, 0x16, 0xCE, 0x28, 0xF4,
0xCB, 0x04, 0xBF, 0xDE, 0x06, 0xA1, 0xDF, 0xB0, 0xCB, 0xAA, 0x8B, 0x70, 0x1F, 0x22, 0xC7, 0x21, 0x04, 0x0D, 0x98,
0xC7, 0x81, 0x6F, 0x00, 0x66, 0x97, 0x4D, 0x05, 0x03, 0x4C, 0xAA, 0xAB, 0xA1, 0xA3, 0x8A, 0xF4, 0x44, 0xA0, 0xF1,
0xE6, 0xF1, 0x47, 0xE4, 0x84, 0xAB, 0x9D, 0x66, 0xD2, 0x76, 0xA5, 0x7B, 0xD5, 0x56, 0x63, 0x27, 0x90, 0x4F, 0xDC,
0x6F, 0x07, 0x66, 0x13, 0x56, 0x3F, 0x9E, 0x0C, 0xE0, 0x3A, 0xFC, 0xCB, 0x12, 0xFE, 0x83, 0x55, 0xEF, 0x8E, 0x36,
0xAC, 0x7B, 0xEF, 0x1C, 0xD7, 0xBA, 0x24, 0x36, 0xD7, 0xB0, 0x31, 0x8A, 0xB2, 0x62, 0x1A, 0x1B, 0x6B, 0xD3, 0xE4,
0xED, 0x06, 0x08, 0x91, 0x04, 0x87, 0x03, 0x27, 0x65, 0xF3, 0xCA, 0xAA, 0x13, 0x4D, 0x61, 0x1C, 0x13, 0x99, 0xCA,
0x83, 0x67, 0xDC, 0x0B, 0xE2, 0x15, 0x18, 0x27, 0x3E, 0x20, 0x53, 0x22, 0x9A, 0x8D, 0x91, 0x00, 0xFA, 0x5E, 0xD4,
0xC6, 0x62, 0x99, 0x22, 0x77, 0xD6, 0x41, 0x7E, 0x18, 0x5B, 0xED, 0xAB, 0xF4, 0xE9, 0x71, 0x36, 0xA5, 0xF1, 0x10,
0xBC, 0x73, 0x77, 0xCD, 0x41, 0x61, 0x7D, 0xAD, 0xCA, 0x73, 0x09, 0xB3, 0x5A, 0xAD, 0x1E, 0xE2, 0xF5, 0x14, 0xC0,
0x41, 0x9F, 0xAA, 0xF4, 0xD1, 0x5D, 0x76, 0xBC, 0x98, 0x32, 0x79, 0x1F, 0x99, 0x22, 0xB9, 0x1E, 0xD8, 0x32, 0x39,
0xBF, 0x5A, 0x65, 0xFD, 0x04, 0x22, 0xBF, 0x09, 0xF4, 0x34, 0x44, 0x62, 0x90, 0x94, 0xF8, 0x0B, 0xDE, 0x47, 0xE0,
0x08, 0xE1, 0x50, 0xFF, 0x5E, 0x9D, 0xB3, 0x5A, 0x0F, 0x16, 0x74, 0xF3, 0x22, 0x51, 0x98, 0xD0, 0x98, 0x51, 0x22,
0xF4, 0x76, 0x1A, 0x16, 0x64, 0xC1, 0xB1, 0x79, 0x22, 0x7C, 0x19, 0x4D, 0x34, 0xAC, 0x56, 0x98, 0x9E, 0x53, 0x6C,
0x5E, 0x62, 0x77, 0x60, 0xA1, 0x86, 0x1C, 0x35, 0x67, 0x0D, 0x44, 0xEF, 0xB3, 0xFB, 0xF5, 0x92, 0x89, 0x55, 0x32,
0x23, 0xEE, 0x1D, 0xFF, 0xA5, 0xE5, 0x59, 0x60, 0x1C, 0x72, 0x0D, 0x5A, 0x8C, 0x99, 0x3B, 0xF0, 0xFA, 0x5F, 0xE9,
0x26, 0x69, 0xC7, 0x1A, 0x01, 0xDD, 0xD5, 0xD3, 0x84, 0x5B, 0x8E, 0x16, 0xB3, 0xE6, 0xF4, 0xE9, 0x92, 0x82, 0x0D,
0x4F, 0x26, 0x33, 0xDD, 0x4D, 0x72, 0xFE, 0x66, 0xE6, 0x7A, 0xE5, 0xAE, 0x1E, 0x42, 0xEF, 0xB8, 0xF9, 0xCF, 0x1D,
0x88, 0x7B, 0x24, 0x75, 0x23, 0xA9, 0x45, 0xFA, 0x8C, 0x86, 0x37, 0xB0, 0xC7, 0x17, 0xFD, 0x9B, 0xD8, 0x5E, 0x9B,
0xC0, 0xC4, 0x61, 0x15, 0x22, 0x8E, 0x23, 0x6F, 0xC5, 0x3A, 0xA8, 0xAE, 0xCD, 0xF5, 0xD5, 0xDF, 0x49, 0x0D, 0xE9,
0x5E, 0xB4, 0xF4, 0xEC, 0x2F, 0x11, 0xAF, 0xE4, 0x54, 0x65, 0x40, 0xD4, 0xD3, 0xB3, 0xAD, 0xC1, 0xAF, 0xFF, 0xFA,
0xAD, 0xED, 0x4D, 0x29, 0x9E, 0x8F, 0xA2, 0x40, 0x98, 0x9B, 0x01, 0x42, 0x9D, 0x14, 0x6E, 0x33, 0xB3, 0xFF, 0xED,
0x18, 0xDD, 0x5E, 0x83, 0xF4, 0x1F, 0x37, 0x33, 0xCB, 0x7E, 0x8E, 0x01, 0xA1, 0xFC, 0x65, 0xF1, 0x7B, 0xA0, 0xC2,
0x08, 0x5C, 0x6B, 0xA8, 0x49, 0x48, 0x62, 0x1B, 0xB8, 0x43, 0x8A, 0x20, 0x5A, 0x52, 0xE6, 0xBA, 0x31, 0x78, 0x7B,
0xED, 0x43, 0xB9, 0x4B, 0xBD, 0x94, 0x19, 0x5C, 0x2F, 0x26, 0x9D, 0xB2, 0x46, 0xFF, 0x48, 0x4F, 0x06, 0x22, 0x1E,
0x39, 0x73, 0x94, 0x24, 0x73, 0x92, 0x57, 0x5D, 0x01, 0x66, 0x71, 0xCD, 0xE8, 0xF3, 0xE5, 0x78, 0x2A, 0x3D, 0xB8,
0x63, 0xCD, 0x49, 0xEC, 0x91, 0xD5, 0x1A, 0x87, 0x06, 0x44, 0xB4, 0x8C, 0xC6, 0x20, 0x1C, 0x00, 0xD6, 0x6C, 0x55,
0xE6, 0x39, 0x2D, 0x63, 0x42, 0xF3, 0x65, 0x4A, 0x18, 0x09, 0x1A, 0x0F, 0x6D, 0x7D, 0x4F, 0xB5, 0x43, 0x55, 0x09,
0x40, 0xA0, 0x95, 0x4B, 0xB4, 0x88, 0x3F, 0x19, 0x16, 0xFD, 0x59, 0x77, 0x69, 0x05, 0xE6, 0x69, 0xB1, 0xA3, 0xEA,
0xF4, 0xF2, 0xDC, 0x6A, 0x1B, 0x31, 0xB2, 0x69, 0xE2, 0x71, 0x2B, 0xEB, 0x4E, 0xB6, 0x4B, 0xF4, 0x62, 0x05, 0x14,
0x89, 0x22, 0x61, 0x8C, 0xAD, 0x92, 0xCE, 0xB6, 0x64, 0xB7, 0x50, 0x96, 0xB3, 0x94, 0xEC, 0x31, 0x9C, 0x2D, 0xA5,
0x89, 0x25, 0x86, 0x7F, 0xA4, 0x52, 0xA4, 0x7E, 0x86, 0x25, 0x8A, 0xA7, 0x31, 0xA4, 0x3C, 0xFD, 0xAB, 0xD2, 0xBF,
0x84, 0xF7, 0xB3, 0x15, 0x40, 0x1A, 0x4C, 0x45, 0x36, 0x16, 0xA0, 0x50, 0x69, 0xF1, 0xB3, 0x3B, 0xDD, 0xAE, 0x89,
0x0B, 0x97, 0x52, 0x27, 0xC3, 0x9A, 0xE0, 0x90, 0x68, 0xEA, 0x5C, 0xC8, 0xFC, 0x8B, 0xCA, 0xD3, 0x85, 0x81, 0x2E,
0xB6, 0x06, 0xD1, 0x8D, 0x74, 0x84, 0x7E, 0xEA, 0x11, 0x01, 0x8D, 0x4A, 0x92, 0x83, 0x00, 0xAF, 0xF9, 0x0D, 0xDD,
0x1F, 0x4C, 0xA4, 0x27, 0x9D, 0x8F, 0x4B, 0xE3, 0x2D, 0xC4, 0x06, 0x14, 0xD4, 0xF1, 0xD9, 0xBE, 0x95, 0x19, 0xC9,
0xE5, 0x74, 0x41, 0xD8, 0x8D, 0x76, 0x6B, 0x0C, 0xBB, 0x9D, 0x69, 0x72, 0xEF, 0xDA, 0xF1, 0xB6, 0x6F, 0x27, 0xAA,
0x8C, 0x22, 0x86, 0x97, 0xF7, 0x0B, 0xFD, 0xBD, 0xFB, 0x2E, 0x90, 0x1E, 0x9C, 0x8F, 0x41, 0xC0, 0xDF, 0x33, 0x16,
0xA6, 0xC7, 0x1C, 0x12, 0xD5, 0x58, 0x51, 0x39, 0x50, 0x96, 0xD3, 0x90, 0x1B, 0x86, 0xA8, 0x19, 0x3A, 0x2B, 0xD2,
0xDB, 0xB1, 0x89, 0x58, 0xD7, 0x85, 0xA5, 0x3B, 0x13, 0xB9, 0x81, 0x91, 0x52, 0x23, 0x2D, 0x58, 0x52, 0x8F, 0x43,
0x69, 0xBF, 0xC7, 0xCA, 0x9C, 0xD1, 0xBE, 0x7E, 0xEE, 0xB0, 0x2B, 0x89, 0xB7, 0x68, 0x12, 0xEF, 0xFD, 0xFE, 0x78,
0xB5, 0xC3, 0x75, 0x60, 0xDE, 0x0E, 0xD1, 0xCE, 0x6E, 0xE0, 0x16, 0xC6, 0x6A, 0x3F, 0x49, 0x4D, 0xD5, 0x2F, 0x6D,
0x66, 0xB3, 0xB2, 0x86, 0x15, 0x08, 0xCE, 0x99, 0x5E, 0xD9, 0x86, 0xA8, 0x46, 0x28, 0xDE, 0xB9, 0xD0, 0xFC, 0xDB,
0xD0, 0x00, 0x56, 0x80, 0xEF, 0xDA, 0x3C, 0xD1, 0x1C, 0x63, 0xB1, 0xD2, 0x5A, 0x9E, 0xB9, 0x88, 0xAD, 0x8F, 0x58,
0xF6, 0x1A, 0x3B, 0x93, 0x20, 0xA4, 0xA5, 0x6D, 0x0A, 0x4F, 0xD1, 0xEA, 0xB9, 0x1F, 0xC3, 0x0F, 0x30, 0x19, 0x80,
0xDE, 0x73, 0x40, 0x0B, 0x5D, 0x87, 0x98, 0x68, 0x90, 0x6E, 0x25, 0x9B, 0x79, 0x2E, 0xEC, 0xA9, 0x1E, 0xCB, 0xF0,
0x95, 0x82, 0x47, 0x35, 0x63, 0xAA, 0xA8, 0xC0, 0x17, 0x98, 0xF1, 0x94, 0xB6, 0x52, 0x26, 0xB5, 0x43
};
Algorithme de cryptage
void ToggleEncryption (unsigned char *wda_data, int wda_data_size)
{
// Algorithme de cryptage, version C. Parcourt tout le buffer wda_data sur wda_data_size
// octets et masque ou démasque l'encryption des données sur celui-ci.
register int i; // Variables register = internes au CPU, leur utilisation est plus rapide
// Pour chaque octet de wda_data jusqu'à wda_data_size...
for (i = 0; i < wda_data_size; i++)
wda_data[i] ^= key[i % 3418]; // Ou exclusif avec la clé par blocs de 3418 octets
return; // aussi simple que ça :)
}
Comment créer votre propre éditeur de WDAs ?
Il est possible de programmer un éditeur de WDAs qui travaille exclusivement sur les fichiers T4C Worlds.wda et T4C Edit.wda, mais cet éditeur ne saura pas modifier les PNJ. Si vous voulez que votre éditeur permette la modification des PNJ il faudra donc vous attendre à développer un éditeur qui soit capable de lire et d'interpréter également le format des fichier NPCs.
[TODO: pseudocode du parser]
Exemples d'éditeurs de WDA :
- les WDATools (auteur Sorkvild)
- T4C Realm Editor (auteur Gustaf)
- T4C Storm Editor (auteur ChaotikMind)
- ...
--Sorkvild 14 mars 2008 à 04:55 (MSK)