public void WriteTree(DeflaterHuffman.Tree blTree)
{
int num = -1;
int i = 0;
while (i < this.numCodes)
{
int num2 = 1;
int num3 = (int)this.length[i];
int num4;
int num5;
if (num3 == 0)
{
num4 = 138;
num5 = 3;
}
else
{
num4 = 6;
num5 = 3;
if (num != num3)
{
blTree.WriteSymbol(num3);
num2 = 0;
}
}
num = num3;
i++;
while (i < this.numCodes && num == (int)this.length[i])
{
i++;
if (++num2 >= num4)
{
break;
}
}
if (num2 < num5)
{
while (num2-- > 0)
{
blTree.WriteSymbol(num);
}
}
else if (num != 0)
{
blTree.WriteSymbol(16);
this.dh.pending.WriteBits(num2 - 3, 2);
}
else if (num2 <= 10)
{
blTree.WriteSymbol(17);
this.dh.pending.WriteBits(num2 - 3, 3);
}
else
{
blTree.WriteSymbol(18);
this.dh.pending.WriteBits(num2 - 11, 7);
}
}
}