rendered paste body<?php
//Side note: Can cause extreme high loads :P
class LZW{
var $code_value = array();
var $prefix_code = array();
var $append_character = array();
var $out = "";
var $TABLE_SIZE = 5021;
var $output_bit_count = 0;
var $output_bit_buffer = "0";
var $next_code = 258;
var $sTable = array();
var $data = NULL;
var $tIdx;
var $bitsToGet = 9;
var $bytePointer;
var $bitPointer;
var $nextData = 0;
var $nextBits = 0;
var $andTable = array(511, 1023, 2047, 4095);
function compress($string){
$this->output_code(256);
$this->input = $string;
$this->next_code=258;
$string_code=ord($this->input{0});
for($i=1;$i<=strlen($this->input);$i++)
{$character=ord($this->input{$i});
$index=$this->find_match($string_code,$character);
if (isset($this->code_value[$index]))
$string_code=$this->code_value[$index];
else
{if ($this->next_code <= 4094){
$this->code_value[$index]=$this->next_code;
$this->prefix_code[$index]=$string_code;
$this->append_character[$index]=$character;
$this->next_code++;}else{$this->output_code(256);
$this->next_code = 258;
$this->code_value = array();
$this->prefix_code = array();
$this->append_character = array();
$this->code_value[$index]=$this->next_code;
$this->prefix_code[$index]=$string_code;
$this->append_character[$index]=$character;
$this->next_code++;}
$this->output_code($string_code);
$string_code=$character;}}
$this->output_code(257);
$this->output_code(0); //Clean up
return $this->out;
}
function find_match($hash_prefix,$hash_character){
$index = ($hash_character << 4 ) ^ $hash_prefix;
if ($index == 0)
$offset = 1;
else
$offset = $this->TABLE_SIZE - $index;
while (1){
if (!isset($this->code_value[$index]))
return $index;
if ($this->prefix_code[$index] == $hash_prefix && $this->append_character[$index] == $hash_character)
return $index;
$index -= $offset;
if ($index < 0)
$index += $this->TABLE_SIZE;
}
}
function output_code($code){
$len = ($code < 512 ? 9 : ($code < 1024 ? 10 : ($code < 2048 ? 11 : 12)));
$this->output_bit_buffer = $this->bitOR($this->lshift(decbin($code),(32 - $len - $this->output_bit_count)),$this->output_bit_buffer);
$this->output_bit_count += $len;
while ($this->output_bit_count >= 8){
$this->out .= chr($this->rshift($this->output_bit_buffer,24));
$this->output_bit_buffer = $this->lshift($this->output_bit_buffer,8);
$this->output_bit_count -= 8;
}
}
function decode($data) {
if(ord($data{0}) == 0x00 && ord($data{1}) == 0x01) {
die("LZW flavour not supported.");
}
$this->initsTable();
$this->data =& $data;
$this->bytePointer = 0;
$this->bitPointer = 0;
$this->nextData = 0;
$this->nextBits = 0;
$oldCode = 0;
$string = "";
$uncompData = "";
while (($code = $this->getNextCode()) != 257) {
if ($code == 256) {
$this->initsTable();
$code = $this->getNextCode();
if ($code == 257) {break;}
$uncompData .= $this->sTable[$code];
$oldCode = $code;
} else {
if ($code < $this->tIdx) {
$string = $this->sTable[$code];
$uncompData .= $string;
$this->addStringToTable($this->sTable[$oldCode], $string[0]);
$oldCode = $code;
} else {$string = $this->sTable[$oldCode];
$string = $string.$string[0];
$uncompData .= $string;
$this->addStringToTable($string);
$oldCode = $code;}}}
return $uncompData;}
function initsTable() {
$this->sTable = array();
for ($i = 0; $i < 256; $i++){
$this->sTable[$i] = chr($i);}
$this->tIdx = 258;
$this->bitsToGet = 9;}
function addStringToTable ($oldString, $newString="") {
$string = $oldString.$newString;
$this->sTable[$this->tIdx++] = $string;
if ($this->tIdx == 511) {
$this->bitsToGet = 10;
} else if ($this->tIdx == 1023) {
$this->bitsToGet = 11;
} else if ($this->tIdx == 2047) {
$this->bitsToGet = 12;
}
}
function getNextCode() {
if ($this->bytePointer == strlen($this->data)+1)
return 257;
$this->nextData = ($this->nextData << 8) | (ord($this->data{$this->bytePointer++}) & 0xff);
$this->nextBits += 8;
if ($this->nextBits < $this->bitsToGet) {
$this->nextData = ($this->nextData << 8) | (ord($this->data{$this->bytePointer++}) & 0xff);
$this->nextBits += 8;}
$code = ($this->nextData >> ($this->nextBits - $this->bitsToGet)) & $this->andTable[$this->bitsToGet-9];
$this->nextBits -= $this->bitsToGet;
return $code;
}
function lshift($n,$b){ return str_pad($n,($b+strlen($n)),"0");}
function rshift($n,$b){
$ret = substr($n,0,(strlen($n) - $b));
return ((int)bindec($ret));}
function bitOR($a,$b){
$long = strlen($a) > strlen($b) ? $a : $b;
$short = $long == $a ? $b : $a;
$l = strrev($long);
$s = strrev($short);
for($r=0;$r<strlen($l);$r++){
$re[$r] = ($s{$r} == "1" || $l{$r} == "1") ? "1" : "0"; } $ret = implode("",$re);
$ret = strrev(substr($ret,0,32));
return $ret;
}
}
ini_set('memory_limit', -1);
$text = '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';
$l = new LZW;
echo $l->decode($text);
?>