docs: function Unpack20(bstream, Solid) {
      var destUnpSize = RarUtils.BUFFERS.unpack.data.length;
      var oldDistPtr = 0;
  
      RarReadTables20(bstream);
      while (destUnpSize > RarUtils.BUFFERS.unpack.ptr) {
          var num = RarUtils.RarDecodeNumber(bstream, RarUtils.CONST.LD);
          if (num < 256) {
              RarUtils.BUFFERS.unpack.insertByte(num);
              continue;
          }
          if (num > 269) {
              var Length = RarUtils.CONST.rLDecode[num -= 270] + 3;
              if ((Bits = RarUtils.CONST.rLBits[num]) > 0) {
                  Length += bstream.readBits(Bits);
              }
              var DistNumber = RarUtils.RarDecodeNumber(bstream, RarUtils.CONST.DD);
              var Distance = RarUtils.CONST.rDDecode[DistNumber] + 1;
              if ((Bits = RarUtils.CONST.rDBits[DistNumber]) > 0) {
                  Distance += bstream.readBits(Bits);
              }
              if (Distance >= 0x2000) {
                  Length++;
                  if (Distance >= 0x40000) Length++;
              }
              lastLength = Length;
              lastDist = rOldDist[oldDistPtr++ & 3] = Distance;
              RarUtils.RarCopyString(Length, Distance);
              continue;
          }
          if (num == 269) {
              RarReadTables20(bstream);
  
              RarUtils.RarUpdateProgress();
  
              continue;
          }
          if (num == 256) {
              lastDist = rOldDist[oldDistPtr++ & 3] = lastDist;
              RarUtils.RarCopyString(lastLength, lastDist);
              continue;
          }
          if (num < 261) {
              var Distance = rOldDist[(oldDistPtr - (num - 256)) & 3];
              var LengthNumber = RarUtils.RarDecodeNumber(bstream, RarUtils.CONST.RD);
              var Length = RarUtils.CONST.rLDecode[LengthNumber] + 2;
              if ((Bits = RarUtils.CONST.rLBits[LengthNumber]) > 0) {
                  Length += bstream.readBits(Bits);
              }
              if (Distance >= 0x101) {
                  Length++;
                  if (Distance >= 0x2000) {
                      Length++
                      if (Distance >= 0x40000) Length++;
                  }
              }
              lastLength = Length;
              lastDist = rOldDist[oldDistPtr++ & 3] = Distance;
              RarUtils.RarCopyString(Length, Distance);
              continue;
          }
          if (num < 270) {
              var Distance = RarUtils.CONST.rSDDecode[num -= 261] + 1;
              if ((Bits = RarUtils.CONST.rSDBits[num]) > 0) {
                  Distance += bstream.readBits(Bits);
              }
              lastLength = 2;
              lastDist = rOldDist[oldDistPtr++ & 3] = Distance;
              RarUtils.RarCopyString(2, Distance);
              continue;
          }
  
      }
      RarUtils.RarUpdateProgress();
  }