code: private function readContinue()
      {
          $length = self::getUInt2d($this->data, $this->pos + 2);
          $recordData = $this->readRecordData($this->data, $this->pos + 4, $length);
  
          // check if we are reading drawing data
          // this is in case a free CONTINUE record occurs in other circumstances we are unaware of
          if ($this->drawingData == '') {
              // move stream pointer to next record
              $this->pos += 4 + $length;
  
              return;
          }
  
          // check if record data is at least 4 bytes long, otherwise there is no chance this is MSODRAWING data
          if ($length < 4) {
              // move stream pointer to next record
              $this->pos += 4 + $length;
  
              return;
          }
  
          // dirty check to see if CONTINUE record could be a camouflaged MSODRAWING record
          // look inside CONTINUE record to see if it looks like a part of an Escher stream
          // we know that Escher stream may be split at least at
          //        0xF003 MsofbtSpgrContainer
          //        0xF004 MsofbtSpContainer
          //        0xF00D MsofbtClientTextbox
          $validSplitPoints = [0xF003, 0xF004, 0xF00D]; // add identifiers if we find more
  
          $splitPoint = self::getUInt2d($recordData, 2);
          if (in_array($splitPoint, $validSplitPoints)) {
              // get spliced record data (and move pointer to next record)
              $splicedRecordData = $this->getSplicedRecordData();
              $this->drawingData .= $splicedRecordData['recordData'];
  
              return;
          }
  
          // move stream pointer to next record
          $this->pos += 4 + $length;
      }
docs: Read a free CONTINUE record. Free CONTINUE record may be a camouflaged MSODRAWING record
  When MSODRAWING data on a sheet exceeds 8224 bytes, CONTINUE records are used instead. Undocumented.
  In this case, we must treat the CONTINUE record as a MSODRAWING record.