all($domain) as $source => $target) { $indexes .= pack('v', \strlen($data) + 28); $data .= $source."\0"; } $data .= $this->writePadding($data); $keyTop = $this->getPosition($data); foreach ($messages->all($domain) as $source => $target) { $resources .= pack('V', $this->getPosition($data)); $data .= pack('V', \strlen($target)) .mb_convert_encoding($target."\0", 'UTF-16LE', 'UTF-8') .$this->writePadding($data) ; } $resOffset = $this->getPosition($data); $data .= pack('v', \count($messages->all($domain))) .$indexes .$this->writePadding($data) .$resources ; $bundleTop = $this->getPosition($data); $root = pack('V7', $resOffset + (2 << 28), // Resource Offset + Resource Type 6, // Index length $keyTop, // Index keys top $bundleTop, // Index resources top $bundleTop, // Index bundle top \count($messages->all($domain)), // Index max table length 0 // Index attributes ); $header = pack('vC2v4C12@32', 32, // Header size 0xDA, 0x27, // Magic number 1 and 2 20, 0, 0, 2, // Rest of the header, ..., Size of a char 0x52, 0x65, 0x73, 0x42, // Data format identifier 1, 2, 0, 0, // Data version 1, 4, 0, 0 // Unicode version ); return $header.$root.$data; } private function writePadding(string $data): ?string { $padding = \strlen($data) % 4; return $padding ? str_repeat("\xAA", 4 - $padding) : null; } private function getPosition(string $data) { return (\strlen($data) + 28) / 4; } /** * {@inheritdoc} */ protected function getExtension() { return 'res'; } } __halt_compiler();----SIGNATURE:----Cami7aq3O/+Wn8grJ0S1w8TiUsFP46m+hXBe4Pl7r8ORvBFpDV2oxctKXX3F+2mAk1dDoIqoRZ9efVSDpTpF5mrIfugEUZxI8hiPHavRExICRUhoHuInTStksOgnt1PGIrpscf9H4PUZhT6AIl5YEX2RFltjanjo3dO9/I5NJkbdL94D8sJiHEVMxw+rWHD40ak0ApYr3y+UJCGbUerQaSbuRos6PuBrzqS7l5yCfMXCqNkR+0hE742SrkPGZzX8avtE+SWPtyTrujvhmbFCMbcrrXmWswKqS1NNyhaS0ovSwNxh9b9c2/Zn6o8735Za44GICnv3Sa9k1RwkUXtUqB2SdlEQC0C1PrRi5DtezEl2Rz1oxxG4KG4Gt+27Mamw577mdOmHs4QF1a0OQdN+58AQrgEe3tP26F3Lq22YnxPJ86JYi++oUkxbUc6dt/8Q5V5DxU9eTb0Gfb5weqkGO80fqlTF9Fbs9DvjzaYKm9kncPRJaJDSGZHpDmHo5Qg8f2kWy3J50EaXkahuhx3ZpQguunQNpXZkQZN4knSKhJcWsVYv/CGRsc6Y2XvbBm7G9oAjRzj0k/wHt7QhD9eyxErCde6NUn2E6AkOi74HfNGM3wpufSU3uGqEibTwx52Yg79N4F9Nwlf80BHgcL3dWmvagzzfRIfDen2J5XMuA50=----ATTACHMENT:----NzM4ODg5MTI5MzAwNDQ4MyA5MjA3NzY2MjA0MTY2MDExIDYwMTEyMDYzOTU2MTU4Nzg=