<!DOCTYPE html>
        <html>
          <head>
            <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>

            <style type='text/css'>
/* Structural CSS ------------------------------------------------------------*/
/*
 * TBD whether we want a more fully table like structure; some of the visual
 * cues provided by the current set-up are useful (line wraps, etc.)
 */

DIV.diffobj-container PRE.diffobj-content {
  white-space: pre-wrap;
  margin: 0;
}
DIV.diffobj-container DIV.diffobj-row {
  width: 100%;
  font-family: monospace;
  display: table;
  table-layout: fixed;
}
DIV.diffobj-container DIV.diffobj-line {
  width: auto;
  display: table-cell;
  overflow: hidden;
}
DIV.diffobj-container DIV.diffobj-line>DIV {
  width: 100%;
  display: table;
  table-layout: auto;
}
DIV.diffobj-container DIV.diffobj-line.banner>DIV {
  display: table;
  table-layout: auto; /* set to fixed in JS */
}
DIV.diffobj-container DIV.diffobj-text {
  display: table-cell;
  width: 100%;
}
DIV.diffobj-container DIV.diffobj-gutter {
  display: table-cell;
  padding: 0 0.2em;
}
DIV.diffobj-container DIV.diffobj-gutter DIV {
  display: table-cell;
}
#diffobj_content_meta DIV.diffobj-container DIV.diffobj-row {
  width: auto;
}
#diffobj_banner_meta DIV.diffobj-container DIV.diffobj-line.banner>DIV {
  table-layout: auto;
}
#diffobj_outer {
  overflow: hidden;
}
/* Summary -------------------------------------------------------------------*/ 

DIV.diffobj-container DIV.diffobj-summary DIV.map {
  word-wrap: break-word;
  padding-left: 1em;
}
DIV.diffobj-container DIV.diffobj-summary DIV.detail {
  padding-left: 1em;
}

/* Common elements -----------------------------------------------------------*/

DIV.diffobj-container DIV.diffobj-line.banner {
  font-size: 1.2em;
  font-weight: bold;
  overflow: hidden;
}
/* truncate banners */
DIV.diffobj-container DIV.diffobj-line.banner DIV.diffobj-text DIV{
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  width: 100%;             /* need to compute and set in JS */
}
DIV.diffobj-container DIV.diffobj-gutter,
DIV.diffobj-container DIV.diffobj-guide,
DIV.diffobj-container DIV.diffobj-fill,
DIV.diffobj-container DIV.context_sep,
DIV.diffobj-container SPAN.diffobj-trim {
  color: #999;
}
DIV.diffobj-container DIV.diffobj-header {
  font-size: 1.1em;
}
DIV.diffobj-container DIV.diffobj-text>DIV.diffobj-match,
DIV.diffobj-container DIV.diffobj-text>DIV.diffobj-guide {
  background-color: #ffffff;
}
DIV.diffobj-container DIV.diffobj-text>DIV.diffobj-fill {
  background-color: transparent;
}
DIV.diffobj-container DIV.diffobj-text>DIV {
  padding-right: 3px;
}
DIV.diffobj-container DIV.diffobj-text>DIV {
  border-left: 1px solid #888888;
}
DIV.diffobj-container DIV.diffobj-line {
  background-color: #eeeeee;
}
DIV.diffobj-container DIV.diffobj-text>DIV,
DIV.diffobj-container DIV.diffobj-header {
  padding-left: 0.5em;
}
DIV.diffobj-container DIV.diffobj-line>DIV.diffobj-match,
DIV.diffobj-container DIV.diffobj-line>DIV.diffobj-fill,
DIV.diffobj-container DIV.diffobj-line>DIV.diffobj-guide {
  border-left: 1px solid #888888;
}
/* github inspired color scheme - default ------------------------------------*/

DIV.diffobj-container.light.rgb SPAN.diffobj-word.insert,
DIV.diffobj-container.light.rgb DIV.diffobj-line>DIV.insert {
  background-color: #a6f3a6;
}
DIV.diffobj-container.light.rgb SPAN.diffobj-word.delete,
DIV.diffobj-container.light.rgb DIV.diffobj-line>DIV.delete {
  background-color: #f8c2c2;
}
DIV.diffobj-container.light.rgb DIV.diffobj-text>DIV.insert {
  background-color: #efffef;
}
DIV.diffobj-container.light.rgb DIV.diffobj-text>DIV.insert,
DIV.diffobj-container.light.rgb DIV.diffobj-line>DIV.insert {
  border-left: 1px solid #33bb33;
}
DIV.diffobj-container.light.rgb DIV.diffobj-text>DIV.delete {
  background-color: #ffefef;
}
DIV.diffobj-container.light.rgb DIV.diffobj-text>DIV.delete,
DIV.diffobj-container.light.rgb DIV.diffobj-line>DIV.delete {
  border-left: 1px solid #cc6666;
}
DIV.diffobj-container.light.rgb DIV.diffobj-header {
  background-color: #e0e6fa;
  border-left: 1px solid #9894b6;
}
/* Yellow Blue variation -----------------------------------------------------*/

DIV.diffobj-container.light.yb SPAN.diffobj-word.insert,
DIV.diffobj-container.light.yb DIV.diffobj-line>DIV.insert {
  background-color: #c0cfff;
}
DIV.diffobj-container.light.yb SPAN.diffobj-word.delete,
DIV.diffobj-container.light.yb DIV.diffobj-line>DIV.delete {
  background-color: #e7e780;
}
DIV.diffobj-container.light.yb DIV.diffobj-text>DIV.insert {
  background-color: #efefff;
}
DIV.diffobj-container.light.yb DIV.diffobj-text>DIV.insert,
DIV.diffobj-container.light.yb DIV.diffobj-line>DIV.insert {
  border-left: 1px solid #3333bb;
}
DIV.diffobj-container.light.yb DIV.diffobj-text>DIV.delete {
  background-color: #fefee5;
}
DIV.diffobj-container.light.yb DIV.diffobj-text>DIV.delete,
DIV.diffobj-container.light.yb DIV.diffobj-line>DIV.delete {
  border-left: 1px solid #aaaa55;
}
DIV.diffobj-container.light.yb DIV.diffobj-header {
  background-color: #afafaf;
  border-left: 1px solid #e3e3e3;
  color: #e9e9e9;
}
DIV.diffobj-container.light.yb DIV.diffobj-line {
  background-color: #eeeeee;
}
</style>

          </head>
          <body>
            <div id='diffobj_outer'>
<div id='diffobj_meta' style='display: none; position: absolute; top: 0px; z-index: -1;'>
      <div id='diffobj_banner_meta'><div class='diffobj-container light yb'><pre class='diffobj-content'><div class='diffobj-row'><div class='diffobj-line banner'><div class='delete'><div class='diffobj-gutter'><div class='delete'>&lt;</div><div class='pad'> </div></div><div class='diffobj-text'><div class='delete'>&nbsp;</div></div></div></div><div class='diffobj-line banner'><div class='insert'><div class='diffobj-gutter'><div class='insert'>&gt;</div><div class='pad'> </div></div><div class='diffobj-text'><div class='insert'>&nbsp;</div></div></div></div></div></pre></div></div>
      <div id='diffobj_content_meta'><div class='diffobj-container light yb'><pre class='diffobj-content'><div class='diffobj-row'><div class='diffobj-line'><div class='delete'><div class='diffobj-gutter'><div class='delete'>&lt;</div><div class='pad'> </div></div><div class='diffobj-text'><div class='delete'>aaaaaaaaaaaaaaaaaaaaaaaaaaa</div></div></div></div><div class='diffobj-line'><div class='insert'><div class='diffobj-gutter'><div class='insert'>&gt;</div><div class='pad'> </div></div><div class='diffobj-text'><div class='insert'>aaaaaaaaaaaaaaaaaaaaaaaaaaa</div></div></div></div></div></pre></div></div>
     </div><div id='diffobj_content'><div class='diffobj-container light yb'><pre class='diffobj-content'><div class='diffobj-row'><div class='diffobj-line banner'><div class='delete'><div class='diffobj-gutter'><div class='delete'>&lt;</div><div class='pad'> </div></div><div class='diffobj-text'><div class='delete'><span class='diffobj-word delete'>letters[1:6]</span></div></div></div></div><div class='diffobj-line banner'><div class='insert'><div class='diffobj-gutter'><div class='insert'>&gt;</div><div class='pad'> </div></div><div class='diffobj-text'><div class='insert'><span class='diffobj-word insert'>LETTERS[1:6]</span></div></div></div></div></div><div class='diffobj-row'><div class='diffobj-line'><div class='diffobj-header'>@@ 1 @@</div></div><div class='diffobj-line'><div class='diffobj-header'>@@ 1 @@</div></div></div><div class='diffobj-row'><div class='diffobj-line'><div class='delete'><div class='diffobj-gutter'><div class='delete'>&lt;</div><div class='pad'> </div></div><div class='diffobj-text'><div class='delete'><span class='diffobj-trim'>[1] </span><span class='diffobj-word delete'>"a"</span> <span class='diffobj-word delete'>"b"</span> <span class='diffobj-word delete'>"c"</span> <span class='diffobj-word delete'>"d"</span> <span class='diffobj-word delete'>"e"</span> <span class='diffobj-word delete'>"f"</span><span class='diffobj-trim'></span></div></div></div></div><div class='diffobj-line'><div class='insert'><div class='diffobj-gutter'><div class='insert'>&gt;</div><div class='pad'> </div></div><div class='diffobj-text'><div class='insert'><span class='diffobj-trim'>[1] </span><span class='diffobj-word insert'>"A"</span> <span class='diffobj-word insert'>"B"</span> <span class='diffobj-word insert'>"C"</span> <span class='diffobj-word insert'>"D"</span> <span class='diffobj-word insert'>"E"</span> <span class='diffobj-word insert'>"F"</span><span class='diffobj-trim'></span></div></div></div></div></div></pre></div></div>
          <script type="text/javascript">
            var scale=true;
          </script>
</div>
            <script type='text/javascript'>
// diffobj - Compare R Objects with a Diff
// Copyright (C) 2021 Brodie Gaslam
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
//
// Go to <https://www.r-project.org/Licenses/GPL-3> for a copy of the license.

/*
 * Resizes diff by changing font-size using a hidden row of sample output as
 * a reference
 *
 * NOTE: this code is intended to be loaded after the HTML has been rendered
 * and is assumed to be the only JS on the page.  It should only be included
 * as part of output when in "page" mode and should not be embedded in other
 * content.  For that, use the HTML/CSS only outputs.
 */

var meta = document.getElementById("diffobj_meta");
var meta_cont = document.getElementById("diffobj_content_meta");
var meta_banner = document.getElementById("diffobj_banner_meta");
var content = document.getElementById("diffobj_content");
var outer = document.getElementById("diffobj_outer");

if(
  meta == null || content == null || outer == null ||
  meta_cont == null || meta_banner == null
)
  throw new Error("Unable to find meta and content; contact maintainer.");

var row = meta_cont.getElementsByClassName("row");

if(row.length != 1)
  throw new Error("Unexpected row struct in meta block; contact maintainer.");

var lines = meta_cont.getElementsByClassName("line");

if(lines.length != 1 && lines.length != 2)
  throw new Error("Unexpected lines in meta block; contact maintainer.");

var meta_bnr_gutter =
  document.querySelector("#diffobj_banner_meta .line .gutter");
var meta_bnr_delete =
  document.querySelector("#diffobj_banner_meta .line .text>.delete");
var meta_bnr_text =
  document.querySelector("#diffobj_banner_meta .line .text");

var bnr_gutters =
  document.querySelectorAll("#diffobj_content .line.banner .gutter");
var bnr_text_div =
  document.querySelectorAll("#diffobj_content .line.banner .text>DIV");

if(
    meta_bnr_gutter == null || meta_bnr_delete == null ||
    bnr_gutters.length != 2 || bnr_text_div.length != 2
  )
  throw new Error("Unable to get meta banner objects")

// Set the banners to 'fixed'; need to be in auto by default

for(i = 0; i < 2; i++) bnr_text_div[i].style.tableLayout = "fixed";

// - Set Min Width -------------------------------------------------------------

// Makes sure that we don't wrap under "native" width
// Note we need to pad because scrollWidth appears to truncate floats to int

meta.style.display = "block";
var min_width = 0;
for(i = 0; i < lines.length; i++) min_width += lines[i].scrollWidth + 1;
meta.style.display = "none";

content.style.minWidth = min_width + "px";

function resize_diff_out(scale) {

  // - Get object refs ---------------------------------------------------------


  // - Get Sizes ---------------------------------------------------------------

  meta.style.display = "block";

  // The getComputedStyle business won't work on IE9 or lower; need to detect
  // and implement work-around

  var b_t, b_d_w, b_d_o, b_g;
  b_g = parseFloat(window.getComputedStyle(meta_bnr_gutter).width);
  b_d_o = meta_bnr_delete.offsetWidth;
  b_d_w = parseFloat(window.getComputedStyle(meta_bnr_delete).width);
  b_t = parseFloat(window.getComputedStyle(meta_bnr_text).width);

  meta.style.display = "none";

  // - Set Sizes ---------------------------------------------------------------

  for(i = 0; i < 2; i++) {
    bnr_gutters[i].style.width = b_g + "px";
    // for some reason table fixed width computation doesn't properly account
    // for padding and lines
    bnr_text_div[i].style.width = b_t - b_d_o + b_d_w + "px";
  }
  var w = document.body.clientWidth;
  var scale_size = w / min_width;

  if(scale_size < 1) {

    if(scale) {
      content.style.transform = "scale(" + scale_size + ")";
      content.style.transformOrigin = "top left";
      content.style.webkitTransform = "scale(" + scale_size + ")";
      content.style.webkitTransformOrigin = "top left";
      content.style.msTransform = "scale(" + scale_size + ")";
      content.style.msTransformOrigin = "top left";
      content.style.MozTransform = "scale(" + scale_size + ")";
      content.style.MozTransformOrigin = "top left";
      content.style.oTransform = "scale(" + scale_size + ")";
      content.style.oTransformOrigin = "top left";

      var cont_rec_h = content.getBoundingClientRect().height;

      if(cont_rec_h) {
        outer.style.height = cont_rec_h + "px";
      }
    }
    var cont_rec_w = content.getBoundingClientRect().width;
    if(cont_rec_w) {
      outer.style.width = cont_rec_w + "px";
    }
  } else {
    content.style.transform = "none";
    content.style.MozTransform = "none";
    content.style.webkitTransform = "none";
    content.style.msTransform = "none";
    content.style.oTransform = "none";
    outer.style.height = "auto";
    outer.style.width = "auto";
  }
};
/*
 * Manage resize timeout based on how large the object is
 */

var out_rows = content.getElementsByClassName("row").length;
var timeout_time;
if(out_rows < 100) {
  timeout_time = 25;
} else {
  timeout_time = Math.min(25 + (out_rows - 100) / 4, 500)
}

var timeout;
function resize_window(f, scale) {
  clearTimeout(timeout);
  timeout = setTimeout(f, timeout_time, scale);
}

function resize_diff_out_scale() {resize_window(resize_diff_out, true);}
function resize_diff_out_no_scale() {resize_window(resize_diff_out, false);}
window.addEventListener('resize', resize_diff_out_scale, true);
 resize_diff_out_scale();
</script>
          </body>
        </html>