Skip to content
Snippets Groups Projects
Select Git revision
  • 4a21412b85f2d2c3fe4b7a5e0d10084b013e3fc2
  • main default protected
2 results

RP2040-VCO-ibom-global.html

Blame
  • user avatar
    github-actions authored
    de63f312
    History
    RP2040-VCO-ibom-global.html 294.29 KiB
    <!DOCTYPE html>
    <html lang="en">
    
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>Interactive BOM for KiCAD</title>
      <style type="text/css">
    :root {
      --pcb-edge-color: black;
      --pad-color: #878787;
      --pad-hole-color: #CCCCCC;
      --pad-color-highlight: #D04040;
      --pad-color-highlight-both: #D0D040;
      --pad-color-highlight-marked: #44a344;
      --pin1-outline-color: #ffb629;
      --pin1-outline-color-highlight: #ffb629;
      --pin1-outline-color-highlight-both: #fcbb39;
      --pin1-outline-color-highlight-marked: #fdbe41;
      --silkscreen-edge-color: #aa4;
      --silkscreen-polygon-color: #4aa;
      --silkscreen-text-color: #4aa;
      --fabrication-edge-color: #907651;
      --fabrication-polygon-color: #907651;
      --fabrication-text-color: #a27c24;
      --track-color: #def5f1;
      --track-color-highlight: #D04040;
      --zone-color: #def5f1;
      --zone-color-highlight: #d0404080;
    }
    
    html,
    body {
      margin: 0px;
      height: 100%;
      font-family: Verdana, sans-serif;
    }
    
    .dark.topmostdiv {
      --pcb-edge-color: #eee;
      --pad-color: #808080;
      --pin1-outline-color: #ffa800;
      --pin1-outline-color-highlight: #ccff00;
      --track-color: #42524f;
      --zone-color: #42524f;
      background-color: #252c30;
      color: #eee;
    }
    
    button {
      background-color: #eee;
      border: 1px solid #888;
      color: black;
      height: 44px;
      width: 44px;
      text-align: center;
      text-decoration: none;
      display: inline-block;
      font-size: 14px;
      font-weight: bolder;
    }
    
    .dark button {
      /* This will be inverted */
      background-color: #c3b7b5;
    }
    
    button.depressed {
      background-color: #0a0;
      color: white;
    }
    
    .dark button.depressed {
      /* This will be inverted */
      background-color: #b3b;
    }
    
    button:focus {
      outline: 0;
    }
    
    button#tb-btn {
      background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8.47 8.47'%3E%3Crect transform='translate(0 -288.53)' ry='1.17' y='288.8' x='.27' height='7.94' width='7.94' fill='%23f9f9f9'/%3E%3Cg transform='translate(0 -288.53)'%3E%3Crect width='7.94' height='7.94' x='.27' y='288.8' ry='1.17' fill='none' stroke='%23000' stroke-width='.4' stroke-linejoin='round'/%3E%3Cpath d='M1.32 290.12h5.82M1.32 291.45h5.82' fill='none' stroke='%23000' stroke-width='.4'/%3E%3Cpath d='M4.37 292.5v4.23M.26 292.63H8.2' fill='none' stroke='%23000' stroke-width='.3'/%3E%3Ctext font-weight='700' font-size='3.17' font-family='sans-serif'%3E%3Ctspan x='1.35' y='295.73'%3EF%3C/tspan%3E%3Ctspan x='5.03' y='295.68'%3EB%3C/tspan%3E%3C/text%3E%3C/g%3E%3C/svg%3E%0A");
    }
    
    button#lr-btn {
      background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8.47 8.47'%3E%3Crect transform='translate(0 -288.53)' ry='1.17' y='288.8' x='.27' height='7.94' width='7.94' fill='%23f9f9f9'/%3E%3Cg transform='translate(0 -288.53)'%3E%3Crect width='7.94' height='7.94' x='.27' y='288.8' ry='1.17' fill='none' stroke='%23000' stroke-width='.4' stroke-linejoin='round'/%3E%3Cpath d='M1.06 290.12H3.7m-2.64 1.33H3.7m-2.64 1.32H3.7m-2.64 1.3H3.7m-2.64 1.33H3.7' fill='none' stroke='%23000' stroke-width='.4'/%3E%3Cpath d='M4.37 288.8v7.94m0-4.11h3.96' fill='none' stroke='%23000' stroke-width='.3'/%3E%3Ctext font-weight='700' font-size='3.17' font-family='sans-serif'%3E%3Ctspan x='5.11' y='291.96'%3EF%3C/tspan%3E%3Ctspan x='5.03' y='295.68'%3EB%3C/tspan%3E%3C/text%3E%3C/g%3E%3C/svg%3E%0A");
    }
    
    button#bom-btn {
      background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8.47 8.47'%3E%3Crect transform='translate(0 -288.53)' ry='1.17' y='288.8' x='.27' height='7.94' width='7.94' fill='%23f9f9f9'/%3E%3Cg transform='translate(0 -288.53)' fill='none' stroke='%23000' stroke-width='.4'%3E%3Crect width='7.94' height='7.94' x='.27' y='288.8' ry='1.17' stroke-linejoin='round'/%3E%3Cpath d='M1.59 290.12h5.29M1.59 291.45h5.33M1.59 292.75h5.33M1.59 294.09h5.33M1.59 295.41h5.33'/%3E%3C/g%3E%3C/svg%3E");
    }
    
    button#bom-grouped-btn {
      background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='32' height='32'%3E%3Cg stroke='%23000' stroke-linejoin='round' class='layer'%3E%3Crect width='29' height='29' x='1.5' y='1.5' stroke-width='2' fill='%23fff' rx='5' ry='5'/%3E%3Cpath stroke-linecap='square' stroke-width='2' d='M6 10h4m4 0h5m4 0h3M6.1 22h3m3.9 0h5m4 0h4m-16-8h4m4 0h4'/%3E%3Cpath stroke-linecap='null' d='M5 17.5h22M5 26.6h22M5 5.5h22'/%3E%3C/g%3E%3C/svg%3E");
    }
    
    button#bom-ungrouped-btn {
      background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='32' height='32'%3E%3Cg stroke='%23000' stroke-linejoin='round' class='layer'%3E%3Crect width='29' height='29' x='1.5' y='1.5' stroke-width='2' fill='%23fff' rx='5' ry='5'/%3E%3Cpath stroke-linecap='square' stroke-width='2' d='M6 10h4m-4 8h3m-3 8h4'/%3E%3Cpath stroke-linecap='null' d='M5 13.5h22m-22 8h22M5 5.5h22'/%3E%3C/g%3E%3C/svg%3E");
    }
    
    button#bom-netlist-btn {
      background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='32' height='32'%3E%3Cg fill='none' stroke='%23000' class='layer'%3E%3Crect width='29' height='29' x='1.5' y='1.5' stroke-width='2' fill='%23fff' rx='5' ry='5'/%3E%3Cpath stroke-width='2' d='M6 26l6-6v-8m13.8-6.3l-6 6v8'/%3E%3Ccircle cx='11.8' cy='9.5' r='2.8' stroke-width='2'/%3E%3Ccircle cx='19.8' cy='22.8' r='2.8' stroke-width='2'/%3E%3C/g%3E%3C/svg%3E");
    }
    
    button#copy {
      background-image: url("data:image/svg+xml,%3Csvg height='48' viewBox='0 0 48 48' width='48' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M0 0h48v48h-48z' fill='none'/%3E%3Cpath d='M32 2h-24c-2.21 0-4 1.79-4 4v28h4v-28h24v-4zm6 8h-22c-2.21 0-4 1.79-4 4v28c0 2.21 1.79 4 4 4h22c2.21 0 4-1.79 4-4v-28c0-2.21-1.79-4-4-4zm0 32h-22v-28h22v28z'/%3E%3C/svg%3E");
      background-position: 6px 6px;
      background-repeat: no-repeat;
      background-size: 26px 26px;
      border-radius: 6px;
      height: 40px;
      width: 40px;
      margin: 10px 5px;
    }
    
    button#copy:active {
      box-shadow: inset 0px 0px 5px #6c6c6c;
    }
    
    textarea.clipboard-temp {
      position: fixed;
      top: 0;
      left: 0;
      width: 2em;
      height: 2em;
      padding: 0;
      border: None;
      outline: None;
      box-shadow: None;
      background: transparent;
    }
    
    .left-most-button {
      border-right: 0;
      border-top-left-radius: 6px;
      border-bottom-left-radius: 6px;
    }
    
    .middle-button {
      border-right: 0;
    }
    
    .right-most-button {
      border-top-right-radius: 6px;
      border-bottom-right-radius: 6px;
    }
    
    .button-container {
      font-size: 0;
      margin: 10px 10px 10px 0px;
    }
    
    .dark .button-container {
      filter: invert(1);
    }
    
    .button-container button {
      background-size: 32px 32px;
      background-position: 5px 5px;
      background-repeat: no-repeat;
    }
    
    @media print {
      .hideonprint {
        display: none;
      }
    }
    
    canvas {
      cursor: crosshair;
    }
    
    canvas:active {
      cursor: grabbing;
    }
    
    .fileinfo {
      width: 100%;
      max-width: 1000px;
      border: none;
      padding: 5px;
    }
    
    .fileinfo .title {
      font-size: 20pt;
      font-weight: bold;
    }
    
    .fileinfo td {
      overflow: hidden;
      white-space: nowrap;
      max-width: 1px;
      width: 50%;
      text-overflow: ellipsis;
    }
    
    .bom {
      border-collapse: collapse;
      font-family: Consolas, "DejaVu Sans Mono", Monaco, monospace;
      font-size: 10pt;
      table-layout: fixed;
      width: 100%;
      margin-top: 1px;
      position: relative;
    }
    
    .bom th,
    .bom td {
      border: 1px solid black;
      padding: 5px;
      word-wrap: break-word;
      text-align: center;
      position: relative;
    }
    
    .dark .bom th,
    .dark .bom td {
      border: 1px solid #777;
    }
    
    .bom th {
      background-color: #CCCCCC;
      background-clip: padding-box;
    }
    
    .dark .bom th {
      background-color: #3b4749;
    }
    
    .bom tr.highlighted:nth-child(n) {
      background-color: #cfc;
    }
    
    .dark .bom tr.highlighted:nth-child(n) {
      background-color: #226022;
    }
    
    .bom tr:nth-child(even) {
      background-color: #f2f2f2;
    }
    
    .dark .bom tr:nth-child(even) {
      background-color: #313b40;
    }
    
    .bom tr.checked {
      color: #1cb53d;
    }
    
    .dark .bom tr.checked {
      color: #2cce54;
    }
    
    .bom tr {
      transition: background-color 0.2s;
    }
    
    .bom .numCol {
      width: 30px;
    }
    
    .bom .value {
      width: 15%;
    }
    
    .bom .quantity {
      width: 65px;
    }
    
    .bom th .sortmark {
      position: absolute;
      right: 1px;
      top: 1px;
      margin-top: -5px;
      border-width: 5px;
      border-style: solid;
      border-color: transparent transparent #221 transparent;
      transform-origin: 50% 85%;
      transition: opacity 0.2s, transform 0.4s;
    }
    
    .dark .bom th .sortmark {
      filter: invert(1);
    }
    
    .bom th .sortmark.none {
      opacity: 0;
    }
    
    .bom th .sortmark.desc {
      transform: rotate(180deg);
    }
    
    .bom th:hover .sortmark.none {
      opacity: 0.5;
    }
    
    .bom .bom-checkbox {
      width: 30px;
      position: relative;
      user-select: none;
      -moz-user-select: none;
    }
    
    .bom .bom-checkbox:before {
      content: "";
      position: absolute;
      border-width: 15px;
      border-style: solid;
      border-color: #51829f transparent transparent transparent;
      visibility: hidden;
      top: -15px;
    }
    
    .bom .bom-checkbox:after {
      content: "Double click to set/unset all";
      position: absolute;
      color: white;
      top: -35px;
      left: -26px;
      background: #51829f;
      padding: 5px 15px;
      border-radius: 8px;
      white-space: nowrap;
      visibility: hidden;
    }
    
    .bom .bom-checkbox:hover:before,
    .bom .bom-checkbox:hover:after {
      visibility: visible;
      transition: visibility 0.2s linear 1s;
    }
    
    .split {
      -webkit-box-sizing: border-box;
      -moz-box-sizing: border-box;
      box-sizing: border-box;
      overflow-y: auto;
      overflow-x: hidden;
      background-color: inherit;
    }
    
    .split.split-horizontal,
    .gutter.gutter-horizontal {
      height: 100%;
      float: left;
    }
    
    .gutter {
      background-color: #ddd;
      background-repeat: no-repeat;
      background-position: 50%;
      transition: background-color 0.3s;
    }
    
    .dark .gutter {
      background-color: #777;
    }
    
    .gutter.gutter-horizontal {
      background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAeCAYAAADkftS9AAAAIklEQVQoU2M4c+bMfxAGAgYYmwGrIIiDjrELjpo5aiZeMwF+yNnOs5KSvgAAAABJRU5ErkJggg==');
      cursor: ew-resize;
      width: 5px;
    }
    
    .gutter.gutter-vertical {
      background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAFAQMAAABo7865AAAABlBMVEVHcEzMzMzyAv2sAAAAAXRSTlMAQObYZgAAABBJREFUeF5jOAMEEAIEEFwAn3kMwcB6I2AAAAAASUVORK5CYII=');
      cursor: ns-resize;
      height: 5px;
    }
    
    .searchbox {
      float: left;
      height: 40px;
      margin: 10px 5px;
      padding: 12px 32px;
      font-family: Consolas, "DejaVu Sans Mono", Monaco, monospace;
      font-size: 18px;
      box-sizing: border-box;
      border: 1px solid #888;
      border-radius: 6px;
      outline: none;
      background-color: #eee;
      transition: background-color 0.2s, border 0.2s;
      background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABNklEQVQ4T8XSMUvDQBQH8P/LElFa/AIZHcTBQSz0I/gFstTBRR2KUC4ldDxw7h0Bl3RRUATxi4iiODgoiLNrbQYp5J6cpJJqomkX33Z37/14d/dIa33MzDuYI4johOI4XhyNRteO46zNYjDzAxE1yBZprVeZ+QbAUhXEGJMA2Ox2u4+fQIa0mPmsCgCgJYQ4t7lfgF0opQYAdv9ABkKI/UnOFCClXKjX61cA1osQY8x9kiRNKeV7IWA3oyhaSdP0FkAtjxhj3hzH2RBCPOf3pzqYHCilfAAX+URm9oMguPzeWSGQvUcMYC8rOBJCHBRdqxTo9/vbRHRqi8bj8XKv1xvODbiuW2u32/bvf0SlDv4XYOY7z/Mavu+nM1+BmQ+NMc0wDF/LprP0DbTWW0T00ul0nn4b7Q87+X4Qmfiq2wAAAABJRU5ErkJggg==');
      background-position: 10px 10px;
      background-repeat: no-repeat;
    }
    
    .dark .searchbox {
      background-color: #111;
      color: #eee;
    }
    
    .searchbox::placeholder {
      color: #ccc;
    }
    
    .dark .searchbox::placeholder {
      color: #666;
    }
    
    .filter {
      width: calc(60% - 64px);
    }
    
    .reflookup {
      width: calc(40% - 10px);
    }
    
    input[type=text]:focus {
      background-color: white;
      border: 1px solid #333;
    }
    
    .dark input[type=text]:focus {
      background-color: #333;
      border: 1px solid #ccc;
    }
    
    mark.highlight {
      background-color: #5050ff;
      color: #fff;
      padding: 2px;
      border-radius: 6px;
    }
    
    .dark mark.highlight {
      background-color: #76a6da;
      color: #111;
    }
    
    .menubtn {
      background-color: white;
      border: none;
      background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='36' height='36' viewBox='0 0 20 20'%3E%3Cpath fill='none' d='M0 0h20v20H0V0z'/%3E%3Cpath d='M15.95 10.78c.03-.25.05-.51.05-.78s-.02-.53-.06-.78l1.69-1.32c.15-.12.19-.34.1-.51l-1.6-2.77c-.1-.18-.31-.24-.49-.18l-1.99.8c-.42-.32-.86-.58-1.35-.78L12 2.34c-.03-.2-.2-.34-.4-.34H8.4c-.2 0-.36.14-.39.34l-.3 2.12c-.49.2-.94.47-1.35.78l-1.99-.8c-.18-.07-.39 0-.49.18l-1.6 2.77c-.1.18-.06.39.1.51l1.69 1.32c-.04.25-.07.52-.07.78s.02.53.06.78L2.37 12.1c-.15.12-.19.34-.1.51l1.6 2.77c.1.18.31.24.49.18l1.99-.8c.42.32.86.58 1.35.78l.3 2.12c.04.2.2.34.4.34h3.2c.2 0 .37-.14.39-.34l.3-2.12c.49-.2.94-.47 1.35-.78l1.99.8c.18.07.39 0 .49-.18l1.6-2.77c.1-.18.06-.39-.1-.51l-1.67-1.32zM10 13c-1.65 0-3-1.35-3-3s1.35-3 3-3 3 1.35 3 3-1.35 3-3 3z'/%3E%3C/svg%3E%0A");
      background-position: center;
      background-repeat: no-repeat;
    }
    
    .statsbtn {
      background-color: white;
      border: none;
      background-image: url("data:image/svg+xml,%3Csvg width='36' height='36' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M4 6h28v24H4V6zm0 8h28v8H4m9-16v24h10V5.8' fill='none' stroke='%23000' stroke-width='2'/%3E%3C/svg%3E");
      background-position: center;
      background-repeat: no-repeat;
    }
    
    .iobtn {
      background-color: white;
      border: none;
      background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='36' height='36'%3E%3Cpath fill='none' stroke='%23000' stroke-width='2' d='M3 33v-7l6.8-7h16.5l6.7 7v7H3zM3.2 26H33M21 9l5-5.9 5 6h-2.5V15h-5V9H21zm-4.9 0l-5 6-5-6h2.5V3h5v6h2.5z'/%3E%3Cpath fill='none' stroke='%23000' d='M6.1 29.5H10'/%3E%3C/svg%3E");
      background-position: center;
      background-repeat: no-repeat;
    }
    
    .visbtn {
      background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24'%3E%3Cpath fill='none' stroke='%23333' d='M2.5 4.5h5v15h-5zM9.5 4.5h5v15h-5zM16.5 4.5h5v15h-5z'/%3E%3C/svg%3E");
      background-position: center;
      background-repeat: no-repeat;
      padding: 15px;
    }
    
    #vismenu-content {
      left: 0px;
      font-family: Verdana, sans-serif;
    }
    
    .dark .statsbtn,
    .dark .savebtn,
    .dark .menubtn,
    .dark .iobtn,
    .dark .visbtn {
      filter: invert(1);
    }
    
    .flexbox {
      display: flex;
      align-items: center;
      justify-content: space-between;
      width: 100%;
    }
    
    .savebtn {
      background-color: #d6d6d6;
      width: auto;
      height: 30px;
      flex-grow: 1;
      margin: 5px;
      border-radius: 4px;
    }
    
    .savebtn:active {
      background-color: #0a0;
      color: white;
    }
    
    .dark .savebtn:active {
      /* This will be inverted */
      background-color: #b3b;
    }
    
    .stats {
      border-collapse: collapse;
      font-size: 12pt;
      table-layout: fixed;
      width: 100%;
      min-width: 450px;
    }
    
    .dark .stats td {
      border: 1px solid #bbb;
    }
    
    .stats td {
      border: 1px solid black;
      padding: 5px;
      word-wrap: break-word;
      text-align: center;
      position: relative;
    }
    
    #checkbox-stats div {
      position: absolute;
      left: 0;
      top: 0;
      height: 100%;
      width: 100%;
      display: flex;
      align-items: center;
      justify-content: center;
    }
    
    #checkbox-stats .bar {
      background-color: rgba(28, 251, 0, 0.6);
    }
    
    .menu {
      position: relative;
      display: inline-block;
      margin: 10px 10px 10px 0px;
    }
    
    .menu-content {
      font-size: 12pt !important;
      text-align: left !important;
      font-weight: normal !important;
      display: none;
      position: absolute;
      background-color: white;
      right: 0;
      min-width: 300px;
      box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.2);
      z-index: 100;
      padding: 8px;
    }
    
    .dark .menu-content {
      background-color: #111;
    }
    
    .menu:hover .menu-content {
      display: block;
    }
    
    .menu:hover .menubtn,
    .menu:hover .iobtn,
    .menu:hover .statsbtn {
      background-color: #eee;
    }
    
    .menu-label {
      display: inline-block;
      padding: 8px;
      border: 1px solid #ccc;
      border-top: 0;
      width: calc(100% - 18px);
    }
    
    .menu-label-top {
      border-top: 1px solid #ccc;
    }
    
    .menu-textbox {
      float: left;
      height: 24px;
      margin: 10px 5px;
      padding: 5px 5px;
      font-family: Consolas, "DejaVu Sans Mono", Monaco, monospace;
      font-size: 14px;
      box-sizing: border-box;
      border: 1px solid #888;
      border-radius: 4px;
      outline: none;
      background-color: #eee;
      transition: background-color 0.2s, border 0.2s;
      width: calc(100% - 10px);
    }
    
    .menu-textbox.invalid,
    .dark .menu-textbox.invalid {
      color: red;
    }
    
    .dark .menu-textbox {
      background-color: #222;
      color: #eee;
    }
    
    .radio-container {
      margin: 4px;
    }
    
    .topmostdiv {
      width: 100%;
      height: 100%;
      background-color: white;
      transition: background-color 0.3s;
    }
    
    #top {
      height: 78px;
      border-bottom: 2px solid black;
    }
    
    .dark #top {
      border-bottom: 2px solid #ccc;
    }
    
    #dbg {
      display: block;
    }
    
    ::-webkit-scrollbar {
      width: 8px;
    }
    
    ::-webkit-scrollbar-track {
      background: #aaa;
    }
    
    ::-webkit-scrollbar-thumb {
      background: #666;
      border-radius: 3px;
    }
    
    ::-webkit-scrollbar-thumb:hover {
      background: #555;
    }
    
    .slider {
      -webkit-appearance: none;
      width: 100%;
      margin: 3px 0;
      padding: 0;
      outline: none;
      opacity: 0.7;
      -webkit-transition: .2s;
      transition: opacity .2s;
      border-radius: 3px;
    }
    
    .slider:hover {
      opacity: 1;
    }
    
    .slider:focus {
      outline: none;
    }
    
    .slider::-webkit-slider-runnable-track {
      -webkit-appearance: none;
      width: 100%;
      height: 8px;
      background: #d3d3d3;
      border-radius: 3px;
      border: none;
    }
    
    .slider::-webkit-slider-thumb {
      -webkit-appearance: none;
      width: 15px;
      height: 15px;
      border-radius: 50%;
      background: #0a0;
      cursor: pointer;
      margin-top: -4px;
    }
    
    .dark .slider::-webkit-slider-thumb {
      background: #3d3;
    }
    
    .slider::-moz-range-thumb {
      width: 15px;
      height: 15px;
      border-radius: 50%;
      background: #0a0;
      cursor: pointer;
    }
    
    .slider::-moz-range-track {
      height: 8px;
      background: #d3d3d3;
      border-radius: 3px;
    }
    
    .dark .slider::-moz-range-thumb {
      background: #3d3;
    }
    
    .slider::-ms-track {
      width: 100%;
      height: 8px;
      border-width: 3px 0;
      background: transparent;
      border-color: transparent;
      color: transparent;
      transition: opacity .2s;
    }
    
    .slider::-ms-fill-lower {
      background: #d3d3d3;
      border: none;
      border-radius: 3px;
    }
    
    .slider::-ms-fill-upper {
      background: #d3d3d3;
      border: none;
      border-radius: 3px;
    }
    
    .slider::-ms-thumb {
      width: 15px;
      height: 15px;
      border-radius: 50%;
      background: #0a0;
      cursor: pointer;
      margin: 0;
    }
    
    .shameless-plug {
      font-size: 0.8em;
      text-align: center;
      display: block;
    }
    
    a {
      color: #0278a4;
    }
    
    .dark a {
      color: #00b9fd;
    }
    
    #frontcanvas,
    #backcanvas {
      touch-action: none;
    }
    
    .placeholder {
      border: 1px dashed #9f9fda !important;
      background-color: #edf2f7 !important;
    }
    
    .dragging {
      z-index: 999;
    }
    
    .dark .dragging>table>tbody>tr {
      background-color: #252c30;
    }
    
    .dark .placeholder {
      filter: invert(1);
    }
    
    .column-spacer {
      top: 0;
      left: 0;
      width: calc(100% - 4px);
      position: absolute;
      cursor: pointer;
      user-select: none;
      height: 100%;
    }
    
    .column-width-handle {
      top: 0;
      right: 0;
      width: 4px;
      position: absolute;
      cursor: col-resize;
      user-select: none;
      height: 100%;
    }
    
    .column-width-handle:hover {
      background-color: #4f99bd;
    }
    
    .help-link {
      border: 1px solid #0278a4;
      padding-inline: 0.3rem;
      border-radius: 3px;
      cursor: pointer;
    }
    
    .dark .help-link {
      border: 1px solid #00b9fd;
    }
    
    
      </style>
      <script type="text/javascript" >
    ///////////////////////////////////////////////
    /*
      Split.js - v1.3.5
      MIT License
      https://github.com/nathancahill/Split.js
    */
    !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):e.Split=t()}(this,function(){"use strict";var e=window,t=e.document,n="addEventListener",i="removeEventListener",r="getBoundingClientRect",s=function(){return!1},o=e.attachEvent&&!e[n],a=["","-webkit-","-moz-","-o-"].filter(function(e){var n=t.createElement("div");return n.style.cssText="width:"+e+"calc(9px)",!!n.style.length}).shift()+"calc",l=function(e){return"string"==typeof e||e instanceof String?t.querySelector(e):e};return function(u,c){function z(e,t,n){var i=A(y,t,n);Object.keys(i).forEach(function(t){return e.style[t]=i[t]})}function h(e,t){var n=B(y,t);Object.keys(n).forEach(function(t){return e.style[t]=n[t]})}function f(e){var t=E[this.a],n=E[this.b],i=t.size+n.size;t.size=e/this.size*i,n.size=i-e/this.size*i,z(t.element,t.size,this.aGutterSize),z(n.element,n.size,this.bGutterSize)}function m(e){var t;this.dragging&&((t="touches"in e?e.touches[0][b]-this.start:e[b]-this.start)<=E[this.a].minSize+M+this.aGutterSize?t=E[this.a].minSize+this.aGutterSize:t>=this.size-(E[this.b].minSize+M+this.bGutterSize)&&(t=this.size-(E[this.b].minSize+this.bGutterSize)),f.call(this,t),c.onDrag&&c.onDrag())}function g(){var e=E[this.a].element,t=E[this.b].element;this.size=e[r]()[y]+t[r]()[y]+this.aGutterSize+this.bGutterSize,this.start=e[r]()[G]}function d(){var t=this,n=E[t.a].element,r=E[t.b].element;t.dragging&&c.onDragEnd&&c.onDragEnd(),t.dragging=!1,e[i]("mouseup",t.stop),e[i]("touchend",t.stop),e[i]("touchcancel",t.stop),t.parent[i]("mousemove",t.move),t.parent[i]("touchmove",t.move),delete t.stop,delete t.move,n[i]("selectstart",s),n[i]("dragstart",s),r[i]("selectstart",s),r[i]("dragstart",s),n.style.userSelect="",n.style.webkitUserSelect="",n.style.MozUserSelect="",n.style.pointerEvents="",r.style.userSelect="",r.style.webkitUserSelect="",r.style.MozUserSelect="",r.style.pointerEvents="",t.gutter.style.cursor="",t.parent.style.cursor=""}function S(t){var i=this,r=E[i.a].element,o=E[i.b].element;!i.dragging&&c.onDragStart&&c.onDragStart(),t.preventDefault(),i.dragging=!0,i.move=m.bind(i),i.stop=d.bind(i),e[n]("mouseup",i.stop),e[n]("touchend",i.stop),e[n]("touchcancel",i.stop),i.parent[n]("mousemove",i.move),i.parent[n]("touchmove",i.move),r[n]("selectstart",s),r[n]("dragstart",s),o[n]("selectstart",s),o[n]("dragstart",s),r.style.userSelect="none",r.style.webkitUserSelect="none",r.style.MozUserSelect="none",r.style.pointerEvents="none",o.style.userSelect="none",o.style.webkitUserSelect="none",o.style.MozUserSelect="none",o.style.pointerEvents="none",i.gutter.style.cursor=j,i.parent.style.cursor=j,g.call(i)}function v(e){e.forEach(function(t,n){if(n>0){var i=F[n-1],r=E[i.a],s=E[i.b];r.size=e[n-1],s.size=t,z(r.element,r.size,i.aGutterSize),z(s.element,s.size,i.bGutterSize)}})}function p(){F.forEach(function(e){e.parent.removeChild(e.gutter),E[e.a].element.style[y]="",E[e.b].element.style[y]=""})}void 0===c&&(c={});var y,b,G,E,w=l(u[0]).parentNode,D=e.getComputedStyle(w).flexDirection,U=c.sizes||u.map(function(){return 100/u.length}),k=void 0!==c.minSize?c.minSize:100,x=Array.isArray(k)?k:u.map(function(){return k}),L=void 0!==c.gutterSize?c.gutterSize:10,M=void 0!==c.snapOffset?c.snapOffset:30,O=c.direction||"horizontal",j=c.cursor||("horizontal"===O?"ew-resize":"ns-resize"),C=c.gutter||function(e,n){var i=t.createElement("div");return i.className="gutter gutter-"+n,i},A=c.elementStyle||function(e,t,n){var i={};return"string"==typeof t||t instanceof String?i[e]=t:i[e]=o?t+"%":a+"("+t+"% - "+n+"px)",i},B=c.gutterStyle||function(e,t){return n={},n[e]=t+"px",n;var n};"horizontal"===O?(y="width","clientWidth",b="clientX",G="left","paddingLeft"):"vertical"===O&&(y="height","clientHeight",b="clientY",G="top","paddingTop");var F=[];return E=u.map(function(e,t){var i,s={element:l(e),size:U[t],minSize:x[t]};if(t>0&&(i={a:t-1,b:t,dragging:!1,isFirst:1===t,isLast:t===u.length-1,direction:O,parent:w},i.aGutterSize=L,i.bGutterSize=L,i.isFirst&&(i.aGutterSize=L/2),i.isLast&&(i.bGutterSize=L/2),"row-reverse"===D||"column-reverse"===D)){var a=i.a;i.a=i.b,i.b=a}if(!o&&t>0){var c=C(t,O);h(c,L),c[n]("mousedown",S.bind(i)),c[n]("touchstart",S.bind(i)),w.insertBefore(c,s.element),i.gutter=c}0===t||t===u.length-1?z(s.element,s.size,L/2):z(s.element,s.size,L);var f=s.element[r]()[y];return f<s.minSize&&(s.minSize=f),t>0&&F.push(i),s}),o?{setSizes:v,destroy:p}:{setSizes:v,getSizes:function(){return E.map(function(e){return e.size})},collapse:function(e){if(e===F.length){var t=F[e-1];g.call(t),o||f.call(t,t.size-t.bGutterSize)}else{var n=F[e];g.call(n),o||f.call(n,n.aGutterSize)}},destroy:p}}});
    
    ///////////////////////////////////////////////
    
    ///////////////////////////////////////////////
    // Copyright (c) 2013 Pieroxy <pieroxy@pieroxy.net>
    // This work is free. You can redistribute it and/or modify it
    // under the terms of the WTFPL, Version 2
    // For more information see LICENSE.txt or http://www.wtfpl.net/
    //
    // For more information, the home page:
    // http://pieroxy.net/blog/pages/lz-string/testing.html
    //
    // LZ-based compression algorithm, version 1.4.4
    var LZString=function(){var o=String.fromCharCode,i={};var n={decompressFromBase64:function(o){return null==o?"":""==o?null:n._decompress(o.length,32,function(n){return function(o,n){if(!i[o]){i[o]={};for(var t=0;t<o.length;t++)i[o][o.charAt(t)]=t}return i[o][n]}("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",o.charAt(n))})},_decompress:function(i,n,t){var r,e,a,s,p,u,l,f=[],c=4,d=4,h=3,v="",g=[],m={val:t(0),position:n,index:1};for(r=0;r<3;r+=1)f[r]=r;for(a=0,p=Math.pow(2,2),u=1;u!=p;)s=m.val&m.position,m.position>>=1,0==m.position&&(m.position=n,m.val=t(m.index++)),a|=(s>0?1:0)*u,u<<=1;switch(a){case 0:for(a=0,p=Math.pow(2,8),u=1;u!=p;)s=m.val&m.position,m.position>>=1,0==m.position&&(m.position=n,m.val=t(m.index++)),a|=(s>0?1:0)*u,u<<=1;l=o(a);break;case 1:for(a=0,p=Math.pow(2,16),u=1;u!=p;)s=m.val&m.position,m.position>>=1,0==m.position&&(m.position=n,m.val=t(m.index++)),a|=(s>0?1:0)*u,u<<=1;l=o(a);break;case 2:return""}for(f[3]=l,e=l,g.push(l);;){if(m.index>i)return"";for(a=0,p=Math.pow(2,h),u=1;u!=p;)s=m.val&m.position,m.position>>=1,0==m.position&&(m.position=n,m.val=t(m.index++)),a|=(s>0?1:0)*u,u<<=1;switch(l=a){case 0:for(a=0,p=Math.pow(2,8),u=1;u!=p;)s=m.val&m.position,m.position>>=1,0==m.position&&(m.position=n,m.val=t(m.index++)),a|=(s>0?1:0)*u,u<<=1;f[d++]=o(a),l=d-1,c--;break;case 1:for(a=0,p=Math.pow(2,16),u=1;u!=p;)s=m.val&m.position,m.position>>=1,0==m.position&&(m.position=n,m.val=t(m.index++)),a|=(s>0?1:0)*u,u<<=1;f[d++]=o(a),l=d-1,c--;break;case 2:return g.join("")}if(0==c&&(c=Math.pow(2,h),h++),f[l])v=f[l];else{if(l!==d)return null;v=e+e.charAt(0)}g.push(v),f[d++]=e+v.charAt(0),e=v,0==--c&&(c=Math.pow(2,h),h++)}}};return n}();"function"==typeof define&&define.amd?define(function(){return LZString}):"undefined"!=typeof module&&null!=module?module.exports=LZString:"undefined"!=typeof angular&&null!=angular&&angular.module("LZString",[]).factory("LZString",function(){return LZString});
    ///////////////////////////////////////////////
    
    ///////////////////////////////////////////////
    /*!
     * PEP v0.4.3 | https://github.com/jquery/PEP
     * Copyright jQuery Foundation and other contributors | http://jquery.org/license
     */
    !function(a,b){"object"==typeof exports&&"undefined"!=typeof module?module.exports=b():"function"==typeof define&&define.amd?define(b):a.PointerEventsPolyfill=b()}(this,function(){"use strict";function a(a,b){b=b||Object.create(null);var c=document.createEvent("Event");c.initEvent(a,b.bubbles||!1,b.cancelable||!1);
    for(var d,e=2;e<m.length;e++)d=m[e],c[d]=b[d]||n[e];c.buttons=b.buttons||0;
    var f=0;return f=b.pressure&&c.buttons?b.pressure:c.buttons?.5:0,c.x=c.clientX,c.y=c.clientY,c.pointerId=b.pointerId||0,c.width=b.width||0,c.height=b.height||0,c.pressure=f,c.tiltX=b.tiltX||0,c.tiltY=b.tiltY||0,c.twist=b.twist||0,c.tangentialPressure=b.tangentialPressure||0,c.pointerType=b.pointerType||"",c.hwTimestamp=b.hwTimestamp||0,c.isPrimary=b.isPrimary||!1,c}function b(){this.array=[],this.size=0}function c(a,b,c,d){this.addCallback=a.bind(d),this.removeCallback=b.bind(d),this.changedCallback=c.bind(d),A&&(this.observer=new A(this.mutationWatcher.bind(this)))}function d(a){return"body /shadow-deep/ "+e(a)}function e(a){return'[touch-action="'+a+'"]'}function f(a){return"{ -ms-touch-action: "+a+"; touch-action: "+a+"; }"}function g(){if(F){D.forEach(function(a){String(a)===a?(E+=e(a)+f(a)+"\n",G&&(E+=d(a)+f(a)+"\n")):(E+=a.selectors.map(e)+f(a.rule)+"\n",G&&(E+=a.selectors.map(d)+f(a.rule)+"\n"))});var a=document.createElement("style");a.textContent=E,document.head.appendChild(a)}}function h(){if(!window.PointerEvent){if(window.PointerEvent=a,window.navigator.msPointerEnabled){var b=window.navigator.msMaxTouchPoints;Object.defineProperty(window.navigator,"maxTouchPoints",{value:b,enumerable:!0}),u.registerSource("ms",_)}else Object.defineProperty(window.navigator,"maxTouchPoints",{value:0,enumerable:!0}),u.registerSource("mouse",N),void 0!==window.ontouchstart&&u.registerSource("touch",V);u.register(document)}}function i(a){if(!u.pointermap.has(a)){var b=new Error("InvalidPointerId");throw b.name="InvalidPointerId",b}}function j(a){for(var b=a.parentNode;b&&b!==a.ownerDocument;)b=b.parentNode;if(!b){var c=new Error("InvalidStateError");throw c.name="InvalidStateError",c}}function k(a){var b=u.pointermap.get(a);return 0!==b.buttons}function l(){window.Element&&!Element.prototype.setPointerCapture&&Object.defineProperties(Element.prototype,{setPointerCapture:{value:W},releasePointerCapture:{value:X},hasPointerCapture:{value:Y}})}
    var m=["bubbles","cancelable","view","detail","screenX","screenY","clientX","clientY","ctrlKey","altKey","shiftKey","metaKey","button","relatedTarget","pageX","pageY"],n=[!1,!1,null,null,0,0,0,0,!1,!1,!1,!1,0,null,0,0],o=window.Map&&window.Map.prototype.forEach,p=o?Map:b;b.prototype={set:function(a,b){return void 0===b?this["delete"](a):(this.has(a)||this.size++,void(this.array[a]=b))},has:function(a){return void 0!==this.array[a]},"delete":function(a){this.has(a)&&(delete this.array[a],this.size--)},get:function(a){return this.array[a]},clear:function(){this.array.length=0,this.size=0},forEach:function(a,b){return this.array.forEach(function(c,d){a.call(b,c,d,this)},this)}};var q=["bubbles","cancelable","view","detail","screenX","screenY","clientX","clientY","ctrlKey","altKey","shiftKey","metaKey","button","relatedTarget","buttons","pointerId","width","height","pressure","tiltX","tiltY","pointerType","hwTimestamp","isPrimary","type","target","currentTarget","which","pageX","pageY","timeStamp"],r=[!1,!1,null,null,0,0,0,0,!1,!1,!1,!1,0,null,0,0,0,0,0,0,0,"",0,!1,"",null,null,0,0,0,0],s={pointerover:1,pointerout:1,pointerenter:1,pointerleave:1},t="undefined"!=typeof SVGElementInstance,u={pointermap:new p,eventMap:Object.create(null),captureInfo:Object.create(null),eventSources:Object.create(null),eventSourceList:[],registerSource:function(a,b){var c=b,d=c.events;d&&(d.forEach(function(a){c[a]&&(this.eventMap[a]=c[a].bind(c))},this),this.eventSources[a]=c,this.eventSourceList.push(c))},register:function(a){for(var b,c=this.eventSourceList.length,d=0;d<c&&(b=this.eventSourceList[d]);d++)
    b.register.call(b,a)},unregister:function(a){for(var b,c=this.eventSourceList.length,d=0;d<c&&(b=this.eventSourceList[d]);d++)
    b.unregister.call(b,a)},contains:function(a,b){try{return a.contains(b)}catch(c){return!1}},down:function(a){a.bubbles=!0,this.fireEvent("pointerdown",a)},move:function(a){a.bubbles=!0,this.fireEvent("pointermove",a)},up:function(a){a.bubbles=!0,this.fireEvent("pointerup",a)},enter:function(a){a.bubbles=!1,this.fireEvent("pointerenter",a)},leave:function(a){a.bubbles=!1,this.fireEvent("pointerleave",a)},over:function(a){a.bubbles=!0,this.fireEvent("pointerover",a)},out:function(a){a.bubbles=!0,this.fireEvent("pointerout",a)},cancel:function(a){a.bubbles=!0,this.fireEvent("pointercancel",a)},leaveOut:function(a){this.out(a),this.propagate(a,this.leave,!1)},enterOver:function(a){this.over(a),this.propagate(a,this.enter,!0)},eventHandler:function(a){if(!a._handledByPE){var b=a.type,c=this.eventMap&&this.eventMap[b];c&&c(a),a._handledByPE=!0}},listen:function(a,b){b.forEach(function(b){this.addEvent(a,b)},this)},unlisten:function(a,b){b.forEach(function(b){this.removeEvent(a,b)},this)},addEvent:function(a,b){a.addEventListener(b,this.boundHandler)},removeEvent:function(a,b){a.removeEventListener(b,this.boundHandler)},makeEvent:function(b,c){this.captureInfo[c.pointerId]&&(c.relatedTarget=null);var d=new a(b,c);return c.preventDefault&&(d.preventDefault=c.preventDefault),d._target=d._target||c.target,d},fireEvent:function(a,b){var c=this.makeEvent(a,b);return this.dispatchEvent(c)},cloneEvent:function(a){for(var b,c=Object.create(null),d=0;d<q.length;d++)b=q[d],c[b]=a[b]||r[d],!t||"target"!==b&&"relatedTarget"!==b||c[b]instanceof SVGElementInstance&&(c[b]=c[b].correspondingUseElement);return a.preventDefault&&(c.preventDefault=function(){a.preventDefault()}),c},getTarget:function(a){var b=this.captureInfo[a.pointerId];return b?a._target!==b&&a.type in s?void 0:b:a._target},propagate:function(a,b,c){for(var d=a.target,e=[];d!==document&&!d.contains(a.relatedTarget);) if(e.push(d),d=d.parentNode,!d)return;c&&e.reverse(),e.forEach(function(c){a.target=c,b.call(this,a)},this)},setCapture:function(b,c,d){this.captureInfo[b]&&this.releaseCapture(b,d),this.captureInfo[b]=c,this.implicitRelease=this.releaseCapture.bind(this,b,d),document.addEventListener("pointerup",this.implicitRelease),document.addEventListener("pointercancel",this.implicitRelease);var e=new a("gotpointercapture");e.pointerId=b,e._target=c,d||this.asyncDispatchEvent(e)},releaseCapture:function(b,c){var d=this.captureInfo[b];if(d){this.captureInfo[b]=void 0,document.removeEventListener("pointerup",this.implicitRelease),document.removeEventListener("pointercancel",this.implicitRelease);var e=new a("lostpointercapture");e.pointerId=b,e._target=d,c||this.asyncDispatchEvent(e)}},dispatchEvent:/*scope.external.dispatchEvent || */function(a){var b=this.getTarget(a);if(b)return b.dispatchEvent(a)},asyncDispatchEvent:function(a){requestAnimationFrame(this.dispatchEvent.bind(this,a))}};u.boundHandler=u.eventHandler.bind(u);var v={shadow:function(a){if(a)return a.shadowRoot||a.webkitShadowRoot},canTarget:function(a){return a&&Boolean(a.elementFromPoint)},targetingShadow:function(a){var b=this.shadow(a);if(this.canTarget(b))return b},olderShadow:function(a){var b=a.olderShadowRoot;if(!b){var c=a.querySelector("shadow");c&&(b=c.olderShadowRoot)}return b},allShadows:function(a){for(var b=[],c=this.shadow(a);c;)b.push(c),c=this.olderShadow(c);return b},searchRoot:function(a,b,c){if(a){var d,e,f=a.elementFromPoint(b,c);for(e=this.targetingShadow(f);e;){if(d=e.elementFromPoint(b,c)){var g=this.targetingShadow(d);return this.searchRoot(g,b,c)||d} e=this.olderShadow(e)} return f}},owner:function(a){
    for(var b=a;b.parentNode;)b=b.parentNode;
    return b.nodeType!==Node.DOCUMENT_NODE&&b.nodeType!==Node.DOCUMENT_FRAGMENT_NODE&&(b=document),b},findTarget:function(a){var b=a.clientX,c=a.clientY,d=this.owner(a.target);
    return d.elementFromPoint(b,c)||(d=document),this.searchRoot(d,b,c)}},w=Array.prototype.forEach.call.bind(Array.prototype.forEach),x=Array.prototype.map.call.bind(Array.prototype.map),y=Array.prototype.slice.call.bind(Array.prototype.slice),z=Array.prototype.filter.call.bind(Array.prototype.filter),A=window.MutationObserver||window.WebKitMutationObserver,B="[touch-action]",C={subtree:!0,childList:!0,attributes:!0,attributeOldValue:!0,attributeFilter:["touch-action"]};c.prototype={watchSubtree:function(a){
    //
    this.observer&&v.canTarget(a)&&this.observer.observe(a,C)},enableOnSubtree:function(a){this.watchSubtree(a),a===document&&"complete"!==document.readyState?this.installOnLoad():this.installNewSubtree(a)},installNewSubtree:function(a){w(this.findElements(a),this.addElement,this)},findElements:function(a){return a.querySelectorAll?a.querySelectorAll(B):[]},removeElement:function(a){this.removeCallback(a)},addElement:function(a){this.addCallback(a)},elementChanged:function(a,b){this.changedCallback(a,b)},concatLists:function(a,b){return a.concat(y(b))},
    installOnLoad:function(){document.addEventListener("readystatechange",function(){"complete"===document.readyState&&this.installNewSubtree(document)}.bind(this))},isElement:function(a){return a.nodeType===Node.ELEMENT_NODE},flattenMutationTree:function(a){
    var b=x(a,this.findElements,this);
    return b.push(z(a,this.isElement)),b.reduce(this.concatLists,[])},mutationWatcher:function(a){a.forEach(this.mutationHandler,this)},mutationHandler:function(a){if("childList"===a.type){var b=this.flattenMutationTree(a.addedNodes);b.forEach(this.addElement,this);var c=this.flattenMutationTree(a.removedNodes);c.forEach(this.removeElement,this)}else"attributes"===a.type&&this.elementChanged(a.target,a.oldValue)}};var D=["none","auto","pan-x","pan-y",{rule:"pan-x pan-y",selectors:["pan-x pan-y","pan-y pan-x"]}],E="",F=window.PointerEvent||window.MSPointerEvent,G=!window.ShadowDOMPolyfill&&document.head.createShadowRoot,H=u.pointermap,I=25,J=[1,4,2,8,16],K=!1;try{K=1===new MouseEvent("test",{buttons:1}).buttons}catch(L){}
    var M,N={POINTER_ID:1,POINTER_TYPE:"mouse",events:["mousedown","mousemove","mouseup","mouseover","mouseout"],register:function(a){u.listen(a,this.events)},unregister:function(a){u.unlisten(a,this.events)},lastTouches:[],
    isEventSimulatedFromTouch:function(a){for(var b,c=this.lastTouches,d=a.clientX,e=a.clientY,f=0,g=c.length;f<g&&(b=c[f]);f++){
    var h=Math.abs(d-b.x),i=Math.abs(e-b.y);if(h<=I&&i<=I)return!0}},prepareEvent:function(a){var b=u.cloneEvent(a),c=b.preventDefault;return b.preventDefault=function(){a.preventDefault(),c()},b.pointerId=this.POINTER_ID,b.isPrimary=!0,b.pointerType=this.POINTER_TYPE,b},prepareButtonsForMove:function(a,b){var c=H.get(this.POINTER_ID);
    0!==b.which&&c?a.buttons=c.buttons:a.buttons=0,b.buttons=a.buttons},mousedown:function(a){if(!this.isEventSimulatedFromTouch(a)){var b=H.get(this.POINTER_ID),c=this.prepareEvent(a);K||(c.buttons=J[c.button],b&&(c.buttons|=b.buttons),a.buttons=c.buttons),H.set(this.POINTER_ID,a),b&&0!==b.buttons?u.move(c):u.down(c)}},mousemove:function(a){if(!this.isEventSimulatedFromTouch(a)){var b=this.prepareEvent(a);K||this.prepareButtonsForMove(b,a),b.button=-1,H.set(this.POINTER_ID,a),u.move(b)}},mouseup:function(a){if(!this.isEventSimulatedFromTouch(a)){var b=H.get(this.POINTER_ID),c=this.prepareEvent(a);if(!K){var d=J[c.button];
    c.buttons=b?b.buttons&~d:0,a.buttons=c.buttons}H.set(this.POINTER_ID,a),
    c.buttons&=~J[c.button],0===c.buttons?u.up(c):u.move(c)}},mouseover:function(a){if(!this.isEventSimulatedFromTouch(a)){var b=this.prepareEvent(a);K||this.prepareButtonsForMove(b,a),b.button=-1,H.set(this.POINTER_ID,a),u.enterOver(b)}},mouseout:function(a){if(!this.isEventSimulatedFromTouch(a)){var b=this.prepareEvent(a);K||this.prepareButtonsForMove(b,a),b.button=-1,u.leaveOut(b)}},cancel:function(a){var b=this.prepareEvent(a);u.cancel(b),this.deactivateMouse()},deactivateMouse:function(){H["delete"](this.POINTER_ID)}},O=u.captureInfo,P=v.findTarget.bind(v),Q=v.allShadows.bind(v),R=u.pointermap,S=2500,T=200,U="touch-action",V={events:["touchstart","touchmove","touchend","touchcancel"],register:function(a){M.enableOnSubtree(a)},unregister:function(){},elementAdded:function(a){var b=a.getAttribute(U),c=this.touchActionToScrollType(b);c&&(a._scrollType=c,u.listen(a,this.events),
    Q(a).forEach(function(a){a._scrollType=c,u.listen(a,this.events)},this))},elementRemoved:function(a){a._scrollType=void 0,u.unlisten(a,this.events),
    Q(a).forEach(function(a){a._scrollType=void 0,u.unlisten(a,this.events)},this)},elementChanged:function(a,b){var c=a.getAttribute(U),d=this.touchActionToScrollType(c),e=this.touchActionToScrollType(b);
    d&&e?(a._scrollType=d,Q(a).forEach(function(a){a._scrollType=d},this)):e?this.elementRemoved(a):d&&this.elementAdded(a)},scrollTypes:{EMITTER:"none",XSCROLLER:"pan-x",YSCROLLER:"pan-y",SCROLLER:/^(?:pan-x pan-y)|(?:pan-y pan-x)|auto$/},touchActionToScrollType:function(a){var b=a,c=this.scrollTypes;return"none"===b?"none":b===c.XSCROLLER?"X":b===c.YSCROLLER?"Y":c.SCROLLER.exec(b)?"XY":void 0},POINTER_TYPE:"touch",firstTouch:null,isPrimaryTouch:function(a){return this.firstTouch===a.identifier},setPrimaryTouch:function(a){
    (0===R.size||1===R.size&&R.has(1))&&(this.firstTouch=a.identifier,this.firstXY={X:a.clientX,Y:a.clientY},this.scrolling=!1,this.cancelResetClickCount())},removePrimaryPointer:function(a){a.isPrimary&&(this.firstTouch=null,this.firstXY=null,this.resetClickCount())},clickCount:0,resetId:null,resetClickCount:function(){var a=function(){this.clickCount=0,this.resetId=null}.bind(this);this.resetId=setTimeout(a,T)},cancelResetClickCount:function(){this.resetId&&clearTimeout(this.resetId)},typeToButtons:function(a){var b=0;return"touchstart"!==a&&"touchmove"!==a||(b=1),b},touchToPointer:function(a){var b=this.currentTouchEvent,c=u.cloneEvent(a),d=c.pointerId=a.identifier+2;c.target=O[d]||P(c),c.bubbles=!0,c.cancelable=!0,c.detail=this.clickCount,c.button=0,c.buttons=this.typeToButtons(b.type),c.width=2*(a.radiusX||a.webkitRadiusX||0),c.height=2*(a.radiusY||a.webkitRadiusY||0),c.pressure=a.force||a.webkitForce||.5,c.isPrimary=this.isPrimaryTouch(a),c.pointerType=this.POINTER_TYPE,
    c.altKey=b.altKey,c.ctrlKey=b.ctrlKey,c.metaKey=b.metaKey,c.shiftKey=b.shiftKey;
    var e=this;return c.preventDefault=function(){e.scrolling=!1,e.firstXY=null,b.preventDefault()},c},processTouches:function(a,b){var c=a.changedTouches;this.currentTouchEvent=a;for(var d,e=0;e<c.length;e++)d=c[e],b.call(this,this.touchToPointer(d))},
    shouldScroll:function(a){if(this.firstXY){var b,c=a.currentTarget._scrollType;if("none"===c)
    b=!1;else if("XY"===c)
    b=!0;else{var d=a.changedTouches[0],e=c,f="Y"===c?"X":"Y",g=Math.abs(d["client"+e]-this.firstXY[e]),h=Math.abs(d["client"+f]-this.firstXY[f]);
    b=g>=h}return this.firstXY=null,b}},findTouch:function(a,b){for(var c,d=0,e=a.length;d<e&&(c=a[d]);d++)if(c.identifier===b)return!0},
    vacuumTouches:function(a){var b=a.touches;
    if(R.size>=b.length){var c=[];R.forEach(function(a,d){
    if(1!==d&&!this.findTouch(b,d-2)){var e=a.out;c.push(e)}},this),c.forEach(this.cancelOut,this)}},touchstart:function(a){this.vacuumTouches(a),this.setPrimaryTouch(a.changedTouches[0]),this.dedupSynthMouse(a),this.scrolling||(this.clickCount++,this.processTouches(a,this.overDown))},overDown:function(a){R.set(a.pointerId,{target:a.target,out:a,outTarget:a.target}),u.enterOver(a),u.down(a)},touchmove:function(a){this.scrolling||(this.shouldScroll(a)?(this.scrolling=!0,this.touchcancel(a)):(a.preventDefault(),this.processTouches(a,this.moveOverOut)))},moveOverOut:function(a){var b=a,c=R.get(b.pointerId);
    if(c){var d=c.out,e=c.outTarget;u.move(b),d&&e!==b.target&&(d.relatedTarget=b.target,b.relatedTarget=e,
    d.target=e,b.target?(u.leaveOut(d),u.enterOver(b)):(
    b.target=e,b.relatedTarget=null,this.cancelOut(b))),c.out=b,c.outTarget=b.target}},touchend:function(a){this.dedupSynthMouse(a),this.processTouches(a,this.upOut)},upOut:function(a){this.scrolling||(u.up(a),u.leaveOut(a)),this.cleanUpPointer(a)},touchcancel:function(a){this.processTouches(a,this.cancelOut)},cancelOut:function(a){u.cancel(a),u.leaveOut(a),this.cleanUpPointer(a)},cleanUpPointer:function(a){R["delete"](a.pointerId),this.removePrimaryPointer(a)},
    dedupSynthMouse:function(a){var b=N.lastTouches,c=a.changedTouches[0];
    if(this.isPrimaryTouch(c)){
    var d={x:c.clientX,y:c.clientY};b.push(d);var e=function(a,b){var c=a.indexOf(b);c>-1&&a.splice(c,1)}.bind(null,b,d);setTimeout(e,S)}}};M=new c(V.elementAdded,V.elementRemoved,V.elementChanged,V);var W,X,Y,Z=u.pointermap,$=window.MSPointerEvent&&"number"==typeof window.MSPointerEvent.MSPOINTER_TYPE_MOUSE,_={events:["MSPointerDown","MSPointerMove","MSPointerUp","MSPointerOut","MSPointerOver","MSPointerCancel","MSGotPointerCapture","MSLostPointerCapture"],register:function(a){u.listen(a,this.events)},unregister:function(a){u.unlisten(a,this.events)},POINTER_TYPES:["","unavailable","touch","pen","mouse"],prepareEvent:function(a){var b=a;return $&&(b=u.cloneEvent(a),b.pointerType=this.POINTER_TYPES[a.pointerType]),b},cleanup:function(a){Z["delete"](a)},MSPointerDown:function(a){Z.set(a.pointerId,a);var b=this.prepareEvent(a);u.down(b)},MSPointerMove:function(a){var b=this.prepareEvent(a);u.move(b)},MSPointerUp:function(a){var b=this.prepareEvent(a);u.up(b),this.cleanup(a.pointerId)},MSPointerOut:function(a){var b=this.prepareEvent(a);u.leaveOut(b)},MSPointerOver:function(a){var b=this.prepareEvent(a);u.enterOver(b)},MSPointerCancel:function(a){var b=this.prepareEvent(a);u.cancel(b),this.cleanup(a.pointerId)},MSLostPointerCapture:function(a){var b=u.makeEvent("lostpointercapture",a);u.dispatchEvent(b)},MSGotPointerCapture:function(a){var b=u.makeEvent("gotpointercapture",a);u.dispatchEvent(b)}},aa=window.navigator;aa.msPointerEnabled?(W=function(a){i(a),j(this),k(a)&&(u.setCapture(a,this,!0),this.msSetPointerCapture(a))},X=function(a){i(a),u.releaseCapture(a,!0),this.msReleasePointerCapture(a)}):(W=function(a){i(a),j(this),k(a)&&u.setCapture(a,this)},X=function(a){i(a),u.releaseCapture(a)}),Y=function(a){return!!u.captureInfo[a]},g(),h(),l();var ba={dispatcher:u,Installer:c,PointerEvent:a,PointerMap:p,targetFinding:v};return ba});
    
    ///////////////////////////////////////////////
    
    ///////////////////////////////////////////////
    var config = {"dark_mode": false, "show_pads": true, "show_fabrication": false, "show_silkscreen": true, "highlight_pin1": false, "redraw_on_drag": true, "board_rotation": 0.0, "checkboxes": "Sourced,Placed", "bom_view": "left-right", "layer_view": "FB", "offset_back_rotation": false, "kicad_text_formatting": true, "fields": ["Value", "Footprint"]}
    ///////////////////////////////////////////////
    
    ///////////////////////////////////////////////
    var pcbdata = JSON.parse(LZString.decompressFromBase64("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5gsUIzStLhSssq6M4+TMTq7lrgqtma7mrNStqq+4rHCtT01GL2qt8K+ozZJq74L/Ebyu9K54L/StMq98r1Wv9hIlrEqscq5f5v8Tcq67ULqubS5urqSv5a8KrFGueawirBivYa7BryWtMjNNrMquza+urAmv1a/QrS2s7q4VrgctiaxhL2kuSa2QLTyvda8IMASsry89L7ytDa55zGYujayeL/ytaazhr3WtHpXsrPYsYq3MrFYvMa65reWsCSyJr8gv1yxtrNGvJa9ulJ8u7a0IL56sHa6NLbmuNa16rqqvna1/Ll2v3K80rbIA3a0/zIwi1MRFrc3MDaxArm0kqa8yrVquni9nLE2suSx1laKvFc7Mrc2s9y0jrIOszq6KrRCviq/erQKvdZXTrQvMM6/trxmu2K6Zrx2uYa7erLWskq21rxUuPKwAruqvljTQM5NkKa+ZLScvRa1Arqmtxa+CrvnPWq/OrkUsdi73YvsDy65VrCUuHK9lriyuC62crKOsxq96rEOta6wWrzcsDMhzg+usOa1VrRusoazlrzOsNa8LrK2toS+jrtysSa1jrLADdM0uLvCtzyy0qKuo8iP1rr0uWS+9LKusOYHtrbAvja3bLNMtkM1DaPpO9YJoLLstGay+LkMs3ywyLd8s/C3DLMrPkyxbrmSs+qxzr+IsHy91LgkzxCXrLYMv86x7Ly/NLaybLOeuq89KLD8uYiyrLqOs/q/vL4/OrUMnrEqip687LjMsZ66UARssN6xKLt8vN67DLressi/7L5mscayVr9ssg7oJMWSDV667LIGssy57LUMs+S+hzU+s8y3iYHet9q5DrQsuJ6z3rgkxokCvrQ+sRMxvr2evQy2bL9IsYi9Pre+tF653r/0sL6waAicTHSBQr6etOa9lrI+tey+bLPstKy2TL7etP6wfr1uvAC8Yr7+t2jufr3+su67/rm+sAG+bLQBsz601rt6vz68frIetZUOoi/evFc1/rmKv9hD/rV+tEy97LJMuAG37Lj+u1qywr3ms3K75rdyvzi4FrlKsha99ri0v4uPdrimtRa8prKuuxay1L9ks5ixMrSWvda2ttR3OO64brMBvEaybriqu4KwVrYOtra9krX2tJ6+LFhSaw6+3Ljmt4G/KrLGss6zmr++tea61zrivqq/5r5KsGs20r5UvljeNJjkqE6zVLT2uk6yrr5Ovq6+9rmmtU65zrsmvS7BuLyatSyLKreBsQq4jrbqsaG5BrKBuUa5ZrnGtyG2kz97We83DrUQsjK8brmauLa6Drs+ura9crbCutaxqrU9OdC8FrXWuTcwmYETrOc5Mz67UmqzpC+mv+AFrodUBq6x4bGuuU63vLL+voG8Mz31QYJvkbdminc78rzmtwG9frhsub80uAvstt65IrVsurawEbaBvl6/aLGRuv7qfLkDD1G8eLqitNG0Qb/+uL860bOfOkGx0b9/R+G3EbvRvd67SA7LSZGyrrwxv/cxEbsBuEG+KLnMsb81nzbRuzG9Pr8xtaG84rOhs+a3obZKsKM1bzAADyVnM4S51rwevDMwXK/UzmG49rMXwLcx8bjwsrc31o2PPx62Xryxujs/weJFTUS9xIIxsh1M5rwPO2AI3rN+u56y3r9+t+AA9z+/Ozq6AboIuVG0zzyKIAyqCbqajgm7GEsAtQm6UAMJtb6xDzE7MKgI9zsRsTi0sb2ysQi8640IuK82gryvMIG3/rd+vEm/fLCJvwy8gbpxs9G9RrR+t9G4sLTsyvGygr9Jt4G4ybJBuj63sbt+vcyxyb5Bu9qzbLYBsAy+CLr/mCmxQrwpsA68E92WsEm6pzY+tN63ALees769KbyJtXK2LrfmtXG7qzOEulS0YbgCsmGygoJ7jCK7Kzr7NiK7eLEiuNlLYbGmu8G4frNutP8xNgy42uG5YQ58ujG85r4huRq8pLmhsgG+DrxWs8m56baTPjeie45iv+m/MrgZtRG0pL9iu+G6cb8Rvia5jrdBsgAFGLoQC460ZLoiQrC+Hr+UAk67qgw2vfMz8rO8tlG3wb1Ot2qwWb9mv06/9rjOuoa27rR2sxGwsbRWvra/KbPAsSJCsLM2vw62vrAusSG+5r0hvpmxdroct+69mbFptB6+0rC0vCcl0rD2svS8WbjKsvazYbqhtum+MrHpsHqz3ryjlLy32b4RsDm/Nr6hvu622bXJvs61ZrNZtJ6+ItShu8642btetM694bx5us681r3us0G77rWZvT060r05vGGxwt9UzelP1r7Bu7izFrJiBqa2uboyv2G+UbF5s963OsvUs0c8IbD4sX667rD5utm0+bFmtnm4Ebm2vda7oq4TqwW8obTuuiG0Drh2vLKyebYZtnG8bzFxuJG/obCjMx7TJrSesaub3Q3StE6wBbDUsva1wbGctx65rrv6sCG1FyoEsuGwbr8Fv4W3VrLZtEWyhb/htoWyVrxis4tTxboRu4WyIboFuRGwtryOse66drh0tUGwkb4utJG2abjxszmxwtvGigHVkblrMiKw6bpZu/c3matEuja0/I/xtBGy0qCivrDHGbvMiWKy7rQZtTq5XLKZv4qxSbdcsRm5ubpWs9KrZbhcsyS66biZsKW+ULrlurK+5bKlvnG9QblxtXa3YLges0W9xrDvQ0zAxbFhvE68ubj8uva4crllsYW16bCVtgMHubzutiG0mbPhtuW+2bHludm5xbT/MS7JRAMyu3m1sbBVtBW4+boZsUG6JrqlsZm+Ob75s469LrLkv86OFr+luMW0rrHBvJq01LIFtqmwlrHFvsq11bNomrot/AfFtQS14zahvA6w1bqZskW9ybXls8C91bLZgVa3Bbs1uNSFlrjluFW4tbxVtpm8abtBu6S4FrjQB5m34r4zAg2QrrQStMW7UbquvcG9IrVZurW5KrE1xZiLzIM1teS0+L8ltHm8hbjVuymzIbvqvaaxVLJpLvWwUrsltqm54bg5vBm8ObYVuEqy+bUVsTmwAAkgNzAABqWlvfm6jz+bpvG0ZbnxuOm64bPxtSK2dz65sAq0jzfJsHcz4owHDHc2CbmxstTJCb18sTGyybTJtSmymrZJuGm1hr8puv67cLhBTvqvkbf3NK8/ibDNu7G8QbXMu+i6zbUPN8ywDb6FvUy+Tbk3MFHLHkmguqm5zzLuuamxzLItswy+0bD+vs26hbGyul62TbgJtM84OA2NtCm9BzAtuqK6rbRJvM22LbSzgymyibcptom7Lbq1DmgsUQzFsY86bbDJuC2/ALjNvGi3Cbk+vsmwXrwBtNW9obZFuRWxRbppt2C9RbjBsJq+EQ3fOGqz0rDKvPa2lbq5uQ26UbH2sOG8Db5Y3NvdJbN5vuGynb81uEW0LrxFtB24DbettZW8Ebbb3Z2+FzfOu1WwRbQluF2yJbcRvHW2+bp1sz04YbX5tWmxuNWGSYuDjb77q708rrg1sPW2xbDRuZW1DrtusyALi115vxK3hbJRv523XbZutKW9IbK1tdm42rRbKEtb9rd4sqG3nb2Kv1W39bS1vF26ObGOttWy3bfXNRy1Hb+ZscXtgoSVvPS2GCfdvHZOIrodAbiH8bY1v8G4erCfAMVCWLeOQWK99bjltZ63vbANtL2+Vb59voUmYr7bOf2/GbWKuBm7/bh1skW9Lb2usuS5RM79u3i2A79lvf22IbUDuhWyVbsasvW5eLCDsQ1Eg7HjMoOzXbEMvwSw3blJuRm1ubY40nyHh+TAvIO/lbSSvoO1+rcNto6y1bY5ukq9FbDyun22kbcYvzpOuwRZtuc4nbaAvpW05rI9twOw5zpsQLpHlbAluga3PbeKsYO6ebutvnm44bZDMqFRI7YRsIW05bfctF21LbTduZmy3b3TOpG08bo4BAbhm4pksLm/FjfduENdZL3aioGPRLz9tbK1zb/rIobigruBtb25A7JDvNG1bb+es229rbolsKO7A7WsuEi8Y7Ir3QGzPbYxs7G9Cb2puwmxPrmtu76z47ixvkOwqbPItBOy4cITuuOwQb9evMmz7b0TtHG7E7ktt221RrXlsOO0E73SKpOw5bxGvjG8Lbkxui2147wvN5O3mrCTtFO0oousvOO4PrAVvpO2zL4pvq25Kb1tu1O10bZDuFO+ibzcPGO1UEpTuoO4bL4TuEm5E7rJt6m/7b3jt1O8+bLDuH26Sr26ZZm90zkdtcO5Q7WVAzPrNuCctIQjMzS+aPC8M68FAwIBTradsQWwnrjtubO09uG24tOxLL6jv7W7vblTtM22KbLJtIG7bbbOt+O1Sb3ZvAWNrYWIS3O/rLCOsa28bLUzueO/qbAducmzA7XztRS7mVM27YG0LzLjtNm7qbtIve2wrLvtsxOwab8zuoGw07gzve2phQMyajO4C7t+vwGy87LNtzO307lMvYu5c7994wu3i7CGv/OzXrhLtou8C7EptMu4gbZBtxO/07nNs4u9lmYm4EuwebrLuZO6i72Ttsux0b7zsc2w7bBtsbjTS7vLv0u6vrTGtMm8S71Ttgu2S7I5tQu3BrCcy2xLlbA+t3O1I7HouKu0C7Irta25i7c+uUu5K7JJr2UpXwfLvyuy87+rvdOzU7hev722q7uGsau7f6Vrtui8RrFtsguyS7PTsOu9o7CNth2ys7ejtTm3FbtIAAlGHrV9svSxfAm0Bt3dHrQtT7mwGbIjsBOx2LYbsai9q7ALsNG8brDDtamyy7wruvO+y7xrvdG2JbprvbK8HuOhVty/C7rTuhO40bEzvZu107Aru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"))
    ///////////////////////////////////////////////
    
    ///////////////////////////////////////////////
    /* Utility functions */
    
    var storagePrefix = 'KiCad_HTML_BOM__' + pcbdata.metadata.title + '__' +
      pcbdata.metadata.revision + '__#';
    var storage;
    
    function initStorage(key) {
      try {
        window.localStorage.getItem("blank");
        storage = window.localStorage;
      } catch (e) {
        // localStorage not available
      }
      if (!storage) {
        try {
          window.sessionStorage.getItem("blank");
          storage = window.sessionStorage;
        } catch (e) {
          // sessionStorage also not available
        }
      }
    }
    
    function readStorage(key) {
      if (storage) {
        return storage.getItem(storagePrefix + key);
      } else {
        return null;
      }
    }
    
    function writeStorage(key, value) {
      if (storage) {
        storage.setItem(storagePrefix + key, value);
      }
    }
    
    function fancyDblClickHandler(el, onsingle, ondouble) {
      return function() {
        if (el.getAttribute("data-dblclick") == null) {
          el.setAttribute("data-dblclick", 1);
          setTimeout(function() {
            if (el.getAttribute("data-dblclick") == 1) {
              onsingle();
            }
            el.removeAttribute("data-dblclick");
          }, 200);
        } else {
          el.removeAttribute("data-dblclick");
          ondouble();
        }
      }
    }
    
    function smoothScrollToRow(rowid) {
      document.getElementById(rowid).scrollIntoView({
        behavior: "smooth",
        block: "center",
        inline: "nearest"
      });
    }
    
    function focusInputField(input) {
      input.scrollIntoView(false);
      input.focus();
      input.select();
    }
    
    function saveBomTable(output) {
      var text = '';
      for (var node of bomhead.childNodes[0].childNodes) {
        if (node.firstChild) {
          text += (output == 'csv' ? `"${node.firstChild.nodeValue}"` : node.firstChild.nodeValue);
        }
        if (node != bomhead.childNodes[0].lastChild) {
          text += (output == 'csv' ? ',' : '\t');
        }
      }
      text += '\n';
      for (var row of bombody.childNodes) {
        for (var cell of row.childNodes) {
          let val = '';
          for (var node of cell.childNodes) {
            if (node.nodeName == "INPUT") {
              if (node.checked) {
                val += '✓';
              }
            } else if ((node.nodeName == "MARK") || (node.nodeName == "A")) {
              val += node.firstChild.nodeValue;
            } else {
              val += node.nodeValue;
            }
          }
          if (output == 'csv') {
            val = val.replace(/\"/g, '\"\"'); // pair of double-quote characters
            if (isNumeric(val)) {
              val = +val;                     // use number
            } else {
              val = `"${val}"`;               // enclosed within double-quote
            }
          }
          text += val;
          if (cell != row.lastChild) {
            text += (output == 'csv' ? ',' : '\t');
          }
        }
        text += '\n';
      }
    
      if (output != 'clipboard') {
        // To file: csv or txt
        var blob = new Blob([text], {
          type: `text/${output}`
        });
        saveFile(`${pcbdata.metadata.title}.${output}`, blob);
      } else {
        // To clipboard
        var textArea = document.createElement("textarea");
        textArea.classList.add('clipboard-temp');
        textArea.value = text;
    
        document.body.appendChild(textArea);
        textArea.focus();
        textArea.select();
    
        try {
          if (document.execCommand('copy')) {
            console.log('Bom copied to clipboard.');
          }
        } catch (err) {
          console.log('Can not copy to clipboard.');
        }
    
        document.body.removeChild(textArea);
      }
    }
    
    function isNumeric(str) {
      /* https://stackoverflow.com/a/175787 */
      return (typeof str != "string" ? false : !isNaN(str) && !isNaN(parseFloat(str)));
    }
    
    function removeGutterNode(node) {
      for (var i = 0; i < node.childNodes.length; i++) {
        if (node.childNodes[i].classList &&
          node.childNodes[i].classList.contains("gutter")) {
          node.removeChild(node.childNodes[i]);
          break;
        }
      }
    }
    
    function cleanGutters() {
      removeGutterNode(document.getElementById("bot"));
      removeGutterNode(document.getElementById("canvasdiv"));
    }
    
    var units = {
      prefixes: {
        giga: ["G", "g", "giga", "Giga", "GIGA"],
        mega: ["M", "mega", "Mega", "MEGA"],
        kilo: ["K", "k", "kilo", "Kilo", "KILO"],
        milli: ["m", "milli", "Milli", "MILLI"],
        micro: ["U", "u", "micro", "Micro", "MICRO", "μ", "µ"], // different utf8 μ
        nano: ["N", "n", "nano", "Nano", "NANO"],
        pico: ["P", "p", "pico", "Pico", "PICO"],
      },
      unitsShort: ["R", "r", "Ω", "F", "f", "H", "h"],
      unitsLong: [
        "OHM", "Ohm", "ohm", "ohms",
        "FARAD", "Farad", "farad",
        "HENRY", "Henry", "henry"
      ],
      getMultiplier: function(s) {
        if (this.prefixes.giga.includes(s)) return 1e9;
        if (this.prefixes.mega.includes(s)) return 1e6;
        if (this.prefixes.kilo.includes(s)) return 1e3;
        if (this.prefixes.milli.includes(s)) return 1e-3;
        if (this.prefixes.micro.includes(s)) return 1e-6;
        if (this.prefixes.nano.includes(s)) return 1e-9;
        if (this.prefixes.pico.includes(s)) return 1e-12;
        return 1;
      },
      valueRegex: null,
    }
    
    function initUtils() {
      var allPrefixes = units.prefixes.giga
        .concat(units.prefixes.mega)
        .concat(units.prefixes.kilo)
        .concat(units.prefixes.milli)
        .concat(units.prefixes.micro)
        .concat(units.prefixes.nano)
        .concat(units.prefixes.pico);
      var allUnits = units.unitsShort.concat(units.unitsLong);
      units.valueRegex = new RegExp("^([0-9\.]+)" +
        "\\s*(" + allPrefixes.join("|") + ")?" +
        "(" + allUnits.join("|") + ")?" +
        "(\\b.*)?$", "");
      units.valueAltRegex = new RegExp("^([0-9]*)" +
        "(" + units.unitsShort.join("|") + ")?" +
        "([GgMmKkUuNnPp])?" +
        "([0-9]*)" +
        "(\\b.*)?$", "");
      if (config.fields.includes("Value")) {
        var index = config.fields.indexOf("Value");
        pcbdata.bom["parsedValues"] = {};
        for (var id in pcbdata.bom.fields) {
          pcbdata.bom.parsedValues[id] = parseValue(pcbdata.bom.fields[id][index])
        }
      }
    }
    
    function parseValue(val, ref) {
      var inferUnit = (unit, ref) => {
        if (unit) {
          unit = unit.toLowerCase();
          if (unit == 'Ω' || unit == "ohm" || unit == "ohms") {
            unit = 'r';
          }
          unit = unit[0];
        } else {
          ref = /^([a-z]+)\d+$/i.exec(ref);
          if (ref) {
            ref = ref[1].toLowerCase();
            if (ref == "c") unit = 'f';
            else if (ref == "l") unit = 'h';
            else if (ref == "r" || ref == "rv") unit = 'r';
            else unit = null;
          }
        }
        return unit;
      };
      val = val.replace(/,/g, "");
      var match = units.valueRegex.exec(val);
      var unit;
      if (match) {
        val = parseFloat(match[1]);
        if (match[2]) {
          val = val * units.getMultiplier(match[2]);
        }
        unit = inferUnit(match[3], ref);
        if (!unit) return null;
        else return {
          val: val,
          unit: unit,
          extra: match[4],
        }
      }
      match = units.valueAltRegex.exec(val);
      if (match && (match[1] || match[4])) {
        val = parseFloat(match[1] + "." + match[4]);
        if (match[3]) {
          val = val * units.getMultiplier(match[3]);
        }
        unit = inferUnit(match[2], ref);
        if (!unit) return null;
        else return {
          val: val,
          unit: unit,
          extra: match[5],
        }
      }
      return null;
    }
    
    function valueCompare(a, b, stra, strb) {
      if (a === null && b === null) {
        // Failed to parse both values, compare them as strings.
        if (stra != strb) return stra > strb ? 1 : -1;
        else return 0;
      } else if (a === null) {
        return 1;
      } else if (b === null) {
        return -1;
      } else {
        if (a.unit != b.unit) return a.unit > b.unit ? 1 : -1;
        else if (a.val != b.val) return a.val > b.val ? 1 : -1;
        else if (a.extra != b.extra) return a.extra > b.extra ? 1 : -1;
        else return 0;
      }
    }
    
    function validateSaveImgDimension(element) {
      var valid = false;
      var intValue = 0;
      if (/^[1-9]\d*$/.test(element.value)) {
        intValue = parseInt(element.value);
        if (intValue <= 16000) {
          valid = true;
        }
      }
      if (valid) {
        element.classList.remove("invalid");
      } else {
        element.classList.add("invalid");
      }
      return intValue;
    }
    
    function saveImage(layer) {
      var width = validateSaveImgDimension(document.getElementById("render-save-width"));
      var height = validateSaveImgDimension(document.getElementById("render-save-height"));
      var bgcolor = null;
      if (!document.getElementById("render-save-transparent").checked) {
        var style = getComputedStyle(topmostdiv);
        bgcolor = style.getPropertyValue("background-color");
      }
      if (!width || !height) return;
    
      // Prepare image
      var canvas = document.createElement("canvas");
      var layerdict = {
        transform: {
          x: 0,
          y: 0,
          s: 1,
          panx: 0,
          pany: 0,
          zoom: 1,
        },
        bg: canvas,
        fab: canvas,
        silk: canvas,
        highlight: canvas,
        layer: layer,
      }
      // Do the rendering
      recalcLayerScale(layerdict, width, height);
      prepareLayer(layerdict);
      clearCanvas(canvas, bgcolor);
      drawBackground(layerdict, false);
      drawHighlightsOnLayer(layerdict, false);
    
      // Save image
      var imgdata = canvas.toDataURL("image/png");
    
      var filename = pcbdata.metadata.title;
      if (pcbdata.metadata.revision) {
        filename += `.${pcbdata.metadata.revision}`;
      }
      filename += `.${layer}.png`;
      saveFile(filename, dataURLtoBlob(imgdata));
    }
    
    function saveSettings() {
      var data = {
        type: "InteractiveHtmlBom settings",
        version: 1,
        pcbmetadata: pcbdata.metadata,
        settings: settings,
      }
      var blob = new Blob([JSON.stringify(data, null, 4)], {
        type: "application/json"
      });
      saveFile(`${pcbdata.metadata.title}.settings.json`, blob);
    }
    
    function loadSettings() {
      var input = document.createElement("input");
      input.type = "file";
      input.accept = ".settings.json";
      input.onchange = function(e) {
        var file = e.target.files[0];
        var reader = new FileReader();
        reader.onload = readerEvent => {
          var content = readerEvent.target.result;
          var newSettings;
          try {
            newSettings = JSON.parse(content);
          } catch (e) {
            alert("Selected file is not InteractiveHtmlBom settings file.");
            return;
          }
          if (newSettings.type != "InteractiveHtmlBom settings") {
            alert("Selected file is not InteractiveHtmlBom settings file.");
            return;
          }
          var metadataMatches = newSettings.hasOwnProperty("pcbmetadata");
          if (metadataMatches) {
            for (var k in pcbdata.metadata) {
              if (!newSettings.pcbmetadata.hasOwnProperty(k) || newSettings.pcbmetadata[k] != pcbdata.metadata[k]) {
                metadataMatches = false;
              }
            }
          }
          if (!metadataMatches) {
            var currentMetadata = JSON.stringify(pcbdata.metadata, null, 4);
            var fileMetadata = JSON.stringify(newSettings.pcbmetadata, null, 4);
            if (!confirm(
                `Settins file metadata does not match current metadata.\n\n` +
                `Page metadata:\n${currentMetadata}\n\n` +
                `Settings file metadata:\n${fileMetadata}\n\n` +
                `Press OK if you would like to import settings anyway.`)) {
              return;
            }
          }
          overwriteSettings(newSettings.settings);
        }
        reader.readAsText(file, 'UTF-8');
      }
      input.click();
    }
    
    function overwriteSettings(newSettings) {
      initDone = false;
      Object.assign(settings, newSettings);
      writeStorage("bomlayout", settings.bomlayout);
      writeStorage("bommode", settings.bommode);
      writeStorage("canvaslayout", settings.canvaslayout);
      writeStorage("bomCheckboxes", settings.checkboxes.join(","));
      document.getElementById("bomCheckboxes").value = settings.checkboxes.join(",");
      for (var checkbox of settings.checkboxes) {
        writeStorage("checkbox_" + checkbox, settings.checkboxStoredRefs[checkbox]);
      }
      writeStorage("markWhenChecked", settings.markWhenChecked);
      padsVisible(settings.renderPads);
      document.getElementById("padsCheckbox").checked = settings.renderPads;
      fabricationVisible(settings.renderFabrication);
      document.getElementById("fabricationCheckbox").checked = settings.renderFabrication;
      silkscreenVisible(settings.renderSilkscreen);
      document.getElementById("silkscreenCheckbox").checked = settings.renderSilkscreen;
      referencesVisible(settings.renderReferences);
      document.getElementById("referencesCheckbox").checked = settings.renderReferences;
      valuesVisible(settings.renderValues);
      document.getElementById("valuesCheckbox").checked = settings.renderValues;
      tracksVisible(settings.renderTracks);
      document.getElementById("tracksCheckbox").checked = settings.renderTracks;
      zonesVisible(settings.renderZones);
      document.getElementById("zonesCheckbox").checked = settings.renderZones;
      dnpOutline(settings.renderDnpOutline);
      document.getElementById("dnpOutlineCheckbox").checked = settings.renderDnpOutline;
      setRedrawOnDrag(settings.redrawOnDrag);
      document.getElementById("dragCheckbox").checked = settings.redrawOnDrag;
      setDarkMode(settings.darkMode);
      document.getElementById("darkmodeCheckbox").checked = settings.darkMode;
      setHighlightPin1(settings.highlightpin1);
      document.getElementById("highlightpin1Checkbox").checked = settings.highlightpin1;
      writeStorage("boardRotation", settings.boardRotation);
      document.getElementById("boardRotation").value = settings.boardRotation / 5;
      document.getElementById("rotationDegree").textContent = settings.boardRotation;
      setOffsetBackRotation(settings.offsetBackRotation);
      document.getElementById("offsetBackRotationCheckbox").checked = settings.offsetBackRotation;
      initDone = true;
      prepCheckboxes();
      changeBomLayout(settings.bomlayout);
    }
    
    function saveFile(filename, blob) {
      var link = document.createElement("a");
      var objurl = URL.createObjectURL(blob);
      link.download = filename;
      link.href = objurl;
      link.click();
    }
    
    function dataURLtoBlob(dataurl) {
      var arr = dataurl.split(','),
        mime = arr[0].match(/:(.*?);/)[1],
        bstr = atob(arr[1]),
        n = bstr.length,
        u8arr = new Uint8Array(n);
      while (n--) {
        u8arr[n] = bstr.charCodeAt(n);
      }
      return new Blob([u8arr], {
        type: mime
      });
    }
    
    var settings = {
      canvaslayout: "default",
      bomlayout: "default",
      bommode: "grouped",
      checkboxes: [],
      checkboxStoredRefs: {},
      darkMode: false,
      highlightpin1: false,
      redrawOnDrag: true,
      boardRotation: 0,
      offsetBackRotation: false,
      renderPads: true,
      renderReferences: true,
      renderValues: true,
      renderSilkscreen: true,
      renderFabrication: true,
      renderDnpOutline: false,
      renderTracks: true,
      renderZones: true,
      columnOrder: [],
      hiddenColumns: []
    }
    
    function initDefaults() {
      settings.bomlayout = readStorage("bomlayout");
      if (settings.bomlayout === null) {
        settings.bomlayout = config.bom_view;
      }
      if (!['bom-only', 'left-right', 'top-bottom'].includes(settings.bomlayout)) {
        settings.bomlayout = config.bom_view;
      }
      settings.bommode = readStorage("bommode");
      if (settings.bommode === null) {
        settings.bommode = "grouped";
      }
      if (!["grouped", "ungrouped", "netlist"].includes(settings.bommode)) {
        settings.bommode = "grouped";
      }
      settings.canvaslayout = readStorage("canvaslayout");
      if (settings.canvaslayout === null) {
        settings.canvaslayout = config.layer_view;
      }
      var bomCheckboxes = readStorage("bomCheckboxes");
      if (bomCheckboxes === null) {
        bomCheckboxes = config.checkboxes;
      }
      settings.checkboxes = bomCheckboxes.split(",").filter((e) => e);
      document.getElementById("bomCheckboxes").value = bomCheckboxes;
    
      settings.markWhenChecked = readStorage("markWhenChecked") || "";
      populateMarkWhenCheckedOptions();
    
      function initBooleanSetting(storageString, def, elementId, func) {
        var b = readStorage(storageString);
        if (b === null) {
          b = def;
        } else {
          b = (b == "true");
        }
        document.getElementById(elementId).checked = b;
        func(b);
      }
    
      initBooleanSetting("padsVisible", config.show_pads, "padsCheckbox", padsVisible);
      initBooleanSetting("fabricationVisible", config.show_fabrication, "fabricationCheckbox", fabricationVisible);
      initBooleanSetting("silkscreenVisible", config.show_silkscreen, "silkscreenCheckbox", silkscreenVisible);
      initBooleanSetting("referencesVisible", true, "referencesCheckbox", referencesVisible);
      initBooleanSetting("valuesVisible", true, "valuesCheckbox", valuesVisible);
      if ("tracks" in pcbdata) {
        initBooleanSetting("tracksVisible", true, "tracksCheckbox", tracksVisible);
        initBooleanSetting("zonesVisible", true, "zonesCheckbox", zonesVisible);
      } else {
        document.getElementById("tracksAndZonesCheckboxes").style.display = "none";
        tracksVisible(false);
        zonesVisible(false);
      }
      initBooleanSetting("dnpOutline", false, "dnpOutlineCheckbox", dnpOutline);
      initBooleanSetting("redrawOnDrag", config.redraw_on_drag, "dragCheckbox", setRedrawOnDrag);
      initBooleanSetting("darkmode", config.dark_mode, "darkmodeCheckbox", setDarkMode);
      initBooleanSetting("highlightpin1", config.highlight_pin1, "highlightpin1Checkbox", setHighlightPin1);
    
      var fields = ["checkboxes", "References"].concat(config.fields).concat(["Quantity"]);
      var hcols = JSON.parse(readStorage("hiddenColumns"));
      if (hcols === null) {
        hcols = [];
      }
      settings.hiddenColumns = hcols.filter(e => fields.includes(e));
    
      var cord = JSON.parse(readStorage("columnOrder"));
      if (cord === null) {
        cord = fields;
      } else {
        cord = cord.filter(e => fields.includes(e));
        if (cord.length != fields.length)
          cord = fields;
      }
      settings.columnOrder = cord;
    
      settings.boardRotation = readStorage("boardRotation");
      if (settings.boardRotation === null) {
        settings.boardRotation = config.board_rotation * 5;
      } else {
        settings.boardRotation = parseInt(settings.boardRotation);
      }
      document.getElementById("boardRotation").value = settings.boardRotation / 5;
      document.getElementById("rotationDegree").textContent = settings.boardRotation;
      initBooleanSetting("offsetBackRotation", config.offset_back_rotation, "offsetBackRotationCheckbox", setOffsetBackRotation);
    }
    
    // Helper classes for user js callbacks.
    
    const IBOM_EVENT_TYPES = {
      ALL: "all",
      HIGHLIGHT_EVENT: "highlightEvent",
      CHECKBOX_CHANGE_EVENT: "checkboxChangeEvent",
      BOM_BODY_CHANGE_EVENT: "bomBodyChangeEvent",
    }
    
    const EventHandler = {
      callbacks: {},
      init: function() {
        for (eventType of Object.values(IBOM_EVENT_TYPES))
          this.callbacks[eventType] = [];
      },
      registerCallback: function(eventType, callback) {
        this.callbacks[eventType].push(callback);
      },
      emitEvent: function(eventType, eventArgs) {
        event = {
          eventType: eventType,
          args: eventArgs,
        }
        var callback;
        for (callback of this.callbacks[eventType])
          callback(event);
        for (callback of this.callbacks[IBOM_EVENT_TYPES.ALL])
          callback(event);
      }
    }
    EventHandler.init();
    
    ///////////////////////////////////////////////
    
    ///////////////////////////////////////////////
    /* PCB rendering code */
    
    var emptyContext2d = document.createElement("canvas").getContext("2d");
    
    function deg2rad(deg) {
      return deg * Math.PI / 180;
    }
    
    function calcFontPoint(linepoint, text, offsetx, offsety, tilt) {
      var point = [
        linepoint[0] * text.width + offsetx,
        linepoint[1] * text.height + offsety
      ];
      // This approximates pcbnew behavior with how text tilts depending on horizontal justification
      point[0] -= (linepoint[1] + 0.5 * (1 + text.justify[0])) * text.height * tilt;
      return point;
    }
    
    function drawText(ctx, text, color) {
      if ("ref" in text && !settings.renderReferences) return;
      if ("val" in text && !settings.renderValues) return;
      ctx.save();
      ctx.fillStyle = color;
      ctx.strokeStyle = color;
      ctx.lineCap = "round";
      ctx.lineJoin = "round";
      ctx.lineWidth = text.thickness;
      if ("svgpath" in text) {
        ctx.stroke(new Path2D(text.svgpath));
        ctx.restore();
        return;
      }
      if ("polygons" in text) {
        ctx.fill(getPolygonsPath(text));
        ctx.restore();
        return;
      }
      ctx.translate(...text.pos);
      ctx.translate(text.thickness * 0.5, 0);
      var angle = -text.angle;
      if (text.attr.includes("mirrored")) {
        ctx.scale(-1, 1);
        angle = -angle;
      }
      var tilt = 0;
      if (text.attr.includes("italic")) {
        tilt = 0.125;
      }
      var interline = text.height * 1.5 + text.thickness;
      var txt = text.text.split("\n");
      // KiCad ignores last empty line.
      if (txt[txt.length - 1] == '') txt.pop();
      ctx.rotate(deg2rad(angle));
      var offsety = (1 - text.justify[1]) / 2 * text.height; // One line offset
      offsety -= (txt.length - 1) * (text.justify[1] + 1) / 2 * interline; // Multiline offset
      for (var i in txt) {
        var lineWidth = text.thickness + interline / 2 * tilt;
        for (var j = 0; j < txt[i].length; j++) {
          if (txt[i][j] == '\t') {
            var fourSpaces = 4 * pcbdata.font_data[' '].w * text.width;
            lineWidth += fourSpaces - lineWidth % fourSpaces;
          } else {
            if (txt[i][j] == '~') {
              j++;
              if (j == txt[i].length)
                break;
            }
            lineWidth += pcbdata.font_data[txt[i][j]].w * text.width;
          }
        }
        var offsetx = -lineWidth * (text.justify[0] + 1) / 2;
        var inOverbar = false;
        for (var j = 0; j < txt[i].length; j++) {
          if (config.kicad_text_formatting) {
            if (txt[i][j] == '\t') {
              var fourSpaces = 4 * pcbdata.font_data[' '].w * text.width;
              offsetx += fourSpaces - offsetx % fourSpaces;
              continue;
            } else if (txt[i][j] == '~') {
              j++;
              if (j == txt[i].length)
                break;
              if (txt[i][j] != '~') {
                inOverbar = !inOverbar;
              }
            }
          }
          var glyph = pcbdata.font_data[txt[i][j]];
          if (inOverbar) {
            var overbarStart = [offsetx, -text.height * 1.4 + offsety];
            var overbarEnd = [offsetx + text.width * glyph.w, overbarStart[1]];
    
            if (!lastHadOverbar) {
              overbarStart[0] += text.height * 1.4 * tilt;
              lastHadOverbar = true;
            }
            ctx.beginPath();
            ctx.moveTo(...overbarStart);
            ctx.lineTo(...overbarEnd);
            ctx.stroke();
          } else {
            lastHadOverbar = false;
          }
          for (var line of glyph.l) {
            ctx.beginPath();
            ctx.moveTo(...calcFontPoint(line[0], text, offsetx, offsety, tilt));
            for (var k = 1; k < line.length; k++) {
              ctx.lineTo(...calcFontPoint(line[k], text, offsetx, offsety, tilt));
            }
            ctx.stroke();
          }
          offsetx += glyph.w * text.width;
        }
        offsety += interline;
      }
      ctx.restore();
    }
    
    function drawedge(ctx, scalefactor, edge, color) {
      ctx.strokeStyle = color;
      ctx.fillStyle = color;
      ctx.lineWidth = Math.max(1 / scalefactor, edge.width);
      ctx.lineCap = "round";
      ctx.lineJoin = "round";
      if ("svgpath" in edge) {
        ctx.stroke(new Path2D(edge.svgpath));
      } else {
        ctx.beginPath();
        if (edge.type == "segment") {
          ctx.moveTo(...edge.start);
          ctx.lineTo(...edge.end);
        }
        if (edge.type == "rect") {
          ctx.moveTo(...edge.start);
          ctx.lineTo(edge.start[0], edge.end[1]);
          ctx.lineTo(...edge.end);
          ctx.lineTo(edge.end[0], edge.start[1]);
          ctx.lineTo(...edge.start);
        }
        if (edge.type == "arc") {
          ctx.arc(
            ...edge.start,
            edge.radius,
            deg2rad(edge.startangle),
            deg2rad(edge.endangle));
        }
        if (edge.type == "circle") {
          ctx.arc(
            ...edge.start,
            edge.radius,
            0, 2 * Math.PI);
          ctx.closePath();
        }
        if (edge.type == "curve") {
          ctx.moveTo(...edge.start);
          ctx.bezierCurveTo(...edge.cpa, ...edge.cpb, ...edge.end);
        }
        if("filled" in edge && edge.filled)
          ctx.fill();
        else
          ctx.stroke();
      }
    }
    
    function getChamferedRectPath(size, radius, chamfpos, chamfratio) {
      // chamfpos is a bitmask, left = 1, right = 2, bottom left = 4, bottom right = 8
      var path = new Path2D();
      var width = size[0];
      var height = size[1];
      var x = width * -0.5;
      var y = height * -0.5;
      var chamfOffset = Math.min(width, height) * chamfratio;
      path.moveTo(x, 0);
      if (chamfpos & 4) {
        path.lineTo(x, y + height - chamfOffset);
        path.lineTo(x + chamfOffset, y + height);
        path.lineTo(0, y + height);
      } else {
        path.arcTo(x, y + height, x + width, y + height, radius);
      }
      if (chamfpos & 8) {
        path.lineTo(x + width - chamfOffset, y + height);
        path.lineTo(x + width, y + height - chamfOffset);
        path.lineTo(x + width, 0);
      } else {
        path.arcTo(x + width, y + height, x + width, y, radius);
      }
      if (chamfpos & 2) {
        path.lineTo(x + width, y + chamfOffset);
        path.lineTo(x + width - chamfOffset, y);
        path.lineTo(0, y);
      } else {
        path.arcTo(x + width, y, x, y, radius);
      }
      if (chamfpos & 1) {
        path.lineTo(x + chamfOffset, y);
        path.lineTo(x, y + chamfOffset);
        path.lineTo(x, 0);
      } else {
        path.arcTo(x, y, x, y + height, radius);
      }
      path.closePath();
      return path;
    }
    
    function getOblongPath(size) {
      return getChamferedRectPath(size, Math.min(size[0], size[1]) / 2, 0, 0);
    }
    
    function getPolygonsPath(shape) {
      if (shape.path2d) {
        return shape.path2d;
      }
      if ("svgpath" in shape) {
        shape.path2d = new Path2D(shape.svgpath);
      } else {
        var path = new Path2D();
        for (var polygon of shape.polygons) {
          path.moveTo(...polygon[0]);
          for (var i = 1; i < polygon.length; i++) {
            path.lineTo(...polygon[i]);
          }
          path.closePath();
        }
        shape.path2d = path;
      }
      return shape.path2d;
    }
    
    function drawPolygonShape(ctx, scalefactor, shape, color) {
      ctx.save();
      if (!("svgpath" in shape)) {
        ctx.translate(...shape.pos);
        ctx.rotate(deg2rad(-shape.angle));
      }
      if("filled" in shape && !shape.filled) {
        ctx.strokeStyle = color;
        ctx.lineWidth = Math.max(1 / scalefactor, shape.width);
        ctx.lineCap = "round";
        ctx.lineJoin = "round";
        ctx.stroke(getPolygonsPath(shape));
      } else {
        ctx.fillStyle = color;
        ctx.fill(getPolygonsPath(shape));
      }
      ctx.restore();
    }
    
    function drawDrawing(ctx, scalefactor, drawing, color) {
      if (["segment", "arc", "circle", "curve", "rect"].includes(drawing.type)) {
        drawedge(ctx, scalefactor, drawing, color);
      } else if (drawing.type == "polygon") {
        drawPolygonShape(ctx, scalefactor, drawing, color);
      } else {
        drawText(ctx, drawing, color);
      }
    }
    
    function getCirclePath(radius) {
      var path = new Path2D();
      path.arc(0, 0, radius, 0, 2 * Math.PI);
      path.closePath();
      return path;
    }
    
    function getCachedPadPath(pad) {
      if (!pad.path2d) {
        // if path2d is not set, build one and cache it on pad object
        if (pad.shape == "rect") {
          pad.path2d = new Path2D();
          pad.path2d.rect(...pad.size.map(c => -c * 0.5), ...pad.size);
        } else if (pad.shape == "oval") {
          pad.path2d = getOblongPath(pad.size);
        } else if (pad.shape == "circle") {
          pad.path2d = getCirclePath(pad.size[0] / 2);
        } else if (pad.shape == "roundrect") {
          pad.path2d = getChamferedRectPath(pad.size, pad.radius, 0, 0);
        } else if (pad.shape == "chamfrect") {
          pad.path2d = getChamferedRectPath(pad.size, pad.radius, pad.chamfpos, pad.chamfratio)
        } else if (pad.shape == "custom") {
          pad.path2d = getPolygonsPath(pad);
        }
      }
      return pad.path2d;
    }
    
    function drawPad(ctx, pad, color, outline) {
      ctx.save();
      ctx.translate(...pad.pos);
      ctx.rotate(-deg2rad(pad.angle));
      if (pad.offset) {
        ctx.translate(...pad.offset);
      }
      ctx.fillStyle = color;
      ctx.strokeStyle = color;
      var path = getCachedPadPath(pad);
      if (outline) {
        ctx.stroke(path);
      } else {
        ctx.fill(path);
      }
      ctx.restore();
    }
    
    function drawPadHole(ctx, pad, padHoleColor) {
      if (pad.type != "th") return;
      ctx.save();
      ctx.translate(...pad.pos);
      ctx.rotate(-deg2rad(pad.angle));
      ctx.fillStyle = padHoleColor;
      if (pad.drillshape == "oblong") {
        ctx.fill(getOblongPath(pad.drillsize));
      } else {
        ctx.fill(getCirclePath(pad.drillsize[0] / 2));
      }
      ctx.restore();
    }
    
    function drawFootprint(ctx, layer, scalefactor, footprint, colors, highlight, outline) {
      if (highlight) {
        // draw bounding box
        if (footprint.layer == layer) {
          ctx.save();
          ctx.globalAlpha = 0.2;
          ctx.translate(...footprint.bbox.pos);
          ctx.rotate(deg2rad(-footprint.bbox.angle));
          ctx.translate(...footprint.bbox.relpos);
          ctx.fillStyle = colors.pad;
          ctx.fillRect(0, 0, ...footprint.bbox.size);
          ctx.globalAlpha = 1;
          ctx.strokeStyle = colors.pad;
          ctx.lineWidth = 3 / scalefactor;
          ctx.strokeRect(0, 0, ...footprint.bbox.size);
          ctx.restore();
        }
      }
      // draw drawings
      for (var drawing of footprint.drawings) {
        if (drawing.layer == layer) {
          drawDrawing(ctx, scalefactor, drawing.drawing, colors.pad);
        }
      }
      ctx.lineWidth = 3 / scalefactor;
      // draw pads
      if (settings.renderPads) {
        for (var pad of footprint.pads) {
          if (pad.layers.includes(layer)) {
            drawPad(ctx, pad, colors.pad, outline);
            if (pad.pin1 && settings.highlightpin1) {
              drawPad(ctx, pad, colors.outline, true);
            }
          }
        }
        for (var pad of footprint.pads) {
          drawPadHole(ctx, pad, colors.padHole);
        }
      }
    }
    
    function drawEdgeCuts(canvas, scalefactor) {
      var ctx = canvas.getContext("2d");
      var edgecolor = getComputedStyle(topmostdiv).getPropertyValue('--pcb-edge-color');
      for (var edge of pcbdata.edges) {
        drawDrawing(ctx, scalefactor, edge, edgecolor);
      }
    }
    
    function drawFootprints(canvas, layer, scalefactor, highlight) {
      var ctx = canvas.getContext("2d");
      ctx.lineWidth = 3 / scalefactor;
      var style = getComputedStyle(topmostdiv);
    
      var colors = {
        pad: style.getPropertyValue('--pad-color'),
        padHole: style.getPropertyValue('--pad-hole-color'),
        outline: style.getPropertyValue('--pin1-outline-color'),
      }
    
      for (var i = 0; i < pcbdata.footprints.length; i++) {
        var mod = pcbdata.footprints[i];
        var outline = settings.renderDnpOutline && pcbdata.bom.skipped.includes(i);
        var h = highlightedFootprints.includes(i);
        var d = markedFootprints.has(i);
        if (highlight) {
          if(h && d) {
            colors.pad = style.getPropertyValue('--pad-color-highlight-both');
            colors.outline = style.getPropertyValue('--pin1-outline-color-highlight-both');
          } else if (h) {
            colors.pad = style.getPropertyValue('--pad-color-highlight');
            colors.outline = style.getPropertyValue('--pin1-outline-color-highlight');
          } else if (d) {
            colors.pad = style.getPropertyValue('--pad-color-highlight-marked');
            colors.outline = style.getPropertyValue('--pin1-outline-color-highlight-marked');
          }
        }
        if( h || d || !highlight) {
          drawFootprint(ctx, layer, scalefactor, mod, colors, highlight, outline);
        }
      }
    }
    
    function drawBgLayer(layername, canvas, layer, scalefactor, edgeColor, polygonColor, textColor) {
      var ctx = canvas.getContext("2d");
      for (var d of pcbdata.drawings[layername][layer]) {
        if (["segment", "arc", "circle", "curve", "rect"].includes(d.type)) {
          drawedge(ctx, scalefactor, d, edgeColor);
        } else if (d.type == "polygon") {
          drawPolygonShape(ctx, scalefactor, d, polygonColor);
        } else {
          drawText(ctx, d, textColor);
        }
      }
    }
    
    function drawTracks(canvas, layer, color, highlight) {
      ctx = canvas.getContext("2d");
      ctx.strokeStyle = color;
      ctx.lineCap = "round";
      for (var track of pcbdata.tracks[layer]) {
        if (highlight && highlightedNet != track.net) continue;
        ctx.lineWidth = track.width;
        ctx.beginPath();
        if ('radius' in track) {
          ctx.arc(
            ...track.center,
            track.radius,
            deg2rad(track.startangle),
            deg2rad(track.endangle));
        } else {
          ctx.moveTo(...track.start);
          ctx.lineTo(...track.end);
        }
        ctx.stroke();
      }
    }
    
    function drawZones(canvas, layer, color, highlight) {
      ctx = canvas.getContext("2d");
      ctx.strokeStyle = color;
      ctx.fillStyle = color;
      ctx.lineJoin = "round";
      for (var zone of pcbdata.zones[layer]) {
        if (!zone.path2d) {
          zone.path2d = getPolygonsPath(zone);
        }
        if (highlight && highlightedNet != zone.net) continue;
        ctx.fill(zone.path2d, zone.fillrule || "nonzero");
        if (zone.width > 0) {
          ctx.lineWidth = zone.width;
          ctx.stroke(zone.path2d);
        }
      }
    }
    
    function clearCanvas(canvas, color = null) {
      var ctx = canvas.getContext("2d");
      ctx.save();
      ctx.setTransform(1, 0, 0, 1, 0, 0);
      if (color) {
        ctx.fillStyle = color;
        ctx.fillRect(0, 0, canvas.width, canvas.height);
      } else {
        if (!window.matchMedia("print").matches)
          ctx.clearRect(0, 0, canvas.width, canvas.height);
      }
      ctx.restore();
    }
    
    function drawNets(canvas, layer, highlight) {
      var style = getComputedStyle(topmostdiv);
      if (settings.renderTracks) {
        var trackColor = style.getPropertyValue(highlight ? '--track-color-highlight' : '--track-color');
        drawTracks(canvas, layer, trackColor, highlight);
      }
      if (settings.renderZones) {
        var zoneColor = style.getPropertyValue(highlight ? '--zone-color-highlight' : '--zone-color');
        drawZones(canvas, layer, zoneColor, highlight);
      }
      if (highlight && settings.renderPads) {
        var padColor = style.getPropertyValue('--pad-color-highlight');
        var padHoleColor = style.getPropertyValue('--pad-hole-color');
        var ctx = canvas.getContext("2d");
        for (var footprint of pcbdata.footprints) {
          // draw pads
          var padDrawn = false;
          for (var pad of footprint.pads) {
            if (highlightedNet != pad.net) continue;
            if (pad.layers.includes(layer)) {
              drawPad(ctx, pad, padColor, false);
              padDrawn = true;
            }
          }
          if (padDrawn) {
            // redraw all pad holes because some pads may overlap
            for (var pad of footprint.pads) {
              drawPadHole(ctx, pad, padHoleColor);
            }
          }
        }
      }
    }
    
    function drawHighlightsOnLayer(canvasdict, clear = true) {
      if (clear) {
        clearCanvas(canvasdict.highlight);
      }
      if (markedFootprints.size > 0 || highlightedFootprints.length > 0) {
        drawFootprints(canvasdict.highlight, canvasdict.layer,
          canvasdict.transform.s * canvasdict.transform.zoom, true);
      }
      if (highlightedNet !== null) {
        drawNets(canvasdict.highlight, canvasdict.layer, true);
      }
    }
    
    function drawHighlights() {
      drawHighlightsOnLayer(allcanvas.front);
      drawHighlightsOnLayer(allcanvas.back);
    }
    
    function drawBackground(canvasdict, clear = true) {
      if (clear) {
        clearCanvas(canvasdict.bg);
        clearCanvas(canvasdict.fab);
        clearCanvas(canvasdict.silk);
      }
    
      drawNets(canvasdict.bg, canvasdict.layer, false);
      drawFootprints(canvasdict.bg, canvasdict.layer,
        canvasdict.transform.s * canvasdict.transform.zoom, false);
    
      drawEdgeCuts(canvasdict.bg, canvasdict.transform.s * canvasdict.transform.zoom);
    
      var style = getComputedStyle(topmostdiv);
      var edgeColor = style.getPropertyValue('--silkscreen-edge-color');
      var polygonColor = style.getPropertyValue('--silkscreen-polygon-color');
      var textColor = style.getPropertyValue('--silkscreen-text-color');
      if (settings.renderSilkscreen) {
        drawBgLayer(
          "silkscreen", canvasdict.silk, canvasdict.layer,
          canvasdict.transform.s * canvasdict.transform.zoom,
          edgeColor, polygonColor, textColor);
      }
      edgeColor = style.getPropertyValue('--fabrication-edge-color');
      polygonColor = style.getPropertyValue('--fabrication-polygon-color');
      textColor = style.getPropertyValue('--fabrication-text-color');
      if (settings.renderFabrication) {
        drawBgLayer(
          "fabrication", canvasdict.fab, canvasdict.layer,
          canvasdict.transform.s * canvasdict.transform.zoom,
          edgeColor, polygonColor, textColor);
      }
    }
    
    function prepareCanvas(canvas, flip, transform) {
      var ctx = canvas.getContext("2d");
      ctx.setTransform(1, 0, 0, 1, 0, 0);
      ctx.scale(transform.zoom, transform.zoom);
      ctx.translate(transform.panx, transform.pany);
      if (flip) {
        ctx.scale(-1, 1);
      }
      ctx.translate(transform.x, transform.y);
      ctx.rotate(deg2rad(settings.boardRotation + (flip && settings.offsetBackRotation ? - 180 : 0)));
      ctx.scale(transform.s, transform.s);
    }
    
    function prepareLayer(canvasdict) {
      var flip = (canvasdict.layer === "B");
      for (var c of ["bg", "fab", "silk", "highlight"]) {
        prepareCanvas(canvasdict[c], flip, canvasdict.transform);
      }
    }
    
    function rotateVector(v, angle) {
      angle = deg2rad(angle);
      return [
        v[0] * Math.cos(angle) - v[1] * Math.sin(angle),
        v[0] * Math.sin(angle) + v[1] * Math.cos(angle)
      ];
    }
    
    function applyRotation(bbox, flip) {
      var corners = [
        [bbox.minx, bbox.miny],
        [bbox.minx, bbox.maxy],
        [bbox.maxx, bbox.miny],
        [bbox.maxx, bbox.maxy],
      ];
      corners = corners.map((v) => rotateVector(v, settings.boardRotation + (flip && settings.offsetBackRotation ? - 180 : 0)));
      return {
        minx: corners.reduce((a, v) => Math.min(a, v[0]), Infinity),
        miny: corners.reduce((a, v) => Math.min(a, v[1]), Infinity),
        maxx: corners.reduce((a, v) => Math.max(a, v[0]), -Infinity),
        maxy: corners.reduce((a, v) => Math.max(a, v[1]), -Infinity),
      }
    }
    
    function recalcLayerScale(layerdict, width, height) {
      var flip = (layerdict.layer === "B");
      var bbox = applyRotation(pcbdata.edges_bbox, flip);
      var scalefactor = 0.98 * Math.min(
        width / (bbox.maxx - bbox.minx),
        height / (bbox.maxy - bbox.miny)
      );
      if (scalefactor < 0.1) {
        scalefactor = 1;
      }
      layerdict.transform.s = scalefactor;
      if (flip) {
        layerdict.transform.x = -((bbox.maxx + bbox.minx) * scalefactor + width) * 0.5;
      } else {
        layerdict.transform.x = -((bbox.maxx + bbox.minx) * scalefactor - width) * 0.5;
      }
      layerdict.transform.y = -((bbox.maxy + bbox.miny) * scalefactor - height) * 0.5;
      for (var c of ["bg", "fab", "silk", "highlight"]) {
        canvas = layerdict[c];
        canvas.width = width;
        canvas.height = height;
        canvas.style.width = (width / devicePixelRatio) + "px";
        canvas.style.height = (height / devicePixelRatio) + "px";
      }
    }
    
    function redrawCanvas(layerdict) {
      prepareLayer(layerdict);
      drawBackground(layerdict);
      drawHighlightsOnLayer(layerdict);
    }
    
    function resizeCanvas(layerdict) {
      var canvasdivid = {
        "F": "frontcanvas",
        "B": "backcanvas"
      } [layerdict.layer];
      var width = document.getElementById(canvasdivid).clientWidth * devicePixelRatio;
      var height = document.getElementById(canvasdivid).clientHeight * devicePixelRatio;
      recalcLayerScale(layerdict, width, height);
      redrawCanvas(layerdict);
    }
    
    function resizeAll() {
      resizeCanvas(allcanvas.front);
      resizeCanvas(allcanvas.back);
    }
    
    function pointWithinDistanceToSegment(x, y, x1, y1, x2, y2, d) {
      var A = x - x1;
      var B = y - y1;
      var C = x2 - x1;
      var D = y2 - y1;
    
      var dot = A * C + B * D;
      var len_sq = C * C + D * D;
      var dx, dy;
      if (len_sq == 0) {
        // start and end of the segment coincide
        dx = x - x1;
        dy = y - y1;
      } else {
        var param = dot / len_sq;
        var xx, yy;
        if (param < 0) {
          xx = x1;
          yy = y1;
        } else if (param > 1) {
          xx = x2;
          yy = y2;
        } else {
          xx = x1 + param * C;
          yy = y1 + param * D;
        }
        dx = x - xx;
        dy = y - yy;
      }
      return dx * dx + dy * dy <= d * d;
    }
    
    function modulo(n, mod) {
      return ((n % mod) + mod) % mod;
    }
    
    function pointWithinDistanceToArc(x, y, xc, yc, radius, startangle, endangle, d) {
      var dx = x - xc;
      var dy = y - yc;
      var r_sq = dx * dx + dy * dy;
      var rmin = Math.max(0, radius - d);
      var rmax = radius + d;
    
      if (r_sq < rmin * rmin || r_sq > rmax * rmax)
        return false;
    
      var angle1 = modulo(deg2rad(startangle), 2 * Math.PI);
      var dx1 = xc + radius * Math.cos(angle1) - x;
      var dy1 = yc + radius * Math.sin(angle1) - y;
      if (dx1 * dx1 + dy1 * dy1 <= d * d)
        return true;
    
      var angle2 = modulo(deg2rad(endangle), 2 * Math.PI);
      var dx2 = xc + radius * Math.cos(angle2) - x;
      var dy2 = yc + radius * Math.sin(angle2) - y;
      if (dx2 * dx2 + dy2 * dy2 <= d * d)
        return true;
    
      var angle = modulo(Math.atan2(dy, dx), 2 * Math.PI);
      if (angle1 > angle2)
        return (angle >= angle2 || angle <= angle1);
      else
        return (angle >= angle1 && angle <= angle2);
    }
    
    function pointWithinPad(x, y, pad) {
      var v = [x - pad.pos[0], y - pad.pos[1]];
      v = rotateVector(v, pad.angle);
      if (pad.offset) {
        v[0] -= pad.offset[0];
        v[1] -= pad.offset[1];
      }
      return emptyContext2d.isPointInPath(getCachedPadPath(pad), ...v);
    }
    
    function netHitScan(layer, x, y) {
      // Check track segments
      if (settings.renderTracks && pcbdata.tracks) {
        for (var track of pcbdata.tracks[layer]) {
          if ('radius' in track) {
            if (pointWithinDistanceToArc(x, y, ...track.center, track.radius, track.startangle, track.endangle, track.width / 2)) {
              return track.net;
            }
          } else {
            if (pointWithinDistanceToSegment(x, y, ...track.start, ...track.end, track.width / 2)) {
              return track.net;
            }
          }
        }
      }
      // Check pads
      if (settings.renderPads) {
        for (var footprint of pcbdata.footprints) {
          for (var pad of footprint.pads) {
            if (pad.layers.includes(layer) && pointWithinPad(x, y, pad)) {
              return pad.net;
            }
          }
        }
      }
      return null;
    }
    
    function pointWithinFootprintBbox(x, y, bbox) {
      var v = [x - bbox.pos[0], y - bbox.pos[1]];
      v = rotateVector(v, bbox.angle);
      return bbox.relpos[0] <= v[0] && v[0] <= bbox.relpos[0] + bbox.size[0] &&
        bbox.relpos[1] <= v[1] && v[1] <= bbox.relpos[1] + bbox.size[1];
    }
    
    function bboxHitScan(layer, x, y) {
      var result = [];
      for (var i = 0; i < pcbdata.footprints.length; i++) {
        var footprint = pcbdata.footprints[i];
        if (footprint.layer == layer) {
          if (pointWithinFootprintBbox(x, y, footprint.bbox)) {
            result.push(i);
          }
        }
      }
      return result;
    }
    
    function handlePointerDown(e, layerdict) {
      if (e.button != 0 && e.button != 1) {
        return;
      }
      e.preventDefault();
      e.stopPropagation();
    
      if (!e.hasOwnProperty("offsetX")) {
        // The polyfill doesn't set this properly
        e.offsetX = e.pageX - e.currentTarget.offsetLeft;
        e.offsetY = e.pageY - e.currentTarget.offsetTop;
      }
    
      layerdict.pointerStates[e.pointerId] = {
        distanceTravelled: 0,
        lastX: e.offsetX,
        lastY: e.offsetY,
        downTime: Date.now(),
      };
    }
    
    function handleMouseClick(e, layerdict) {
      if (!e.hasOwnProperty("offsetX")) {
        // The polyfill doesn't set this properly
        e.offsetX = e.pageX - e.currentTarget.offsetLeft;
        e.offsetY = e.pageY - e.currentTarget.offsetTop;
      }
    
      var x = e.offsetX;
      var y = e.offsetY;
      var t = layerdict.transform;
      var flip = layerdict.layer === "B";
      if (flip) {
        x = (devicePixelRatio * x / t.zoom - t.panx + t.x) / -t.s;
      } else {
        x = (devicePixelRatio * x / t.zoom - t.panx - t.x) / t.s;
      }
      y = (devicePixelRatio * y / t.zoom - t.y - t.pany) / t.s;
      var v = rotateVector([x, y], -settings.boardRotation + (flip && settings.offsetBackRotation ? - 180 : 0));
      if ("nets" in pcbdata) {
        var net = netHitScan(layerdict.layer, ...v);
        if (net !== highlightedNet) {
          netClicked(net);
        }
      }
      if (highlightedNet === null) {
        var footprints = bboxHitScan(layerdict.layer, ...v);
        if (footprints.length > 0) {
          footprintsClicked(footprints);
        }
      }
    }
    
    function handlePointerLeave(e, layerdict) {
      e.preventDefault();
      e.stopPropagation();
    
      if (!settings.redrawOnDrag) {
        redrawCanvas(layerdict);
      }
    
      delete layerdict.pointerStates[e.pointerId];
    }
    
    function resetTransform(layerdict) {
      layerdict.transform.panx = 0;
      layerdict.transform.pany = 0;
      layerdict.transform.zoom = 1;
      redrawCanvas(layerdict);
    }
    
    function handlePointerUp(e, layerdict) {
      if (!e.hasOwnProperty("offsetX")) {
        // The polyfill doesn't set this properly
        e.offsetX = e.pageX - e.currentTarget.offsetLeft;
        e.offsetY = e.pageY - e.currentTarget.offsetTop;
      }
    
      e.preventDefault();
      e.stopPropagation();
    
      if (e.button == 2) {
        // Reset pan and zoom on right click.
        resetTransform(layerdict);
        layerdict.anotherPointerTapped = false;
        return;
      }
    
      // We haven't necessarily had a pointermove event since the interaction started, so make sure we update this now
      var ptr = layerdict.pointerStates[e.pointerId];
      ptr.distanceTravelled += Math.abs(e.offsetX - ptr.lastX) + Math.abs(e.offsetY - ptr.lastY);
    
      if (e.button == 0 && ptr.distanceTravelled < 10 && Date.now() - ptr.downTime <= 500) {
        if (Object.keys(layerdict.pointerStates).length == 1) {
          if (layerdict.anotherPointerTapped) {
            // This is the second pointer coming off of a two-finger tap
            resetTransform(layerdict);
          } else {
            // This is just a regular tap
            handleMouseClick(e, layerdict);
          }
          layerdict.anotherPointerTapped = false;
        } else {
          // This is the first finger coming off of what could become a two-finger tap
          layerdict.anotherPointerTapped = true;
        }
      } else {
        if (!settings.redrawOnDrag) {
          redrawCanvas(layerdict);
        }
        layerdict.anotherPointerTapped = false;
      }
    
      delete layerdict.pointerStates[e.pointerId];
    }
    
    function handlePointerMove(e, layerdict) {
      if (!layerdict.pointerStates.hasOwnProperty(e.pointerId)) {
        return;
      }
      e.preventDefault();
      e.stopPropagation();
    
      if (!e.hasOwnProperty("offsetX")) {
        // The polyfill doesn't set this properly
        e.offsetX = e.pageX - e.currentTarget.offsetLeft;
        e.offsetY = e.pageY - e.currentTarget.offsetTop;
      }
    
      var thisPtr = layerdict.pointerStates[e.pointerId];
    
      var dx = e.offsetX - thisPtr.lastX;
      var dy = e.offsetY - thisPtr.lastY;
    
      // If this number is low on pointer up, we count the action as a click
      thisPtr.distanceTravelled += Math.abs(dx) + Math.abs(dy);
    
      if (Object.keys(layerdict.pointerStates).length == 1) {
        // This is a simple drag
        layerdict.transform.panx += devicePixelRatio * dx / layerdict.transform.zoom;
        layerdict.transform.pany += devicePixelRatio * dy / layerdict.transform.zoom;
      } else if (Object.keys(layerdict.pointerStates).length == 2) {
        var otherPtr = Object.values(layerdict.pointerStates).filter((ptr) => ptr != thisPtr)[0];
    
        var oldDist = Math.sqrt(Math.pow(thisPtr.lastX - otherPtr.lastX, 2) + Math.pow(thisPtr.lastY - otherPtr.lastY, 2));
        var newDist = Math.sqrt(Math.pow(e.offsetX - otherPtr.lastX, 2) + Math.pow(e.offsetY - otherPtr.lastY, 2));
    
        var scaleFactor = newDist / oldDist;
    
        if (scaleFactor != NaN) {
          layerdict.transform.zoom *= scaleFactor;
    
          var zoomd = (1 - scaleFactor) / layerdict.transform.zoom;
          layerdict.transform.panx += devicePixelRatio * otherPtr.lastX * zoomd;
          layerdict.transform.pany += devicePixelRatio * otherPtr.lastY * zoomd;
        }
      }
    
      thisPtr.lastX = e.offsetX;
      thisPtr.lastY = e.offsetY;
    
      if (settings.redrawOnDrag) {
        redrawCanvas(layerdict);
      }
    }
    
    function handleMouseWheel(e, layerdict) {
      e.preventDefault();
      e.stopPropagation();
      var t = layerdict.transform;
      var wheeldelta = e.deltaY;
      if (e.deltaMode == 1) {
        // FF only, scroll by lines
        wheeldelta *= 30;
      } else if (e.deltaMode == 2) {
        wheeldelta *= 300;
      }
      var m = Math.pow(1.1, -wheeldelta / 40);
      // Limit amount of zoom per tick.
      if (m > 2) {
        m = 2;
      } else if (m < 0.5) {
        m = 0.5;
      }
      t.zoom *= m;
      var zoomd = (1 - m) / t.zoom;
      t.panx += devicePixelRatio * e.offsetX * zoomd;
      t.pany += devicePixelRatio * e.offsetY * zoomd;
      redrawCanvas(layerdict);
    }
    
    function addMouseHandlers(div, layerdict) {
      div.addEventListener("pointerdown", function(e) {
        handlePointerDown(e, layerdict);
      });
      div.addEventListener("pointermove", function(e) {
        handlePointerMove(e, layerdict);
      });
      div.addEventListener("pointerup", function(e) {
        handlePointerUp(e, layerdict);
      });
      var pointerleave = function(e) {
        handlePointerLeave(e, layerdict);
      }
      div.addEventListener("pointercancel", pointerleave);
      div.addEventListener("pointerleave", pointerleave);
      div.addEventListener("pointerout", pointerleave);
    
      div.onwheel = function(e) {
        handleMouseWheel(e, layerdict);
      }
      for (var element of [div, layerdict.bg, layerdict.fab, layerdict.silk, layerdict.highlight]) {
        element.addEventListener("contextmenu", function(e) {
          e.preventDefault();
        }, false);
      }
    }
    
    function setRedrawOnDrag(value) {
      settings.redrawOnDrag = value;
      writeStorage("redrawOnDrag", value);
    }
    
    function setBoardRotation(value) {
      settings.boardRotation = value * 5;
      writeStorage("boardRotation", settings.boardRotation);
      document.getElementById("rotationDegree").textContent = settings.boardRotation;
      resizeAll();
    }
    
    function setOffsetBackRotation(value) {
      settings.offsetBackRotation = value;
      writeStorage("offsetBackRotation", value);
      resizeAll();
    }
    
    function initRender() {
      allcanvas = {
        front: {
          transform: {
            x: 0,
            y: 0,
            s: 1,
            panx: 0,
            pany: 0,
            zoom: 1,
          },
          pointerStates: {},
          anotherPointerTapped: false,
          bg: document.getElementById("F_bg"),
          fab: document.getElementById("F_fab"),
          silk: document.getElementById("F_slk"),
          highlight: document.getElementById("F_hl"),
          layer: "F",
        },
        back: {
          transform: {
            x: 0,
            y: 0,
            s: 1,
            panx: 0,
            pany: 0,
            zoom: 1,
          },
          pointerStates: {},
          anotherPointerTapped: false,
          bg: document.getElementById("B_bg"),
          fab: document.getElementById("B_fab"),
          silk: document.getElementById("B_slk"),
          highlight: document.getElementById("B_hl"),
          layer: "B",
        }
      };
      addMouseHandlers(document.getElementById("frontcanvas"), allcanvas.front);
      addMouseHandlers(document.getElementById("backcanvas"), allcanvas.back);
    }
    
    ///////////////////////////////////////////////
    
    ///////////////////////////////////////////////
    /*
     * Table reordering via Drag'n'Drop
     * Inspired by: https://htmldom.dev/drag-and-drop-table-column
     */
    
    function setBomHandlers() {
    
      const bom = document.getElementById('bomtable');
    
      let dragName;
      let placeHolderElements;
      let draggingElement;
      let forcePopulation;
      let xOffset;
      let yOffset;
      let wasDragged;
    
      const mouseUpHandler = function(e) {
        // Delete dragging element
        draggingElement.remove();
    
        // Make BOM selectable again
        bom.style.removeProperty("userSelect");
    
        // Remove listeners
        document.removeEventListener('mousemove', mouseMoveHandler);
        document.removeEventListener('mouseup', mouseUpHandler);
    
        if (wasDragged) {
          // Redraw whole BOM
          populateBomTable();
        }
      }
    
      const mouseMoveHandler = function(e) {
        // Notice the dragging
        wasDragged = true;
    
        // Make the dragged element visible
        draggingElement.style.removeProperty("display");
    
        // Set elements position to mouse position
        draggingElement.style.left = `${e.screenX - xOffset}px`;
        draggingElement.style.top = `${e.screenY - yOffset}px`;
    
        // Forced redrawing of BOM table
        if (forcePopulation) {
          forcePopulation = false;
          // Copy array
          phe = Array.from(placeHolderElements);
          // populate BOM table again
          populateBomHeader(dragName, phe);
          populateBomBody(dragName, phe);
        }
    
        // Set up array of hidden columns
        var hiddenColumns = Array.from(settings.hiddenColumns);
        // In the ungrouped mode, quantity don't exist
        if (settings.bommode === "ungrouped")
          hiddenColumns.push("Quantity");
        // If no checkbox fields can be found, we consider them hidden
        if (settings.checkboxes.length == 0)
          hiddenColumns.push("checkboxes");
    
        // Get table headers and group them into checkboxes, extrafields and normal headers
        const bh = document.getElementById("bomhead");
        headers = Array.from(bh.querySelectorAll("th"))
        headers.shift() // numCol is not part of the columnOrder
        headerGroups = []
        lastCompoundClass = null;
        for (i = 0; i < settings.columnOrder.length; i++) {
          cElem = settings.columnOrder[i];
          if (hiddenColumns.includes(cElem)) {
            // Hidden columns appear as a dummy element
            headerGroups.push([]);
            continue;
          }
          elem = headers.filter(e => getColumnOrderName(e) === cElem)[0];
          if (elem.classList.contains("bom-checkbox")) {
            if (lastCompoundClass === "bom-checkbox") {
              cbGroup = headerGroups.pop();
              cbGroup.push(elem);
              headerGroups.push(cbGroup);
            } else {
              lastCompoundClass = "bom-checkbox";
              headerGroups.push([elem])
            }
          } else {
            headerGroups.push([elem])
          }
        }
    
        // Copy settings.columnOrder
        var columns = Array.from(settings.columnOrder)
    
        // Set up array with indices of hidden columns
        var hiddenIndices = hiddenColumns.map(e => settings.columnOrder.indexOf(e));
        var dragIndex = columns.indexOf(dragName);
        var swapIndex = dragIndex;
        var swapDone = false;
    
        // Check if the current dragged element is swapable with the left or right element
        if (dragIndex > 0) {
          // Get left headers boundingbox
          swapIndex = dragIndex - 1;
          while (hiddenIndices.includes(swapIndex) && swapIndex > 0)
            swapIndex--;
          if (!hiddenIndices.includes(swapIndex)) {
            box = getBoundingClientRectFromMultiple(headerGroups[swapIndex]);
            if (e.clientX < box.left + window.scrollX + (box.width / 2)) {
              swapElement = columns[dragIndex];
              columns.splice(dragIndex, 1);
              columns.splice(swapIndex, 0, swapElement);
              forcePopulation = true;
              swapDone = true;
            }
          }
        }
        if ((!swapDone) && dragIndex < headerGroups.length - 1) {
          // Get right headers boundingbox
          swapIndex = dragIndex + 1;
          while (hiddenIndices.includes(swapIndex))
            swapIndex++;
          if (swapIndex < headerGroups.length) {
            box = getBoundingClientRectFromMultiple(headerGroups[swapIndex]);
            if (e.clientX > box.left + window.scrollX + (box.width / 2)) {
              swapElement = columns[dragIndex];
              columns.splice(dragIndex, 1);
              columns.splice(swapIndex, 0, swapElement);
              forcePopulation = true;
              swapDone = true;
            }
          }
        }
    
        // Write back change to storage
        if (swapDone) {
          settings.columnOrder = columns
          writeStorage("columnOrder", JSON.stringify(columns));
        }
    
      }
    
      const mouseDownHandler = function(e) {
        var target = e.target;
        if (target.tagName.toLowerCase() != "td")
          target = target.parentElement;
    
        // Used to check if a dragging has ever happened
        wasDragged = false;
    
        // Create new element which will be displayed as the dragged column
        draggingElement = document.createElement("div")
        draggingElement.classList.add("dragging");
        draggingElement.style.display = "none";
        draggingElement.style.position = "absolute";
        draggingElement.style.overflow = "hidden";
    
        // Get bomhead and bombody elements
        const bh = document.getElementById("bomhead");
        const bb = document.getElementById("bombody");
    
        // Get all compound headers for the current column
        var compoundHeaders;
        if (target.classList.contains("bom-checkbox")) {
          compoundHeaders = Array.from(bh.querySelectorAll("th.bom-checkbox"));
        } else {
          compoundHeaders = [target];
        }
    
        // Create new table which will display the column
        var newTable = document.createElement("table");
        newTable.classList.add("bom");
        newTable.style.background = "white";
        draggingElement.append(newTable);
    
        // Create new header element
        var newHeader = document.createElement("thead");
        newTable.append(newHeader);
    
        // Set up array for storing all placeholder elements
        placeHolderElements = [];
    
        // Add all compound headers to the new thead element and placeholders
        compoundHeaders.forEach(function(h) {
          clone = cloneElementWithDimensions(h);
          newHeader.append(clone);
          placeHolderElements.push(clone);
        });
    
        // Create new body element
        var newBody = document.createElement("tbody");
        newTable.append(newBody);
    
        // Get indices for compound headers
        var idxs = compoundHeaders.map(e => getBomTableHeaderIndex(e));
    
        // For each row in the BOM body...
        var rows = bb.querySelectorAll("tr");
        rows.forEach(function(row) {
          // ..get the cells for the compound column
          const tds = row.querySelectorAll("td");
          var copytds = idxs.map(i => tds[i]);
          // Add them to the new element and the placeholders
          var newRow = document.createElement("tr");
          copytds.forEach(function(td) {
            clone = cloneElementWithDimensions(td);
            newRow.append(clone);
            placeHolderElements.push(clone);
          });
          newBody.append(newRow);
        });
    
        // Compute width for compound header
        var width = compoundHeaders.reduce((acc, x) => acc + x.clientWidth, 0);
        draggingElement.style.width = `${width}px`;
    
        // Insert the new dragging element and disable selection on BOM
        bom.insertBefore(draggingElement, null);
        bom.style.userSelect = "none";
    
        // Determine the mouse position offset
        xOffset = e.screenX - compoundHeaders.reduce((acc, x) => Math.min(acc, x.offsetLeft), compoundHeaders[0].offsetLeft);
        yOffset = e.screenY - compoundHeaders[0].offsetTop;
    
        // Get name for the column in settings.columnOrder
        dragName = getColumnOrderName(target);
    
        // Change text and class for placeholder elements
        placeHolderElements = placeHolderElements.map(function(e) {
          newElem = cloneElementWithDimensions(e);
          newElem.textContent = "";
          newElem.classList.add("placeholder");
          return newElem;
        });
    
        // On next mouse move, the whole BOM needs to be redrawn to show the placeholders
        forcePopulation = true;
    
        // Add listeners for move and up on mouse
        document.addEventListener('mousemove', mouseMoveHandler);
        document.addEventListener('mouseup', mouseUpHandler);
      }
    
      // In netlist mode, there is nothing to reorder
      if (settings.bommode === "netlist")
        return;
    
      // Add mouseDownHandler to every column except the numCol
      bom.querySelectorAll("th")
        .forEach(function(head) {
          if (!head.classList.contains("numCol")) {
            head.onmousedown = mouseDownHandler;
          }
        });
    
    }
    
    function getBoundingClientRectFromMultiple(elements) {
      var elems = Array.from(elements);
    
      if (elems.length == 0)
        return null;
    
      var box = elems.shift()
        .getBoundingClientRect();
    
      elems.forEach(function(elem) {
        var elembox = elem.getBoundingClientRect();
        box.left = Math.min(elembox.left, box.left);
        box.top = Math.min(elembox.top, box.top);
        box.width += elembox.width;
        box.height = Math.max(elembox.height, box.height);
      });
    
      return box;
    }
    
    function cloneElementWithDimensions(elem) {
      var newElem = elem.cloneNode(true);
      newElem.style.height = window.getComputedStyle(elem).height;
      newElem.style.width = window.getComputedStyle(elem).width;
      return newElem;
    }
    
    function getBomTableHeaderIndex(elem) {
      const bh = document.getElementById('bomhead');
      const ths = Array.from(bh.querySelectorAll("th"));
      return ths.indexOf(elem);
    }
    
    function getColumnOrderName(elem) {
      var cname = elem.getAttribute("col_name");
      if (cname === "bom-checkbox")
        return "checkboxes";
      else
        return cname;
    }
    
    function resizableGrid(tablehead) {
      var cols = tablehead.firstElementChild.children;
      var rowWidth = tablehead.offsetWidth;
    
      for (var i = 1; i < cols.length; i++) {
        if (cols[i].classList.contains("bom-checkbox"))
          continue;
        cols[i].style.width = ((cols[i].clientWidth - paddingDiff(cols[i])) * 100 / rowWidth) + '%';
      }
    
      for (var i = 1; i < cols.length - 1; i++) {
        var div = document.createElement('div');
        div.className = "column-width-handle";
        cols[i].appendChild(div);
        setListeners(div);
      }
    
      function setListeners(div) {
        var startX, curCol, nxtCol, curColWidth, nxtColWidth, rowWidth;
    
        div.addEventListener('mousedown', function(e) {
          e.preventDefault();
          e.stopPropagation();
    
          curCol = e.target.parentElement;
          nxtCol = curCol.nextElementSibling;
          startX = e.pageX;
    
          var padding = paddingDiff(curCol);
    
          rowWidth = curCol.parentElement.offsetWidth;
          curColWidth = curCol.clientWidth - padding;
          nxtColWidth = nxtCol.clientWidth - padding;
        });
    
        document.addEventListener('mousemove', function(e) {
          if (startX) {
            var diffX = e.pageX - startX;
            diffX = -Math.min(-diffX, curColWidth - 20);
            diffX = Math.min(diffX, nxtColWidth - 20);
    
            curCol.style.width = ((curColWidth + diffX) * 100 / rowWidth) + '%';
            nxtCol.style.width = ((nxtColWidth - diffX) * 100 / rowWidth) + '%';
            console.log(`${curColWidth + nxtColWidth} ${(curColWidth + diffX) * 100 / rowWidth + (nxtColWidth - diffX) * 100 / rowWidth}`);
          }
        });
    
        document.addEventListener('mouseup', function(e) {
          curCol = undefined;
          nxtCol = undefined;
          startX = undefined;
          nxtColWidth = undefined;
          curColWidth = undefined
        });
      }
    
      function paddingDiff(col) {
    
        if (getStyleVal(col, 'box-sizing') == 'border-box') {
          return 0;
        }
    
        var padLeft = getStyleVal(col, 'padding-left');
        var padRight = getStyleVal(col, 'padding-right');
        return (parseInt(padLeft) + parseInt(padRight));
    
      }
    
      function getStyleVal(elm, css) {
        return (window.getComputedStyle(elm, null).getPropertyValue(css))
      }
    }
    
    ///////////////////////////////////////////////
    
    ///////////////////////////////////////////////
    /* DOM manipulation and misc code */
    
    var bomsplit;
    var canvassplit;
    var initDone = false;
    var bomSortFunction = null;
    var currentSortColumn = null;
    var currentSortOrder = null;
    var currentHighlightedRowId;
    var highlightHandlers = [];
    var footprintIndexToHandler = {};
    var netsToHandler = {};
    var markedFootprints = new Set();
    var highlightedFootprints = [];
    var highlightedNet = null;
    var lastClicked;
    
    function dbg(html) {
      dbgdiv.innerHTML = html;
    }
    
    function redrawIfInitDone() {
      if (initDone) {
        redrawCanvas(allcanvas.front);
        redrawCanvas(allcanvas.back);
      }
    }
    
    function padsVisible(value) {
      writeStorage("padsVisible", value);
      settings.renderPads = value;
      redrawIfInitDone();
    }
    
    function referencesVisible(value) {
      writeStorage("referencesVisible", value);
      settings.renderReferences = value;
      redrawIfInitDone();
    }
    
    function valuesVisible(value) {
      writeStorage("valuesVisible", value);
      settings.renderValues = value;
      redrawIfInitDone();
    }
    
    function tracksVisible(value) {
      writeStorage("tracksVisible", value);
      settings.renderTracks = value;
      redrawIfInitDone();
    }
    
    function zonesVisible(value) {
      writeStorage("zonesVisible", value);
      settings.renderZones = value;
      redrawIfInitDone();
    }
    
    function dnpOutline(value) {
      writeStorage("dnpOutline", value);
      settings.renderDnpOutline = value;
      redrawIfInitDone();
    }
    
    function setDarkMode(value) {
      if (value) {
        topmostdiv.classList.add("dark");
      } else {
        topmostdiv.classList.remove("dark");
      }
      writeStorage("darkmode", value);
      settings.darkMode = value;
      redrawIfInitDone();
    }
    
    function setShowBOMColumn(field, value) {
      if (field === "references") {
        var rl = document.getElementById("reflookup");
        rl.disabled = !value;
        if (!value) {
          rl.value = "";
          updateRefLookup("");
        }
      }
    
      var n = settings.hiddenColumns.indexOf(field);
      if (value) {
        if (n != -1) {
          settings.hiddenColumns.splice(n, 1);
        }
      } else {
        if (n == -1) {
          settings.hiddenColumns.push(field);
        }
      }
    
      writeStorage("hiddenColumns", JSON.stringify(settings.hiddenColumns));
    
      if (initDone) {
        populateBomTable();
      }
    
      redrawIfInitDone();
    }
    
    
    function setFullscreen(value) {
      if (value) {
        document.documentElement.requestFullscreen();
      } else {
        document.exitFullscreen();
      }
    }
    
    function fabricationVisible(value) {
      writeStorage("fabricationVisible", value);
      settings.renderFabrication = value;
      redrawIfInitDone();
    }
    
    function silkscreenVisible(value) {
      writeStorage("silkscreenVisible", value);
      settings.renderSilkscreen = value;
      redrawIfInitDone();
    }
    
    function setHighlightPin1(value) {
      writeStorage("highlightpin1", value);
      settings.highlightpin1 = value;
      redrawIfInitDone();
    }
    
    function getStoredCheckboxRefs(checkbox) {
      function convert(ref) {
        var intref = parseInt(ref);
        if (isNaN(intref)) {
          for (var i = 0; i < pcbdata.footprints.length; i++) {
            if (pcbdata.footprints[i].ref == ref) {
              return i;
            }
          }
          return -1;
        } else {
          return intref;
        }
      }
      if (!(checkbox in settings.checkboxStoredRefs)) {
        var val = readStorage("checkbox_" + checkbox);
        settings.checkboxStoredRefs[checkbox] = val ? val : "";
      }
      if (!settings.checkboxStoredRefs[checkbox]) {
        return new Set();
      } else {
        return new Set(settings.checkboxStoredRefs[checkbox].split(",").map(r => convert(r)).filter(a => a >= 0));
      }
    }
    
    function getCheckboxState(checkbox, references) {
      var storedRefsSet = getStoredCheckboxRefs(checkbox);
      var currentRefsSet = new Set(references.map(r => r[1]));
      // Get difference of current - stored
      var difference = new Set(currentRefsSet);
      for (ref of storedRefsSet) {
        difference.delete(ref);
      }
      if (difference.size == 0) {
        // All the current refs are stored
        return "checked";
      } else if (difference.size == currentRefsSet.size) {
        // None of the current refs are stored
        return "unchecked";
      } else {
        // Some of the refs are stored
        return "indeterminate";
      }
    }
    
    function setBomCheckboxState(checkbox, element, references) {
      var state = getCheckboxState(checkbox, references);
      element.checked = (state == "checked");
      element.indeterminate = (state == "indeterminate");
    }
    
    function createCheckboxChangeHandler(checkbox, references, row) {
      return function () {
        refsSet = getStoredCheckboxRefs(checkbox);
        var markWhenChecked = settings.markWhenChecked == checkbox;
        eventArgs = {
          checkbox: checkbox,
          refs: references,
        }
        if (this.checked) {
          // checkbox ticked
          for (var ref of references) {
            refsSet.add(ref[1]);
          }
          if (markWhenChecked) {
            row.classList.add("checked");
            for (var ref of references) {
              markedFootprints.add(ref[1]);
            }
            drawHighlights();
          }
          eventArgs.state = 'checked';
        } else {
          // checkbox unticked
          for (var ref of references) {
            refsSet.delete(ref[1]);
          }
          if (markWhenChecked) {
            row.classList.remove("checked");
            for (var ref of references) {
              markedFootprints.delete(ref[1]);
            }
            drawHighlights();
          }
          eventArgs.state = 'unchecked';
        }
        settings.checkboxStoredRefs[checkbox] = [...refsSet].join(",");
        writeStorage("checkbox_" + checkbox, settings.checkboxStoredRefs[checkbox]);
        updateCheckboxStats(checkbox);
        EventHandler.emitEvent(IBOM_EVENT_TYPES.CHECKBOX_CHANGE_EVENT, eventArgs);
      }
    }
    
    function clearHighlightedFootprints() {
      if (currentHighlightedRowId) {
        document.getElementById(currentHighlightedRowId).classList.remove("highlighted");
        currentHighlightedRowId = null;
        highlightedFootprints = [];
        highlightedNet = null;
      }
    }
    
    function createRowHighlightHandler(rowid, refs, net) {
      return function () {
        if (currentHighlightedRowId) {
          if (currentHighlightedRowId == rowid) {
            return;
          }
          document.getElementById(currentHighlightedRowId).classList.remove("highlighted");
        }
        document.getElementById(rowid).classList.add("highlighted");
        currentHighlightedRowId = rowid;
        highlightedFootprints = refs ? refs.map(r => r[1]) : [];
        highlightedNet = net;
        drawHighlights();
        EventHandler.emitEvent(
          IBOM_EVENT_TYPES.HIGHLIGHT_EVENT, {
          rowid: rowid,
          refs: refs,
          net: net
        });
      }
    }
    
    function entryMatches(entry) {
      if (settings.bommode == "netlist") {
        // entry is just a net name
        return entry.toLowerCase().indexOf(filter) >= 0;
      }
      // check refs
      if (!settings.hiddenColumns.includes("references")) {
        for (var ref of entry) {
          if (ref[0].toLowerCase().indexOf(filter) >= 0) {
            return true;
          }
        }
      }
      // check fields
      for (var i in config.fields) {
        var f = config.fields[i];
        if (!settings.hiddenColumns.includes(f)) {
          for (var ref of entry) {
            if (pcbdata.bom.fields[ref[1]][i].toLowerCase().indexOf(filter) >= 0) {
              return true;
            }
          }
        }
      }
      return false;
    }
    
    function findRefInEntry(entry) {
      return entry.filter(r => r[0].toLowerCase() == reflookup);
    }
    
    function highlightFilter(s) {
      if (!filter) {
        return s;
      }
      var parts = s.toLowerCase().split(filter);
      if (parts.length == 1) {
        return s;
      }
      var r = "";
      var pos = 0;
      for (var i in parts) {
        if (i > 0) {
          r += '<mark class="highlight">' +
            s.substring(pos, pos + filter.length) +
            '</mark>';
          pos += filter.length;
        }
        r += s.substring(pos, pos + parts[i].length);
        pos += parts[i].length;
      }
      return r;
    }
    
    function checkboxSetUnsetAllHandler(checkboxname) {
      return function () {
        var checkboxnum = 0;
        while (checkboxnum < settings.checkboxes.length &&
          settings.checkboxes[checkboxnum].toLowerCase() != checkboxname.toLowerCase()) {
          checkboxnum++;
        }
        if (checkboxnum >= settings.checkboxes.length) {
          return;
        }
        var allset = true;
        var checkbox;
        var row;
        for (row of bombody.childNodes) {
          checkbox = row.childNodes[checkboxnum + 1].childNodes[0];
          if (!checkbox.checked || checkbox.indeterminate) {
            allset = false;
            break;
          }
        }
        for (row of bombody.childNodes) {
          checkbox = row.childNodes[checkboxnum + 1].childNodes[0];
          checkbox.checked = !allset;
          checkbox.indeterminate = false;
          checkbox.onchange();
        }
      }
    }
    
    function createColumnHeader(name, cls, comparator, is_checkbox = false) {
      var th = document.createElement("TH");
      th.innerHTML = name;
      th.classList.add(cls);
      if (is_checkbox)
        th.setAttribute("col_name", "bom-checkbox");
      else
        th.setAttribute("col_name", name);
      var span = document.createElement("SPAN");
      span.classList.add("sortmark");
      span.classList.add("none");
      th.appendChild(span);
      var spacer = document.createElement("div");
      spacer.className = "column-spacer";
      th.appendChild(spacer);
      spacer.onclick = function () {
        if (currentSortColumn && th !== currentSortColumn) {
          // Currently sorted by another column
          currentSortColumn.childNodes[1].classList.remove(currentSortOrder);
          currentSortColumn.childNodes[1].classList.add("none");
          currentSortColumn = null;
          currentSortOrder = null;
        }
        if (currentSortColumn && th === currentSortColumn) {
          // Already sorted by this column
          if (currentSortOrder == "asc") {
            // Sort by this column, descending order
            bomSortFunction = function (a, b) {
              return -comparator(a, b);
            }
            currentSortColumn.childNodes[1].classList.remove("asc");
            currentSortColumn.childNodes[1].classList.add("desc");
            currentSortOrder = "desc";
          } else {
            // Unsort
            bomSortFunction = null;
            currentSortColumn.childNodes[1].classList.remove("desc");
            currentSortColumn.childNodes[1].classList.add("none");
            currentSortColumn = null;
            currentSortOrder = null;
          }
        } else {
          // Sort by this column, ascending order
          bomSortFunction = comparator;
          currentSortColumn = th;
          currentSortColumn.childNodes[1].classList.remove("none");
          currentSortColumn.childNodes[1].classList.add("asc");
          currentSortOrder = "asc";
        }
        populateBomBody();
      }
      if (is_checkbox) {
        spacer.onclick = fancyDblClickHandler(
          spacer, spacer.onclick, checkboxSetUnsetAllHandler(name));
      }
      return th;
    }
    
    function populateBomHeader(placeHolderColumn = null, placeHolderElements = null) {
      while (bomhead.firstChild) {
        bomhead.removeChild(bomhead.firstChild);
      }
      var tr = document.createElement("TR");
      var th = document.createElement("TH");
      th.classList.add("numCol");
    
      var vismenu = document.createElement("div");
      vismenu.id = "vismenu";
      vismenu.classList.add("menu");
    
      var visbutton = document.createElement("div");
      visbutton.classList.add("visbtn");
      visbutton.classList.add("hideonprint");
    
      var viscontent = document.createElement("div");
      viscontent.classList.add("menu-content");
      viscontent.id = "vismenu-content";
    
      settings.columnOrder.forEach(column => {
        if (typeof column !== "string")
          return;
    
        // Skip empty columns
        if (column === "checkboxes" && settings.checkboxes.length == 0)
          return;
        else if (column === "Quantity" && settings.bommode == "ungrouped")
          return;
    
        var label = document.createElement("label");
        label.classList.add("menu-label");
    
        var input = document.createElement("input");
        input.classList.add("visibility_checkbox");
        input.type = "checkbox";
        input.onchange = function (e) {
          setShowBOMColumn(column, e.target.checked)
        };
        input.checked = !(settings.hiddenColumns.includes(column));
    
        label.appendChild(input);
        if (column.length > 0)
          label.append(column[0].toUpperCase() + column.slice(1));
    
        viscontent.appendChild(label);
      });
    
      viscontent.childNodes[0].classList.add("menu-label-top");
    
      vismenu.appendChild(visbutton);
      if (settings.bommode != "netlist") {
        vismenu.appendChild(viscontent);
        th.appendChild(vismenu);
      }
      tr.appendChild(th);
    
      var checkboxCompareClosure = function (checkbox) {
        return (a, b) => {
          var stateA = getCheckboxState(checkbox, a);
          var stateB = getCheckboxState(checkbox, b);
          if (stateA > stateB) return -1;
          if (stateA < stateB) return 1;
          return 0;
        }
      }
      var stringFieldCompareClosure = function (fieldIndex) {
        return (a, b) => {
          var fa = pcbdata.bom.fields[a[0][1]][fieldIndex];
          var fb = pcbdata.bom.fields[b[0][1]][fieldIndex];
          if (fa != fb) return fa > fb ? 1 : -1;
          else return 0;
        }
      }
      var referenceRegex = /(?<prefix>[^0-9]+)(?<number>[0-9]+)/;
      var compareRefs = (a, b) => {
        var ra = referenceRegex.exec(a);
        var rb = referenceRegex.exec(b);
        if (ra === null || rb === null) {
          if (a != b) return a > b ? 1 : -1;
          return 0;
        } else {
          if (ra.groups.prefix != rb.groups.prefix) {
            return ra.groups.prefix > rb.groups.prefix ? 1 : -1;
          }
          if (ra.groups.number != rb.groups.number) {
            return parseInt(ra.groups.number) > parseInt(rb.groups.number) ? 1 : -1;
          }
          return 0;
        }
      }
      if (settings.bommode == "netlist") {
        th = createColumnHeader("Net name", "bom-netname", (a, b) => {
          if (a > b) return -1;
          if (a < b) return 1;
          return 0;
        });
        tr.appendChild(th);
      } else {
        // Filter hidden columns
        var columns = settings.columnOrder.filter(e => !settings.hiddenColumns.includes(e));
        var valueIndex = config.fields.indexOf("Value");
        var footprintIndex = config.fields.indexOf("Footprint");
        columns.forEach((column) => {
          if (column === placeHolderColumn) {
            var n = 1;
            if (column === "checkboxes")
              n = settings.checkboxes.length;
            for (i = 0; i < n; i++) {
              td = placeHolderElements.shift();
              tr.appendChild(td);
            }
            return;
          } else if (column === "checkboxes") {
            for (var checkbox of settings.checkboxes) {
              th = createColumnHeader(
                checkbox, "bom-checkbox", checkboxCompareClosure(checkbox), true);
              tr.appendChild(th);
            }
          } else if (column === "References") {
            tr.appendChild(createColumnHeader("References", "references", (a, b) => {
              var i = 0;
              while (i < a.length && i < b.length) {
                if (a[i] != b[i]) return compareRefs(a[i][0], b[i][0]);
                i++;
              }
              return a.length - b.length;
            }));
          } else if (column === "Value") {
            tr.appendChild(createColumnHeader("Value", "value", (a, b) => {
              var ra = a[0][1], rb = b[0][1];
              return valueCompare(
                pcbdata.bom.parsedValues[ra], pcbdata.bom.parsedValues[rb],
                pcbdata.bom.fields[ra][valueIndex], pcbdata.bom.fields[rb][valueIndex]);
            }));
            return;
          } else if (column === "Footprint") {
            tr.appendChild(createColumnHeader(
              "Footprint", "footprint", stringFieldCompareClosure(footprintIndex)));
          } else if (column === "Quantity" && settings.bommode == "grouped") {
            tr.appendChild(createColumnHeader("Quantity", "quantity", (a, b) => {
              return a.length - b.length;
            }));
          } else {
            // Other fields
            var i = config.fields.indexOf(column);
            if (i < 0)
              return;
            tr.appendChild(createColumnHeader(
              column, `field${i + 1}`, stringFieldCompareClosure(i)));
          }
        });
      }
      bomhead.appendChild(tr);
    }
    
    function populateBomBody(placeholderColumn = null, placeHolderElements = null) {
      const urlRegex = /^(https?:\/\/[^\s\/$.?#][^\s]*|file:\/\/([a-zA-Z]:|\/)[^\x00]+)$/;
      while (bom.firstChild) {
        bom.removeChild(bom.firstChild);
      }
      highlightHandlers = [];
      footprintIndexToHandler = {};
      netsToHandler = {};
      currentHighlightedRowId = null;
      var first = true;
      if (settings.bommode == "netlist") {
        bomtable = pcbdata.nets.slice();
      } else {
        switch (settings.canvaslayout) {
          case 'F':
            bomtable = pcbdata.bom.F.slice();
            break;
          case 'FB':
            bomtable = pcbdata.bom.both.slice();
            break;
          case 'B':
            bomtable = pcbdata.bom.B.slice();
            break;
        }
        if (settings.bommode == "ungrouped") {
          // expand bom table
          expandedTable = []
          for (var bomentry of bomtable) {
            for (var ref of bomentry) {
              expandedTable.push([ref]);
            }
          }
          bomtable = expandedTable;
        }
      }
      if (bomSortFunction) {
        bomtable = bomtable.sort(bomSortFunction);
      }
      for (var i in bomtable) {
        var bomentry = bomtable[i];
        if (filter && !entryMatches(bomentry)) {
          continue;
        }
        var references = null;
        var netname = null;
        var tr = document.createElement("TR");
        var td = document.createElement("TD");
        var rownum = +i + 1;
        tr.id = "bomrow" + rownum;
        td.textContent = rownum;
        tr.appendChild(td);
        if (settings.bommode == "netlist") {
          netname = bomentry;
          td = document.createElement("TD");
          td.innerHTML = highlightFilter(netname ? netname : "&lt;no net&gt;");
          tr.appendChild(td);
        } else {
          if (reflookup) {
            references = findRefInEntry(bomentry);
            if (references.length == 0) {
              continue;
            }
          } else {
            references = bomentry;
          }
          // Filter hidden columns
          var columns = settings.columnOrder.filter(e => !settings.hiddenColumns.includes(e));
          columns.forEach((column) => {
            if (column === placeholderColumn) {
              var n = 1;
              if (column === "checkboxes")
                n = settings.checkboxes.length;
              for (i = 0; i < n; i++) {
                td = placeHolderElements.shift();
                tr.appendChild(td);
              }
              return;
            } else if (column === "checkboxes") {
              for (var checkbox of settings.checkboxes) {
                if (checkbox) {
                  td = document.createElement("TD");
                  var input = document.createElement("input");
                  input.type = "checkbox";
                  input.onchange = createCheckboxChangeHandler(checkbox, references, tr);
                  setBomCheckboxState(checkbox, input, references);
                  if (input.checked && settings.markWhenChecked == checkbox) {
                    tr.classList.add("checked");
                  }
                  td.appendChild(input);
                  tr.appendChild(td);
                }
              }
            } else if (column === "References") {
              td = document.createElement("TD");
              td.innerHTML = highlightFilter(references.map(r => r[0]).join(", "));
              tr.appendChild(td);
            } else if (column === "Quantity" && settings.bommode == "grouped") {
              // Quantity
              td = document.createElement("TD");
              td.textContent = references.length;
              tr.appendChild(td);
            } else {
              // All the other fields
              var field_index = config.fields.indexOf(column)
              if (field_index < 0)
                return;
              var valueSet = new Set();
              references.map(r => r[1]).forEach((id) => valueSet.add(pcbdata.bom.fields[id][field_index]));
              td = document.createElement("TD");
              var output = new Array();
              for (let item of valueSet) {
                const visible = highlightFilter(item);
                if (typeof item === 'string' && item.match(urlRegex)) {
                  output.push(`<a href="${item}" target="_blank">${visible}</a>`);
                } else {
                  output.push(visible);
                }
              }
              td.innerHTML = output.join(", ");
              tr.appendChild(td);
            }
          });
        }
        bom.appendChild(tr);
        var handler = createRowHighlightHandler(tr.id, references, netname);
        tr.onmousemove = handler;
        highlightHandlers.push({
          id: tr.id,
          handler: handler,
        });
        if (references !== null) {
          for (var refIndex of references.map(r => r[1])) {
            footprintIndexToHandler[refIndex] = handler;
          }
        }
        if (netname !== null) {
          netsToHandler[netname] = handler;
        }
        if ((filter || reflookup) && first) {
          handler();
          first = false;
        }
      }
      EventHandler.emitEvent(
        IBOM_EVENT_TYPES.BOM_BODY_CHANGE_EVENT, {
        filter: filter,
        reflookup: reflookup,
        checkboxes: settings.checkboxes,
        bommode: settings.bommode,
      });
    }
    
    function highlightPreviousRow() {
      if (!currentHighlightedRowId) {
        highlightHandlers[highlightHandlers.length - 1].handler();
      } else {
        if (highlightHandlers.length > 1 &&
          highlightHandlers[0].id == currentHighlightedRowId) {
          highlightHandlers[highlightHandlers.length - 1].handler();
        } else {
          for (var i = 0; i < highlightHandlers.length - 1; i++) {
            if (highlightHandlers[i + 1].id == currentHighlightedRowId) {
              highlightHandlers[i].handler();
              break;
            }
          }
        }
      }
      smoothScrollToRow(currentHighlightedRowId);
    }
    
    function highlightNextRow() {
      if (!currentHighlightedRowId) {
        highlightHandlers[0].handler();
      } else {
        if (highlightHandlers.length > 1 &&
          highlightHandlers[highlightHandlers.length - 1].id == currentHighlightedRowId) {
          highlightHandlers[0].handler();
        } else {
          for (var i = 1; i < highlightHandlers.length; i++) {
            if (highlightHandlers[i - 1].id == currentHighlightedRowId) {
              highlightHandlers[i].handler();
              break;
            }
          }
        }
      }
      smoothScrollToRow(currentHighlightedRowId);
    }
    
    function populateBomTable() {
      populateBomHeader();
      populateBomBody();
      setBomHandlers();
      resizableGrid(bomhead);
    }
    
    function footprintsClicked(footprintIndexes) {
      var lastClickedIndex = footprintIndexes.indexOf(lastClicked);
      for (var i = 1; i <= footprintIndexes.length; i++) {
        var refIndex = footprintIndexes[(lastClickedIndex + i) % footprintIndexes.length];
        if (refIndex in footprintIndexToHandler) {
          lastClicked = refIndex;
          footprintIndexToHandler[refIndex]();
          smoothScrollToRow(currentHighlightedRowId);
          break;
        }
      }
    }
    
    function netClicked(net) {
      if (net in netsToHandler) {
        netsToHandler[net]();
        smoothScrollToRow(currentHighlightedRowId);
      } else {
        clearHighlightedFootprints();
        highlightedNet = net;
        drawHighlights();
      }
    }
    
    function updateFilter(input) {
      filter = input.toLowerCase();
      populateBomTable();
    }
    
    function updateRefLookup(input) {
      reflookup = input.toLowerCase();
      populateBomTable();
    }
    
    function changeCanvasLayout(layout) {
      document.getElementById("fl-btn").classList.remove("depressed");
      document.getElementById("fb-btn").classList.remove("depressed");
      document.getElementById("bl-btn").classList.remove("depressed");
      switch (layout) {
        case 'F':
          document.getElementById("fl-btn").classList.add("depressed");
          if (settings.bomlayout != "bom-only") {
            canvassplit.collapse(1);
          }
          break;
        case 'B':
          document.getElementById("bl-btn").classList.add("depressed");
          if (settings.bomlayout != "bom-only") {
            canvassplit.collapse(0);
          }
          break;
        default:
          document.getElementById("fb-btn").classList.add("depressed");
          if (settings.bomlayout != "bom-only") {
            canvassplit.setSizes([50, 50]);
          }
      }
      settings.canvaslayout = layout;
      writeStorage("canvaslayout", layout);
      resizeAll();
      changeBomMode(settings.bommode);
    }
    
    function populateMetadata() {
      document.getElementById("title").innerHTML = pcbdata.metadata.title;
      document.getElementById("revision").innerHTML = "Rev: " + pcbdata.metadata.revision;
      document.getElementById("company").innerHTML = pcbdata.metadata.company;
      document.getElementById("filedate").innerHTML = pcbdata.metadata.date;
      if (pcbdata.metadata.title != "") {
        document.title = pcbdata.metadata.title + " BOM";
      }
      // Calculate board stats
      var fp_f = 0,
        fp_b = 0,
        pads_f = 0,
        pads_b = 0,
        pads_th = 0;
      for (var i = 0; i < pcbdata.footprints.length; i++) {
        if (pcbdata.bom.skipped.includes(i)) continue;
        var mod = pcbdata.footprints[i];
        if (mod.layer == "F") {
          fp_f++;
        } else {
          fp_b++;
        }
        for (var pad of mod.pads) {
          if (pad.type == "th") {
            pads_th++;
          } else {
            if (pad.layers.includes("F")) {
              pads_f++;
            }
            if (pad.layers.includes("B")) {
              pads_b++;
            }
          }
        }
      }
      document.getElementById("stats-components-front").innerHTML = fp_f;
      document.getElementById("stats-components-back").innerHTML = fp_b;
      document.getElementById("stats-components-total").innerHTML = fp_f + fp_b;
      document.getElementById("stats-groups-front").innerHTML = pcbdata.bom.F.length;
      document.getElementById("stats-groups-back").innerHTML = pcbdata.bom.B.length;
      document.getElementById("stats-groups-total").innerHTML = pcbdata.bom.both.length;
      document.getElementById("stats-smd-pads-front").innerHTML = pads_f;
      document.getElementById("stats-smd-pads-back").innerHTML = pads_b;
      document.getElementById("stats-smd-pads-total").innerHTML = pads_f + pads_b;
      document.getElementById("stats-th-pads").innerHTML = pads_th;
      // Update version string
      document.getElementById("github-link").innerHTML = "InteractiveHtmlBom&nbsp;" +
        /^v\d+\.\d+/.exec(pcbdata.ibom_version)[0];
    }
    
    function changeBomLayout(layout) {
      document.getElementById("bom-btn").classList.remove("depressed");
      document.getElementById("lr-btn").classList.remove("depressed");
      document.getElementById("tb-btn").classList.remove("depressed");
      switch (layout) {
        case 'bom-only':
          document.getElementById("bom-btn").classList.add("depressed");
          if (bomsplit) {
            bomsplit.destroy();
            bomsplit = null;
            canvassplit.destroy();
            canvassplit = null;
          }
          document.getElementById("frontcanvas").style.display = "none";
          document.getElementById("backcanvas").style.display = "none";
          document.getElementById("bot").style.height = "";
          break;
        case 'top-bottom':
          document.getElementById("tb-btn").classList.add("depressed");
          document.getElementById("frontcanvas").style.display = "";
          document.getElementById("backcanvas").style.display = "";
          document.getElementById("bot").style.height = "calc(100% - 80px)";
          document.getElementById("bomdiv").classList.remove("split-horizontal");
          document.getElementById("canvasdiv").classList.remove("split-horizontal");
          document.getElementById("frontcanvas").classList.add("split-horizontal");
          document.getElementById("backcanvas").classList.add("split-horizontal");
          if (bomsplit) {
            bomsplit.destroy();
            bomsplit = null;
            canvassplit.destroy();
            canvassplit = null;
          }
          bomsplit = Split(['#bomdiv', '#canvasdiv'], {
            sizes: [50, 50],
            onDragEnd: resizeAll,
            direction: "vertical",
            gutterSize: 5
          });
          canvassplit = Split(['#frontcanvas', '#backcanvas'], {
            sizes: [50, 50],
            gutterSize: 5,
            onDragEnd: resizeAll
          });
          break;
        case 'left-right':
          document.getElementById("lr-btn").classList.add("depressed");
          document.getElementById("frontcanvas").style.display = "";
          document.getElementById("backcanvas").style.display = "";
          document.getElementById("bot").style.height = "calc(100% - 80px)";
          document.getElementById("bomdiv").classList.add("split-horizontal");
          document.getElementById("canvasdiv").classList.add("split-horizontal");
          document.getElementById("frontcanvas").classList.remove("split-horizontal");
          document.getElementById("backcanvas").classList.remove("split-horizontal");
          if (bomsplit) {
            bomsplit.destroy();
            bomsplit = null;
            canvassplit.destroy();
            canvassplit = null;
          }
          bomsplit = Split(['#bomdiv', '#canvasdiv'], {
            sizes: [50, 50],
            onDragEnd: resizeAll,
            gutterSize: 5
          });
          canvassplit = Split(['#frontcanvas', '#backcanvas'], {
            sizes: [50, 50],
            gutterSize: 5,
            direction: "vertical",
            onDragEnd: resizeAll
          });
      }
      settings.bomlayout = layout;
      writeStorage("bomlayout", layout);
      changeCanvasLayout(settings.canvaslayout);
    }
    
    function changeBomMode(mode) {
      document.getElementById("bom-grouped-btn").classList.remove("depressed");
      document.getElementById("bom-ungrouped-btn").classList.remove("depressed");
      document.getElementById("bom-netlist-btn").classList.remove("depressed");
      var chkbxs = document.getElementsByClassName("visibility_checkbox");
    
      switch (mode) {
        case 'grouped':
          document.getElementById("bom-grouped-btn").classList.add("depressed");
          for (var i = 0; i < chkbxs.length; i++) {
            chkbxs[i].disabled = false;
          }
          break;
        case 'ungrouped':
          document.getElementById("bom-ungrouped-btn").classList.add("depressed");
          for (var i = 0; i < chkbxs.length; i++) {
            chkbxs[i].disabled = false;
          }
          break;
        case 'netlist':
          document.getElementById("bom-netlist-btn").classList.add("depressed");
          for (var i = 0; i < chkbxs.length; i++) {
            chkbxs[i].disabled = true;
          }
      }
    
      writeStorage("bommode", mode);
      if (mode != settings.bommode) {
        settings.bommode = mode;
        bomSortFunction = null;
        currentSortColumn = null;
        currentSortOrder = null;
        clearHighlightedFootprints();
      }
      populateBomTable();
    }
    
    function focusFilterField() {
      focusInputField(document.getElementById("filter"));
    }
    
    function focusRefLookupField() {
      focusInputField(document.getElementById("reflookup"));
    }
    
    function toggleBomCheckbox(bomrowid, checkboxnum) {
      if (!bomrowid || checkboxnum > settings.checkboxes.length) {
        return;
      }
      var bomrow = document.getElementById(bomrowid);
      var checkbox = bomrow.childNodes[checkboxnum].childNodes[0];
      checkbox.checked = !checkbox.checked;
      checkbox.indeterminate = false;
      checkbox.onchange();
    }
    
    function checkBomCheckbox(bomrowid, checkboxname) {
      var checkboxnum = 0;
      while (checkboxnum < settings.checkboxes.length &&
        settings.checkboxes[checkboxnum].toLowerCase() != checkboxname.toLowerCase()) {
        checkboxnum++;
      }
      if (!bomrowid || checkboxnum >= settings.checkboxes.length) {
        return;
      }
      var bomrow = document.getElementById(bomrowid);
      var checkbox = bomrow.childNodes[checkboxnum + 1].childNodes[0];
      checkbox.checked = true;
      checkbox.indeterminate = false;
      checkbox.onchange();
    }
    
    function setBomCheckboxes(value) {
      writeStorage("bomCheckboxes", value);
      settings.checkboxes = value.split(",").map((e) => e.trim()).filter((e) => e);
      prepCheckboxes();
      populateMarkWhenCheckedOptions();
      setMarkWhenChecked(settings.markWhenChecked);
    }
    
    function setMarkWhenChecked(value) {
      writeStorage("markWhenChecked", value);
      settings.markWhenChecked = value;
      markedFootprints.clear();
      for (var ref of (value ? getStoredCheckboxRefs(value) : [])) {
        markedFootprints.add(ref);
      }
      populateBomTable();
      drawHighlights();
    }
    
    function prepCheckboxes() {
      var table = document.getElementById("checkbox-stats");
      while (table.childElementCount > 1) {
        table.removeChild(table.lastChild);
      }
      if (settings.checkboxes.length) {
        table.style.display = "";
      } else {
        table.style.display = "none";
      }
      for (var checkbox of settings.checkboxes) {
        var tr = document.createElement("TR");
        var td = document.createElement("TD");
        td.innerHTML = checkbox;
        tr.appendChild(td);
        td = document.createElement("TD");
        td.id = "checkbox-stats-" + checkbox;
        var progressbar = document.createElement("div");
        progressbar.classList.add("bar");
        td.appendChild(progressbar);
        var text = document.createElement("div");
        text.classList.add("text");
        td.appendChild(text);
        tr.appendChild(td);
        table.appendChild(tr);
        updateCheckboxStats(checkbox);
      }
    }
    
    function populateMarkWhenCheckedOptions() {
      var container = document.getElementById("markWhenCheckedContainer");
    
      if (settings.checkboxes.length == 0) {
        container.parentElement.style.display = "none";
        return;
      }
    
      container.innerHTML = '';
      container.parentElement.style.display = "inline-block";
    
      function createOption(name, displayName) {
        var id = "markWhenChecked-" + name;
    
        var div = document.createElement("div");
        div.classList.add("radio-container");
    
        var input = document.createElement("input");
        input.type = "radio";
        input.name = "markWhenChecked";
        input.value = name;
        input.id = id;
        input.onchange = () => setMarkWhenChecked(name);
        div.appendChild(input);
    
        // Preserve the selected element when the checkboxes change
        if (name == settings.markWhenChecked) {
          input.checked = true;
        }
    
        var label = document.createElement("label");
        label.innerHTML = displayName;
        label.htmlFor = id;
        div.appendChild(label);
    
        container.appendChild(div);
      }
      createOption("", "None");
      for (var checkbox of settings.checkboxes) {
        createOption(checkbox, checkbox);
      }
    }
    
    function updateCheckboxStats(checkbox) {
      var checked = getStoredCheckboxRefs(checkbox).size;
      var total = pcbdata.footprints.length - pcbdata.bom.skipped.length;
      var percent = checked * 100.0 / total;
      var td = document.getElementById("checkbox-stats-" + checkbox);
      td.firstChild.style.width = percent + "%";
      td.lastChild.innerHTML = checked + "/" + total + " (" + Math.round(percent) + "%)";
    }
    
    function constrain(number, min, max){
      return Math.min(Math.max(parseInt(number), min), max);
    }
    
    document.onkeydown = function (e) {
      switch (e.key) {
        case "n":
          if (document.activeElement.type == "text") {
            return;
          }
          if (currentHighlightedRowId !== null) {
            checkBomCheckbox(currentHighlightedRowId, "placed");
            highlightNextRow();
            e.preventDefault();
          }
          break;
        case "ArrowUp":
          highlightPreviousRow();
          e.preventDefault();
          break;
        case "ArrowDown":
          highlightNextRow();
          e.preventDefault();
          break;
        case "ArrowLeft":
        case "ArrowRight":
          if (document.activeElement.type != "text"){
            e.preventDefault();
            let boardRotationElement = document.getElementById("boardRotation")
            settings.boardRotation = parseInt(boardRotationElement.value);  // degrees / 5
            if (e.key == "ArrowLeft"){
                settings.boardRotation += 3;  // 15 degrees
            }
            else{
                settings.boardRotation -= 3;
            }
            settings.boardRotation = constrain(settings.boardRotation, boardRotationElement.min, boardRotationElement.max);
            boardRotationElement.value = settings.boardRotation
            setBoardRotation(settings.boardRotation);
          }
          break;
        default:
          break;
      }
      if (e.altKey) {
        switch (e.key) {
          case "f":
            focusFilterField();
            e.preventDefault();
            break;
          case "r":
            focusRefLookupField();
            e.preventDefault();
            break;
          case "z":
            changeBomLayout("bom-only");
            e.preventDefault();
            break;
          case "x":
            changeBomLayout("left-right");
            e.preventDefault();
            break;
          case "c":
            changeBomLayout("top-bottom");
            e.preventDefault();
            break;
          case "v":
            changeCanvasLayout("F");
            e.preventDefault();
            break;
          case "b":
            changeCanvasLayout("FB");
            e.preventDefault();
            break;
          case "n":
            changeCanvasLayout("B");
            e.preventDefault();
            break;
          default:
            break;
        }
        if (e.key >= '1' && e.key <= '9') {
          toggleBomCheckbox(currentHighlightedRowId, parseInt(e.key));
          e.preventDefault();
        }
      }
    }
    
    function hideNetlistButton() {
      document.getElementById("bom-ungrouped-btn").classList.remove("middle-button");
      document.getElementById("bom-ungrouped-btn").classList.add("right-most-button");
      document.getElementById("bom-netlist-btn").style.display = "none";
    }
    
    window.onload = function (e) {
      initUtils();
      initRender();
      initStorage();
      initDefaults();
      cleanGutters();
      populateMetadata();
      dbgdiv = document.getElementById("dbg");
      bom = document.getElementById("bombody");
      bomhead = document.getElementById("bomhead");
      filter = "";
      reflookup = "";
      if (!("nets" in pcbdata)) {
        hideNetlistButton();
      }
      initDone = true;
      setBomCheckboxes(document.getElementById("bomCheckboxes").value);
      // Triggers render
      changeBomLayout(settings.bomlayout);
    
      // Users may leave fullscreen without touching the checkbox. Uncheck.
      document.addEventListener('fullscreenchange', () => {
        if (!document.fullscreenElement)
          document.getElementById('fullscreenCheckbox').checked = false;
      });
    }
    
    window.onresize = resizeAll;
    window.matchMedia("print").addListener(resizeAll);
    
    ///////////////////////////////////////////////
    
    ///////////////////////////////////////////////
    
    ///////////////////////////////////////////////
      </script>
    </head>
    
    <body>
    
    <div id="topmostdiv" class="topmostdiv">
      <div id="top">
        <div style="float: right; height: 100%;">
          <div class="hideonprint menu" style="float: right; top: 8px;">
            <button class="menubtn"></button>
            <div class="menu-content">
              <label class="menu-label menu-label-top" style="width: calc(50% - 18px)">
                <input id="darkmodeCheckbox" type="checkbox" onchange="setDarkMode(this.checked)">
                Dark mode
              </label><!-- This comment eats space! All of it!
              --><label class="menu-label menu-label-top" style="width: calc(50% - 17px); border-left: 0;">
                <input id="fullscreenCheckbox" type="checkbox" onchange="setFullscreen(this.checked)">
                Full Screen
              </label>
              <label class="menu-label" style="width: calc(50% - 18px)">
                <input id="fabricationCheckbox" type="checkbox" checked onchange="fabricationVisible(this.checked)">
                Fab layer
              </label><!-- This comment eats space! All of it!
              --><label class="menu-label" style="width: calc(50% - 17px); border-left: 0;">
                <input id="silkscreenCheckbox" type="checkbox" checked onchange="silkscreenVisible(this.checked)">
                Silkscreen
              </label>
              <label class="menu-label" style="width: calc(50% - 18px)">
                <input id="referencesCheckbox" type="checkbox" checked onchange="referencesVisible(this.checked)">
                References
              </label><!-- This comment eats space! All of it!
              --><label class="menu-label" style="width: calc(50% - 17px); border-left: 0;">
                <input id="valuesCheckbox" type="checkbox" checked onchange="valuesVisible(this.checked)">
                Values
              </label>
              <div id="tracksAndZonesCheckboxes">
                <label class="menu-label" style="width: calc(50% - 18px)">
                  <input id="tracksCheckbox" type="checkbox" checked onchange="tracksVisible(this.checked)">
                  Tracks
                </label><!-- This comment eats space! All of it!
                --><label class="menu-label" style="width: calc(50% - 17px); border-left: 0;">
                  <input id="zonesCheckbox" type="checkbox" checked onchange="zonesVisible(this.checked)">
                  Zones
                </label>
              </div>
              <label class="menu-label" style="width: calc(50% - 18px)">
                <input id="padsCheckbox" type="checkbox" checked onchange="padsVisible(this.checked)">
                Pads
              </label><!-- This comment eats space! All of it!
              --><label class="menu-label" style="width: calc(50% - 17px); border-left: 0;">
                <input id="dnpOutlineCheckbox" type="checkbox" checked onchange="dnpOutline(this.checked)">
                DNP outlined
              </label>
              <label class="menu-label">
                <input id="highlightpin1Checkbox" type="checkbox" onchange="setHighlightPin1(this.checked)">
                Highlight first pin
              </label>
              <label class="menu-label">
                <input id="dragCheckbox" type="checkbox" checked onchange="setRedrawOnDrag(this.checked)">
                Continuous redraw on drag
              </label>
              <label class="menu-label">
                <span>Board rotation</span>
                <span style="float: right"><span id="rotationDegree">0</span>&#176;</span>
                <input id="boardRotation" type="range" min="-36" max="36" value="0" class="slider" oninput="setBoardRotation(this.value)">
              </label>
              <label class="menu-label">
                <input id="offsetBackRotationCheckbox" type="checkbox" onchange="setOffsetBackRotation(this.checked)">
                Offset back rotation
              </label>
              <label class="menu-label">
                <div style="margin-left: 5px">Bom checkboxes</div>
                <input id="bomCheckboxes" class="menu-textbox" type=text
                       oninput="setBomCheckboxes(this.value)">
              </label>
              <label class="menu-label">
                <div style="margin-left: 5px">Mark when checked</div>
                <div id="markWhenCheckedContainer"></div>
              </label>
              <label class="menu-label">
                <span class="shameless-plug">
                  <span>Created using</span>
                  <a id="github-link" target="blank" href="https://github.com/openscopeproject/InteractiveHtmlBom">InteractiveHtmlBom</a>
                  <a target="blank" title="Mouse and keyboard help" href="https://github.com/openscopeproject/InteractiveHtmlBom/wiki/Usage#bom-page-mouse-actions" style="text-decoration: none;"><label class="help-link">?</label></a>
                </span>
              </label>
            </div>
          </div>
          <div class="button-container hideonprint"
               style="float: right; position: relative; top: 8px">
            <button id="fl-btn" class="left-most-button" onclick="changeCanvasLayout('F')"
                    title="Front only">F
            </button>
            <button id="fb-btn" class="middle-button" onclick="changeCanvasLayout('FB')"
                    title="Front and Back">FB
            </button>
            <button id="bl-btn" class="right-most-button" onclick="changeCanvasLayout('B')"
                    title="Back only">B
            </button>
          </div>
          <div class="button-container hideonprint"
               style="float: right; position: relative; top: 8px">
            <button id="bom-btn" class="left-most-button" onclick="changeBomLayout('bom-only')"
                    title="BOM only"></button>
            <button id="lr-btn" class="middle-button" onclick="changeBomLayout('left-right')"
                    title="BOM left, drawings right"></button>
            <button id="tb-btn" class="right-most-button" onclick="changeBomLayout('top-bottom')"
                    title="BOM top, drawings bot"></button>
          </div>
          <div class="button-container hideonprint"
               style="float: right; position: relative; top: 8px">
            <button id="bom-grouped-btn" class="left-most-button" onclick="changeBomMode('grouped')"
                    title="Grouped BOM"></button>
            <button id="bom-ungrouped-btn" class="middle-button" onclick="changeBomMode('ungrouped')"
                    title="Ungrouped BOM"></button>
            <button id="bom-netlist-btn" class="right-most-button" onclick="changeBomMode('netlist')"
                    title="Netlist"></button>
          </div>
          <div class="hideonprint menu" style="float: right; top: 8px;">
            <button class="statsbtn"></button>
            <div class="menu-content">
              <table class="stats">
                <tbody>
                  <tr>
                    <td width="40%">Board stats</td>
                    <td>Front</td>
                    <td>Back</td>
                    <td>Total</td>
                  </tr>
                  <tr>
                    <td>Components</td>
                    <td id="stats-components-front">~</td>
                    <td id="stats-components-back">~</td>
                    <td id="stats-components-total">~</td>
                  </tr>
                  <tr>
                    <td>Groups</td>
                    <td id="stats-groups-front">~</td>
                    <td id="stats-groups-back">~</td>
                    <td id="stats-groups-total">~</td>
                  </tr>
                  <tr>
                    <td>SMD pads</td>
                    <td id="stats-smd-pads-front">~</td>
                    <td id="stats-smd-pads-back">~</td>
                    <td id="stats-smd-pads-total">~</td>
                  </tr>
                  <tr>
                    <td>TH pads</td>
                    <td colspan=3 id="stats-th-pads">~</td>
                  </tr>
                </tbody>
              </table>
              <table class="stats">
                <col width="40%"/><col />
                <tbody id="checkbox-stats">
                  <tr>
                    <td colspan=2 style="border-top: 0">Checkboxes</td>
                  </tr>
                </tbody>
              </table>
            </div>
          </div>
          <div class="hideonprint menu" style="float: right; top: 8px;">
            <button class="iobtn"></button>
            <div class="menu-content">
              <div class="menu-label menu-label-top">
                <div style="margin-left: 5px;">Save board image</div>
                <div class="flexbox">
                  <input id="render-save-width" class="menu-textbox" type="text" value="1000" placeholder="Width"
                      style="flex-grow: 1; width: 50px;" oninput="validateSaveImgDimension(this)">
                  <span>X</span>
                  <input id="render-save-height" class="menu-textbox" type="text" value="1000" placeholder="Height"
                      style="flex-grow: 1; width: 50px;" oninput="validateSaveImgDimension(this)">
                </div>
                <label>
                  <input id="render-save-transparent" type="checkbox">
                  Transparent background
                </label>
                <div class="flexbox">
                  <button class="savebtn" onclick="saveImage('F')">Front</button>
                  <button class="savebtn" onclick="saveImage('B')">Back</button>
                </div>
              </div>
              <div class="menu-label">
                <span style="margin-left: 5px;">Config and checkbox state</span>
                <div class="flexbox">
                  <button class="savebtn" onclick="saveSettings()">Export</button>
                  <button class="savebtn" onclick="loadSettings()">Import</button>
                </div>
              </div>
              <div class="menu-label">
                <span style="margin-left: 5px;">Save bom table as</span>
                <div class="flexbox">
                  <button class="savebtn" onclick="saveBomTable('csv')">csv</button>
                  <button class="savebtn" onclick="saveBomTable('txt')">txt</button>
                </div>
              </div>
            </div>
          </div>
        </div>
        <div id="fileinfodiv" style="overflow: auto;">
          <table class="fileinfo">
            <tbody>
              <tr>
                <td id="title" class="title" style="width: 70%">
                  Title
                </td>
                <td id="revision" class="title" style="width: 30%">
                  Revision
                </td>
              </tr>
              <tr>
                <td id="company">
                  Company
                </td>
                <td id="filedate">
                  Date
                </td>
              </tr>
            </tbody>
          </table>
        </div>
      </div>
      <div id="bot" class="split" style="height: calc(100% - 80px)">
        <div id="bomdiv" class="split split-horizontal">
          <div style="width: 100%">
            <input id="reflookup" class="textbox searchbox reflookup hideonprint" type="text" placeholder="Ref lookup"
                   oninput="updateRefLookup(this.value)">
            <input id="filter" class="textbox searchbox filter hideonprint" type="text" placeholder="Filter"
                   oninput="updateFilter(this.value)">
            <div class="button-container hideonprint" style="float: left; margin: 0;">
              <button id="copy" title="Copy bom table to clipboard"
                   onclick="saveBomTable('clipboard')"></button>
            </div>
          </div>
          <div id="dbg"></div>
          <table class="bom" id="bomtable">
            <thead id="bomhead">
            </thead>
            <tbody id="bombody">
            </tbody>
          </table>
        </div>
        <div id="canvasdiv" class="split split-horizontal">
          <div id="frontcanvas" class="split" touch-action="none" style="overflow: hidden">
            <div style="position: relative; width: 100%; height: 100%;">
              <canvas id="F_bg" style="position: absolute; left: 0; top: 0; z-index: 0;"></canvas>
              <canvas id="F_fab" style="position: absolute; left: 0; top: 0; z-index: 1;"></canvas>
              <canvas id="F_slk" style="position: absolute; left: 0; top: 0; z-index: 2;"></canvas>
              <canvas id="F_hl" style="position: absolute; left: 0; top: 0; z-index: 3;"></canvas>
            </div>
          </div>
          <div id="backcanvas" class="split" touch-action="none" style="overflow: hidden">
            <div style="position: relative; width: 100%; height: 100%;">
              <canvas id="B_bg" style="position: absolute; left: 0; top: 0; z-index: 0;"></canvas>
              <canvas id="B_fab" style="position: absolute; left: 0; top: 0; z-index: 1;"></canvas>
              <canvas id="B_slk" style="position: absolute; left: 0; top: 0; z-index: 2;"></canvas>
              <canvas id="B_hl" style="position: absolute; left: 0; top: 0; z-index: 3;"></canvas>
            </div>
          </div>
        </div>
      </div>
    </div>
    
    </body>
    
    </html>