///|
fn PdfDocument::load_reconstructed_plan(
  self : PdfDocument,
  data : BytesView,
  plan : @reader.PdfReaderReconstructionPlan,
  include_xref_stream_trailers : Bool,
  user_password : BytesView?,
  owner_password : BytesView?,
) -> Unit raise @core.PdfError {
  self.load_reconstructed_classic_xref_plain_objects(data, plan.classic_xrefs)
  self.load_reconstructed_object_xrefs(
    data,
    plan.object_xrefs,
    plan.xref_coverage,
  )
  if include_xref_stream_trailers {
    self.load_reconstructed_xref_stream_objects(data, plan.xref_stream_sections)
    self.load_reconstructed_physical_object_stream_members()
  }
  self.set_trailer_and_root(self.select_reconstructed_trailer(plan.trailers))
  if include_xref_stream_trailers && self.is_encrypted() {
    self.load_reconstructed_xref_stream_embedded_objects_with_passwords(
      @reader.pdf_reader_reconstruction_xref_stream_entries(
        plan.xref_stream_sections,
      ),
      user_password,
      owner_password,
    )
  }
  self.sanitize_reader_trailer()
}