igv 3.2.0 → 3.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +10 -10
- package/dist/igv.esm.js +17 -16
- package/dist/igv.esm.min.js +4 -4
- package/dist/igv.esm.min.js.map +1 -1
- package/dist/igv.js +17 -16
- package/dist/igv.min.js +4 -4
- package/dist/igv.min.js.map +1 -1
- package/package.json +1 -1
package/dist/igv.esm.min.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
function e(e){const t=document.createElement("div");return t.innerHTML=e,t.firstElementChild}function t(e){return i("div",e)}function i(e,t){const i=document.createElement(e);return t&&(t.class&&i.classList.add(t.class),t.id&&(i.id=t.id),t.style&&function(e,t){for(let i of Object.keys(t))e.style[i]=t[i]}(i,t.style)),i}function n(e){const t=getComputedStyle(e);"none"!==t.display&&(e._initialDisplay=t.display),e.style.display="none"}function r(e){const t=e._initialDisplay||"block";e.style.display=t}function s(e){if(e.type.startsWith("touch")){const t=e.touches[0];return{x:t.pageX,y:t.pageY}}return{x:e.pageX,y:e.pageY}}function o(){return("0000"+(Math.random()*Math.pow(36,4)|0).toString(36)).slice(-4)}function a(e,t){const{clientX:i,clientY:n}=e;return((e,{clientX:t,clientY:i})=>{const{left:n,top:r,width:s,height:o}=e.getBoundingClientRect(),a=t-n,c=i-r;return{x:a,y:c,xNormalized:a/s,yNormalized:c/o,width:s,height:o}})(t,{clientX:i,clientY:n})}class c{constructor(){this.elem=i("div",{class:"igv-ui-panel-column"})}add(e){if(e instanceof Node)this.elem.appendChild(e);else if("object"==typeof e)this.elem.appendChild(e.elem);else{const i=t();i.innerHTML=e,this.elem.appendChild(i),this.html=i}}}function l(e,t){return h(e,t)}function h(e,t){t=t||"currentColor";let i=d[e];i||(console.error(`No icon named: ${e}`),i=d.question);const n=document.createElementNS("http://www.w3.org/2000/svg","svg");n.setAttributeNS(null,"viewBox","0 0 "+i[0]+" "+i[1]);const r=document.createElementNS("http://www.w3.org/2000/svg","path");return r.setAttributeNS(null,"fill",t),r.setAttributeNS(null,"d",i[4]),n.appendChild(r),n}const d={check:[512,512,[],"f00c","M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z"],cog:[512,512,[],"f013","M444.788 291.1l42.616 24.599c4.867 2.809 7.126 8.618 5.459 13.985-11.07 35.642-29.97 67.842-54.689 94.586a12.016 12.016 0 0 1-14.832 2.254l-42.584-24.595a191.577 191.577 0 0 1-60.759 35.13v49.182a12.01 12.01 0 0 1-9.377 11.718c-34.956 7.85-72.499 8.256-109.219.007-5.49-1.233-9.403-6.096-9.403-11.723v-49.184a191.555 191.555 0 0 1-60.759-35.13l-42.584 24.595a12.016 12.016 0 0 1-14.832-2.254c-24.718-26.744-43.619-58.944-54.689-94.586-1.667-5.366.592-11.175 5.459-13.985L67.212 291.1a193.48 193.48 0 0 1 0-70.199l-42.616-24.599c-4.867-2.809-7.126-8.618-5.459-13.985 11.07-35.642 29.97-67.842 54.689-94.586a12.016 12.016 0 0 1 14.832-2.254l42.584 24.595a191.577 191.577 0 0 1 60.759-35.13V25.759a12.01 12.01 0 0 1 9.377-11.718c34.956-7.85 72.499-8.256 109.219-.007 5.49 1.233 9.403 6.096 9.403 11.723v49.184a191.555 191.555 0 0 1 60.759 35.13l42.584-24.595a12.016 12.016 0 0 1 14.832 2.254c24.718 26.744 43.619 58.944 54.689 94.586 1.667 5.366-.592 11.175-5.459 13.985L444.788 220.9a193.485 193.485 0 0 1 0 70.2zM336 256c0-44.112-35.888-80-80-80s-80 35.888-80 80 35.888 80 80 80 80-35.888 80-80z"],exclamation:[192,512,[],"f12a","M176 432c0 44.112-35.888 80-80 80s-80-35.888-80-80 35.888-80 80-80 80 35.888 80 80zM25.26 25.199l13.6 272C39.499 309.972 50.041 320 62.83 320h66.34c12.789 0 23.331-10.028 23.97-22.801l13.6-272C167.425 11.49 156.496 0 142.77 0H49.23C35.504 0 24.575 11.49 25.26 25.199z"],"exclamation-circle":[512,512,[],"f06a","M504 256c0 136.997-111.043 248-248 248S8 392.997 8 256C8 119.083 119.043 8 256 8s248 111.083 248 248zm-248 50c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z"],"exclamation-triangle":[576,512,[],"f071","M569.517 440.013C587.975 472.007 564.806 512 527.94 512H48.054c-36.937 0-59.999-40.055-41.577-71.987L246.423 23.985c18.467-32.009 64.72-31.951 83.154 0l239.94 416.028zM288 354c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z"],minus:[448,512,[],"f068","M424 318.2c13.3 0 24-10.7 24-24v-76.4c0-13.3-10.7-24-24-24H24c-13.3 0-24 10.7-24 24v76.4c0 13.3 10.7 24 24 24h400z"],"minus-circle":[512,512,[],"f056","M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zM124 296c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h264c6.6 0 12 5.4 12 12v56c0 6.6-5.4 12-12 12H124z"],"minus-square":[448,512,[],"f146","M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM92 296c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h264c6.6 0 12 5.4 12 12v56c0 6.6-5.4 12-12 12H92z"],plus:[448,512,[],"f067","M448 294.2v-76.4c0-13.3-10.7-24-24-24H286.2V56c0-13.3-10.7-24-24-24h-76.4c-13.3 0-24 10.7-24 24v137.8H24c-13.3 0-24 10.7-24 24v76.4c0 13.3 10.7 24 24 24h137.8V456c0 13.3 10.7 24 24 24h76.4c13.3 0 24-10.7 24-24V318.2H424c13.3 0 24-10.7 24-24z"],"plus-circle":[512,512,[],"f055","M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm144 276c0 6.6-5.4 12-12 12h-92v92c0 6.6-5.4 12-12 12h-56c-6.6 0-12-5.4-12-12v-92h-92c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h92v-92c0-6.6 5.4-12 12-12h56c6.6 0 12 5.4 12 12v92h92c6.6 0 12 5.4 12 12v56z"],"plus-square":[448,512,[],"f0fe","M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-32 252c0 6.6-5.4 12-12 12h-92v92c0 6.6-5.4 12-12 12h-56c-6.6 0-12-5.4-12-12v-92H92c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h92v-92c0-6.6 5.4-12 12-12h56c6.6 0 12 5.4 12 12v92h92c6.6 0 12 5.4 12 12v56z"],question:[384,512,[],"f128","M202.021 0C122.202 0 70.503 32.703 29.914 91.026c-7.363 10.58-5.093 25.086 5.178 32.874l43.138 32.709c10.373 7.865 25.132 6.026 33.253-4.148 25.049-31.381 43.63-49.449 82.757-49.449 30.764 0 68.816 19.799 68.816 49.631 0 22.552-18.617 34.134-48.993 51.164-35.423 19.86-82.299 44.576-82.299 106.405V320c0 13.255 10.745 24 24 24h72.471c13.255 0 24-10.745 24-24v-5.773c0-42.86 125.268-44.645 125.268-160.627C377.504 66.256 286.902 0 202.021 0zM192 373.459c-38.196 0-69.271 31.075-69.271 69.271 0 38.195 31.075 69.27 69.271 69.27s69.271-31.075 69.271-69.271-31.075-69.27-69.271-69.27z"],save:[448,512,[],"f0c7","M433.941 129.941l-83.882-83.882A48 48 0 0 0 316.118 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48V163.882a48 48 0 0 0-14.059-33.941zM224 416c-35.346 0-64-28.654-64-64 0-35.346 28.654-64 64-64s64 28.654 64 64c0 35.346-28.654 64-64 64zm96-304.52V212c0 6.627-5.373 12-12 12H76c-6.627 0-12-5.373-12-12V108c0-6.627 5.373-12 12-12h228.52c3.183 0 6.235 1.264 8.485 3.515l3.48 3.48A11.996 11.996 0 0 1 320 111.48z"],search:[512,512,[],"f002","M505 442.7L405.3 343c-4.5-4.5-10.6-7-17-7H372c27.6-35.3 44-79.7 44-128C416 93.1 322.9 0 208 0S0 93.1 0 208s93.1 208 208 208c48.3 0 92.7-16.4 128-44v16.3c0 6.4 2.5 12.5 7 17l99.7 99.7c9.4 9.4 24.6 9.4 33.9 0l28.3-28.3c9.4-9.4 9.4-24.6.1-34zM208 336c-70.7 0-128-57.2-128-128 0-70.7 57.2-128 128-128 70.7 0 128 57.2 128 128 0 70.7-57.2 128-128 128z"],share:[512,512,[],"f064","M503.691 189.836L327.687 37.851C312.281 24.546 288 35.347 288 56.015v80.053C127.371 137.907 0 170.1 0 322.326c0 61.441 39.581 122.309 83.333 154.132 13.653 9.931 33.111-2.533 28.077-18.631C66.066 312.814 132.917 274.316 288 272.085V360c0 20.7 24.3 31.453 39.687 18.164l176.004-152c11.071-9.562 11.086-26.753 0-36.328z"],spinner:[512,512,[],"f110","M304 48c0 26.51-21.49 48-48 48s-48-21.49-48-48 21.49-48 48-48 48 21.49 48 48zm-48 368c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.49-48-48-48zm208-208c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.49-48-48-48zM96 256c0-26.51-21.49-48-48-48S0 229.49 0 256s21.49 48 48 48 48-21.49 48-48zm12.922 99.078c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48c0-26.509-21.491-48-48-48zm294.156 0c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48c0-26.509-21.49-48-48-48zM108.922 60.922c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.491-48-48-48z"],square:[448,512,[],"f0c8","M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48z"],"square-full":[512,512,[],"f45c","M512 512H0V0h512v512z"],times:[384,512,[],"f00d","M323.1 441l53.9-53.9c9.4-9.4 9.4-24.5 0-33.9L279.8 256l97.2-97.2c9.4-9.4 9.4-24.5 0-33.9L323.1 71c-9.4-9.4-24.5-9.4-33.9 0L192 168.2 94.8 71c-9.4-9.4-24.5-9.4-33.9 0L7 124.9c-9.4 9.4-9.4 24.5 0 33.9l97.2 97.2L7 353.2c-9.4 9.4-9.4 24.5 0 33.9L60.9 441c9.4 9.4 24.5 9.4 33.9 0l97.2-97.2 97.2 97.2c9.3 9.3 24.5 9.3 33.9 0z"],"times-circle":[512,512,[],"f057","M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm121.6 313.1c4.7 4.7 4.7 12.3 0 17L338 377.6c-4.7 4.7-12.3 4.7-17 0L256 312l-65.1 65.6c-4.7 4.7-12.3 4.7-17 0L134.4 338c-4.7-4.7-4.7-12.3 0-17l65.6-65-65.6-65.1c-4.7-4.7-4.7-12.3 0-17l39.6-39.6c4.7-4.7 12.3-4.7 17 0l65 65.7 65.1-65.6c4.7-4.7 12.3-4.7 17 0l39.6 39.6c4.7 4.7 4.7 12.3 0 17L312 256l65.6 65.1z"],wrench:[512,512,[],"f0ad","M481.156 200c9.3 0 15.12 10.155 10.325 18.124C466.295 259.992 420.419 288 368 288c-79.222 0-143.501-63.974-143.997-143.079C223.505 65.469 288.548-.001 368.002 0c52.362.001 98.196 27.949 123.4 69.743C496.24 77.766 490.523 88 481.154 88H376l-40 56 40 56h105.156zm-171.649 93.003L109.255 493.255c-24.994 24.993-65.515 24.994-90.51 0-24.993-24.994-24.993-65.516 0-90.51L218.991 202.5c16.16 41.197 49.303 74.335 90.516 90.503zM104 432c0-13.255-10.745-24-24-24s-24 10.745-24 24 10.745 24 24 24 24-10.745 24-24z"]};function u(e,t){var i=document.createElement("div");e.appendChild(i),i.appendChild(l("times")),i.addEventListener("click",(function(e){e.preventDefault(),e.stopPropagation(),t()}))}let f;function p(e,t,i){t.addEventListener("mousedown",function(e){e.stopPropagation(),e.preventDefault();const t=g.bind(this),n=m.bind(this),r=getComputedStyle(this),s=this.getBoundingClientRect();f={constraint:i,dragFunction:t,dragEndFunction:n,screenX:e.screenX,screenY:e.screenY,minDy:-s.top,minDx:-s.left,top:parseInt(r.top.replace("px","")),left:parseInt(r.left.replace("px",""))},document.addEventListener("mousemove",t),document.addEventListener("mouseup",n),document.addEventListener("mouseleave",n),document.addEventListener("mouseexit",n)}.bind(e))}function g(e){if(!f)return void console.error("No drag data!");e.stopPropagation(),e.preventDefault();const t=Math.max(f.minDx,e.screenX-f.screenX),i=Math.max(f.minDy,e.screenY-f.screenY),n=f.left+t,r=f.top+i;this.style.left=`${n}px`,this.style.top=`${r}px`}function m(e){if(!f)return void console.error("No drag data!");e.stopPropagation(),e.preventDefault();const t=f.dragFunction,i=f.dragEndFunction;document.removeEventListener("mousemove",t),document.removeEventListener("mouseup",i),document.removeEventListener("mouseleave",i),document.removeEventListener("mouseexit",i),f=void 0}class w{constructor({parent:e,label:i,content:n,okHandler:r,cancelHandler:s}){this.parent=e;const o=()=>{this.elem.style.display="none","function"==typeof s&&s(this)};this.elem=t(),this.elem.classList.add("igv-ui-generic-dialog-container","igv-ui-center-fixed");const a=t({class:"igv-ui-generic-dialog-header"});if(this.elem.appendChild(a),u(a,o),i){const e=t({class:"igv-ui-dialog-one-liner"});this.elem.appendChild(e),e.innerHTML=i}n.elem.style.margin="16px",this.elem.appendChild(n.elem),this.content=n;const c=t({class:"igv-ui-generic-dialog-ok-cancel"});this.elem.appendChild(c),this.ok=t(),c.appendChild(this.ok),this.ok.textContent="OK",this.cancel=t(),c.appendChild(this.cancel),this.cancel.textContent="Cancel",this.callback=void 0,this.ok.addEventListener("click",(e=>{this.elem.style.display="none","function"==typeof r?r(this):this.callback&&"function"==typeof this.callback&&this.callback(this)})),this.cancel.addEventListener("click",o),p(this.elem,a),this.elem.addEventListener("click",(e=>{e.preventDefault(),e.stopPropagation()}))}present(e,t){if(e.label&&this.label&&(this.label.textContent=e.label),e.html){this.content.html.innerHTML=e.html}if(e.text){this.content.html.innerText=e.text}e.value&&this.input&&(this.input.value=e.value),e.callback&&(this.callback=e.callback);const{top:i}=t.currentTarget.parentElement.getBoundingClientRect();this.elem.style.top=`${i}px`,this.elem.style.display="flex"}}function b(e){return"string"==typeof e||e instanceof String}function F(e){var t=String(e).split(/[.,]/);return t[0].split("").reverse().reduce((function(e,t,i){return i%3==0?e+","+t:e+t})).split("").reverse().join("")+(t[1]?"."+t[1]:"")}const v=function(e){return e.split(/\n|\r\n|\r/g)};function y(e,t){var i,n,r=[],s=e.length,o=0,a=!1;if(s>0)for(r[o]=e.charAt(0),i=1;i<s;i++)'"'===(n=e.charAt(i))?a=!a:a||n!==t?r[o]+=n:r[++o]="";return r}function A(e){return e.length>0?e.charAt(0).toUpperCase()+e.slice(1):e}function C(e){if(void 0!==e.name)return e.name;if(b(e)){let t=e.lastIndexOf("/"),i=t<0?e:e.substr(t+1);return t=i.indexOf("?"),t>0&&(i=i.substr(0,t)),i}throw Error("Expected File or string, got "+typeof e)}function _(e){return!!e&&("function"!=typeof e&&(e instanceof File||e.hasOwnProperty("name")&&"function"==typeof e.slice&&"function"==typeof e.arrayBuffer))}function x(e,t){const i=document.createElement("a");i.setAttribute("href",t),i.setAttribute("download",e),i.style.display="none",document.body.appendChild(i),i.click(),document.body.removeChild(i)}function k(e){for(var t=I,i=t.parser.loose.exec(e),n={},r=14;r--;)n[t.key[r]]=i[r]||"";return n[t.q.name]={},n[t.key[12]].replace(t.q.parser,(function(e,i,r){i&&(n[t.q.name][i]=r)})),n}"object"==typeof process&&"undefined"==typeof window&&(global.atob=function(e){return Buffer.from(e,"base64").toString("binary")});const I={strictMode:!1,key:["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"],q:{name:"queryKey",parser:/(?:^|&)([^&=]*)=?([^&]*)/g},parser:{strict:/^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/,loose:/^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/}};function S(e){let t=e.length;for(;--t>=0;)e[t]=0}const E=256,N=286,M=30,R=15,B=new Uint8Array([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0]),D=new Uint8Array([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13]),T=new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7]),z=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),L=new Array(576);S(L);const H=new Array(60);S(H);const P=new Array(512);S(P);const O=new Array(256);S(O);const V=new Array(29);S(V);const q=new Array(M);function Q(e,t,i,n,r){this.static_tree=e,this.extra_bits=t,this.extra_base=i,this.elems=n,this.max_length=r,this.has_stree=e&&e.length}let U,j,G;function W(e,t){this.dyn_tree=e,this.max_code=0,this.stat_desc=t}S(q);const $=e=>e<256?P[e]:P[256+(e>>>7)],K=(e,t)=>{e.pending_buf[e.pending++]=255&t,e.pending_buf[e.pending++]=t>>>8&255},Y=(e,t,i)=>{e.bi_valid>16-i?(e.bi_buf|=t<<e.bi_valid&65535,K(e,e.bi_buf),e.bi_buf=t>>16-e.bi_valid,e.bi_valid+=i-16):(e.bi_buf|=t<<e.bi_valid&65535,e.bi_valid+=i)},X=(e,t,i)=>{Y(e,i[2*t],i[2*t+1])},Z=(e,t)=>{let i=0;do{i|=1&e,e>>>=1,i<<=1}while(--t>0);return i>>>1},J=(e,t,i)=>{const n=new Array(16);let r,s,o=0;for(r=1;r<=R;r++)o=o+i[r-1]<<1,n[r]=o;for(s=0;s<=t;s++){let t=e[2*s+1];0!==t&&(e[2*s]=Z(n[t]++,t))}},ee=e=>{let t;for(t=0;t<N;t++)e.dyn_ltree[2*t]=0;for(t=0;t<M;t++)e.dyn_dtree[2*t]=0;for(t=0;t<19;t++)e.bl_tree[2*t]=0;e.dyn_ltree[512]=1,e.opt_len=e.static_len=0,e.sym_next=e.matches=0},te=e=>{e.bi_valid>8?K(e,e.bi_buf):e.bi_valid>0&&(e.pending_buf[e.pending++]=e.bi_buf),e.bi_buf=0,e.bi_valid=0},ie=(e,t,i,n)=>{const r=2*t,s=2*i;return e[r]<e[s]||e[r]===e[s]&&n[t]<=n[i]},ne=(e,t,i)=>{const n=e.heap[i];let r=i<<1;for(;r<=e.heap_len&&(r<e.heap_len&&ie(t,e.heap[r+1],e.heap[r],e.depth)&&r++,!ie(t,n,e.heap[r],e.depth));)e.heap[i]=e.heap[r],i=r,r<<=1;e.heap[i]=n},re=(e,t,i)=>{let n,r,s,o,a=0;if(0!==e.sym_next)do{n=255&e.pending_buf[e.sym_buf+a++],n+=(255&e.pending_buf[e.sym_buf+a++])<<8,r=e.pending_buf[e.sym_buf+a++],0===n?X(e,r,t):(s=O[r],X(e,s+E+1,t),o=B[s],0!==o&&(r-=V[s],Y(e,r,o)),n--,s=$(n),X(e,s,i),o=D[s],0!==o&&(n-=q[s],Y(e,n,o)))}while(a<e.sym_next);X(e,256,t)},se=(e,t)=>{const i=t.dyn_tree,n=t.stat_desc.static_tree,r=t.stat_desc.has_stree,s=t.stat_desc.elems;let o,a,c,l=-1;for(e.heap_len=0,e.heap_max=573,o=0;o<s;o++)0!==i[2*o]?(e.heap[++e.heap_len]=l=o,e.depth[o]=0):i[2*o+1]=0;for(;e.heap_len<2;)c=e.heap[++e.heap_len]=l<2?++l:0,i[2*c]=1,e.depth[c]=0,e.opt_len--,r&&(e.static_len-=n[2*c+1]);for(t.max_code=l,o=e.heap_len>>1;o>=1;o--)ne(e,i,o);c=s;do{o=e.heap[1],e.heap[1]=e.heap[e.heap_len--],ne(e,i,1),a=e.heap[1],e.heap[--e.heap_max]=o,e.heap[--e.heap_max]=a,i[2*c]=i[2*o]+i[2*a],e.depth[c]=(e.depth[o]>=e.depth[a]?e.depth[o]:e.depth[a])+1,i[2*o+1]=i[2*a+1]=c,e.heap[1]=c++,ne(e,i,1)}while(e.heap_len>=2);e.heap[--e.heap_max]=e.heap[1],((e,t)=>{const i=t.dyn_tree,n=t.max_code,r=t.stat_desc.static_tree,s=t.stat_desc.has_stree,o=t.stat_desc.extra_bits,a=t.stat_desc.extra_base,c=t.stat_desc.max_length;let l,h,d,u,f,p,g=0;for(u=0;u<=R;u++)e.bl_count[u]=0;for(i[2*e.heap[e.heap_max]+1]=0,l=e.heap_max+1;l<573;l++)h=e.heap[l],u=i[2*i[2*h+1]+1]+1,u>c&&(u=c,g++),i[2*h+1]=u,h>n||(e.bl_count[u]++,f=0,h>=a&&(f=o[h-a]),p=i[2*h],e.opt_len+=p*(u+f),s&&(e.static_len+=p*(r[2*h+1]+f)));if(0!==g){do{for(u=c-1;0===e.bl_count[u];)u--;e.bl_count[u]--,e.bl_count[u+1]+=2,e.bl_count[c]--,g-=2}while(g>0);for(u=c;0!==u;u--)for(h=e.bl_count[u];0!==h;)d=e.heap[--l],d>n||(i[2*d+1]!==u&&(e.opt_len+=(u-i[2*d+1])*i[2*d],i[2*d+1]=u),h--)}})(e,t),J(i,l,e.bl_count)},oe=(e,t,i)=>{let n,r,s=-1,o=t[1],a=0,c=7,l=4;for(0===o&&(c=138,l=3),t[2*(i+1)+1]=65535,n=0;n<=i;n++)r=o,o=t[2*(n+1)+1],++a<c&&r===o||(a<l?e.bl_tree[2*r]+=a:0!==r?(r!==s&&e.bl_tree[2*r]++,e.bl_tree[32]++):a<=10?e.bl_tree[34]++:e.bl_tree[36]++,a=0,s=r,0===o?(c=138,l=3):r===o?(c=6,l=3):(c=7,l=4))},ae=(e,t,i)=>{let n,r,s=-1,o=t[1],a=0,c=7,l=4;for(0===o&&(c=138,l=3),n=0;n<=i;n++)if(r=o,o=t[2*(n+1)+1],!(++a<c&&r===o)){if(a<l)do{X(e,r,e.bl_tree)}while(0!=--a);else 0!==r?(r!==s&&(X(e,r,e.bl_tree),a--),X(e,16,e.bl_tree),Y(e,a-3,2)):a<=10?(X(e,17,e.bl_tree),Y(e,a-3,3)):(X(e,18,e.bl_tree),Y(e,a-11,7));a=0,s=r,0===o?(c=138,l=3):r===o?(c=6,l=3):(c=7,l=4)}};let ce=!1;const le=(e,t,i,n)=>{Y(e,0+(n?1:0),3),te(e),K(e,i),K(e,~i),i&&e.pending_buf.set(e.window.subarray(t,t+i),e.pending),e.pending+=i};var he=(e,t,i,n)=>{let r,s,o=0;e.level>0?(2===e.strm.data_type&&(e.strm.data_type=(e=>{let t,i=4093624447;for(t=0;t<=31;t++,i>>>=1)if(1&i&&0!==e.dyn_ltree[2*t])return 0;if(0!==e.dyn_ltree[18]||0!==e.dyn_ltree[20]||0!==e.dyn_ltree[26])return 1;for(t=32;t<E;t++)if(0!==e.dyn_ltree[2*t])return 1;return 0})(e)),se(e,e.l_desc),se(e,e.d_desc),o=(e=>{let t;for(oe(e,e.dyn_ltree,e.l_desc.max_code),oe(e,e.dyn_dtree,e.d_desc.max_code),se(e,e.bl_desc),t=18;t>=3&&0===e.bl_tree[2*z[t]+1];t--);return e.opt_len+=3*(t+1)+5+5+4,t})(e),r=e.opt_len+3+7>>>3,s=e.static_len+3+7>>>3,s<=r&&(r=s)):r=s=i+5,i+4<=r&&-1!==t?le(e,t,i,n):4===e.strategy||s===r?(Y(e,2+(n?1:0),3),re(e,L,H)):(Y(e,4+(n?1:0),3),((e,t,i,n)=>{let r;for(Y(e,t-257,5),Y(e,i-1,5),Y(e,n-4,4),r=0;r<n;r++)Y(e,e.bl_tree[2*z[r]+1],3);ae(e,e.dyn_ltree,t-1),ae(e,e.dyn_dtree,i-1)})(e,e.l_desc.max_code+1,e.d_desc.max_code+1,o+1),re(e,e.dyn_ltree,e.dyn_dtree)),ee(e),n&&te(e)},de={_tr_init:e=>{ce||((()=>{let e,t,i,n,r;const s=new Array(16);for(i=0,n=0;n<28;n++)for(V[n]=i,e=0;e<1<<B[n];e++)O[i++]=n;for(O[i-1]=n,r=0,n=0;n<16;n++)for(q[n]=r,e=0;e<1<<D[n];e++)P[r++]=n;for(r>>=7;n<M;n++)for(q[n]=r<<7,e=0;e<1<<D[n]-7;e++)P[256+r++]=n;for(t=0;t<=R;t++)s[t]=0;for(e=0;e<=143;)L[2*e+1]=8,e++,s[8]++;for(;e<=255;)L[2*e+1]=9,e++,s[9]++;for(;e<=279;)L[2*e+1]=7,e++,s[7]++;for(;e<=287;)L[2*e+1]=8,e++,s[8]++;for(J(L,287,s),e=0;e<M;e++)H[2*e+1]=5,H[2*e]=Z(e,5);U=new Q(L,B,257,N,R),j=new Q(H,D,0,M,R),G=new Q(new Array(0),T,0,19,7)})(),ce=!0),e.l_desc=new W(e.dyn_ltree,U),e.d_desc=new W(e.dyn_dtree,j),e.bl_desc=new W(e.bl_tree,G),e.bi_buf=0,e.bi_valid=0,ee(e)},_tr_stored_block:le,_tr_flush_block:he,_tr_tally:(e,t,i)=>(e.pending_buf[e.sym_buf+e.sym_next++]=t,e.pending_buf[e.sym_buf+e.sym_next++]=t>>8,e.pending_buf[e.sym_buf+e.sym_next++]=i,0===t?e.dyn_ltree[2*i]++:(e.matches++,t--,e.dyn_ltree[2*(O[i]+E+1)]++,e.dyn_dtree[2*$(t)]++),e.sym_next===e.sym_end),_tr_align:e=>{Y(e,2,3),X(e,256,L),(e=>{16===e.bi_valid?(K(e,e.bi_buf),e.bi_buf=0,e.bi_valid=0):e.bi_valid>=8&&(e.pending_buf[e.pending++]=255&e.bi_buf,e.bi_buf>>=8,e.bi_valid-=8)})(e)}};var ue=(e,t,i,n)=>{let r=65535&e,s=e>>>16&65535,o=0;for(;0!==i;){o=i>2e3?2e3:i,i-=o;do{r=r+t[n++]|0,s=s+r|0}while(--o);r%=65521,s%=65521}return r|s<<16};const fe=new Uint32Array((()=>{let e,t=[];for(var i=0;i<256;i++){e=i;for(var n=0;n<8;n++)e=1&e?3988292384^e>>>1:e>>>1;t[i]=e}return t})());var pe=(e,t,i,n)=>{const r=fe,s=n+i;e^=-1;for(let i=n;i<s;i++)e=e>>>8^r[255&(e^t[i])];return~e},ge={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"},me={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_MEM_ERROR:-4,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8};const{_tr_init:we,_tr_stored_block:be,_tr_flush_block:Fe,_tr_tally:ve,_tr_align:ye}=de,{Z_NO_FLUSH:Ae,Z_PARTIAL_FLUSH:Ce,Z_FULL_FLUSH:_e,Z_FINISH:xe,Z_BLOCK:ke,Z_OK:Ie,Z_STREAM_END:Se,Z_STREAM_ERROR:Ee,Z_DATA_ERROR:Ne,Z_BUF_ERROR:Me,Z_DEFAULT_COMPRESSION:Re,Z_FILTERED:Be,Z_HUFFMAN_ONLY:De,Z_RLE:Te,Z_FIXED:ze,Z_DEFAULT_STRATEGY:Le,Z_UNKNOWN:He,Z_DEFLATED:Pe}=me,Oe=258,Ve=262,qe=42,Qe=113,Ue=666,je=(e,t)=>(e.msg=ge[t],t),Ge=e=>2*e-(e>4?9:0),We=e=>{let t=e.length;for(;--t>=0;)e[t]=0},$e=e=>{let t,i,n,r=e.w_size;t=e.hash_size,n=t;do{i=e.head[--n],e.head[n]=i>=r?i-r:0}while(--t);t=r,n=t;do{i=e.prev[--n],e.prev[n]=i>=r?i-r:0}while(--t)};let Ke=(e,t,i)=>(t<<e.hash_shift^i)&e.hash_mask;const Ye=e=>{const t=e.state;let i=t.pending;i>e.avail_out&&(i=e.avail_out),0!==i&&(e.output.set(t.pending_buf.subarray(t.pending_out,t.pending_out+i),e.next_out),e.next_out+=i,t.pending_out+=i,e.total_out+=i,e.avail_out-=i,t.pending-=i,0===t.pending&&(t.pending_out=0))},Xe=(e,t)=>{Fe(e,e.block_start>=0?e.block_start:-1,e.strstart-e.block_start,t),e.block_start=e.strstart,Ye(e.strm)},Ze=(e,t)=>{e.pending_buf[e.pending++]=t},Je=(e,t)=>{e.pending_buf[e.pending++]=t>>>8&255,e.pending_buf[e.pending++]=255&t},et=(e,t,i,n)=>{let r=e.avail_in;return r>n&&(r=n),0===r?0:(e.avail_in-=r,t.set(e.input.subarray(e.next_in,e.next_in+r),i),1===e.state.wrap?e.adler=ue(e.adler,t,r,i):2===e.state.wrap&&(e.adler=pe(e.adler,t,r,i)),e.next_in+=r,e.total_in+=r,r)},tt=(e,t)=>{let i,n,r=e.max_chain_length,s=e.strstart,o=e.prev_length,a=e.nice_match;const c=e.strstart>e.w_size-Ve?e.strstart-(e.w_size-Ve):0,l=e.window,h=e.w_mask,d=e.prev,u=e.strstart+Oe;let f=l[s+o-1],p=l[s+o];e.prev_length>=e.good_match&&(r>>=2),a>e.lookahead&&(a=e.lookahead);do{if(i=t,l[i+o]===p&&l[i+o-1]===f&&l[i]===l[s]&&l[++i]===l[s+1]){s+=2,i++;do{}while(l[++s]===l[++i]&&l[++s]===l[++i]&&l[++s]===l[++i]&&l[++s]===l[++i]&&l[++s]===l[++i]&&l[++s]===l[++i]&&l[++s]===l[++i]&&l[++s]===l[++i]&&s<u);if(n=Oe-(u-s),s=u-Oe,n>o){if(e.match_start=t,o=n,n>=a)break;f=l[s+o-1],p=l[s+o]}}}while((t=d[t&h])>c&&0!=--r);return o<=e.lookahead?o:e.lookahead},it=e=>{const t=e.w_size;let i,n,r;do{if(n=e.window_size-e.lookahead-e.strstart,e.strstart>=t+(t-Ve)&&(e.window.set(e.window.subarray(t,t+t-n),0),e.match_start-=t,e.strstart-=t,e.block_start-=t,e.insert>e.strstart&&(e.insert=e.strstart),$e(e),n+=t),0===e.strm.avail_in)break;if(i=et(e.strm,e.window,e.strstart+e.lookahead,n),e.lookahead+=i,e.lookahead+e.insert>=3)for(r=e.strstart-e.insert,e.ins_h=e.window[r],e.ins_h=Ke(e,e.ins_h,e.window[r+1]);e.insert&&(e.ins_h=Ke(e,e.ins_h,e.window[r+3-1]),e.prev[r&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=r,r++,e.insert--,!(e.lookahead+e.insert<3)););}while(e.lookahead<Ve&&0!==e.strm.avail_in)},nt=(e,t)=>{let i,n,r,s=e.pending_buf_size-5>e.w_size?e.w_size:e.pending_buf_size-5,o=0,a=e.strm.avail_in;do{if(i=65535,r=e.bi_valid+42>>3,e.strm.avail_out<r)break;if(r=e.strm.avail_out-r,n=e.strstart-e.block_start,i>n+e.strm.avail_in&&(i=n+e.strm.avail_in),i>r&&(i=r),i<s&&(0===i&&t!==xe||t===Ae||i!==n+e.strm.avail_in))break;o=t===xe&&i===n+e.strm.avail_in?1:0,be(e,0,0,o),e.pending_buf[e.pending-4]=i,e.pending_buf[e.pending-3]=i>>8,e.pending_buf[e.pending-2]=~i,e.pending_buf[e.pending-1]=~i>>8,Ye(e.strm),n&&(n>i&&(n=i),e.strm.output.set(e.window.subarray(e.block_start,e.block_start+n),e.strm.next_out),e.strm.next_out+=n,e.strm.avail_out-=n,e.strm.total_out+=n,e.block_start+=n,i-=n),i&&(et(e.strm,e.strm.output,e.strm.next_out,i),e.strm.next_out+=i,e.strm.avail_out-=i,e.strm.total_out+=i)}while(0===o);return a-=e.strm.avail_in,a&&(a>=e.w_size?(e.matches=2,e.window.set(e.strm.input.subarray(e.strm.next_in-e.w_size,e.strm.next_in),0),e.strstart=e.w_size,e.insert=e.strstart):(e.window_size-e.strstart<=a&&(e.strstart-=e.w_size,e.window.set(e.window.subarray(e.w_size,e.w_size+e.strstart),0),e.matches<2&&e.matches++,e.insert>e.strstart&&(e.insert=e.strstart)),e.window.set(e.strm.input.subarray(e.strm.next_in-a,e.strm.next_in),e.strstart),e.strstart+=a,e.insert+=a>e.w_size-e.insert?e.w_size-e.insert:a),e.block_start=e.strstart),e.high_water<e.strstart&&(e.high_water=e.strstart),o?4:t!==Ae&&t!==xe&&0===e.strm.avail_in&&e.strstart===e.block_start?2:(r=e.window_size-e.strstart,e.strm.avail_in>r&&e.block_start>=e.w_size&&(e.block_start-=e.w_size,e.strstart-=e.w_size,e.window.set(e.window.subarray(e.w_size,e.w_size+e.strstart),0),e.matches<2&&e.matches++,r+=e.w_size,e.insert>e.strstart&&(e.insert=e.strstart)),r>e.strm.avail_in&&(r=e.strm.avail_in),r&&(et(e.strm,e.window,e.strstart,r),e.strstart+=r,e.insert+=r>e.w_size-e.insert?e.w_size-e.insert:r),e.high_water<e.strstart&&(e.high_water=e.strstart),r=e.bi_valid+42>>3,r=e.pending_buf_size-r>65535?65535:e.pending_buf_size-r,s=r>e.w_size?e.w_size:r,n=e.strstart-e.block_start,(n>=s||(n||t===xe)&&t!==Ae&&0===e.strm.avail_in&&n<=r)&&(i=n>r?r:n,o=t===xe&&0===e.strm.avail_in&&i===n?1:0,be(e,e.block_start,i,o),e.block_start+=i,Ye(e.strm)),o?3:1)},rt=(e,t)=>{let i,n;for(;;){if(e.lookahead<Ve){if(it(e),e.lookahead<Ve&&t===Ae)return 1;if(0===e.lookahead)break}if(i=0,e.lookahead>=3&&(e.ins_h=Ke(e,e.ins_h,e.window[e.strstart+3-1]),i=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart),0!==i&&e.strstart-i<=e.w_size-Ve&&(e.match_length=tt(e,i)),e.match_length>=3)if(n=ve(e,e.strstart-e.match_start,e.match_length-3),e.lookahead-=e.match_length,e.match_length<=e.max_lazy_match&&e.lookahead>=3){e.match_length--;do{e.strstart++,e.ins_h=Ke(e,e.ins_h,e.window[e.strstart+3-1]),i=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart}while(0!=--e.match_length);e.strstart++}else e.strstart+=e.match_length,e.match_length=0,e.ins_h=e.window[e.strstart],e.ins_h=Ke(e,e.ins_h,e.window[e.strstart+1]);else n=ve(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++;if(n&&(Xe(e,!1),0===e.strm.avail_out))return 1}return e.insert=e.strstart<2?e.strstart:2,t===xe?(Xe(e,!0),0===e.strm.avail_out?3:4):e.sym_next&&(Xe(e,!1),0===e.strm.avail_out)?1:2},st=(e,t)=>{let i,n,r;for(;;){if(e.lookahead<Ve){if(it(e),e.lookahead<Ve&&t===Ae)return 1;if(0===e.lookahead)break}if(i=0,e.lookahead>=3&&(e.ins_h=Ke(e,e.ins_h,e.window[e.strstart+3-1]),i=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart),e.prev_length=e.match_length,e.prev_match=e.match_start,e.match_length=2,0!==i&&e.prev_length<e.max_lazy_match&&e.strstart-i<=e.w_size-Ve&&(e.match_length=tt(e,i),e.match_length<=5&&(e.strategy===Be||3===e.match_length&&e.strstart-e.match_start>4096)&&(e.match_length=2)),e.prev_length>=3&&e.match_length<=e.prev_length){r=e.strstart+e.lookahead-3,n=ve(e,e.strstart-1-e.prev_match,e.prev_length-3),e.lookahead-=e.prev_length-1,e.prev_length-=2;do{++e.strstart<=r&&(e.ins_h=Ke(e,e.ins_h,e.window[e.strstart+3-1]),i=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart)}while(0!=--e.prev_length);if(e.match_available=0,e.match_length=2,e.strstart++,n&&(Xe(e,!1),0===e.strm.avail_out))return 1}else if(e.match_available){if(n=ve(e,0,e.window[e.strstart-1]),n&&Xe(e,!1),e.strstart++,e.lookahead--,0===e.strm.avail_out)return 1}else e.match_available=1,e.strstart++,e.lookahead--}return e.match_available&&(n=ve(e,0,e.window[e.strstart-1]),e.match_available=0),e.insert=e.strstart<2?e.strstart:2,t===xe?(Xe(e,!0),0===e.strm.avail_out?3:4):e.sym_next&&(Xe(e,!1),0===e.strm.avail_out)?1:2};function ot(e,t,i,n,r){this.good_length=e,this.max_lazy=t,this.nice_length=i,this.max_chain=n,this.func=r}const at=[new ot(0,0,0,0,nt),new ot(4,4,8,4,rt),new ot(4,5,16,8,rt),new ot(4,6,32,32,rt),new ot(4,4,16,16,st),new ot(8,16,32,32,st),new ot(8,16,128,128,st),new ot(8,32,128,256,st),new ot(32,128,258,1024,st),new ot(32,258,258,4096,st)];function ct(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=Pe,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new Uint16Array(1146),this.dyn_dtree=new Uint16Array(122),this.bl_tree=new Uint16Array(78),We(this.dyn_ltree),We(this.dyn_dtree),We(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new Uint16Array(16),this.heap=new Uint16Array(573),We(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new Uint16Array(573),We(this.depth),this.sym_buf=0,this.lit_bufsize=0,this.sym_next=0,this.sym_end=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0}const lt=e=>{if(!e)return 1;const t=e.state;return!t||t.strm!==e||t.status!==qe&&57!==t.status&&69!==t.status&&73!==t.status&&91!==t.status&&103!==t.status&&t.status!==Qe&&t.status!==Ue?1:0},ht=e=>{if(lt(e))return je(e,Ee);e.total_in=e.total_out=0,e.data_type=He;const t=e.state;return t.pending=0,t.pending_out=0,t.wrap<0&&(t.wrap=-t.wrap),t.status=2===t.wrap?57:t.wrap?qe:Qe,e.adler=2===t.wrap?0:1,t.last_flush=-2,we(t),Ie},dt=e=>{const t=ht(e);var i;return t===Ie&&((i=e.state).window_size=2*i.w_size,We(i.head),i.max_lazy_match=at[i.level].max_lazy,i.good_match=at[i.level].good_length,i.nice_match=at[i.level].nice_length,i.max_chain_length=at[i.level].max_chain,i.strstart=0,i.block_start=0,i.lookahead=0,i.insert=0,i.match_length=i.prev_length=2,i.match_available=0,i.ins_h=0),t},ut=(e,t,i,n,r,s)=>{if(!e)return Ee;let o=1;if(t===Re&&(t=6),n<0?(o=0,n=-n):n>15&&(o=2,n-=16),r<1||r>9||i!==Pe||n<8||n>15||t<0||t>9||s<0||s>ze||8===n&&1!==o)return je(e,Ee);8===n&&(n=9);const a=new ct;return e.state=a,a.strm=e,a.status=qe,a.wrap=o,a.gzhead=null,a.w_bits=n,a.w_size=1<<a.w_bits,a.w_mask=a.w_size-1,a.hash_bits=r+7,a.hash_size=1<<a.hash_bits,a.hash_mask=a.hash_size-1,a.hash_shift=~~((a.hash_bits+3-1)/3),a.window=new Uint8Array(2*a.w_size),a.head=new Uint16Array(a.hash_size),a.prev=new Uint16Array(a.w_size),a.lit_bufsize=1<<r+6,a.pending_buf_size=4*a.lit_bufsize,a.pending_buf=new Uint8Array(a.pending_buf_size),a.sym_buf=a.lit_bufsize,a.sym_end=3*(a.lit_bufsize-1),a.level=t,a.strategy=s,a.method=i,dt(e)};var ft=(e,t)=>{let i=t.length;if(lt(e))return Ee;const n=e.state,r=n.wrap;if(2===r||1===r&&n.status!==qe||n.lookahead)return Ee;if(1===r&&(e.adler=ue(e.adler,t,i,0)),n.wrap=0,i>=n.w_size){0===r&&(We(n.head),n.strstart=0,n.block_start=0,n.insert=0);let e=new Uint8Array(n.w_size);e.set(t.subarray(i-n.w_size,i),0),t=e,i=n.w_size}const s=e.avail_in,o=e.next_in,a=e.input;for(e.avail_in=i,e.next_in=0,e.input=t,it(n);n.lookahead>=3;){let e=n.strstart,t=n.lookahead-2;do{n.ins_h=Ke(n,n.ins_h,n.window[e+3-1]),n.prev[e&n.w_mask]=n.head[n.ins_h],n.head[n.ins_h]=e,e++}while(--t);n.strstart=e,n.lookahead=2,it(n)}return n.strstart+=n.lookahead,n.block_start=n.strstart,n.insert=n.lookahead,n.lookahead=0,n.match_length=n.prev_length=2,n.match_available=0,e.next_in=o,e.input=a,e.avail_in=s,n.wrap=r,Ie},pt={deflateInit:(e,t)=>ut(e,t,Pe,15,8,Le),deflateInit2:ut,deflateReset:dt,deflateResetKeep:ht,deflateSetHeader:(e,t)=>lt(e)||2!==e.state.wrap?Ee:(e.state.gzhead=t,Ie),deflate:(e,t)=>{if(lt(e)||t>ke||t<0)return e?je(e,Ee):Ee;const i=e.state;if(!e.output||0!==e.avail_in&&!e.input||i.status===Ue&&t!==xe)return je(e,0===e.avail_out?Me:Ee);const n=i.last_flush;if(i.last_flush=t,0!==i.pending){if(Ye(e),0===e.avail_out)return i.last_flush=-1,Ie}else if(0===e.avail_in&&Ge(t)<=Ge(n)&&t!==xe)return je(e,Me);if(i.status===Ue&&0!==e.avail_in)return je(e,Me);if(i.status===qe&&0===i.wrap&&(i.status=Qe),i.status===qe){let t=Pe+(i.w_bits-8<<4)<<8,n=-1;if(n=i.strategy>=De||i.level<2?0:i.level<6?1:6===i.level?2:3,t|=n<<6,0!==i.strstart&&(t|=32),t+=31-t%31,Je(i,t),0!==i.strstart&&(Je(i,e.adler>>>16),Je(i,65535&e.adler)),e.adler=1,i.status=Qe,Ye(e),0!==i.pending)return i.last_flush=-1,Ie}if(57===i.status)if(e.adler=0,Ze(i,31),Ze(i,139),Ze(i,8),i.gzhead)Ze(i,(i.gzhead.text?1:0)+(i.gzhead.hcrc?2:0)+(i.gzhead.extra?4:0)+(i.gzhead.name?8:0)+(i.gzhead.comment?16:0)),Ze(i,255&i.gzhead.time),Ze(i,i.gzhead.time>>8&255),Ze(i,i.gzhead.time>>16&255),Ze(i,i.gzhead.time>>24&255),Ze(i,9===i.level?2:i.strategy>=De||i.level<2?4:0),Ze(i,255&i.gzhead.os),i.gzhead.extra&&i.gzhead.extra.length&&(Ze(i,255&i.gzhead.extra.length),Ze(i,i.gzhead.extra.length>>8&255)),i.gzhead.hcrc&&(e.adler=pe(e.adler,i.pending_buf,i.pending,0)),i.gzindex=0,i.status=69;else if(Ze(i,0),Ze(i,0),Ze(i,0),Ze(i,0),Ze(i,0),Ze(i,9===i.level?2:i.strategy>=De||i.level<2?4:0),Ze(i,3),i.status=Qe,Ye(e),0!==i.pending)return i.last_flush=-1,Ie;if(69===i.status){if(i.gzhead.extra){let t=i.pending,n=(65535&i.gzhead.extra.length)-i.gzindex;for(;i.pending+n>i.pending_buf_size;){let r=i.pending_buf_size-i.pending;if(i.pending_buf.set(i.gzhead.extra.subarray(i.gzindex,i.gzindex+r),i.pending),i.pending=i.pending_buf_size,i.gzhead.hcrc&&i.pending>t&&(e.adler=pe(e.adler,i.pending_buf,i.pending-t,t)),i.gzindex+=r,Ye(e),0!==i.pending)return i.last_flush=-1,Ie;t=0,n-=r}let r=new Uint8Array(i.gzhead.extra);i.pending_buf.set(r.subarray(i.gzindex,i.gzindex+n),i.pending),i.pending+=n,i.gzhead.hcrc&&i.pending>t&&(e.adler=pe(e.adler,i.pending_buf,i.pending-t,t)),i.gzindex=0}i.status=73}if(73===i.status){if(i.gzhead.name){let t,n=i.pending;do{if(i.pending===i.pending_buf_size){if(i.gzhead.hcrc&&i.pending>n&&(e.adler=pe(e.adler,i.pending_buf,i.pending-n,n)),Ye(e),0!==i.pending)return i.last_flush=-1,Ie;n=0}t=i.gzindex<i.gzhead.name.length?255&i.gzhead.name.charCodeAt(i.gzindex++):0,Ze(i,t)}while(0!==t);i.gzhead.hcrc&&i.pending>n&&(e.adler=pe(e.adler,i.pending_buf,i.pending-n,n)),i.gzindex=0}i.status=91}if(91===i.status){if(i.gzhead.comment){let t,n=i.pending;do{if(i.pending===i.pending_buf_size){if(i.gzhead.hcrc&&i.pending>n&&(e.adler=pe(e.adler,i.pending_buf,i.pending-n,n)),Ye(e),0!==i.pending)return i.last_flush=-1,Ie;n=0}t=i.gzindex<i.gzhead.comment.length?255&i.gzhead.comment.charCodeAt(i.gzindex++):0,Ze(i,t)}while(0!==t);i.gzhead.hcrc&&i.pending>n&&(e.adler=pe(e.adler,i.pending_buf,i.pending-n,n))}i.status=103}if(103===i.status){if(i.gzhead.hcrc){if(i.pending+2>i.pending_buf_size&&(Ye(e),0!==i.pending))return i.last_flush=-1,Ie;Ze(i,255&e.adler),Ze(i,e.adler>>8&255),e.adler=0}if(i.status=Qe,Ye(e),0!==i.pending)return i.last_flush=-1,Ie}if(0!==e.avail_in||0!==i.lookahead||t!==Ae&&i.status!==Ue){let n=0===i.level?nt(i,t):i.strategy===De?((e,t)=>{let i;for(;;){if(0===e.lookahead&&(it(e),0===e.lookahead)){if(t===Ae)return 1;break}if(e.match_length=0,i=ve(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++,i&&(Xe(e,!1),0===e.strm.avail_out))return 1}return e.insert=0,t===xe?(Xe(e,!0),0===e.strm.avail_out?3:4):e.sym_next&&(Xe(e,!1),0===e.strm.avail_out)?1:2})(i,t):i.strategy===Te?((e,t)=>{let i,n,r,s;const o=e.window;for(;;){if(e.lookahead<=Oe){if(it(e),e.lookahead<=Oe&&t===Ae)return 1;if(0===e.lookahead)break}if(e.match_length=0,e.lookahead>=3&&e.strstart>0&&(r=e.strstart-1,n=o[r],n===o[++r]&&n===o[++r]&&n===o[++r])){s=e.strstart+Oe;do{}while(n===o[++r]&&n===o[++r]&&n===o[++r]&&n===o[++r]&&n===o[++r]&&n===o[++r]&&n===o[++r]&&n===o[++r]&&r<s);e.match_length=Oe-(s-r),e.match_length>e.lookahead&&(e.match_length=e.lookahead)}if(e.match_length>=3?(i=ve(e,1,e.match_length-3),e.lookahead-=e.match_length,e.strstart+=e.match_length,e.match_length=0):(i=ve(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++),i&&(Xe(e,!1),0===e.strm.avail_out))return 1}return e.insert=0,t===xe?(Xe(e,!0),0===e.strm.avail_out?3:4):e.sym_next&&(Xe(e,!1),0===e.strm.avail_out)?1:2})(i,t):at[i.level].func(i,t);if(3!==n&&4!==n||(i.status=Ue),1===n||3===n)return 0===e.avail_out&&(i.last_flush=-1),Ie;if(2===n&&(t===Ce?ye(i):t!==ke&&(be(i,0,0,!1),t===_e&&(We(i.head),0===i.lookahead&&(i.strstart=0,i.block_start=0,i.insert=0))),Ye(e),0===e.avail_out))return i.last_flush=-1,Ie}return t!==xe?Ie:i.wrap<=0?Se:(2===i.wrap?(Ze(i,255&e.adler),Ze(i,e.adler>>8&255),Ze(i,e.adler>>16&255),Ze(i,e.adler>>24&255),Ze(i,255&e.total_in),Ze(i,e.total_in>>8&255),Ze(i,e.total_in>>16&255),Ze(i,e.total_in>>24&255)):(Je(i,e.adler>>>16),Je(i,65535&e.adler)),Ye(e),i.wrap>0&&(i.wrap=-i.wrap),0!==i.pending?Ie:Se)},deflateEnd:e=>{if(lt(e))return Ee;const t=e.state.status;return e.state=null,t===Qe?je(e,Ne):Ie},deflateSetDictionary:ft,deflateInfo:"pako deflate (from Nodeca project)"};const gt=(e,t)=>Object.prototype.hasOwnProperty.call(e,t);var mt=function(e){const t=Array.prototype.slice.call(arguments,1);for(;t.length;){const i=t.shift();if(i){if("object"!=typeof i)throw new TypeError(i+"must be non-object");for(const t in i)gt(i,t)&&(e[t]=i[t])}}return e},wt=e=>{let t=0;for(let i=0,n=e.length;i<n;i++)t+=e[i].length;const i=new Uint8Array(t);for(let t=0,n=0,r=e.length;t<r;t++){let r=e[t];i.set(r,n),n+=r.length}return i};let bt=!0;try{String.fromCharCode.apply(null,new Uint8Array(1))}catch(Uv){bt=!1}const Ft=new Uint8Array(256);for(let jv=0;jv<256;jv++)Ft[jv]=jv>=252?6:jv>=248?5:jv>=240?4:jv>=224?3:jv>=192?2:1;Ft[254]=Ft[254]=1;var vt=e=>{if("function"==typeof TextEncoder&&TextEncoder.prototype.encode)return(new TextEncoder).encode(e);let t,i,n,r,s,o=e.length,a=0;for(r=0;r<o;r++)i=e.charCodeAt(r),55296==(64512&i)&&r+1<o&&(n=e.charCodeAt(r+1),56320==(64512&n)&&(i=65536+(i-55296<<10)+(n-56320),r++)),a+=i<128?1:i<2048?2:i<65536?3:4;for(t=new Uint8Array(a),s=0,r=0;s<a;r++)i=e.charCodeAt(r),55296==(64512&i)&&r+1<o&&(n=e.charCodeAt(r+1),56320==(64512&n)&&(i=65536+(i-55296<<10)+(n-56320),r++)),i<128?t[s++]=i:i<2048?(t[s++]=192|i>>>6,t[s++]=128|63&i):i<65536?(t[s++]=224|i>>>12,t[s++]=128|i>>>6&63,t[s++]=128|63&i):(t[s++]=240|i>>>18,t[s++]=128|i>>>12&63,t[s++]=128|i>>>6&63,t[s++]=128|63&i);return t},yt=(e,t)=>{const i=t||e.length;if("function"==typeof TextDecoder&&TextDecoder.prototype.decode)return(new TextDecoder).decode(e.subarray(0,t));let n,r;const s=new Array(2*i);for(r=0,n=0;n<i;){let t=e[n++];if(t<128){s[r++]=t;continue}let o=Ft[t];if(o>4)s[r++]=65533,n+=o-1;else{for(t&=2===o?31:3===o?15:7;o>1&&n<i;)t=t<<6|63&e[n++],o--;o>1?s[r++]=65533:t<65536?s[r++]=t:(t-=65536,s[r++]=55296|t>>10&1023,s[r++]=56320|1023&t)}}return((e,t)=>{if(t<65534&&e.subarray&&bt)return String.fromCharCode.apply(null,e.length===t?e:e.subarray(0,t));let i="";for(let n=0;n<t;n++)i+=String.fromCharCode(e[n]);return i})(s,r)},At=(e,t)=>{(t=t||e.length)>e.length&&(t=e.length);let i=t-1;for(;i>=0&&128==(192&e[i]);)i--;return i<0||0===i?t:i+Ft[e[i]]>t?i:t};var Ct=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0};const _t=Object.prototype.toString,{Z_NO_FLUSH:xt,Z_SYNC_FLUSH:kt,Z_FULL_FLUSH:It,Z_FINISH:St,Z_OK:Et,Z_STREAM_END:Nt,Z_DEFAULT_COMPRESSION:Mt,Z_DEFAULT_STRATEGY:Rt,Z_DEFLATED:Bt}=me;function Dt(e){this.options=mt({level:Mt,method:Bt,chunkSize:16384,windowBits:15,memLevel:8,strategy:Rt},e||{});let t=this.options;t.raw&&t.windowBits>0?t.windowBits=-t.windowBits:t.gzip&&t.windowBits>0&&t.windowBits<16&&(t.windowBits+=16),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new Ct,this.strm.avail_out=0;let i=pt.deflateInit2(this.strm,t.level,t.method,t.windowBits,t.memLevel,t.strategy);if(i!==Et)throw new Error(ge[i]);if(t.header&&pt.deflateSetHeader(this.strm,t.header),t.dictionary){let e;if(e="string"==typeof t.dictionary?vt(t.dictionary):"[object ArrayBuffer]"===_t.call(t.dictionary)?new Uint8Array(t.dictionary):t.dictionary,i=pt.deflateSetDictionary(this.strm,e),i!==Et)throw new Error(ge[i]);this._dict_set=!0}}function Tt(e,t){const i=new Dt(t);if(i.push(e,!0),i.err)throw i.msg||ge[i.err];return i.result}Dt.prototype.push=function(e,t){const i=this.strm,n=this.options.chunkSize;let r,s;if(this.ended)return!1;for(s=t===~~t?t:!0===t?St:xt,"string"==typeof e?i.input=vt(e):"[object ArrayBuffer]"===_t.call(e)?i.input=new Uint8Array(e):i.input=e,i.next_in=0,i.avail_in=i.input.length;;)if(0===i.avail_out&&(i.output=new Uint8Array(n),i.next_out=0,i.avail_out=n),(s===kt||s===It)&&i.avail_out<=6)this.onData(i.output.subarray(0,i.next_out)),i.avail_out=0;else{if(r=pt.deflate(i,s),r===Nt)return i.next_out>0&&this.onData(i.output.subarray(0,i.next_out)),r=pt.deflateEnd(this.strm),this.onEnd(r),this.ended=!0,r===Et;if(0!==i.avail_out){if(s>0&&i.next_out>0)this.onData(i.output.subarray(0,i.next_out)),i.avail_out=0;else if(0===i.avail_in)break}else this.onData(i.output)}return!0},Dt.prototype.onData=function(e){this.chunks.push(e)},Dt.prototype.onEnd=function(e){e===Et&&(this.result=wt(this.chunks)),this.chunks=[],this.err=e,this.msg=this.strm.msg};var zt=function(e,t){return(t=t||{}).raw=!0,Tt(e,t)},Lt=function(e,t){return(t=t||{}).gzip=!0,Tt(e,t)},Ht={Deflate:Dt,deflate:Tt,deflateRaw:zt,gzip:Lt,constants:me};const Pt=16209;var Ot=function(e,t){let i,n,r,s,o,a,c,l,h,d,u,f,p,g,m,w,b,F,v,y,A,C,_,x;const k=e.state;i=e.next_in,_=e.input,n=i+(e.avail_in-5),r=e.next_out,x=e.output,s=r-(t-e.avail_out),o=r+(e.avail_out-257),a=k.dmax,c=k.wsize,l=k.whave,h=k.wnext,d=k.window,u=k.hold,f=k.bits,p=k.lencode,g=k.distcode,m=(1<<k.lenbits)-1,w=(1<<k.distbits)-1;e:do{f<15&&(u+=_[i++]<<f,f+=8,u+=_[i++]<<f,f+=8),b=p[u&m];t:for(;;){if(F=b>>>24,u>>>=F,f-=F,F=b>>>16&255,0===F)x[r++]=65535&b;else{if(!(16&F)){if(64&F){if(32&F){k.mode=16191;break e}e.msg="invalid literal/length code",k.mode=Pt;break e}b=p[(65535&b)+(u&(1<<F)-1)];continue t}for(v=65535&b,F&=15,F&&(f<F&&(u+=_[i++]<<f,f+=8),v+=u&(1<<F)-1,u>>>=F,f-=F),f<15&&(u+=_[i++]<<f,f+=8,u+=_[i++]<<f,f+=8),b=g[u&w];;){if(F=b>>>24,u>>>=F,f-=F,F=b>>>16&255,16&F){if(y=65535&b,F&=15,f<F&&(u+=_[i++]<<f,f+=8,f<F&&(u+=_[i++]<<f,f+=8)),y+=u&(1<<F)-1,y>a){e.msg="invalid distance too far back",k.mode=Pt;break e}if(u>>>=F,f-=F,F=r-s,y>F){if(F=y-F,F>l&&k.sane){e.msg="invalid distance too far back",k.mode=Pt;break e}if(A=0,C=d,0===h){if(A+=c-F,F<v){v-=F;do{x[r++]=d[A++]}while(--F);A=r-y,C=x}}else if(h<F){if(A+=c+h-F,F-=h,F<v){v-=F;do{x[r++]=d[A++]}while(--F);if(A=0,h<v){F=h,v-=F;do{x[r++]=d[A++]}while(--F);A=r-y,C=x}}}else if(A+=h-F,F<v){v-=F;do{x[r++]=d[A++]}while(--F);A=r-y,C=x}for(;v>2;)x[r++]=C[A++],x[r++]=C[A++],x[r++]=C[A++],v-=3;v&&(x[r++]=C[A++],v>1&&(x[r++]=C[A++]))}else{A=r-y;do{x[r++]=x[A++],x[r++]=x[A++],x[r++]=x[A++],v-=3}while(v>2);v&&(x[r++]=x[A++],v>1&&(x[r++]=x[A++]))}break}if(64&F){e.msg="invalid distance code",k.mode=Pt;break e}b=g[(65535&b)+(u&(1<<F)-1)]}}break}}while(i<n&&r<o);v=f>>3,i-=v,f-=v<<3,u&=(1<<f)-1,e.next_in=i,e.next_out=r,e.avail_in=i<n?n-i+5:5-(i-n),e.avail_out=r<o?o-r+257:257-(r-o),k.hold=u,k.bits=f};const Vt=15,qt=new Uint16Array([3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,0,0]),Qt=new Uint8Array([16,16,16,16,16,16,16,16,17,17,17,17,18,18,18,18,19,19,19,19,20,20,20,20,21,21,21,21,16,72,78]),Ut=new Uint16Array([1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,0,0]),jt=new Uint8Array([16,16,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23,24,24,25,25,26,26,27,27,28,28,29,29,64,64]);var Gt=(e,t,i,n,r,s,o,a)=>{const c=a.bits;let l,h,d,u,f,p,g=0,m=0,w=0,b=0,F=0,v=0,y=0,A=0,C=0,_=0,x=null;const k=new Uint16Array(16),I=new Uint16Array(16);let S,E,N,M=null;for(g=0;g<=Vt;g++)k[g]=0;for(m=0;m<n;m++)k[t[i+m]]++;for(F=c,b=Vt;b>=1&&0===k[b];b--);if(F>b&&(F=b),0===b)return r[s++]=20971520,r[s++]=20971520,a.bits=1,0;for(w=1;w<b&&0===k[w];w++);for(F<w&&(F=w),A=1,g=1;g<=Vt;g++)if(A<<=1,A-=k[g],A<0)return-1;if(A>0&&(0===e||1!==b))return-1;for(I[1]=0,g=1;g<Vt;g++)I[g+1]=I[g]+k[g];for(m=0;m<n;m++)0!==t[i+m]&&(o[I[t[i+m]]++]=m);if(0===e?(x=M=o,p=20):1===e?(x=qt,M=Qt,p=257):(x=Ut,M=jt,p=0),_=0,m=0,g=w,f=s,v=F,y=0,d=-1,C=1<<F,u=C-1,1===e&&C>852||2===e&&C>592)return 1;for(;;){S=g-y,o[m]+1<p?(E=0,N=o[m]):o[m]>=p?(E=M[o[m]-p],N=x[o[m]-p]):(E=96,N=0),l=1<<g-y,h=1<<v,w=h;do{h-=l,r[f+(_>>y)+h]=S<<24|E<<16|N}while(0!==h);for(l=1<<g-1;_&l;)l>>=1;if(0!==l?(_&=l-1,_+=l):_=0,m++,0==--k[g]){if(g===b)break;g=t[i+o[m]]}if(g>F&&(_&u)!==d){for(0===y&&(y=F),f+=w,v=g-y,A=1<<v;v+y<b&&(A-=k[v+y],!(A<=0));)v++,A<<=1;if(C+=1<<v,1===e&&C>852||2===e&&C>592)return 1;d=_&u,r[d]=F<<24|v<<16|f-s}}return 0!==_&&(r[f+_]=g-y<<24|64<<16),a.bits=F,0};const{Z_FINISH:Wt,Z_BLOCK:$t,Z_TREES:Kt,Z_OK:Yt,Z_STREAM_END:Xt,Z_NEED_DICT:Zt,Z_STREAM_ERROR:Jt,Z_DATA_ERROR:ei,Z_MEM_ERROR:ti,Z_BUF_ERROR:ii,Z_DEFLATED:ni}=me,ri=16180,si=16190,oi=16191,ai=16192,ci=16194,li=16199,hi=16200,di=16206,ui=16209,fi=e=>(e>>>24&255)+(e>>>8&65280)+((65280&e)<<8)+((255&e)<<24);function pi(){this.strm=null,this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new Uint16Array(320),this.work=new Uint16Array(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}const gi=e=>{if(!e)return 1;const t=e.state;return!t||t.strm!==e||t.mode<ri||t.mode>16211?1:0},mi=e=>{if(gi(e))return Jt;const t=e.state;return e.total_in=e.total_out=t.total=0,e.msg="",t.wrap&&(e.adler=1&t.wrap),t.mode=ri,t.last=0,t.havedict=0,t.flags=-1,t.dmax=32768,t.head=null,t.hold=0,t.bits=0,t.lencode=t.lendyn=new Int32Array(852),t.distcode=t.distdyn=new Int32Array(592),t.sane=1,t.back=-1,Yt},wi=e=>{if(gi(e))return Jt;const t=e.state;return t.wsize=0,t.whave=0,t.wnext=0,mi(e)},bi=(e,t)=>{let i;if(gi(e))return Jt;const n=e.state;return t<0?(i=0,t=-t):(i=5+(t>>4),t<48&&(t&=15)),t&&(t<8||t>15)?Jt:(null!==n.window&&n.wbits!==t&&(n.window=null),n.wrap=i,n.wbits=t,wi(e))},Fi=(e,t)=>{if(!e)return Jt;const i=new pi;e.state=i,i.strm=e,i.window=null,i.mode=ri;const n=bi(e,t);return n!==Yt&&(e.state=null),n};let vi,yi,Ai=!0;const Ci=e=>{if(Ai){vi=new Int32Array(512),yi=new Int32Array(32);let t=0;for(;t<144;)e.lens[t++]=8;for(;t<256;)e.lens[t++]=9;for(;t<280;)e.lens[t++]=7;for(;t<288;)e.lens[t++]=8;for(Gt(1,e.lens,0,288,vi,0,e.work,{bits:9}),t=0;t<32;)e.lens[t++]=5;Gt(2,e.lens,0,32,yi,0,e.work,{bits:5}),Ai=!1}e.lencode=vi,e.lenbits=9,e.distcode=yi,e.distbits=5},_i=(e,t,i,n)=>{let r;const s=e.state;return null===s.window&&(s.wsize=1<<s.wbits,s.wnext=0,s.whave=0,s.window=new Uint8Array(s.wsize)),n>=s.wsize?(s.window.set(t.subarray(i-s.wsize,i),0),s.wnext=0,s.whave=s.wsize):(r=s.wsize-s.wnext,r>n&&(r=n),s.window.set(t.subarray(i-n,i-n+r),s.wnext),(n-=r)?(s.window.set(t.subarray(i-n,i),0),s.wnext=n,s.whave=s.wsize):(s.wnext+=r,s.wnext===s.wsize&&(s.wnext=0),s.whave<s.wsize&&(s.whave+=r))),0};var xi={inflateReset:wi,inflateReset2:bi,inflateResetKeep:mi,inflateInit:e=>Fi(e,15),inflateInit2:Fi,inflate:(e,t)=>{let i,n,r,s,o,a,c,l,h,d,u,f,p,g,m,w,b,F,v,y,A,C,_=0;const x=new Uint8Array(4);let k,I;const S=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]);if(gi(e)||!e.output||!e.input&&0!==e.avail_in)return Jt;i=e.state,i.mode===oi&&(i.mode=ai),o=e.next_out,r=e.output,c=e.avail_out,s=e.next_in,n=e.input,a=e.avail_in,l=i.hold,h=i.bits,d=a,u=c,C=Yt;e:for(;;)switch(i.mode){case ri:if(0===i.wrap){i.mode=ai;break}for(;h<16;){if(0===a)break e;a--,l+=n[s++]<<h,h+=8}if(2&i.wrap&&35615===l){0===i.wbits&&(i.wbits=15),i.check=0,x[0]=255&l,x[1]=l>>>8&255,i.check=pe(i.check,x,2,0),l=0,h=0,i.mode=16181;break}if(i.head&&(i.head.done=!1),!(1&i.wrap)||(((255&l)<<8)+(l>>8))%31){e.msg="incorrect header check",i.mode=ui;break}if((15&l)!==ni){e.msg="unknown compression method",i.mode=ui;break}if(l>>>=4,h-=4,A=8+(15&l),0===i.wbits&&(i.wbits=A),A>15||A>i.wbits){e.msg="invalid window size",i.mode=ui;break}i.dmax=1<<i.wbits,i.flags=0,e.adler=i.check=1,i.mode=512&l?16189:oi,l=0,h=0;break;case 16181:for(;h<16;){if(0===a)break e;a--,l+=n[s++]<<h,h+=8}if(i.flags=l,(255&i.flags)!==ni){e.msg="unknown compression method",i.mode=ui;break}if(57344&i.flags){e.msg="unknown header flags set",i.mode=ui;break}i.head&&(i.head.text=l>>8&1),512&i.flags&&4&i.wrap&&(x[0]=255&l,x[1]=l>>>8&255,i.check=pe(i.check,x,2,0)),l=0,h=0,i.mode=16182;case 16182:for(;h<32;){if(0===a)break e;a--,l+=n[s++]<<h,h+=8}i.head&&(i.head.time=l),512&i.flags&&4&i.wrap&&(x[0]=255&l,x[1]=l>>>8&255,x[2]=l>>>16&255,x[3]=l>>>24&255,i.check=pe(i.check,x,4,0)),l=0,h=0,i.mode=16183;case 16183:for(;h<16;){if(0===a)break e;a--,l+=n[s++]<<h,h+=8}i.head&&(i.head.xflags=255&l,i.head.os=l>>8),512&i.flags&&4&i.wrap&&(x[0]=255&l,x[1]=l>>>8&255,i.check=pe(i.check,x,2,0)),l=0,h=0,i.mode=16184;case 16184:if(1024&i.flags){for(;h<16;){if(0===a)break e;a--,l+=n[s++]<<h,h+=8}i.length=l,i.head&&(i.head.extra_len=l),512&i.flags&&4&i.wrap&&(x[0]=255&l,x[1]=l>>>8&255,i.check=pe(i.check,x,2,0)),l=0,h=0}else i.head&&(i.head.extra=null);i.mode=16185;case 16185:if(1024&i.flags&&(f=i.length,f>a&&(f=a),f&&(i.head&&(A=i.head.extra_len-i.length,i.head.extra||(i.head.extra=new Uint8Array(i.head.extra_len)),i.head.extra.set(n.subarray(s,s+f),A)),512&i.flags&&4&i.wrap&&(i.check=pe(i.check,n,f,s)),a-=f,s+=f,i.length-=f),i.length))break e;i.length=0,i.mode=16186;case 16186:if(2048&i.flags){if(0===a)break e;f=0;do{A=n[s+f++],i.head&&A&&i.length<65536&&(i.head.name+=String.fromCharCode(A))}while(A&&f<a);if(512&i.flags&&4&i.wrap&&(i.check=pe(i.check,n,f,s)),a-=f,s+=f,A)break e}else i.head&&(i.head.name=null);i.length=0,i.mode=16187;case 16187:if(4096&i.flags){if(0===a)break e;f=0;do{A=n[s+f++],i.head&&A&&i.length<65536&&(i.head.comment+=String.fromCharCode(A))}while(A&&f<a);if(512&i.flags&&4&i.wrap&&(i.check=pe(i.check,n,f,s)),a-=f,s+=f,A)break e}else i.head&&(i.head.comment=null);i.mode=16188;case 16188:if(512&i.flags){for(;h<16;){if(0===a)break e;a--,l+=n[s++]<<h,h+=8}if(4&i.wrap&&l!==(65535&i.check)){e.msg="header crc mismatch",i.mode=ui;break}l=0,h=0}i.head&&(i.head.hcrc=i.flags>>9&1,i.head.done=!0),e.adler=i.check=0,i.mode=oi;break;case 16189:for(;h<32;){if(0===a)break e;a--,l+=n[s++]<<h,h+=8}e.adler=i.check=fi(l),l=0,h=0,i.mode=si;case si:if(0===i.havedict)return e.next_out=o,e.avail_out=c,e.next_in=s,e.avail_in=a,i.hold=l,i.bits=h,Zt;e.adler=i.check=1,i.mode=oi;case oi:if(t===$t||t===Kt)break e;case ai:if(i.last){l>>>=7&h,h-=7&h,i.mode=di;break}for(;h<3;){if(0===a)break e;a--,l+=n[s++]<<h,h+=8}switch(i.last=1&l,l>>>=1,h-=1,3&l){case 0:i.mode=16193;break;case 1:if(Ci(i),i.mode=li,t===Kt){l>>>=2,h-=2;break e}break;case 2:i.mode=16196;break;case 3:e.msg="invalid block type",i.mode=ui}l>>>=2,h-=2;break;case 16193:for(l>>>=7&h,h-=7&h;h<32;){if(0===a)break e;a--,l+=n[s++]<<h,h+=8}if((65535&l)!=(l>>>16^65535)){e.msg="invalid stored block lengths",i.mode=ui;break}if(i.length=65535&l,l=0,h=0,i.mode=ci,t===Kt)break e;case ci:i.mode=16195;case 16195:if(f=i.length,f){if(f>a&&(f=a),f>c&&(f=c),0===f)break e;r.set(n.subarray(s,s+f),o),a-=f,s+=f,c-=f,o+=f,i.length-=f;break}i.mode=oi;break;case 16196:for(;h<14;){if(0===a)break e;a--,l+=n[s++]<<h,h+=8}if(i.nlen=257+(31&l),l>>>=5,h-=5,i.ndist=1+(31&l),l>>>=5,h-=5,i.ncode=4+(15&l),l>>>=4,h-=4,i.nlen>286||i.ndist>30){e.msg="too many length or distance symbols",i.mode=ui;break}i.have=0,i.mode=16197;case 16197:for(;i.have<i.ncode;){for(;h<3;){if(0===a)break e;a--,l+=n[s++]<<h,h+=8}i.lens[S[i.have++]]=7&l,l>>>=3,h-=3}for(;i.have<19;)i.lens[S[i.have++]]=0;if(i.lencode=i.lendyn,i.lenbits=7,k={bits:i.lenbits},C=Gt(0,i.lens,0,19,i.lencode,0,i.work,k),i.lenbits=k.bits,C){e.msg="invalid code lengths set",i.mode=ui;break}i.have=0,i.mode=16198;case 16198:for(;i.have<i.nlen+i.ndist;){for(;_=i.lencode[l&(1<<i.lenbits)-1],m=_>>>24,w=_>>>16&255,b=65535&_,!(m<=h);){if(0===a)break e;a--,l+=n[s++]<<h,h+=8}if(b<16)l>>>=m,h-=m,i.lens[i.have++]=b;else{if(16===b){for(I=m+2;h<I;){if(0===a)break e;a--,l+=n[s++]<<h,h+=8}if(l>>>=m,h-=m,0===i.have){e.msg="invalid bit length repeat",i.mode=ui;break}A=i.lens[i.have-1],f=3+(3&l),l>>>=2,h-=2}else if(17===b){for(I=m+3;h<I;){if(0===a)break e;a--,l+=n[s++]<<h,h+=8}l>>>=m,h-=m,A=0,f=3+(7&l),l>>>=3,h-=3}else{for(I=m+7;h<I;){if(0===a)break e;a--,l+=n[s++]<<h,h+=8}l>>>=m,h-=m,A=0,f=11+(127&l),l>>>=7,h-=7}if(i.have+f>i.nlen+i.ndist){e.msg="invalid bit length repeat",i.mode=ui;break}for(;f--;)i.lens[i.have++]=A}}if(i.mode===ui)break;if(0===i.lens[256]){e.msg="invalid code -- missing end-of-block",i.mode=ui;break}if(i.lenbits=9,k={bits:i.lenbits},C=Gt(1,i.lens,0,i.nlen,i.lencode,0,i.work,k),i.lenbits=k.bits,C){e.msg="invalid literal/lengths set",i.mode=ui;break}if(i.distbits=6,i.distcode=i.distdyn,k={bits:i.distbits},C=Gt(2,i.lens,i.nlen,i.ndist,i.distcode,0,i.work,k),i.distbits=k.bits,C){e.msg="invalid distances set",i.mode=ui;break}if(i.mode=li,t===Kt)break e;case li:i.mode=hi;case hi:if(a>=6&&c>=258){e.next_out=o,e.avail_out=c,e.next_in=s,e.avail_in=a,i.hold=l,i.bits=h,Ot(e,u),o=e.next_out,r=e.output,c=e.avail_out,s=e.next_in,n=e.input,a=e.avail_in,l=i.hold,h=i.bits,i.mode===oi&&(i.back=-1);break}for(i.back=0;_=i.lencode[l&(1<<i.lenbits)-1],m=_>>>24,w=_>>>16&255,b=65535&_,!(m<=h);){if(0===a)break e;a--,l+=n[s++]<<h,h+=8}if(w&&!(240&w)){for(F=m,v=w,y=b;_=i.lencode[y+((l&(1<<F+v)-1)>>F)],m=_>>>24,w=_>>>16&255,b=65535&_,!(F+m<=h);){if(0===a)break e;a--,l+=n[s++]<<h,h+=8}l>>>=F,h-=F,i.back+=F}if(l>>>=m,h-=m,i.back+=m,i.length=b,0===w){i.mode=16205;break}if(32&w){i.back=-1,i.mode=oi;break}if(64&w){e.msg="invalid literal/length code",i.mode=ui;break}i.extra=15&w,i.mode=16201;case 16201:if(i.extra){for(I=i.extra;h<I;){if(0===a)break e;a--,l+=n[s++]<<h,h+=8}i.length+=l&(1<<i.extra)-1,l>>>=i.extra,h-=i.extra,i.back+=i.extra}i.was=i.length,i.mode=16202;case 16202:for(;_=i.distcode[l&(1<<i.distbits)-1],m=_>>>24,w=_>>>16&255,b=65535&_,!(m<=h);){if(0===a)break e;a--,l+=n[s++]<<h,h+=8}if(!(240&w)){for(F=m,v=w,y=b;_=i.distcode[y+((l&(1<<F+v)-1)>>F)],m=_>>>24,w=_>>>16&255,b=65535&_,!(F+m<=h);){if(0===a)break e;a--,l+=n[s++]<<h,h+=8}l>>>=F,h-=F,i.back+=F}if(l>>>=m,h-=m,i.back+=m,64&w){e.msg="invalid distance code",i.mode=ui;break}i.offset=b,i.extra=15&w,i.mode=16203;case 16203:if(i.extra){for(I=i.extra;h<I;){if(0===a)break e;a--,l+=n[s++]<<h,h+=8}i.offset+=l&(1<<i.extra)-1,l>>>=i.extra,h-=i.extra,i.back+=i.extra}if(i.offset>i.dmax){e.msg="invalid distance too far back",i.mode=ui;break}i.mode=16204;case 16204:if(0===c)break e;if(f=u-c,i.offset>f){if(f=i.offset-f,f>i.whave&&i.sane){e.msg="invalid distance too far back",i.mode=ui;break}f>i.wnext?(f-=i.wnext,p=i.wsize-f):p=i.wnext-f,f>i.length&&(f=i.length),g=i.window}else g=r,p=o-i.offset,f=i.length;f>c&&(f=c),c-=f,i.length-=f;do{r[o++]=g[p++]}while(--f);0===i.length&&(i.mode=hi);break;case 16205:if(0===c)break e;r[o++]=i.length,c--,i.mode=hi;break;case di:if(i.wrap){for(;h<32;){if(0===a)break e;a--,l|=n[s++]<<h,h+=8}if(u-=c,e.total_out+=u,i.total+=u,4&i.wrap&&u&&(e.adler=i.check=i.flags?pe(i.check,r,u,o-u):ue(i.check,r,u,o-u)),u=c,4&i.wrap&&(i.flags?l:fi(l))!==i.check){e.msg="incorrect data check",i.mode=ui;break}l=0,h=0}i.mode=16207;case 16207:if(i.wrap&&i.flags){for(;h<32;){if(0===a)break e;a--,l+=n[s++]<<h,h+=8}if(4&i.wrap&&l!==(4294967295&i.total)){e.msg="incorrect length check",i.mode=ui;break}l=0,h=0}i.mode=16208;case 16208:C=Xt;break e;case ui:C=ei;break e;case 16210:return ti;default:return Jt}return e.next_out=o,e.avail_out=c,e.next_in=s,e.avail_in=a,i.hold=l,i.bits=h,(i.wsize||u!==e.avail_out&&i.mode<ui&&(i.mode<di||t!==Wt))&&_i(e,e.output,e.next_out,u-e.avail_out),d-=e.avail_in,u-=e.avail_out,e.total_in+=d,e.total_out+=u,i.total+=u,4&i.wrap&&u&&(e.adler=i.check=i.flags?pe(i.check,r,u,e.next_out-u):ue(i.check,r,u,e.next_out-u)),e.data_type=i.bits+(i.last?64:0)+(i.mode===oi?128:0)+(i.mode===li||i.mode===ci?256:0),(0===d&&0===u||t===Wt)&&C===Yt&&(C=ii),C},inflateEnd:e=>{if(gi(e))return Jt;let t=e.state;return t.window&&(t.window=null),e.state=null,Yt},inflateGetHeader:(e,t)=>{if(gi(e))return Jt;const i=e.state;return 2&i.wrap?(i.head=t,t.done=!1,Yt):Jt},inflateSetDictionary:(e,t)=>{const i=t.length;let n,r,s;return gi(e)?Jt:(n=e.state,0!==n.wrap&&n.mode!==si?Jt:n.mode===si&&(r=1,r=ue(r,t,i,0),r!==n.check)?ei:(s=_i(e,t,i,i),s?(n.mode=16210,ti):(n.havedict=1,Yt)))},inflateInfo:"pako inflate (from Nodeca project)"};var ki=function(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name="",this.comment="",this.hcrc=0,this.done=!1};const Ii=Object.prototype.toString,{Z_NO_FLUSH:Si,Z_FINISH:Ei,Z_OK:Ni,Z_STREAM_END:Mi,Z_NEED_DICT:Ri,Z_STREAM_ERROR:Bi,Z_DATA_ERROR:Di,Z_MEM_ERROR:Ti}=me;function zi(e){this.options=mt({chunkSize:65536,windowBits:15,to:""},e||{});const t=this.options;t.raw&&t.windowBits>=0&&t.windowBits<16&&(t.windowBits=-t.windowBits,0===t.windowBits&&(t.windowBits=-15)),!(t.windowBits>=0&&t.windowBits<16)||e&&e.windowBits||(t.windowBits+=32),t.windowBits>15&&t.windowBits<48&&(15&t.windowBits||(t.windowBits|=15)),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new Ct,this.strm.avail_out=0;let i=xi.inflateInit2(this.strm,t.windowBits);if(i!==Ni)throw new Error(ge[i]);if(this.header=new ki,xi.inflateGetHeader(this.strm,this.header),t.dictionary&&("string"==typeof t.dictionary?t.dictionary=vt(t.dictionary):"[object ArrayBuffer]"===Ii.call(t.dictionary)&&(t.dictionary=new Uint8Array(t.dictionary)),t.raw&&(i=xi.inflateSetDictionary(this.strm,t.dictionary),i!==Ni)))throw new Error(ge[i])}function Li(e,t){const i=new zi(t);if(i.push(e),i.err)throw i.msg||ge[i.err];return i.result}zi.prototype.push=function(e,t){const i=this.strm,n=this.options.chunkSize,r=this.options.dictionary;let s,o,a;if(this.ended)return!1;for(o=t===~~t?t:!0===t?Ei:Si,"[object ArrayBuffer]"===Ii.call(e)?i.input=new Uint8Array(e):i.input=e,i.next_in=0,i.avail_in=i.input.length;;){for(0===i.avail_out&&(i.output=new Uint8Array(n),i.next_out=0,i.avail_out=n),s=xi.inflate(i,o),s===Ri&&r&&(s=xi.inflateSetDictionary(i,r),s===Ni?s=xi.inflate(i,o):s===Di&&(s=Ri));i.avail_in>0&&s===Mi&&i.state.wrap>0&&0!==e[i.next_in];)xi.inflateReset(i),s=xi.inflate(i,o);switch(s){case Bi:case Di:case Ri:case Ti:return this.onEnd(s),this.ended=!0,!1}if(a=i.avail_out,i.next_out&&(0===i.avail_out||s===Mi))if("string"===this.options.to){let e=At(i.output,i.next_out),t=i.next_out-e,r=yt(i.output,e);i.next_out=t,i.avail_out=n-t,t&&i.output.set(i.output.subarray(e,e+t),0),this.onData(r)}else this.onData(i.output.length===i.next_out?i.output:i.output.subarray(0,i.next_out));if(s!==Ni||0!==a){if(s===Mi)return s=xi.inflateEnd(this.strm),this.onEnd(s),this.ended=!0,!0;if(0===i.avail_in)break}}return!0},zi.prototype.onData=function(e){this.chunks.push(e)},zi.prototype.onEnd=function(e){e===Ni&&("string"===this.options.to?this.result=this.chunks.join(""):this.result=wt(this.chunks)),this.chunks=[],this.err=e,this.msg=this.strm.msg};var Hi=function(e,t){return(t=t||{}).raw=!0,Li(e,t)},Pi={Inflate:zi,inflate:Li,inflateRaw:Hi,ungzip:Li,constants:me};const{Deflate:Oi,deflate:Vi,deflateRaw:qi,gzip:Qi}=Ht,{Inflate:Ui,inflate:ji,inflateRaw:Gi,ungzip:Wi}=Pi;var $i=qi,Ki=ji,Yi=Gi,Xi=Wi;function Zi(e){const t=ArrayBuffer.isView(e)?e:new Uint8Array(e);return 31===t[0]&&139===t[1]}function Ji(e){const t=ArrayBuffer.isView(e)?e:new Uint8Array(e);return 0!==(4&t[3])&&66===t[12]&&67===t[13]?en(t.buffer):Xi(t)}function en(e,t){const i=[];let n=0,r=0;for(t=t||e.byteLength-18;n<t;)try{const t=ArrayBuffer.isView(e)?e:new Uint8Array(e,n,18),s=t[11]<<8|t[10],o=(t[3],t[12],t[13],t[15],t[14],1+(t[17]<<8|t[16])),a=12+s+n,c=e.byteLength-a,l=o-s-19;if(c<l||l<=0)break;const h=new Uint8Array(e,a,l),d=Yi(h);n+=l-1+26,r+=d.byteLength,i.push(d)}catch(e){console.error(e);break}if(1===i.length)return i[0];{const e=new Uint8Array(r);let t=0;for(let n=0;n<i.length;++n){var s=new Uint8Array(i[n]);rn(s,0,e,t,s.length),t+=s.length}return e}}function tn(e){const t=ArrayBuffer.isView(e)?e:new Uint8Array(e);return 1+(t[17]<<8|t[16])}const nn="function"==typeof new Uint8Array(1).subarray;function rn(e,t,i,n,r){if(0!==r){if(!e)throw"Undef src";if(!i)throw"Undef dest";0===t&&r===e.length?sn(e,i,n):nn?sn(e.subarray(t,t+r),i,n):1===e.BYTES_PER_ELEMENT&&r>100?sn(new Uint8Array(e.buffer,e.byteOffset+t,r),i,n):function(e,t,i,n,r){for(let s=0;s<r;++s)i[n+s]=e[t+s]}(e,t,i,n,r)}}function sn(e,t,i){t.set(e,i)}function on(e,t){const i=e.split(","),n=i[0].split(":")[1];let r=i[1];if(n.indexOf("base64")>=0){r=atob(r);const e=new Uint8Array(r.length);for(let t=0;t<r.length;t++)e[t]=r.charCodeAt(t);let i;return i=t||n.indexOf("gzip")>0?Xi(e):e,i}return decodeURIComponent(r)}const an=(e,t,i)=>(1-i)*e+i*t,cn=function(e,t,i){return Math.min(Math.max(e,t),i)},ln=function(e){return Math.log(e)/Math.LN2};function hn(){this.content=[]}function dn(e,t){return Math.random()*(t-e)+e}hn.prototype={push:function(e){this.content.push(e),this.bubbleUp(this.content.length-1)},pop:function(){var e=this.content[0],t=this.content.pop();return this.content.length>0&&(this.content[0]=t,this.sinkDown(0)),e},remove:function(e){for(var t=this.content.length,i=0;i<t;i++)if(this.content[i]===e){var n=this.content.pop();if(i===t-1)break;this.content[i]=n,this.bubbleUp(i),this.sinkDown(i);break}},size:function(){return this.content.length},bubbleUp:function(e){for(var t=this.content[e],i=t;e>0;){var n=Math.floor((e+1)/2)-1,r=this.content[n];if(i>=r)break;this.content[n]=t,this.content[e]=r,e=n}},sinkDown:function(e){for(var t=this.content.length,i=this.content[e],n=i;;){var r=2*(e+1),s=r-1,o=null;if(s<t){var a=this.content[s],c=a;a<n&&(o=s)}if(r<t)this.content[r]<(null==o?n:c)&&(o=r);if(null==o)break;this.content[e]=this.content[o],this.content[o]=i,e=o}}};const un={rgbListFromHSV:()=>{let e=[];for(let t=1;t>=.5;t-=.1)for(let i=0;i<1;i+=1/28){const n="rgb("+un.hsvToRgb(i,1,t).join(",")+")";e.push(n)}return e.pop(),e.push(un.rgbColor(16,16,16)),e},rgbToHex:function(e){return(e=e.match(/^rgba?[\s+]?\([\s+]?(\d+)[\s+]?,[\s+]?(\d+)[\s+]?,[\s+]?(\d+)[\s+]?/i))&&4===e.length?"#"+("0"+parseInt(e[1],10).toString(16)).slice(-2)+("0"+parseInt(e[2],10).toString(16)).slice(-2)+("0"+parseInt(e[3],10).toString(16)).slice(-2):""},hexToRgb:function(e){var t=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(e);if(null!==t)return"rgb("+parseInt(t[1],16)+","+parseInt(t[2],16)+","+parseInt(t[3],16)+")"},hsvToRgb:function(e,t,i){var n,r,s,o=Math.floor(6*e),a=6*e-o,c=i*(1-t),l=i*(1-a*t),h=i*(1-(1-a)*t);switch(o%6){case 0:n=i,r=h,s=c;break;case 1:n=l,r=i,s=c;break;case 2:n=c,r=i,s=h;break;case 3:n=c,r=l,s=i;break;case 4:n=h,r=c,s=i;break;case 5:n=i,r=c,s=l}return[Math.floor(255*n),Math.floor(255*r),Math.floor(255*s)]},hslToRgb:function(e,t,i){var n,r,s;if(0===t)n=r=s=i;else{var o=i<.5?i*(1+t):i+t-i*t,a=2*i-o;n=un.hue2rgb(a,o,e+1/3),r=un.hue2rgb(a,o,e),s=un.hue2rgb(a,o,e-1/3)}return[255*n,255*r,255*s]},hue2rgb:(e,t,i)=>(i<0&&(i+=1),i>1&&(i-=1),i<1/6?e+6*(t-e)*i:i<.5?t:i<2/3?e+(t-e)*(2/3-i)*6:e),rgbaColor:function(e,t,i,n){return"rgba("+(e=cn(e,0,255))+","+(t=cn(t,0,255))+","+(i=cn(i,0,255))+","+(n=cn(n,0,1))+")"},rgbColor:function(e,t,i){return"rgb("+(e=cn(e,0,255))+","+(t=cn(t,0,255))+","+(i=cn(i,0,255))+")"},greyScale:function(e){var t=cn(e,0,255);return"rgb("+t+","+t+","+t+")"},randomGrey:function(e,t){e=cn(e,0,255),t=cn(t,0,255);var i=Math.round(dn(e,t)).toString(10);return"rgb("+i+","+i+","+i+")"},randomRGB:function(e,t){return e=cn(e,0,255),t=cn(t,0,255),"rgb("+Math.round(dn(e,t)).toString(10)+","+Math.round(dn(e,t)).toString(10)+","+Math.round(dn(e,t)).toString(10)+")"},randomRGBConstantAlpha:function(e,t,i){return e=cn(e,0,255),t=cn(t,0,255),"rgba("+Math.round(dn(e,t)).toString(10)+","+Math.round(dn(e,t)).toString(10)+","+Math.round(dn(e,t)).toString(10)+","+i+")"},addAlpha:function(e,t){if("0"===e||"."===e)e="rgb(0,0,0)";else{const t=this.colorNameToHex(e);t&&(e=t)}var i=/(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i.test(e);if(e.startsWith("rgba")){const i=e.lastIndexOf(",");return e.substring(0,i+1)+t.toString()+")"}return i&&(e=un.hexToRgb(e)),e.startsWith("rgb")?e.replace("rgb","rgba").replace(")",", "+t+")"):(console.log(e+" is not an rgb style string"),e)},rgbComponents:function(e){if("0"===e||"."===e)return[0,0,0];if(/(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i.test(e))e=un.hexToRgb(e);else if(!e.startsWith("rgb")){const t=this.colorNameToHex(e);e=this.hexToRgb(t)}if(e.startsWith("rgb("))return e.substring(4,e.length-1).split(",").map((e=>Number.parseInt(e.trim())));if(e.startsWith("rgba("))return e.substring(5,e.length-1).split(",").map(((e,t)=>(e=e.trim(),3===t?Number.parseFloat(e):Number.parseInt(e))));throw Error("Unrecognized color string: color")},getCompositeColor:function(e,t,i){return"rgb("+Math.floor(i*t[0]+(1-i)*e[0])+","+Math.floor(i*t[1]+(1-i)*e[1])+","+Math.floor(i*t[2]+(1-i)*e[2])+")"},createColorString:function(e){const t=this.createColorStringSafe(e);return t||e},createColorStringSafe:function(e){if((e=function(e){return void 0===e||((e.startsWith("'")||e.startsWith('"'))&&(e=e.substring(1)),(e.endsWith("'")||e.endsWith('"'))&&(e=e.substring(0,e.length-1))),e}(e)).startsWith("rgb(")&&e.endsWith(")"))return e;if(e.startsWith("#")&&e.length<8)return e;const t=this.colorNameToHex(e);if(t)return t;const i=e.split(",");return 3===i.length&&fn(i[0])&&fn(i[1])&&fn(i[2])?`rgb(${e})`:void 0},darkenLighten:function(e,t){let i,n=this.colorNameToHex(e);i=n?un.hexToRgb(n):e.startsWith("rgb(")?e:un.hexToRgb(e);const r=i.replace(")","").substring(4).split(","),s=Math.max(0,Math.min(255,Number.parseInt(r[0].trim())+t)),o=Math.max(0,Math.min(255,Number.parseInt(r[1].trim())+t)),a=Math.max(0,Math.min(255,Number.parseInt(r[2].trim())+t));return"rgb("+s.toString()+","+o.toString()+","+a.toString()+")"},colorNameToHex:function(e){return{aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#adff2f",honeydew:"#f0fff0",hotpink:"#ff69b4","indianred ":"#cd5c5c","indigo ":"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgrey:"#d3d3d3",lightgreen:"#90ee90",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370d8",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#d87093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32",darkgrey:"#a9a9a9",darkslategrey:"#2f4f4f",dimgrey:"#696969",grey:"#808080",lightgray:"#d3d3d3",lightslategrey:"#778899",slategrey:"#708090"}[e]}};function fn(e){const t=Number.parseInt(e);return!Number.isNaN(t)&&t>=0&&t<=255}const pn="googleapis";class gn{constructor(){this.oauthTokens={}}setToken(e,t){t=t||pn,this.oauthTokens[t]=e}getToken(e){let t;e=e||pn;for(let i of Object.keys(this.oauthTokens)){if(mn(i).test(e)){t=this.oauthTokens[i];break}}return t}removeToken(e){e=e||pn;for(let t of Object.keys(this.oauthTokens)){mn(t).test(e)&&(this.oauthTokens[t]=void 0)}}}function mn(e){return new RegExp("^"+e.split(/\*+/).map(wn).join(".*")+"$")}function wn(e){return e.replace(/[|\\{}()[\]^$+*?.]/g,"\\$&")}function bn(e){return e.includes("googleapis")&&!e.includes("urlshortener")||Fn(e)||vn(e)}function Fn(e){return e.startsWith("gs://")||e.startsWith("https://www.googleapis.com/storage")||e.startsWith("https://storage.cloud.google.com")||e.startsWith("https://storage.googleapis.com")}function vn(e){return e.indexOf("drive.google.com")>=0||e.indexOf("www.googleapis.com/drive")>0}function yn(e){let{bucket:t,object:i}=function(e){let t,i;if(e.startsWith("gs://")){const n=e.indexOf("/",5);if(n>=0){t=e.substring(5,n);const r=e.indexOf("?");i=r<0?e.substring(n+1):e.substring(n+1,r)}}else if(e.startsWith("https://storage.googleapis.com")||e.startsWith("https://storage.cloud.google.com")){const n=e.indexOf("/v1/b/",8);if(n>0){const r=e.indexOf("/o/",n);if(r>0){const s=e.indexOf("?",r);t=e.substring(n+6,r),i=s>0?e.substring(r+3,s):e.substring(r+3)}}else{const n=e.indexOf("/",8),r=e.indexOf("/",n+1),s=e.indexOf("?",r);r>0&&(t=e.substring(n+1,r),i=s<0?e.substring(r+1):e.substring(r+1,s))}}else if(e.startsWith("https://www.googleapis.com/storage/v1/b")){const n=e.indexOf("/v1/b/",8),r=e.indexOf("/o/",n);if(r>0){const s=e.indexOf("?",r);t=e.substring(n+6,r),i=s>0?e.substring(r+3,s):e.substring(r+3)}}if(t&&i)return{bucket:t,object:i};throw Error(`Unrecognized Google Storage URI: ${e}`)}(e);i=function(e){let t="";return e.split("").forEach((function(e){An.has(e)?t+=An.get(e):t+=e})),t}(i);const n=e.indexOf("?");return`https://storage.googleapis.com/storage/v1/b/${t}/o/${i}${n>0?e.substring(n)+"&alt=media":"?alt=media"}`}const An=new Map;function Cn(){return window.google&&window.google.igv}async function _n(e){if(!Cn())throw Error("Google oAuth has not been initialized");if(google.igv.tokenResponse&&Date.now()<google.igv.tokenExpiresAt&&google.accounts.oauth2.hasGrantedAllScopes(google.igv.tokenResponse,e))return google.igv.tokenResponse.access_token;{const t=google.igv.tokenClient;return new Promise(((i,n)=>{try{t.callback=e=>{void 0!==e.error&&n(e),google.igv.tokenResponse=e,google.igv.tokenExpiresAt=Date.now()+1e3*e.expires_in,i(e.access_token)},t.requestAccessToken({scope:e})}catch(e){console.log(e)}}))}}function xn(){return google.igv.apiKey}function kn(e){var t=In(e);return t?"https://www.googleapis.com/drive/v3/files/"+t+"?alt=media&supportsTeamDrives=true":e}function In(e){if(e.includes("/open?id=")){const t=e.indexOf("/open?id=")+9,i=e.indexOf("&");if(t>0&&i>t)return e.substring(t,i);if(t>0)return e.substring(t)}else{if(e.includes("/file/d/")){const t=e.indexOf("/file/d/")+8,i=e.lastIndexOf("/");return e.substring(t,i)}if(e.startsWith("https://www.googleapis.com/drive")){let t=e.indexOf("/files/");const i=e.indexOf("?");if(t>0)return t+=7,i>0?e.substring(t,i):e.substring(t)}}throw Error("Unknown Google Drive url format: "+e)}An.set("!","%21"),An.set("#","%23"),An.set("$","%24"),An.set("%","%25"),An.set("&","%26"),An.set("'","%27"),An.set("(","%28"),An.set(")","%29"),An.set("*","%2A"),An.set("+","%2B"),An.set(",","%2C"),An.set("/","%2F"),An.set(":","%3A"),An.set(";","%3B"),An.set("=","%3D"),An.set("?","%3F"),An.set("@","%40"),An.set("[","%5B"),An.set("]","%5D"),An.set(" ","%20");class Sn{constructor(e){this.requestsPerSecond=e.requestsPerSecond||10,this.lastStartTime=0,this.queued=[]}add(e,t){var i=this;return new Promise((function(t,n){i.queued.push({resolve:t,reject:n,asyncFunction:e}),i.dequeue()}))}addAll(e,t){var i=e.map(function(e){return this.add(e,t)}.bind(this));return Promise.all(i)}dequeue(){if(this.queued.length>0){var e=new Date,t=1e3/this.requestsPerSecond+1,i=e-this.lastStartTime;i>=t?this._execute():setTimeout(function(){this.dequeue()}.bind(this),t-i)}}async _execute(){this.lastStartTime=new Date;var e=this.queued.shift();const t=e.asyncFunction;try{const i=await t();e.resolve(i)}catch(t){e.reject(t)}}}function En(){if(Cn()){return Cn()&&google.igv.tokenResponse&&Date.now()<google.igv.tokenExpiresAt?google.igv.tokenResponse.access_token:void 0}}function Nn(e){let t;return t=Zi(e)?Ji(e):new Uint8Array(e),"TextDecoder"in function(){if("undefined"!=typeof self)return self;return"undefined"!=typeof global?global:window}()?(new TextDecoder).decode(t):function(e){var t="",i=0;for(;i<e.length;){var n=e[i],r=0,s=0;if(n<=127?(r=0,s=255&n):n<=223?(r=1,s=31&n):n<=239?(r=2,s=15&n):n<=244&&(r=3,s=7&n),e.length-i-r>0)for(var o=0;o<r;)s=s<<6|63&(n=e[i+o+1]),o+=1;else s=65533,r=e.length-i;t+=String.fromCodePoint(s),i+=r+1}return t}(t)}const Mn=new class{constructor(){this.apiKey=void 0,this.googleThrottle=new Sn({requestsPerSecond:8}),this.RANGE_WARNING_GIVEN=!1,this.oauth=new gn}setApiKey(e){this.apiKey=e}async loadArrayBuffer(e,t){return(t=t||{}).responseType||(t.responseType="arraybuffer"),_(e)?this._loadFileSlice(e,t):this.load(e,t)}async loadByteArray(e,t){const i=await this.loadArrayBuffer(e,t);let n;return n=Zi(i)?Ji(i):new Uint8Array(i),n}async loadJson(e,t){"POST"===((t=t||{}).method||(t.sendData?"POST":"GET"))&&(t.contentType="application/json");const i=await this.loadString(e,t);return i?JSON.parse(i):i}async loadString(e,t){return t=t||{},e instanceof File?this._loadStringFromFile(e,t):this._loadStringFromUrl(e,t)}async load(e,t){t=t||{};const i=typeof e;if(_(e=await("function"==typeof e?e():e)))return this._loadFileSlice(e,t);if("function"==typeof e.startsWith){if(e.startsWith("data:")){const i=on(e).buffer;if(t.range){const e=t.range.size?t.range.start+t.range.size:i.byteLength;return i.slice(t.range.start,e)}return i}return e.startsWith("https://drive.google.com")&&(e=kn(e)),vn(e)||e.startsWith("https://www.dropbox.com")?this.googleThrottle.add((async()=>this._loadURL(e,t))):this._loadURL(e,t)}throw Error(`url must be either a 'File', 'string', 'function', or 'Promise'. Actual type: ${i}`)}async _loadURL(e,t){const i=this,n=e;e=function(e){return e.startsWith("https://www.dropbox.com")?e.replace("//www.dropbox.com","//dl.dropboxusercontent.com"):e.startsWith("https://drive.google.com")?kn(e):e.includes("//www.broadinstitute.org/igvdata")?e.replace("//www.broadinstitute.org/igvdata","//data.broadinstitute.org/igvdata"):e.includes("//igvdata.broadinstitute.org")?e.replace("//igvdata.broadinstitute.org","//s3.amazonaws.com/igv.broadinstitute.org"):e.includes("//igv.genepattern.org")?e.replace("//igv.genepattern.org","//igv-genepattern-org.s3.amazonaws.com"):e.startsWith("ftp://ftp.ncbi.nlm.nih.gov/geo")?e.replace("ftp://","https://"):e}(e);let r=(t=t||{}).oauthToken||this.getOauthToken(e);return r&&(r=await("function"==typeof r?r():r)),new Promise((function(s,o){bn(e)&&!function(e){return e.indexOf("X-Goog-Signature")>-1}(e)&&(Fn(e)&&(e=yn(e)),vn(e=function(e){let t=Mn.apiKey;t||"undefined"==typeof gapi||(t=gapi.apiKey);if(void 0!==t&&!e.includes("key=")){const i=e.includes("?")?"&":"?";e=e+i+"key="+t}return e}(e))&&function(e){if(e.includes("supportsTeamDrive"))return e;{const t=e.includes("?")?"&":"?";e=e+t+"supportsTeamDrive=true"}}(e),r||(r=En()));const a=t.headers||{};r&&function(e,t){t&&(e["Cache-Control"]="no-cache",e.Authorization="Bearer "+t)}(a,r);const c=t.range,l=new XMLHttpRequest,h=t.sendData||t.body,d=t.method||(h?"POST":"GET"),u=t.responseType,f=t.contentType,p=t.mimeType;if(l.open(d,e),t.timeout&&(l.timeout=t.timeout),c){let e="";c.size&&(e=c.start+c.size-1),l.setRequestHeader("Range","bytes="+c.start+"-"+e)}if(f&&l.setRequestHeader("Content-Type",f),p&&l.overrideMimeType(p),u&&(l.responseType=u),a)for(let e of Object.keys(a)){const t=a[e];l.setRequestHeader(e,t)}!0===t.withCredentials&&(l.withCredentials=!0),l.onload=async function(n){if(0===l.status||l.status>=200&&l.status<=300)if("HEAD"===t.method){const e=t.requestedHeaders||["content-length"],i={};for(let t of e)i[t]=l.getResponseHeader(t);s(i)}else c&&206!==l.status&&0!==c.start?(l.response.length>1e5&&!i.RANGE_WARNING_GIVEN&&alert(`Warning: Range header ignored for URL: ${e}. This can have severe performance impacts.`),s(l.response.slice(c.start,c.start+c.size))):s(l.response);else 416===l.status?g(Error("416 Unsatisfiable Range")):!Cn()||404!==l.status&&401!==l.status&&403!==l.status||!bn(e)||t.retries?403===l.status?g("Access forbidden: "+e):g(l.status):m()},l.onerror=function(i){bn(e)&&!t.retries?m():g("Error accessing resource: "+e+" Status: "+l.status)},l.ontimeout=function(e){g("Timed out")},l.onabort=function(e){console.log("Aborted"),o(e)};try{l.send(h)}catch(i){bn(e)&&!t.retries?m():g(i)}function g(e){if(!o)throw e;o(e)}async function m(){try{const e=await async function(e){if(Cn()){const t=function(e){return vn(e)?"https://www.googleapis.com/auth/drive.file":Fn(e)?"https://www.googleapis.com/auth/devstorage.read_only":"https://www.googleapis.com/auth/userinfo.profile"}(e);return await _n(t)}throw Error("Authorization is required, but Google oAuth has not been initalized. Contact your site administrator for assistance.")}(n);t.retries=1,t.oauthToken=e;const r=await i.load(n,t);s(r)}catch(e){if(e.error){const t=e.error.startsWith("popup_blocked")?"Google login popup blocked by browser.":e.error;alert(t)}else g(e)}}}))}async _loadFileSlice(e,t){let i=t&&t.range?e.slice(t.range.start,t.range.start+t.range.size):e;const n=await i.arrayBuffer();return"arraybuffer"===t.responseType?n:Nn(n)}async _loadStringFromFile(e,t){const i=t.range?e.slice(t.range.start,t.range.start+t.range.size):e;return Nn(await i.arrayBuffer())}async _loadStringFromUrl(e,t){(t=t||{}).responseType="arraybuffer";return Nn(await this.load(e,t))}setOauthToken(e,t){this.oauth.setToken(e,t)}getOauthToken(e){const t=bn(e)?void 0:k(e).host;let i=this.oauth.getToken(t);if(i)return i;if(void 0===t){const e=En();if(e&&e.expires_at>Date.now())return e.access_token}}async getContentLength(e,t){(t=t||{}).method="HEAD",t.requestedHeaders=["content-length"];const i=(await this._loadURL(e,t))["content-length"];return i?Number.parseInt(i):0}};var Rn={color:1};Rn.parent=Rn,Rn.left=Rn,Rn.right=Rn;class Bn{constructor(){this.root=Rn}insert(e,t,i){var n=new Pn(new Hn(e,t,i));for(this.treeInsert(n),n.color=2;n!==this.root&&2===n.parent.color;)if(n.parent===n.parent.parent.left){let e=n.parent.parent.right;2===e.color?(n.parent.color=1,e.color=1,n.parent.parent.color=2,n=n.parent.parent):(n===n.parent.right&&(n=n.parent,Tn.call(this,n)),n.parent.color=1,n.parent.parent.color=2,zn.call(this,n.parent.parent))}else{let e=n.parent.parent.left;2===e.color?(n.parent.color=1,e.color=1,n.parent.parent.color=2,n=n.parent.parent):(n===n.parent.left&&(n=n.parent,zn.call(this,n)),n.parent.color=1,n.parent.parent.color=2,Tn.call(this,n.parent.parent))}this.root.color=1}findOverlapping(e,t){var i=new Hn(e,t,0);if(this.root===Rn)return[];var n=Dn.call(this,i,this.root,[]);return n.length>1&&n.sort((function(e,t){return e.low-t.low})),n}logIntervals(){!function e(t,i){for(var n="",r=0;r<i;r++)n+=" ";console.log(n+t.interval.low+" "+t.interval.high),i+=5,t.left!==Rn&&e(t.left,i);t.right!==Rn&&e(t.right,i)}(this.root,0)}mapIntervals(e){!function t(i){e(i.interval),i.left!==Rn&&t(i.left);i.right!==Rn&&t(i.right)}(this.root)}treeInsert(e){for(var t=this.root,i=Rn;t!==Rn;)i=t,t=e.interval.low<=t.interval.low?t.left:t.right;e.parent=i,i===Rn?(this.root=e,e.left=e.right=Rn):e.interval.low<=i.interval.low?i.left=e:i.right=e,Ln.call(this,e)}}function Dn(e,t,i){return t.interval.overlaps(e)&&i.push(t.interval),t.left!==Rn&&t.left.max>=e.low&&Dn.call(this,e,t.left,i),t.right!==Rn&&t.right.min<=e.high&&Dn.call(this,e,t.right,i),i}function Tn(e){var t=e.right;e.right=t.left,t.left!==Rn&&(t.left.parent=e),t.parent=e.parent,e.parent===Rn?this.root=t:e.parent.left===e?e.parent.left=t:e.parent.right=t,t.left=e,e.parent=t,Ln.call(this,e)}function zn(e){var t=e.left;e.left=t.right,t.right!==Rn&&(t.right.parent=e),t.parent=e.parent,e.parent===Rn?this.root=t:e.parent.right===e?e.parent.right=t:e.parent.left=t,t.right=e,e.parent=t,Ln.call(this,e)}function Ln(e){for(;e!==Rn;){var t=e.left.max>e.right.max?e.left.max:e.right.max,i=e.interval.high;e.max=t>i?t:i;var n=e.left.min<e.right.min?e.left.min:e.right.min,r=e.interval.low;e.min=n<r?n:r,e=e.parent}}class Hn{constructor(e,t,i){this.low=e,this.high=t,this.value=i}equals(e){return!!e&&(this===e||this.low===e.low&&this.high===e.high)}compareTo(e){return this.low<e.low?-1:this.low>e.low?1:this.high<e.high?-1:this.high>e.high?1:0}overlaps(e){return this.low<=e.high&&e.low<=this.high}}function Pn(e){this.parent=Rn,this.left=Rn,this.right=Rn,this.interval=e,this.color=2}class On{constructor(e,t,i){e=e||[],this.treeMap=this.buildTreeMap(e,t),this.range=i,this.count=e.length}containsRange(e){return void 0===this.range||this.range.contains(e.chr,e.start,e.end)}findFeatures(e){const t=[];for(let i of Object.values(this.allFeatures))for(let n of i)e(n)&&t.push(n);return t}queryFeatures(e,t,i){const n=this.treeMap[e];if(!n)return[];const r=n.findOverlapping(t,i);if(0===r.length)return[];{const n=[],s=this.allFeatures[e];if(s){for(let e of r){const r=e.value;for(let e=r.start;e<r.end;e++){let r=s[e];if(r.start>i)break;r.end>=t&&n.push(r)}}n.sort((function(e,t){return e.start-t.start}))}return n}}getAllFeatures(){return this.allFeatures}buildTreeMap(e,t){const i={},n=[];if(this.allFeatures={},e){for(let i of e){let e=i.chr;t&&(e=t.getChromosomeName(e));let r=this.allFeatures[e];r||(n.push(e),r=[],this.allFeatures[e]=r),r.push(i)}for(let e of n){const t=this.allFeatures[e];t.sort((function(e,t){return e.start===t.start?0:e.start>t.start?1:-1})),i[e]=Vn(t)}}return i}}function Vn(e){const t=new Bn,i=e.length,n=Math.max(10,Math.round(i/10));for(let r=0;r<i;r+=n){const s=Math.min(i,r+n),o=new qn(r,s),a=e[r].start;let c=a;for(let t=r;t<s;t++)c=Math.max(c,e[t].end);t.insert(a,c,o)}return t}class qn{constructor(e,t){this.start=e,this.end=t}}const Qn=function(e,t,i){if(e&&0!==e.length){const n=function(e){const t=new Bn,i=e.length,n=Math.max(10,Math.round(i/100));e.sort((function(e,t){return e.start===t.start?0:e.start>t.start?1:-1}));for(let r=0;r<i;r+=n){const s=Math.min(i,r+n),o=e.slice(r,s),a=o[0].start;let c=a;o.forEach((function(e){c=Math.max(c,e.end)})),t.insert(a,c,o)}return t}(e),r=n.findOverlapping(t,i);return 0===r.length?[]:(e=[],r.forEach((function(n){const r=n.value,s=r.length;for(let n=0;n<s;n++){const s=r[n];if(s.start>i)break;s.end>t&&e.push(s)}})),e.sort((function(e,t){return e.start-t.start})),e)}return[]};function Un(e){if(3===(e=e.replace(/^#/,"")).length&&(e=e.split("").map((e=>e+e)).join("")),6!==e.length)throw new Error("Invalid HEX color.");let t=parseInt(e,16);return`rgb(${t>>16&255}, ${t>>8&255}, ${255&t})`}const jn={licorice:"#000000",steel:"#6e6e6e",magnesium:"#b8b8b8",mercury:"#e8e8e8",cayenne:"#891100",mocha:"#894800",aspargus:"#888501",fern:"#458401",teal:"#008688",salmon:"#ff726e",tangerine:"#ff8802",cantaloupe:"#ffce6e",lemon:"#fffa03",lime:"#83f902",honeydew:"#cefa6e",ice:"#68fdff",aqua:"#008cff",blueberry:"#002eff",midnight:"#001888",grape:"#8931ff",lavender:"#d278ff",orchid:"#6e76ff",strawberry:"#ff2987",magenta:"#ff39ff",carnation:"#ff7fd3"},Gn={cantaloupe:{r:255,g:206,b:110},honeydew:{r:206,g:250,b:110},spindrift:{r:104,g:251,b:208},sky:{r:106,g:207,b:255},lavender:{r:210,g:120,b:255},carnation:{r:255,g:127,b:211},licorice:{r:0,g:0,b:0},snow:{r:255,g:255,b:255},salmon:{r:255,g:114,b:110},banana:{r:255,g:251,b:109},flora:{r:104,g:249,b:110},ice:{r:104,g:253,b:255},orchid:{r:110,g:118,b:255},bubblegum:{r:255,g:122,b:255},lead:{r:30,g:30,b:30},mercury:{r:232,g:232,b:232},tangerine:{r:255,g:136,b:2},lime:{r:131,g:249,b:2},sea_foam:{r:3,g:249,b:135},aqua:{r:0,g:140,b:255},grape:{r:137,g:49,b:255},strawberry:{r:255,g:41,b:135},tungsten:{r:58,g:58,b:58},silver:{r:208,g:208,b:208},maraschino:{r:255,g:33,b:1},lemon:{r:255,g:250,b:3},spring:{r:5,g:248,b:2},turquoise:{r:0,g:253,b:255},blueberry:{r:0,g:46,b:255},magenta:{r:255,g:57,b:255},iron:{r:84,g:84,b:83},magnesium:{r:184,g:184,b:184},mocha:{r:137,g:72,b:0},fern:{r:69,g:132,b:1},moss:{r:1,g:132,b:72},ocean:{r:0,g:74,b:136},eggplant:{r:73,g:26,b:136},maroon:{r:137,g:22,b:72},steel:{r:110,g:110,b:110},aluminum:{r:160,g:159,b:160},cayenne:{r:137,g:17,b:0},aspargus:{r:136,g:133,b:1},clover:{r:2,g:132,b:1},teal:{r:0,g:134,b:136},midnight:{r:0,g:24,b:136},plum:{r:137,g:30,b:136},tin:{r:135,g:134,b:135},nickel:{r:136,g:135,b:135}};function Wn(e){const{r:t,g:i,b:n}=Gn[e];return`rgb(${t},${i},${n})`}const $n={Set1:["rgb(228,26,28)","rgb(55,126,184)","rgb(77,175,74)","rgb(166,86,40)","rgb(152,78,163)","rgb(255,127,0)","rgb(247,129,191)","rgb(153,153,153)","rgb(255,255,51)"],Dark2:["rgb(27,158,119)","rgb(217,95,2)","rgb(117,112,179)","rgb(231,41,138)","rgb(102,166,30)","rgb(230,171,2)","rgb(166,118,29)","rgb(102,102,102)"],Set2:["rgb(102, 194,165)","rgb(252,141,98)","rgb(141,160,203)","rgb(231,138,195)","rgb(166,216,84)","rgb(255,217,47)","rgb(229,196,148)","rgb(179,179,179)"],Set3:["rgb(141,211,199)","rgb(255,255,179)","rgb(190,186,218)","rgb(251,128,114)","rgb(128,177,211)","rgb(253,180,98)","rgb(179,222,105)","rgb(252,205,229)","rgb(217,217,217)","rgb(188,128,189)","rgb(204,235,197)","rgb(255,237,111)"],Pastel1:["rgb(251,180,174)","rgb(179,205,227)","rgb(204,235,197)","rgb(222,203,228)","rgb(254,217,166)","rgb(255,255,204)","rgb(229,216,189)","rgb(253,218,236)"],Pastel2:["rgb(173,226,207)","rgb(253,205,172)","rgb(203,213,232)","rgb(244,202,228)","rgb(230,245,201)","rgb(255,242,174)","rgb(243,225,206)"],Accent:["rgb(127,201,127)","rgb(190,174,212)","rgb(253,192,134)","rgb(255,255,153)","rgb(56,108,176)","rgb(240,2,127)","rgb(191,91,23)"]};class Kn{constructor(e){this.colors=$n[e],Array.isArray(this.colors)||(this.colors=[]),this.colorTable=new Map,this.nextIdx=0,this.colorGenerator=new Xn}getColor(e){return this.colorTable.has(e)||(this.nextIdx<this.colors.length?this.colorTable.set(e,this.colors[this.nextIdx]):this.colorTable.set(e,this.colorGenerator.get()),this.nextIdx++),this.colorTable.get(e)}}class Yn{constructor(e){this.colorTable=e||{},this.nextIdx=0,this.colorGenerator=new Xn}getColor(e){if(!this.colorTable.hasOwnProperty(e)){if(this.colorTable.hasOwnProperty("*"))return this.colorTable["*"];this.colorTable[e]=this.colorGenerator.get()}return this.colorTable[e]}}function Xn(){this.hue=Math.random(),this.goldenRatio=.618033988749895,this.hexwidth=2}function Zn(e,t,i,n){return`rgba(${e=cn(e,0,255)}, ${t=cn(t,0,255)}, ${i=cn(i,0,255)}, ${n=cn(n,0,1)})`}function Jn(e,t){e=cn(e,0,255),t=cn(t,0,255);return`rgb(${Math.round(Math.random()*(t-e)+e).toString(10)},${Math.round(Math.random()*(t-e)+e).toString(10)},${Math.round(Math.random()*(t-e)+e).toString(10)})`}function er(e){if(e.startsWith("rgb(")){const[t,i]=e.split("("),[n]=i.split(")");return n.split(",").map((e=>parseInt(e)))}}Xn.prototype.hsvToRgb=function(e,t,i){var n=Math.floor(6*e),r=6*e-n,s=i*(1-t),o=i*(1-r*t),a=i*(1-(1-r)*t),c=255,l=255,h=255;switch(n){case 0:c=i,l=a,h=s;break;case 1:c=o,l=i,h=s;break;case 2:c=s,l=i,h=a;break;case 3:c=s,l=o,h=i;break;case 4:c=a,l=s,h=i;break;case 5:c=i,l=s,h=o}return[Math.floor(256*c),Math.floor(256*l),Math.floor(256*h)]},Xn.prototype.padHex=function(e){return e.length>this.hexwidth?e:new Array(this.hexwidth-e.length+1).join("0")+e},Xn.prototype.get=function(e,t){this.hue+=this.goldenRatio,this.hue%=1,"number"!=typeof e&&(e=.5),"number"!=typeof t&&(t=.95);var i=this.hsvToRgb(this.hue,e,t);return"#"+this.padHex(i[0].toString(16))+this.padHex(i[1].toString(16))+this.padHex(i[2].toString(16))},new Xn;function tr(e,t,i){if(i<.005)return e;if(i>.995)return t;{let n,r,s,o,a,c;i<.5?(i/=.5,[n,r,s]=er(e),[o,a,c]=er(Wn("snow"))):(i=(i-.5)/.5,[n,r,s]=er(Wn("snow")),[o,a,c]=er(t));const[l,h,d]=[Math.floor(an(n,o,i)),Math.floor(an(r,a,i)),Math.floor(an(s,c,i))];return function(e,t,i){return`rgb(${e=cn(e,0,255)}, ${t=cn(t,0,255)}, ${i=cn(i,0,255)})`}(l,h,d)}}const ir=new Set(["bedtype","alignment","annotation","variant","wig","interact","shoebox"]),nr=new Set(["alignment","annotation","variant","eqtl","qtl","snp","shoebox","wig"]),rr=new Set(["sequence","ruler","ideogram"]),sr={};class or{constructor(e){this.browser=e,this.initialize()}initialize(){const e=new c;e.add("...");const t={parent:this.browser.root,content:e};this.dialog=new w(t),this.browser.root.appendChild(this.dialog.elem),n(this.dialog.elem)}trackMenuItemList(e){const t=[];return"sequence"!==e.track.config.type&&t.push(function(){const e=document.createElement("div");function t(e){const t=()=>{if(void 0!==this.browser.inputDialog.value){const e=parseInt(this.browser.inputDialog.value,10);if(e>0){const t=[];this.trackView.track.selected?t.push(...this.trackView.browser.getSelectedTrackViews().map((({track:e})=>e))):t.push(this);for(const i of t)i.trackView.autoHeight=!1,void 0!==i.minHeight&&i.minHeight>e&&(i.minHeight=e),void 0!==i.maxHeight&&i.maxHeight<e&&(i.minHeight=e),i.trackView.setTrackHeight(e,!0),i.trackView.checkContentHeight(),i.trackView.repaintViews()}}},i={label:"Track Height",value:this.height,callback:t};this.browser.inputDialog.present(i,e)}return e.textContent="Set track height",{element:e,dialog:t}}()),!0===function(e){const t=e.browser.getSelectedTrackViews();return t&&t.length>1&&new Set(t).has(e)}(e)?t.push(...this.multiSelectMenuItems(e)):("sequence"!==e.track.config.type&&t.push(function(){const e=document.createElement("div");function t(e){const t=()=>{let e=this.browser.inputDialog.value;e=""===e||void 0===e?"untitled":e.trim(),this.name=e},i={label:"Track Name",value:hr(this)||"unnamed",callback:t};this.browser.inputDialog.present(i,e)}return e.textContent="Set track name",{element:e,click:t}}()),t.push(...this.defaultMenuItems(e))),!1!==e.track.removable&&(t.push("<hr/>"),t.push(function(e){const t=e.track.selected?"Remove tracks":"Remove track",i=document.createElement("div");function n(e){this.trackView.browser._removeTrack(this)}return i.textContent=t,{element:i,click:n,menuItemType:"removeTrack"}}(e))),t}defaultMenuItems(e){const t=[];return dr(e.track)&&(t.push("<hr/>"),t.push(ar({trackView:e,label:"Set track color",option:"color"})),t.push(cr({trackView:e,label:"Unset track color"})),"wig"!==e.track.config.type&&"annotation"!==e.track.config.type||(t.push(ar({trackView:e,label:"Set alt color",option:"altColor"})),t.push(lr({trackView:e,label:"Unset alt color"})))),e.track.menuItemList&&t.push(...e.track.menuItemList()),function(e){const t=e.track;return t&&t.config&&void 0!==t.config.visibilityWindow||t&&nr.has(t.type)}(e)&&(t.push("<hr/>"),t.push(function(e){const t=document.createElement("div");function i(t){const i=()=>{let e=this.browser.inputDialog.value;e=""===e||void 0===e?-1:e.trim(),this.visibilityWindow=Number.parseInt(e),this.config.visibilityWindow=Number.parseInt(e),this.trackView.updateViews()},n={label:"wig"===e?"Visibility window (bp). Enter 0 for whole chromosome, -1 for whole genome.":"Visibility window (bp). Enter 0 for whole chromosome.",value:this.visibilityWindow,callback:i};this.browser.inputDialog.present(n,t)}return t.textContent="Set visibility window",{element:t,click:i}}(e.track.type))),t}multiSelectMenuItems(e){const t=[],i=e.browser.getSelectedTrackViews();var n;return!0===(n=i.map((({track:e})=>e.type)),1===[...new Set(n)].length)?(t.push(...this.defaultMenuItems(e)),"wig"===e.track.type&&(t.push("<hr/>"),t.push(function(){const e=document.createElement("div");function t(e){const t=$n.Dark2,i=Math.floor(Math.random()*t.length),n=`auto-scale-group-${o()}`;sr[n]=t[i];const r=this.browser.getSelectedTrackViews();for(const{track:e}of r)e.autoscaleGroup=n;this.browser.updateViews()}return e.textContent="Group autoscale",{element:e,doAllMultiSelectedTracks:!0,click:t}}()))):dr(e.track)&&(t.push("<hr/>"),t.push(ar({trackView:e,label:"Set track color",option:"color"})),t.push(cr({trackView:e,label:"Unset track color"})),"wig"!==e.track.config.type&&"annotation"!==e.track.config.type||(t.push(ar({trackView:e,label:"Set alt color",option:"altColor"})),t.push(lr({trackView:e,label:"Unset alt color"})))),t}}function ar({trackView:e,label:t,option:i}){const n=document.createElement("div");n.textContent=t;return{element:n,click:t=>{e.presentColorPicker(i,t)}}}function cr({trackView:e,label:t}){const i=document.createElement("div");return i.textContent=t,{element:i,click:()=>{e.track.color=e.track._initialColor||e.track.constructor.defaultColor,e.repaintViews()}}}function lr({trackView:e,label:t}){const i=document.createElement("div");return i.textContent=t,{element:i,click:()=>{e.track.altColor=e.track._initialAltColor||e.track.constructor.defaultColor,e.repaintViews()}}}function hr(e){return e.name}function dr(e){return void 0===e.type||ir.has(e.type)&&"heatmap"!==e.graphType}class ur{constructor(e,t){this.browser=e,this.container=document.createElement("div"),this.container.className="igv-generic-dialog-container",t.appendChild(this.container);const i=document.createElement("div");i.className="igv-generic-dialog-header",this.container.appendChild(i),u(i,(()=>{this.minimumInput.value="",this.maximumInput.value="",this.container.style.display="none"})),this.minimum=document.createElement("div"),this.minimum.className="igv-generic-dialog-label-input",this.container.appendChild(this.minimum);const n=document.createElement("div");n.textContent="Minimum",this.minimum.appendChild(n),this.minimumInput=document.createElement("input"),this.minimum.appendChild(this.minimumInput),this.maximum=document.createElement("div"),this.maximum.className="igv-generic-dialog-label-input",this.container.appendChild(this.maximum);const r=document.createElement("div");r.textContent="Maximum",this.maximum.appendChild(r),this.maximumInput=document.createElement("input"),this.maximum.appendChild(this.maximumInput);const s=document.createElement("div");s.className="igv-generic-dialog-ok-cancel",this.container.appendChild(s),this.okButton=document.createElement("div"),this.okButton.textContent="OK",s.appendChild(this.okButton),this.cancelButton=document.createElement("div"),this.cancelButton.textContent="Cancel",s.appendChild(this.cancelButton),this.cancelButton.addEventListener("click",(()=>{this.minimumInput.value="",this.maximumInput.value="",this.container.style.left="0px",this.container.style.top="0px",this.container.style.display="none"})),p(this.container,i),this.container.style.display="none"}configure(e){let t;if(Array.isArray(e)){t={min:Number.MAX_SAFE_INTEGER,max:-Number.MAX_SAFE_INTEGER};for(const i of e)i.track.dataRange&&(t.min=Math.min(i.track.dataRange.min,t.min),t.max=Math.max(i.track.dataRange.max,t.max))}else t=e.track.dataRange;t&&(this.minimumInput.value=t.min,this.maximumInput.value=t.max),this.minimumInput.onkeyup=null,this.minimumInput.addEventListener("keyup",(t=>{13===t.keyCode&&this.processResults(e),t.stopImmediatePropagation()})),this.maximumInput.onkeyup=null,this.maximumInput.addEventListener("keyup",(t=>{13===t.keyCode&&(t.stopImmediatePropagation(),this.processResults(e))})),this.okButton.onclick=null,this.okButton.addEventListener("click",(()=>{this.processResults(e)}))}processResults(e){const t=this.minimumInput.value.trim(),i=this.maximumInput.value.trim();if(""!==t&&""!==i){const n=Number(t),r=Number(i);if(isNaN(n)||isNaN(r))this.browser.alert.present(new Error("Must input numeric values"),void 0);else{const t=Array.isArray(e)?e:[e];for(const e of t)e.track.setDataRange({min:n,max:r})}this.minimumInput.value="",this.maximumInput.value=""}this.container.style.left="0px",this.container.style.top="0px",this.container.style.display="none"}present(e){const{top:t}=e.currentTarget.parentElement.getBoundingClientRect();this.container.style.top=`${t}px`,this.container.style.display="flex"}}const fr={configureHighDPICanvas:function(e,t,i){const n=window.devicePixelRatio;e.canvas.style.width=`${t}px`,e.canvas.width=Math.floor(n*t),e.canvas.style.height=`${i}px`,e.canvas.height=Math.floor(n*i),e.scale(n,n)},setProperties:function(e,t){for(var i in t)if(t.hasOwnProperty(i)){var n=t[i];e[i]=n}},strokeLine:function(e,t,i,n,r,s){t=Math.floor(t)+.5,i=Math.floor(i)+.5,n=Math.floor(n)+.5,r=Math.floor(r)+.5,s&&(e.save(),fr.setProperties(e,s)),e.beginPath(),e.moveTo(t,i),e.lineTo(n,r),e.stroke(),s&&e.restore()},fillRect:function(e,t,i,n,r,s){s&&(e.save(),fr.setProperties(e,s)),e.fillRect(t,i,n,r),s&&e.restore()},fillPolygon:function(e,t,i,n){n&&(e.save(),fr.setProperties(e,n)),pr(e,t,i),e.fill(),n&&e.restore()},strokePolygon:function(e,t,i,n){n&&(e.save(),fr.setProperties(e,n)),pr(e,t,i),e.stroke(),n&&e.restore()},fillText:function(e,t,i,n,r,s){if((r||s)&&e.save(),r&&fr.setProperties(e,r),s){for(var o in e.translate(i,n),s){var a=s[o];"translate"===o&&e.translate(a.x,a.y),"rotate"===o&&e.rotate(a.angle*Math.PI/180)}e.fillText(t,0,0)}else e.fillText(t,i,n);(r||s)&&e.restore()},strokeText:function(e,t,i,n,r,s){if((r||s)&&e.save(),r&&fr.setProperties(e,r),s){for(var o in e.translate(i,n),s){var a=s[o];"translate"===o&&e.translate(a.x,a.y),"rotate"===o&&e.rotate(a.angle*Math.PI/180)}e.strokeText(t,0,0)}else e.strokeText(t,i,n);(r||s)&&e.restore()},strokeCircle:function(e,t,i,n,r){r&&(e.save(),fr.setProperties(e,r)),e.beginPath(),e.arc(t,i,n,0,2*Math.PI),e.stroke(),r&&e.restore()},fillCircle:function(e,t,i,n,r){r&&(e.save(),fr.setProperties(e,r)),e.beginPath(),e.arc(t,i,n,0,2*Math.PI),e.fill(),r&&e.restore()},drawArrowhead:function(e,t,i,n,r){e.save(),n||(n=5),r&&(e.lineWidth=r),e.beginPath(),e.moveTo(t,i-n/2),e.lineTo(t,i+n/2),e.lineTo(t+n,i),e.lineTo(t,i-n/2),e.closePath(),e.fill(),e.restore()},dashedLine:function(e,t,i,n,r,s,o={}){void 0===s&&(s=2),e.setLineDash([s,s]),fr.strokeLine(e,t,i,n,r,o),e.setLineDash([])},roundRect:function(e,t,i,n,r,s,o,a){void 0===a&&(a=!0),void 0===s&&(s=5),e.beginPath(),e.moveTo(t+s,i),e.lineTo(t+n-s,i),e.quadraticCurveTo(t+n,i,t+n,i+s),e.lineTo(t+n,i+r-s),e.quadraticCurveTo(t+n,i+r,t+n-s,i+r),e.lineTo(t+s,i+r),e.quadraticCurveTo(t,i+r,t,i+r-s),e.lineTo(t,i+s),e.quadraticCurveTo(t,i,t+s,i),e.closePath(),a&&e.stroke(),o&&e.fill()},polygon:function(e,t,i,n,r){void 0===r&&(r=!0),e.beginPath();var s=t.length;e.moveTo(t[0],i[0]);for(var o=1;o<s;o++)e.lineTo(t[o],i[o]);e.closePath(),r&&e.stroke(),n&&e.fill()},drawRandomColorVerticalLines:e=>{for(let t=0;t<e.canvas.width;t++)fr.fillRect(e,t,0,1,e.canvas.height,{fillStyle:Jn(100,250)})},labelTransformWithContext:(e,t)=>{e.translate(t,0),e.scale(-1,1),e.translate(-t,0)}};function pr(e,t,i){var n,r=t.length;for(e.beginPath(),e.moveTo(t[0],i[0]),n=1;n<r;n++)e.lineTo(t[n],i[n]);e.closePath()}
|
|
1
|
+
function e(e){const t=document.createElement("div");return t.innerHTML=e,t.firstElementChild}function t(e){return i("div",e)}function i(e,t){const i=document.createElement(e);return t&&(t.class&&i.classList.add(t.class),t.id&&(i.id=t.id),t.style&&function(e,t){for(let i of Object.keys(t))e.style[i]=t[i]}(i,t.style)),i}function n(e){const t=getComputedStyle(e);"none"!==t.display&&(e._initialDisplay=t.display),e.style.display="none"}function r(e){const t=e._initialDisplay||"block";e.style.display=t}function s(e){if(e.type.startsWith("touch")){const t=e.touches[0];return{x:t.pageX,y:t.pageY}}return{x:e.pageX,y:e.pageY}}function o(){return("0000"+(Math.random()*Math.pow(36,4)|0).toString(36)).slice(-4)}function a(e,t){const{clientX:i,clientY:n}=e;return((e,{clientX:t,clientY:i})=>{const{left:n,top:r,width:s,height:o}=e.getBoundingClientRect(),a=t-n,c=i-r;return{x:a,y:c,xNormalized:a/s,yNormalized:c/o,width:s,height:o}})(t,{clientX:i,clientY:n})}class c{constructor(){this.elem=i("div",{class:"igv-ui-panel-column"})}add(e){if(e instanceof Node)this.elem.appendChild(e);else if("object"==typeof e)this.elem.appendChild(e.elem);else{const i=t();i.innerHTML=e,this.elem.appendChild(i),this.html=i}}}function l(e,t){return h(e,t)}function h(e,t){t=t||"currentColor";let i=d[e];i||(console.error(`No icon named: ${e}`),i=d.question);const n=document.createElementNS("http://www.w3.org/2000/svg","svg");n.setAttributeNS(null,"viewBox","0 0 "+i[0]+" "+i[1]);const r=document.createElementNS("http://www.w3.org/2000/svg","path");return r.setAttributeNS(null,"fill",t),r.setAttributeNS(null,"d",i[4]),n.appendChild(r),n}const d={check:[512,512,[],"f00c","M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z"],cog:[512,512,[],"f013","M444.788 291.1l42.616 24.599c4.867 2.809 7.126 8.618 5.459 13.985-11.07 35.642-29.97 67.842-54.689 94.586a12.016 12.016 0 0 1-14.832 2.254l-42.584-24.595a191.577 191.577 0 0 1-60.759 35.13v49.182a12.01 12.01 0 0 1-9.377 11.718c-34.956 7.85-72.499 8.256-109.219.007-5.49-1.233-9.403-6.096-9.403-11.723v-49.184a191.555 191.555 0 0 1-60.759-35.13l-42.584 24.595a12.016 12.016 0 0 1-14.832-2.254c-24.718-26.744-43.619-58.944-54.689-94.586-1.667-5.366.592-11.175 5.459-13.985L67.212 291.1a193.48 193.48 0 0 1 0-70.199l-42.616-24.599c-4.867-2.809-7.126-8.618-5.459-13.985 11.07-35.642 29.97-67.842 54.689-94.586a12.016 12.016 0 0 1 14.832-2.254l42.584 24.595a191.577 191.577 0 0 1 60.759-35.13V25.759a12.01 12.01 0 0 1 9.377-11.718c34.956-7.85 72.499-8.256 109.219-.007 5.49 1.233 9.403 6.096 9.403 11.723v49.184a191.555 191.555 0 0 1 60.759 35.13l42.584-24.595a12.016 12.016 0 0 1 14.832 2.254c24.718 26.744 43.619 58.944 54.689 94.586 1.667 5.366-.592 11.175-5.459 13.985L444.788 220.9a193.485 193.485 0 0 1 0 70.2zM336 256c0-44.112-35.888-80-80-80s-80 35.888-80 80 35.888 80 80 80 80-35.888 80-80z"],exclamation:[192,512,[],"f12a","M176 432c0 44.112-35.888 80-80 80s-80-35.888-80-80 35.888-80 80-80 80 35.888 80 80zM25.26 25.199l13.6 272C39.499 309.972 50.041 320 62.83 320h66.34c12.789 0 23.331-10.028 23.97-22.801l13.6-272C167.425 11.49 156.496 0 142.77 0H49.23C35.504 0 24.575 11.49 25.26 25.199z"],"exclamation-circle":[512,512,[],"f06a","M504 256c0 136.997-111.043 248-248 248S8 392.997 8 256C8 119.083 119.043 8 256 8s248 111.083 248 248zm-248 50c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z"],"exclamation-triangle":[576,512,[],"f071","M569.517 440.013C587.975 472.007 564.806 512 527.94 512H48.054c-36.937 0-59.999-40.055-41.577-71.987L246.423 23.985c18.467-32.009 64.72-31.951 83.154 0l239.94 416.028zM288 354c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z"],minus:[448,512,[],"f068","M424 318.2c13.3 0 24-10.7 24-24v-76.4c0-13.3-10.7-24-24-24H24c-13.3 0-24 10.7-24 24v76.4c0 13.3 10.7 24 24 24h400z"],"minus-circle":[512,512,[],"f056","M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zM124 296c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h264c6.6 0 12 5.4 12 12v56c0 6.6-5.4 12-12 12H124z"],"minus-square":[448,512,[],"f146","M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM92 296c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h264c6.6 0 12 5.4 12 12v56c0 6.6-5.4 12-12 12H92z"],plus:[448,512,[],"f067","M448 294.2v-76.4c0-13.3-10.7-24-24-24H286.2V56c0-13.3-10.7-24-24-24h-76.4c-13.3 0-24 10.7-24 24v137.8H24c-13.3 0-24 10.7-24 24v76.4c0 13.3 10.7 24 24 24h137.8V456c0 13.3 10.7 24 24 24h76.4c13.3 0 24-10.7 24-24V318.2H424c13.3 0 24-10.7 24-24z"],"plus-circle":[512,512,[],"f055","M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm144 276c0 6.6-5.4 12-12 12h-92v92c0 6.6-5.4 12-12 12h-56c-6.6 0-12-5.4-12-12v-92h-92c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h92v-92c0-6.6 5.4-12 12-12h56c6.6 0 12 5.4 12 12v92h92c6.6 0 12 5.4 12 12v56z"],"plus-square":[448,512,[],"f0fe","M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-32 252c0 6.6-5.4 12-12 12h-92v92c0 6.6-5.4 12-12 12h-56c-6.6 0-12-5.4-12-12v-92H92c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h92v-92c0-6.6 5.4-12 12-12h56c6.6 0 12 5.4 12 12v92h92c6.6 0 12 5.4 12 12v56z"],question:[384,512,[],"f128","M202.021 0C122.202 0 70.503 32.703 29.914 91.026c-7.363 10.58-5.093 25.086 5.178 32.874l43.138 32.709c10.373 7.865 25.132 6.026 33.253-4.148 25.049-31.381 43.63-49.449 82.757-49.449 30.764 0 68.816 19.799 68.816 49.631 0 22.552-18.617 34.134-48.993 51.164-35.423 19.86-82.299 44.576-82.299 106.405V320c0 13.255 10.745 24 24 24h72.471c13.255 0 24-10.745 24-24v-5.773c0-42.86 125.268-44.645 125.268-160.627C377.504 66.256 286.902 0 202.021 0zM192 373.459c-38.196 0-69.271 31.075-69.271 69.271 0 38.195 31.075 69.27 69.271 69.27s69.271-31.075 69.271-69.271-31.075-69.27-69.271-69.27z"],save:[448,512,[],"f0c7","M433.941 129.941l-83.882-83.882A48 48 0 0 0 316.118 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48V163.882a48 48 0 0 0-14.059-33.941zM224 416c-35.346 0-64-28.654-64-64 0-35.346 28.654-64 64-64s64 28.654 64 64c0 35.346-28.654 64-64 64zm96-304.52V212c0 6.627-5.373 12-12 12H76c-6.627 0-12-5.373-12-12V108c0-6.627 5.373-12 12-12h228.52c3.183 0 6.235 1.264 8.485 3.515l3.48 3.48A11.996 11.996 0 0 1 320 111.48z"],search:[512,512,[],"f002","M505 442.7L405.3 343c-4.5-4.5-10.6-7-17-7H372c27.6-35.3 44-79.7 44-128C416 93.1 322.9 0 208 0S0 93.1 0 208s93.1 208 208 208c48.3 0 92.7-16.4 128-44v16.3c0 6.4 2.5 12.5 7 17l99.7 99.7c9.4 9.4 24.6 9.4 33.9 0l28.3-28.3c9.4-9.4 9.4-24.6.1-34zM208 336c-70.7 0-128-57.2-128-128 0-70.7 57.2-128 128-128 70.7 0 128 57.2 128 128 0 70.7-57.2 128-128 128z"],share:[512,512,[],"f064","M503.691 189.836L327.687 37.851C312.281 24.546 288 35.347 288 56.015v80.053C127.371 137.907 0 170.1 0 322.326c0 61.441 39.581 122.309 83.333 154.132 13.653 9.931 33.111-2.533 28.077-18.631C66.066 312.814 132.917 274.316 288 272.085V360c0 20.7 24.3 31.453 39.687 18.164l176.004-152c11.071-9.562 11.086-26.753 0-36.328z"],spinner:[512,512,[],"f110","M304 48c0 26.51-21.49 48-48 48s-48-21.49-48-48 21.49-48 48-48 48 21.49 48 48zm-48 368c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.49-48-48-48zm208-208c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.49-48-48-48zM96 256c0-26.51-21.49-48-48-48S0 229.49 0 256s21.49 48 48 48 48-21.49 48-48zm12.922 99.078c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48c0-26.509-21.491-48-48-48zm294.156 0c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48c0-26.509-21.49-48-48-48zM108.922 60.922c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.491-48-48-48z"],square:[448,512,[],"f0c8","M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48z"],"square-full":[512,512,[],"f45c","M512 512H0V0h512v512z"],times:[384,512,[],"f00d","M323.1 441l53.9-53.9c9.4-9.4 9.4-24.5 0-33.9L279.8 256l97.2-97.2c9.4-9.4 9.4-24.5 0-33.9L323.1 71c-9.4-9.4-24.5-9.4-33.9 0L192 168.2 94.8 71c-9.4-9.4-24.5-9.4-33.9 0L7 124.9c-9.4 9.4-9.4 24.5 0 33.9l97.2 97.2L7 353.2c-9.4 9.4-9.4 24.5 0 33.9L60.9 441c9.4 9.4 24.5 9.4 33.9 0l97.2-97.2 97.2 97.2c9.3 9.3 24.5 9.3 33.9 0z"],"times-circle":[512,512,[],"f057","M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm121.6 313.1c4.7 4.7 4.7 12.3 0 17L338 377.6c-4.7 4.7-12.3 4.7-17 0L256 312l-65.1 65.6c-4.7 4.7-12.3 4.7-17 0L134.4 338c-4.7-4.7-4.7-12.3 0-17l65.6-65-65.6-65.1c-4.7-4.7-4.7-12.3 0-17l39.6-39.6c4.7-4.7 12.3-4.7 17 0l65 65.7 65.1-65.6c4.7-4.7 12.3-4.7 17 0l39.6 39.6c4.7 4.7 4.7 12.3 0 17L312 256l65.6 65.1z"],wrench:[512,512,[],"f0ad","M481.156 200c9.3 0 15.12 10.155 10.325 18.124C466.295 259.992 420.419 288 368 288c-79.222 0-143.501-63.974-143.997-143.079C223.505 65.469 288.548-.001 368.002 0c52.362.001 98.196 27.949 123.4 69.743C496.24 77.766 490.523 88 481.154 88H376l-40 56 40 56h105.156zm-171.649 93.003L109.255 493.255c-24.994 24.993-65.515 24.994-90.51 0-24.993-24.994-24.993-65.516 0-90.51L218.991 202.5c16.16 41.197 49.303 74.335 90.516 90.503zM104 432c0-13.255-10.745-24-24-24s-24 10.745-24 24 10.745 24 24 24 24-10.745 24-24z"]};function u(e,t){var i=document.createElement("div");e.appendChild(i),i.appendChild(l("times")),i.addEventListener("click",(function(e){e.preventDefault(),e.stopPropagation(),t()}))}let f;function p(e,t,i){t.addEventListener("mousedown",function(e){e.stopPropagation(),e.preventDefault();const t=g.bind(this),n=m.bind(this),r=getComputedStyle(this),s=this.getBoundingClientRect();f={constraint:i,dragFunction:t,dragEndFunction:n,screenX:e.screenX,screenY:e.screenY,minDy:-s.top,minDx:-s.left,top:parseInt(r.top.replace("px","")),left:parseInt(r.left.replace("px",""))},document.addEventListener("mousemove",t),document.addEventListener("mouseup",n),document.addEventListener("mouseleave",n),document.addEventListener("mouseexit",n)}.bind(e))}function g(e){if(!f)return void console.error("No drag data!");e.stopPropagation(),e.preventDefault();const t=Math.max(f.minDx,e.screenX-f.screenX),i=Math.max(f.minDy,e.screenY-f.screenY),n=f.left+t,r=f.top+i;this.style.left=`${n}px`,this.style.top=`${r}px`}function m(e){if(!f)return void console.error("No drag data!");e.stopPropagation(),e.preventDefault();const t=f.dragFunction,i=f.dragEndFunction;document.removeEventListener("mousemove",t),document.removeEventListener("mouseup",i),document.removeEventListener("mouseleave",i),document.removeEventListener("mouseexit",i),f=void 0}class w{constructor({parent:e,label:i,content:n,okHandler:r,cancelHandler:s}){this.parent=e;const o=()=>{this.elem.style.display="none","function"==typeof s&&s(this)};this.elem=t(),this.elem.classList.add("igv-ui-generic-dialog-container","igv-ui-center-fixed");const a=t({class:"igv-ui-generic-dialog-header"});if(this.elem.appendChild(a),u(a,o),i){const e=t({class:"igv-ui-dialog-one-liner"});this.elem.appendChild(e),e.innerHTML=i}n.elem.style.margin="16px",this.elem.appendChild(n.elem),this.content=n;const c=t({class:"igv-ui-generic-dialog-ok-cancel"});this.elem.appendChild(c),this.ok=t(),c.appendChild(this.ok),this.ok.textContent="OK",this.cancel=t(),c.appendChild(this.cancel),this.cancel.textContent="Cancel",this.callback=void 0,this.ok.addEventListener("click",(e=>{this.elem.style.display="none","function"==typeof r?r(this):this.callback&&"function"==typeof this.callback&&this.callback(this)})),this.cancel.addEventListener("click",o),p(this.elem,a),this.elem.addEventListener("click",(e=>{e.preventDefault(),e.stopPropagation()}))}present(e,t){if(e.label&&this.label&&(this.label.textContent=e.label),e.html){this.content.html.innerHTML=e.html}if(e.text){this.content.html.innerText=e.text}e.value&&this.input&&(this.input.value=e.value),e.callback&&(this.callback=e.callback);const{top:i}=t.currentTarget.parentElement.getBoundingClientRect();this.elem.style.top=`${i}px`,this.elem.style.display="flex"}}function b(e){return"string"==typeof e||e instanceof String}function F(e){var t=String(e).split(/[.,]/);return t[0].split("").reverse().reduce((function(e,t,i){return i%3==0?e+","+t:e+t})).split("").reverse().join("")+(t[1]?"."+t[1]:"")}const v=function(e){return e.split(/\n|\r\n|\r/g)};function y(e,t){var i,n,r=[],s=e.length,o=0,a=!1;if(s>0)for(r[o]=e.charAt(0),i=1;i<s;i++)'"'===(n=e.charAt(i))?a=!a:a||n!==t?r[o]+=n:r[++o]="";return r}function A(e){return e.length>0?e.charAt(0).toUpperCase()+e.slice(1):e}function C(e){if(void 0!==e.name)return e.name;if(b(e)){let t=e.lastIndexOf("/"),i=t<0?e:e.substr(t+1);return t=i.indexOf("?"),t>0&&(i=i.substr(0,t)),i}throw Error("Expected File or string, got "+typeof e)}function _(e){return!!e&&("function"!=typeof e&&(e instanceof File||e.hasOwnProperty("name")&&"function"==typeof e.slice&&"function"==typeof e.arrayBuffer))}function x(e,t){const i=document.createElement("a");i.setAttribute("href",t),i.setAttribute("download",e),i.style.display="none",document.body.appendChild(i),i.click(),document.body.removeChild(i)}function k(e){for(var t=I,i=t.parser.loose.exec(e),n={},r=14;r--;)n[t.key[r]]=i[r]||"";return n[t.q.name]={},n[t.key[12]].replace(t.q.parser,(function(e,i,r){i&&(n[t.q.name][i]=r)})),n}"object"==typeof process&&"undefined"==typeof window&&(global.atob=function(e){return Buffer.from(e,"base64").toString("binary")});const I={strictMode:!1,key:["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"],q:{name:"queryKey",parser:/(?:^|&)([^&=]*)=?([^&]*)/g},parser:{strict:/^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/,loose:/^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/}};function S(e){let t=e.length;for(;--t>=0;)e[t]=0}const E=256,N=286,M=30,R=15,B=new Uint8Array([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0]),D=new Uint8Array([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13]),T=new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7]),z=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),L=new Array(576);S(L);const H=new Array(60);S(H);const P=new Array(512);S(P);const O=new Array(256);S(O);const V=new Array(29);S(V);const q=new Array(M);function Q(e,t,i,n,r){this.static_tree=e,this.extra_bits=t,this.extra_base=i,this.elems=n,this.max_length=r,this.has_stree=e&&e.length}let U,j,G;function W(e,t){this.dyn_tree=e,this.max_code=0,this.stat_desc=t}S(q);const $=e=>e<256?P[e]:P[256+(e>>>7)],K=(e,t)=>{e.pending_buf[e.pending++]=255&t,e.pending_buf[e.pending++]=t>>>8&255},Y=(e,t,i)=>{e.bi_valid>16-i?(e.bi_buf|=t<<e.bi_valid&65535,K(e,e.bi_buf),e.bi_buf=t>>16-e.bi_valid,e.bi_valid+=i-16):(e.bi_buf|=t<<e.bi_valid&65535,e.bi_valid+=i)},X=(e,t,i)=>{Y(e,i[2*t],i[2*t+1])},Z=(e,t)=>{let i=0;do{i|=1&e,e>>>=1,i<<=1}while(--t>0);return i>>>1},J=(e,t,i)=>{const n=new Array(16);let r,s,o=0;for(r=1;r<=R;r++)o=o+i[r-1]<<1,n[r]=o;for(s=0;s<=t;s++){let t=e[2*s+1];0!==t&&(e[2*s]=Z(n[t]++,t))}},ee=e=>{let t;for(t=0;t<N;t++)e.dyn_ltree[2*t]=0;for(t=0;t<M;t++)e.dyn_dtree[2*t]=0;for(t=0;t<19;t++)e.bl_tree[2*t]=0;e.dyn_ltree[512]=1,e.opt_len=e.static_len=0,e.sym_next=e.matches=0},te=e=>{e.bi_valid>8?K(e,e.bi_buf):e.bi_valid>0&&(e.pending_buf[e.pending++]=e.bi_buf),e.bi_buf=0,e.bi_valid=0},ie=(e,t,i,n)=>{const r=2*t,s=2*i;return e[r]<e[s]||e[r]===e[s]&&n[t]<=n[i]},ne=(e,t,i)=>{const n=e.heap[i];let r=i<<1;for(;r<=e.heap_len&&(r<e.heap_len&&ie(t,e.heap[r+1],e.heap[r],e.depth)&&r++,!ie(t,n,e.heap[r],e.depth));)e.heap[i]=e.heap[r],i=r,r<<=1;e.heap[i]=n},re=(e,t,i)=>{let n,r,s,o,a=0;if(0!==e.sym_next)do{n=255&e.pending_buf[e.sym_buf+a++],n+=(255&e.pending_buf[e.sym_buf+a++])<<8,r=e.pending_buf[e.sym_buf+a++],0===n?X(e,r,t):(s=O[r],X(e,s+E+1,t),o=B[s],0!==o&&(r-=V[s],Y(e,r,o)),n--,s=$(n),X(e,s,i),o=D[s],0!==o&&(n-=q[s],Y(e,n,o)))}while(a<e.sym_next);X(e,256,t)},se=(e,t)=>{const i=t.dyn_tree,n=t.stat_desc.static_tree,r=t.stat_desc.has_stree,s=t.stat_desc.elems;let o,a,c,l=-1;for(e.heap_len=0,e.heap_max=573,o=0;o<s;o++)0!==i[2*o]?(e.heap[++e.heap_len]=l=o,e.depth[o]=0):i[2*o+1]=0;for(;e.heap_len<2;)c=e.heap[++e.heap_len]=l<2?++l:0,i[2*c]=1,e.depth[c]=0,e.opt_len--,r&&(e.static_len-=n[2*c+1]);for(t.max_code=l,o=e.heap_len>>1;o>=1;o--)ne(e,i,o);c=s;do{o=e.heap[1],e.heap[1]=e.heap[e.heap_len--],ne(e,i,1),a=e.heap[1],e.heap[--e.heap_max]=o,e.heap[--e.heap_max]=a,i[2*c]=i[2*o]+i[2*a],e.depth[c]=(e.depth[o]>=e.depth[a]?e.depth[o]:e.depth[a])+1,i[2*o+1]=i[2*a+1]=c,e.heap[1]=c++,ne(e,i,1)}while(e.heap_len>=2);e.heap[--e.heap_max]=e.heap[1],((e,t)=>{const i=t.dyn_tree,n=t.max_code,r=t.stat_desc.static_tree,s=t.stat_desc.has_stree,o=t.stat_desc.extra_bits,a=t.stat_desc.extra_base,c=t.stat_desc.max_length;let l,h,d,u,f,p,g=0;for(u=0;u<=R;u++)e.bl_count[u]=0;for(i[2*e.heap[e.heap_max]+1]=0,l=e.heap_max+1;l<573;l++)h=e.heap[l],u=i[2*i[2*h+1]+1]+1,u>c&&(u=c,g++),i[2*h+1]=u,h>n||(e.bl_count[u]++,f=0,h>=a&&(f=o[h-a]),p=i[2*h],e.opt_len+=p*(u+f),s&&(e.static_len+=p*(r[2*h+1]+f)));if(0!==g){do{for(u=c-1;0===e.bl_count[u];)u--;e.bl_count[u]--,e.bl_count[u+1]+=2,e.bl_count[c]--,g-=2}while(g>0);for(u=c;0!==u;u--)for(h=e.bl_count[u];0!==h;)d=e.heap[--l],d>n||(i[2*d+1]!==u&&(e.opt_len+=(u-i[2*d+1])*i[2*d],i[2*d+1]=u),h--)}})(e,t),J(i,l,e.bl_count)},oe=(e,t,i)=>{let n,r,s=-1,o=t[1],a=0,c=7,l=4;for(0===o&&(c=138,l=3),t[2*(i+1)+1]=65535,n=0;n<=i;n++)r=o,o=t[2*(n+1)+1],++a<c&&r===o||(a<l?e.bl_tree[2*r]+=a:0!==r?(r!==s&&e.bl_tree[2*r]++,e.bl_tree[32]++):a<=10?e.bl_tree[34]++:e.bl_tree[36]++,a=0,s=r,0===o?(c=138,l=3):r===o?(c=6,l=3):(c=7,l=4))},ae=(e,t,i)=>{let n,r,s=-1,o=t[1],a=0,c=7,l=4;for(0===o&&(c=138,l=3),n=0;n<=i;n++)if(r=o,o=t[2*(n+1)+1],!(++a<c&&r===o)){if(a<l)do{X(e,r,e.bl_tree)}while(0!=--a);else 0!==r?(r!==s&&(X(e,r,e.bl_tree),a--),X(e,16,e.bl_tree),Y(e,a-3,2)):a<=10?(X(e,17,e.bl_tree),Y(e,a-3,3)):(X(e,18,e.bl_tree),Y(e,a-11,7));a=0,s=r,0===o?(c=138,l=3):r===o?(c=6,l=3):(c=7,l=4)}};let ce=!1;const le=(e,t,i,n)=>{Y(e,0+(n?1:0),3),te(e),K(e,i),K(e,~i),i&&e.pending_buf.set(e.window.subarray(t,t+i),e.pending),e.pending+=i};var he=(e,t,i,n)=>{let r,s,o=0;e.level>0?(2===e.strm.data_type&&(e.strm.data_type=(e=>{let t,i=4093624447;for(t=0;t<=31;t++,i>>>=1)if(1&i&&0!==e.dyn_ltree[2*t])return 0;if(0!==e.dyn_ltree[18]||0!==e.dyn_ltree[20]||0!==e.dyn_ltree[26])return 1;for(t=32;t<E;t++)if(0!==e.dyn_ltree[2*t])return 1;return 0})(e)),se(e,e.l_desc),se(e,e.d_desc),o=(e=>{let t;for(oe(e,e.dyn_ltree,e.l_desc.max_code),oe(e,e.dyn_dtree,e.d_desc.max_code),se(e,e.bl_desc),t=18;t>=3&&0===e.bl_tree[2*z[t]+1];t--);return e.opt_len+=3*(t+1)+5+5+4,t})(e),r=e.opt_len+3+7>>>3,s=e.static_len+3+7>>>3,s<=r&&(r=s)):r=s=i+5,i+4<=r&&-1!==t?le(e,t,i,n):4===e.strategy||s===r?(Y(e,2+(n?1:0),3),re(e,L,H)):(Y(e,4+(n?1:0),3),((e,t,i,n)=>{let r;for(Y(e,t-257,5),Y(e,i-1,5),Y(e,n-4,4),r=0;r<n;r++)Y(e,e.bl_tree[2*z[r]+1],3);ae(e,e.dyn_ltree,t-1),ae(e,e.dyn_dtree,i-1)})(e,e.l_desc.max_code+1,e.d_desc.max_code+1,o+1),re(e,e.dyn_ltree,e.dyn_dtree)),ee(e),n&&te(e)},de={_tr_init:e=>{ce||((()=>{let e,t,i,n,r;const s=new Array(16);for(i=0,n=0;n<28;n++)for(V[n]=i,e=0;e<1<<B[n];e++)O[i++]=n;for(O[i-1]=n,r=0,n=0;n<16;n++)for(q[n]=r,e=0;e<1<<D[n];e++)P[r++]=n;for(r>>=7;n<M;n++)for(q[n]=r<<7,e=0;e<1<<D[n]-7;e++)P[256+r++]=n;for(t=0;t<=R;t++)s[t]=0;for(e=0;e<=143;)L[2*e+1]=8,e++,s[8]++;for(;e<=255;)L[2*e+1]=9,e++,s[9]++;for(;e<=279;)L[2*e+1]=7,e++,s[7]++;for(;e<=287;)L[2*e+1]=8,e++,s[8]++;for(J(L,287,s),e=0;e<M;e++)H[2*e+1]=5,H[2*e]=Z(e,5);U=new Q(L,B,257,N,R),j=new Q(H,D,0,M,R),G=new Q(new Array(0),T,0,19,7)})(),ce=!0),e.l_desc=new W(e.dyn_ltree,U),e.d_desc=new W(e.dyn_dtree,j),e.bl_desc=new W(e.bl_tree,G),e.bi_buf=0,e.bi_valid=0,ee(e)},_tr_stored_block:le,_tr_flush_block:he,_tr_tally:(e,t,i)=>(e.pending_buf[e.sym_buf+e.sym_next++]=t,e.pending_buf[e.sym_buf+e.sym_next++]=t>>8,e.pending_buf[e.sym_buf+e.sym_next++]=i,0===t?e.dyn_ltree[2*i]++:(e.matches++,t--,e.dyn_ltree[2*(O[i]+E+1)]++,e.dyn_dtree[2*$(t)]++),e.sym_next===e.sym_end),_tr_align:e=>{Y(e,2,3),X(e,256,L),(e=>{16===e.bi_valid?(K(e,e.bi_buf),e.bi_buf=0,e.bi_valid=0):e.bi_valid>=8&&(e.pending_buf[e.pending++]=255&e.bi_buf,e.bi_buf>>=8,e.bi_valid-=8)})(e)}};var ue=(e,t,i,n)=>{let r=65535&e,s=e>>>16&65535,o=0;for(;0!==i;){o=i>2e3?2e3:i,i-=o;do{r=r+t[n++]|0,s=s+r|0}while(--o);r%=65521,s%=65521}return r|s<<16};const fe=new Uint32Array((()=>{let e,t=[];for(var i=0;i<256;i++){e=i;for(var n=0;n<8;n++)e=1&e?3988292384^e>>>1:e>>>1;t[i]=e}return t})());var pe=(e,t,i,n)=>{const r=fe,s=n+i;e^=-1;for(let i=n;i<s;i++)e=e>>>8^r[255&(e^t[i])];return~e},ge={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"},me={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_MEM_ERROR:-4,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8};const{_tr_init:we,_tr_stored_block:be,_tr_flush_block:Fe,_tr_tally:ve,_tr_align:ye}=de,{Z_NO_FLUSH:Ae,Z_PARTIAL_FLUSH:Ce,Z_FULL_FLUSH:_e,Z_FINISH:xe,Z_BLOCK:ke,Z_OK:Ie,Z_STREAM_END:Se,Z_STREAM_ERROR:Ee,Z_DATA_ERROR:Ne,Z_BUF_ERROR:Me,Z_DEFAULT_COMPRESSION:Re,Z_FILTERED:Be,Z_HUFFMAN_ONLY:De,Z_RLE:Te,Z_FIXED:ze,Z_DEFAULT_STRATEGY:Le,Z_UNKNOWN:He,Z_DEFLATED:Pe}=me,Oe=258,Ve=262,qe=42,Qe=113,Ue=666,je=(e,t)=>(e.msg=ge[t],t),Ge=e=>2*e-(e>4?9:0),We=e=>{let t=e.length;for(;--t>=0;)e[t]=0},$e=e=>{let t,i,n,r=e.w_size;t=e.hash_size,n=t;do{i=e.head[--n],e.head[n]=i>=r?i-r:0}while(--t);t=r,n=t;do{i=e.prev[--n],e.prev[n]=i>=r?i-r:0}while(--t)};let Ke=(e,t,i)=>(t<<e.hash_shift^i)&e.hash_mask;const Ye=e=>{const t=e.state;let i=t.pending;i>e.avail_out&&(i=e.avail_out),0!==i&&(e.output.set(t.pending_buf.subarray(t.pending_out,t.pending_out+i),e.next_out),e.next_out+=i,t.pending_out+=i,e.total_out+=i,e.avail_out-=i,t.pending-=i,0===t.pending&&(t.pending_out=0))},Xe=(e,t)=>{Fe(e,e.block_start>=0?e.block_start:-1,e.strstart-e.block_start,t),e.block_start=e.strstart,Ye(e.strm)},Ze=(e,t)=>{e.pending_buf[e.pending++]=t},Je=(e,t)=>{e.pending_buf[e.pending++]=t>>>8&255,e.pending_buf[e.pending++]=255&t},et=(e,t,i,n)=>{let r=e.avail_in;return r>n&&(r=n),0===r?0:(e.avail_in-=r,t.set(e.input.subarray(e.next_in,e.next_in+r),i),1===e.state.wrap?e.adler=ue(e.adler,t,r,i):2===e.state.wrap&&(e.adler=pe(e.adler,t,r,i)),e.next_in+=r,e.total_in+=r,r)},tt=(e,t)=>{let i,n,r=e.max_chain_length,s=e.strstart,o=e.prev_length,a=e.nice_match;const c=e.strstart>e.w_size-Ve?e.strstart-(e.w_size-Ve):0,l=e.window,h=e.w_mask,d=e.prev,u=e.strstart+Oe;let f=l[s+o-1],p=l[s+o];e.prev_length>=e.good_match&&(r>>=2),a>e.lookahead&&(a=e.lookahead);do{if(i=t,l[i+o]===p&&l[i+o-1]===f&&l[i]===l[s]&&l[++i]===l[s+1]){s+=2,i++;do{}while(l[++s]===l[++i]&&l[++s]===l[++i]&&l[++s]===l[++i]&&l[++s]===l[++i]&&l[++s]===l[++i]&&l[++s]===l[++i]&&l[++s]===l[++i]&&l[++s]===l[++i]&&s<u);if(n=Oe-(u-s),s=u-Oe,n>o){if(e.match_start=t,o=n,n>=a)break;f=l[s+o-1],p=l[s+o]}}}while((t=d[t&h])>c&&0!=--r);return o<=e.lookahead?o:e.lookahead},it=e=>{const t=e.w_size;let i,n,r;do{if(n=e.window_size-e.lookahead-e.strstart,e.strstart>=t+(t-Ve)&&(e.window.set(e.window.subarray(t,t+t-n),0),e.match_start-=t,e.strstart-=t,e.block_start-=t,e.insert>e.strstart&&(e.insert=e.strstart),$e(e),n+=t),0===e.strm.avail_in)break;if(i=et(e.strm,e.window,e.strstart+e.lookahead,n),e.lookahead+=i,e.lookahead+e.insert>=3)for(r=e.strstart-e.insert,e.ins_h=e.window[r],e.ins_h=Ke(e,e.ins_h,e.window[r+1]);e.insert&&(e.ins_h=Ke(e,e.ins_h,e.window[r+3-1]),e.prev[r&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=r,r++,e.insert--,!(e.lookahead+e.insert<3)););}while(e.lookahead<Ve&&0!==e.strm.avail_in)},nt=(e,t)=>{let i,n,r,s=e.pending_buf_size-5>e.w_size?e.w_size:e.pending_buf_size-5,o=0,a=e.strm.avail_in;do{if(i=65535,r=e.bi_valid+42>>3,e.strm.avail_out<r)break;if(r=e.strm.avail_out-r,n=e.strstart-e.block_start,i>n+e.strm.avail_in&&(i=n+e.strm.avail_in),i>r&&(i=r),i<s&&(0===i&&t!==xe||t===Ae||i!==n+e.strm.avail_in))break;o=t===xe&&i===n+e.strm.avail_in?1:0,be(e,0,0,o),e.pending_buf[e.pending-4]=i,e.pending_buf[e.pending-3]=i>>8,e.pending_buf[e.pending-2]=~i,e.pending_buf[e.pending-1]=~i>>8,Ye(e.strm),n&&(n>i&&(n=i),e.strm.output.set(e.window.subarray(e.block_start,e.block_start+n),e.strm.next_out),e.strm.next_out+=n,e.strm.avail_out-=n,e.strm.total_out+=n,e.block_start+=n,i-=n),i&&(et(e.strm,e.strm.output,e.strm.next_out,i),e.strm.next_out+=i,e.strm.avail_out-=i,e.strm.total_out+=i)}while(0===o);return a-=e.strm.avail_in,a&&(a>=e.w_size?(e.matches=2,e.window.set(e.strm.input.subarray(e.strm.next_in-e.w_size,e.strm.next_in),0),e.strstart=e.w_size,e.insert=e.strstart):(e.window_size-e.strstart<=a&&(e.strstart-=e.w_size,e.window.set(e.window.subarray(e.w_size,e.w_size+e.strstart),0),e.matches<2&&e.matches++,e.insert>e.strstart&&(e.insert=e.strstart)),e.window.set(e.strm.input.subarray(e.strm.next_in-a,e.strm.next_in),e.strstart),e.strstart+=a,e.insert+=a>e.w_size-e.insert?e.w_size-e.insert:a),e.block_start=e.strstart),e.high_water<e.strstart&&(e.high_water=e.strstart),o?4:t!==Ae&&t!==xe&&0===e.strm.avail_in&&e.strstart===e.block_start?2:(r=e.window_size-e.strstart,e.strm.avail_in>r&&e.block_start>=e.w_size&&(e.block_start-=e.w_size,e.strstart-=e.w_size,e.window.set(e.window.subarray(e.w_size,e.w_size+e.strstart),0),e.matches<2&&e.matches++,r+=e.w_size,e.insert>e.strstart&&(e.insert=e.strstart)),r>e.strm.avail_in&&(r=e.strm.avail_in),r&&(et(e.strm,e.window,e.strstart,r),e.strstart+=r,e.insert+=r>e.w_size-e.insert?e.w_size-e.insert:r),e.high_water<e.strstart&&(e.high_water=e.strstart),r=e.bi_valid+42>>3,r=e.pending_buf_size-r>65535?65535:e.pending_buf_size-r,s=r>e.w_size?e.w_size:r,n=e.strstart-e.block_start,(n>=s||(n||t===xe)&&t!==Ae&&0===e.strm.avail_in&&n<=r)&&(i=n>r?r:n,o=t===xe&&0===e.strm.avail_in&&i===n?1:0,be(e,e.block_start,i,o),e.block_start+=i,Ye(e.strm)),o?3:1)},rt=(e,t)=>{let i,n;for(;;){if(e.lookahead<Ve){if(it(e),e.lookahead<Ve&&t===Ae)return 1;if(0===e.lookahead)break}if(i=0,e.lookahead>=3&&(e.ins_h=Ke(e,e.ins_h,e.window[e.strstart+3-1]),i=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart),0!==i&&e.strstart-i<=e.w_size-Ve&&(e.match_length=tt(e,i)),e.match_length>=3)if(n=ve(e,e.strstart-e.match_start,e.match_length-3),e.lookahead-=e.match_length,e.match_length<=e.max_lazy_match&&e.lookahead>=3){e.match_length--;do{e.strstart++,e.ins_h=Ke(e,e.ins_h,e.window[e.strstart+3-1]),i=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart}while(0!=--e.match_length);e.strstart++}else e.strstart+=e.match_length,e.match_length=0,e.ins_h=e.window[e.strstart],e.ins_h=Ke(e,e.ins_h,e.window[e.strstart+1]);else n=ve(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++;if(n&&(Xe(e,!1),0===e.strm.avail_out))return 1}return e.insert=e.strstart<2?e.strstart:2,t===xe?(Xe(e,!0),0===e.strm.avail_out?3:4):e.sym_next&&(Xe(e,!1),0===e.strm.avail_out)?1:2},st=(e,t)=>{let i,n,r;for(;;){if(e.lookahead<Ve){if(it(e),e.lookahead<Ve&&t===Ae)return 1;if(0===e.lookahead)break}if(i=0,e.lookahead>=3&&(e.ins_h=Ke(e,e.ins_h,e.window[e.strstart+3-1]),i=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart),e.prev_length=e.match_length,e.prev_match=e.match_start,e.match_length=2,0!==i&&e.prev_length<e.max_lazy_match&&e.strstart-i<=e.w_size-Ve&&(e.match_length=tt(e,i),e.match_length<=5&&(e.strategy===Be||3===e.match_length&&e.strstart-e.match_start>4096)&&(e.match_length=2)),e.prev_length>=3&&e.match_length<=e.prev_length){r=e.strstart+e.lookahead-3,n=ve(e,e.strstart-1-e.prev_match,e.prev_length-3),e.lookahead-=e.prev_length-1,e.prev_length-=2;do{++e.strstart<=r&&(e.ins_h=Ke(e,e.ins_h,e.window[e.strstart+3-1]),i=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart)}while(0!=--e.prev_length);if(e.match_available=0,e.match_length=2,e.strstart++,n&&(Xe(e,!1),0===e.strm.avail_out))return 1}else if(e.match_available){if(n=ve(e,0,e.window[e.strstart-1]),n&&Xe(e,!1),e.strstart++,e.lookahead--,0===e.strm.avail_out)return 1}else e.match_available=1,e.strstart++,e.lookahead--}return e.match_available&&(n=ve(e,0,e.window[e.strstart-1]),e.match_available=0),e.insert=e.strstart<2?e.strstart:2,t===xe?(Xe(e,!0),0===e.strm.avail_out?3:4):e.sym_next&&(Xe(e,!1),0===e.strm.avail_out)?1:2};function ot(e,t,i,n,r){this.good_length=e,this.max_lazy=t,this.nice_length=i,this.max_chain=n,this.func=r}const at=[new ot(0,0,0,0,nt),new ot(4,4,8,4,rt),new ot(4,5,16,8,rt),new ot(4,6,32,32,rt),new ot(4,4,16,16,st),new ot(8,16,32,32,st),new ot(8,16,128,128,st),new ot(8,32,128,256,st),new ot(32,128,258,1024,st),new ot(32,258,258,4096,st)];function ct(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=Pe,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new Uint16Array(1146),this.dyn_dtree=new Uint16Array(122),this.bl_tree=new Uint16Array(78),We(this.dyn_ltree),We(this.dyn_dtree),We(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new Uint16Array(16),this.heap=new Uint16Array(573),We(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new Uint16Array(573),We(this.depth),this.sym_buf=0,this.lit_bufsize=0,this.sym_next=0,this.sym_end=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0}const lt=e=>{if(!e)return 1;const t=e.state;return!t||t.strm!==e||t.status!==qe&&57!==t.status&&69!==t.status&&73!==t.status&&91!==t.status&&103!==t.status&&t.status!==Qe&&t.status!==Ue?1:0},ht=e=>{if(lt(e))return je(e,Ee);e.total_in=e.total_out=0,e.data_type=He;const t=e.state;return t.pending=0,t.pending_out=0,t.wrap<0&&(t.wrap=-t.wrap),t.status=2===t.wrap?57:t.wrap?qe:Qe,e.adler=2===t.wrap?0:1,t.last_flush=-2,we(t),Ie},dt=e=>{const t=ht(e);var i;return t===Ie&&((i=e.state).window_size=2*i.w_size,We(i.head),i.max_lazy_match=at[i.level].max_lazy,i.good_match=at[i.level].good_length,i.nice_match=at[i.level].nice_length,i.max_chain_length=at[i.level].max_chain,i.strstart=0,i.block_start=0,i.lookahead=0,i.insert=0,i.match_length=i.prev_length=2,i.match_available=0,i.ins_h=0),t},ut=(e,t,i,n,r,s)=>{if(!e)return Ee;let o=1;if(t===Re&&(t=6),n<0?(o=0,n=-n):n>15&&(o=2,n-=16),r<1||r>9||i!==Pe||n<8||n>15||t<0||t>9||s<0||s>ze||8===n&&1!==o)return je(e,Ee);8===n&&(n=9);const a=new ct;return e.state=a,a.strm=e,a.status=qe,a.wrap=o,a.gzhead=null,a.w_bits=n,a.w_size=1<<a.w_bits,a.w_mask=a.w_size-1,a.hash_bits=r+7,a.hash_size=1<<a.hash_bits,a.hash_mask=a.hash_size-1,a.hash_shift=~~((a.hash_bits+3-1)/3),a.window=new Uint8Array(2*a.w_size),a.head=new Uint16Array(a.hash_size),a.prev=new Uint16Array(a.w_size),a.lit_bufsize=1<<r+6,a.pending_buf_size=4*a.lit_bufsize,a.pending_buf=new Uint8Array(a.pending_buf_size),a.sym_buf=a.lit_bufsize,a.sym_end=3*(a.lit_bufsize-1),a.level=t,a.strategy=s,a.method=i,dt(e)};var ft=(e,t)=>{let i=t.length;if(lt(e))return Ee;const n=e.state,r=n.wrap;if(2===r||1===r&&n.status!==qe||n.lookahead)return Ee;if(1===r&&(e.adler=ue(e.adler,t,i,0)),n.wrap=0,i>=n.w_size){0===r&&(We(n.head),n.strstart=0,n.block_start=0,n.insert=0);let e=new Uint8Array(n.w_size);e.set(t.subarray(i-n.w_size,i),0),t=e,i=n.w_size}const s=e.avail_in,o=e.next_in,a=e.input;for(e.avail_in=i,e.next_in=0,e.input=t,it(n);n.lookahead>=3;){let e=n.strstart,t=n.lookahead-2;do{n.ins_h=Ke(n,n.ins_h,n.window[e+3-1]),n.prev[e&n.w_mask]=n.head[n.ins_h],n.head[n.ins_h]=e,e++}while(--t);n.strstart=e,n.lookahead=2,it(n)}return n.strstart+=n.lookahead,n.block_start=n.strstart,n.insert=n.lookahead,n.lookahead=0,n.match_length=n.prev_length=2,n.match_available=0,e.next_in=o,e.input=a,e.avail_in=s,n.wrap=r,Ie},pt={deflateInit:(e,t)=>ut(e,t,Pe,15,8,Le),deflateInit2:ut,deflateReset:dt,deflateResetKeep:ht,deflateSetHeader:(e,t)=>lt(e)||2!==e.state.wrap?Ee:(e.state.gzhead=t,Ie),deflate:(e,t)=>{if(lt(e)||t>ke||t<0)return e?je(e,Ee):Ee;const i=e.state;if(!e.output||0!==e.avail_in&&!e.input||i.status===Ue&&t!==xe)return je(e,0===e.avail_out?Me:Ee);const n=i.last_flush;if(i.last_flush=t,0!==i.pending){if(Ye(e),0===e.avail_out)return i.last_flush=-1,Ie}else if(0===e.avail_in&&Ge(t)<=Ge(n)&&t!==xe)return je(e,Me);if(i.status===Ue&&0!==e.avail_in)return je(e,Me);if(i.status===qe&&0===i.wrap&&(i.status=Qe),i.status===qe){let t=Pe+(i.w_bits-8<<4)<<8,n=-1;if(n=i.strategy>=De||i.level<2?0:i.level<6?1:6===i.level?2:3,t|=n<<6,0!==i.strstart&&(t|=32),t+=31-t%31,Je(i,t),0!==i.strstart&&(Je(i,e.adler>>>16),Je(i,65535&e.adler)),e.adler=1,i.status=Qe,Ye(e),0!==i.pending)return i.last_flush=-1,Ie}if(57===i.status)if(e.adler=0,Ze(i,31),Ze(i,139),Ze(i,8),i.gzhead)Ze(i,(i.gzhead.text?1:0)+(i.gzhead.hcrc?2:0)+(i.gzhead.extra?4:0)+(i.gzhead.name?8:0)+(i.gzhead.comment?16:0)),Ze(i,255&i.gzhead.time),Ze(i,i.gzhead.time>>8&255),Ze(i,i.gzhead.time>>16&255),Ze(i,i.gzhead.time>>24&255),Ze(i,9===i.level?2:i.strategy>=De||i.level<2?4:0),Ze(i,255&i.gzhead.os),i.gzhead.extra&&i.gzhead.extra.length&&(Ze(i,255&i.gzhead.extra.length),Ze(i,i.gzhead.extra.length>>8&255)),i.gzhead.hcrc&&(e.adler=pe(e.adler,i.pending_buf,i.pending,0)),i.gzindex=0,i.status=69;else if(Ze(i,0),Ze(i,0),Ze(i,0),Ze(i,0),Ze(i,0),Ze(i,9===i.level?2:i.strategy>=De||i.level<2?4:0),Ze(i,3),i.status=Qe,Ye(e),0!==i.pending)return i.last_flush=-1,Ie;if(69===i.status){if(i.gzhead.extra){let t=i.pending,n=(65535&i.gzhead.extra.length)-i.gzindex;for(;i.pending+n>i.pending_buf_size;){let r=i.pending_buf_size-i.pending;if(i.pending_buf.set(i.gzhead.extra.subarray(i.gzindex,i.gzindex+r),i.pending),i.pending=i.pending_buf_size,i.gzhead.hcrc&&i.pending>t&&(e.adler=pe(e.adler,i.pending_buf,i.pending-t,t)),i.gzindex+=r,Ye(e),0!==i.pending)return i.last_flush=-1,Ie;t=0,n-=r}let r=new Uint8Array(i.gzhead.extra);i.pending_buf.set(r.subarray(i.gzindex,i.gzindex+n),i.pending),i.pending+=n,i.gzhead.hcrc&&i.pending>t&&(e.adler=pe(e.adler,i.pending_buf,i.pending-t,t)),i.gzindex=0}i.status=73}if(73===i.status){if(i.gzhead.name){let t,n=i.pending;do{if(i.pending===i.pending_buf_size){if(i.gzhead.hcrc&&i.pending>n&&(e.adler=pe(e.adler,i.pending_buf,i.pending-n,n)),Ye(e),0!==i.pending)return i.last_flush=-1,Ie;n=0}t=i.gzindex<i.gzhead.name.length?255&i.gzhead.name.charCodeAt(i.gzindex++):0,Ze(i,t)}while(0!==t);i.gzhead.hcrc&&i.pending>n&&(e.adler=pe(e.adler,i.pending_buf,i.pending-n,n)),i.gzindex=0}i.status=91}if(91===i.status){if(i.gzhead.comment){let t,n=i.pending;do{if(i.pending===i.pending_buf_size){if(i.gzhead.hcrc&&i.pending>n&&(e.adler=pe(e.adler,i.pending_buf,i.pending-n,n)),Ye(e),0!==i.pending)return i.last_flush=-1,Ie;n=0}t=i.gzindex<i.gzhead.comment.length?255&i.gzhead.comment.charCodeAt(i.gzindex++):0,Ze(i,t)}while(0!==t);i.gzhead.hcrc&&i.pending>n&&(e.adler=pe(e.adler,i.pending_buf,i.pending-n,n))}i.status=103}if(103===i.status){if(i.gzhead.hcrc){if(i.pending+2>i.pending_buf_size&&(Ye(e),0!==i.pending))return i.last_flush=-1,Ie;Ze(i,255&e.adler),Ze(i,e.adler>>8&255),e.adler=0}if(i.status=Qe,Ye(e),0!==i.pending)return i.last_flush=-1,Ie}if(0!==e.avail_in||0!==i.lookahead||t!==Ae&&i.status!==Ue){let n=0===i.level?nt(i,t):i.strategy===De?((e,t)=>{let i;for(;;){if(0===e.lookahead&&(it(e),0===e.lookahead)){if(t===Ae)return 1;break}if(e.match_length=0,i=ve(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++,i&&(Xe(e,!1),0===e.strm.avail_out))return 1}return e.insert=0,t===xe?(Xe(e,!0),0===e.strm.avail_out?3:4):e.sym_next&&(Xe(e,!1),0===e.strm.avail_out)?1:2})(i,t):i.strategy===Te?((e,t)=>{let i,n,r,s;const o=e.window;for(;;){if(e.lookahead<=Oe){if(it(e),e.lookahead<=Oe&&t===Ae)return 1;if(0===e.lookahead)break}if(e.match_length=0,e.lookahead>=3&&e.strstart>0&&(r=e.strstart-1,n=o[r],n===o[++r]&&n===o[++r]&&n===o[++r])){s=e.strstart+Oe;do{}while(n===o[++r]&&n===o[++r]&&n===o[++r]&&n===o[++r]&&n===o[++r]&&n===o[++r]&&n===o[++r]&&n===o[++r]&&r<s);e.match_length=Oe-(s-r),e.match_length>e.lookahead&&(e.match_length=e.lookahead)}if(e.match_length>=3?(i=ve(e,1,e.match_length-3),e.lookahead-=e.match_length,e.strstart+=e.match_length,e.match_length=0):(i=ve(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++),i&&(Xe(e,!1),0===e.strm.avail_out))return 1}return e.insert=0,t===xe?(Xe(e,!0),0===e.strm.avail_out?3:4):e.sym_next&&(Xe(e,!1),0===e.strm.avail_out)?1:2})(i,t):at[i.level].func(i,t);if(3!==n&&4!==n||(i.status=Ue),1===n||3===n)return 0===e.avail_out&&(i.last_flush=-1),Ie;if(2===n&&(t===Ce?ye(i):t!==ke&&(be(i,0,0,!1),t===_e&&(We(i.head),0===i.lookahead&&(i.strstart=0,i.block_start=0,i.insert=0))),Ye(e),0===e.avail_out))return i.last_flush=-1,Ie}return t!==xe?Ie:i.wrap<=0?Se:(2===i.wrap?(Ze(i,255&e.adler),Ze(i,e.adler>>8&255),Ze(i,e.adler>>16&255),Ze(i,e.adler>>24&255),Ze(i,255&e.total_in),Ze(i,e.total_in>>8&255),Ze(i,e.total_in>>16&255),Ze(i,e.total_in>>24&255)):(Je(i,e.adler>>>16),Je(i,65535&e.adler)),Ye(e),i.wrap>0&&(i.wrap=-i.wrap),0!==i.pending?Ie:Se)},deflateEnd:e=>{if(lt(e))return Ee;const t=e.state.status;return e.state=null,t===Qe?je(e,Ne):Ie},deflateSetDictionary:ft,deflateInfo:"pako deflate (from Nodeca project)"};const gt=(e,t)=>Object.prototype.hasOwnProperty.call(e,t);var mt=function(e){const t=Array.prototype.slice.call(arguments,1);for(;t.length;){const i=t.shift();if(i){if("object"!=typeof i)throw new TypeError(i+"must be non-object");for(const t in i)gt(i,t)&&(e[t]=i[t])}}return e},wt=e=>{let t=0;for(let i=0,n=e.length;i<n;i++)t+=e[i].length;const i=new Uint8Array(t);for(let t=0,n=0,r=e.length;t<r;t++){let r=e[t];i.set(r,n),n+=r.length}return i};let bt=!0;try{String.fromCharCode.apply(null,new Uint8Array(1))}catch(Uv){bt=!1}const Ft=new Uint8Array(256);for(let jv=0;jv<256;jv++)Ft[jv]=jv>=252?6:jv>=248?5:jv>=240?4:jv>=224?3:jv>=192?2:1;Ft[254]=Ft[254]=1;var vt=e=>{if("function"==typeof TextEncoder&&TextEncoder.prototype.encode)return(new TextEncoder).encode(e);let t,i,n,r,s,o=e.length,a=0;for(r=0;r<o;r++)i=e.charCodeAt(r),55296==(64512&i)&&r+1<o&&(n=e.charCodeAt(r+1),56320==(64512&n)&&(i=65536+(i-55296<<10)+(n-56320),r++)),a+=i<128?1:i<2048?2:i<65536?3:4;for(t=new Uint8Array(a),s=0,r=0;s<a;r++)i=e.charCodeAt(r),55296==(64512&i)&&r+1<o&&(n=e.charCodeAt(r+1),56320==(64512&n)&&(i=65536+(i-55296<<10)+(n-56320),r++)),i<128?t[s++]=i:i<2048?(t[s++]=192|i>>>6,t[s++]=128|63&i):i<65536?(t[s++]=224|i>>>12,t[s++]=128|i>>>6&63,t[s++]=128|63&i):(t[s++]=240|i>>>18,t[s++]=128|i>>>12&63,t[s++]=128|i>>>6&63,t[s++]=128|63&i);return t},yt=(e,t)=>{const i=t||e.length;if("function"==typeof TextDecoder&&TextDecoder.prototype.decode)return(new TextDecoder).decode(e.subarray(0,t));let n,r;const s=new Array(2*i);for(r=0,n=0;n<i;){let t=e[n++];if(t<128){s[r++]=t;continue}let o=Ft[t];if(o>4)s[r++]=65533,n+=o-1;else{for(t&=2===o?31:3===o?15:7;o>1&&n<i;)t=t<<6|63&e[n++],o--;o>1?s[r++]=65533:t<65536?s[r++]=t:(t-=65536,s[r++]=55296|t>>10&1023,s[r++]=56320|1023&t)}}return((e,t)=>{if(t<65534&&e.subarray&&bt)return String.fromCharCode.apply(null,e.length===t?e:e.subarray(0,t));let i="";for(let n=0;n<t;n++)i+=String.fromCharCode(e[n]);return i})(s,r)},At=(e,t)=>{(t=t||e.length)>e.length&&(t=e.length);let i=t-1;for(;i>=0&&128==(192&e[i]);)i--;return i<0||0===i?t:i+Ft[e[i]]>t?i:t};var Ct=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0};const _t=Object.prototype.toString,{Z_NO_FLUSH:xt,Z_SYNC_FLUSH:kt,Z_FULL_FLUSH:It,Z_FINISH:St,Z_OK:Et,Z_STREAM_END:Nt,Z_DEFAULT_COMPRESSION:Mt,Z_DEFAULT_STRATEGY:Rt,Z_DEFLATED:Bt}=me;function Dt(e){this.options=mt({level:Mt,method:Bt,chunkSize:16384,windowBits:15,memLevel:8,strategy:Rt},e||{});let t=this.options;t.raw&&t.windowBits>0?t.windowBits=-t.windowBits:t.gzip&&t.windowBits>0&&t.windowBits<16&&(t.windowBits+=16),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new Ct,this.strm.avail_out=0;let i=pt.deflateInit2(this.strm,t.level,t.method,t.windowBits,t.memLevel,t.strategy);if(i!==Et)throw new Error(ge[i]);if(t.header&&pt.deflateSetHeader(this.strm,t.header),t.dictionary){let e;if(e="string"==typeof t.dictionary?vt(t.dictionary):"[object ArrayBuffer]"===_t.call(t.dictionary)?new Uint8Array(t.dictionary):t.dictionary,i=pt.deflateSetDictionary(this.strm,e),i!==Et)throw new Error(ge[i]);this._dict_set=!0}}function Tt(e,t){const i=new Dt(t);if(i.push(e,!0),i.err)throw i.msg||ge[i.err];return i.result}Dt.prototype.push=function(e,t){const i=this.strm,n=this.options.chunkSize;let r,s;if(this.ended)return!1;for(s=t===~~t?t:!0===t?St:xt,"string"==typeof e?i.input=vt(e):"[object ArrayBuffer]"===_t.call(e)?i.input=new Uint8Array(e):i.input=e,i.next_in=0,i.avail_in=i.input.length;;)if(0===i.avail_out&&(i.output=new Uint8Array(n),i.next_out=0,i.avail_out=n),(s===kt||s===It)&&i.avail_out<=6)this.onData(i.output.subarray(0,i.next_out)),i.avail_out=0;else{if(r=pt.deflate(i,s),r===Nt)return i.next_out>0&&this.onData(i.output.subarray(0,i.next_out)),r=pt.deflateEnd(this.strm),this.onEnd(r),this.ended=!0,r===Et;if(0!==i.avail_out){if(s>0&&i.next_out>0)this.onData(i.output.subarray(0,i.next_out)),i.avail_out=0;else if(0===i.avail_in)break}else this.onData(i.output)}return!0},Dt.prototype.onData=function(e){this.chunks.push(e)},Dt.prototype.onEnd=function(e){e===Et&&(this.result=wt(this.chunks)),this.chunks=[],this.err=e,this.msg=this.strm.msg};var zt=function(e,t){return(t=t||{}).raw=!0,Tt(e,t)},Lt=function(e,t){return(t=t||{}).gzip=!0,Tt(e,t)},Ht={Deflate:Dt,deflate:Tt,deflateRaw:zt,gzip:Lt,constants:me};const Pt=16209;var Ot=function(e,t){let i,n,r,s,o,a,c,l,h,d,u,f,p,g,m,w,b,F,v,y,A,C,_,x;const k=e.state;i=e.next_in,_=e.input,n=i+(e.avail_in-5),r=e.next_out,x=e.output,s=r-(t-e.avail_out),o=r+(e.avail_out-257),a=k.dmax,c=k.wsize,l=k.whave,h=k.wnext,d=k.window,u=k.hold,f=k.bits,p=k.lencode,g=k.distcode,m=(1<<k.lenbits)-1,w=(1<<k.distbits)-1;e:do{f<15&&(u+=_[i++]<<f,f+=8,u+=_[i++]<<f,f+=8),b=p[u&m];t:for(;;){if(F=b>>>24,u>>>=F,f-=F,F=b>>>16&255,0===F)x[r++]=65535&b;else{if(!(16&F)){if(64&F){if(32&F){k.mode=16191;break e}e.msg="invalid literal/length code",k.mode=Pt;break e}b=p[(65535&b)+(u&(1<<F)-1)];continue t}for(v=65535&b,F&=15,F&&(f<F&&(u+=_[i++]<<f,f+=8),v+=u&(1<<F)-1,u>>>=F,f-=F),f<15&&(u+=_[i++]<<f,f+=8,u+=_[i++]<<f,f+=8),b=g[u&w];;){if(F=b>>>24,u>>>=F,f-=F,F=b>>>16&255,16&F){if(y=65535&b,F&=15,f<F&&(u+=_[i++]<<f,f+=8,f<F&&(u+=_[i++]<<f,f+=8)),y+=u&(1<<F)-1,y>a){e.msg="invalid distance too far back",k.mode=Pt;break e}if(u>>>=F,f-=F,F=r-s,y>F){if(F=y-F,F>l&&k.sane){e.msg="invalid distance too far back",k.mode=Pt;break e}if(A=0,C=d,0===h){if(A+=c-F,F<v){v-=F;do{x[r++]=d[A++]}while(--F);A=r-y,C=x}}else if(h<F){if(A+=c+h-F,F-=h,F<v){v-=F;do{x[r++]=d[A++]}while(--F);if(A=0,h<v){F=h,v-=F;do{x[r++]=d[A++]}while(--F);A=r-y,C=x}}}else if(A+=h-F,F<v){v-=F;do{x[r++]=d[A++]}while(--F);A=r-y,C=x}for(;v>2;)x[r++]=C[A++],x[r++]=C[A++],x[r++]=C[A++],v-=3;v&&(x[r++]=C[A++],v>1&&(x[r++]=C[A++]))}else{A=r-y;do{x[r++]=x[A++],x[r++]=x[A++],x[r++]=x[A++],v-=3}while(v>2);v&&(x[r++]=x[A++],v>1&&(x[r++]=x[A++]))}break}if(64&F){e.msg="invalid distance code",k.mode=Pt;break e}b=g[(65535&b)+(u&(1<<F)-1)]}}break}}while(i<n&&r<o);v=f>>3,i-=v,f-=v<<3,u&=(1<<f)-1,e.next_in=i,e.next_out=r,e.avail_in=i<n?n-i+5:5-(i-n),e.avail_out=r<o?o-r+257:257-(r-o),k.hold=u,k.bits=f};const Vt=15,qt=new Uint16Array([3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,0,0]),Qt=new Uint8Array([16,16,16,16,16,16,16,16,17,17,17,17,18,18,18,18,19,19,19,19,20,20,20,20,21,21,21,21,16,72,78]),Ut=new Uint16Array([1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,0,0]),jt=new Uint8Array([16,16,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23,24,24,25,25,26,26,27,27,28,28,29,29,64,64]);var Gt=(e,t,i,n,r,s,o,a)=>{const c=a.bits;let l,h,d,u,f,p,g=0,m=0,w=0,b=0,F=0,v=0,y=0,A=0,C=0,_=0,x=null;const k=new Uint16Array(16),I=new Uint16Array(16);let S,E,N,M=null;for(g=0;g<=Vt;g++)k[g]=0;for(m=0;m<n;m++)k[t[i+m]]++;for(F=c,b=Vt;b>=1&&0===k[b];b--);if(F>b&&(F=b),0===b)return r[s++]=20971520,r[s++]=20971520,a.bits=1,0;for(w=1;w<b&&0===k[w];w++);for(F<w&&(F=w),A=1,g=1;g<=Vt;g++)if(A<<=1,A-=k[g],A<0)return-1;if(A>0&&(0===e||1!==b))return-1;for(I[1]=0,g=1;g<Vt;g++)I[g+1]=I[g]+k[g];for(m=0;m<n;m++)0!==t[i+m]&&(o[I[t[i+m]]++]=m);if(0===e?(x=M=o,p=20):1===e?(x=qt,M=Qt,p=257):(x=Ut,M=jt,p=0),_=0,m=0,g=w,f=s,v=F,y=0,d=-1,C=1<<F,u=C-1,1===e&&C>852||2===e&&C>592)return 1;for(;;){S=g-y,o[m]+1<p?(E=0,N=o[m]):o[m]>=p?(E=M[o[m]-p],N=x[o[m]-p]):(E=96,N=0),l=1<<g-y,h=1<<v,w=h;do{h-=l,r[f+(_>>y)+h]=S<<24|E<<16|N}while(0!==h);for(l=1<<g-1;_&l;)l>>=1;if(0!==l?(_&=l-1,_+=l):_=0,m++,0==--k[g]){if(g===b)break;g=t[i+o[m]]}if(g>F&&(_&u)!==d){for(0===y&&(y=F),f+=w,v=g-y,A=1<<v;v+y<b&&(A-=k[v+y],!(A<=0));)v++,A<<=1;if(C+=1<<v,1===e&&C>852||2===e&&C>592)return 1;d=_&u,r[d]=F<<24|v<<16|f-s}}return 0!==_&&(r[f+_]=g-y<<24|64<<16),a.bits=F,0};const{Z_FINISH:Wt,Z_BLOCK:$t,Z_TREES:Kt,Z_OK:Yt,Z_STREAM_END:Xt,Z_NEED_DICT:Zt,Z_STREAM_ERROR:Jt,Z_DATA_ERROR:ei,Z_MEM_ERROR:ti,Z_BUF_ERROR:ii,Z_DEFLATED:ni}=me,ri=16180,si=16190,oi=16191,ai=16192,ci=16194,li=16199,hi=16200,di=16206,ui=16209,fi=e=>(e>>>24&255)+(e>>>8&65280)+((65280&e)<<8)+((255&e)<<24);function pi(){this.strm=null,this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new Uint16Array(320),this.work=new Uint16Array(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}const gi=e=>{if(!e)return 1;const t=e.state;return!t||t.strm!==e||t.mode<ri||t.mode>16211?1:0},mi=e=>{if(gi(e))return Jt;const t=e.state;return e.total_in=e.total_out=t.total=0,e.msg="",t.wrap&&(e.adler=1&t.wrap),t.mode=ri,t.last=0,t.havedict=0,t.flags=-1,t.dmax=32768,t.head=null,t.hold=0,t.bits=0,t.lencode=t.lendyn=new Int32Array(852),t.distcode=t.distdyn=new Int32Array(592),t.sane=1,t.back=-1,Yt},wi=e=>{if(gi(e))return Jt;const t=e.state;return t.wsize=0,t.whave=0,t.wnext=0,mi(e)},bi=(e,t)=>{let i;if(gi(e))return Jt;const n=e.state;return t<0?(i=0,t=-t):(i=5+(t>>4),t<48&&(t&=15)),t&&(t<8||t>15)?Jt:(null!==n.window&&n.wbits!==t&&(n.window=null),n.wrap=i,n.wbits=t,wi(e))},Fi=(e,t)=>{if(!e)return Jt;const i=new pi;e.state=i,i.strm=e,i.window=null,i.mode=ri;const n=bi(e,t);return n!==Yt&&(e.state=null),n};let vi,yi,Ai=!0;const Ci=e=>{if(Ai){vi=new Int32Array(512),yi=new Int32Array(32);let t=0;for(;t<144;)e.lens[t++]=8;for(;t<256;)e.lens[t++]=9;for(;t<280;)e.lens[t++]=7;for(;t<288;)e.lens[t++]=8;for(Gt(1,e.lens,0,288,vi,0,e.work,{bits:9}),t=0;t<32;)e.lens[t++]=5;Gt(2,e.lens,0,32,yi,0,e.work,{bits:5}),Ai=!1}e.lencode=vi,e.lenbits=9,e.distcode=yi,e.distbits=5},_i=(e,t,i,n)=>{let r;const s=e.state;return null===s.window&&(s.wsize=1<<s.wbits,s.wnext=0,s.whave=0,s.window=new Uint8Array(s.wsize)),n>=s.wsize?(s.window.set(t.subarray(i-s.wsize,i),0),s.wnext=0,s.whave=s.wsize):(r=s.wsize-s.wnext,r>n&&(r=n),s.window.set(t.subarray(i-n,i-n+r),s.wnext),(n-=r)?(s.window.set(t.subarray(i-n,i),0),s.wnext=n,s.whave=s.wsize):(s.wnext+=r,s.wnext===s.wsize&&(s.wnext=0),s.whave<s.wsize&&(s.whave+=r))),0};var xi={inflateReset:wi,inflateReset2:bi,inflateResetKeep:mi,inflateInit:e=>Fi(e,15),inflateInit2:Fi,inflate:(e,t)=>{let i,n,r,s,o,a,c,l,h,d,u,f,p,g,m,w,b,F,v,y,A,C,_=0;const x=new Uint8Array(4);let k,I;const S=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]);if(gi(e)||!e.output||!e.input&&0!==e.avail_in)return Jt;i=e.state,i.mode===oi&&(i.mode=ai),o=e.next_out,r=e.output,c=e.avail_out,s=e.next_in,n=e.input,a=e.avail_in,l=i.hold,h=i.bits,d=a,u=c,C=Yt;e:for(;;)switch(i.mode){case ri:if(0===i.wrap){i.mode=ai;break}for(;h<16;){if(0===a)break e;a--,l+=n[s++]<<h,h+=8}if(2&i.wrap&&35615===l){0===i.wbits&&(i.wbits=15),i.check=0,x[0]=255&l,x[1]=l>>>8&255,i.check=pe(i.check,x,2,0),l=0,h=0,i.mode=16181;break}if(i.head&&(i.head.done=!1),!(1&i.wrap)||(((255&l)<<8)+(l>>8))%31){e.msg="incorrect header check",i.mode=ui;break}if((15&l)!==ni){e.msg="unknown compression method",i.mode=ui;break}if(l>>>=4,h-=4,A=8+(15&l),0===i.wbits&&(i.wbits=A),A>15||A>i.wbits){e.msg="invalid window size",i.mode=ui;break}i.dmax=1<<i.wbits,i.flags=0,e.adler=i.check=1,i.mode=512&l?16189:oi,l=0,h=0;break;case 16181:for(;h<16;){if(0===a)break e;a--,l+=n[s++]<<h,h+=8}if(i.flags=l,(255&i.flags)!==ni){e.msg="unknown compression method",i.mode=ui;break}if(57344&i.flags){e.msg="unknown header flags set",i.mode=ui;break}i.head&&(i.head.text=l>>8&1),512&i.flags&&4&i.wrap&&(x[0]=255&l,x[1]=l>>>8&255,i.check=pe(i.check,x,2,0)),l=0,h=0,i.mode=16182;case 16182:for(;h<32;){if(0===a)break e;a--,l+=n[s++]<<h,h+=8}i.head&&(i.head.time=l),512&i.flags&&4&i.wrap&&(x[0]=255&l,x[1]=l>>>8&255,x[2]=l>>>16&255,x[3]=l>>>24&255,i.check=pe(i.check,x,4,0)),l=0,h=0,i.mode=16183;case 16183:for(;h<16;){if(0===a)break e;a--,l+=n[s++]<<h,h+=8}i.head&&(i.head.xflags=255&l,i.head.os=l>>8),512&i.flags&&4&i.wrap&&(x[0]=255&l,x[1]=l>>>8&255,i.check=pe(i.check,x,2,0)),l=0,h=0,i.mode=16184;case 16184:if(1024&i.flags){for(;h<16;){if(0===a)break e;a--,l+=n[s++]<<h,h+=8}i.length=l,i.head&&(i.head.extra_len=l),512&i.flags&&4&i.wrap&&(x[0]=255&l,x[1]=l>>>8&255,i.check=pe(i.check,x,2,0)),l=0,h=0}else i.head&&(i.head.extra=null);i.mode=16185;case 16185:if(1024&i.flags&&(f=i.length,f>a&&(f=a),f&&(i.head&&(A=i.head.extra_len-i.length,i.head.extra||(i.head.extra=new Uint8Array(i.head.extra_len)),i.head.extra.set(n.subarray(s,s+f),A)),512&i.flags&&4&i.wrap&&(i.check=pe(i.check,n,f,s)),a-=f,s+=f,i.length-=f),i.length))break e;i.length=0,i.mode=16186;case 16186:if(2048&i.flags){if(0===a)break e;f=0;do{A=n[s+f++],i.head&&A&&i.length<65536&&(i.head.name+=String.fromCharCode(A))}while(A&&f<a);if(512&i.flags&&4&i.wrap&&(i.check=pe(i.check,n,f,s)),a-=f,s+=f,A)break e}else i.head&&(i.head.name=null);i.length=0,i.mode=16187;case 16187:if(4096&i.flags){if(0===a)break e;f=0;do{A=n[s+f++],i.head&&A&&i.length<65536&&(i.head.comment+=String.fromCharCode(A))}while(A&&f<a);if(512&i.flags&&4&i.wrap&&(i.check=pe(i.check,n,f,s)),a-=f,s+=f,A)break e}else i.head&&(i.head.comment=null);i.mode=16188;case 16188:if(512&i.flags){for(;h<16;){if(0===a)break e;a--,l+=n[s++]<<h,h+=8}if(4&i.wrap&&l!==(65535&i.check)){e.msg="header crc mismatch",i.mode=ui;break}l=0,h=0}i.head&&(i.head.hcrc=i.flags>>9&1,i.head.done=!0),e.adler=i.check=0,i.mode=oi;break;case 16189:for(;h<32;){if(0===a)break e;a--,l+=n[s++]<<h,h+=8}e.adler=i.check=fi(l),l=0,h=0,i.mode=si;case si:if(0===i.havedict)return e.next_out=o,e.avail_out=c,e.next_in=s,e.avail_in=a,i.hold=l,i.bits=h,Zt;e.adler=i.check=1,i.mode=oi;case oi:if(t===$t||t===Kt)break e;case ai:if(i.last){l>>>=7&h,h-=7&h,i.mode=di;break}for(;h<3;){if(0===a)break e;a--,l+=n[s++]<<h,h+=8}switch(i.last=1&l,l>>>=1,h-=1,3&l){case 0:i.mode=16193;break;case 1:if(Ci(i),i.mode=li,t===Kt){l>>>=2,h-=2;break e}break;case 2:i.mode=16196;break;case 3:e.msg="invalid block type",i.mode=ui}l>>>=2,h-=2;break;case 16193:for(l>>>=7&h,h-=7&h;h<32;){if(0===a)break e;a--,l+=n[s++]<<h,h+=8}if((65535&l)!=(l>>>16^65535)){e.msg="invalid stored block lengths",i.mode=ui;break}if(i.length=65535&l,l=0,h=0,i.mode=ci,t===Kt)break e;case ci:i.mode=16195;case 16195:if(f=i.length,f){if(f>a&&(f=a),f>c&&(f=c),0===f)break e;r.set(n.subarray(s,s+f),o),a-=f,s+=f,c-=f,o+=f,i.length-=f;break}i.mode=oi;break;case 16196:for(;h<14;){if(0===a)break e;a--,l+=n[s++]<<h,h+=8}if(i.nlen=257+(31&l),l>>>=5,h-=5,i.ndist=1+(31&l),l>>>=5,h-=5,i.ncode=4+(15&l),l>>>=4,h-=4,i.nlen>286||i.ndist>30){e.msg="too many length or distance symbols",i.mode=ui;break}i.have=0,i.mode=16197;case 16197:for(;i.have<i.ncode;){for(;h<3;){if(0===a)break e;a--,l+=n[s++]<<h,h+=8}i.lens[S[i.have++]]=7&l,l>>>=3,h-=3}for(;i.have<19;)i.lens[S[i.have++]]=0;if(i.lencode=i.lendyn,i.lenbits=7,k={bits:i.lenbits},C=Gt(0,i.lens,0,19,i.lencode,0,i.work,k),i.lenbits=k.bits,C){e.msg="invalid code lengths set",i.mode=ui;break}i.have=0,i.mode=16198;case 16198:for(;i.have<i.nlen+i.ndist;){for(;_=i.lencode[l&(1<<i.lenbits)-1],m=_>>>24,w=_>>>16&255,b=65535&_,!(m<=h);){if(0===a)break e;a--,l+=n[s++]<<h,h+=8}if(b<16)l>>>=m,h-=m,i.lens[i.have++]=b;else{if(16===b){for(I=m+2;h<I;){if(0===a)break e;a--,l+=n[s++]<<h,h+=8}if(l>>>=m,h-=m,0===i.have){e.msg="invalid bit length repeat",i.mode=ui;break}A=i.lens[i.have-1],f=3+(3&l),l>>>=2,h-=2}else if(17===b){for(I=m+3;h<I;){if(0===a)break e;a--,l+=n[s++]<<h,h+=8}l>>>=m,h-=m,A=0,f=3+(7&l),l>>>=3,h-=3}else{for(I=m+7;h<I;){if(0===a)break e;a--,l+=n[s++]<<h,h+=8}l>>>=m,h-=m,A=0,f=11+(127&l),l>>>=7,h-=7}if(i.have+f>i.nlen+i.ndist){e.msg="invalid bit length repeat",i.mode=ui;break}for(;f--;)i.lens[i.have++]=A}}if(i.mode===ui)break;if(0===i.lens[256]){e.msg="invalid code -- missing end-of-block",i.mode=ui;break}if(i.lenbits=9,k={bits:i.lenbits},C=Gt(1,i.lens,0,i.nlen,i.lencode,0,i.work,k),i.lenbits=k.bits,C){e.msg="invalid literal/lengths set",i.mode=ui;break}if(i.distbits=6,i.distcode=i.distdyn,k={bits:i.distbits},C=Gt(2,i.lens,i.nlen,i.ndist,i.distcode,0,i.work,k),i.distbits=k.bits,C){e.msg="invalid distances set",i.mode=ui;break}if(i.mode=li,t===Kt)break e;case li:i.mode=hi;case hi:if(a>=6&&c>=258){e.next_out=o,e.avail_out=c,e.next_in=s,e.avail_in=a,i.hold=l,i.bits=h,Ot(e,u),o=e.next_out,r=e.output,c=e.avail_out,s=e.next_in,n=e.input,a=e.avail_in,l=i.hold,h=i.bits,i.mode===oi&&(i.back=-1);break}for(i.back=0;_=i.lencode[l&(1<<i.lenbits)-1],m=_>>>24,w=_>>>16&255,b=65535&_,!(m<=h);){if(0===a)break e;a--,l+=n[s++]<<h,h+=8}if(w&&!(240&w)){for(F=m,v=w,y=b;_=i.lencode[y+((l&(1<<F+v)-1)>>F)],m=_>>>24,w=_>>>16&255,b=65535&_,!(F+m<=h);){if(0===a)break e;a--,l+=n[s++]<<h,h+=8}l>>>=F,h-=F,i.back+=F}if(l>>>=m,h-=m,i.back+=m,i.length=b,0===w){i.mode=16205;break}if(32&w){i.back=-1,i.mode=oi;break}if(64&w){e.msg="invalid literal/length code",i.mode=ui;break}i.extra=15&w,i.mode=16201;case 16201:if(i.extra){for(I=i.extra;h<I;){if(0===a)break e;a--,l+=n[s++]<<h,h+=8}i.length+=l&(1<<i.extra)-1,l>>>=i.extra,h-=i.extra,i.back+=i.extra}i.was=i.length,i.mode=16202;case 16202:for(;_=i.distcode[l&(1<<i.distbits)-1],m=_>>>24,w=_>>>16&255,b=65535&_,!(m<=h);){if(0===a)break e;a--,l+=n[s++]<<h,h+=8}if(!(240&w)){for(F=m,v=w,y=b;_=i.distcode[y+((l&(1<<F+v)-1)>>F)],m=_>>>24,w=_>>>16&255,b=65535&_,!(F+m<=h);){if(0===a)break e;a--,l+=n[s++]<<h,h+=8}l>>>=F,h-=F,i.back+=F}if(l>>>=m,h-=m,i.back+=m,64&w){e.msg="invalid distance code",i.mode=ui;break}i.offset=b,i.extra=15&w,i.mode=16203;case 16203:if(i.extra){for(I=i.extra;h<I;){if(0===a)break e;a--,l+=n[s++]<<h,h+=8}i.offset+=l&(1<<i.extra)-1,l>>>=i.extra,h-=i.extra,i.back+=i.extra}if(i.offset>i.dmax){e.msg="invalid distance too far back",i.mode=ui;break}i.mode=16204;case 16204:if(0===c)break e;if(f=u-c,i.offset>f){if(f=i.offset-f,f>i.whave&&i.sane){e.msg="invalid distance too far back",i.mode=ui;break}f>i.wnext?(f-=i.wnext,p=i.wsize-f):p=i.wnext-f,f>i.length&&(f=i.length),g=i.window}else g=r,p=o-i.offset,f=i.length;f>c&&(f=c),c-=f,i.length-=f;do{r[o++]=g[p++]}while(--f);0===i.length&&(i.mode=hi);break;case 16205:if(0===c)break e;r[o++]=i.length,c--,i.mode=hi;break;case di:if(i.wrap){for(;h<32;){if(0===a)break e;a--,l|=n[s++]<<h,h+=8}if(u-=c,e.total_out+=u,i.total+=u,4&i.wrap&&u&&(e.adler=i.check=i.flags?pe(i.check,r,u,o-u):ue(i.check,r,u,o-u)),u=c,4&i.wrap&&(i.flags?l:fi(l))!==i.check){e.msg="incorrect data check",i.mode=ui;break}l=0,h=0}i.mode=16207;case 16207:if(i.wrap&&i.flags){for(;h<32;){if(0===a)break e;a--,l+=n[s++]<<h,h+=8}if(4&i.wrap&&l!==(4294967295&i.total)){e.msg="incorrect length check",i.mode=ui;break}l=0,h=0}i.mode=16208;case 16208:C=Xt;break e;case ui:C=ei;break e;case 16210:return ti;default:return Jt}return e.next_out=o,e.avail_out=c,e.next_in=s,e.avail_in=a,i.hold=l,i.bits=h,(i.wsize||u!==e.avail_out&&i.mode<ui&&(i.mode<di||t!==Wt))&&_i(e,e.output,e.next_out,u-e.avail_out),d-=e.avail_in,u-=e.avail_out,e.total_in+=d,e.total_out+=u,i.total+=u,4&i.wrap&&u&&(e.adler=i.check=i.flags?pe(i.check,r,u,e.next_out-u):ue(i.check,r,u,e.next_out-u)),e.data_type=i.bits+(i.last?64:0)+(i.mode===oi?128:0)+(i.mode===li||i.mode===ci?256:0),(0===d&&0===u||t===Wt)&&C===Yt&&(C=ii),C},inflateEnd:e=>{if(gi(e))return Jt;let t=e.state;return t.window&&(t.window=null),e.state=null,Yt},inflateGetHeader:(e,t)=>{if(gi(e))return Jt;const i=e.state;return 2&i.wrap?(i.head=t,t.done=!1,Yt):Jt},inflateSetDictionary:(e,t)=>{const i=t.length;let n,r,s;return gi(e)?Jt:(n=e.state,0!==n.wrap&&n.mode!==si?Jt:n.mode===si&&(r=1,r=ue(r,t,i,0),r!==n.check)?ei:(s=_i(e,t,i,i),s?(n.mode=16210,ti):(n.havedict=1,Yt)))},inflateInfo:"pako inflate (from Nodeca project)"};var ki=function(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name="",this.comment="",this.hcrc=0,this.done=!1};const Ii=Object.prototype.toString,{Z_NO_FLUSH:Si,Z_FINISH:Ei,Z_OK:Ni,Z_STREAM_END:Mi,Z_NEED_DICT:Ri,Z_STREAM_ERROR:Bi,Z_DATA_ERROR:Di,Z_MEM_ERROR:Ti}=me;function zi(e){this.options=mt({chunkSize:65536,windowBits:15,to:""},e||{});const t=this.options;t.raw&&t.windowBits>=0&&t.windowBits<16&&(t.windowBits=-t.windowBits,0===t.windowBits&&(t.windowBits=-15)),!(t.windowBits>=0&&t.windowBits<16)||e&&e.windowBits||(t.windowBits+=32),t.windowBits>15&&t.windowBits<48&&(15&t.windowBits||(t.windowBits|=15)),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new Ct,this.strm.avail_out=0;let i=xi.inflateInit2(this.strm,t.windowBits);if(i!==Ni)throw new Error(ge[i]);if(this.header=new ki,xi.inflateGetHeader(this.strm,this.header),t.dictionary&&("string"==typeof t.dictionary?t.dictionary=vt(t.dictionary):"[object ArrayBuffer]"===Ii.call(t.dictionary)&&(t.dictionary=new Uint8Array(t.dictionary)),t.raw&&(i=xi.inflateSetDictionary(this.strm,t.dictionary),i!==Ni)))throw new Error(ge[i])}function Li(e,t){const i=new zi(t);if(i.push(e),i.err)throw i.msg||ge[i.err];return i.result}zi.prototype.push=function(e,t){const i=this.strm,n=this.options.chunkSize,r=this.options.dictionary;let s,o,a;if(this.ended)return!1;for(o=t===~~t?t:!0===t?Ei:Si,"[object ArrayBuffer]"===Ii.call(e)?i.input=new Uint8Array(e):i.input=e,i.next_in=0,i.avail_in=i.input.length;;){for(0===i.avail_out&&(i.output=new Uint8Array(n),i.next_out=0,i.avail_out=n),s=xi.inflate(i,o),s===Ri&&r&&(s=xi.inflateSetDictionary(i,r),s===Ni?s=xi.inflate(i,o):s===Di&&(s=Ri));i.avail_in>0&&s===Mi&&i.state.wrap>0&&0!==e[i.next_in];)xi.inflateReset(i),s=xi.inflate(i,o);switch(s){case Bi:case Di:case Ri:case Ti:return this.onEnd(s),this.ended=!0,!1}if(a=i.avail_out,i.next_out&&(0===i.avail_out||s===Mi))if("string"===this.options.to){let e=At(i.output,i.next_out),t=i.next_out-e,r=yt(i.output,e);i.next_out=t,i.avail_out=n-t,t&&i.output.set(i.output.subarray(e,e+t),0),this.onData(r)}else this.onData(i.output.length===i.next_out?i.output:i.output.subarray(0,i.next_out));if(s!==Ni||0!==a){if(s===Mi)return s=xi.inflateEnd(this.strm),this.onEnd(s),this.ended=!0,!0;if(0===i.avail_in)break}}return!0},zi.prototype.onData=function(e){this.chunks.push(e)},zi.prototype.onEnd=function(e){e===Ni&&("string"===this.options.to?this.result=this.chunks.join(""):this.result=wt(this.chunks)),this.chunks=[],this.err=e,this.msg=this.strm.msg};var Hi=function(e,t){return(t=t||{}).raw=!0,Li(e,t)},Pi={Inflate:zi,inflate:Li,inflateRaw:Hi,ungzip:Li,constants:me};const{Deflate:Oi,deflate:Vi,deflateRaw:qi,gzip:Qi}=Ht,{Inflate:Ui,inflate:ji,inflateRaw:Gi,ungzip:Wi}=Pi;var $i=qi,Ki=ji,Yi=Gi,Xi=Wi;function Zi(e){const t=ArrayBuffer.isView(e)?e:new Uint8Array(e);return 31===t[0]&&139===t[1]}function Ji(e){const t=ArrayBuffer.isView(e)?e:new Uint8Array(e);return 0!==(4&t[3])&&66===t[12]&&67===t[13]?en(t.buffer):Xi(t)}function en(e,t){const i=[];let n=0,r=0;for(t=t||e.byteLength-18;n<t;)try{const t=ArrayBuffer.isView(e)?e:new Uint8Array(e,n,18),s=t[11]<<8|t[10],o=(t[3],t[12],t[13],t[15],t[14],1+(t[17]<<8|t[16])),a=12+s+n,c=e.byteLength-a,l=o-s-19;if(c<l||l<=0)break;const h=new Uint8Array(e,a,l),d=Yi(h);n+=l-1+26,r+=d.byteLength,i.push(d)}catch(e){console.error(e);break}if(1===i.length)return i[0];{const e=new Uint8Array(r);let t=0;for(let n=0;n<i.length;++n){var s=new Uint8Array(i[n]);rn(s,0,e,t,s.length),t+=s.length}return e}}function tn(e){const t=ArrayBuffer.isView(e)?e:new Uint8Array(e);return 1+(t[17]<<8|t[16])}const nn="function"==typeof new Uint8Array(1).subarray;function rn(e,t,i,n,r){if(0!==r){if(!e)throw"Undef src";if(!i)throw"Undef dest";0===t&&r===e.length?sn(e,i,n):nn?sn(e.subarray(t,t+r),i,n):1===e.BYTES_PER_ELEMENT&&r>100?sn(new Uint8Array(e.buffer,e.byteOffset+t,r),i,n):function(e,t,i,n,r){for(let s=0;s<r;++s)i[n+s]=e[t+s]}(e,t,i,n,r)}}function sn(e,t,i){t.set(e,i)}function on(e,t){const i=e.split(","),n=i[0].split(":")[1];let r=i[1];if(n.indexOf("base64")>=0){r=atob(r);const e=new Uint8Array(r.length);for(let t=0;t<r.length;t++)e[t]=r.charCodeAt(t);let i;return i=t||n.indexOf("gzip")>0?Xi(e):e,i}return decodeURIComponent(r)}const an=(e,t,i)=>(1-i)*e+i*t,cn=function(e,t,i){return Math.min(Math.max(e,t),i)},ln=function(e){return Math.log(e)/Math.LN2};function hn(){this.content=[]}function dn(e,t){return Math.random()*(t-e)+e}hn.prototype={push:function(e){this.content.push(e),this.bubbleUp(this.content.length-1)},pop:function(){var e=this.content[0],t=this.content.pop();return this.content.length>0&&(this.content[0]=t,this.sinkDown(0)),e},remove:function(e){for(var t=this.content.length,i=0;i<t;i++)if(this.content[i]===e){var n=this.content.pop();if(i===t-1)break;this.content[i]=n,this.bubbleUp(i),this.sinkDown(i);break}},size:function(){return this.content.length},bubbleUp:function(e){for(var t=this.content[e],i=t;e>0;){var n=Math.floor((e+1)/2)-1,r=this.content[n];if(i>=r)break;this.content[n]=t,this.content[e]=r,e=n}},sinkDown:function(e){for(var t=this.content.length,i=this.content[e],n=i;;){var r=2*(e+1),s=r-1,o=null;if(s<t){var a=this.content[s],c=a;a<n&&(o=s)}if(r<t)this.content[r]<(null==o?n:c)&&(o=r);if(null==o)break;this.content[e]=this.content[o],this.content[o]=i,e=o}}};const un={rgbListFromHSV:()=>{let e=[];for(let t=1;t>=.5;t-=.1)for(let i=0;i<1;i+=1/28){const n="rgb("+un.hsvToRgb(i,1,t).join(",")+")";e.push(n)}return e.pop(),e.push(un.rgbColor(16,16,16)),e},rgbToHex:function(e){return(e=e.match(/^rgba?[\s+]?\([\s+]?(\d+)[\s+]?,[\s+]?(\d+)[\s+]?,[\s+]?(\d+)[\s+]?/i))&&4===e.length?"#"+("0"+parseInt(e[1],10).toString(16)).slice(-2)+("0"+parseInt(e[2],10).toString(16)).slice(-2)+("0"+parseInt(e[3],10).toString(16)).slice(-2):""},hexToRgb:function(e){var t=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(e);if(null!==t)return"rgb("+parseInt(t[1],16)+","+parseInt(t[2],16)+","+parseInt(t[3],16)+")"},hsvToRgb:function(e,t,i){var n,r,s,o=Math.floor(6*e),a=6*e-o,c=i*(1-t),l=i*(1-a*t),h=i*(1-(1-a)*t);switch(o%6){case 0:n=i,r=h,s=c;break;case 1:n=l,r=i,s=c;break;case 2:n=c,r=i,s=h;break;case 3:n=c,r=l,s=i;break;case 4:n=h,r=c,s=i;break;case 5:n=i,r=c,s=l}return[Math.floor(255*n),Math.floor(255*r),Math.floor(255*s)]},hslToRgb:function(e,t,i){var n,r,s;if(0===t)n=r=s=i;else{var o=i<.5?i*(1+t):i+t-i*t,a=2*i-o;n=un.hue2rgb(a,o,e+1/3),r=un.hue2rgb(a,o,e),s=un.hue2rgb(a,o,e-1/3)}return[255*n,255*r,255*s]},hue2rgb:(e,t,i)=>(i<0&&(i+=1),i>1&&(i-=1),i<1/6?e+6*(t-e)*i:i<.5?t:i<2/3?e+(t-e)*(2/3-i)*6:e),rgbaColor:function(e,t,i,n){return"rgba("+(e=cn(e,0,255))+","+(t=cn(t,0,255))+","+(i=cn(i,0,255))+","+(n=cn(n,0,1))+")"},rgbColor:function(e,t,i){return"rgb("+(e=cn(e,0,255))+","+(t=cn(t,0,255))+","+(i=cn(i,0,255))+")"},greyScale:function(e){var t=cn(e,0,255);return"rgb("+t+","+t+","+t+")"},randomGrey:function(e,t){e=cn(e,0,255),t=cn(t,0,255);var i=Math.round(dn(e,t)).toString(10);return"rgb("+i+","+i+","+i+")"},randomRGB:function(e,t){return e=cn(e,0,255),t=cn(t,0,255),"rgb("+Math.round(dn(e,t)).toString(10)+","+Math.round(dn(e,t)).toString(10)+","+Math.round(dn(e,t)).toString(10)+")"},randomRGBConstantAlpha:function(e,t,i){return e=cn(e,0,255),t=cn(t,0,255),"rgba("+Math.round(dn(e,t)).toString(10)+","+Math.round(dn(e,t)).toString(10)+","+Math.round(dn(e,t)).toString(10)+","+i+")"},addAlpha:function(e,t){if("0"===e||"."===e)e="rgb(0,0,0)";else{const t=this.colorNameToHex(e);t&&(e=t)}var i=/(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i.test(e);if(e.startsWith("rgba")){const i=e.lastIndexOf(",");return e.substring(0,i+1)+t.toString()+")"}return i&&(e=un.hexToRgb(e)),e.startsWith("rgb")?e.replace("rgb","rgba").replace(")",", "+t+")"):(console.log(e+" is not an rgb style string"),e)},rgbComponents:function(e){if("0"===e||"."===e)return[0,0,0];if(/(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i.test(e))e=un.hexToRgb(e);else if(!e.startsWith("rgb")){const t=this.colorNameToHex(e);e=this.hexToRgb(t)}if(e.startsWith("rgb("))return e.substring(4,e.length-1).split(",").map((e=>Number.parseInt(e.trim())));if(e.startsWith("rgba("))return e.substring(5,e.length-1).split(",").map(((e,t)=>(e=e.trim(),3===t?Number.parseFloat(e):Number.parseInt(e))));throw Error("Unrecognized color string: color")},getCompositeColor:function(e,t,i){return"rgb("+Math.floor(i*t[0]+(1-i)*e[0])+","+Math.floor(i*t[1]+(1-i)*e[1])+","+Math.floor(i*t[2]+(1-i)*e[2])+")"},createColorString:function(e){const t=this.createColorStringSafe(e);return t||e},createColorStringSafe:function(e){if((e=function(e){return void 0===e||((e.startsWith("'")||e.startsWith('"'))&&(e=e.substring(1)),(e.endsWith("'")||e.endsWith('"'))&&(e=e.substring(0,e.length-1))),e}(e)).startsWith("rgb(")&&e.endsWith(")"))return e;if(e.startsWith("#")&&e.length<8)return e;const t=this.colorNameToHex(e);if(t)return t;const i=e.split(",");return 3===i.length&&fn(i[0])&&fn(i[1])&&fn(i[2])?`rgb(${e})`:void 0},darkenLighten:function(e,t){let i,n=this.colorNameToHex(e);i=n?un.hexToRgb(n):e.startsWith("rgb(")?e:un.hexToRgb(e);const r=i.replace(")","").substring(4).split(","),s=Math.max(0,Math.min(255,Number.parseInt(r[0].trim())+t)),o=Math.max(0,Math.min(255,Number.parseInt(r[1].trim())+t)),a=Math.max(0,Math.min(255,Number.parseInt(r[2].trim())+t));return"rgb("+s.toString()+","+o.toString()+","+a.toString()+")"},colorNameToHex:function(e){return{aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#adff2f",honeydew:"#f0fff0",hotpink:"#ff69b4","indianred ":"#cd5c5c","indigo ":"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgrey:"#d3d3d3",lightgreen:"#90ee90",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370d8",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#d87093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32",darkgrey:"#a9a9a9",darkslategrey:"#2f4f4f",dimgrey:"#696969",grey:"#808080",lightgray:"#d3d3d3",lightslategrey:"#778899",slategrey:"#708090"}[e]}};function fn(e){const t=Number.parseInt(e);return!Number.isNaN(t)&&t>=0&&t<=255}const pn="googleapis";class gn{constructor(){this.oauthTokens={}}setToken(e,t){t=t||pn,this.oauthTokens[t]=e}getToken(e){let t;e=e||pn;for(let i of Object.keys(this.oauthTokens)){if(mn(i).test(e)){t=this.oauthTokens[i];break}}return t}removeToken(e){e=e||pn;for(let t of Object.keys(this.oauthTokens)){mn(t).test(e)&&(this.oauthTokens[t]=void 0)}}}function mn(e){return new RegExp("^"+e.split(/\*+/).map(wn).join(".*")+"$")}function wn(e){return e.replace(/[|\\{}()[\]^$+*?.]/g,"\\$&")}function bn(e){return e.includes("googleapis")&&!e.includes("urlshortener")||Fn(e)||vn(e)}function Fn(e){return e.startsWith("gs://")||e.startsWith("https://www.googleapis.com/storage")||e.startsWith("https://storage.cloud.google.com")||e.startsWith("https://storage.googleapis.com")}function vn(e){return e.indexOf("drive.google.com")>=0||e.indexOf("www.googleapis.com/drive")>0}function yn(e){let{bucket:t,object:i}=function(e){let t,i;if(e.startsWith("gs://")){const n=e.indexOf("/",5);if(n>=0){t=e.substring(5,n);const r=e.indexOf("?");i=r<0?e.substring(n+1):e.substring(n+1,r)}}else if(e.startsWith("https://storage.googleapis.com")||e.startsWith("https://storage.cloud.google.com")){const n=e.indexOf("/v1/b/",8);if(n>0){const r=e.indexOf("/o/",n);if(r>0){const s=e.indexOf("?",r);t=e.substring(n+6,r),i=s>0?e.substring(r+3,s):e.substring(r+3)}}else{const n=e.indexOf("/",8),r=e.indexOf("/",n+1),s=e.indexOf("?",r);r>0&&(t=e.substring(n+1,r),i=s<0?e.substring(r+1):e.substring(r+1,s))}}else if(e.startsWith("https://www.googleapis.com/storage/v1/b")){const n=e.indexOf("/v1/b/",8),r=e.indexOf("/o/",n);if(r>0){const s=e.indexOf("?",r);t=e.substring(n+6,r),i=s>0?e.substring(r+3,s):e.substring(r+3)}}if(t&&i)return{bucket:t,object:i};throw Error(`Unrecognized Google Storage URI: ${e}`)}(e);i=function(e){let t="";return e.split("").forEach((function(e){An.has(e)?t+=An.get(e):t+=e})),t}(i);const n=e.indexOf("?");return`https://storage.googleapis.com/storage/v1/b/${t}/o/${i}${n>0?e.substring(n)+"&alt=media":"?alt=media"}`}const An=new Map;function Cn(){return window.google&&window.google.igv}async function _n(e){if(!Cn())throw Error("Google oAuth has not been initialized");if(google.igv.tokenResponse&&Date.now()<google.igv.tokenExpiresAt&&google.accounts.oauth2.hasGrantedAllScopes(google.igv.tokenResponse,e))return google.igv.tokenResponse.access_token;{const t=google.igv.tokenClient;return new Promise(((i,n)=>{try{t.callback=e=>{void 0!==e.error&&n(e),google.igv.tokenResponse=e,google.igv.tokenExpiresAt=Date.now()+1e3*e.expires_in,i(e.access_token)},t.requestAccessToken({scope:e})}catch(e){console.log(e)}}))}}function xn(){return google.igv.apiKey}function kn(e){var t=In(e);return t?"https://www.googleapis.com/drive/v3/files/"+t+"?alt=media&supportsTeamDrives=true":e}function In(e){if(e.includes("/open?id=")){const t=e.indexOf("/open?id=")+9,i=e.indexOf("&");if(t>0&&i>t)return e.substring(t,i);if(t>0)return e.substring(t)}else{if(e.includes("/file/d/")){const t=e.indexOf("/file/d/")+8,i=e.lastIndexOf("/");return e.substring(t,i)}if(e.startsWith("https://www.googleapis.com/drive")){let t=e.indexOf("/files/");const i=e.indexOf("?");if(t>0)return t+=7,i>0?e.substring(t,i):e.substring(t)}}throw Error("Unknown Google Drive url format: "+e)}An.set("!","%21"),An.set("#","%23"),An.set("$","%24"),An.set("%","%25"),An.set("&","%26"),An.set("'","%27"),An.set("(","%28"),An.set(")","%29"),An.set("*","%2A"),An.set("+","%2B"),An.set(",","%2C"),An.set("/","%2F"),An.set(":","%3A"),An.set(";","%3B"),An.set("=","%3D"),An.set("?","%3F"),An.set("@","%40"),An.set("[","%5B"),An.set("]","%5D"),An.set(" ","%20");class Sn{constructor(e){this.requestsPerSecond=e.requestsPerSecond||10,this.lastStartTime=0,this.queued=[]}add(e,t){var i=this;return new Promise((function(t,n){i.queued.push({resolve:t,reject:n,asyncFunction:e}),i.dequeue()}))}addAll(e,t){var i=e.map(function(e){return this.add(e,t)}.bind(this));return Promise.all(i)}dequeue(){if(this.queued.length>0){var e=new Date,t=1e3/this.requestsPerSecond+1,i=e-this.lastStartTime;i>=t?this._execute():setTimeout(function(){this.dequeue()}.bind(this),t-i)}}async _execute(){this.lastStartTime=new Date;var e=this.queued.shift();const t=e.asyncFunction;try{const i=await t();e.resolve(i)}catch(t){e.reject(t)}}}function En(){if(Cn()){return Cn()&&google.igv.tokenResponse&&Date.now()<google.igv.tokenExpiresAt?google.igv.tokenResponse.access_token:void 0}}function Nn(e){let t;return t=Zi(e)?Ji(e):new Uint8Array(e),"TextDecoder"in function(){if("undefined"!=typeof self)return self;return"undefined"!=typeof global?global:window}()?(new TextDecoder).decode(t):function(e){var t="",i=0;for(;i<e.length;){var n=e[i],r=0,s=0;if(n<=127?(r=0,s=255&n):n<=223?(r=1,s=31&n):n<=239?(r=2,s=15&n):n<=244&&(r=3,s=7&n),e.length-i-r>0)for(var o=0;o<r;)s=s<<6|63&(n=e[i+o+1]),o+=1;else s=65533,r=e.length-i;t+=String.fromCodePoint(s),i+=r+1}return t}(t)}const Mn=new class{constructor(){this.apiKey=void 0,this.googleThrottle=new Sn({requestsPerSecond:8}),this.RANGE_WARNING_GIVEN=!1,this.oauth=new gn}setApiKey(e){this.apiKey=e}async loadArrayBuffer(e,t){return(t=t||{}).responseType||(t.responseType="arraybuffer"),_(e)?this._loadFileSlice(e,t):this.load(e,t)}async loadByteArray(e,t){const i=await this.loadArrayBuffer(e,t);let n;return n=Zi(i)?Ji(i):new Uint8Array(i),n}async loadJson(e,t){"POST"===((t=t||{}).method||(t.sendData?"POST":"GET"))&&(t.contentType="application/json");const i=await this.loadString(e,t);return i?JSON.parse(i):i}async loadString(e,t){return t=t||{},e instanceof File?this._loadStringFromFile(e,t):this._loadStringFromUrl(e,t)}async load(e,t){t=t||{};const i=typeof e;if(_(e=await("function"==typeof e?e():e)))return this._loadFileSlice(e,t);if("function"==typeof e.startsWith){if(e.startsWith("data:")){const i=on(e).buffer;if(t.range){const e=t.range.size?t.range.start+t.range.size:i.byteLength;return i.slice(t.range.start,e)}return i}return e.startsWith("https://drive.google.com")&&(e=kn(e)),vn(e)||e.startsWith("https://www.dropbox.com")?this.googleThrottle.add((async()=>this._loadURL(e,t))):this._loadURL(e,t)}throw Error(`url must be either a 'File', 'string', 'function', or 'Promise'. Actual type: ${i}`)}async _loadURL(e,t){const i=this,n=e;e=function(e){return e.startsWith("https://www.dropbox.com")?e.replace("//www.dropbox.com","//dl.dropboxusercontent.com"):e.startsWith("https://drive.google.com")?kn(e):e.includes("//www.broadinstitute.org/igvdata")?e.replace("//www.broadinstitute.org/igvdata","//data.broadinstitute.org/igvdata"):e.includes("//igvdata.broadinstitute.org")?e.replace("//igvdata.broadinstitute.org","//s3.amazonaws.com/igv.broadinstitute.org"):e.includes("//igv.genepattern.org")?e.replace("//igv.genepattern.org","//igv-genepattern-org.s3.amazonaws.com"):e.startsWith("ftp://ftp.ncbi.nlm.nih.gov/geo")?e.replace("ftp://","https://"):e}(e);let r=(t=t||{}).oauthToken||this.getOauthToken(e);return r&&(r=await("function"==typeof r?r():r)),new Promise((function(s,o){bn(e)&&!function(e){return e.indexOf("X-Goog-Signature")>-1}(e)&&(Fn(e)&&(e=yn(e)),vn(e=function(e){let t=Mn.apiKey;t||"undefined"==typeof gapi||(t=gapi.apiKey);if(void 0!==t&&!e.includes("key=")){const i=e.includes("?")?"&":"?";e=e+i+"key="+t}return e}(e))&&function(e){if(e.includes("supportsTeamDrive"))return e;{const t=e.includes("?")?"&":"?";e=e+t+"supportsTeamDrive=true"}}(e),r||(r=En()));const a=t.headers||{};r&&function(e,t){t&&(e["Cache-Control"]="no-cache",e.Authorization="Bearer "+t)}(a,r);const c=t.range,l=new XMLHttpRequest,h=t.sendData||t.body,d=t.method||(h?"POST":"GET"),u=t.responseType,f=t.contentType,p=t.mimeType;if(l.open(d,e),t.timeout&&(l.timeout=t.timeout),c){let e="";c.size&&(e=c.start+c.size-1),l.setRequestHeader("Range","bytes="+c.start+"-"+e)}if(f&&l.setRequestHeader("Content-Type",f),p&&l.overrideMimeType(p),u&&(l.responseType=u),a)for(let e of Object.keys(a)){const t=a[e];l.setRequestHeader(e,t)}!0===t.withCredentials&&(l.withCredentials=!0),l.onload=async function(n){if(0===l.status||l.status>=200&&l.status<=300)if("HEAD"===t.method){const e=t.requestedHeaders||["content-length"],i={};for(let t of e)i[t]=l.getResponseHeader(t);s(i)}else c&&206!==l.status&&0!==c.start?(l.response.length>1e5&&!i.RANGE_WARNING_GIVEN&&alert(`Warning: Range header ignored for URL: ${e}. This can have severe performance impacts.`),s(l.response.slice(c.start,c.start+c.size))):s(l.response);else 416===l.status?g(Error("416 Unsatisfiable Range")):!Cn()||404!==l.status&&401!==l.status&&403!==l.status||!bn(e)||t.retries?403===l.status?g("Access forbidden: "+e):g(l.status):m()},l.onerror=function(i){bn(e)&&!t.retries?m():g("Error accessing resource: "+e+" Status: "+l.status)},l.ontimeout=function(e){g("Timed out")},l.onabort=function(e){console.log("Aborted"),o(e)};try{l.send(h)}catch(i){bn(e)&&!t.retries?m():g(i)}function g(e){if(!o)throw e;o(e)}async function m(){try{const e=await async function(e){if(Cn()){const t=function(e){return vn(e)?"https://www.googleapis.com/auth/drive.file":Fn(e)?"https://www.googleapis.com/auth/devstorage.read_only":"https://www.googleapis.com/auth/userinfo.profile"}(e);return await _n(t)}throw Error("Authorization is required, but Google oAuth has not been initalized. Contact your site administrator for assistance.")}(n);t.retries=1,t.oauthToken=e;const r=await i.load(n,t);s(r)}catch(e){if(e.error){const t=e.error.startsWith("popup_blocked")?"Google login popup blocked by browser.":e.error;alert(t)}else g(e)}}}))}async _loadFileSlice(e,t){let i=t&&t.range?e.slice(t.range.start,t.range.start+t.range.size):e;const n=await i.arrayBuffer();return"arraybuffer"===t.responseType?n:Nn(n)}async _loadStringFromFile(e,t){const i=t.range?e.slice(t.range.start,t.range.start+t.range.size):e;return Nn(await i.arrayBuffer())}async _loadStringFromUrl(e,t){(t=t||{}).responseType="arraybuffer";return Nn(await this.load(e,t))}setOauthToken(e,t){this.oauth.setToken(e,t)}getOauthToken(e){const t=bn(e)?void 0:k(e).host;let i=this.oauth.getToken(t);if(i)return i;if(void 0===t){const e=En();if(e&&e.expires_at>Date.now())return e.access_token}}async getContentLength(e,t){(t=t||{}).method="HEAD",t.requestedHeaders=["content-length"];const i=(await this._loadURL(e,t))["content-length"];return i?Number.parseInt(i):0}};var Rn={color:1};Rn.parent=Rn,Rn.left=Rn,Rn.right=Rn;class Bn{constructor(){this.root=Rn}insert(e,t,i){var n=new Pn(new Hn(e,t,i));for(this.treeInsert(n),n.color=2;n!==this.root&&2===n.parent.color;)if(n.parent===n.parent.parent.left){let e=n.parent.parent.right;2===e.color?(n.parent.color=1,e.color=1,n.parent.parent.color=2,n=n.parent.parent):(n===n.parent.right&&(n=n.parent,Tn.call(this,n)),n.parent.color=1,n.parent.parent.color=2,zn.call(this,n.parent.parent))}else{let e=n.parent.parent.left;2===e.color?(n.parent.color=1,e.color=1,n.parent.parent.color=2,n=n.parent.parent):(n===n.parent.left&&(n=n.parent,zn.call(this,n)),n.parent.color=1,n.parent.parent.color=2,Tn.call(this,n.parent.parent))}this.root.color=1}findOverlapping(e,t){var i=new Hn(e,t,0);if(this.root===Rn)return[];var n=Dn.call(this,i,this.root,[]);return n.length>1&&n.sort((function(e,t){return e.low-t.low})),n}logIntervals(){!function e(t,i){for(var n="",r=0;r<i;r++)n+=" ";console.log(n+t.interval.low+" "+t.interval.high),i+=5,t.left!==Rn&&e(t.left,i);t.right!==Rn&&e(t.right,i)}(this.root,0)}mapIntervals(e){!function t(i){e(i.interval),i.left!==Rn&&t(i.left);i.right!==Rn&&t(i.right)}(this.root)}treeInsert(e){for(var t=this.root,i=Rn;t!==Rn;)i=t,t=e.interval.low<=t.interval.low?t.left:t.right;e.parent=i,i===Rn?(this.root=e,e.left=e.right=Rn):e.interval.low<=i.interval.low?i.left=e:i.right=e,Ln.call(this,e)}}function Dn(e,t,i){return t.interval.overlaps(e)&&i.push(t.interval),t.left!==Rn&&t.left.max>=e.low&&Dn.call(this,e,t.left,i),t.right!==Rn&&t.right.min<=e.high&&Dn.call(this,e,t.right,i),i}function Tn(e){var t=e.right;e.right=t.left,t.left!==Rn&&(t.left.parent=e),t.parent=e.parent,e.parent===Rn?this.root=t:e.parent.left===e?e.parent.left=t:e.parent.right=t,t.left=e,e.parent=t,Ln.call(this,e)}function zn(e){var t=e.left;e.left=t.right,t.right!==Rn&&(t.right.parent=e),t.parent=e.parent,e.parent===Rn?this.root=t:e.parent.right===e?e.parent.right=t:e.parent.left=t,t.right=e,e.parent=t,Ln.call(this,e)}function Ln(e){for(;e!==Rn;){var t=e.left.max>e.right.max?e.left.max:e.right.max,i=e.interval.high;e.max=t>i?t:i;var n=e.left.min<e.right.min?e.left.min:e.right.min,r=e.interval.low;e.min=n<r?n:r,e=e.parent}}class Hn{constructor(e,t,i){this.low=e,this.high=t,this.value=i}equals(e){return!!e&&(this===e||this.low===e.low&&this.high===e.high)}compareTo(e){return this.low<e.low?-1:this.low>e.low?1:this.high<e.high?-1:this.high>e.high?1:0}overlaps(e){return this.low<=e.high&&e.low<=this.high}}function Pn(e){this.parent=Rn,this.left=Rn,this.right=Rn,this.interval=e,this.color=2}class On{constructor(e,t,i){e=e||[],this.treeMap=this.buildTreeMap(e,t),this.range=i,this.count=e.length}containsRange(e){return void 0===this.range||this.range.contains(e.chr,e.start,e.end)}findFeatures(e){const t=[];for(let i of Object.values(this.allFeatures))for(let n of i)e(n)&&t.push(n);return t}queryFeatures(e,t,i){const n=this.treeMap[e];if(!n)return[];const r=n.findOverlapping(t,i);if(0===r.length)return[];{const n=[],s=this.allFeatures[e];if(s){for(let e of r){const r=e.value;for(let e=r.start;e<r.end;e++){let r=s[e];if(r.start>i)break;r.end>=t&&n.push(r)}}n.sort((function(e,t){return e.start-t.start}))}return n}}getAllFeatures(){return this.allFeatures}buildTreeMap(e,t){const i={},n=[];if(this.allFeatures={},e){for(let i of e){let e=i.chr;t&&(e=t.getChromosomeName(e));let r=this.allFeatures[e];r||(n.push(e),r=[],this.allFeatures[e]=r),r.push(i)}for(let e of n){const t=this.allFeatures[e];t.sort((function(e,t){return e.start===t.start?0:e.start>t.start?1:-1})),i[e]=Vn(t)}}return i}}function Vn(e){const t=new Bn,i=e.length,n=Math.max(10,Math.round(i/10));for(let r=0;r<i;r+=n){const s=Math.min(i,r+n),o=new qn(r,s),a=e[r].start;let c=a;for(let t=r;t<s;t++)c=Math.max(c,e[t].end);t.insert(a,c,o)}return t}class qn{constructor(e,t){this.start=e,this.end=t}}const Qn=function(e,t,i){if(e&&0!==e.length){const n=function(e){const t=new Bn,i=e.length,n=Math.max(10,Math.round(i/100));e.sort((function(e,t){return e.start===t.start?0:e.start>t.start?1:-1}));for(let r=0;r<i;r+=n){const s=Math.min(i,r+n),o=e.slice(r,s),a=o[0].start;let c=a;o.forEach((function(e){c=Math.max(c,e.end)})),t.insert(a,c,o)}return t}(e),r=n.findOverlapping(t,i);return 0===r.length?[]:(e=[],r.forEach((function(n){const r=n.value,s=r.length;for(let n=0;n<s;n++){const s=r[n];if(s.start>i)break;s.end>t&&e.push(s)}})),e.sort((function(e,t){return e.start-t.start})),e)}return[]};function Un(e){if(3===(e=e.replace(/^#/,"")).length&&(e=e.split("").map((e=>e+e)).join("")),6!==e.length)throw new Error("Invalid HEX color.");let t=parseInt(e,16);return`rgb(${t>>16&255}, ${t>>8&255}, ${255&t})`}const jn={licorice:"#000000",steel:"#6e6e6e",magnesium:"#b8b8b8",mercury:"#e8e8e8",cayenne:"#891100",mocha:"#894800",aspargus:"#888501",fern:"#458401",teal:"#008688",salmon:"#ff726e",tangerine:"#ff8802",cantaloupe:"#ffce6e",lemon:"#fffa03",lime:"#83f902",honeydew:"#cefa6e",ice:"#68fdff",aqua:"#008cff",blueberry:"#002eff",midnight:"#001888",grape:"#8931ff",lavender:"#d278ff",orchid:"#6e76ff",strawberry:"#ff2987",magenta:"#ff39ff",carnation:"#ff7fd3"},Gn={cantaloupe:{r:255,g:206,b:110},honeydew:{r:206,g:250,b:110},spindrift:{r:104,g:251,b:208},sky:{r:106,g:207,b:255},lavender:{r:210,g:120,b:255},carnation:{r:255,g:127,b:211},licorice:{r:0,g:0,b:0},snow:{r:255,g:255,b:255},salmon:{r:255,g:114,b:110},banana:{r:255,g:251,b:109},flora:{r:104,g:249,b:110},ice:{r:104,g:253,b:255},orchid:{r:110,g:118,b:255},bubblegum:{r:255,g:122,b:255},lead:{r:30,g:30,b:30},mercury:{r:232,g:232,b:232},tangerine:{r:255,g:136,b:2},lime:{r:131,g:249,b:2},sea_foam:{r:3,g:249,b:135},aqua:{r:0,g:140,b:255},grape:{r:137,g:49,b:255},strawberry:{r:255,g:41,b:135},tungsten:{r:58,g:58,b:58},silver:{r:208,g:208,b:208},maraschino:{r:255,g:33,b:1},lemon:{r:255,g:250,b:3},spring:{r:5,g:248,b:2},turquoise:{r:0,g:253,b:255},blueberry:{r:0,g:46,b:255},magenta:{r:255,g:57,b:255},iron:{r:84,g:84,b:83},magnesium:{r:184,g:184,b:184},mocha:{r:137,g:72,b:0},fern:{r:69,g:132,b:1},moss:{r:1,g:132,b:72},ocean:{r:0,g:74,b:136},eggplant:{r:73,g:26,b:136},maroon:{r:137,g:22,b:72},steel:{r:110,g:110,b:110},aluminum:{r:160,g:159,b:160},cayenne:{r:137,g:17,b:0},aspargus:{r:136,g:133,b:1},clover:{r:2,g:132,b:1},teal:{r:0,g:134,b:136},midnight:{r:0,g:24,b:136},plum:{r:137,g:30,b:136},tin:{r:135,g:134,b:135},nickel:{r:136,g:135,b:135}};function Wn(e){const{r:t,g:i,b:n}=Gn[e];return`rgb(${t},${i},${n})`}const $n={Set1:["rgb(228,26,28)","rgb(55,126,184)","rgb(77,175,74)","rgb(166,86,40)","rgb(152,78,163)","rgb(255,127,0)","rgb(247,129,191)","rgb(153,153,153)","rgb(255,255,51)"],Dark2:["rgb(27,158,119)","rgb(217,95,2)","rgb(117,112,179)","rgb(231,41,138)","rgb(102,166,30)","rgb(230,171,2)","rgb(166,118,29)","rgb(102,102,102)"],Set2:["rgb(102, 194,165)","rgb(252,141,98)","rgb(141,160,203)","rgb(231,138,195)","rgb(166,216,84)","rgb(255,217,47)","rgb(229,196,148)","rgb(179,179,179)"],Set3:["rgb(141,211,199)","rgb(255,255,179)","rgb(190,186,218)","rgb(251,128,114)","rgb(128,177,211)","rgb(253,180,98)","rgb(179,222,105)","rgb(252,205,229)","rgb(217,217,217)","rgb(188,128,189)","rgb(204,235,197)","rgb(255,237,111)"],Pastel1:["rgb(251,180,174)","rgb(179,205,227)","rgb(204,235,197)","rgb(222,203,228)","rgb(254,217,166)","rgb(255,255,204)","rgb(229,216,189)","rgb(253,218,236)"],Pastel2:["rgb(173,226,207)","rgb(253,205,172)","rgb(203,213,232)","rgb(244,202,228)","rgb(230,245,201)","rgb(255,242,174)","rgb(243,225,206)"],Accent:["rgb(127,201,127)","rgb(190,174,212)","rgb(253,192,134)","rgb(255,255,153)","rgb(56,108,176)","rgb(240,2,127)","rgb(191,91,23)"]};class Kn{constructor(e){this.colors=$n[e],Array.isArray(this.colors)||(this.colors=[]),this.colorTable=new Map,this.nextIdx=0,this.colorGenerator=new Xn}getColor(e){return this.colorTable.has(e)||(this.nextIdx<this.colors.length?this.colorTable.set(e,this.colors[this.nextIdx]):this.colorTable.set(e,this.colorGenerator.get()),this.nextIdx++),this.colorTable.get(e)}}class Yn{constructor(e){this.colorTable=e||{},this.nextIdx=0,this.colorGenerator=new Xn}getColor(e){if(!this.colorTable.hasOwnProperty(e)){if(this.colorTable.hasOwnProperty("*"))return this.colorTable["*"];this.colorTable[e]=this.colorGenerator.get()}return this.colorTable[e]}}function Xn(){this.hue=Math.random(),this.goldenRatio=.618033988749895,this.hexwidth=2}function Zn(e,t,i,n){return`rgba(${e=cn(e,0,255)}, ${t=cn(t,0,255)}, ${i=cn(i,0,255)}, ${n=cn(n,0,1)})`}function Jn(e,t){e=cn(e,0,255),t=cn(t,0,255);return`rgb(${Math.round(Math.random()*(t-e)+e).toString(10)},${Math.round(Math.random()*(t-e)+e).toString(10)},${Math.round(Math.random()*(t-e)+e).toString(10)})`}function er(e){if(e.startsWith("rgb(")){const[t,i]=e.split("("),[n]=i.split(")");return n.split(",").map((e=>parseInt(e)))}}Xn.prototype.hsvToRgb=function(e,t,i){var n=Math.floor(6*e),r=6*e-n,s=i*(1-t),o=i*(1-r*t),a=i*(1-(1-r)*t),c=255,l=255,h=255;switch(n){case 0:c=i,l=a,h=s;break;case 1:c=o,l=i,h=s;break;case 2:c=s,l=i,h=a;break;case 3:c=s,l=o,h=i;break;case 4:c=a,l=s,h=i;break;case 5:c=i,l=s,h=o}return[Math.floor(256*c),Math.floor(256*l),Math.floor(256*h)]},Xn.prototype.padHex=function(e){return e.length>this.hexwidth?e:new Array(this.hexwidth-e.length+1).join("0")+e},Xn.prototype.get=function(e,t){this.hue+=this.goldenRatio,this.hue%=1,"number"!=typeof e&&(e=.5),"number"!=typeof t&&(t=.95);var i=this.hsvToRgb(this.hue,e,t);return"#"+this.padHex(i[0].toString(16))+this.padHex(i[1].toString(16))+this.padHex(i[2].toString(16))},new Xn;function tr(e,t,i){if(i<.005)return e;if(i>.995)return t;{let n,r,s,o,a,c;i<.5?(i/=.5,[n,r,s]=er(e),[o,a,c]=er(Wn("snow"))):(i=(i-.5)/.5,[n,r,s]=er(Wn("snow")),[o,a,c]=er(t));const[l,h,d]=[Math.floor(an(n,o,i)),Math.floor(an(r,a,i)),Math.floor(an(s,c,i))];return function(e,t,i){return`rgb(${e=cn(e,0,255)}, ${t=cn(t,0,255)}, ${i=cn(i,0,255)})`}(l,h,d)}}const ir=new Set(["bedtype","alignment","annotation","variant","wig","interact","shoebox"]),nr=new Set(["alignment","annotation","variant","eqtl","qtl","snp","shoebox","wig"]),rr=new Set(["sequence","ruler","ideogram"]),sr={};class or{constructor(e){this.browser=e,this.initialize()}initialize(){const e=new c;e.add("...");const t={parent:this.browser.root,content:e};this.dialog=new w(t),this.browser.root.appendChild(this.dialog.elem),n(this.dialog.elem)}trackMenuItemList(e){const t=[];return"sequence"!==e.track.config.type&&t.push(function(){const e=document.createElement("div");function t(e){const t=()=>{if(void 0!==this.browser.inputDialog.value){const e=parseInt(this.browser.inputDialog.value,10);if(e>0){const t=[];this.trackView.track.selected?t.push(...this.trackView.browser.getSelectedTrackViews().map((({track:e})=>e))):t.push(this);for(const i of t)i.trackView.autoHeight=!1,void 0!==i.minHeight&&i.minHeight>e&&(i.minHeight=e),void 0!==i.maxHeight&&i.maxHeight<e&&(i.minHeight=e),i.trackView.setTrackHeight(e,!0),i.trackView.checkContentHeight(),i.trackView.repaintViews()}}},i={label:"Track Height",value:this.height,callback:t};this.browser.inputDialog.present(i,e)}return e.textContent="Set track height",{element:e,dialog:t}}()),!0===function(e){const t=e.browser.getSelectedTrackViews();return t&&t.length>1&&new Set(t).has(e)}(e)?t.push(...this.multiSelectMenuItems(e)):("sequence"!==e.track.config.type&&t.push(function(){const e=document.createElement("div");function t(e){const t=()=>{let e=this.browser.inputDialog.value;e=""===e||void 0===e?"untitled":e.trim(),this.name=e},i={label:"Track Name",value:hr(this)||"unnamed",callback:t};this.browser.inputDialog.present(i,e)}return e.textContent="Set track name",{element:e,click:t}}()),t.push(...this.defaultMenuItems(e))),!1!==e.track.removable&&(t.push("<hr/>"),t.push(function(e){const t=e.track.selected?"Remove tracks":"Remove track",i=document.createElement("div");function n(e){this.trackView.browser._removeTrack(this)}return i.textContent=t,{element:i,click:n,menuItemType:"removeTrack"}}(e))),t}defaultMenuItems(e){const t=[];return dr(e.track)&&(t.push("<hr/>"),t.push(ar({trackView:e,label:"Set track color",option:"color"})),t.push(cr({trackView:e,label:"Unset track color"})),"wig"!==e.track.config.type&&"annotation"!==e.track.config.type||(t.push(ar({trackView:e,label:"Set alt color",option:"altColor"})),t.push(lr({trackView:e,label:"Unset alt color"})))),e.track.menuItemList&&t.push(...e.track.menuItemList()),function(e){const t=e.track;return t&&t.config&&void 0!==t.config.visibilityWindow||t&&nr.has(t.type)}(e)&&(t.push("<hr/>"),t.push(function(e){const t=document.createElement("div");function i(t){const i=()=>{let e=this.browser.inputDialog.value;e=""===e||void 0===e?-1:e.trim(),this.visibilityWindow=Number.parseInt(e),this.config.visibilityWindow=Number.parseInt(e),this.trackView.updateViews()},n={label:"wig"===e?"Visibility window (bp). Enter 0 for whole chromosome, -1 for whole genome.":"Visibility window (bp). Enter 0 for whole chromosome.",value:this.visibilityWindow,callback:i};this.browser.inputDialog.present(n,t)}return t.textContent="Set visibility window",{element:t,click:i}}(e.track.type))),t}multiSelectMenuItems(e){const t=[],i=e.browser.getSelectedTrackViews();var n;return!0===(n=i.map((({track:e})=>e.type)),1===[...new Set(n)].length)?(t.push(...this.defaultMenuItems(e)),"wig"===e.track.type&&(t.push("<hr/>"),t.push(function(){const e=document.createElement("div");function t(e){const t=$n.Dark2,i=Math.floor(Math.random()*t.length),n=`auto-scale-group-${o()}`;sr[n]=t[i];const r=this.browser.getSelectedTrackViews();for(const{track:e}of r)e.autoscaleGroup=n;this.browser.updateViews()}return e.textContent="Group autoscale",{element:e,doAllMultiSelectedTracks:!0,click:t}}()))):dr(e.track)&&(t.push("<hr/>"),t.push(ar({trackView:e,label:"Set track color",option:"color"})),t.push(cr({trackView:e,label:"Unset track color"})),"wig"!==e.track.config.type&&"annotation"!==e.track.config.type||(t.push(ar({trackView:e,label:"Set alt color",option:"altColor"})),t.push(lr({trackView:e,label:"Unset alt color"})))),t}}function ar({trackView:e,label:t,option:i}){const n=document.createElement("div");n.textContent=t;return{element:n,click:t=>{e.presentColorPicker(i,t)}}}function cr({trackView:e,label:t}){const i=document.createElement("div");return i.textContent=t,{element:i,click:()=>{e.track.color=e.track._initialColor||e.track.constructor.defaultColor,e.repaintViews()}}}function lr({trackView:e,label:t}){const i=document.createElement("div");return i.textContent=t,{element:i,click:()=>{e.track.altColor=e.track._initialAltColor||e.track.constructor.defaultColor,e.repaintViews()}}}function hr(e){return e.name}function dr(e){return void 0===e.type||ir.has(e.type)&&"heatmap"!==e.graphType}class ur{constructor(e,t){this.browser=e,this.container=document.createElement("div"),this.container.className="igv-generic-dialog-container",t.appendChild(this.container);const i=document.createElement("div");i.className="igv-generic-dialog-header",this.container.appendChild(i),u(i,(()=>{this.minimumInput.value="",this.maximumInput.value="",this.hide()})),this.minimum=document.createElement("div"),this.minimum.className="igv-generic-dialog-label-input",this.container.appendChild(this.minimum);const n=document.createElement("div");n.textContent="Minimum",this.minimum.appendChild(n),this.minimumInput=document.createElement("input"),this.minimum.appendChild(this.minimumInput),this.maximum=document.createElement("div"),this.maximum.className="igv-generic-dialog-label-input",this.container.appendChild(this.maximum);const r=document.createElement("div");r.textContent="Maximum",this.maximum.appendChild(r),this.maximumInput=document.createElement("input"),this.maximum.appendChild(this.maximumInput);const s=document.createElement("div");s.className="igv-generic-dialog-ok-cancel",this.container.appendChild(s),this.okButton=document.createElement("div"),this.okButton.textContent="OK",s.appendChild(this.okButton),this.cancelButton=document.createElement("div"),this.cancelButton.textContent="Cancel",s.appendChild(this.cancelButton),this.cancelButton.addEventListener("click",(()=>{this.minimumInput.value="",this.maximumInput.value="",this.hide()})),p(this.container,i),this.container.style.display="none"}configure(e){let t;if(Array.isArray(e)){t={min:Number.MAX_SAFE_INTEGER,max:-Number.MAX_SAFE_INTEGER};for(const i of e)i.track.dataRange&&(t.min=Math.min(i.track.dataRange.min,t.min),t.max=Math.max(i.track.dataRange.max,t.max))}else t=e.track.dataRange;t&&(this.minimumInput.value=t.min,this.maximumInput.value=t.max),this.minimumInput.onkeyup=null,this.minimumInput.addEventListener("keyup",(t=>{13===t.keyCode&&this.processResults(e),t.stopImmediatePropagation()})),this.maximumInput.onkeyup=null,this.maximumInput.addEventListener("keyup",(t=>{13===t.keyCode&&(t.stopImmediatePropagation(),this.processResults(e))})),this.okButton.onclick=null,this.okButton.addEventListener("click",(()=>{this.processResults(e)}))}processResults(e){const t=this.minimumInput.value.trim(),i=this.maximumInput.value.trim();if(""!==t&&""!==i){const n=Number(t),r=Number(i);if(isNaN(n)||isNaN(r))this.browser.alert.present(new Error("Must input numeric values"),void 0);else{const t=Array.isArray(e)?e:[e];for(const e of t)e.track.setDataRange({min:n,max:r})}this.minimumInput.value="",this.maximumInput.value=""}this.hide()}hide(){this.container.style.top="20%",this.container.style.left="75%",this.container.style.display="none"}present(e){const{top:t}=e.currentTarget.parentElement.getBoundingClientRect();this.container.style.top=`${t}px`,this.container.style.display="flex"}}const fr={configureHighDPICanvas:function(e,t,i){const n=window.devicePixelRatio;e.canvas.style.width=`${t}px`,e.canvas.width=Math.floor(n*t),e.canvas.style.height=`${i}px`,e.canvas.height=Math.floor(n*i),e.scale(n,n)},setProperties:function(e,t){for(var i in t)if(t.hasOwnProperty(i)){var n=t[i];e[i]=n}},strokeLine:function(e,t,i,n,r,s){t=Math.floor(t)+.5,i=Math.floor(i)+.5,n=Math.floor(n)+.5,r=Math.floor(r)+.5,s&&(e.save(),fr.setProperties(e,s)),e.beginPath(),e.moveTo(t,i),e.lineTo(n,r),e.stroke(),s&&e.restore()},fillRect:function(e,t,i,n,r,s){s&&(e.save(),fr.setProperties(e,s)),e.fillRect(t,i,n,r),s&&e.restore()},fillPolygon:function(e,t,i,n){n&&(e.save(),fr.setProperties(e,n)),pr(e,t,i),e.fill(),n&&e.restore()},strokePolygon:function(e,t,i,n){n&&(e.save(),fr.setProperties(e,n)),pr(e,t,i),e.stroke(),n&&e.restore()},fillText:function(e,t,i,n,r,s){if((r||s)&&e.save(),r&&fr.setProperties(e,r),s){for(var o in e.translate(i,n),s){var a=s[o];"translate"===o&&e.translate(a.x,a.y),"rotate"===o&&e.rotate(a.angle*Math.PI/180)}e.fillText(t,0,0)}else e.fillText(t,i,n);(r||s)&&e.restore()},strokeText:function(e,t,i,n,r,s){if((r||s)&&e.save(),r&&fr.setProperties(e,r),s){for(var o in e.translate(i,n),s){var a=s[o];"translate"===o&&e.translate(a.x,a.y),"rotate"===o&&e.rotate(a.angle*Math.PI/180)}e.strokeText(t,0,0)}else e.strokeText(t,i,n);(r||s)&&e.restore()},strokeCircle:function(e,t,i,n,r){r&&(e.save(),fr.setProperties(e,r)),e.beginPath(),e.arc(t,i,n,0,2*Math.PI),e.stroke(),r&&e.restore()},fillCircle:function(e,t,i,n,r){r&&(e.save(),fr.setProperties(e,r)),e.beginPath(),e.arc(t,i,n,0,2*Math.PI),e.fill(),r&&e.restore()},drawArrowhead:function(e,t,i,n,r){e.save(),n||(n=5),r&&(e.lineWidth=r),e.beginPath(),e.moveTo(t,i-n/2),e.lineTo(t,i+n/2),e.lineTo(t+n,i),e.lineTo(t,i-n/2),e.closePath(),e.fill(),e.restore()},dashedLine:function(e,t,i,n,r,s,o={}){void 0===s&&(s=2),e.setLineDash([s,s]),fr.strokeLine(e,t,i,n,r,o),e.setLineDash([])},roundRect:function(e,t,i,n,r,s,o,a){void 0===a&&(a=!0),void 0===s&&(s=5),e.beginPath(),e.moveTo(t+s,i),e.lineTo(t+n-s,i),e.quadraticCurveTo(t+n,i,t+n,i+s),e.lineTo(t+n,i+r-s),e.quadraticCurveTo(t+n,i+r,t+n-s,i+r),e.lineTo(t+s,i+r),e.quadraticCurveTo(t,i+r,t,i+r-s),e.lineTo(t,i+s),e.quadraticCurveTo(t,i,t+s,i),e.closePath(),a&&e.stroke(),o&&e.fill()},polygon:function(e,t,i,n,r){void 0===r&&(r=!0),e.beginPath();var s=t.length;e.moveTo(t[0],i[0]);for(var o=1;o<s;o++)e.lineTo(t[o],i[o]);e.closePath(),r&&e.stroke(),n&&e.fill()},drawRandomColorVerticalLines:e=>{for(let t=0;t<e.canvas.width;t++)fr.fillRect(e,t,0,1,e.canvas.height,{fillStyle:Jn(100,250)})},labelTransformWithContext:(e,t)=>{e.translate(t,0),e.scale(-1,1),e.translate(-t,0)}};function pr(e,t,i){var n,r=t.length;for(e.beginPath(),e.moveTo(t[0],i[0]),n=1;n<r;n++)e.lineTo(t[n],i[n]);e.closePath()}
|
|
2
2
|
/*! @license DOMPurify 3.2.4 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.2.4/LICENSE */const{entries:gr,setPrototypeOf:mr,isFrozen:wr,getPrototypeOf:br,getOwnPropertyDescriptor:Fr}=Object;let{freeze:vr,seal:yr,create:Ar}=Object,{apply:Cr,construct:_r}="undefined"!=typeof Reflect&&Reflect;vr||(vr=function(e){return e}),yr||(yr=function(e){return e}),Cr||(Cr=function(e,t,i){return e.apply(t,i)}),_r||(_r=function(e,t){return new e(...t)});const xr=Or(Array.prototype.forEach),kr=Or(Array.prototype.lastIndexOf),Ir=Or(Array.prototype.pop),Sr=Or(Array.prototype.push),Er=Or(Array.prototype.splice),Nr=Or(String.prototype.toLowerCase),Mr=Or(String.prototype.toString),Rr=Or(String.prototype.match),Br=Or(String.prototype.replace),Dr=Or(String.prototype.indexOf),Tr=Or(String.prototype.trim),zr=Or(Object.prototype.hasOwnProperty),Lr=Or(RegExp.prototype.test),Hr=(Pr=TypeError,function(){for(var e=arguments.length,t=new Array(e),i=0;i<e;i++)t[i]=arguments[i];return _r(Pr,t)});var Pr;function Or(e){return function(t){for(var i=arguments.length,n=new Array(i>1?i-1:0),r=1;r<i;r++)n[r-1]=arguments[r];return Cr(e,t,n)}}function Vr(e,t){let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:Nr;mr&&mr(e,null);let n=t.length;for(;n--;){let r=t[n];if("string"==typeof r){const e=i(r);e!==r&&(wr(t)||(t[n]=e),r=e)}e[r]=!0}return e}function qr(e){for(let t=0;t<e.length;t++){zr(e,t)||(e[t]=null)}return e}function Qr(e){const t=Ar(null);for(const[i,n]of gr(e)){zr(e,i)&&(Array.isArray(n)?t[i]=qr(n):n&&"object"==typeof n&&n.constructor===Object?t[i]=Qr(n):t[i]=n)}return t}function Ur(e,t){for(;null!==e;){const i=Fr(e,t);if(i){if(i.get)return Or(i.get);if("function"==typeof i.value)return Or(i.value)}e=br(e)}return function(){return null}}const jr=vr(["a","abbr","acronym","address","area","article","aside","audio","b","bdi","bdo","big","blink","blockquote","body","br","button","canvas","caption","center","cite","code","col","colgroup","content","data","datalist","dd","decorator","del","details","dfn","dialog","dir","div","dl","dt","element","em","fieldset","figcaption","figure","font","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","img","input","ins","kbd","label","legend","li","main","map","mark","marquee","menu","menuitem","meter","nav","nobr","ol","optgroup","option","output","p","picture","pre","progress","q","rp","rt","ruby","s","samp","section","select","shadow","small","source","spacer","span","strike","strong","style","sub","summary","sup","table","tbody","td","template","textarea","tfoot","th","thead","time","tr","track","tt","u","ul","var","video","wbr"]),Gr=vr(["svg","a","altglyph","altglyphdef","altglyphitem","animatecolor","animatemotion","animatetransform","circle","clippath","defs","desc","ellipse","filter","font","g","glyph","glyphref","hkern","image","line","lineargradient","marker","mask","metadata","mpath","path","pattern","polygon","polyline","radialgradient","rect","stop","style","switch","symbol","text","textpath","title","tref","tspan","view","vkern"]),Wr=vr(["feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feDropShadow","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence"]),$r=vr(["animate","color-profile","cursor","discard","font-face","font-face-format","font-face-name","font-face-src","font-face-uri","foreignobject","hatch","hatchpath","mesh","meshgradient","meshpatch","meshrow","missing-glyph","script","set","solidcolor","unknown","use"]),Kr=vr(["math","menclose","merror","mfenced","mfrac","mglyph","mi","mlabeledtr","mmultiscripts","mn","mo","mover","mpadded","mphantom","mroot","mrow","ms","mspace","msqrt","mstyle","msub","msup","msubsup","mtable","mtd","mtext","mtr","munder","munderover","mprescripts"]),Yr=vr(["maction","maligngroup","malignmark","mlongdiv","mscarries","mscarry","msgroup","mstack","msline","msrow","semantics","annotation","annotation-xml","mprescripts","none"]),Xr=vr(["#text"]),Zr=vr(["accept","action","align","alt","autocapitalize","autocomplete","autopictureinpicture","autoplay","background","bgcolor","border","capture","cellpadding","cellspacing","checked","cite","class","clear","color","cols","colspan","controls","controlslist","coords","crossorigin","datetime","decoding","default","dir","disabled","disablepictureinpicture","disableremoteplayback","download","draggable","enctype","enterkeyhint","face","for","headers","height","hidden","high","href","hreflang","id","inputmode","integrity","ismap","kind","label","lang","list","loading","loop","low","max","maxlength","media","method","min","minlength","multiple","muted","name","nonce","noshade","novalidate","nowrap","open","optimum","pattern","placeholder","playsinline","popover","popovertarget","popovertargetaction","poster","preload","pubdate","radiogroup","readonly","rel","required","rev","reversed","role","rows","rowspan","spellcheck","scope","selected","shape","size","sizes","span","srclang","start","src","srcset","step","style","summary","tabindex","title","translate","type","usemap","valign","value","width","wrap","xmlns","slot"]),Jr=vr(["accent-height","accumulate","additive","alignment-baseline","amplitude","ascent","attributename","attributetype","azimuth","basefrequency","baseline-shift","begin","bias","by","class","clip","clippathunits","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","cx","cy","d","dx","dy","diffuseconstant","direction","display","divisor","dur","edgemode","elevation","end","exponent","fill","fill-opacity","fill-rule","filter","filterunits","flood-color","flood-opacity","font-family","font-size","font-size-adjust","font-stretch","font-style","font-variant","font-weight","fx","fy","g1","g2","glyph-name","glyphref","gradientunits","gradienttransform","height","href","id","image-rendering","in","in2","intercept","k","k1","k2","k3","k4","kerning","keypoints","keysplines","keytimes","lang","lengthadjust","letter-spacing","kernelmatrix","kernelunitlength","lighting-color","local","marker-end","marker-mid","marker-start","markerheight","markerunits","markerwidth","maskcontentunits","maskunits","max","mask","media","method","mode","min","name","numoctaves","offset","operator","opacity","order","orient","orientation","origin","overflow","paint-order","path","pathlength","patterncontentunits","patterntransform","patternunits","points","preservealpha","preserveaspectratio","primitiveunits","r","rx","ry","radius","refx","refy","repeatcount","repeatdur","restart","result","rotate","scale","seed","shape-rendering","slope","specularconstant","specularexponent","spreadmethod","startoffset","stddeviation","stitchtiles","stop-color","stop-opacity","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke","stroke-width","style","surfacescale","systemlanguage","tabindex","tablevalues","targetx","targety","transform","transform-origin","text-anchor","text-decoration","text-rendering","textlength","type","u1","u2","unicode","values","viewbox","visibility","version","vert-adv-y","vert-origin-x","vert-origin-y","width","word-spacing","wrap","writing-mode","xchannelselector","ychannelselector","x","x1","x2","xmlns","y","y1","y2","z","zoomandpan"]),es=vr(["accent","accentunder","align","bevelled","close","columnsalign","columnlines","columnspan","denomalign","depth","dir","display","displaystyle","encoding","fence","frame","height","href","id","largeop","length","linethickness","lspace","lquote","mathbackground","mathcolor","mathsize","mathvariant","maxsize","minsize","movablelimits","notation","numalign","open","rowalign","rowlines","rowspacing","rowspan","rspace","rquote","scriptlevel","scriptminsize","scriptsizemultiplier","selection","separator","separators","stretchy","subscriptshift","supscriptshift","symmetric","voffset","width","xmlns"]),ts=vr(["xlink:href","xml:id","xlink:title","xml:space","xmlns:xlink"]),is=yr(/\{\{[\w\W]*|[\w\W]*\}\}/gm),ns=yr(/<%[\w\W]*|[\w\W]*%>/gm),rs=yr(/\$\{[\w\W]*/gm),ss=yr(/^data-[\-\w.\u00B7-\uFFFF]+$/),os=yr(/^aria-[\-\w]+$/),as=yr(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),cs=yr(/^(?:\w+script|data):/i),ls=yr(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),hs=yr(/^html$/i),ds=yr(/^[a-z][.\w]*(-[.\w]+)+$/i);var us=Object.freeze({__proto__:null,ARIA_ATTR:os,ATTR_WHITESPACE:ls,CUSTOM_ELEMENT:ds,DATA_ATTR:ss,DOCTYPE_NAME:hs,ERB_EXPR:ns,IS_ALLOWED_URI:as,IS_SCRIPT_OR_DATA:cs,MUSTACHE_EXPR:is,TMPLIT_EXPR:rs});const fs=1,ps=3,gs=7,ms=8,ws=9,bs=function(){return"undefined"==typeof window?null:window};var Fs=function e(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:bs();const i=t=>e(t);if(i.version="3.2.4",i.removed=[],!t||!t.document||t.document.nodeType!==ws||!t.Element)return i.isSupported=!1,i;let{document:n}=t;const r=n,s=r.currentScript,{DocumentFragment:o,HTMLTemplateElement:a,Node:c,Element:l,NodeFilter:h,NamedNodeMap:d=t.NamedNodeMap||t.MozNamedAttrMap,HTMLFormElement:u,DOMParser:f,trustedTypes:p}=t,g=l.prototype,m=Ur(g,"cloneNode"),w=Ur(g,"remove"),b=Ur(g,"nextSibling"),F=Ur(g,"childNodes"),v=Ur(g,"parentNode");if("function"==typeof a){const e=n.createElement("template");e.content&&e.content.ownerDocument&&(n=e.content.ownerDocument)}let y,A="";const{implementation:C,createNodeIterator:_,createDocumentFragment:x,getElementsByTagName:k}=n,{importNode:I}=r;let S={afterSanitizeAttributes:[],afterSanitizeElements:[],afterSanitizeShadowDOM:[],beforeSanitizeAttributes:[],beforeSanitizeElements:[],beforeSanitizeShadowDOM:[],uponSanitizeAttribute:[],uponSanitizeElement:[],uponSanitizeShadowNode:[]};i.isSupported="function"==typeof gr&&"function"==typeof v&&C&&void 0!==C.createHTMLDocument;const{MUSTACHE_EXPR:E,ERB_EXPR:N,TMPLIT_EXPR:M,DATA_ATTR:R,ARIA_ATTR:B,IS_SCRIPT_OR_DATA:D,ATTR_WHITESPACE:T,CUSTOM_ELEMENT:z}=us;let{IS_ALLOWED_URI:L}=us,H=null;const P=Vr({},[...jr,...Gr,...Wr,...Kr,...Xr]);let O=null;const V=Vr({},[...Zr,...Jr,...es,...ts]);let q=Object.seal(Ar(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),Q=null,U=null,j=!0,G=!0,W=!1,$=!0,K=!1,Y=!0,X=!1,Z=!1,J=!1,ee=!1,te=!1,ie=!1,ne=!0,re=!1,se=!0,oe=!1,ae={},ce=null;const le=Vr({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","style","svg","template","thead","title","video","xmp"]);let he=null;const de=Vr({},["audio","video","img","source","image","track"]);let ue=null;const fe=Vr({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),pe="http://www.w3.org/1998/Math/MathML",ge="http://www.w3.org/2000/svg",me="http://www.w3.org/1999/xhtml";let we=me,be=!1,Fe=null;const ve=Vr({},[pe,ge,me],Mr);let ye=Vr({},["mi","mo","mn","ms","mtext"]),Ae=Vr({},["annotation-xml"]);const Ce=Vr({},["title","style","font","a","script"]);let _e=null;const xe=["application/xhtml+xml","text/html"];let ke=null,Ie=null;const Se=n.createElement("form"),Ee=function(e){return e instanceof RegExp||e instanceof Function},Ne=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(!Ie||Ie!==e){if(e&&"object"==typeof e||(e={}),e=Qr(e),_e=-1===xe.indexOf(e.PARSER_MEDIA_TYPE)?"text/html":e.PARSER_MEDIA_TYPE,ke="application/xhtml+xml"===_e?Mr:Nr,H=zr(e,"ALLOWED_TAGS")?Vr({},e.ALLOWED_TAGS,ke):P,O=zr(e,"ALLOWED_ATTR")?Vr({},e.ALLOWED_ATTR,ke):V,Fe=zr(e,"ALLOWED_NAMESPACES")?Vr({},e.ALLOWED_NAMESPACES,Mr):ve,ue=zr(e,"ADD_URI_SAFE_ATTR")?Vr(Qr(fe),e.ADD_URI_SAFE_ATTR,ke):fe,he=zr(e,"ADD_DATA_URI_TAGS")?Vr(Qr(de),e.ADD_DATA_URI_TAGS,ke):de,ce=zr(e,"FORBID_CONTENTS")?Vr({},e.FORBID_CONTENTS,ke):le,Q=zr(e,"FORBID_TAGS")?Vr({},e.FORBID_TAGS,ke):{},U=zr(e,"FORBID_ATTR")?Vr({},e.FORBID_ATTR,ke):{},ae=!!zr(e,"USE_PROFILES")&&e.USE_PROFILES,j=!1!==e.ALLOW_ARIA_ATTR,G=!1!==e.ALLOW_DATA_ATTR,W=e.ALLOW_UNKNOWN_PROTOCOLS||!1,$=!1!==e.ALLOW_SELF_CLOSE_IN_ATTR,K=e.SAFE_FOR_TEMPLATES||!1,Y=!1!==e.SAFE_FOR_XML,X=e.WHOLE_DOCUMENT||!1,ee=e.RETURN_DOM||!1,te=e.RETURN_DOM_FRAGMENT||!1,ie=e.RETURN_TRUSTED_TYPE||!1,J=e.FORCE_BODY||!1,ne=!1!==e.SANITIZE_DOM,re=e.SANITIZE_NAMED_PROPS||!1,se=!1!==e.KEEP_CONTENT,oe=e.IN_PLACE||!1,L=e.ALLOWED_URI_REGEXP||as,we=e.NAMESPACE||me,ye=e.MATHML_TEXT_INTEGRATION_POINTS||ye,Ae=e.HTML_INTEGRATION_POINTS||Ae,q=e.CUSTOM_ELEMENT_HANDLING||{},e.CUSTOM_ELEMENT_HANDLING&&Ee(e.CUSTOM_ELEMENT_HANDLING.tagNameCheck)&&(q.tagNameCheck=e.CUSTOM_ELEMENT_HANDLING.tagNameCheck),e.CUSTOM_ELEMENT_HANDLING&&Ee(e.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)&&(q.attributeNameCheck=e.CUSTOM_ELEMENT_HANDLING.attributeNameCheck),e.CUSTOM_ELEMENT_HANDLING&&"boolean"==typeof e.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements&&(q.allowCustomizedBuiltInElements=e.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements),K&&(G=!1),te&&(ee=!0),ae&&(H=Vr({},Xr),O=[],!0===ae.html&&(Vr(H,jr),Vr(O,Zr)),!0===ae.svg&&(Vr(H,Gr),Vr(O,Jr),Vr(O,ts)),!0===ae.svgFilters&&(Vr(H,Wr),Vr(O,Jr),Vr(O,ts)),!0===ae.mathMl&&(Vr(H,Kr),Vr(O,es),Vr(O,ts))),e.ADD_TAGS&&(H===P&&(H=Qr(H)),Vr(H,e.ADD_TAGS,ke)),e.ADD_ATTR&&(O===V&&(O=Qr(O)),Vr(O,e.ADD_ATTR,ke)),e.ADD_URI_SAFE_ATTR&&Vr(ue,e.ADD_URI_SAFE_ATTR,ke),e.FORBID_CONTENTS&&(ce===le&&(ce=Qr(ce)),Vr(ce,e.FORBID_CONTENTS,ke)),se&&(H["#text"]=!0),X&&Vr(H,["html","head","body"]),H.table&&(Vr(H,["tbody"]),delete Q.tbody),e.TRUSTED_TYPES_POLICY){if("function"!=typeof e.TRUSTED_TYPES_POLICY.createHTML)throw Hr('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.');if("function"!=typeof e.TRUSTED_TYPES_POLICY.createScriptURL)throw Hr('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.');y=e.TRUSTED_TYPES_POLICY,A=y.createHTML("")}else void 0===y&&(y=function(e,t){if("object"!=typeof e||"function"!=typeof e.createPolicy)return null;let i=null;const n="data-tt-policy-suffix";t&&t.hasAttribute(n)&&(i=t.getAttribute(n));const r="dompurify"+(i?"#"+i:"");try{return e.createPolicy(r,{createHTML:e=>e,createScriptURL:e=>e})}catch(e){return console.warn("TrustedTypes policy "+r+" could not be created."),null}}(p,s)),null!==y&&"string"==typeof A&&(A=y.createHTML(""));vr&&vr(e),Ie=e}},Me=Vr({},[...Gr,...Wr,...$r]),Re=Vr({},[...Kr,...Yr]),Be=function(e){Sr(i.removed,{element:e});try{v(e).removeChild(e)}catch(t){w(e)}},De=function(e,t){try{Sr(i.removed,{attribute:t.getAttributeNode(e),from:t})}catch(e){Sr(i.removed,{attribute:null,from:t})}if(t.removeAttribute(e),"is"===e)if(ee||te)try{Be(t)}catch(e){}else try{t.setAttribute(e,"")}catch(e){}},Te=function(e){let t=null,i=null;if(J)e="<remove></remove>"+e;else{const t=Rr(e,/^[\r\n\t ]+/);i=t&&t[0]}"application/xhtml+xml"===_e&&we===me&&(e='<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body>'+e+"</body></html>");const r=y?y.createHTML(e):e;if(we===me)try{t=(new f).parseFromString(r,_e)}catch(e){}if(!t||!t.documentElement){t=C.createDocument(we,"template",null);try{t.documentElement.innerHTML=be?A:r}catch(e){}}const s=t.body||t.documentElement;return e&&i&&s.insertBefore(n.createTextNode(i),s.childNodes[0]||null),we===me?k.call(t,X?"html":"body")[0]:X?t.documentElement:s},ze=function(e){return _.call(e.ownerDocument||e,e,h.SHOW_ELEMENT|h.SHOW_COMMENT|h.SHOW_TEXT|h.SHOW_PROCESSING_INSTRUCTION|h.SHOW_CDATA_SECTION,null)},Le=function(e){return e instanceof u&&("string"!=typeof e.nodeName||"string"!=typeof e.textContent||"function"!=typeof e.removeChild||!(e.attributes instanceof d)||"function"!=typeof e.removeAttribute||"function"!=typeof e.setAttribute||"string"!=typeof e.namespaceURI||"function"!=typeof e.insertBefore||"function"!=typeof e.hasChildNodes)},He=function(e){return"function"==typeof c&&e instanceof c};function Pe(e,t,n){xr(e,(e=>{e.call(i,t,n,Ie)}))}const Oe=function(e){let t=null;if(Pe(S.beforeSanitizeElements,e,null),Le(e))return Be(e),!0;const n=ke(e.nodeName);if(Pe(S.uponSanitizeElement,e,{tagName:n,allowedTags:H}),e.hasChildNodes()&&!He(e.firstElementChild)&&Lr(/<[/\w]/g,e.innerHTML)&&Lr(/<[/\w]/g,e.textContent))return Be(e),!0;if(e.nodeType===gs)return Be(e),!0;if(Y&&e.nodeType===ms&&Lr(/<[/\w]/g,e.data))return Be(e),!0;if(!H[n]||Q[n]){if(!Q[n]&&qe(n)){if(q.tagNameCheck instanceof RegExp&&Lr(q.tagNameCheck,n))return!1;if(q.tagNameCheck instanceof Function&&q.tagNameCheck(n))return!1}if(se&&!ce[n]){const t=v(e)||e.parentNode,i=F(e)||e.childNodes;if(i&&t){for(let n=i.length-1;n>=0;--n){const r=m(i[n],!0);r.__removalCount=(e.__removalCount||0)+1,t.insertBefore(r,b(e))}}}return Be(e),!0}return e instanceof l&&!function(e){let t=v(e);t&&t.tagName||(t={namespaceURI:we,tagName:"template"});const i=Nr(e.tagName),n=Nr(t.tagName);return!!Fe[e.namespaceURI]&&(e.namespaceURI===ge?t.namespaceURI===me?"svg"===i:t.namespaceURI===pe?"svg"===i&&("annotation-xml"===n||ye[n]):Boolean(Me[i]):e.namespaceURI===pe?t.namespaceURI===me?"math"===i:t.namespaceURI===ge?"math"===i&&Ae[n]:Boolean(Re[i]):e.namespaceURI===me?!(t.namespaceURI===ge&&!Ae[n])&&!(t.namespaceURI===pe&&!ye[n])&&!Re[i]&&(Ce[i]||!Me[i]):!("application/xhtml+xml"!==_e||!Fe[e.namespaceURI]))}(e)?(Be(e),!0):"noscript"!==n&&"noembed"!==n&&"noframes"!==n||!Lr(/<\/no(script|embed|frames)/i,e.innerHTML)?(K&&e.nodeType===ps&&(t=e.textContent,xr([E,N,M],(e=>{t=Br(t,e," ")})),e.textContent!==t&&(Sr(i.removed,{element:e.cloneNode()}),e.textContent=t)),Pe(S.afterSanitizeElements,e,null),!1):(Be(e),!0)},Ve=function(e,t,i){if(ne&&("id"===t||"name"===t)&&(i in n||i in Se))return!1;if(G&&!U[t]&&Lr(R,t));else if(j&&Lr(B,t));else if(!O[t]||U[t]){if(!(qe(e)&&(q.tagNameCheck instanceof RegExp&&Lr(q.tagNameCheck,e)||q.tagNameCheck instanceof Function&&q.tagNameCheck(e))&&(q.attributeNameCheck instanceof RegExp&&Lr(q.attributeNameCheck,t)||q.attributeNameCheck instanceof Function&&q.attributeNameCheck(t))||"is"===t&&q.allowCustomizedBuiltInElements&&(q.tagNameCheck instanceof RegExp&&Lr(q.tagNameCheck,i)||q.tagNameCheck instanceof Function&&q.tagNameCheck(i))))return!1}else if(ue[t]);else if(Lr(L,Br(i,T,"")));else if("src"!==t&&"xlink:href"!==t&&"href"!==t||"script"===e||0!==Dr(i,"data:")||!he[e]){if(W&&!Lr(D,Br(i,T,"")));else if(i)return!1}else;return!0},qe=function(e){return"annotation-xml"!==e&&Rr(e,z)},Qe=function(e){Pe(S.beforeSanitizeAttributes,e,null);const{attributes:t}=e;if(!t||Le(e))return;const n={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:O,forceKeepAttr:void 0};let r=t.length;for(;r--;){const s=t[r],{name:o,namespaceURI:a,value:c}=s,l=ke(o);let h="value"===o?c:Tr(c);if(n.attrName=l,n.attrValue=h,n.keepAttr=!0,n.forceKeepAttr=void 0,Pe(S.uponSanitizeAttribute,e,n),h=n.attrValue,!re||"id"!==l&&"name"!==l||(De(o,e),h="user-content-"+h),Y&&Lr(/((--!?|])>)|<\/(style|title)/i,h)){De(o,e);continue}if(n.forceKeepAttr)continue;if(De(o,e),!n.keepAttr)continue;if(!$&&Lr(/\/>/i,h)){De(o,e);continue}K&&xr([E,N,M],(e=>{h=Br(h,e," ")}));const d=ke(e.nodeName);if(Ve(d,l,h)){if(y&&"object"==typeof p&&"function"==typeof p.getAttributeType)if(a);else switch(p.getAttributeType(d,l)){case"TrustedHTML":h=y.createHTML(h);break;case"TrustedScriptURL":h=y.createScriptURL(h)}try{a?e.setAttributeNS(a,o,h):e.setAttribute(o,h),Le(e)?Be(e):Ir(i.removed)}catch(e){}}}Pe(S.afterSanitizeAttributes,e,null)},Ue=function e(t){let i=null;const n=ze(t);for(Pe(S.beforeSanitizeShadowDOM,t,null);i=n.nextNode();)Pe(S.uponSanitizeShadowNode,i,null),Oe(i),Qe(i),i.content instanceof o&&e(i.content);Pe(S.afterSanitizeShadowDOM,t,null)};return i.sanitize=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=null,s=null,a=null,l=null;if(be=!e,be&&(e="\x3c!--\x3e"),"string"!=typeof e&&!He(e)){if("function"!=typeof e.toString)throw Hr("toString is not a function");if("string"!=typeof(e=e.toString()))throw Hr("dirty is not a string, aborting")}if(!i.isSupported)return e;if(Z||Ne(t),i.removed=[],"string"==typeof e&&(oe=!1),oe){if(e.nodeName){const t=ke(e.nodeName);if(!H[t]||Q[t])throw Hr("root node is forbidden and cannot be sanitized in-place")}}else if(e instanceof c)n=Te("\x3c!----\x3e"),s=n.ownerDocument.importNode(e,!0),s.nodeType===fs&&"BODY"===s.nodeName||"HTML"===s.nodeName?n=s:n.appendChild(s);else{if(!ee&&!K&&!X&&-1===e.indexOf("<"))return y&&ie?y.createHTML(e):e;if(n=Te(e),!n)return ee?null:ie?A:""}n&&J&&Be(n.firstChild);const h=ze(oe?e:n);for(;a=h.nextNode();)Oe(a),Qe(a),a.content instanceof o&&Ue(a.content);if(oe)return e;if(ee){if(te)for(l=x.call(n.ownerDocument);n.firstChild;)l.appendChild(n.firstChild);else l=n;return(O.shadowroot||O.shadowrootmode)&&(l=I.call(r,l,!0)),l}let d=X?n.outerHTML:n.innerHTML;return X&&H["!doctype"]&&n.ownerDocument&&n.ownerDocument.doctype&&n.ownerDocument.doctype.name&&Lr(hs,n.ownerDocument.doctype.name)&&(d="<!DOCTYPE "+n.ownerDocument.doctype.name+">\n"+d),K&&xr([E,N,M],(e=>{d=Br(d,e," ")})),y&&ie?y.createHTML(d):d},i.setConfig=function(){Ne(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}),Z=!0},i.clearConfig=function(){Ie=null,Z=!1},i.isValidAttribute=function(e,t,i){Ie||Ne({});const n=ke(e),r=ke(t);return Ve(n,r,i)},i.addHook=function(e,t){"function"==typeof t&&Sr(S[e],t)},i.removeHook=function(e,t){if(void 0!==t){const i=kr(S[e],t);return-1===i?void 0:Er(S[e],i,1)[0]}return Ir(S[e])},i.removeHooks=function(e){S[e]=[]},i.removeAllHooks=function(){S={afterSanitizeAttributes:[],afterSanitizeElements:[],afterSanitizeShadowDOM:[],beforeSanitizeAttributes:[],beforeSanitizeElements:[],beforeSanitizeShadowDOM:[],uponSanitizeAttribute:[],uponSanitizeElement:[],uponSanitizeShadowNode:[]}},i}();class vs{constructor(e){this.parent=e,this.container=t({class:"igv-ui-generic-dialog-container"}),e.appendChild(this.container);const i=t({class:"igv-ui-generic-dialog-header"});this.container.appendChild(i),this.label=t({class:"igv-ui-generic-dialog-one-liner"}),this.container.appendChild(this.label),this.label.textContent="Unlabeled",this.input_container=t({class:"igv-ui-generic-dialog-input"}),this.container.appendChild(this.input_container),this._input=document.createElement("input"),this.input_container.appendChild(this._input);const r=t({class:"igv-ui-generic-dialog-ok-cancel"});this.container.appendChild(r),this.ok=t(),r.appendChild(this.ok),this.ok.textContent="OK",this.cancel=t(),r.appendChild(this.cancel),this.cancel.textContent="Cancel",n(this.container),this._input.addEventListener("keyup",(e=>{"Enter"===e.code&&("function"==typeof this.callback&&(this.callback(this._input.value),this.callback=void 0),this._input.value=void 0,n(this.container)),e.stopImmediatePropagation()})),this.ok.addEventListener("click",(()=>{"function"==typeof this.callback&&(this.callback(this._input.value),this.callback=void 0),this._input.value=void 0,n(this.container)}));const s=()=>{this._input.value="",n(this.container)};this.cancel.addEventListener("click",s),u(i,s),p(this.container,i)}get value(){return Fs.sanitize(this._input.value)}present(e,t){this.label.textContent=e.label,this._input.value=e.value,this.callback=e.callback||e.click;const{top:i}=t.currentTarget.parentElement.getBoundingClientRect();this.container.style.top=`${i}px`,this.container.style.display="flex"}}
|
|
3
3
|
/*!
|
|
4
4
|
* vanilla-picker v2.12.3
|
|
@@ -10,7 +10,7 @@ function e(e){const t=document.createElement("div");return t.innerHTML=e,t.first
|
|
|
10
10
|
/**
|
|
11
11
|
* Note: Some portions of this code adapated from the GMOD two-bit.js project, @Copyright (c) 2017 Robert Buels
|
|
12
12
|
* * https://github.com/GMOD/twobit-js/blob/master/src/twoBitFile.ts*
|
|
13
|
-
*/const ko=["T","C","A","G"],Io=[];for(let Kv=0;Kv<256;Kv++)Io.push(ko[Kv>>6&3]+ko[Kv>>4&3]+ko[Kv>>2&3]+ko[3&Kv]);const So=Io.map((e=>e.toLowerCase()));class Eo{littleEndian;metaIndex=new Map;constructor(e){this.url=e.twoBitURL||e.fastaURL,this.config=e,e.twoBitBptURL&&(this.bptURL=e.twoBitBptURL)}async init(){if(this.bptURL)this.index=await xo.loadBpTree(this.bptURL,this.config,0);else{const e=await this._readIndex();this.index={search:async t=>e.has(t)?{offset:e.get(t)}:void 0}}}async readSequence(e,t,i){this.index||await this.init();const n=await this.getSequenceRecord(e);if(!n)return null;if(t<0)throw new TypeError("regionStart cannot be less than 0");(void 0===i||i>n.dnaSize)&&(i=n.dnaSize);const r=this._getOverlappingBlocks(t,i,n.nBlocks),s=this._getOverlappingBlocks(t,i,n.maskBlocks),o=Math.floor(t/4),a=n.packedPos+o,c=Math.floor(i/4)-o+1,l=await Mn.loadArrayBuffer(this.url,{range:{start:a,size:c}}),h=new Uint8Array(l);let d="";for(let e=t;e<i;e+=1){for(;s.length&&s[0].end<=e;)s.shift();const t=s[0]&&s[0].start<=e&&s[0].end>e;if(r[0]&&e>=r[0].start&&e<r[0].end){const t=r.shift();for(;e<t.end&&e<i;)d+="N",e++;e--}else{const i=e%4,n=h[Math.floor(e/4)-o];d+=t?So[n][i]:Io[n][i]}}return d}async _readIndex(){const e=new Map;let t=await Mn.loadArrayBuffer(this.url,{range:{start:0,size:64}}),i=new DataView(t),n=0;const r=i.getUint32(n,!0),s=i.getUint32(n,!1);n+=4;const o=440477507;if(r===o)this.littleEndian=!0;else{if(s!==o)throw Error(`Bad magic number ${o}`);this.littleEndian=!1}let a,c;this.version=i.getUint32(n,this.littleEndian),n+=4,this.sequenceCount=i.getUint32(n,this.littleEndian),n+=4,this.reserved=i.getUint32(n,this.littleEndian),n+=4;let l=20;for(let t=0;t<this.sequenceCount;t++){(!c||c.available()<1)&&(a=(this.sequenceCount-t)*l,c=await this._loadBinaryBuffer(n,a));const i=c.getByte();n+=1,c.available()<i+5&&(a=(this.sequenceCount-t)*l+100,c=await this._loadBinaryBuffer(n,a));const r=c.getString(i),s=c.getUInt();n+=i+4,e.set(r,s),l=Math.floor(l*(t/(t+1))+r.length/(t+1))}return e}async getSequenceRecord(e){if(!this.metaIndex.has(e)){if(!this.index)throw Error("TwobitSequence object must be initialized before accessing sequence");let t=await this.index.search(e);if(!t)return;let i=t.offset,n=8,r=await this._loadBinaryBuffer(i,n);const s=r.getUInt(),o=r.getUInt();i+=n,n=8*o+4,r=await this._loadBinaryBuffer(i,n);const a=[];for(let e=0;e<o;e++)a.push(r.getUInt());const c=[];for(let e=0;e<o;e++)c.push(r.getUInt());const l=r.getUInt();i+=n,n=8*l+4,r=await this._loadBinaryBuffer(i,n);const h=[];for(let e=0;e<l;e++)h.push(r.getUInt());const d=[];for(let e=0;e<l;e++)d.push(r.getUInt());const u=[];for(let e=0;e<o;e++)u.push(new No(a[e],c[e]));const f=[];for(let e=0;e<l;e++)f.push(new No(h[e],d[e]));if(0!=r.getUInt())throw Error("Bad 2-bit file");i+=n;const p={dnaSize:s,nBlocks:u,maskBlocks:f,packedPos:i,bpLength:s};this.metaIndex.set(e,p)}return this.metaIndex.get(e)}_getOverlappingBlocks(e,t,i){const n=[];for(let r of i){if(r.start>t)break;r.end<e||n.push(r)}return n}async _loadBinaryBuffer(e,t){const i=await Mn.loadArrayBuffer(this.url,{range:{start:e,size:t}});return new Co(new DataView(i),this.littleEndian)}}class No{constructor(e,t){this.start=e,this.size=t}get end(){return this.start+this.size}}class Mo{static#i=1e5;#n;#r=[];#s=10;constructor(e,t){this.sequenceReader=e,this.browser=t}get chromosomes(){return this.sequenceReader.chromosomes}async getSequenceRecord(e){return this.sequenceReader.getSequenceRecord(e)}async getSequence(e,t,i){let n=this.#r.find((n=>n.contains(e,t,i)));if(n||(n=await this.#o(e,t,i),this.#a(n),this.#r.push(n)),n){const e=t-n.start,r=i-t;return n.features?n.features.substring(e,e+r):null}}#a(e){this.#r=this.#r.filter((t=>!e.contains(t))),this.#r.length===this.#s&&this.#r.shift(),this.browser&&this.browser.referenceFrameList.length<100&&(this.#r=this.#r.filter((e=>void 0!==this.browser.referenceFrameList.find((t=>t.overlaps(e))))))}getSequenceInterval(e,t,i){return this.#r.find((n=>n.contains(e,t,i)))}async#o(e,t,i){let n=t,r=i;if(i-t<Mo.#i){const e=i-t,s=Math.round(t+e/2);n=Math.max(0,s-Mo.#i/2),r=n+Mo.#i}const s=new fo(e,n,r);if(this.#n&&this.#n[0].contains(e,t,i))return this.#n[1];{const t=new Promise((async(t,i)=>{s.features=await this.sequenceReader.readSequence(e,n,r),t(s)}));return this.#n=[s,t],t}}async init(){return this.sequenceReader.init()}get chromosomeNames(){return this.sequenceReader.chromosomeNames}getFirstChromosomeName(){return"function"==typeof this.sequenceReader.getFirstChromosomeName?this.sequenceReader.getFirstChromosomeName():void 0}#c(e){this.browser.referenceFrameList}}async function Ro(e,t){let i;return"chromsizes"===e.format?i=new Ao(e.fastaURL||e.url):"2bit"===e.format||e.twoBitURL?i=new Mo(new Eo(e),t):Xs(e.fastaURL)||!e.indexURL?i=new mo(e):"gbk"===e.format||e.gbkURL||(i=new Mo(new vo(e),t)),await i.init(),i}const Bo={A:"rgb( 0, 200, 0)",C:"rgb( 0,0,200)",T:"rgb(255,0,0)",G:"rgb(209,113, 5)",N:"rgb(80,80,80)"};function Do(e,t){if(e.length<6)return void console.log("Skipping line: "+e.join(" "));var i={chr1:e[0],start1:Number.parseInt(e[1]),end1:Number.parseInt(e[2]),chr2:e[3],start2:Number.parseInt(e[4]),end2:Number.parseInt(e[5])};if(isNaN(i.start1)||isNaN(i.end1)||isNaN(i.start2)||isNaN(i.end2))return;t&&void 0===t.hiccups&&(t.hiccups=!!t.columnNames&&zo(t.columnNames));const n=t&&t.hiccups,r=n?6:10;if(n||(e.length>6&&"."!==e[6]&&(i.name=e[6]),e.length>7&&"."!==e[7]&&(i.score=Number(e[7])),e.length>8&&"."!==e[8]&&(i.strand1=e[8]),e.length>9&&"."!==e[9]&&(i.strand2=e[9])),t){const n=t.colorColumn;n&&n<e.length&&(i.color=un.createColorString(e[n]));const s=t.thicknessColumn;s&&s<e.length&&(i.thickness=e[s]),e.length>r&&t.columnNames&&t.columnNames.length===e.length&&(i.extras=e.slice(r))}return i.chr1===i.chr2&&(i.chr=i.chr1,i.start=Math.min(i.start1,i.start2),i.end=Math.max(i.end1,i.end2)),i}function To(e,t){if(!(e.length<8))return{chr:e[0],start:Number.parseInt(e[1]),end:Number.parseInt(e[2]),color:un.createColorString(e[6]),value:Number(e[7])}}function zo(e){return e&&(e.includes("fdrDonut")||e.includes("fdr_donut"))}function Lo(e,t){if(!(e.length<6))return{chr:e[0],start:Number.parseInt(e[1]),end:Number.parseInt(e[2]),chr1:e[8],start1:Number.parseInt(e[9]),end1:Number.parseInt(e[10]),chr2:e[13],start2:Number.parseInt(e[14]),end2:Number.parseInt(e[15]),name:e[3],score:Number(e[4]),value:Number(e[5]),color:"."===e[7]?void 0:"0"===e[7]?"rgb(0,0,0)":e[7]};console.log("Skipping line: "+e.join(" "))}class Ho{constructor(e){this.message=e}}const Po=new Map([["%09","\t"],["%0A","\n"],["%0D","\r"],["%25","%"],["%3B",";"],["%3D","="],["%26","&"],["%2C",","]]);function Oo(e){if(!e.includes("%"))return e;let t="";for(let i=0;i<e.length;i++)if(37===e.charCodeAt(i)&&i<e.length-2){const n=e.substring(i,i+3);Po.has(n)?t+=Po.get(n):t+=n,i+=2}else t+=e.charAt(i);return t}function Vo(e,t="="){const i="="===t;var n=[];for(let r of e.split(";")){r=r.trim();const e=r.indexOf(t);if(e>0&&e<r.length-1){let t=Oo(r.substring(0,e).trim()),s=Oo(r.substring(e+1).trim());i||(t=qo(t),s=qo(s)),n.push([t,s])}}return n}function qo(e){return e.startsWith('"')&&e.endsWith('"')&&(e=e.substr(1,e.length-2)),e}const Qo=new Set(["transcript","primary_transcript","processed_transcript","mRNA","mrna","lnc_RNA","miRNA","ncRNA","rRNA","scRNA","snRNA","snoRNA","tRNA"]),Uo=new Set(["CDS","cds"]),jo=new Set(["start_codon","stop_codon"]),Go=new Set(["5UTR","3UTR","UTR","five_prime_UTR","three_prime_UTR","3'-UTR","5'-UTR"]),Wo=new Set(["exon","coding-exon"]),$o=new Set;for(let Yv of[Uo,jo,Go,Wo])for(let Xv of Yv)$o.add(Xv);function Ko(e){return e.includes("intron")}function Yo(e){return Uo.has(e)||jo.has(e)}function Xo(e){return Go.has(e)}function Zo(e){return Qo.has(e)||e.endsWith("RNA")||e.endsWith("transcript")}function Jo(e){return $o.has(e)||e.endsWith("RNA")||Ko(e)}const ea=new Set(["id","parent","name"]);class ta{constructor(e){Object.assign(this,e),void 0!==e.phase&&"."!==e.phase&&(this.readingFrame=(3-parseInt(e.phase))%3)}popupData(e){const t=this.geneObject?this.geneObject.popupData():[];if(this.geneObject&&t.push("<hr/>"),this.name&&t.push({name:"Name",value:this.name}),t.push({name:"Type",value:this.type}),t.push({name:"Source",value:this.source}),void 0!==this.score&&t.push({name:"Score",value:this.score}),t.push({name:"Phase",value:this.phase}),this.attributeString){const e=Vo(this.attributeString,this.delim);for(let[i,n]of e)void 0!==n&&n.length>0&&!ea.has(i.toLowerCase())&&t.push({name:i+":",value:n})}return t.push({name:"Location",value:`${this.chr}:${F(this.start+1)}-${F(this.end)}`}),t}getAttributeValue(e){if(this.hasOwnProperty(e))return this[e];if(this._attributeCache||(this._attributeCache=new Map),this._attributeCache.has(e))return this._attributeCache.get(e);{const t=Vo(this.attributeString,this.delim);let i;for(let[n,r]of t)if(n===e){i=r;break}return this._attributeCache.set(e,i),i}}}class ia extends ta{constructor(e){super(e),this.exons=[],this.parts=[]}addExon(e){this.exons.push(e),this.start=Math.min(this.start,e.start),this.end=Math.max(this.end,e.end)}addPart(e){this.parts.push(e)}assembleParts(){if(0===this.parts.length)return;this.parts.sort((function(e,t){return e.start-t.start}));let e=this.parts[0].start,t=this.parts[0].end;for(let i=1;i<this.parts.length;i++){const n=this.parts[i];if(!Ko(n.type))if(n.start<=t)t=Math.max(t,n.end);else{this.findExonContaining({start:e,end:t})||this.exons.push({start:e,end:t,psuedo:!0}),e=n.start,t=n.end}}this.findExonContaining({start:e,end:t})||(this.exons.push({start:e,end:t,psuedo:!0}),this.start=Math.min(this.start,e),this.end=Math.max(this.end,t));for(let e of this.parts){const t=e.type;Yo(t)?this.addCDS(e):Xo(t)&&this.addUTR(e)}}findExonContaining({start:e,end:t}){for(let i of this.exons)if(i.end>=t&&i.start<=e)return i}addCDS(e){let t;const i=this.exons;for(let n of i)if(n.start<=e.start&&n.end>=e.end){t=n;break}t?(t.cdStart=t.cdStart?Math.min(e.start,t.cdStart):e.start,t.cdEnd=t.cdEnd?Math.max(e.end,t.cdEnd):e.end,t.readingFrame=e.readingFrame):console.error("No exon found spanning "+e.start+"-"+e.end),this.cdStart=this.cdStart?Math.min(e.start,this.cdStart):e.start,this.cdEnd=this.cdEnd?Math.max(e.end,this.cdEnd):e.end}addUTR(e){let t;const i=this.exons;for(let n=0;n<i.length;n++)if(i[n].start<=e.start&&i[n].end>=e.end){t=i[n];break}t?e.start===t.start&&e.end===t.end?t.utr=!0:(e.end<t.end&&(t.cdStart=e.end),e.start>t.start&&(t.cdEnd=e.start)):console.error("No exon found spanning "+cds.start+"-"+cds.end)}finish(){this.assembleParts();var e=this.cdStart,t=this.cdEnd;this.exons.sort((function(e,t){return e.start-t.start})),e&&this.exons.forEach((function(i){(i.end<e||i.start>t)&&(i.utr=!0)}))}popupData(e){const t=super.popupData(e);for(let i of this.exons)if(!i.pseudo&&e>=i.start&&e<i.end&&"function"==typeof i.popupData){t.push("<hr/>");const n=i.popupData(e);for(let e of n)t.push(e)}for(let i of this.parts)if(e>=i.start&&e<i.end&&"function"==typeof i.popupData){t.push("<hr/>");const n=i.popupData(e);for(let e of n)t.push(e)}return t}}class na{static gffNameFields=new Set(["Name","transcript_id","gene_name","gene","gene_id","alias","locus","name"]);constructor(e){this.format=e.format,this.nameField=e.nameField,this.filterTypes=void 0===e.filterTypes?new Set(["chromosome"]):new Set(e.filterTypes)}combineFeatures(e,t){let i;const n=this.filterTypes;if(e=e.filter((e=>void 0===n||!n.has(e.type))),"gff3"===this.format){const t=this.combineFeaturesById(e);i=this.combineFeaturesByType(t)}else i=this.combineFeaturesByType(e);return this.numberExons(i,t),this.nameFeatures(i),i}combineFeaturesById(e){const t=new Map,i=[];for(let n of e)if(Jo(n.type)||Zo(n.type)||!n.id)i.push(n);else{let e=t.get(n.chr);e||(e=new Map,t.set(n.chr,e));let i=e.get(n.id);i?i.push(n):e.set(n.id,[n])}for(let e of t.values())for(let t of e.values())if(t.length>1){const e=t[0];e.exons=[];for(let i of t)e.start=Math.min(e.start,i.start),e.end=Math.max(e.end,i.end),e.exons.push({start:i.start,end:i.end});i.push(e)}else i.push(t[0]);return i}combineFeaturesByType(e){const t=e.filter((e=>"gene"===e.type||e.type.endsWith("_gene"))),i=Object.create(null);for(let e of t)i[e.id]=e;const n=Object.create(null),r=[],s=new Set,o=this.filterTypes;e=e.filter((e=>void 0===o||!o.has(e.type)));for(let t of e)if(Zo(t.type)){const e=t.id;if(void 0!==e){const o=new ia(t);n[e]=o,r.push(o),s.add(t);const a=i[t.parent];a&&(o.geneObject=a,s.add(a))}}for(let t of e)if(Jo(t.type)){const e=l(t);if(e)for(let i of e){let o=n[i];if(!o&&"gtf"===this.format){const e=Object.assign({},t);e.type="transcript",o=new ia(e),n[i]=o,r.push(o)}if(void 0!==o){if(a=t.type,Wo.has(a))if(e.length>1){const e=new ta(t);o.addExon(e)}else o.addExon(t);else o.addPart(t);s.add(t)}}}var a;r.forEach((function(e){"function"==typeof e.finish&&e.finish()}));const c=e.filter((e=>!s.has(e)));for(let e of c)r.push(e);return r;function l(e){return e.parent&&""!==e.parent.trim()?e.parent.trim().split(","):null}}numberExons(e,t){for(let i of e)if(i.exons&&(!t||i.end<=t.end&&i.start>t.start))for(let e=0;e<i.exons.length;e++){i.exons[e].number="-"===i.strand?i.exons.length-e:e+1}}nameFeatures(e){for(let t of e)if("function"==typeof t.getAttributeValue)if(this.nameField)t.name=t.getAttributeValue(this.nameField);else for(let e of na.gffNameFields){const i=t.getAttributeValue(e);if(i){t.name=i;break}}}}function ra(e,t,i=Number.MAX_SAFE_INTEGER){if(e.length<3)return;const n=t&&t.gffTags,r=e[0],s=parseInt(e[1]),o=e.length>2?parseInt(e[2]):s+1;if(isNaN(s)||isNaN(o))return new Ho("Unparsable bed record.");const a=new Fa({chr:r,start:s,end:o,score:1e3});let c=3;try{if(e.length>3&&c++<i){if(e[3].indexOf(";")>0&&e[3].indexOf("=")>0){const i=Vo(e[3],"=");a.attributes={};for(let e of i)a.attributes[e[0]]=e[1],n&&(null!=t.nameField&&e[0]===t.nameField||!a.name&&na.gffNameFields.has(e[0]))&&(a.name=e[1])}a.name||n||(a.name="."===e[3]?"":e[3])}if(e.length>4&&c++<i&&(a.score="."===e[4]?0:Number(e[4]),isNaN(a.score)))return a;if(e.length>5&&c++<i&&(a.strand=e[5],"."!==a.strand&&"+"!==a.strand&&"-"!==a.strand))return a;if(e.length>6&&c++<i&&(a.cdStart=parseInt(e[6]),isNaN(a.cdStart)))return a;if(e.length>7&&c++<i&&(a.cdEnd=parseInt(e[7]),isNaN(a.cdEnd)))return a;if(e.length>8&&c++<i&&"."!==e[8]&&"0"!==e[8]&&(a.color=un.createColorString(e[8])),e.length>11&&c++<i){const t=parseInt(e[9]);if(t>1e3)return a;const i=e[10].replace(/,$/,"").split(","),n=e[11].replace(/,$/,"").split(",");if(i.length!==n.length||t!==i.length)return a;const r=[];for(let e=0;e<t;e++){const t=s+parseInt(n[e]),o=t+parseInt(i[e]);r.push({start:t,end:o})}r.length>0&&(fa(r,a.cdStart,a.cdEnd),a.exons=r)}if(t){let i=t.thicknessColumn,n=t.colorColumn;n&&n<e.length&&(a.color=un.createColorString(e[n])),i&&i<e.length&&(a.thickness=e[i])}}catch(e){}return a}function sa(e,t){const i=ra(e,t);return i&&e.length>14&&(i.signal=Number(e[12]),i.pValue=Number(e[13]),i.qValue=Number(e[14])),i}function oa(e,t){const i=ra(e,t,9);if(i){const t=["Coverage","% Showing Methylation","N-mod","N-canonical","N-other mod","N-delete","N-fail","N-dff","N-nocall"];for(let n=9;n<e.length;n++){i[t[n-9]]=e[n]}}return i}function aa(e,t){if(e.length<=15)return;return{swScore:Number.parseInt(e[1]),milliDiv:Number.parseInt(e[2]),milliDel:Number.parseInt(e[3]),milliIns:Number.parseInt(e[4]),chr:e[5],start:Number.parseInt(e[6]),end:Number.parseInt(e[7]),strand:e[9],repName:e[10],repClass:e[11],repFamily:e[12],repStart:Number.parseInt(e[13]),repEnd:Number.parseInt(e[14]),repLeft:Number.parseInt(e[15])}}function ca(e,t){var i=void 0===t.shift?0:1;if(e.length<=9+i)return;const n=parseInt(e[5+i]),r=parseInt(e[6+i]);var s={name:e[0+i],chr:e[1+i],strand:e[2+i],start:parseInt(e[3+i]),end:parseInt(e[4+i]),cdStart:n,cdEnd:r,id:e[0+i]};const o=ua(parseInt(e[7+i]),e[8+i],e[9+i]);return fa(o,n,r),s.exons=o,s}function la(e,t){var i=void 0===t.shift?0:1;if(e.length<=11+i)return;const n=parseInt(e[5+i]),r=parseInt(e[6+i]),s={name:e[11+i],chr:e[1+i],strand:e[2+i],start:parseInt(e[3+i]),end:parseInt(e[4+i]),cdStart:n,cdEnd:r,id:e[0+i]},o=ua(parseInt(e[7+i]),e[8+i],e[9+i],e[14+i]);return fa(o,n,r),s.exons=o,s}function ha(e,t){var i=void 0===t.shift?0:1;if(e.length<=10+i)return;const n=parseInt(e[6+i]),r=parseInt(e[7+i]);var s={name:e[0+i],id:e[1+i],chr:e[2+i],strand:e[3+i],start:parseInt(e[4+i]),end:parseInt(e[5+i]),cdStart:n,cdEnd:r};const o=ua(parseInt(e[8+i]),e[9+i],e[10+i]);return fa(o,n,r),s.exons=o,s}function da(e,t){if(e.length<21)return;const i=e[13],n=parseInt(e[15]),r=parseInt(e[16]),s=e[8].charAt(0),o=parseInt(e[17]),a=[],c=e[20].replace(/,$/,"").split(","),l=e[18].replace(/,$/,"").split(",");for(let e=0;e<o;e++){const t=parseInt(c[e]),i=t+parseInt(l[e]);a.push({start:t,end:i})}return new va({chr:i,start:n,end:r,strand:s,exons:a,tokens:e})}function ua(e,t,i,n){const r=t.replace(/,$/,"").split(","),s=i.replace(/,$/,"").split(","),o=n?n.replace(/,$/,"").split(","):void 0,a=[];for(let t=0;t<e;t++){const e={start:parseInt(r[t]),end:parseInt(s[t])};if(o){const i=parseInt(o[t]);-1!=i&&(e.readingFrame=i)}a.push(e)}return a}function fa(e,t,i){for(let n of e){const e=n.end,r=n.start;e<t||r>i?n.utr=!0:(t>=r&&t<=e&&(n.cdStart=t),i>=r&&i<=e&&(n.cdEnd=i))}}function pa(e,t){var i,n,r,s,o,a,c;if(!(e.length<9))return i=e[0],n=parseInt(e[1]),r=parseInt(e[2]),o=e[3],a=Number(e[4]),s=e[5].trim(),c=Number(e[6]),0===a&&(a=c),{chr:i,start:n,end:r,name:o,score:a,strand:s,signal:c,pValue:Number(e[7]),qValue:Number(e[8])}}function ga(e,t){const i=pa(e);return e.length>9&&(i.peak=Number(e[9])),i}function ma(e,t){if(e.length<=3)return;const i={chr:e[0],start:parseInt(e[1]),end:parseInt(e[2]),value:Number(e[3])};if(t){let n=t.colorColumn;n&&n<e.length&&(i.color=un.createColorString(e[n]))}return i}function wa(e,t){const i=t.wig;if(i&&"fixedStep"===i.format){const t=i.index*i.step+i.start,n=t+i.span,r=Number(e[0]);return++i.index,isNaN(r)?null:{chr:i.chrom,start:t,end:n,value:r}}if(i&&"variableStep"===i.format){if(e.length<2)return null;const t=parseInt(e[0],10)-1,n=t+i.span,r=Number(e[1]);return isNaN(r)?null:{chr:i.chrom,start:t,end:n,value:r}}return ma(e)}function ba(e,t){if(e.length<6)return;const i=["bin","chr","start","end","name","score","strand","refNCBI","refUCSC","observed","molType","class","valid","avHet","avHetSE","func","locType","weight","exceptions","submitterCount","submitters","alleleFreqCount","alleles","alleleNs","alleleFreqs","bitfields"],n={chr:e[1],start:Number.parseInt(e[2]),end:Number.parseInt(e[3]),name:e[4],score:Number.parseInt(e[5])},r=Math.min(e.length,i.length);for(let t=6;t<r;t++)n[i[t]]=e[t];return n}class Fa{constructor(e){Object.assign(this,e)}getAttributeValue(e){return this.hasOwnProperty(e)?this[e]:this.attributes?this.attributes[e]:void 0}}class va{constructor(e){Object.assign(this,e)}get score(){const e=this.tokens,t=parseInt(e[0]),i=parseInt(e[2]),n=parseInt(e[1]),r=parseInt(e[4]),s=parseInt(e[6]),o=parseInt(e[10]);return Math.floor(1e3*(t+i-n-r-s)/o)}get matches(){return this.tokens[0]}get misMatches(){return this.tokens[1]}get repMatches(){return this.tokens[2]}get nCount(){return this.tokens[3]}get qNumInsert(){return this.tokens[4]}get qBaseInsert(){return this.tokens[5]}get tNumInsert(){return this.tokens[6]}get tBaseInsert(){return this.tokens[7]}popupData(){return[{name:"chr",value:this.chr},{name:"start",value:this.start+1},{name:"end",value:this.end},{name:"strand",value:this.strand},{name:"score",value:this.score},{name:"match",value:this.matches},{name:"mis-match",value:this.misMatches},{name:"rep. match",value:this.repMatches},{name:"N's",value:this.nCount},{name:"Q gap count",value:this.qNumInsert},{name:"Q gap bases",value:this.qBaseInsert},{name:"T gap count",value:this.tNumInsert},{name:"T gap bases",value:this.tBaseInsert}]}}function ya(e,t){const i=t.format;if(e.length<9)return;const n="gff3"===i?"=":" ";return new ta({source:Oo(e[1]),type:e[2],chr:e[0],start:parseInt(e[3])-1,end:parseInt(e[4]),score:"."===e[5]?void 0:Number(e[5]),strand:e[6],phase:"."===e[7]?".":parseInt(e[7]),attributeString:e[8],delim:n})}function Aa(e,t){const i=ya(e,t);if(!i)return;const n=Vo(i.attributeString,i.delim);for(let[e,t]of n){const n=e.toLowerCase();"color"===n||"colour"===n?i.color=un.createColorString(t):"ID"===e?i.id=t:"Parent"===e&&(i.parent=t)}return i}function Ca(e,t){const i=ya(e,t);if(!i)return;const n=Vo(i.attributeString,i.delim);let r,s;switch(i.type){case"gene":r="gene_id";break;case"transcript":r="transcript_id",s="gene_id";break;default:s="transcript_id"}for(let[e,t]of n){const n=e.toLowerCase();"color"===n||"colour"===n?i.color=un.createColorString(t):e===r?i.id=t:e===s&&(i.parent=t)}return i}function _a(e,t){if(!(e.length<7)){var i=e[0],n=e[1],r=parseInt(e[2]),s=parseInt(e[3]),o=parseInt(e[4]),a=parseInt(e[5]),c=e[6],l={chr:i,name:n,junction_left:r,junction_right:s,num_junction_reads:o,num_spanning_frags:a,spanning_frag_coords:[],start:-1,end:-1},h=r,d=s;if(a>0)for(var u=c.split(","),f=0;f<u.length;f++){var p=u[f].split("-"),g=p[0],m=p[1];g<h&&(h=g),m>d&&(d=m),l.spanning_frag_coords.push({left:g,right:m})}return l.start=h,l.end=d,l}}function xa(e,t){if(e.length<7)return null;const i={chr:e[0],start:parseInt(e[1])-1,end:parseInt(e[2]),"Strongest SNP-risk allele":e[3],"Disease/Phenotype":e[4],"P-value":e[5],"Odds ratio or beta":e[6]};return e.length>6&&(i.PUBMEDID=`<a target = "blank" href = "https://www.ncbi.nlm.nih.gov/pubmed/${e[7]}">${e[7]}</a>`),i}function ka(e,t){const i=t.customFormat;if(e.length<i.fields.length)return;const n=i.coords||0,r=e[i.chr],s=parseInt(e[i.start])-n,o={chr:r,start:s,end:void 0!==i.end?parseInt(e[i.end]):s+1};return i.fields&&i.fields.forEach((function(t,n){n!==i.chr&&n!==i.start&&n!==i.end&&(o[t]=e[n])})),o}function Ia(e,t){const i=t.columnNames;if(!i)throw Error("Sample names are not defined. Missing column headers?");const n=i.length-3,r=e[0],s=parseInt(e[1]),o=parseInt(e[2]),a=e.slice(3).map(Number);return a.length==n?{chr:r,start:s,end:o,values:a}:void console.warn(`${r}:${s}-${o} row contains ${a.length} sample columns instead of the expected ${n} columns. Skipping...`)}function Sa(e,t,i=Number.MAX_SAFE_INTEGER){if(e.length<4)return;const n=e[0],r=parseInt(e[1]),s=parseInt(e[2]);if(isNaN(r)||isNaN(s))return new Ho("Unparsable bed record.");const o={chr:n,start:r,end:s},a=[];for(let t=3;t<e.length;t++)a.push(Number.parseFloat(e[t]));return o.values=a,o}const Ea={gwascatalog:{fields:["bin","chr","start","end","name","pubMedID","author","pubDate","journal","title","trait","initSample","replSample","region","genes","riskAllele","riskAlFreq","pValue","pValueDesc","orOrBeta","ci95","platform","cnv"]},wgrna:{fields:["bin","chr","start","end","name","score","strand","thickStart","thickEnd","type"]},cpgislandext:{fields:["bin","chr","start","end","name","length","cpgNum","gcNum","perCpg","perGc","obsExp"]},clinVarMain:{fields:["chr1","start","end","name","score","strand","thickStart","thickEnd","reserved","blockCount","blockSizes","chromStarts","origName","clinSign","reviewStatus","type","geneId","snpId","nsvId","rcvAcc","testedInGtr","phenotypeList","phenotype","origin","assembly","cytogenetic","hgvsCod","hgvsProt","numSubmit","lastEval","guidelines","otherIds"]}};class Na{constructor(e){this.config=e,this.header={},e.nameField&&(this.header.nameField=e.nameField),this.skipRows=0,e.decode?(this.decode=e.decode,this.delimiter=e.delimiter||"\t"):e.format&&(this.header.format=e.format.toLowerCase(),this.setDecoder(this.header.format)),this.delimiter||(this.delimiter="\t")}async parseHeader(e){let t,i,n=this.header;for(;void 0!==(i=await e.nextLine());)if(i.startsWith("track")||i.startsWith("#track")){let e=Ma(i);Object.assign(n,e)}else if(i.startsWith("browser"));else if(i.startsWith("#columns")){let e=Ra(i);Object.assign(n,e)}else if(i.startsWith("##gff-version 3"))n.format="gff3";else if(i.startsWith("#gffTags"))n.gffTags=!0;else{if(i.startsWith("fixedStep")||i.startsWith("variableStep"))break;if(i.startsWith("#")){const e=i.split(this.delimiter||"\t");e.length>1&&(t=e)}else{this.setDecoder(n.format);const e=i.split(this.delimiter||"\t");try{const i=Object.assign({columnNames:t},n);let r;if(r=this.decode(e,i)){n.firstFeature=r;break}e.length>1&&(t=e)}catch(i){e.length>1&&(t=e)}}}if(t){n.columnNames=t;for(let e=0;e<t.length;e++)"color"===t[e]||"colour"===t[e]?n.colorColumn=e:"thickness"===t[e]&&(n.thicknessColumn=e)}return this.header=n,n}async parseFeatures(e){const t=[],i=this.decode,n=this.header.format,r=this.delimiter||"\t";let s,o=0,a=0;for(;void 0!==(s=await e.nextLine());){if(o++,o<=this.skipRows)continue;if(!s||s.startsWith("track")||s.startsWith("#")||s.startsWith("browser"))continue;if("wig"===n&&s.startsWith("fixedStep")){this.header.wig=Ba(s);continue}if("wig"===n&&s.startsWith("variableStep")){this.header.wig=Da(s);continue}const e=s.split(r);if(e.length<1)continue;const c=i(e,this.header);c instanceof Ho?(a++,a>0&&console.error(`Error parsing line '${s}': ${c.message}`)):c&&t.push(c)}return i===Do&&function(e){if(0==e.length)return;const t=e[0];if(void 0===t.score&&void 0!==t.name){for(let t of e)if(!$s(t.name)&&"."!==t.name)return;for(let t of e)t.score=Number(t.name),delete t.name}const i=e.filter((e=>e.chr1!==e.chr2));for(let t of i){const i=Object.assign({},t);i.dup=!0,e.push(i),t.chr=t.chr1,t.start=t.start1,t.end=t.end1,i.chr=i.chr2,i.start=i.start2,i.end=i.end2}}(t),"gtf"!==this.config.format&&"gff3"!==this.config.format&&"gff"!==this.config.format||!1===this.config.assembleGFF?t:new na(this.config).combineFeatures(t)}setDecoder(e){switch(e){case"broadpeak":case"regionpeak":case"peaks":this.decode=pa,this.delimiter=this.config.delimiter||/\s+/;break;case"narrowpeak":this.decode=ga,this.delimiter=this.config.delimiter||/\s+/;break;case"bedgraph":this.decode=ma,this.delimiter=/\s+/;break;case"wig":this.decode=wa,this.delimiter=this.config.delimiter||/\s+/;break;case"gff3":case"gff":this.decode=Aa,this.delimiter="\t";break;case"gtf":this.decode=Ca,this.delimiter="\t";break;case"fusionjuncspan":this.decode=_a,this.delimiter=this.config.delimiter||/\s+/;break;case"gtexgwas":this.skipRows=1,this.decode=xa,this.delimiter="\t";break;case"refflat":this.decode=ha,this.delimiter=this.config.delimiter||/\s+/;break;case"genepred":this.decode=ca,this.delimiter=this.config.delimiter||/\s+/;break;case"genepredext":this.decode=la,this.delimiter=this.config.delimiter||/\s+/;break;case"ensgene":this.decode=ca,this.header.shift=1,this.delimiter=this.config.delimiter||/\s+/;break;case"refgene":this.decode=la,this.delimiter=this.config.delimiter||/\s+/,this.header.shift=1;break;case"bed":this.decode=ra,this.delimiter=this.config.delimiter||/\s+/;break;case"gappedpeak":this.decode=sa,this.delimiter=this.config.delimiter||/\s+/;break;case"bedmethyl":this.decode=oa,this.delimiter=this.config.delimiter||/\s+/;break;case"bedpe":case"hiccups":this.decode=Do,this.delimiter=this.config.delimiter||"\t";break;case"bedpe-domain":this.decode=To,this.headerLine=!0,this.delimiter=this.config.delimiter||"\t";break;case"bedpe-loop":this.decode=Do,this.delimiter=this.config.delimiter||"\t",this.header={colorColumn:7};break;case"interact":this.decode=Lo,this.delimiter=this.config.delimiter||/\s+/;break;case"snp":this.decode=ba,this.delimiter="\t";break;case"rmsk":this.decode=aa,this.delimiter="\t";break;case"gcnv":this.decode=Ia,this.delimiter="\t";break;case"shoebox":this.decode=Sa,this.delimiter="\t";break;default:const t=function(e){return Ea&&Ea[e]?function(e){const t=e.fields,i=["chr","start","end"];for(let n=0;n<t.length;n++)for(let r of i)r===t[n]&&(e[r]=n);return e}(Ea[e]):void 0}(e);void 0!==t?(this.decode=ka,this.header.customFormat=t,this.delimiter=t.delimiter||"\t"):(this.decode=ra,this.delimiter=this.config.delimiter||/\s+/)}}}function Ma(e){const t={},i=e.split(/(?:")([^"]+)(?:")|([^\s"]+)(?=\s+|$)/g);let n;const r=[];for(let e of i)e&&0!==e.trim().length&&(e.endsWith("=")?n=e:n?(r.push(n+e),n=void 0):r.push(e));for(let e of r){if(!e)return;var s=e.split("=",2);if(2===s.length){const e=s[0].trim(),i=s[1].trim();if(t.hasOwnProperty(e)){let n=t[e];Array.isArray(n)?n.push(i):t[e]=[n,i]}else t[e]=i}}return"interact"==t.type?t.format="interact":"gcnv"===t.type&&(t.format="gcnv"),t}function Ra(e){let t={},i=e.split(/\s+/);if(2===i.length){i[1].split(";").forEach((function(e){let i=e.split("=");"color"===i[0]?t.colorColumn=Number.parseInt(i[1])-1:"thickness"===i[0]&&(t.thicknessColumn=Number.parseInt(i[1])-1)}))}return t}function Ba(e){const t=e.split(/\s+/);return{format:"fixedStep",chrom:t[1].split("=")[1],start:parseInt(t[2].split("=")[1],10)-1,step:parseInt(t[3].split("=")[1],10),span:t.length>4?parseInt(t[4].split("=")[1],10):1,index:0}}function Da(e){const t=e.split(/\s+/);return{format:"variableStep",chrom:t[1].split("=")[1],span:t.length>2?parseInt(t[2].split("=")[1],10):1}}function Ta(e,i){const n=t({class:"igv-menu-popup-check-container"}),r=t();n.appendChild(r);const s=l("check",!0===i?"#444":"transparent");r.appendChild(s);const o=t();return o.innerText=e,n.appendChild(o),n}function za(e,t){t=t||Number.MAX_SAFE_INTEGER;const i=[];e.sort((function(e,t){return e.start-t.start})),i.push(-1e3);for(let n of e){let e=0;const r=Math.min(i.length,t);for(e=0;e<r;e++)if(n.start>=i[e]){n.row=e,i[e]=n.end;break}n.row=e,i[e]=n.end}}async function La(e,t,i){const n=e=>{const i=Object.assign({},e);return i.chr="all",i.start=t.getGenomeCoordinate(e.chr,e.start),i.end=t.getGenomeCoordinate(e.chr,e.end),i._f=e,i.exons&&delete i.exons,i},r=new Set(t.wgChromosomeNames),s=[];let o=0;for(let a of t.wgChromosomeNames){if(Array.isArray(e)){const i={};for(let n of e){const e=t.getChromosomeName(n.chr);i.hasOwnProperty(e)||(i[e]=[]),i[e].push(n)}e=i}const c=e[a];if(c){const e=i||1e4;for(let i of c){let a=t.getChromosomeName(i.chr);if(r.has(a))if(s.length<e)s.push(n(i));else{const t=e/(o+1);if(Math.random()<t){s[Math.floor(Math.random()*(e-1))]=n(i)}}o++}}}return s.sort((function(e,t){return e.start-t.start})),s}function Ha(e,t,i){if(t=t||1e3,null==e||0===e.length)return;const n={},r=[];for(let t of e)if(i&&!i(t))t.row=void 0;else{const e=t.chr;let i=n[e];i||(i=[],n[e]=i,r.push(e)),i.push(t)}for(let e of r)za(n[e],t)}class Pa{static defaultColor="rgb(150,150,150)";static defaults={height:50,autoHeight:!1,visibilityWindow:void 0,color:void 0,altColor:void 0,supportHiDPI:!0,selected:!1};constructor(e,t){this.browser=t,this.init(e)}init(e){this.config=e,e.displayMode&&(e.displayMode=e.displayMode.toUpperCase());const t=Object.assign({},Pa.defaults);if(this.constructor.defaults)for(let e of Object.keys(this.constructor.defaults))t[e]=this.constructor.defaults[e];for(let n of Object.keys(t))this[n]=e.hasOwnProperty(n)?e[n]:t[n],"color"!==n&&"altColor"!==n||!this[n]||(this[n]=b(i=this[n])&&i.indexOf(",")>0&&!i.startsWith("rgb(")&&!i.startsWith("rgba(")?`rgb(${i})`:i);var i;e.name||e.label?this.name=e.name||e.label:_(e.url)?this.name=e.url.name:b(e.url)&&!e.url.startsWith("data:")&&(this.name=C(e.url)),this.url=e.url,this.config.type&&(this.type=this.config.type),this.id=void 0===this.config.id?this.name:this.config.id,this.order=e.order,this.autoscaleGroup=e.autoscaleGroup,this.removable=void 0===e.removable||e.removable,this.minHeight=e.minHeight||Math.min(25,this.height),this.maxHeight=e.maxHeight||Math.max(1e3,this.height),e.onclick&&(this.onclick=e.onclick,e.onclick=void 0),e.description&&("function"==typeof e.description?this.description=e.description:this.description=()=>e.description),e.hoverTextFields?this.hoverText=Oa.bind(this):"function"==typeof this.config.hoverText&&(this.hoverText=this.config.hoverText)}async postInit(){return this._initialColor=this.color||this.constructor.defaultColor,this._initialAltColor=this.altColor||this.constructor.defaultColor,this}get name(){return this._name}set name(e){this._name=e,this.trackView&&this.trackView.setTrackLabelName(e)}clearCachedFeatures(){this.trackView&&this.trackView.clearCachedFeatures()}updateViews(){this.trackView&&this.trackView.updateViews()}repaintViews(){this.trackView&&this.trackView.repaintViews()}getState(){const e={},t=Object.keys(this.config).filter((e=>{return!(void 0===(t=this.config[e])||"function"==typeof t||t instanceof Promise);var t}));for(const i of t)i.startsWith("_")||(e[i]=this.config[i]);for(let t of Object.keys(e)){if(t.startsWith("_"))continue;const i=this[t];void 0===i||!Us(i)&&"boolean"!=typeof i&&"metadata"!==t||(e[t]=i)}const i=Object.assign({},Pa.defaults);if(this.constructor.defaults)for(let e of Object.keys(this.constructor.defaults))i[e]=this.constructor.defaults[e];for(let t of Object.keys(i))void 0!==this[t]&&i[t]!==this[t]&&(e[t]=this[t]);return!this.autoscale&&this.dataRange&&(e.min=this.dataRange.min,e.max=this.dataRange.max),this.autoscaleGroup&&(e.autoscaleGroup=this.autoscaleGroup),e}get supportsWholeGenome(){return!0===this.config.supportsWholeGenome}hasSamples(){return!1}getGenomeId(){return this.browser.genome?this.browser.genome.id:void 0}setTrackProperties(e){if(this.disposed)return;const t={};let i;for(let n of Object.keys(e))switch(n.toLowerCase()){case"usescore":t.useScore=1===e[n]||"1"===e[n]||"on"===e[n]||!0===e[n];break;case"visibility":switch(e[n]){case"2":case"3":case"pack":case"full":t.displayMode="EXPANDED";break;case"4":case"squish":t.displayMode="SQUISHED";break;case"1":case"dense":t.displayMode="COLLAPSED"}break;case"color":case"altcolor":t[n]=e[n].startsWith("rgb(")?e[n]:"rgb("+e[n]+")";break;case"featurevisiblitywindow":case"visibilitywindow":t.visibilityWindow=Number.parseInt(e[n]);break;case"maxheightpixels":i=e[n].split(":"),3===i.length&&(t.minHeight=Number.parseInt(i[2]),t.height=Number.parseInt(i[1]),t.maxHeight=Number.parseInt(i[0]));break;case"viewlimits":if(!this.config.autoscale&&!this.config.max){i=e[n].split(":");let r,s=0;1==i.length?r=Number(i[0]):2==i.length&&(s=Number(i[0]),r=Number(i[1])),Number.isNaN(r)||Number.isNaN(s)?console.warn(`Unexpected viewLimits value in track line: ${e.viewLimits}`):(t.autoscale=!1,t.dataRange={min:s,max:r},this.viewLimitMin=s,this.viewLimitMax=r)}case"name":t[n]=e[n];break;case"url":t.infoURL=e[n];break;case"type":const r=e[n];Va.has(r)?t[n]=Va.get(r):t[n]=r;break;case"graphtype":t.graphType=e[n];break;default:t[n]=e[n]}for(let e of Object.keys(t))if(!this.config.hasOwnProperty(e)||"name"===e&&this.config._derivedName){let i=t[e];if("true"===i&&(i=!0),"false"===i&&(i=!1),this[e]=i,"height"===e&&this.trackView)try{const e=Number.parseInt(i);this.trackView.setTrackHeight(e)}catch(e){console.error(e)}}}clickedFeatures(e){const t=e.viewport.cachedFeatures;if(!t||!Array.isArray(t)||0===t.length)return[];const i=e.genomicLocation,n=e.referenceFrame.bpPerPixel>.2?3*e.referenceFrame.bpPerPixel:.2;return Qn(t,i-n,i+n)}extractPopupData(e,t){const i=new Set(["row","color","chr","start","end","cdStart","cdEnd","strand","alpha"]),n=[];let r,s;for(let t in e)if(e.hasOwnProperty(t)&&!i.has(t)&&Us(e[t])){let i=e[t];n.push({name:A(t),value:i}),"alleles"===t?r=e[t]:"alleleFreqs"===t&&(s=e[t])}if(r&&s){r.endsWith(",")&&(r=r.substr(0,r.length-1)),s.endsWith(",")&&(s=s.substr(0,s.length-1));let i=r.split(","),o=s.split(",");if(o.length>1){let r=[];for(let e=0;e<o.length;e++)r.push({a:i[e],af:Number(o[e])});r.sort((function(e,t){return e.af-t.af}));let s=r[r.length-1].a;if(1===s.length)for(let i=r.length-2;i>=0;i--){let o=r[i].a;if(1===o.length){t||(t=this.getGenomeId());const i=Pa.getCravatLink(e.chr,e.start+1,s,o,t);console.log(i),i&&(n.push("<hr/>"),n.push({html:i}),n.push("<hr/>"))}}}}if(e.attributes)for(let t of Object.keys(e.attributes))n.push({name:t,value:e.attributes[t]});let o=`${e.chr}:${F(e.start+1)}-${F(e.end)}`;return e.strand&&(o+=` (${e.strand})`),n.push({name:"Location",value:o}),n}description(){const e=(e,t)=>`<div class="igv-track-label-popup-shim"><b>${e}: </b>${t}</div>`;let t='<div class="igv-track-label-popup">';if(this.url?_(this.url)?t+=e("Filename",this.url.name):t+=e("URL",this.url):t=this.name,this.config){if(this.config.metadata)for(let i of Object.keys(this.config.metadata)){t+=e(i,this.config.metadata[i])}for(let i of Object.keys(this.config)){if(i.startsWith("_"))continue;let n=i.substr(0,1);if(n!==n.toLowerCase()){const n=this.config[i];n&&Us(n)&&(t+=e(i,n))}}}return t+="</div>",t}getColorForFeature(e){return"function"==typeof this.color?this.color(feature):this.color}numericDataMenuItems(){const e=[];if("heatmap"!==this.graphType){e.push("<hr/>");const t=e=>{this.trackView.track.selected?this.browser.dataRangeDialog.configure(this.trackView.browser.getSelectedTrackViews()):this.browser.dataRangeDialog.configure(this.trackView),this.browser.dataRangeDialog.present(e)};if(e.push({label:"Set data range",dialog:t}),void 0!==this.logScale){const t=()=>{this.logScale=!this.logScale,this.trackView.repaintViews()};e.push({element:Ta("Log scale",this.logScale),click:t})}const i=()=>{this.autoscaleGroup=void 0,this.autoscale=!this.autoscale,this.browser.updateViews()};e.push({element:Ta("Log scale",this.autoscale),click:i})}return e}setDataRange({min:e,max:t}){this.dataRange={min:e,max:t},this.autoscale=!1,this.autoscaleGroup=void 0,this.trackView.repaintViews()}async nextFeatureAfter(e,t,i){let n=this.trackView.viewports[0].cachedFeatures;if(n&&Array.isArray(n)&&n.length>0){if(this.browser.genome.getChromosomeName(n[0].chr)===e){const e=function(e,t,i=!0){const n=e=>(e.start+e.end)/2,r=i?(e,t)=>e.start-t.start+e.end-t.end:(e,t)=>t.start-e.start+t.end-e.end,s=Array.from(e);s.sort(r);let o=0,a=s.length;for(;o<a;){let e=Math.floor((o+a)/2);i?n(s[e])<=t?o=e+1:a=e:n(s[e])>=t?o=e+1:a=e}return s[o]}(n,t,i);if(e)return e}}if("function"==typeof this.featureSource.nextFeature)return this.featureSource.nextFeature(e,t,i,this.visibilityWindow)}dispose(){this.disposed=!0;for(let e of Object.keys(this))this[e]=void 0}static getCravatLink(e,t,i,n,r){if("hg38"===r||"GRCh38"===r){return`<a target="_blank" href="https://run.opencravat.org/result/nocache/variant.html?chrom=${e.startsWith("chr")?e:"chr"+e}&pos=${t}&ref_base=${i}&alt_base=${n}"><b>Cravat ${i}->${n}</b></a>`}}static localFileInspection(e){const t=Object.assign({},e),i={url:"file",indexURL:"indexFile"};for(const e of["url","indexURL"])t[e]&&t[e]instanceof File&&(t[i[e]]=t[e].name,delete t[e]);return t}set filter(e){this._filter=e,this.trackView.repaintViews()}getInViewFeatures(){const e=[];for(let t of this.trackView.viewports)if(t.isVisible()){const i=t.referenceFrame;i.chr;const n=i.start,r=n+i.toBP(t.getWidth());if(t.cachedFeatures){const i=Qn(t.cachedFeatures,n,r);for(let t of i)this._filter&&!this._filter(t)||e.push(t)}}return e}getFilterableAttributes(){return{}}}function Oa(e){if(!this.hoverTextFields)return;const t=this.clickedFeatures(e);if(t&&t.length>0){let e="";for(let i=0;i<t.length;i++){if(10===i){e+="; ...";break}if(!t[i])continue;const n=t[i]._f||t[i];e.length>0&&(e+="\n"),e="";for(let t of this.hoverTextFields)e.length>0&&(e+="\n"),n.hasOwnProperty(t)?e+=n[t]:"function"==typeof n.getAttribute&&(e+=n.getAttribute(t))}return e}}const Va=new Map([["wiggle_0","wig"],["bed","bed"],["bigBed","bigBed"],["bigWig","bigWig"]]);class qa{constructor(e){switch(this.type=e||"seg",this.type){case"mut":this.sampleColumn=3,this.chrColumn=0,this.startColumn=1,this.endColumn=2,this.dataColumn=4;break;case"maf":this.sampleColumn=15,this.chrColumn=4,this.startColumn=5,this.endColumn=6,this.dataColumn=8;break;default:this.sampleColumn=0,this.chrColumn=1,this.startColumn=2,this.endColumn=3}}async parseHeader(e){let t;for(;void 0!==(t=await e.nextLine());)if(!t.startsWith("#")){const e=t.split("\t");this.header={headings:e};break}return this.header}async parseFeatures(e){const t=[];let i;this.header||(this.header=await this.parseHeader(e)),"seg"===this.type&&(this.dataColumn=this.header.headings.length-1),this.header.headings.length>5&&(i=this.extractExtraColumns(this.header.headings));const n=this.header.headings[this.dataColumn];let r;for(;void 0!==(r=await e.nextLine());){const e=r.split("\t"),s="seg"===this.type?Number(e[this.dataColumn]):e[this.dataColumn];if(e.length>this.dataColumn){const r=new Qa({sample:e[this.sampleColumn],chr:e[this.chrColumn],start:parseInt(e[this.startColumn])-1,end:parseInt(e[this.endColumn]),value:s,valueColumnName:n});if(i){const t=this.extractExtraColumns(e);r.setAttributes({names:i,values:t})}t.push(r)}}return t}extractExtraColumns(e){const t=[];for(let i=0;i<e.length;i++)i!==this.chrColumn&&i!==this.startColumn&&i!==this.endColumn&&i!==this.sampleColumn&&t.push(e[i]);return t}}class Qa{constructor({sample:e,chr:t,start:i,end:n,value:r,valueColumnName:s}){this.sample=e,this.chr=t,this.start=i,this.end=n,this.value=r,this.valueColumnName=s}setAttributes({names:e,values:t}){this.attributeNames=e,this.attributeValues=t}getAttribute(e){if(this.attributeNames){const t=this.attributeNames.indexOf(e);if(t>=0)return this.attributeValues[t]}}popupData(e,t){const i=new Set(["chr","start","end","sample","value","row","color","sampleKey","uniqueSampleKey","sampleId","chromosome","uniquePatientKey"]),n=this.chr+":"+F(this.start+1)+"-"+F(this.end),r=[{name:"Sample",value:this.sample},{name:"Location",value:n},{name:this.valueColumnName?A(this.valueColumnName):"Value",value:this.value}];if("mut"===e&&"hg38"===t){const e=this.extractCravatLink(t);e&&(r.push("<hr/>"),r.push({html:e}),r.push("<hr/>"))}if(this.attributeNames&&this.attributeNames.length>0)for(let e=0;e<this.attributeNames.length;e++)!i.has(this.attributeNames[e])&this.valueColumnName!==this.attributeNames[e]&&r.push({name:A(this.attributeNames[e]),value:this.attributeValues[e]});return r}extractCravatLink(e){let t,i;if(this.attributeNames&&this.attributeNames.length>0)for(let n=0;n<this.attributeNames.length;n++)if(t||"Reference_Allele"!==this.attributeNames[n]||(t=this.attributeValues[n]),!i&&this.attributeNames[n].startsWith("Tumor_Seq_Allele")&&this.attributeValues[n]!==t&&(i=this.attributeValues[n]),t&&i)return Pa.getCravatLink(this.chr,this.start+1,t,i,e)}}const Ua=new Map([["REF","referenceBases"],["ALT","alternateBases"],["QUAL","quality"],["FILTER","filter"]]);class ja{constructor(e){this.chr=e[0],this.pos=parseInt(e[1]),this.names=e[2],this.referenceBases=e[3],this.alternateBases=e[4],this.quality=e[5],this.filter=e[6],this.info={};const t=e[7];if(t&&"."!==t)for(let e of t.split(";")){var i=e.split("=");this.info[i[0]]=i[1]}this.init()}getAttributeValue(e){return Ua.has(e)&&(e=Ua.get(e)),this.hasOwnProperty(e)?this[e]:this.info[e]}init(){const e=this.referenceBases,t=this.alternateBases;if(this.info&&(this.info.VT?this.type=this.info.VT:this.info.SVTYPE?this.type="SV":this.info.PERIOD&&(this.type="STR")),void 0===this.type&&(this.type=function(e,t){const i=e.length;if(void 0===t)return"UNKNOWN";if(0===t.trim().length||"<NON_REF>"===t||"<*>"===t||"."===t)return"NONVARIANT";{const e=t.split(",").map((function(e){return 1===i&&1===e.length?"SNP":"<NON_REF>"===e?"NONVARIANT":e.length>i&&Ka(e)?"INSERTION":e.length<i&&Ka(e)?"DELETION":"OTHER"}));let n=e[0];for(let t of e)if(t!==n)return"MIXED";return n}}(e,t)),this.info.END)this.start=this.pos-1,this.info.CHR2&&this.info.CHR2!==this.chr?this.end=this.start+1:this.end=Number.parseInt(this.info.END);else if("NONVARIANT"===this.type)this.start=this.pos-1,this.end=this.start+e.length;else{const i=t.split(",").filter((e=>e.length>0));this.alleles=[],this.start=void 0,this.end=void 0;for(let t of i)if(this.alleles.push(t),"SV"!==this.type&&Ka(t)){let i=t.length,n=e.length;const r=Math.min(i,n);let s=0;for(;s<r&&e.charCodeAt(s)===t.charCodeAt(s);)s++,i--,n--;for(;i>0&&n>0;){const r=s+i-1,o=s+n-1;if(t.charCodeAt(r)!==e.charCodeAt(o))break;i--,n--}for(;i>0&&n>0;){const r=s,o=s;if(t.charCodeAt(r)!==e.charCodeAt(o))break;s++,i--,n--}const o=this.pos+s-1,a=o+n;this.start=void 0===this.start?o:Math.min(this.start,o),this.end=void 0===this.end?a:Math.max(this.end,a)}void 0===this.start&&(this.start=this.pos-1,this.end=this.pos),this.start===this.end&&(this.start-=.5,this.end+=.5)}}popupData(e,t){const i=`${F(this.pos)}`,n=this.start===this.end?`${F(this.start)} | ${F(this.start+1)}`:`${F(this.start+1)}-${F(this.end)}`,r=[{name:"Chr",value:this.chr},{name:"Pos",value:i},{name:"Loc",value:n},{name:"ID",value:this.names?this.names:""},{name:"Ref",value:this.referenceBases},{name:"Alt",value:this.alternateBases.replace("<","<")},{name:"Qual",value:this.quality},{name:"Filter",value:this.filter}];if(this.type&&r.push({name:"Type",value:this.type}),"SNP"===this.type){let e=this.referenceBases;if(1===e.length){let i=this.alternateBases.split(",");for(let n of i)if(1===n.length){let i=Pa.getCravatLink(this.chr,this.pos,e,n,t);i&&(r.push("<hr/>"),r.push({html:i}))}}}const s=Object.keys(this.info);if(this.info&&s.length>0){r.push({html:'<hr style="border-top: dotted 1px;border-color: #c9c3ba" />'});for(let e of s)r.push({name:e,value:Ya(decodeURIComponent(this.info[e]))})}return r}getInfo(e){return this.info?this.info[e]:void 0}isRefBlock(){return"NONVARIANT"===this.type}isFiltered(){return!("."===this.filter||"PASS"===this.filter)}alleleFreq(){return this.info?this.info.AF:void 0}}class Ga{constructor(e){this.mate=e,this.chr=e.info.CHR2,this.pos=Number.parseInt(e.info.END),this.start=this.pos-1,this.end=this.pos}get info(){return this.mate.info}get names(){return this.mate.names}get referenceBases(){return this.mate.referenceBases}get alternateBases(){return this.mate.alternateBases}get quality(){return this.mate.quality}get filter(){return this.mate.filter}get calls(){return this.mate.calls}getAttributeValue(e){return this.mate.getAttributeValue(e)}getInfo(e){this.mate.getInfo(e)}isFiltered(){return this.mate.isFiltered()}alleleFreq(){return this.mate.alleleFreq()}popupData(e,t){const i=[];return i.push("SV Breakpoint"),i.push({name:"Chr",value:this.chr}),i.push({name:"Pos",value:`${F(this.pos)}`}),i.push({html:'<hr style="border-top: dotted 1px;border-color: #c9c3ba" />'}),i.push("SV"),i.push(...this.mate.popupData(e,t)),i}}class Wa{constructor({formatFields:e,sample:t,token:i}){this.info={},this.sample=t;const n=i.split(":");for(let t=0;t<n.length;t++){const i=n[t];if(t==e.genotypeIndex){this.genotype=[];for(let e of i.split(/[\|\/]/))this.genotype.push("."===e?e:parseInt(e))}else this.info[e.fields[t]]=i}}get zygosity(){if(!this._zygosity)if(this.genotype){let e=!0,t=!0,i=!1;for(let n of this.genotype){if("."===n){i=!0;break}0!==n&&(t=!1),0===n&&(e=!1)}this._zygosity=i?"nocall":t?"homref":e?"homvar":"hetvar"}else this._zygosity="unknown";return this._zygosity}zygosityScore(){switch(this.zygosity){case"homvar":return 4;case"hetvar":return 3;case"homref":return 2;case"nocall":return 1;default:return 0}}#l(){switch(this.zygosity){case"homref":return"Homozygous reference";case"homvar":return"Homozygous variant";case"hetvar":return"Heterozygous";default:return""}}popupData(e,t){const i=[];void 0!==this.sample&&i.push({name:"Sample",value:this.sample}),this.genotypeString&&i.push({name:"Genotype",value:this.genotypeString});const n=this.#l();n&&i.push({name:"Zygosity",value:n});var r=Object.keys(this.info);r.length&&i.push("<hr/>");for(let e of r)i.push({name:e,value:decodeURIComponent(this.info[e])});return i}}const $a=new Set(["A","C","T","G"].map((e=>e.charCodeAt(0))));function Ka(e){for(let t=0;t<e.length;t++)if(!$a.has(e.charCodeAt(t)))return!1;return!0}function Ya(e,t){return void 0===t&&(t=","),Array.isArray(e)?e.join(t):e}class Xa{construtor(){}async parseHeader(e,t){const i={};i.chrAliasTable=new Map;let n=await e.nextLine();if(!n.startsWith("##fileformat"))throw new Error("Invalid VCF file: missing fileformat line");for(i.version=n.substr(13);void 0!==(n=await e.nextLine())&&n.startsWith("#");){let e;const s={};if(n.startsWith("##")){if(n.startsWith("##INFO")||n.startsWith("##FILTER")||n.startsWith("##FORMAT")){const t=n.indexOf("<"),o=n.lastIndexOf(">");if(!(t>2&&o>0)){console.log("Malformed VCF header line: "+n);continue}const a=n.substring(2,t-1);i[a]||(i[a]={});const c=y(n.substring(t+1,o-1),",");for(let t of c){var r=t.split("=");r.length>1&&("ID"===r[0]?e=r[1]:s[r[0]]=r[1])}e&&(i[a][e]=s)}else if(n.startsWith("##contig")&&t){const e=n.indexOf("<ID=");let r=n.indexOf(",",e);-1==r&&(r=n.indexOf(">",e));const s=n.substring(e+4,r),o=t.getChromosomeName(s);i.chrAliasTable.set(o,s)}}else if(n.startsWith("#CHROM")){const e=n.split("\t");if(e.length>8){i.sampleNameMap=new Map;for(let t=9;t<e.length;t++)i.sampleNameMap.set(e[t],t-9)}}}return this.header=i,i}async parseFeatures(e){const t=[],i=this.header.sampleNameMap?Array.from(this.header.sampleNameMap.keys()):void 0,n=8+(i?i.length+1:0);let r;for(;void 0!==(r=await e.nextLine());)if(r&&!r.startsWith("#")){const e=r.trim().split("\t");if(e.length===n){const n=new ja(e);if(n.header=this.header,t.push(n),e.length>9){const r=Za(e[8].split(":"));n.calls=[];for(let t=9;t<e.length;t++){const s=i[t-9],o=e[t],a=new Wa({formatFields:r,sample:s,token:o});n.calls.push(a)}n.info&&n.info.CHR2&&n.info.END&&t.push(new Ga(n))}}}return t}}function Za(e){const t={genotypeIndex:-1,fields:e};for(let i=0;i<e.length;i++)"GT"===e[i]&&(t.genotypeIndex=i);return t}const Ja=Math.log10(Number.MIN_VALUE);class ec{constructor(e){if(this.config=e,e.columns){if(void 0===e.columns.chromosome||void 0===e.columns.position||void 0===e.columns.value)throw Error("columns property must define chrCol, posCol, and valueCol");this.posCol=e.columns.position-1,this.chrCol=e.columns.chromosome-1,this.valueCol=e.columns.value-1}else this.posCol=2,this.chrCol=1,this.valueCol=3}async parseHeader(e){const t=await e.nextLine();return this.parseHeaderLine(t)}parseHeaderLine(e){if(this.columns=e.split(/\t/),!this.config.columns)for(let e=0;e<this.columns.length;e++){switch(this.columns[e].toLowerCase()){case"chr":case"chromosome":case"chr_id":this.chrCol=e;break;case"bp":case"pos":case"position":case"chr_pos":this.posCol=e;break;case"p":case"pval":case"pvalue":case"p-value":case"p.value":this.valueCol=e}}return this.columns}async parseFeatures(e){const t=[],i=e.nextLine();let n;this.columns||this.parseHeaderLine(i);const r=e=>{const t=e.indexOf("E");if(t>0){if(Number.parseInt(e.substring(t+1))<Ja)return Number.MIN_VALUE}return Number(e)};for(;void 0!==(n=e.nextLine());){const e=n.split(/\t/);if(e.length===this.columns.length){const i=e[this.posCol];if(i.indexOf(";")>0||0==i.length||i.indexOf("x")>0)continue;const s=e[this.chrCol],o=r(e[this.valueCol]),a=parseInt(i)-1,c=a+1;t.push(new tc({chr:s,start:a,end:c,value:o,line:n,columns:this.columns}))}}return t}static isGWAS(e){const t=e.split("\t");if(t.length<5)return!1;const i=[["chr","chromosome","chr_id","chrom"],["bp","pos","position","chr_pos","chromEnd"],["p","pval","p-value","p.value"]];for(let e of i)if(!t.some((t=>e.includes(t.toLowerCase()))))return!1;return!0}}class tc{constructor({chr:e,start:t,end:i,value:n,line:r,columns:s}){this.chr=e,this.start=t,this.end=i,this.value=n,this.line=r,this.columns=s}popupData(){const e=this.line.split(/\t/);return this.columns.map((function(t,i){return{name:t,value:e[i]}}))}getAttribute(e){const t=this.line.split(/\t/);for(let i=0;i<this.columns.length;i++)if(this.columns[i]===e)return t[i]}}var ic=new RegExp("([^:]*)\\(([^)]*)\\)"),nc=new RegExp("([^:]*):([^(]*)\\(([^)]*)\\)");class rc{constructor(e){const t=e?e.decode:void 0;this.nameField=e?e.nameField:void 0,this.skipRows=0,this.decode=t||hc,this.delimiter="\t"}async parseHeader(e){let t,i;for(;(t=await e.nextLine())&&(t.startsWith("track")||t.startsWith("#")||t.startsWith("browser"));)if(t.startsWith("track")||t.startsWith("#track")){let e=ac(t);i?Object.assign(i,e):i=e}else if(t.startsWith("#columns")){let e=cc(t);i?Object.assign(i,e):i=e}else t.startsWith("##gff-version 3")&&(this.format="gff3",i||(i={}),i.format="gff3");return this.header=i,i}async parseFeatures(e){const t=[],i=this.decode,n=this.delimiter||"\t";let r,s=0;for(;void 0!==(r=e.nextLine());){if(s++,s<=this.skipRows||r.startsWith("track")||r.startsWith("#")||r.startsWith("browser"))continue;let e=o();if(e.length<1)continue;if(!this.aed){this.aed=oc(e);continue}const n=i.call(this,e,undefined);n&&t.push(n)}return t;function o(){for(var e,t,i=[],s="",o=!1;r||""===r;){for(e=0;e<r.length;e++)(t=r.charAt(e))===n?o?s+=t:(i.push(s),s=""):'"'===t?e+1<r.length&&'"'===r.charAt(e+1)?(o&&(s+='"'),e++):o=!o:s+=t;if(!o)break;s+="\n",r=nextLine()}return i.push(s),i}}}function sc(e){var t=nc.exec(e);if(t)return{namespace:t[1],name:t[2],type:t[3]};if(t=ic.exec(e))return{namespace:"?",name:t[1],type:t[2]};throw new Error("Error parsing the header row of AED file - column not in ns:name(ns:type) format")}function oc(e){var t,i,n;for(t={columns:[],metadata:{}},i=0;i<e.length;i++)n=sc(e[i]),t.columns.push(n);return t}function ac(e){const t={},i=e.split(/(?:")([^"]+)(?:")|([^\s"]+)(?=\s+|$)/g);let n;const r=[];for(let e of i)e&&0!==e.trim().length&&(e.endsWith("=")>0?n=e:n?(r.push(n+e),n=void 0):r.push(e));for(let e of r){if(!e)return;var s=e.split("=",2);if(2===s.length){const e=s[0].trim(),i=s[1].trim();t[e]=i}}return t}function cc(e){let t={},i=e.split(/\s+/);if(2===i.length){i[1].split(";").forEach((function(e){let i=e.split("=");"color"===i[0]?t.colorColumn=Number.parseInt(i[1])-1:"thickness"===i[0]&&(t.thicknessColumn=Number.parseInt(i[1])-1)}))}return t}function lc(e,t){var i,n,r=e.columns;this.aed=e,this.allColumns=t,this.chr=null,this.start=null,this.end=null,this.score=1e3,this.strand=".",this.cdStart=null,this.cdEnd=null,this.name=null,this.color=null;for(let e=0;e<t.length;e++)if(i=t[e]){"aed:Integer"===(n=r[e]).type&&(i=parseInt(i));var s=[];if(n.namespace.length>0)for(let e=0;e<n.namespace.length;e++)s.push(n.namespace.charCodeAt(e));"bio"===n.namespace.trim()?"sequence"===n.name?this.chr=i:"start"===n.name?this.start=i:"end"===n.name?this.end=i:"cdsMin"===n.name?this.cdStart=i:"cdsMax"===n.name?this.cdEnd=i:"strand"===n.name&&(this.strand=i):"aed"===n.namespace?"name"===n.name&&(this.name=i):"style"===n.namespace&&"color"===n.name&&(this.color=un.createColorString(i))}}function hc(e,t){var i,n,r,s,o,a,c=0,l=this.aed.columns;if(e.length===l.length){for(a=0;a<e.length;a++)s=l[a],""!==(r=e[a])&&c++,"name"===s.name&&"aed"===s.namespace?i=r:"value"===s.name&&"aed"===s.namespace&&(n=r);if(2===c&&i&&n)return o=sc(i),this.aed.metadata[o.namespace]||(this.aed.metadata[o.namespace]={}),void(this.aed.metadata[o.namespace][o.name]||(this.aed.metadata[o.namespace][o.name]={type:o.type,value:n}));var h=new lc(this.aed,e);if(h.chr&&(h.start||0===h.start)&&h.end)return h;console.log("Cannot parse feature: "+e.join(","))}else console.log("Corrupted AED file row: "+e.join(","))}function dc(e,t){if(0===e.length)return e;if(e.sort((function(e,t){const i=e.minv.block-t.minv.block;return 0!==i?i:e.minv.offset-t.minv.offset})),e.length<=1)return e;t&&(e=e.filter((e=>e.maxv.isGreaterThan(t))));const i=[];let n;for(let t of e)n&&uc(n,t)?t.maxv.isGreaterThan(n.maxv)&&(n.maxv=t.maxv):(i.push(t),n=t);return i}function uc(e,t){const i=t.minv.block-e.maxv.block;return t.maxv.block-e.minv.block<5e6&&i<65e3}lc.prototype.popupData=function(){for(var e=[],t=this.aed,i=0;i<this.allColumns.length;i++){var n=this.allColumns[i],r=t.columns[i].name;"sequence"!==r&&"color"!==r&&n&&e.push({name:r,value:n})}return e};class fc{constructor(){this.tabix=!0}parse(e){const t=new Co(new DataView(e)),i=t.getInt();if(21582659!==i)throw 38359875===i?Error("CSI version 2 is not supported. Please enter an issue at https://github.com/igvteam/igv.js"):Error("Not a CSI index");this.indices=[],this.blockMin=Number.MAX_SAFE_INTEGER,this.lastBlockPosition=[],this.sequenceIndexMap={},this.minShift=t.getInt(),this.depth=t.getInt();const n=[];let r=0;if(t.getInt()>=28){t.getInt(),t.getInt(),t.getInt(),t.getInt(),t.getInt(),t.getInt();const e=t.getInt(),i=t.position+e;let r=0;for(;t.position<i;){let e=t.getString();this.sequenceIndexMap[e]=r,n[r]=e,r++}}const s=this.bin_limit()+1,o=t.getInt();for(let e=0;e<o;e++){const i=[],n=[],o=t.getInt();for(let e=0;e<o;e++){const e=t.getInt();if(n[e]=t.getVPointer(),e>s)t.getInt(),t.getVPointer(),t.getVPointer(),t.getLong(),t.getLong();else{i[e]=[];const n=t.getInt();for(let s=0;s<n;s++){const n=t.getVPointer(),s=t.getVPointer();n&&s&&(n.block<this.blockMin&&(this.blockMin=n.block),s.block>r&&(r=s.block),i[e].push([n,s]))}}}o>0&&(this.indices[e]={binIndex:i,loffset:n})}this.lastBlockPosition=r}get sequenceNames(){return Object.keys(this.sequenceIndexMap)}chunksForRange(e,t,i){const n=this.indices[e];if(n){const e=this.reg2bins(t,i);if(0==e.length)return[];const r=[];for(let t of e)for(let e=t[0];e<=t[1];e++)if(n.binIndex[e]){const t=n.binIndex[e];for(let i of t){const t=i[0],n=i[1];r.push({minv:t,maxv:n,bin:e})}}let s=e[this.depth][0];do{if(n.binIndex[s])break;s>1+(this.getParentBin(s)<<3)?s--:s=this.getParentBin(s)}while(0!=s);return dc(r,n.loffset[s])}return[]}getParentBin(e){return 0==e?0:e-1>>3}reg2bins(e,t){(e-=1)<1&&(e=1),t>2**34&&(t=2**34),t-=1;let i=0,n=0,r=this.minShift+3*this.depth;const s=[];for(;i<=this.depth;r-=3,n+=1<<3*i,i+=1){const i=n+(e>>r),o=n+(t>>r);s.push([i,o])}return s}bin_limit(){return((1<<3*(this.depth+1))-1)/7}}class pc{constructor(){}async parse(e,t){const i=[];let n=Number.MAX_SAFE_INTEGER,r=0;const s=new Co(new DataView(e)),o=s.getInt(),a={};if(!(21578050===o||t&&21578324===o))throw new Error(indexURL+" is not a "+(t?"tabix":"bai")+" file");{const e=s.getInt();if(t){s.getInt(),s.getInt(),s.getInt(),s.getInt(),s.getInt(),s.getInt(),s.getInt();for(let t=0;t<e;t++){a[s.getString()]=t}}for(let t=0;t<e;t++){const e={},o=[],a=s.getInt();for(let t=0;t<a;t++){const t=s.getInt();if(37450===t)s.getInt(),s.getVPointer(),s.getVPointer(),s.getLong(),s.getLong();else{e[t]=[];const i=s.getInt();for(let o=0;o<i;o++){const i=s.getVPointer(),o=s.getVPointer();i&&o&&(i.block<n&&(n=i.block),o.block>r&&(r=o.block),e[t].push([i,o]))}}}const c=s.getInt();for(let e=0;e<c;e++){const e=s.getVPointer();o.push(e)}a>0&&(i[t]={binIndex:e,linearIndex:o})}this.firstBlockPosition=n,this.lastBlockPosition=r,this.indices=i,this.sequenceIndexMap=a,this.tabix=t}}get sequenceNames(){return Object.keys(this.sequenceIndexMap)}chunksForRange(e,t,i){const n=this.indices[e];if(n){const e=function(e,t){const i=[];t>=1<<29&&(t=1<<29);return--t,i.push([0,0]),i.push([1+(e>>26),1+(t>>26)]),i.push([9+(e>>23),9+(t>>23)]),i.push([73+(e>>20),73+(t>>20)]),i.push([585+(e>>17),585+(t>>17)]),i.push([4681+(e>>14),4681+(t>>14)]),i}(t,i),r=[];for(let t of e)for(let e=t[0];e<=t[1];e++)if(n.binIndex[e]){const t=n.binIndex[e];for(let e of t){const t=e[0],i=e[1];r.push({minv:t,maxv:i})}}const s=n.linearIndex.length;let o;const a=Math.min(t>>14,s-1),c=Math.min(i>>14,s-1);for(let e=a;e<=c;e++){const t=n.linearIndex[e];if(t){o=t;break}}return dc(r,o)}return[]}}class gc{constructor(){this.tribble=!0}async parse(e){let t=0;this.chrIndex={},this.lastBlockPosition=[];const i=new Co(new DataView(e));!function(e){e.getInt(),e.getInt();const t=e.getInt();if(e.getString(),e.getLong(),e.getLong(),e.getString(),e.getInt(),t>=3){let t=e.getInt();for(;t-- >0;)e.getString(),e.getString()}}(i);let n=i.getInt();for(;n-- >0;){let e=i.getString();const n=i.getInt(),r=i.getInt(),s=i.getInt();i.getInt(),i.getInt();let o=i.getLong();const a=[];for(let e=0;e<r;e++){const e=i.getLong();a.push({min:o,max:e}),o=e,e>t&&(t=e)}this.chrIndex[e]={chr:e,blocks:a,longestFeature:s,binWidth:n}}this.lastBlockPosition=t}get sequenceNames(){return Object.keys(this.chrIndex)}chunksForRange(e,t,i){const n=this.chrIndex[e];if(n){const e=n.blocks,r=n.longestFeature,s=n.binWidth,o=Math.max(t-r,0),a=Math.floor(o/s);if(a>=e.length)return[];{const t=Math.min(Math.floor((i-1)/s),e.length-1),n=e[a].min,r=e[t].max;if(0===r-n)return[];return[{minv:{block:n,offset:0},maxv:{block:r,offset:0}}]}}}}async function mc(e,t){let i=await Mn.loadArrayBuffer(e,js(t)),n=new DataView(i);if(31===n.getUint8(0)&&139===n.getUint8(1)){i=en(i).buffer,n=new DataView(i)}switch(n.getInt32(0,!0)){case 21578050:return async function(e){const t=new pc;return await t.parse(e,!1),t}(i);case 21578324:return async function(e){const t=new pc;return await t.parse(e,!0),t}(i);case 21582659:return async function(e){const t=new fc;return t.parse(e),t}(i);case 1480870228:return async function(e){const t=new gc;return t.parse(e),t}(i);case 38359875:throw Error("CSI version 2 is not supported.");default:throw Error(`Unrecognized index type: ${e}`)}}function wc(e){return"string"==typeof e||e instanceof String?new bc(e):new Fc(e)}class bc{constructor(e){this.data=e,this.ptr=0}nextLine(){var e=this.ptr,t=this.data.indexOf("\n",e),i=this.data;if(t>0)return this.ptr=t+1,t>e&&"\r"===i.charAt(t-1)?i.substring(e,t-1):i.substring(e,t);var n=i.length;return this.ptr=n,e>=n?void 0:i.substring(e)}}class Fc{constructor(e){this.data=e,this.length=this.data.length,this.ptr=0}nextLine(){if(this.ptr>=this.data.length)return;let e=this.ptr;const t=this.data;let i="",n=!1;for(;e<t.length;){var r=t[e],s=0,o=0;if(r<=127?(s=0,o=255&r):r<=223?(s=1,o=31&r):r<=239?(s=2,o=15&r):r<=244&&(s=3,o=7&r),t.length-e-s>0)for(var a=0;a<s;)o=o<<6|63&(r=t[e+a+1]),a+=1;else o=65533,s=t.length-e;e+=s+1;const c=String.fromCodePoint(o);if("\r"===c)n=!0;else{if("\n"===c)break;n&&(i+="\r",n=!1),i+=c}}return this.ptr=e,i}}class vc{constructor(e){this.config=e,this.filePtr=0,this.bufferPtr=0,this.buffer}async nextLine(){let e;try{for(;;){const t=this.buffer?this.buffer.length:0;for(;this.bufferPtr<t;){const t=String.fromCharCode(this.buffer[this.bufferPtr++]);if("\r"!==t){if("\n"===t)return e;e=e?e+t:t}}if(this.eof)return e;await this.readNextBlock()}}catch(t){return console.warn(t),this.eof=!0,e}}async readNextBlock(){const e=js(this.config,{range:{start:this.filePtr,size:26}}),t=tn(await Mn.loadArrayBuffer(this.config.url,e));if(0===t)this.eof=!0,this.buffer=void 0;else{const e=js(this.config,{range:{start:this.filePtr,size:t}}),i=await Mn.loadArrayBuffer(this.config.url,e);i.byteLength<t&&(this.eof=!0),this.buffer=en(i),0==this.buffer.byteLength&&(this.eof=!0),this.bufferPtr=0,this.filePtr+=i.byteLength}}}const yc=e=>{const t=ArrayBuffer.isView(e)?e:new Uint8Array(e);return 1+(t[17]<<8|t[16])};class Ac{constructor(e){this.config=e,this.cacheBlocks=0!=e.cacheBlocks,this.cache=void 0}async getData(e,t){const i=e.block,n=t.block,r=0===t.offset,s=await this.getInflatedBlocks(i,n,r);if(1===s.length)return s[0];let o=0;for(const e of s)o+=e.byteLength;const a=new Uint8Array(o);let c=0;for(const e of s)a.set(e,c),c+=e.byteLength;return a}async getInflatedBlocks(e,t,i){if(this.cacheBlocks){const n=this.cache;if(n&&n.startBlock<=e&&(n.endBlock>=t||i&&n.nextEndBlock===t)){const i=e-n.startBlock,r=t-n.startBlock;return _c(n.buffer,i,r)}{let r;if(!n||n.startBlock>t||n.endBlock<e)r=await this.loadBLockData(e,t,{skipEnd:i});else{const s=[];if(e<n.startBlock){const t=await this.loadBLockData(e,n.startBlock,{skipEnd:!0});s.push(t)}let o;if(e<=n.startBlock&&t>=n.endBlock)o=n.buffer;else{const i=Math.max(0,e-n.startBlock);let r;if(t>=n.endBlock)r=n.buffer.byteLength;else{const e=Cc(n.buffer);for(let i=0;i<e.length-1;i++)if(n.startBlock+e[i]===t){r=e[i+1];break}}o=n.buffer.slice(i,r)}if(s.push(o),t>n.endBlock){const e=await this.loadBLockData(n.endBlock,t,{skipStart:!0,skipEnd:i});s.push(e)}r=function(e){if(1===e.length)return e[0];let t=0;for(const i of e)t+=i.byteLength;const i=new Uint8Array(t);let n=0;for(const t of e)i.set(new Uint8Array(t),n),n+=t.byteLength;return i.buffer}(s)}let s=t;if(i){const e=Cc(r);t=e[e.length-1]}return this.cache={startBlock:e,endBlock:t,nextEndBlock:s,buffer:r},_c(r)}}return _c(await this.loadBLockData(e,t,{skipEnd:i}))}async loadBLockData(e,t,i){const n=this.config,r=i&&i.skipStart;let s=0;if(!(i&&i.skipEnd)){const e=js(n,{range:{start:t,size:26}}),i=await Mn.loadArrayBuffer(n.url,e);s=yc(i)}if(r){const t=js(n,{range:{start:e,size:26}}),i=await Mn.loadArrayBuffer(n.url,t);e+=yc(i)}const o=js(n,{range:{start:e,size:t+s-e}});return Mn.loadArrayBuffer(n.url,o)}}function Cc(e){const t=e.byteLength;let i=0;const n=[0];for(;i<t;){const r=new Uint8Array(e,i);i+=1+(r[17]<<8|r[16]),i<t&&n.push(i)}return n}function _c(e,t,i){const n=[];let r=t=t||0;const s=e.byteLength-18;for(;r<s;)try{const t=new Uint8Array(e,r,18),s=t[11]<<8|t[10],o=t[17]<<8|t[16],a=12+s+r,c=e.byteLength-a,l=o-s-18;if(c<l||l<=0)break;const h=new Uint8Array(e,a,l),d=Yi(h);if(n.push(d),i===r)break;r+=o+1}catch(e){console.error(e);break}return n}const xc=Math.log10(Number.MIN_VALUE);class kc{chrCol=-1;snpCol=-1;posCol=-1;pValueCol=-1;phenotypeColumn=-1;delimiter="\t";constructor(e){this.config=e}async parseHeader(e){const t=this.config;t.delimiter&&(this.delimiter=t.delimiter);const i=await e.nextLine(),n=this.parseHeaderLine(i);return t.chrColumn&&(this.chrColumn=t.chrColumn-1),t.snpColumn&&(this.snpColumn=t.snpColumn-1),t.posColumn&&(this.posColumn=t.posColumn-1),t.pValueColumn&&(this.pValueColumn=t.pValueColumn-1),t.phenotypeColumn&&(this.phenotypeColumn=t.phenotypeColumn-1),n}parseHeaderLine(e){this.columns=e.split(this.delimiter);for(let e=0;e<this.columns.length;e++){switch(this.columns[e].toLowerCase()){case"chr":case"chromosome":case"chr_id":case"chrom":this.chrColumn=e;break;case"bp":case"pos":case"position":case"chr_pos":case"chromEnd":this.posColumn=e;break;case"p":case"pval":case"pvalue":case"p-value":case"p.value":this.pValueColumn=e;break;case"rsid":case"variant":case"snp":this.snpColumn=e;break;case"phenotype":case"gene":case"gene_id":case"molecular_trait_id":this.phenotypeColumn=e}}return this.columns}async parseFeatures(e){const t=[],i=e.nextLine();let n;this.columns||this.parseHeaderLine(i);const r=e=>{const t=e.indexOf("E");if(t>0){if(Number.parseInt(e.substring(t+1))<xc)return Number.MIN_VALUE}return Number(e)};for(;void 0!==(n=e.nextLine());){const e=n.split(this.delimiter);if(e.length===this.columns.length){const i=e[this.posColumn];if(i.indexOf(";")>0||0==i.length||i.indexOf("x")>0)continue;const n=e[this.chrColumn],s=r(e[this.pValueColumn]),o=parseInt(i)-1,a=o+1,c=e[this.snpColumn],l=e[this.phenotypeColumn],h=new Ic({chr:n,start:o,end:a,pValue:s,snp:c,phenotype:l},this.columns,e);t.push(h)}}return t}static isQTL(e){const t=e.split("\t");if(t.length<5)return!1;const i=[["chr","chromosome","chr_id","chrom"],["bp","pos","position","chr_pos","chromEnd"],["p","pval","p-value","p.value"],["rsid","variant","snp"],["phenotype","gene","gene_id","molecular_trait_id"]];for(let e of i)if(!t.some((t=>e.includes(t.toLowerCase()))))return!1;return!0}}class Ic{constructor({chr:e,start:t,end:i,pValue:n,snp:r,phenotype:s},o,a){this.chr=e,this.start=t,this.end=i,this.pValue=n,this.snp=r,this.phenotype=s,this.headers=o,this.tokens=a}popupData(){const e=[];for(let t=0;t<this.headers.length;t++)e.push({name:this.headers[t],value:this.tokens[t]});return e}}class Sc{sequenceNames;constructor(e,t){if(this.config=e||{},this.genome=t,this.indexURL=e.indexURL,this.indexed=e.indexed||void 0!==this.indexURL,this.queryable=this.indexed,_(this.config.url))this.filename=this.config.url.name;else if(Xs(this.config.url))this.indexed=!1,this.dataURI=e.url;else{const t=k(this.config.url);this.filename=e.filename||t.file}this.parser=this.getParser(this.config),"vcf"!==this.config.format||this.config.indexURL||console.warn("Warning: index file not specified. The entire vcf file will be loaded.")}async defaultVisibilityWindow(){if(this.config.indexURL){const e=await this.getIndex();if(e&&e.lastBlockPosition){let t=0;const i=1e4;for(let i of e.sequenceNames){const e=this.genome.getChromosome(i);e&&(t+=e.bpLength)}return Math.round(t/e.lastBlockPosition*i)}}}async readFeatures(e,t,i){let n;this.dataURI||this.header||await this.readHeader();return await this.getIndex()?(this.indexed=!0,n=await this.loadFeaturesWithIndex(e,t,i)):this.dataURI?(this.indexed=!1,n=await this.loadFeaturesFromDataURI()):"service"===this.config.sourceType?n=await this.loadFeaturesFromService(e,t,i):(this.indexed=!1,n=await this.loadFeaturesNoIndex()),n.sort((function(e,t){return e.chr===t.chr?e.start-t.start:e.chr.localeCompare(t.chr)})),n}async readHeader(){if(this.dataURI)return await this.loadFeaturesFromDataURI(this.dataURI),this.header;if(this.config.indexURL){const e=await this.getIndex();if(!e)throw new Error("Unable to load index: "+this.config.indexURL);let t;if(this.sequenceNames=new Set(e.sequenceNames),e.tabix)this._blockLoader=new Ac(this.config),t=new vc(this.config);else{const i=Object.values(e.chrIndex).flatMap((e=>e.blocks)).map((e=>e.max)).reduce(((e,t)=>Math.min(e,t)),Number.MAX_SAFE_INTEGER),n=js(this.config,{bgz:e.tabix,range:{start:0,size:i}});t=wc(await Mn.loadString(this.config.url,n))}return this.header=await this.parser.parseHeader(t),this.header}if("service"!==this.config.sourceType){let e;if(this.config._filecontents)e=this.config._filecontents,delete this.config._filecontents;else{const t=js(this.config);e=await Mn.loadByteArray(this.config.url,t)}e.length<5e8&&(e=(new TextDecoder).decode(e));let t=wc(e);this.header=await this.parser.parseHeader(t),t=wc(e),this.features=await this.parser.parseFeatures(t),this.sequenceNames=new Set;for(let e of this.features)this.sequenceNames.add(e.chr);return this.header}if(this.config.seqnamesURL){const e=js(this.config,{}),t=await Mn.loadString(this.config.seqnamesURL,e);t&&(this.sequenceNames=new Set(t.split(",").map((e=>e.trim())).filter((e=>e))))}if(this.config.headerURL){const e=js(this.config,{}),t=wc(await Mn.loadString(this.config.headerURL,e));return this.header=await this.parser.parseHeader(t),this.header}}getParser(e){switch(e.format){case"vcf":return new Xa(e);case"seg":return new qa("seg");case"mut":return new qa("mut");case"maf":return new qa("maf");case"gwas":return new ec(e);case"qtl":return new kc(e);case"aed":return new rc(e);default:return new Na(e)}}async loadFeaturesNoIndex(){if(this.features){const e=this.features;return delete this.features,e}{const e=js(this.config),t=await Mn.loadByteArray(this.config.url,e);if(!this.header){const e=wc(t);this.header=await this.parser.parseHeader(e)}const i=wc(t),n=[];return await this._parse(n,i),n}}async loadFeaturesWithIndex(e,t,i){const n=this.config;this.parser;const r=this.index.tabix,s=r?this.index.sequenceIndexMap[e]:e;if(void 0===s)return[];const o=this.index.chunksForRange(s,t,i);if(o&&0!==o.length){const s=[];for(let a of o){let o;if(r)o=await this._blockLoader.getData(a.minv,a.maxv);else{const e=js(n,{range:{start:a.minv.block,size:a.maxv.block-a.minv.block+1}});o=await Mn.loadString(n.url,e)}const c=wc(a.minv.offset?o.slice(a.minv.offset):o);await this._parse(s,c,e,i,t)}return s}return[]}async loadFeaturesFromService(e,t,i){let n;n="function"==typeof this.config.url?this.config.url({chr:e,start:t,end:i}):this.config.url.replace("$CHR",e).replace("$START",t).replace("$END",i);const r=js(this.config),s=wc(await Mn.loadString(n,r)),o=[];return await this._parse(o,s),o}async _parse(e,t,i,n,r){let s=await this.parser.parseFeatures(t);if(s.sort((function(e,t){return e.chr===t.chr?e.start-t.start:e.chr.localeCompare(t.chr)})),void 0===i)for(let t of s)e.push(t);else{let t=!1;for(let o=0;o<s.length;o++){const a=s[o];if(a.chr===i){if(a.start>n){e.push(a);break}a.end>=r&&a.start<=n&&(t||(t=!0,o>0&&e.push(s[o-1])),e.push(a))}}}}async getIndex(){return this.index?this.index:this.config.indexURL?(this.index=await this.loadIndex(),this.index):void 0}async loadIndex(){return mc(this.config.indexURL,this.config)}async loadFeaturesFromDataURI(){if(this.features){const e=this.features;return delete this.features,e}{const e=on(this.dataURI);let t=wc(e);this.header=await this.parser.parseHeader(t),this.header instanceof String&&this.header.startsWith("##gff-version 3")&&(this.format="gff3"),t=wc(e);const i=[];return await this._parse(i,t),i}}}const Ec=b;class Nc{constructor(e){this.config=e}async readFeatures(e,t,i){let n;n="function"==typeof this.config.url?this.config.url({chr:e,start:t,end:i}):this.config.url.replace("$CHR",e).replace("$START",t).replace("$END",i);let r,s=Object.assign({},this.config);void 0!==this.config.body&&("function"==typeof this.config.body?s.body=this.config.body({chr:e,start:t,end:i}):s.body=this.config.body.replace("$CHR",e).replace("$START",t).replace("$END",i));const o=await Mn.load(n,s);if(o&&(r="function"==typeof this.config.parser?this.config.parser(o):Ec(o)?JSON.parse(o):o),this.config.mappings){let e=Object.keys(this.config.mappings);for(let t of r)for(let i of e)t[i]=t[this.config.mappings[i]]}return r}}const Mc=function(e,t){this.config=e,this.genome=t,this.expandQueryInterval=!1};Mc.prototype.readFeatures=function(e,t,i){const n=Math.max(0,Math.floor(t));let r=Math.ceil(i);if(this.genome){const t=this.genome.getChromosome(e);t&&r>t.bpLength&&(r=t.bpLength)}const s=this.config.url+"?db="+this.config.db+"&table="+this.config.tableName+"&chr="+e+"&start="+n+"&end="+r;return Mn.loadJson(s,this.config).then((function(e){return e?(e.forEach((function(e){e.hasOwnProperty("exonStarts")&&e.hasOwnProperty("exonEnds")&&e.hasOwnProperty("exonCount")&&e.hasOwnProperty("cdsStart")&&e.hasOwnProperty("cdsEnd")&&function(e){var t,i,n,r,s,o;t=e.exonCount,i=e.exonStarts.split(","),n=e.exonEnds.split(","),r=[];for(var a=0;a<t;a++){var c={start:s=parseInt(i[a]),end:o=parseInt(n[a])};(e.cdsStart>o||e.cdsEnd<e.cdsStart)&&(c.utr=!0),e.cdsStart>=s&&e.cdsStart<=o&&(c.cdStart=e.cdsStart),e.cdsEnd>=s&&e.cdsEnd<=o&&(c.cdEnd=e.cdsEnd),r.push(c)}e.exons=r}(e)})),e):null}))};class Rc{featureCaches=[];gtexChrs=new Set(["chr1","chr10","chr11","chr12","chr13","chr14","chr15","chr16","chr17","chr18","chr19","chr2","chr20","chr21","chr22","chr3","chr4","chr5","chr6","chr7","chr8","chr9","chrM","chrX","chrY"]);constructor(e){this.config=e,this.url=e.url,this.tissueId=e.tissueSiteDetailId,this.datasetId=e.datasetId||"gtex_v8"}async readFeatures(e,t,i){const n=e.startsWith("chr")?e:"MT"===e?"chrM":"chr"+e;if(!this.gtexChrs.has(n))return[];const r=Math.floor(t),s=Math.ceil(i),o=this.datasetId,a=this.url+"?chromosome="+n+"&start="+r+"&end="+s+"&tissueSiteDetailId="+this.tissueId+"&datasetId="+o,c=await Mn.loadJson(a,{withCredentials:this.config.withCredentials});return c&&c.singleTissueEqtl?c.singleTissueEqtl.map((e=>new Bc(e))):[]}}class Bc{constructor(e){this.chr=e.chromosome,this.start=e.pos-1,this.end=this.start+1,this.snp=e.snpId,this.phenotype=e.geneSymbol,this.pValue=e.pValue,this.json=e}popupData(){return Object.keys(this.json).map((e=>({name:e,value:this.json[e]})))}}class Dc{constructor(e,t){if(this.config=e,this.genome=t,!e.format)throw Error('Format is required, and must be either "bam" or "cram"');if(this.format=e.format.toUpperCase(),"BAM"!==this.format&&"VCF"!==this.format)throw Error(`htsget format ${e.format} is not supported`)}async readHeaderData(){const e=`${Tc(this.config)}?class=header&format=${this.format}`,t=await Mn.loadJson(e,js(this.config));return await this.loadUrls(t.htsget.urls)}async readData(e,t,i){const n=`${Tc(this.config)}?format=${this.format}&referenceName=${e}&start=${Math.floor(t)}&end=${Math.ceil(i)}`,r=await Mn.loadJson(n,js(this.config));return this.loadUrls(r.htsget.urls)}async loadUrls(e){const t=[];for(let i of e)if(i.url.startsWith("data:"))t.push(Promise.resolve(zc(i.url)));else{const e={headers:i.headers||{}};t.push(Mn.loadArrayBuffer(i.url,e))}return function(e){let t=0;for(let i of e)t+=i.byteLength;let i=0;const n=new Uint8Array(t);for(let t of e){const e=new Uint8Array(t);n.set(e,i),i+=e.length}return n}(await Promise.all(t))}static async inferFormat(e){try{const t=Tc(e),i=`${t}${t.includes("?")?"&":"?"}class=header`,n=await Mn.loadJson(i,js(e));if(n.htsget){const t=n.htsget.format;if("BAM"!==t&&"VCF"!==t)throw Error(`htsget format ${t} is not supported`);e.format=t.toLowerCase(),e.sourceType="htsget",e.name||(e.name=await Ks(e.url))}}catch(e){}}}function Tc(e){if(e.url&&e.endpoint&&e.id)return e.url+e.endpoint+e.id;if(e.endpoint&&e.id)return e.endpoint+e.id;if(e.url)return e.url.startsWith("htsget://")?e.url.replace("htsget://","https://"):e.url;throw Error("Must specify either 'url', or 'endpoint' and 'id")}function zc(e){const t=e.split(","),i=t[0].split(":")[1];let n=t[1];n=i.indexOf("base64")>=0?atob(n):decodeURI(n);const r=new Uint8Array(n.length);for(var s=0;s<n.length;s++)r[s]=n.charCodeAt(s);return r}class Lc extends Dc{constructor(e,t){super(e,t),this.parser=new Xa}async readHeader(){if(!this.header){let e=await this.readHeaderData();Zi(e)&&(e=Ji(e));const t=wc(e);this.header=await this.parser.parseHeader(t,this.genome),this.chrAliasTable=this.header.chrAliasTable}return this.header}async readFeatures(e,t,i){if(this.config.format&&"VCF"!==this.config.format.toUpperCase())throw Error(`htsget format ${this.config.format} is not supported`);this.chrAliasTable||await this.readHeader();let n=this.chrAliasTable.has(e)?this.chrAliasTable.get(e):e,r=await this.readData(n,t,i);Zi(r)&&(r=Ji(r));const s=wc(r);return this.parser.parseFeatures(s)}}class Hc{chrAliasTable=new Map;constructor(e,t){this.sequenceNames=new Set(e),this.genome=t}async getAliasName(e){if(!this.genome)return e;if(!this.chrAliasTable.has(e)){const t=await this.genome.getAliasRecord(e);if(t){let i;const n=Object.keys(t).filter((e=>"start"!==e&&"end"!==e)).map((e=>t[e])).filter((e=>this.sequenceNames.has(e)));n.length>0&&(i=n[0]),this.chrAliasTable.set(e,i)}else this.chrAliasTable.set(e,void 0)}return this.chrAliasTable.get(e)}}class Pc{constructor(e){this.genome=e}async nextFeature(e,t,i,n){let r=this.genome.chromosomeNames||[e],s=r.indexOf(e);if(s<0)return;const o=Math.min(1e4,n||1e4);let a=i?t:Math.max(t-o,0);for(;s<r.length&&s>=0;){e=r[s];const c=this.genome.getChromosome(e).bpLength;for(;a<c&&a>=0;){let r=i?a+o:Math.min(t,a+o);const s=await this.getFeatures({chr:e,start:a,end:r,visibilityWindow:n});if(s){const e=(e,t)=>e.start-t.start+e.end-t.end,n=Array.from(s);n.sort(e);let r=i?0:n.length-1;for(;r>=0&&r<n.length;){const e=n[r],s=(e.start+e.end)/2;if(i){if(s>t)return e;r++}else{if(s<t)return e;r--}}}a=i?r:a-o}if(i)s++,a=0,t=0;else{if(s--,s<0)break;a=(t=this.genome.getChromosome(r[s]).bpLength)-o}}}async previousFeature(e,t,i,n){let r=this.genome.chromosomeNames||[e],s=r.indexOf(e);if(s<0)return;const o=Math.min(1e4,n||1e4);let a=i?t:Math.max(t-o,0);for(;s<r.length&&s>=0;){e=r[s];const c=this.genome.getChromosome(e).bpLength;for(;a<c&&a>=0;){let r=Math.min(t,a+o);const s=await this.getFeatures({chr:e,start:a,end:r,visibilityWindow:n});if(s){const e=(e,t)=>e.start-t.start+e.end-t.end,n=Array.from(s);n.sort(e);let r=i?0:n.length-1;for(;r>=0&&r<n.length;){const e=n[r],s=(e.start+e.end)/2;if(i){if(s>t)return e;r++}else{if(s<t)return e;r--}}}a=i?r:a-o}if(i)s++,a=0,t=0;else{if(s--,s<0)break;a=(t=this.genome.getChromosome(r[s]).bpLength)-o}}}}class Oc{constructor(e,t){this.config=e,this.genome=t,this.path=e.url,this.groupCache={},this.datasetCache={}}async readHeader(){if(void 0!==this.magic)return this;let e=await Mn.loadArrayBuffer(this.path,js(this.config,{range:{start:0,size:64e3}})),t=new Co(new DataView(e));if(this.magic=t.getInt(),this.version=t.getInt(),this.indexPos=t.getLong(),this.indexSize=t.getInt(),t.getInt(),this.version>=2){let e=t.getInt();for(this.windowFunctions=[];e-- >0;)this.windowFunctions.push(t.getString())}this.trackType=t.getString(),this.trackLine=t.getString();let i=t.getInt();for(this.trackNames=[];i-- >0;)this.trackNames.push(t.getString());this.genomeID=t.getString(),this.flags=t.getInt(),this.compressed=!!(1&this.flags),e=await Mn.loadArrayBuffer(this.path,js(this.config,{range:{start:this.indexPos,size:this.indexSize}})),t=new Co(new DataView(e)),this.datasetIndex={};let n=t.getInt();for(;n-- >0;){const e=t.getString(),i=t.getLong(),n=t.getInt();this.datasetIndex[e]={position:i,size:n}}for(this.groupIndex={},n=t.getInt();n-- >0;){const e=t.getString(),i=t.getLong(),n=t.getInt();this.groupIndex[e]={position:i,size:n}}return this}async readDataset(e,t,i){const n=e+"_"+t+"_"+i;if(this.datasetCache[n])return this.datasetCache[n];{await this.readHeader();const r=this.version<2?"":"/"+t,s="all"===e.toLowerCase()||void 0===i?"0":i.toString();let o;o="raw"===t?"/"+e+"/raw":"/"+e+"/z"+s+r;const a=this.datasetIndex[o];if(void 0===a)return;const c=await Mn.loadArrayBuffer(this.path,js(this.config,{range:{start:a.position,size:a.size}}));if(!c)return;const l=new Co(new DataView(c));let h=l.getInt();const d={};for(;h-- >0;)d[l.getString()]=l.getString();const u=l.getString(),f=l.getFloat();let p=l.getInt();const g=[];for(;p-- >0;)g.push({position:l.getLong(),size:l.getInt()});const m={name:o,attributes:d,dataType:u,tileWidth:f,tiles:g};return this.datasetCache[n]=m,m}}async readRootGroup(){const e=this.genome,t=this.groupCache["/"];if(t)return t;{const t=await this.readGroup("/"),i=t.chromosomes,n=t.maxZoom;n&&(this.maxZoom=Number(n));const r=t.totalCount;r&&(t.totalCount=Number(r));const s={};return i&&i.split(",").forEach((function(t){const i=e.getChromosomeName(t);s[i]=t})),this.chrAliasTable=s,this.groupCache["/"]=t,t}}async readGroup(e){const t=this.groupCache[e];if(t)return t;{await this.readHeader();const t=this.groupIndex[e];if(void 0===t)return;const i=await Mn.loadArrayBuffer(this.path,js(this.config,{range:{start:t.position,size:t.size}}));if(!i)return;const n=new Co(new DataView(i)),r={name:e};let s=n.getInt();for(;s-- >0;){const e=n.getString(),t=n.getString();r[e]=t}return this.groupCache[e]=r,r}}async readTiles(e,t){if(e.sort((function(e,t){return e.position-t.position})),0===(e=e.filter((function(e){return e.size>0}))).length)return[];const i=[];for(let n of e){const e=await Mn.loadArrayBuffer(this.path,js(this.config,{range:{start:n.position,size:n.size}}));let r;try{r=this.compressed?Ki(e).buffer:e}catch(e){console.error(e);continue}const s=new Co(new DataView(r)),o=s.getString();let a;switch(o){case"fixedStep":a=Vc(s,t);break;case"variableStep":a=qc(s,t);break;case"bed":case"bedWithName":a=Qc(s,t,o);break;default:throw"Unknown tile type: "+o}i.push(a)}return i}async readTile(e,t){let i=await Mn.loadArrayBuffer(this.path,js(this.config,{range:{start:e.position,size:e.size}}));if(this.compressed){i=Ki(i).buffer}const n=new Co(new DataView(i)),r=n.getString();switch(r){case"fixedStep":return Vc(n,t);case"variableStep":return qc(n,t);case"bed":case"bedWithName":return Qc(n,t,r);default:throw"Unknown tile type: "+r}}}function Vc(e,t){const i=e.getInt(),n=e.getInt(),r=e.getFloat(),s=[];let o=t;for(;o-- >0;){let t=i;const n=[];for(;t-- >0;)n.push(e.getFloat());s.push(n)}return{type:"fixedStep",start:n,span:r,data:s,nTracks:t,nPositions:i}}function qc(e,t){const i=e.getInt(),n=e.getFloat(),r=e.getInt(),s=[];let o=r;for(;o-- >0;)s.push(e.getInt());e.getInt();const a=[];let c=t;for(;c-- >0;){o=r;const t=[];for(;o-- >0;)t.push(e.getFloat());a.push(t)}return{type:"variableStep",tileStart:i,span:n,start:s,data:a,nTracks:t,nPositions:r}}function Qc(e,t,i){const n=e.getInt();let r=n;const s=[];for(;r-- >0;)s.push(e.getInt());r=n;const o=[];for(;r-- >0;)o.push(e.getInt());e.getInt();const a=[];let c=t;for(;c-- >0;){let t=n;const i=[];for(;t-- >0;)i.push(e.getFloat());a.push(i)}if("bedWithName"===i){r=n;const t=[];for(;r-- >0;)t.push(e.getString())}return{type:i,start:s,end:o,data:a,nTracks:t,nPositions:n}}class Uc extends Pc{#h={};searchable=!1;constructor(e,t){super(t),this.genome=t,this.reader=new Oc(e,t),this.queryable=!0}async getFeatures({chr:e,start:t,end:i,bpPerPixel:n,windowFunction:r="mean"}){return"all"===e.toLowerCase()?this.getWGValues(r,n):this._getFeatures(e,t,i,n,r)}async _getFeatures(e,t,i,n,r){const s=new uo(e,t,i),o=this.genome;if(!this.rootGroup&&(this.rootGroup=await this.reader.readRootGroup(),!this.normalizationFactor)){const e=this.rootGroup.totalCount;e&&(this.normalizationFactor=1e6/e)}s.bpPerPixel=n;const a=function(e,t,i){var n=i.getChromosome(e).bpLength;return Math.ceil(Math.log(Math.max(0,n/(700*t)))/$c)}(e,n,o);let c=this.reader.chrAliasTable[e],l=this.reader.maxZoom;void 0===c&&(c=e),void 0===l&&(l=-1);const h=a>l?"raw":r,d=await this.reader.readDataset(c,h,a);if(null==d)return[];const u=d.tileWidth,f=Math.floor(t/u),p=Math.floor(i/u),g=await this.reader.readTiles(d.tiles.slice(f,p+1),1),m=[];for(let r of g)switch(r.type){case"bed":jc(r,e,t,i,n,m);break;case"variableStep":Gc(r,e,t,i,n,m);break;case"fixedStep":Wc(r,e,t,i,n,m);break;default:throw"Unknown tile type: "+r.type}return m.sort((function(e,t){return e.start-t.start})),m}get supportsWholeGenome(){return!0}get windowFunctions(){return this.reader.windowFunctions}async getWGValues(e,t){const i=this.#h[e];if(i&&i.bpPerPixel>.8*t&&i.bpPerPixel<1.2*t)return i.values;{const i=[],n=this.genome;if(this.genome.wgChromosomeNames)for(let r of n.wgChromosomeNames){const s=n.getChromosome(r).bpLength;t=s/1e3;const o=await this._getFeatures(r,0,s,t,e);if(o)for(let e of o){const t=Object.assign({},e);t.chr="all",t.start=n.getGenomeCoordinate(e.chr,e.start),t.end=n.getGenomeCoordinate(e.chr,e.end),t._f=e,i.push(t)}}return this.#h[e]={values:i,bpPerPixel:t},i}}}function jc(e,t,i,n,r,s){const o=e.nPositions,a=e.start,c=e.end,l=e.data[0];for(let e=0;e<o;e++){const r=a[e],o=c[e];if(!(o<i)){if(r>n)break;s.push({chr:t,start:r,end:o,value:l[e]})}}}function Gc(e,t,i,n,r,s){const o=e.nPositions,a=e.start,c=e.span,l=e.data[0];for(let e=0;e<o;e++){const r=a[e],o=r+c;if(!(o<i)){if(r>n)break;s.push({chr:t,start:r,end:o,value:l[e]})}}}function Wc(e,t,i,n,r,s){const o=e.nPositions;let a=e.start;const c=e.span,l=e.data[0];for(let e=0;e<o;e++){const r=a+c;if(a>n)break;r>=i&&(Number.isNaN(l[e])||s.push({chr:t,start:a,end:r,value:l[e]})),a=r}}var $c=Math.log(2);class Kc{constructor(e,t,i,n){this.header=e,this.nameToId=t,this.idToName=i,this.sumLengths=n}static parseTree(e,t,i=!1){{const n=e.getInt(),r=e.getInt(),s=e.getInt(),o=e.getInt(),a=e.getLong(),c=e.getLong(),l={magic:n,blockSize:r,keySize:s,valSize:o,itemCount:a,reserved:c},h=new Map,d=[];let u=0;const f=n=>{n>=0&&(e.position=n);const r=e.getByte();e.getByte();const a=e.getUShort();if(1===r)for(let t=0;t<a;t++){let t,n=e.getFixedLengthString(s);if(8!==o)throw Error(`Unexpected "valSize" value in chromosome tree. Expected 8, actual value is ${o}`);{t=e.getInt();const r=e.getInt();u+=r,i&&(n=i.getChromosomeName(n)),h.set(n,t),d[t]=n}}else for(let i=0;i<a;i++){e.getFixedLengthString(s);const i=e.getLong()-t,n=e.position;f(i),e.position=n}};return f(-1),new Kc(l,h,d,u)}}}class Yc{static magic=610839776;littleEndian=!0;nodeCache=new Map;constructor(e,t,i){this.path=e,this.config=t,this.startOffset=i}async init(){const e=await this.#t(this.startOffset,48);let t=e.getInt();if(t!==Yc.magic&&(e.setPosition(0),this.littleEndian=!this.littleEndian,e.littleEndian=this.littleEndian,t=e.getInt(),t!==Yc.magic))throw Error(`Bad magic number ${t}`);const i=e.getUInt(),n=e.getLong(),r=e.getUInt(),s=e.getUInt(),o=e.getUInt(),a=e.getUInt(),c=e.getLong(),l=e.getUInt(),h=e.getUInt(),d=this.startOffset+48;return this.header={magic:t,blockSize:i,itemCount:n,startChromIx:r,startBase:s,endChromIx:o,endBase:a,endFileOffset:c,itemsPerSlot:l,reserved:h,rootNodeOffset:d},this}async#t(e,t){const i=await Mn.loadArrayBuffer(this.path,js(this.config,{range:{start:e,size:t}}));return new Co(new DataView(i),this.littleEndian)}async findLeafItemsOverlapping(e,t,i,n){const r=[],s=async o=>{const a=await this.readNode(o);for(let o of a.items)Xc(o,e,t,i,n)&&(1===a.type?r.push(o):await s(o.childOffset))};return await s(this.header.rootNodeOffset),r}async readNode(e){const t=e;if(this.nodeCache.has(t))return this.nodeCache.get(t);let i=await this.#t(e,4);const n=i.getByte(),r=1===n;i.getByte();const s=i.getUShort();let o=s*(r?32:24);i=await this.#t(e+4,o);const a=[];for(let e=0;e<s;e++){let e={isLeaf:r,startChrom:i.getInt(),startBase:i.getInt(),endChrom:i.getInt(),endBase:i.getInt(),childOffset:i.getLong()};r&&(e.dataSize=i.getLong(),e.dataOffset=e.childOffset),a.push(e)}const c={type:n,items:a};return this.nodeCache.set(t,c),c}}function Xc(e,t,i,n,r){return e?(n>e.startChrom||n===e.startChrom&&r>=e.startBase)&&(t<e.endChrom||t===e.endChrom&&i<=e.endBase):(console.log("null item for "+t+" "+i+" "+r),!1)}function Zc(e,t){return Math.min(1,.11+e/779*.89).toString()}class Jc{ixFile;ixxFile;bufferCache=new Map;constructor(e,t){this.ixFile=t,this.ixxFile=e}async search(e,t){const i=e.split(" ")[0].toLowerCase(),n=await this._getBuffer(i,t);if(!n)return;const r=n.slice(0,n.lastIndexOf("\n")).split("\n").filter((e=>!!e)),s=[];for(let e of r){const t=e.split(" ")[0];if(t.startsWith(i)&&s.push(e),t.slice(0,i.length)>i)break}if(0!==s.length){const e=new Map;for(let t of s){const[i,...n]=t.split(" ");e.set(i,n.map((e=>e.split(",")[0])))}return e}}async getIndex(e){return this.index||(this.index=await this._readIndex()),this.index}async _readIndex(e){return(await Mn.loadString(this.ixxFile)).split("\n").filter((e=>!!e)).map((e=>{const t=e.length-10,i=e.slice(0,t),n=e.slice(t);return[i,Number.parseInt(n,16)]}))}async _getBuffer(e,t){let i=0,n=65536;const r=await this.getIndex(t);for(let t=0;t<r.length;t++){const[s,o]=r[t],a=Math.min(s.length,e.length);s.slice(0,a)<e&&(i=o,n=o+65536)}const s=n-i;if(!(s<0)){if(this.bufferCache.has(i))return this.bufferCache.get(i);{const e=await Mn.loadString(this.ixFile,{range:{start:i,size:s}});return this.bufferCache.set(i,e),e}}}}class el{chrAliasTable=new Map;rpTreeCache=new Map;constructor(e,t){this.path=e.url,this.format=e.format||"bigwig",this.genome=t,this.config=e,this.bufferSize=512e3,this.loader=Xs(this.path)?new al(on(this.path).buffer):Mn;const i=e.trixURL||e.searchTrix;i&&(this._trix=new Jc(`${i}x`,i))}async preload(){const e=await Mn.loadArrayBuffer(this.path);this.loader=new al(e)}async readWGFeatures(e,t){await this.loadHeader();const i=this.chromTree.idToName.length-1,n=this.chromTree.idToName[0],r=this.chromTree.idToName[i];return this.readFeatures(n,0,r,Number.MAX_VALUE,e,t)}async readFeatures(e,t,i,n,r,s="mean"){t||(t=0),n||(n=Number.MAX_SAFE_INTEGER),await this.loadHeader();let o,a,c=await this.#d(e),l=await this.#d(i);if(void 0===c||void 0===l)return[];if("bigwig"===this.type){const e=await this.getZoomHeaders();let t=r?function(e,t){let i;for(let n=0;n<t.length;n++){const r=t[n];if(r.reductionLevel<e){i=r;break}}return i}(r,e):void 0;t&&"none"!=s?(o=t.indexOffset,a=ol):(o=this.header.fullIndexOffset,a=rl)}else o=this.header.fullIndexOffset,a=sl.call(this);const h=await this.loadRPTree(o),d=await h.findLeafItemsOverlapping(c,t,l,n);if(d&&0!==d.length){let e=Number.MAX_VALUE,i=0;for(let t of d)e=Math.min(e,t.dataOffset),i=Math.max(i,t.dataOffset+t.dataSize);const r=i-e,o=await this.loader.loadArrayBuffer(this.config.url,js(this.config,{range:{start:e,size:r}})),h=[];for(let i of d){const r=new Uint8Array(o,i.dataOffset-e,i.dataSize);let d;d=this.header.uncompressBuffSize>0?Ki(r):r,a.call(this,new DataView(d.buffer),c,t,l,n,h,this.chromTree.idToName,s,this.littleEndian)}return h.sort((function(e,t){return e.start-t.start})),h}return[]}async#d(e){if(this.chrAliasTable.has(e)&&void 0===(e=this.chrAliasTable.get(e)))return;let t=this.chromTree.nameToId.get(e);if(void 0===t&&this.genome){const i=await this.genome.getAliasRecord(e);let n;if(i){const e=Object.keys(i).filter((e=>"start"!==e&&"end"!==e)).map((e=>i[e])).filter((e=>this.chromTree.nameToId.has(e)));e.length>0&&(n=e[0],t=this.chromTree.nameToId.get(e[0]))}this.chrAliasTable.set(e,n)}return t}get searchable(){return"bigbed"===this.type}async search(e){if(this.header||await this.loadHeader(),!this.header||!this.header.extraIndexCount)return;const t=await this._searchForRegions(e);if(t){const i=await this._loadFeaturesForRange(t.offset,t.length);if(i){const t=i.filter((t=>{for(let i of Object.keys(t)){const n=t[i];if(b(n)&&n.toLowerCase()===e.toLowerCase())return!0}return!1}));return t.length>0?t.reduce(((e,t)=>e.end-e.start>t.end-t.start?e:t),i[0]):void 0}}}async _searchForRegions(e){const t=await this.#u();if(t){if(this._trix){const t=e.toLowerCase(),i=await this._trix.search(t);i&&i.has(t)&&(e=i.get(t)[0])}for(let i of t){const t=await i.search(e);if(t)return t}}}async#u(){if(void 0===this._searchTrees&&this.header.extraIndexOffsets&&this.header.extraIndexOffsets.length>0){this._searchTrees=[];for(let e of this.header.extraIndexOffsets){const t=await xo.loadBpTree(this.path,this.config,e);this._searchTrees.push(t)}}return this._searchTrees}async getZoomHeaders(){return this.zoomLevelHeaders||await this.loadHeader(),this.zoomLevelHeaders}async loadHeader(){if(this.header)return this.header;{let e,t=await this.loader.loadArrayBuffer(this.path,js(this.config,{range:{start:0,size:64}}));this.littleEndian=!0;const i=new Co(new DataView(t),this.littleEndian);let n=i.getUInt();if(2291137574===n)this.type="bigwig";else if(2273964779===n)this.type="bigbed";else{this.littleEndian=!1,i.littleEndian=!1,i.position=0;let e=i.getUInt();654085990===e?this.type="bigwig":3958540679===e&&(this.type="bigbed")}e={bwVersion:i.getUShort(),nZoomLevels:i.getUShort(),chromTreeOffset:i.getLong(),fullDataOffset:i.getLong(),fullIndexOffset:i.getLong(),fieldCount:i.getUShort(),definedFieldCount:i.getUShort(),autoSqlOffset:i.getLong(),totalSummaryOffset:i.getLong(),uncompressBuffSize:i.getInt(),extensionOffset:i.getLong()};const r=64;let s={start:r,size:e.totalSummaryOffset>0?e.totalSummaryOffset-r+40:Math.min(e.fullDataOffset,e.chromTreeOffset)-r};t=await this.loader.loadArrayBuffer(this.path,js(this.config,{range:s}));const o=new Co(new DataView(t),this.littleEndian),a=e.nZoomLevels;this.zoomLevelHeaders=[],this.firstZoomDataOffset=Number.MAX_SAFE_INTEGER;for(let e=1;e<=a;e++){const t=a-e,i=new tl(t,o);this.firstZoomDataOffset=Math.min(i.dataOffset,this.firstZoomDataOffset),this.zoomLevelHeaders[t]=i}if(e.autoSqlOffset>0){o.position=e.autoSqlOffset-r;const t=o.getString();t&&(this.autoSql=function(e){let t;const i=[];let n=!1;const r=e.trim().split(/\s*[\r\n]+\s*/g);for(let e of r)if(e=e.trim(),e.length>0){if(e.startsWith("#"))continue;if(e.startsWith("table"))t=e.split(/\s+/)[1].trim();else if(e.startsWith("("))n=!0;else if(e.startsWith(")"));else if(n){const t=e.indexOf(";");if(t>0){const n=e.substr(0,t).split(/\s+/),r=e.substr(t+1).replace(/"/g,"").trim();i.push({type:n[0],name:n[1],description:r})}}}return{table:t,fields:i}}(t))}e.totalSummaryOffset>0&&(o.position=e.totalSummaryOffset-r,this.totalSummary=new il(o));const c=Math.min(2e5,Math.max(1e4,e.fullDataOffset-e.chromTreeOffset));if(this.chromTree=await this.#f(e.chromTreeOffset,c),this.chrNames=new Set(this.chromTree.idToName),"bigbed"===this.type){const t=await this.#p(e.fullDataOffset);this.featureDensity=t/this.chromTree.sumLengths}return this.header=e,e.extensionOffset>0&&await this.loadExtendedHeader(e.extensionOffset),this.header}}async#p(e){const t=await this.loader.loadArrayBuffer(this.path,js(this.config,{range:{start:e,size:4}}));return new Co(new DataView(t),this.littleEndian).getInt()}async#f(e,t){let i=t;const n=async()=>{const t=await this.loader.loadArrayBuffer(this.path,js(this.config,{range:{start:e,size:i}})),n=new Co(new DataView(t),this.littleEndian);return Kc.parseTree(n,e,this.genome)};let r;for(;i<1e6;)try{return await n()}catch(e){r=e,i*=2}throw r}async loadExtendedHeader(e){let t=await this.loader.loadArrayBuffer(this.path,js(this.config,{range:{start:e,size:64}})),i=new Co(new DataView(t),this.littleEndian);i.getUShort();const n=i.getUShort(),r=i.getLong();if(0===n)return;let s=56*n;t=await this.loader.loadArrayBuffer(this.path,js(this.config,{range:{start:r,size:s}})),i=new Co(new DataView(t),this.littleEndian);const o=[],a=[],c=[];for(let e=0;e<n;e++){o.push(i.getUShort());const e=i.getUShort();c.push(i.getLong()),a.push(i.getInt());for(let t=0;t<e;t++)i.getUShort(),a.push(i.getUShort())}this.header.extraIndexCount=n,this.header.extraIndexOffsets=c}async loadRPTree(e){let t=this.rpTreeCache.get(e);return t||(t=new Yc(this.path,this.config,e),await t.init(),this.rpTreeCache.set(e,t),t)}async getType(){return await this.loadHeader(),this.type}async getTrackType(){return await this.loadHeader(),"bigwig"===this.type?"wig":!this.autoSql||"interact"!==this.autoSql.table&&"chromatinInteract"!==this.autoSql.table?"annotation":"interact"}async _loadFeaturesForRange(e,t){const i=await this.loader.loadArrayBuffer(this.config.url,js(this.config,{range:{start:e,size:t}})),n=new Uint8Array(i),r=this.header.uncompressBuffSize>0?Ki(n):n,s=[];return sl.call(this).call(this,new DataView(r.buffer),0,0,Number.MAX_SAFE_INTEGER,Number.MAX_SAFE_INTEGER,s,this.chromTree.idToName),s}}class tl{constructor(e,t){this.index=e,this.reductionLevel=t.getInt(),this.reserved=t.getInt(),this.dataOffset=t.getLong(),this.indexOffset=t.getLong()}}class il{constructor(e){e?(this.basesCovered=e.getLong(),this.minVal=e.getDouble(),this.maxVal=e.getDouble(),this.sumData=e.getDouble(),this.sumSquares=e.getDouble(),nl.call(this)):(this.basesCovered=0,this.minVal=0,this.maxVal=0,this.sumData=0,this.sumSquares=0,this.mean=0,this.stddev=0)}}function nl(){let e=this.basesCovered;if(e>0){this.mean=this.sumData/e,this.stddev=Math.sqrt(this.sumSquares/(e-1));let t=this.minVal<0?this.mean-2*this.stddev:0,i=this.maxVal>0?this.mean+2*this.stddev:0;this.defaultRange={min:t,max:i}}}function rl(e,t,i,n,r,s,o,a,c){const l=new Co(e,c),h=l.getInt(),d=l.getInt();let u=d,f=l.getInt();const p=l.getInt(),g=l.getInt(),m=l.getByte();l.getByte();let w=l.getUShort();if(h>=t&&h<=n){let e=0;for(;w-- >0;){let a;switch(m){case 1:u=l.getInt(),f=l.getInt(),a=l.getFloat();break;case 2:u=l.getInt(),a=l.getFloat(),f=u+g;break;case 3:a=l.getFloat(),u=d+e*p,f=u+g,e++}if(!(h<t||h===t&&f<i)){if(h>n||h===n&&u>=r)break;if(Number.isFinite(a)){const e=o[h];s.push({chr:e,start:u,end:f,value:a})}}}}}function sl(){const e=function(e,t,i,n){if("biginteract"===n||i&&("chromatinInteract"===i.table||"interact"===i.table))return function(e,t){return e.chr1=t[5],e.start1=Number.parseInt(t[6]),e.end1=Number.parseInt(t[7]),e.chr2=t[10],e.start2=Number.parseInt(t[11]),e.end2=Number.parseInt(t[12]),e.name=t[0],e.score=Number(t[1]),e.value=Number(t[2]),e.color="."===t[4]?void 0:"0"===t[4]?"rgb(0,0,0)":t[4],e};{const n=e-3;return function(r,s){if(n>0&&(r.name=s[0]),n>1&&(r.score=Number(s[1])),n>2&&(r.strand=s[2]),n>3&&(r.cdStart=parseInt(s[3])),n>4&&(r.cdEnd=parseInt(s[4])),n>5&&"."!==s[5]&&"0"!==s[5]&&"-1"!==s[5]){const e=un.createColorString(s[5]);r.color=e.startsWith("rgb")?e:void 0}if(n>8){const e=parseInt(s[6]),t=s[7].split(","),i=s[8].split(","),n=[];for(let s=0;s<e;s++){const e=r.start+parseInt(i[s]),o=e+parseInt(t[s]);n.push({start:e,end:o})}!function(e,t,i){for(let n of e){const e=n.end,r=n.start;e<t||r>i?n.utr=!0:(t>=r&&t<=e&&(n.cdStart=t),i>=r&&i<=e&&(n.cdEnd=i))}}(n,r.cdStart,r.cdEnd),r.exons=n}if(i)for(let n=e;n<t;n++)if(n<i.fields.length){const e=i.fields[n].name,t=s[n-3];r[e]=t}}}}(this.header.definedFieldCount,this.header.fieldCount,this.autoSql,this.format);return function(t,i,n,r,s,o,a,c,l){const h=new Co(t,l);for(;h.remLength()>=13;){const t=h.getInt(),c=a[t],l=h.getInt(),d=h.getInt(),u=h.getString();if(!(t<i||t===i&&d<n)){if(t>r||t===r&&l>=s)break;if(d>0){const t={chr:c,start:l,end:d};o.push(t);const i=u.split("\t");e(t,i)}}}}}function ol(e,t,i,n,r,s,o,a,c){const l=new Co(e,c);for(;l.remLength()>=32;){const e=l.getInt(),c=l.getInt(),h=l.getInt(),d=l.getInt(),u=l.getFloat(),f=l.getFloat(),p=l.getFloat();let g;switch(l.getFloat(),a){case"min":g=u;break;case"max":g=f;break;default:g=0===d?0:p/d}if(!(e<t||e===t&&h<i)){if(e>n||e===n&&c>=r)break;if(Number.isFinite(g)){const t=o[e];s.push({chr:t,start:c,end:h,value:g})}}}}class al{constructor(e){this.data=e}loadArrayBuffer(e,t){const i=t.range;return i?this.data.slice(i.start,i.start+i.size):this.data}async dataViewForRange(e,t){const i=Math.min(this.data.byteLength-e.start,e.size);return t?new Uint8Array(this.data,e.start,i):new DataView(this.data,e.start,i)}}class cl extends Pc{queryable=!0;#h={};windowFunctions=["mean","min","max","none"];constructor(e,t){super(t),this.reader=new el(e,t),this.genome=t,this.format=e.format||"bigwig"}async getFeatures({chr:e,start:t,end:i,bpPerPixel:n,windowFunction:r}){await this.reader.loadHeader();const s="bigwig"===this.reader.type;let o;return o="all"===e.toLowerCase()?s?await this.getWGValues(r,n):[]:await this.reader.readFeatures(e,t,e,i,n,r),s||za(o),o}async getHeader(){return this.reader.loadHeader()}async defaultVisibilityWindow(){return"bigwig"===this.reader.type?-1:this.reader.featureDensity?Math.floor(1e4/this.reader.featureDensity):-1}async getWGValues(e,t){const i=this.genome,n=this.#h[e];if(n&&n.bpPerPixel>.8*t&&n.bpPerPixel<1.2*t)return n.values;{const n=await this.reader.readWGFeatures(t,e);let r=[];for(let e of n){const t=e.chr,n=i.getCumulativeOffset(t);if(void 0===n)continue;const s=Object.assign({},e);s.chr="all",s.start=n+e.start,s.end=n+e.end,s._f=e,r.push(s)}return r.sort(((e,t)=>e.start-t.start)),this.#h[e]={values:r,bpPerPixel:t},r}}supportsWholeGenome(){return"bigwig"===this.reader.type}async trackType(){return this.reader.getTrackType()}get searchable(){return this.reader.searchable}async search(e){return this.reader.search(e)}}const ll=.01;function hl(e,t,i,n){let r=this.axisMin,s=this.axisMax;if(void 0===s&&this.dataRange&&(r=this.dataRange.min||0,s=this.dataRange.max),void 0===s)return;fr.fillRect(e,0,0,t,i,{fillStyle:"white"}),n&&fr.fillRect(e,t-4-2,0,4,i,{fillStyle:n});const o=void 0!==this.flipAxis&&this.flipAxis,a=.95*t-8-5,c=.95*t-5,l={font:"normal 10px Arial",textAlign:"right",fillStyle:"black",strokeStyle:"black"};fr.strokeLine(e,a,ll*i,c,ll*i,l),fr.fillText(e,d(o?r:s),a+4,ll*i+12,l);const h=.99*i;function d(e){return Number.isInteger(e)||e%1==0?e:Math.abs(e)>=10?e.toFixed():Math.abs(e)>=1?e.toFixed(1):Math.abs(e)>=.1?e.toFixed(2):e.toExponential(1)}fr.strokeLine(e,a,h,c,h,l),fr.fillText(e,d(o?s:r),a+4,h-4,l),fr.strokeLine(e,c,ll*i,c,h,l)}const dl=e=>{switch(e.type){case"gradient":return new gl(e);case"doubleGradient":case"diverging":return new ml(e);default:throw Error("Unknown color scale type: "+e)}},ul=function(e,t){return new gl({type:"doubleGradient",min:e,max:t,minColor:"rgb(46,56,183)",maxColor:"rgb(164,0,30)"})},fl=function(e,t,i){return new ml({type:"doubleGradient",min:0,mid:.25,max:.5,minColor:"rgb(46,56,183)",midColor:"white",maxColor:"rgb(164,0,30)"})};class pl{constructor(e){this.thresholds=e.thresholds,this.colors=e.colors}getColor(e){for(let t of this.thresholds)if(e<t)return this.colors[this.thresholds.indexOf(t)];return this.colors[this.colors.length-1]}}class gl{constructor(e){this.type="gradient";const t={min:void 0!==e.min?e.min:e.low,max:void 0!==e.max?e.max:e.high,minColor:e.minColor||e.lowColor,maxColor:e.maxColor||e.highColor};this.setProperties(t)}setProperties({min:e,max:t,minColor:i,maxColor:n}){this.type="gradient",this.min=e,this.max=t,this._lowColor=i,this._highColor=n,this.lowComponents=un.rgbComponents(i),this.highComponents=un.rgbComponents(n)}get minColor(){return this._lowColor}set minColor(e){this._lowColor=e,this.lowComponents=un.rgbComponents(e)}get maxColor(){return this._highColor}set maxColor(e){this._highColor=e,this.highComponents=un.rgbComponents(e)}getColor(e){if(e<=this.min)return this.minColor;if(e>=this.max)return this.maxColor;const t=(e-this.min)/(this.max-this.min);return"rgb("+Math.floor(this.lowComponents[0]+t*(this.highComponents[0]-this.lowComponents[0]))+","+Math.floor(this.lowComponents[1]+t*(this.highComponents[1]-this.lowComponents[1]))+","+Math.floor(this.lowComponents[2]+t*(this.highComponents[2]-this.lowComponents[2]))+")"}toJson(){return{type:this.type,min:this.min,max:this.max,minColor:this.minColor,maxColor:this.maxColor}}clone(){return new gl(this.toJson())}}class ml{constructor(e){this.type="diverging",this.lowGradientScale=new gl({minColor:e.minColor||e.lowColor,maxColor:e.midColor,min:void 0!==e.min?e.min:e.low,max:e.mid}),this.highGradientScale=new gl({minColor:e.midColor,maxColor:e.maxColor||e.highColor,min:e.mid,max:void 0!==e.max?e.max:e.high})}getColor(e){return e<this.mid?this.lowGradientScale.getColor(e):this.highGradientScale.getColor(e)}get min(){return this.lowGradientScale.min}set min(e){this.lowGradientScale.min=e}get max(){return this.highGradientScale.max}set max(e){this.highGradientScale.max=e}get mid(){return this.lowGradientScale.max}set mid(e){this.lowGradientScale.max=e,this.highGradientScale.min=e}get minColor(){return this.lowGradientScale.minColor}set minColor(e){this.lowGradientScale.minColor=e}get maxColor(){return this.highGradientScale.maxColor}set maxColor(e){this.highGradientScale.maxColor=e}get midColor(){return this.lowGradientScale.maxColor}set midColor(e){this.lowGradientScale.maxColor=e,this.highGradientScale.minColor=e}toJson(){return{type:this.type,min:this.min,mid:this.mid,max:this.max,minColor:this.minColor,midColor:this.midColor,maxColor:this.maxColor}}clone(){const e=this.toJson();return new ml(e)}}class wl{constructor(e){this.color=e}getColor(){return this.color}}const bl={display:"flex",flexDirection:"row",alignItems:"center",backgroundColor:"transparent"};class Fl{constructor({selected:e,label:i,onchange:n}){this.state=e,this.onchange=n,this.elem=t({style:bl});const r=t({style:{width:"14px",height:"14px",borderColor:"gray",borderWidth:"1px",borderStyle:"solid"}});if(this.svg=l("check",!0===e?"#444":"transparent"),this.svg.style.width="12px",this.svg.style.height="12px",r.appendChild(this.svg),this.elem.appendChild(r),i){const e=t({style:{marginLeft:"5px"}});e.textContent=i,this.elem.appendChild(e)}const s=e=>{e.preventDefault(),e.stopPropagation();const t=!this.state;this.selected=t,"function"==typeof this.onchange&&this.onchange(t)};this.elem.addEventListener("click",s),this.elem.addEventListener("touchend",s)}set selected(e){this.state=e;this.svg.querySelector("path").setAttributeNS(null,"fill",!0===e?"#444":"transparent")}get selected(){return this.state}onchange(e){this.onchange=e}}function vl(e,t){const i=e.getContext("2d"),n=e.width,r=(t.max-t.min)/n;for(let s=0;s<n;s++){const n=t.min+s*r,o=t.getColor(n);i.fillStyle=o,i.fillRect(s,0,1,e.height)}}class yl{static open(e,t,i){let n=e.clone();const s=document.createElement("table"),o=document.createElement("canvas");o.style.height="20px",o.style.width="100%",o.style.marginTop="10px",o.style.border="1px solid black";const a=new Cl({label:"Min value",value:n.min.toString(),onchange:e=>{n.min=Number.parseFloat(e),vl(o,n)}});s.appendChild(a.row);const c=new Cl({label:"Mid value",value:(n.mid||n.min).toString(),onchange:e=>{n.mid=Number.parseFloat(e),vl(o,n)}});s.appendChild(c.row);const l=new Cl({label:"Max value",value:n.max.toString(),onchange:e=>{n.max=Number.parseFloat(e),vl(o,n)}});s.appendChild(l.row);const h=new _l({label:"Min color",value:n.minColor,onchange:e=>{n.minColor=e,vl(o,n)}});s.appendChild(h.row);const d=new _l({label:"Mid color",value:n.midColor||n.minColor,onchange:e=>{n.midColor=e,vl(o,n)}});s.appendChild(d.row);const u=new _l({label:"Max color",value:n.maxColor,onchange:e=>{n.maxColor=e,vl(o,n)}});s.appendChild(u.row);const f=new Fl({selected:"diverging"===e.type,label:"Diverging Scale",onchange:e=>{e?(n.mid=n.min<0&&n.max>0?0:(n.min+n.max)/2,n.midColor="rgb(255,255,255)",n=new ml(n),c.value=n.mid,c.show(),d.value=n.midColor,d.show(),vl(o,n)):(n=new gl(n),c.hide(),d.hide(),vl(o,n))}});f.elem.style.marginBottom="20px","diverging"!==e.type&&(c.hide(),d.hide());const p=document.createElement("div");p.appendChild(f.elem),p.appendChild(s),p.appendChild(o);const g=new w({parent:t,content:{elem:p},okHandler:()=>{i&&i(n)}});t.appendChild(g.elem),r(g.elem),vl(o,n)}}class Al{constructor({label:e,value:t,onchange:i}){this.row=document.createElement("tr");const n=document.createElement("td");this.row.appendChild(n);const r=document.createElement("div");r.innerHTML=e,n.appendChild(r)}hide(){this.row.style.display="none"}show(){this.row.style.display="table-row"}}class Cl extends Al{constructor({label:e,value:t,onchange:i}){super({label:e,value:t,onchange:i});const n=document.createElement("td");this.row.appendChild(n),this.input=document.createElement("input"),t=t||"0",this.input.value=Fs.sanitize(t),n.appendChild(this.input),i&&this.input.addEventListener("change",(e=>i(this.input.value)))}get value(){return this.input.value}set value(e){this.input.value=e}}class _l extends Al{constructor({label:e,value:t,onchange:i}){super({label:e,value:t,onchange:i});const n=document.createElement("td");this.row.appendChild(n);const r=document.createElement("div");n.appendChild(r),r.style.width="20px",r.style.height="20px",r.style.border="1px solid black",this.colorButton=r,t=t||"white",r.style.background=t;const s=new Ts(r);s.setOptions({alpha:!1,color:t}),s.onDone=e=>{r.style.background=e.rgbString,i&&i(e.rgbString)}}set value(e){this.colorButton.style.background=e}}class xl extends Pa{static defaultColor="rgb(150, 150, 150)";static defaults={height:50,flipAxis:!1,logScale:!1,windowFunction:"mean",graphType:"bar",normalize:void 0,scaleFactor:void 0,overflowColor:"rgb(255, 32, 255)",baselineColor:"lightGray",summarize:!0,visibilityWindow:void 0};constructor(e,t){super(e,t)}init(e){super.init(e),this.type="wig",this.featureType="numeric",this.resolutionAware=!0,this._paintAxis=hl.bind(this);const t=e.format?e.format.toLowerCase():e.format;e.featureSource?(this.featureSource=e.featureSource,delete e.featureSource):this.featureSource="bigwig"===t?new cl(e,this.browser.genome):"tdf"===t?new Uc(e,this.browser.genome):Hl(e,this.browser.genome),void 0===e.max||!0===e.autoscale?this.autoscale=!0:this.dataRange={min:e.min||0,max:e.max},e.colorScale&&(this._colorScale=dl(e.colorScale)),"heatmap"!==e.graphType||e.height||(this.height=20)}async postInit(){const e=await this.getHeader();this.disposed||(e&&this.setTrackProperties(e),this._initialColor=this.color||this.constructor.defaultColor,this._initialAltColor=this.altColor||this.constructor.defaultColor)}get supportsWholeGenome(){return!this.config.indexURL&&!1!==this.config.supportsWholeGenome}get paintAxis(){return"heatmap"===this.graphType?()=>{}:this._paintAxis}get colorScale(){return this._colorScale}async getFeatures(e,t,i,n){const r=this.windowFunction,s=await this.featureSource.getFeatures({chr:e,start:t,end:i,bpPerPixel:n,visibilityWindow:this.visibilityWindow,windowFunction:r});if(this.normalize&&this.featureSource.normalizationFactor){const e=this.featureSource.normalizationFactor;for(let t of s)t.value*=e}if(this.scaleFactor){const e=this.scaleFactor;for(let t of s)t.value*=e}return!this.summarize||"mean"!==r&&"min"!==r&&"max"!==r?s:kl(s,t,n,r)}menuItemList(){const e=[];return"heatmap"===this.graphType?(e.push("<hr>"),e.push({label:"Set color scale",click:function(){yl.open(this.colorScale,this.browser.columnContainer,(e=>{this._colorScale=e,this.trackView.repaintViews()}))}})):void 0!==this.flipAxis&&(e.push("<hr>"),e.push({label:"Flip y-axis",click:function(){this.flipAxis=!this.flipAxis,this.trackView.repaintViews()}})),e.push(...this.graphTypeItems()),this.featureSource.windowFunctions&&e.push(...this.wigSummarizationItems()),e.push(...this.numericDataMenuItems()),e}wigSummarizationItems(){const e=this.featureSource.windowFunctions,t=[];t.push("<hr/>"),t.push("<div>Windowing function</div>");for(const i of e){function n(){this.windowFunction=i,this.trackView.updateViews()}t.push({element:Ta(i,this.windowFunction===i),click:n})}return t}graphTypeItems(){const e=["bar","line","points","heatmap"],t=[];t.push("<hr/>"),t.push("<div>Graph type</div>");for(const i of e){function n(){this.graphType=i,this.trackView.repaintViews()}t.push({element:Ta(i,this.graphType===i),click:n})}return t}async getHeader(){return"function"==typeof this.featureSource.getHeader&&(this.header=await this.featureSource.getHeader()),this.header}getScaleFactor(e,t,i,n){const r=!0===n?e<0?-Math.log10(Math.abs(e)+1):Math.log10(Math.abs(e)+1):e;return i/((!0===n?Math.log10(Math.abs(t)+1):t)-r)}computeYPixelValue(e,t){return(this.flipAxis?e-this.dataRange.min:this.dataRange.max-e)*t}computeYPixelValueInLogScale(e,t){let i=this.dataRange.max,n=this.dataRange.min;return n=n<0?-Math.log10(Math.abs(n)+1):Math.log10(Math.abs(n)+1),i=i<0?-Math.log10(Math.abs(i)+1):Math.log10(Math.abs(i)+1),e=e<0?-Math.log10(Math.abs(e)+1):Math.log10(e+1),(this.flipAxis?e-n:i-e)*t}draw(e){const t=e.features,i=e.context,n=e.bpPerPixel,r=e.bpStart,s=e.pixelWidth,o=e.pixelHeight-1,a=r+s*n+1,c=this.getScaleFactor(this.dataRange.min,this.dataRange.max,o,this.logScale),l=e=>this.logScale?this.computeYPixelValueInLogScale(e,c):this.computeYPixelValue(e,c);if(t&&t.length>0&&(void 0===this.dataRange.min&&(this.dataRange.min=0),this.dataRange.max>this.dataRange.min)){let s,c=-1;const h=l(0);for(let d of t){if(d.end<r)continue;if(d.start>a)break;const t=(d.start-r)/n;if(Number.isNaN(t))continue;let u=l(d.value);const f=(d.end-r)/n-t,p=e.alpha?un.addAlpha(this.getColorForFeature(d),e.alpha):this.getColorForFeature(d);if("line"===this.graphType)void 0!==s&&fr.strokeLine(i,c,s,t,u,{fillStyle:p,strokeStyle:p}),fr.strokeLine(i,t,u,t+f,u,{fillStyle:p,strokeStyle:p});else if("points"===this.graphType){const e=this.config.pointSize||3,n=t+f/2;fr.fillCircle(i,n,u,e/2,{fillStyle:p,strokeStyle:p}),d.value>this.dataRange.max?fr.fillCircle(i,n,e/2,e/2,3,{fillStyle:this.overflowColor}):d.value<this.dataRange.min&&fr.fillCircle(i,n,o-e/2,e/2,3,{fillStyle:this.overflowColor})}else if("heatmap"===this.graphType){this._colorScale||(this._colorScale=this.dataRange.min<0&&this.dataRange.max>0?fl(this.dataRange.min,0,this.dataRange.max):ul(this.dataRange.min,this.dataRange.max));const e=this._colorScale.getColor(d.value);fr.fillRect(i,t,0,f,o,{fillStyle:e})}else{const e=Math.min(o,u-h);fr.fillRect(i,t,h,f,e,{fillStyle:p}),d.value>this.dataRange.max?fr.fillRect(i,t,0,f,3,{fillStyle:this.overflowColor}):d.value<this.dataRange.min&&fr.fillRect(i,t,o-2,f,3,{fillStyle:this.overflowColor})}c=t+f,s=u}if(this.dataRange.min<0){let t=this.dataRange.max,n=this.dataRange.min;n=!0===this.logScale?n<0?-Math.log10(Math.abs(n)+1):Math.log10(Math.abs(n)+1):n,t=!0===this.logScale?t<0?-Math.log10(Math.abs(t)+1):Math.log10(Math.abs(t)+1):t;const r=t/(t-n),s=this.flipAxis?(1-r)*o:r*o;fr.strokeLine(i,0,s,e.pixelWidth,s,{strokeStyle:this.baselineColor})}}if(this.config.hasOwnProperty("guideLines"))for(let t of this.config.guideLines)if(t.hasOwnProperty("color")&&t.hasOwnProperty("y")&&t.hasOwnProperty("dotted")){let i=l(t.y),n={strokeStyle:t.color,strokeWidth:2};t.dotted?fr.dashedLine(e.context,0,i,e.pixelWidth,i,5,n):fr.strokeLine(e.context,0,i,e.pixelWidth,i,n)}}popupData(e,t){if(void 0===t&&(t=this.clickedFeatures(e)),t&&t.length>0){const i=e.genomicLocation,n=[];t.sort((function(e,t){return Math.abs((e.start+e.end)/2-i)-Math.abs((t.start+t.end)/2-i)}));const r=t.length>10?t.slice(0,10):t;r.sort((function(e,t){return e.start-t.start}));for(let e of r)if(e){n.length>0&&n.push("<hr/>");let t=e.end-e.start==1?F(Math.floor(e.start)+1):F(Math.floor(e.start)+1)+"-"+F(Math.floor(e.end));n.push({name:"Position:",value:t}),n.push({name:"Value: ",value:F(e.value.toFixed(4))})}return r.length<t.length&&n.push("<hr/>..."),n}return[]}getColorForFeature(e){let t=e.value<0&&this.altColor?this.altColor:this.color||xl.defaultColor;return"function"==typeof t?t(e.value):t}getState(){const e=super.getState();return this._colorScale&&(e.colorScale=this._colorScale.toJson()),e}dispose(){this.trackView=void 0}}function kl(e,t,i,n="mean"){if(i<=1||!e||0===e.length||"none"===n)return e;const r=e[0].chr,s=i,o=[],a=e=>{const i=t+e.bin*s,a=i+s;let c;switch(n){case"mean":c=e.sumData/e.count;break;case"max":c=e.max;break;case"min":c=e.min;break;default:throw Error(`Unknown window function: ${n}`)}const l=`${n} of ${e.count} values`;o.push({chr:r,start:i,end:a,value:c,description:l})};let c;for(let i of e){let e=Math.floor((i.start-t)/s);const n=Math.floor((i.end-t)/s);if(c&&e===c.bin&&(c.add(i),e++),!c||n>c.bin){if(c&&a(c),n>e){const e=t+n*s;o.push({chr:r,start:i.start,end:e,value:i.value})}c=new Il(n,i)}}c&&a(c);const l=[];let h=o[0];for(let e of o)h.value===e.value&&e.start<=h.end?h.end=e.end:(l.push(h),h=e);return l.push(h),l}class Il{constructor(e,t){this.bin=e,this.sumData=t.value,this.count=1,this.min=t.value,this.max=t.value}add(e){this.sumData+=e.value,this.max=Math.max(e.value,this.max),this.min=Math.min(e.value,this.min),this.count++}get mean(){return this.sumData/this.count}}class Sl extends Pc{constructor(e,t){super(t),this.config=e||{},this.genome=t,this.sourceType=void 0===e.sourceType?"file":e.sourceType,this.maxWGCount=e.maxWGCount||1e4,this.windowFunctions=["mean","min","max","none"];const i=new Set(["bigwig","bw","bigbed","bb","biginteract","biggenepred","bignarrowpeak","tdf"]);if(this.queryable=e.indexURL||!0===e.queryable,e.reader)this.reader=e.reader,this.queryable=!1!==e.queryable;else{if("ga4gh"===e.sourceType)throw Error("Unsupported source type 'ga4gh'");"eqtl"!==e.type&&"qtl"!==e.type||"gtex-ws"!==e.sourceType?"htsget"===e.sourceType?(this.reader=new Lc(e,t),this.queryable=!0):"ucscservice"===e.sourceType?(this.reader=new Mc(e.source),this.queryable=!0):"custom"===e.sourceType?(this.reader=new Nc(e.source),this.queryable=!1!==e.source.queryable):"service"===e.sourceType?(this.reader=new Sc(e,t),this.queryable=!0):(this.reader=new Sc(e,t),void 0!==e.queryable?this.queryable=e.queryable:(i.has(e.format)||this.reader.indexed)&&(this.queryable=!0)):(this.reader=new Rc(e),this.queryable=!0)}this.searchable=!1!==e.searchable}async defaultVisibilityWindow(){if(this.reader&&"function"==typeof this.reader.defaultVisibilityWindow)return this.reader.defaultVisibilityWindow()}async trackType(){const e=await this.getHeader();return e?e.type:void 0}async getHeader(){if(!this.header)if(this.reader&&"function"==typeof this.reader.readHeader){const e=await this.reader.readHeader();e?(this.header=e,e.format&&(this.config.format=e.format)):this.header={}}else this.header={};return this.header}async getFeatures({chr:e,start:t,end:i,bpPerPixel:n,visibilityWindow:r,windowFunction:s}){const o="all"===e.toLowerCase();if(t=t||0,i=i||Number.MAX_SAFE_INTEGER,(o&&!this.wgFeatures&&this.supportsWholeGenome()||this.config.disableCache||!this.featureCache||!this.featureCache.containsRange(new uo(e,t,i)))&&await this.loadFeatures(e,t,i,r),o){if(!this.wgFeatures)if(this.supportsWholeGenome())if("wig"===this.config.type){const e=await La(this.featureCache.getAllFeatures(),this.genome,1e6);this.wgFeatures=kl(e,0,n,s)}else this.wgFeatures=await La(this.featureCache.getAllFeatures(),this.genome,this.maxWGCount);else this.wgFeatures=[];return this.wgFeatures}return this.featureCache.queryFeatures(e,t,i)}async findFeatures(e){return this.featureCache?this.featureCache.findFeatures(e):[]}supportsWholeGenome(){return!this.queryable}getAllFeatures(){return this.queryable||!this.featureCache?[]:this.featureCache.getAllFeatures()}async loadFeatures(e,t,i,n){await this.getHeader();const r=this.reader;let s=t,o=i,a=e;if(!this.chrAliasManager&&this.reader&&this.reader.sequenceNames&&(this.chrAliasManager=new Hc(this.reader.sequenceNames,this.genome)),this.chrAliasManager&&(a=await this.chrAliasManager.getAliasName(e)),(!n||n<=0)&&!1!==this.config.expandQuery){const t=this.genome?this.genome.getChromosome(e):void 0;s=0,o=Math.max(t?t.bpLength:Number.MAX_SAFE_INTEGER,i)}else if(n>i-t&&!1!==this.config.expandQuery){let e=Math.min(4.1*(i-t),n);this.config.minQuerySize&&e<this.config.minQuerySize&&(e=this.config.minQuerySize),s=Math.max(0,(t+i-e)/2),o=s+e}let c=await r.readFeatures(a,s,o);void 0===this.queryable&&(this.queryable=r.indexed);const l=this.queryable?new uo(e,s,o):void 0;if(c){if("wig"!==this.config.format&&"junctions"!==this.config.type){Ha(c,this.config.maxRows||Number.MAX_SAFE_INTEGER)}this.featureCache=new On(c,this.genome,l),this.searchable&&this.addFeaturesToDB(c,this.config)}else this.featureCache=new On([],l)}addFeaturesToDB(e,t){this.featureMap||(this.featureMap=new Map);const i=t.searchableFields||["name","transcript_id","gene_id","gene_name","id"];for(let t of e)for(let e of i){let i;if(t.hasOwnProperty(e)?i=t[e]:"function"==typeof t.getAttributeValue&&(i=t.getAttributeValue(e)),i){if(i=i.replaceAll(" ","+").toUpperCase(),this.featureMap.has(i)){const e=this.featureMap.get(i);if(t.end-t.start<e.end-e.start)continue}this.featureMap.set(i,t)}}}search(e){if(this.featureMap)return this.featureMap.get(e.toUpperCase())}}class El extends Pc{constructor(e,t){super(t),this.config=e,this.genome=t,this.queryable=!1,this.searchable=!1!==e.searchable,this.updateFeatures(e.features)}updateFeatures(e){Ha(e=function(e,t){if(t)for(let i of e)i.chr=t.getChromosomeName(i.chr);return e}(e,this.genome)),this.config.mappings&&function(e,t){let i=Object.keys(t);e.forEach((function(e){i.forEach((function(i){e[i]=e[t[i]]}))}))}(e,this.config.mappings),this.featureCache=new On(e,this.genome),(this.searchable||this.config.searchableFields)&&this.addFeaturesToDB(e,this.config)}async getFeatures({chr:e,start:t,end:i,bpPerPixel:n,visibilityWindow:r}){const s=this.genome,o=s?s.getChromosomeName(e):e;return"all"===o.toLowerCase()?La(this.featureCache.getAllFeatures(),this.genome,this.maxWGCount):this.featureCache.queryFeatures(o,t,i)}getAllFeatures(){return this.featureCache.getAllFeatures()}supportsWholeGenome(){return!0}addFeaturesToDB(e,t){this.featureMap||(this.featureMap=new Map);const i=t.searchableFields||["name"];for(let t of e)for(let e of i){let i;if("function"==typeof t.getAttributeValue&&(i=t.getAttributeValue(e)),i||(i=t[e]),i){i=i.replaceAll(" ","+");const e=this.featureMap.get(i.toUpperCase());if(e&&e.end-e.start>t.end-t.start)continue;this.featureMap.set(i.toUpperCase(),t)}}}search(e){if(this.featureMap)return this.featureMap.get(e.toUpperCase())}}class Nl{constructor({chr:e,locus:t,accession:i,aliases:n,features:r,sequence:s}){this.chr=e,this.locus=t,this.accession=i,this.aliases=n,this.features=r,this.sequence=s,this.bpLength=s.length}toJSON(){return{gbkURL:this.url}}getSequenceRecord(e){return{chr:this.chr,bpLength:this.bpLength}}get chromosomeNames(){return[this.chr]}getFirstChromosomeName(){return this.chr}get id(){return this.accession}get name(){return this.locus}get initialLocus(){return this.chr}get description(){return this.locus}get infoURL(){return this.url}showWholeGenomeView(){return!1}getHomeChromosomeName(){return this.chr}getChromosomeName(e){return e}getChromosomeDisplayName(e){return this.chr}getChromosome(e){if(e===this.chr)return{name:this.chr,bpLength:this.bpLength}}async loadChromosome(e){return this.getChromosome(e)}async getAliasRecord(e){}getCytobands(e){return[]}getChromosomes(){return[this.getChromosome(this.chr)]}get wgChromosomeNames(){}getGenomeCoordinate(e,t){if(e===this.chr)return t}getChromosomeCoordinate(e){return{chr:this.chr,position:e}}getCumulativeOffset(e){return 0}getGenomeLength(){return this.bpLength}async getSequence(e,t,i){return e===this.chr?this.sequence.substring(t,i):void 0}getSequenceInterval(e,t,i){return e===this.chr?new fo(this.chr,0,this.sequence.length,this.sequence):void 0}}const Ml=/\s+/,Rl=new Map;async function Bl(e){let t=Rl.get(e);if(!t){t=function(e){if(!e)return null;const t=wc(e);let i=t.nextLine();const n=i.split(/\s+/);if("LOCUS"!==n[0].toUpperCase())throw Error("Expected `LOCUS` line. Found: "+i);const r=n[1].trim();let s,o;do{if(i=t.nextLine(),i.startsWith("ACCESSION")){const e=i.split(Ml);if(e.length<2)throw Error("Genbank file missing ACCESSION number.");s=e[1].trim()}else if(i.startsWith("ALIASES")){const e=i.split(Ml);e.length>1&&(o=e[1].split(","))}}while(i&&!i.startsWith("FEATURES"));const a=s||r,c=function(e,t){const i=[];let n,r,s,o=0;for(;;)if(r=t.nextLine(),""!==r){if(!r||r.startsWith("ORIGIN"))break;if(r.length<6)o<10&&console("Unexpected line in genbank file (skipping): "+r),o++;else if(" "!==r.charAt(5)){let t=r.substring(5,21).trim();s={chr:e,type:t,attributes:{},getAttributeValue:function(e){return this.attributes[e]}},n=r.substring(21),"source"!==t.toLowerCase()&&i.push(s)}else{let t=r.substring(21).trim();if(t.length>0)if(47===t.charCodeAt(0)){if(47===n.charCodeAt(0)){let e=n.split("=",2);if(e.length>1){let t=e[0].length>1?e[0].substring(1):"",i=Tl(e[1]);s.attributes[t]=i}}else{const t=n.includes("complement")?"-":"+";s.strand=t;let i=n.replace("join","").replace("order","").replace("complement","").replace("(","").replace(")","");if(i.includes("..")){i=i.replace("<","").replace(">","");const n=Dl(i,e,t),r=n[0];s.start=r.start;const o=n[n.length-1];s.end=o.end,n.length>1&&(s.exons=n)}else s.start=parseInt(i)-1,s.end=s.start+1}n=t}else n+=t}}return i}(a,t),l=function(e){let t,i="";for(;(t=e.nextLine())&&!t.startsWith("//");){t=t.trim();const e=t.split(/\s+/);for(let t=1;t<e.length;t++)i+=e[t]}return i}(t);return new Nl({chr:a,locus:r,accession:s,aliases:o,features:c,sequence:l})}(await Mn.loadString(e,{})),t.url=e,Rl.set(e,t)}return t}function Dl(e,t,i){const n=e.split(","),r=[];e.includes("complement");for(const e of n){const n=e.split("..");let s=0;try{s=parseInt(n[0])-1}catch(e){console.error(e)}let o=s+1;n.length>1&&(o=parseInt(n[1])),r.push({chr:t,start:s,end:o,strand:i})}return r.sort((function(e,t){return e.start-t.start})),r}function Tl(e){return e.startsWith('"')&&e.endsWith('"')&&(e=e.substring(1,e.length-2)),e}class zl extends Pc{constructor(e,t){super(t),this.config=e,this.searchable=!0}async getFeatures({chr:e,start:t,end:i,bpPerPixel:n,visibilityWindow:r}){if(!this.featureSource){const e=await Bl(this.config.url);this.featureSource=new El({genome:this.config.genome,features:e.features,searchableFields:["gene","db_xref","locus_tag","transcript_id"]})}return this.featureSource.getFeatures({chr:e,start:t,end:i})}supportsWholeGenome(){return!1}search(e){return this.featureSource.search(e)}}const Ll=new Set(["bigwig","bw","bigbed","bb","biginteract","biggenepred","bignarrowpeak"]);function Hl(e,t){const i=e.format?e.format.toLowerCase():void 0;return e.features?new El(e,t):Ll.has(i)?new cl(e,t):"tdf"===i?new Uc(e,t):"gbk"===i?new zl(e,t):new Sl(e,t)}function Pl(e){return(3-e.readingFrame)%3}function Ol(e){return e.cdStart||e.start}function Vl(e){return e.cdEnd||e.end}const ql=.25;function Ql(e,t,i){let n=(e.start-t)/i,r=(e.end-t)/i,s=r-n;return s<3&&(s=3,n-=1.5),{px:n,px1:r,pw:s}}function Ul(e,t,i,n,r,s){try{r.save(),r.fillStyle=this.color,r.strokeStyle=this.color;const n=this.getColorForFeature(e);let o,a;r.fillStyle=n,r.strokeStyle=n,"SQUISHED"===this.displayMode&&void 0!==e.row?(o=this.featureHeight/2,a=this.margin+this.squishedRowHeight*e.row):"EXPANDED"===this.displayMode&&void 0!==e.row?(o=this.featureHeight,a=this.margin+this.expandedRowHeight*e.row):(o=this.featureHeight,a=this.margin);const c=s.pixelWidth,l=a+o/2,h=o/2,d=l-h/2,u=e.exons?e.exons.length:0,f=Ql(e,t,i),p=this.arrowSpacing,g="+"===e.strand?1:"-"===e.strand?-1:0;if(0===u){const e=Math.max(0,f.px),t=Math.min(c,f.px1),i=t-e;if(r.fillRect(e,a,i,o),0!==g){r.fillStyle="white",r.strokeStyle="white";for(let i=e+p/2;i<t;i+=p)fr.strokeLine(r,i-2*g,l-2,i,l),fr.strokeLine(r,i-2*g,l+2,i,l);r.fillStyle=n,r.strokeStyle=n}}else{fr.strokeLine(r,f.px+1,l,f.px1-1,l);const u=Math.max(0,f.px)+p/2,m=Math.min(c,f.px1);for(let e=u;e<m;e+=p)fr.strokeLine(r,e-2*g,l-2,e,l),fr.strokeLine(r,e-2*g,l+2,e,l);for(let u=0;u<e.exons.length;u++){const f=e.exons[u];let m,w=Math.round((f.start-t)/i),b=Math.round((f.end-t)/i),F=Math.max(1,b-w);if(!(w+F<0)){if(w>c)break;if(f.utr)r.fillRect(w,d,F,h);else{if(f.cdStart&&(m=Math.round((f.cdStart-t)/i),r.fillRect(w,d,m-w,h),F-=m-w,w=m),f.cdEnd&&(m=Math.round((f.cdEnd-t)/i),r.fillRect(m,d,b-m,h),F-=b-m,b=m),F=Math.max(F,1),r.fillRect(w,a,F,o),void 0!==f.readingFrame&&s.bpPerPixel<ql&&s.sequenceInterval){const i=u>0&&void 0!==e.exons[u-1].readingFrame?e.exons[u-1]:void 0,n=u<e.exons.length-1&&void 0!==e.exons[u+1].readingFrame?e.exons[u+1]:void 0;jl.call(this,r,e.strand,i,f,n,t,s.bpPerPixel,a,o,s.sequenceInterval)}if(F>p+5&&0!==g&&s.bpPerPixel>ql){r.fillStyle="white",r.strokeStyle="white";for(let e=w+p/2;e<b;e+=p)fr.strokeLine(r,e-2*g,l-2,e,l),fr.strokeLine(r,e-2*g,l+2,e,l);r.fillStyle=n,r.strokeStyle=n}}}}}s.drawLabel&&"SQUISHED"!==this.displayMode&&Gl.call(this,r,e,f.px,f.px1,a,s.referenceFrame,s)}finally{r.restore()}}function jl(e,t,i,n,r,s,o,a,c,l){const h=["rgb(124,124,204)","rgb(12, 12, 120)"];e.save();const d=(t,i,n,r,d,u)=>{const f=Math.round((i-s)/o),p=Math.round((n-s)/o)-f;let g;if(void 0===r){if(l.hasSequence(i,n)){const e=l.getSequence(i,n);if(e&&3===e.length){const i="+"===t?e:co(e.split("").reverse().join(""));g=ch[i]}}}else g=r;e.fillStyle="M"===r||"M"===g&&0===u?"#83f902":"STOP"===g?"#ff2101":h[d],e.fillRect(f,a,p,c),g&&(e.save(),((t,i,n,r,s)=>{"STOP"===s&&(s="*");const o=e.measureText(s).width;fr.fillText(e,s,n+(i-o)/2,r-4,{fillStyle:"#ffffff"})})(0,p,f,a+c,g),e.restore());const m=n-i;return m>0&&m<3?{start:i,end:n}:void 0},u=Pl(n);let f,p,g,m,w,b=Ol(n),F=Vl(n),v=1;if("+"===t){for(u>0&&(b+=u),v=1,w=0,f=b;f<F;w++,f+=3)m=v%2,p=Math.min(F,f+3),g=d(t,f,p,void 0,v%2,w),++v;if(u>0||g){const e=u>0?Wl.call(this,t,u,b-u,b,g,i,n,r,l):Wl.call(this,t,void 0,void 0,void 0,g,i,n,r,l);if(e){const{left:i,rite:n}=e;i&&d(t,b-u,b,i.aminoAcidLetter,0,void 0),n&&d(t,g.start,g.end,n.aminoAcidLetter,m,void 0)}}}else{for(u>0&&(F-=u),v=1,w=0,w=0,p=F;p>b;w++,p-=3)m=v%2,f=Math.max(b,p-3),g=d(t,f,p,void 0,v%2,w),++v;if(u>0||g){const e=u>0?Wl.call(this,t,u,F,F+u,g,i,n,r,l):Wl.call(this,t,void 0,void 0,void 0,g,i,n,r,l);if(e){const{left:i,rite:n}=e;n&&d(t,F,F+u,n.aminoAcidLetter,0,void 0),i&&d(t,g.start,g.end,i.aminoAcidLetter,m,void 0)}}}e.restore()}function Gl(e,t,i,n,r,s,o){try{e.save();let s=t.name;if(void 0===s&&t.gene&&(s=t.gene.name),void 0===s&&(s=t.id||t.ID),!s||"."===s)return;let a=o.pixelXOffset||0;const c=Math.max(i,-a);let l,h=(c+Math.min(n,-a+o.viewportWidth))/2;"COLLAPSED"===this.displayMode&&"SLANT"===this.labelDisplayMode&&(l={rotate:{angle:45}});const d=function(e,t){return t?e+20:e+25}(r,l);let u=this.getColorForFeature(t),f=this.browser.qtlSelections.hasPhenotype(t.name);const p={textAlign:"SLANT"===this.labelDisplayMode?void 0:"center",fillStyle:u,strokeStyle:u},g=e.measureText(s),m=h-g.width/2,w=h+g.width/2,b=o.rowLastLabelX[t.row]||-Number.MAX_SAFE_INTEGER;(o.labelAllFeatures||m>b||f)&&(o.rowLastLabelX[t.row]=w,"y"===o.axis?(e.save(),fr.labelTransformWithContext(e,h),fr.fillText(e,s,h,d,p,l),e.restore()):(e.clearRect(h-g.width/2-1,d-g.actualBoundingBoxAscent-1,g.width+2,g.actualBoundingBoxAscent+g.actualBoundingBoxDescent+2),fr.fillText(e,s,h,d,p,l)))}finally{e.restore()}}function Wl(e,t,i,n,r,s,o,a,c){let l,h,d="",u="",f="";const p={left:void 0,rite:void 0};if("+"===e){if(t){if(u=c.getSequence(i,n),!u)return;if([l,h]=[Vl(s)-(3-t),Vl(s)],d=c.getSequence(l,h),!d)return;f=d+u,p.left={triplet:f,aminoAcidLetter:ch[f]}}if(r){if(d=c.getSequence(r.start,r.end),!d)return;const e=Pl(a),t=Ol(a);if(u=c.getSequence(t,t+e),!u)return;f=d+u,p.rite={triplet:f,aminoAcidLetter:ch[f]}}}else{if(t){if(d=c.getSequence(i,n),void 0===d)return;if([l,h]=[Ol(a),Ol(a)+(3-t)],u=c.getSequence(l,h),void 0===u)return;f=d+u,f=co(f.split("").reverse().join("")),p.rite={triplet:f,aminoAcidLetter:ch[f]}}if(r){if(u=c.getSequence(r.start,r.end),void 0===u)return;const e=Pl(s),t=Vl(s);if(d=c.getSequence(t-e,t),void 0===d)return;f=d+u,f=co(f.split("").reverse().join("")),p.left={triplet:f,aminoAcidLetter:ch[f]}}}return p}const $l=new Set(["nonsense","missense","stop-loss","frameshift","cds-indel"]),Kl=new Set(["coding-synon"]),Yl=new Set(["splice-3","splice-5"]),Xl=new Set(["untranslated-5","untranslated-3"]);function Zl(e,t,i,n,r){var s,o,a,c,l,h,d=Ql(e,t,i),u=this.margin,f=this.snpColors.length;switch(s="squished"===this.displayMode?this.squishedRowHeight:this.expandedRowHeight,this.colorBy){case"function":c=e.func,h=c.split(","),l=h.map((function(e){return $l.has(e)||Yl.has(e)?f-1:Kl.has(e)?f-2:Xl.has(e)?f-3:0})),o=l.reduce((function(e,t){return Math.max(e,t)}));break;case"class":o="deletion"===(a=e.class)?f-1:"mnp"===a?f-2:"microsatellite"===a||"named"===a?f-3:0}r.fillStyle=this.snpColors[o],r.fillRect(d.px,u,d.pw,s)}function Jl(e,t,i,n,r){const s="EXPANDED"===this.displayMode?this.expandedRowHeight:this.squishedRowHeight;let o=this.margin;"COLLAPSED"!==this.displayMode&&void 0!==e.row&&(o+=e.row*s);const a=o+.5*s,c=a-.5*s,l=a+.5*s,h=Math.round((e.junction_left-t)/i),d=Math.round((e.junction_right-t)/i);r.beginPath(),r.moveTo(h,a),r.bezierCurveTo(h,c,d,c,d,a),r.lineWidth=1+Math.log(e.num_junction_reads)/Math.log(2),r.strokeStyle="blue",r.stroke();const u=e.spanning_frag_coords;for(let e=0;e<u.length;e++){const n=u[e],s=Math.round((n.left-t)/i),o=Math.round((n.right-t)/i);r.beginPath(),r.moveTo(s,a),r.bezierCurveTo(s,l,o,l,o,a),r.lineWidth=1,r.strokeStyle="purple",r.stroke()}}class eh extends Pa{static defaultColor="rgb(0,0,150)";static defaults={type:"annotation",maxRows:1e3,displayMode:"EXPANDED",margin:10,featureHeight:14,useScore:!1};constructor(e,t){super(e,t)}init(e){super.init(e),this.labelDisplayMode=e.labelDisplayMode,e._featureSource?(this.featureSource=e._featureSource,delete e._featureSource):"blat"!==e.type&&(this.featureSource=e.featureSource?e.featureSource:Hl(e,this.browser.genome)),"FusionJuncSpan"===e.type?(this.render=e.render||Jl,this.squishedRowHeight=e.squishedRowHeight||50,this.expandedRowHeight=e.expandedRowHeight||50,this.height=e.height||this.margin+2*this.expandedRowHeight):"snp"===e.type?(this.render=e.render||Zl,this.snpColors=["rgb(0,0,0)","rgb(0,0,255)","rgb(0,255,0)","rgb(255,0,0)"],this.colorBy="function",this.expandedRowHeight=e.expandedRowHeight||10,this.squishedRowHeight=e.squishedRowHeight||5,this.height=e.height||30):(this.render=e.render||Ul,this.arrowSpacing=30,function(e){e.browser.on&&(e.browser.on("trackdragend",t),e.browser.on("trackremoved",i));function t(){e.trackView&&"SQUISHED"!==e.displayMode&&e.trackView.repaintViews()}function i(n){e.browser.un&&e===n&&(e.browser.un("trackdragend",t),e.browser.un("trackremoved",i))}}(this),this.squishedRowHeight=e.squishedRowHeight||15,this.expandedRowHeight=e.expandedRowHeight||30,this.height=e.height||this.margin+2*this.expandedRowHeight,e.colorBy&&(e.colorBy.field&&(e.colorTable=e.colorBy.pallete||e.colorBy.palette,e.colorBy=e.colorBy.field),this.colorBy=e.colorBy,e.colorTable?this.colorTable=new Yn(e.colorTable):this.colorTable=new Kn("Set1")))}async postInit(){if("function"!=typeof this.featureSource.getHeader||(this.header=await this.featureSource.getHeader(),!this.disposed))return this.header&&this.setTrackProperties(this.header),void 0===this.visibilityWindow&&"function"==typeof this.featureSource.defaultVisibilityWindow&&(this.visibilityWindow=await this.featureSource.defaultVisibilityWindow()),this._initialColor=this.color||this.constructor.defaultColor,this._initialAltColor=this.altColor||this.constructor.defaultColor,this}get searchable(){return this.featureSource.searchable}async search(e){return this.featureSource&&this.featureSource.searchable?this.featureSource.search(e):void 0}get supportsWholeGenome(){return void 0!==this.config.supportsWholeGenome?this.config.supportsWholeGenome:this.featureSource&&"function"==typeof this.featureSource.supportsWholeGenome?this.featureSource.supportsWholeGenome():!(void 0!==this.visibilityWindow||!1!==this.config.indexed&&this.config.indexURL)||void 0}async getFeatures(e,t,i,n){const r=this.visibilityWindow;return this.featureSource.getFeatures({chr:e,start:t,end:i,bpPerPixel:n,visibilityWindow:r})}computePixelHeight(e){if("COLLAPSED"===this.displayMode)return this.margin+this.expandedRowHeight;{let t=0;if(e&&"function"==typeof e.forEach)for(let i of e)i.row&&i.row>t&&(t=i.row);return this.margin+(t+1)*("SQUISHED"===this.displayMode?this.squishedRowHeight:this.expandedRowHeight)}}draw(e){const{features:t,context:i,bpPerPixel:n,bpStart:r,bpEnd:s,pixelWidth:o,pixelHeight:a,referenceFrame:c}=e;if(n<ql&&(e.sequenceInterval=this.browser.genome.getSequenceInterval(c.chr,r,s)),this.isMergedTrack||fr.fillRect(i,0,e.pixelTop,o,a,{fillStyle:"rgb(255, 255, 255)"}),t){const c=[];e.rowLastX=[],e.rowLastLabelX=[];for(let i of t)if((!this._filter||this._filter(i))&&i.start>r&&i.end<s){const t="COLLAPSED"===this.displayMode?0:i.row||0;c[t]?c[t]++:c[t]=1,e.rowLastX[t]=-Number.MAX_SAFE_INTEGER,e.rowLastLabelX[t]=-Number.MAX_SAFE_INTEGER}const l=o/Math.max(1,Math.max(...c.filter((e=>!isNaN(e)))));let h=[];const d=[];for(let o of t){if(this._filter&&!this._filter(o))continue;if(o.end<r)continue;if(o.start>s)break;"COLLAPSED"===this.displayMode&&this.browser.qtlSelections.hasPhenotype(o.name)&&d.push(o);const t="COLLAPSED"===this.displayMode?0:o.row;e.drawLabel=e.labelAllFeatures||l>10;const c=Math.ceil((o.end-r)/n),u=h[t];if(!u||c>u){this.render.call(this,o,r,n,a,i,e);const s=Math.floor((o.start-r)/n);u&&s-u<=0&&(i.globalAlpha=.5,fr.strokeLine(i,s,0,s,a,{strokeStyle:"rgb(255, 255, 255)"}),i.globalAlpha=1),h[t]=c}}for(let t of d)e.drawLabel=!0,this.render.call(this,t,r,n,a,i,e)}else console.log("No feature list")}clickedFeatures(e){const t=e.y-this.margin,i=super.clickedFeatures(e);let n;switch(this.displayMode){case"SQUISHED":n=Math.floor(t/this.squishedRowHeight);break;case"EXPANDED":n=Math.floor(t/this.expandedRowHeight);break;default:n=void 0}return i.filter((function(e){return void 0===n||void 0===e.row||n===e.row}))}popupData(e,t){void 0===t&&(t=this.clickedFeatures(e));const i=e.genomicLocation,n=[];for(let e of t){const t=e._f||e,r="function"==typeof t.popupData?t.popupData(i):this.extractPopupData(t);if(r){n.length>0&&n.push("<hr/><hr/>");const s=this.infoURL||this.config.infoURL;for(let t of r)if(n.push(t),s&&t.name&&"name"===t.name.toLowerCase()&&t.value&&b(t.value)&&!t.value.startsWith("<")){const i=s.replace("$$",e.name);t.value=`<a target=_blank href=${i}>${t.value}</a>`}const o="gff"===this.config.format||"gff3"===this.config.format||"gtf"===this.config.format;if(t.exons&&t.exons.length>1)for(let e=0;e<t.exons.length;e++){const r=t.exons[e];if(i>=r.start&&i<=r.end){const i=o?r.number:"-"===t.strand?t.exons.length-e:e+1;i&&(n.push("<hr/>"),n.push({name:"Exon Number",value:i}));break}}}}return n}menuItemList(){const e=[];if(this.render===Zl){e.push("<hr/>");for(const i of["function","class"]){function n(){this.colorBy=i,this.trackView.repaintViews()}e.push({element:Ta(`Color by ${i}`,i===this.colorBy),click:n})}}e.push("<hr/>");const t={COLLAPSED:"Collapse",SQUISHED:"Squish",EXPANDED:"Expand"};for(const r of["COLLAPSED","SQUISHED","EXPANDED"]){function s(){this.displayMode=r,this.config.displayMode=r,this.trackView.checkContentHeight(),this.trackView.repaintViews()}e.push({element:Ta(t[r],r===this.displayMode),click:s})}return e}contextMenuItemList(e){const t=this.clickedFeatures(e);if(void 0===t||0===t.length)return;t.length>1&&t.sort(((e,t)=>t.end-t.start-(e.end-e.start)));const i=t[0];if(i.end-i.start<=1e6){const e=[{label:"View feature sequence",click:async()=>{let e=await this.browser.genome.getSequence(i.chr,i.start,i.end);e?"-"===i.strand&&(e=lo(e)):e="Unknown sequence",this.browser.alert.present(e)}}];return to()&&void 0!==navigator.clipboard&&e.push({label:"Copy feature sequence",click:async()=>{let e=await this.browser.genome.getSequence(i.chr,i.start,i.end);e?"-"===i.strand&&(e=lo(e)):e="Unknown sequence";try{await navigator.clipboard.writeText(e)}catch(e){console.error(e),this.browser.alert.present(`error copying sequence to clipboard ${e}`)}}}),e.push("<hr/>"),e}}description(){if(Zl===this.render){let e="<html>"+this.name+"<hr/>";return e+="<em>Color By Function:</em><br>",e+='<span style="color:red">Red</span>: Coding-Non-Synonymous, Splice Site<br>',e+='<span style="color:green">Green</span>: Coding-Synonymous<br>',e+='<span style="color:blue">Blue</span>: Untranslated<br>',e+='<span style="color:black">Black</span>: Intron, Locus, Unknown<br><br>',e+="<em>Color By Class:</em><br>",e+='<span style="color:red">Red</span>: Deletion<br>',e+='<span style="color:green">Green</span>: MNP<br>',e+='<span style="color:blue">Blue</span>: Microsatellite, Named<br>',e+='<span style="color:black">Black</span>: Indel, Insertion, SNP',e+="</html>",e}return super.description()}getColorForFeature(e){const t=e._f||e;let i;if(e.name&&this.browser.qtlSelections.hasPhenotype(e.name))i=this.browser.qtlSelections.colorForGene(e.name);else if(this.altColor&&"-"===t.strand)i="function"==typeof this.altColor?this.altColor(t):this.altColor;else if(this.color)i="function"==typeof this.color?this.color(t):this.color;else if(this.colorBy){const e=t.getAttributeValue?t.getAttributeValue(this.colorBy):t[this.colorBy];i=this.colorTable.getColor(e)}else t.color&&(i=t.color);if(i||(i=eh.defaultColor),t.alpha&&1!==t.alpha)i=un.addAlpha(i,t.alpha);else if(this.useScore&&t.score&&!Number.isNaN(t.score)){const e=function(e,t,i){const n=(t-e)/9,r=Math.floor((i-e)/n);return Math.min(1,.2+.8*r/9)}(this.config.min?this.config.min:this.viewLimitMin?this.viewLimitMin:0,this.config.max?this.config.max:this.viewLimitMax?this.viewLimitMax:1e3,t.score);t.alpha=e,i=un.addAlpha(i,e)}return i}dispose(){this.trackView=void 0}}class th{constructor(e){if(this.config=e,this.browser=e.browser,this.columnFormat=e.columnFormat,this.tableRowSelectionList=[],this.tableDOM=t({class:"igv-roi-table"}),e.width){let[t]=e.width.split("px");t=parseInt(t,10),this.tableDOM.style.width=`${Math.min(t,1600)}px`}e.parent.appendChild(this.tableDOM),this.headerDOM=e,this.tableColumnTitles=this.tableDOM,this.tableRowContainer=this.tableDOM,this.footerDOM=e.gotoButtonHandler}set headerDOM({browser:e,parent:i,headerTitle:n,dismissHandler:r}){const s=t();this.tableDOM.appendChild(s);const o=t();s.appendChild(o),o.innerHTML=n;const a=t();s.appendChild(a),a.appendChild(l("times")),this.boundDismissHandler=function(e){e.stopPropagation(),r()}.bind(this),a.addEventListener("click",this.boundDismissHandler);const{y:c}=e.root.getBoundingClientRect(),{y:h}=i.getBoundingClientRect(),d=-(h-c);p(this.tableDOM,s,{minX:0,minY:d}),this.tableDOM.style.display="none",this._headerDOM=s}set tableColumnTitles(e){const i=t({class:"igv-roi-table-column-titles"});e.appendChild(i);for(const{label:e,width:n}of this.columnFormat){const r=t();i.appendChild(r),r.style.width=n,r.innerText=e}this._tableColumnTitlesDOM=i}get tableColumnTitles(){return this._tableColumnTitlesDOM}set tableRowContainer(e){const i=t({class:"igv-roi-table-row-container"});e.appendChild(i),this._tableRowContainerDOM=i}get tableRowContainer(){return this._tableRowContainerDOM}set footerDOM(e){const i=t();this.tableDOM.appendChild(i);const n=t({class:"igv-roi-table-button"});i.appendChild(n),n.id="igv-roi-table-view-button",n.textContent="Go To",n.style.pointerEvents="none",this._footerDOM=i,this.gotoButton=n,this.boundGotoButtonHandler=e.bind(this),this.gotoButton.addEventListener("click",this.boundGotoButtonHandler)}tableRowDOMHelper(e){e.addEventListener("mousedown",(t=>{t.stopPropagation(),e.classList.toggle("igv-roi-table-row-selected"),e.classList.contains("igv-roi-table-row-selected")?e.classList.remove("igv-roi-table-row-hover"):e.classList.add("igv-roi-table-row-hover"),this.setTableRowSelectionState(e.classList.contains("igv-roi-table-row-selected"))})),e.addEventListener("mouseover",(t=>{e.classList.contains("igv-roi-table-row-selected")?e.classList.remove("igv-roi-table-row-hover"):e.classList.add("igv-roi-table-row-hover")})),e.addEventListener("mouseout",(t=>{e.classList.remove("igv-roi-table-row-hover")}))}clearTable(){const e=this.tableRowContainer.querySelectorAll(".igv-roi-table-row");for(let t of e)t.remove()}setTableRowSelectionState(e){e?this.tableRowSelectionList.push(1):this.tableRowSelectionList.pop(),this.gotoButton.style.pointerEvents=this.tableRowSelectionList.length>0?"auto":"none"}present(){this.tableDOM.style.left="0px";const{y:e}=this.browser.root.getBoundingClientRect(),{y:t}=this.config.parent.getBoundingClientRect();this.tableDOM.style.top=e-t+"px",this.tableDOM.style.display="flex"}dismiss(){this.tableDOM.style.display="none"}isVisible(){return"none"!==this.tableDOM.style.display}dispose(){this.tableDOM.innerHTML="",this.tableDOM.remove();for(const e of Object.keys(this))this[e]=void 0;document.removeEventListener("click",this.boundDismissHandler)}}class ih extends th{constructor(e){super(Object.assign({width:"1024px"},e)),this.descriptionDOM=e}set descriptionDOM(e){if(e.description){let i;i=t({class:"igv-roi-table-description"}),this.tableDOM.insertBefore(i,this.tableColumnTitles),i.style.height="auto",i.innerHTML="BLAT result for query sequence:",i=t({class:"igv-roi-table-description"}),this.tableDOM.insertBefore(i,this.tableColumnTitles),i.style.height="auto",i.style.maxHeight="128px",i.innerHTML=e.description,i=t({class:"igv-roi-table-goto-explainer"}),this.tableDOM.insertBefore(i,this.tableColumnTitles),i.innerHTML="Select one or more rows and click Go To to view the regions"}}tableRowDOM(e){const i=t({class:"igv-roi-table-row"}),n=e.map((e=>isFinite(e)?F(e):e));for(let e=0;e<n.length;e++){const r=t();i.appendChild(r);const s=this.columnFormat[e];r.style.width=s.width||"fit-content",r.innerText=n[e]}return this.tableRowDOMHelper(i),i}renderTable(e){if(Array.from(this.tableRowContainer.querySelectorAll(".igv-roi-table-row")).forEach((e=>e.remove())),e.length>0)for(let t of e){const e=this.tableRowDOM(t);this.tableRowContainer.appendChild(e)}}static getColumnFormatConfiguration(){return[{label:"chr",width:"7%"},{label:"start",width:"12%"},{label:"end",width:"12%"},{label:"strand",width:"5%"},{label:"score",width:"5%"},{label:"match",width:"5%"},{label:"mis-match",width:"7%"},{label:"rep. match",width:"7%"},{label:"N's",width:"3%"},{label:"Q gap count",width:"9%"},{label:"Q gap bases",width:"9%"},{label:"T gap count",width:"9%"},{label:"T gap bases",width:"9%"}]}static gotoButtonHandler(e){e.stopPropagation();const t=this.tableDOM.querySelectorAll(".igv-roi-table-row-selected"),i=[];for(const e of t){const t=[];e.querySelectorAll("div").forEach((e=>t.push(e.innerText)));const[n,r,s]=t;i.push(`${n}:${r}-${s}`)}for(const e of this.tableDOM.querySelectorAll(".igv-roi-table-row"))e.classList.remove("igv-roi-table-row-selected");this.setTableRowSelectionState(!1),this.browser.search(i.join(" "))}}async function nh({url:e,userSeq:t,db:i}){if(e=e||"https://igv.org/services/blatUCSC.php",!i)throw Error("Blat database is not defined");const n=await async function(e="",t,i){const n=new URLSearchParams;n.append("userSeq",t),n.append("db",i);const r=await fetch(e,{method:"post",body:n});return r.json()}(e,t,i);n.fields;return n.blat.map(da)}const rh=25e3;class sh extends eh{constructor(e,t){super(e,t),this.name||(this.name="Blat Results"),this.sequence=e.sequence,this.table=void 0,e.features&&(this._features=e.features,this.featureSource=new El({features:e.features},this.browser.genome),delete e.features)}async postInit(){if(!this.featureSource){const e=this.browser.genome.id,t=this.browser.config.blatServerURL,i=await nh({url:t,userSeq:this.sequence,db:e});this._features=i,this.featureSource=new El({features:i},this.browser.genome)}this._initialColor=this.color||this.constructor.defaultColor,this._initialAltColor=this.altColor||this.constructor.defaultColor}openTableView(){if(void 0===this.table){const e=this._features.map((e=>[e.chr,e.start+1,e.end,e.strand,e.score,e.matches,e.misMatches,e.repMatches,e.nCount,e.qNumInsert,e.qBaseInsert,e.tNumInsert,e.tBaseInsert])),t={browser:this.browser,parent:this.browser.columnContainer,headerTitle:this.config.title,description:this.sequence,dismissHandler:()=>{this.table.dismiss(),this.table.dispose(),this.table=void 0},columnFormat:ih.getColumnFormatConfiguration(),gotoButtonHandler:ih.gotoButtonHandler};this.table=new ih(t),this.table.renderTable(e)}this.table.present()}menuItemList(){const e=super.menuItemList();return e.push("<hr/>"),e.push({label:"Open table view",click:function(){this.openTableView()}}),e}dispose(){super.dispose(),this.table&&this.table.popover.parentElement.removeChild(this.table.popover)}}async function oh({sequence:e,browser:t,name:i,title:n}){if(e.length>rh)t.alert.present(`Sequence size exceeds maximum allowed length (${e.length} > 25000)`);else try{const r=t.genome.id,s=t.config.blatServerURL||"https://igv.org/services/blatUCSC.php",o={type:"blat",name:i||"blat results",title:n||"blat results",sequence:e,altColor:"rgb(176, 176, 236)",color:"rgb(236, 176, 176)",searchable:!1,features:await nh({url:s,userSeq:e,db:r})};(await t.loadTrack(o)).openTableView()}catch(e){t.alert.present(`Error performing blat search: ${e}`)}}const ah=Number.MIN_SAFE_INTEGER,ch={TTT:"F",TTC:"F",TTA:"L",TTG:"L",CTT:"L",CTC:"L",CTA:"L",CTG:"L",ATT:"I",ATC:"I",ATA:"I",ATG:"M",GTT:"V",GTC:"V",GTA:"V",GTG:"V",TCT:"S",TCC:"S",TCA:"S",TCG:"S",CCT:"P",CCC:"P",CCA:"P",CCG:"P",ACT:"T",ACC:"T",ACA:"T",ACG:"T",GCT:"A",GCC:"A",GCA:"A",GCG:"A",TAT:"Y",TAC:"Y",TAA:"STOP",TAG:"STOP",CAT:"H",CAC:"H",CAA:"Q",CAG:"Q",AAT:"N",AAC:"N",AAA:"K",AAG:"K",GAT:"D",GAC:"D",GAA:"E",GAG:"E",TGT:"C",TGC:"C",TGA:"STOP",TGG:"W",CGT:"R",CGC:"R",CGA:"R",CGG:"R",AGT:"S",AGC:"S",AGA:"R",AGG:"R",GGT:"G",GGC:"G",GGA:"G",GGG:"G"},lh={},hh=["A","G","C","T","Y","R","W","S","K","M","D","V","H","B","N","X"],dh=["T","C","G","A","R","Y","W","S","M","K","H","B","D","V","N","X"];for(let Zv=0;Zv<hh.length;Zv++)lh[hh[Zv]]=dh[Zv],lh[hh[Zv].toLowerCase()]=dh[Zv].toLowerCase();const uh=115;class fh{constructor(e,t){this.config=e,this.browser=t,this.type="sequence",this.removable=!0===e.removable,this.name=e.name,this.id=e.id,this.sequenceType=e.sequenceType||"dna",this.disableButtons=!1,this.order=e.order||ah,this.ignoreTrackMenu=!1,this.reversed=!0===e.reversed,this.frameTranslate=!0===e.frameTranslate,this.height=this.frameTranslate?uh:25,e.url&&(e.fastaURL=e.url),e.fastaURL||(this.id=e.id||"sequence")}menuItemList(){return[{name:this.reversed?"Forward":"Reverse",click:()=>{this.reversed=!this.reversed,this.trackView.repaintViews()}},{name:this.frameTranslate?"Close Translation":"Three-frame Translate",click:()=>{if(this.frameTranslate=!this.frameTranslate,this.frameTranslate){for(let e of this.trackView.viewports)e.setContentHeight(uh);this.trackView.setTrackHeight(uh)}else{for(let e of this.trackView.viewports)e.setContentHeight(25);this.trackView.setTrackHeight(25)}this.trackView.repaintViews()}}]}contextMenuItemList(e){const t=e.viewport;if(t.referenceFrame.bpPerPixel<=1){const e=t.getWidth()*t.referenceFrame.bpPerPixel,i=t.referenceFrame.chr,n=Math.floor(t.referenceFrame.start),r=Math.ceil(n+e),s=[{label:this.reversed?"View visible sequence (reversed)...":"View visible sequence...",click:async()=>{let e=await this.browser.genome.getSequence(i,n,r);e?this.reversed&&(e=lo(e)):e="Unknown sequence",this.browser.alert.present(e)}}];return to()&&s.push({label:"Copy visible sequence",click:async()=>{let e=await this.browser.genome.getSequence(i,n,r);e?this.reversed&&(e=lo(e)):e="Unknown sequence";try{await navigator.clipboard.writeText(e)}catch(e){console.error(e),this.browser.alert.present(`error copying sequence to clipboard ${e}`)}}}),s.push({label:"BLAT read sequence",click:async()=>{let e=await this.browser.genome.getSequence(i,n,r);if(e){this.reversed&&(e=lo(e));const t=`blat: ${i}:${n+1}-${r}`,s=`blat: ${i}:${n+1}-${r}`;oh({sequence:e,browser:this.browser,name:t,title:s})}}}),s.push("<hr/>"),s}}translateSequence(e){const t=[[],[],[]];for(let i of[0,1,2]){let n=i;for(;e.length-n>=3;){let r=e.slice(n,n+3);this.reversed&&(r=r.split("").reverse().join(""));const s=ch[r.toUpperCase()]||"";t[i].push({codons:r,aminoA:s}),n+=3}}return t}async getSequenceSource(){return this.config.fastaURL?(this.fasta||(this.fasta=new ph(this.config,this.browser.genome),await this.fasta.init()),this.fasta):this.browser.genome}async getFeatures(e,t,i,n){if(t=Math.floor(t),i=Math.floor(i),n&&n>10)return null;{const n=await this.getSequenceSource();return{bpStart:t,sequence:await n.getSequence(e,t,i)}}}draw(e){const t=e.context;if(e.features){let i=e.features.sequence;if(!i)return;this.reversed&&(i=i.split("").map((function(e){return lh[e]})).join(""));const n=e.features.bpStart,r=1+e.bpStart+e.pixelWidth*e.bpPerPixel;for(let s=Math.floor(e.bpStart);s<=r;s++){const r=Math.floor(s-n);if(r>=0&&r<i.length){const n=(s-e.bpStart)/e.bpPerPixel,o=1/e.bpPerPixel,a=i[r],c=this.fillColor(a.toUpperCase());if(e.bpPerPixel>.1)fr.fillRect(t,n,5,o,10,{fillStyle:c});else{const i=n+.5*(o-t.measureText(a).width);"y"===e.axis?(t.save(),fr.labelTransformWithContext(t,i),fr.strokeText(t,a,i,15,{strokeStyle:c}),t.restore()):fr.strokeText(t,a,i,15,{strokeStyle:c})}}}if(this.frameTranslate){let r=25;const s=this.translateSequence(i);for(let i=0;i<s.length;i++){const o=s[i];for(let s=0;s<o.length;s++){let a=0==s%2?"rgb(160,160,160)":"rgb(224,224,224)";const c=o[s],l=n+i+3*s-e.bpStart,h=Math.floor(l/e.bpPerPixel),d=Math.floor((l+3)/e.bpPerPixel),u=Math.round((h+d)/2);if(d<0)continue;if(h>e.pixelWidth)break;let f=c.aminoA;c.aminoA.indexOf("STOP")>-1?(a="rgb(255, 0, 0)",f="STOP"):"M"===c.aminoA&&(a="rgb(0, 153, 0)",f="START"),fr.fillRect(t,h,r,d-h,25,{fillStyle:a}),e.bpPerPixel<=.1&&fr.strokeText(t,f,u-t.measureText(f).width/2,r+15)}r+=30}}}}get supportsWholeGenome(){return!1}computePixelHeight(e){return this.height=this.frameTranslate?uh:25,this.height}fillColor(e){return this.color?this.color:"dna"===this.sequenceType?this.browser.nucleotideColors[e]||"gray":"rgb(0, 0, 150)"}getState(){const e={type:"sequence"};return this.order!==ah&&(e.order=this.order),this.reversed&&(e.revealed=!0),e}}class ph{constructor(e,t){this.config=e,this.genome=t}async init(){this.fasta=await Ro(this.config),this.chrNameMap=new Map;for(let e of this.fasta.chromosomeNames)this.chrNameMap.set(this.genome.getChromosomeName(e),e)}async getSequence(e,t,i){const n=this.chrNameMap.has(e)?this.chrNameMap.get(e):e;return this.fasta.getSequence(n,t,i)}}class gh{constructor(e,t,i,n){this.guid=o(),this.trackView=e,this.referenceFrame=i,this.browser=e.browser,this.viewportElement=document.createElement("div"),this.viewportElement.className="igv-viewport",t.appendChild(this.viewportElement),e.track.height&&this.setHeight(e.track.height),e.track instanceof fh&&(this.alert=new Ps(this.viewportElement)),this.contentTop=0,this.contentHeight=this.viewportElement.clientHeight,this.setWidth(n),this.initializationHelper()}initializationHelper(){}showMessage(e){this.messageDiv||(this.messageDiv=document.createElement("div"),this.messageDiv.className="igv-viewport-message",this.viewportElement.appendChild(this.messageDiv)),this.messageDiv.textContent=e,this.messageDiv.style.display="inline-block"}hideMessage(){this.messageDiv&&(this.messageDiv.style.display="none")}setTrackLabel(e){}startSpinner(){}stopSpinner(){}checkZoomIn(){return!0}shift(){}setTop(e){this.contentTop=e}async loadFeatures(){}clearCache(){}repaint(){}draw(e,t,i){console.log("Viewport - draw(drawConfiguration, features, roiFeatures)")}checkContentHeight(e){const t=this.trackView.track;if(e=e||this.cachedFeatures,"FILL"===t.displayMode)this.setContentHeight(this.viewportElement.clientHeight);else if("function"==typeof t.computePixelHeight&&e&&e.length>0){const i=t.computePixelHeight(e);i!==this.contentHeight&&this.setContentHeight(i)}}getContentHeight(){return this.contentHeight}setContentHeight(e){this.contentHeight=e}isLoading(){return!1}saveSVG(){}isVisible(){return this.viewportElement.clientWidth>0}setWidth(e){this.viewportElement.style.width=`${e}px`}getWidth(){return this.viewportElement.clientWidth}setHeight(e){this.viewportElement.style.height=`${e}px`}getContentTop(){return this.contentTop}containsPosition(e,t){console.log("Viewport - containsPosition(chr, position)")}addMouseHandlers(){}dispose(){this.viewportElement.remove();for(const e in this)this.hasOwnProperty(e)&&(this[e]=void 0)}}
|
|
13
|
+
*/const ko=["T","C","A","G"],Io=[];for(let Kv=0;Kv<256;Kv++)Io.push(ko[Kv>>6&3]+ko[Kv>>4&3]+ko[Kv>>2&3]+ko[3&Kv]);const So=Io.map((e=>e.toLowerCase()));class Eo{littleEndian;metaIndex=new Map;constructor(e){this.url=e.twoBitURL||e.fastaURL,this.config=e,e.twoBitBptURL&&(this.bptURL=e.twoBitBptURL)}async init(){if(this.bptURL)this.index=await xo.loadBpTree(this.bptURL,this.config,0);else{const e=await this._readIndex();this.index={search:async t=>e.has(t)?{offset:e.get(t)}:void 0}}}async readSequence(e,t,i){this.index||await this.init();const n=await this.getSequenceRecord(e);if(!n)return null;if(t<0)throw new TypeError("regionStart cannot be less than 0");(void 0===i||i>n.dnaSize)&&(i=n.dnaSize);const r=this._getOverlappingBlocks(t,i,n.nBlocks),s=this._getOverlappingBlocks(t,i,n.maskBlocks),o=Math.floor(t/4),a=n.packedPos+o,c=Math.floor(i/4)-o+1,l=await Mn.loadArrayBuffer(this.url,{range:{start:a,size:c}}),h=new Uint8Array(l);let d="";for(let e=t;e<i;e+=1){for(;s.length&&s[0].end<=e;)s.shift();const t=s[0]&&s[0].start<=e&&s[0].end>e;if(r[0]&&e>=r[0].start&&e<r[0].end){const t=r.shift();for(;e<t.end&&e<i;)d+="N",e++;e--}else{const i=e%4,n=h[Math.floor(e/4)-o];d+=t?So[n][i]:Io[n][i]}}return d}async _readIndex(){const e=new Map;let t=await Mn.loadArrayBuffer(this.url,{range:{start:0,size:64}}),i=new DataView(t),n=0;const r=i.getUint32(n,!0),s=i.getUint32(n,!1);n+=4;const o=440477507;if(r===o)this.littleEndian=!0;else{if(s!==o)throw Error(`Bad magic number ${o}`);this.littleEndian=!1}let a,c;this.version=i.getUint32(n,this.littleEndian),n+=4,this.sequenceCount=i.getUint32(n,this.littleEndian),n+=4,this.reserved=i.getUint32(n,this.littleEndian),n+=4;let l=20;for(let t=0;t<this.sequenceCount;t++){(!c||c.available()<1)&&(a=(this.sequenceCount-t)*l,c=await this._loadBinaryBuffer(n,a));const i=c.getByte();n+=1,c.available()<i+5&&(a=(this.sequenceCount-t)*l+100,c=await this._loadBinaryBuffer(n,a));const r=c.getString(i),s=c.getUInt();n+=i+4,e.set(r,s),l=Math.floor(l*(t/(t+1))+r.length/(t+1))}return e}async getSequenceRecord(e){if(!this.metaIndex.has(e)){if(!this.index)throw Error("TwobitSequence object must be initialized before accessing sequence");let t=await this.index.search(e);if(!t)return;let i=t.offset,n=8,r=await this._loadBinaryBuffer(i,n);const s=r.getUInt(),o=r.getUInt();i+=n,n=8*o+4,r=await this._loadBinaryBuffer(i,n);const a=[];for(let e=0;e<o;e++)a.push(r.getUInt());const c=[];for(let e=0;e<o;e++)c.push(r.getUInt());const l=r.getUInt();i+=n,n=8*l+4,r=await this._loadBinaryBuffer(i,n);const h=[];for(let e=0;e<l;e++)h.push(r.getUInt());const d=[];for(let e=0;e<l;e++)d.push(r.getUInt());const u=[];for(let e=0;e<o;e++)u.push(new No(a[e],c[e]));const f=[];for(let e=0;e<l;e++)f.push(new No(h[e],d[e]));if(0!=r.getUInt())throw Error("Bad 2-bit file");i+=n;const p={dnaSize:s,nBlocks:u,maskBlocks:f,packedPos:i,bpLength:s};this.metaIndex.set(e,p)}return this.metaIndex.get(e)}_getOverlappingBlocks(e,t,i){const n=[];for(let r of i){if(r.start>t)break;r.end<e||n.push(r)}return n}async _loadBinaryBuffer(e,t){const i=await Mn.loadArrayBuffer(this.url,{range:{start:e,size:t}});return new Co(new DataView(i),this.littleEndian)}}class No{constructor(e,t){this.start=e,this.size=t}get end(){return this.start+this.size}}class Mo{static#i=1e5;#n;#r=[];#s=10;constructor(e,t){this.sequenceReader=e,this.browser=t}get chromosomes(){return this.sequenceReader.chromosomes}async getSequenceRecord(e){return this.sequenceReader.getSequenceRecord(e)}async getSequence(e,t,i){let n=this.#r.find((n=>n.contains(e,t,i)));if(n||(n=await this.#o(e,t,i),this.#a(n),this.#r.push(n)),n){const e=t-n.start,r=i-t;return n.features?n.features.substring(e,e+r):null}}#a(e){this.#r=this.#r.filter((t=>!e.contains(t))),this.#r.length===this.#s&&this.#r.shift(),this.browser&&this.browser.referenceFrameList.length<100&&(this.#r=this.#r.filter((e=>void 0!==this.browser.referenceFrameList.find((t=>t.overlaps(e))))))}getSequenceInterval(e,t,i){return this.#r.find((n=>n.contains(e,t,i)))}async#o(e,t,i){let n=t,r=i;if(i-t<Mo.#i){const e=i-t,s=Math.round(t+e/2);n=Math.max(0,s-Mo.#i/2),r=n+Mo.#i}const s=new fo(e,n,r);if(this.#n&&this.#n[0].contains(e,t,i))return this.#n[1];{const t=new Promise((async(t,i)=>{s.features=await this.sequenceReader.readSequence(e,n,r),t(s)}));return this.#n=[s,t],t}}async init(){return this.sequenceReader.init()}get chromosomeNames(){return this.sequenceReader.chromosomeNames}getFirstChromosomeName(){return"function"==typeof this.sequenceReader.getFirstChromosomeName?this.sequenceReader.getFirstChromosomeName():void 0}#c(e){this.browser.referenceFrameList}}async function Ro(e,t){let i;return"chromsizes"===e.format?i=new Ao(e.fastaURL||e.url):"2bit"===e.format||e.twoBitURL?i=new Mo(new Eo(e),t):Xs(e.fastaURL)||!e.indexURL?i=new mo(e):"gbk"===e.format||e.gbkURL||(i=new Mo(new vo(e),t)),await i.init(),i}const Bo={A:"rgb( 0, 200, 0)",C:"rgb( 0,0,200)",T:"rgb(255,0,0)",G:"rgb(209,113, 5)",N:"rgb(80,80,80)"};function Do(e,t){if(e.length<6)return void console.log("Skipping line: "+e.join(" "));var i={chr1:e[0],start1:Number.parseInt(e[1]),end1:Number.parseInt(e[2]),chr2:e[3],start2:Number.parseInt(e[4]),end2:Number.parseInt(e[5])};if(isNaN(i.start1)||isNaN(i.end1)||isNaN(i.start2)||isNaN(i.end2))return;t&&void 0===t.hiccups&&(t.hiccups=!!t.columnNames&&zo(t.columnNames));const n=t&&t.hiccups,r=n?6:10;if(n||(e.length>6&&"."!==e[6]&&(i.name=e[6]),e.length>7&&"."!==e[7]&&(i.score=Number(e[7])),e.length>8&&"."!==e[8]&&(i.strand1=e[8]),e.length>9&&"."!==e[9]&&(i.strand2=e[9])),t){const n=t.colorColumn;n&&n<e.length&&(i.color=un.createColorString(e[n]));const s=t.thicknessColumn;s&&s<e.length&&(i.thickness=e[s]),e.length>r&&t.columnNames&&t.columnNames.length===e.length&&(i.extras=e.slice(r))}return i.chr1===i.chr2&&(i.chr=i.chr1,i.start=Math.min(i.start1,i.start2),i.end=Math.max(i.end1,i.end2)),i}function To(e,t){if(!(e.length<8))return{chr:e[0],start:Number.parseInt(e[1]),end:Number.parseInt(e[2]),color:un.createColorString(e[6]),value:Number(e[7])}}function zo(e){return e&&(e.includes("fdrDonut")||e.includes("fdr_donut"))}function Lo(e,t){if(!(e.length<6))return{chr:e[0],start:Number.parseInt(e[1]),end:Number.parseInt(e[2]),chr1:e[8],start1:Number.parseInt(e[9]),end1:Number.parseInt(e[10]),chr2:e[13],start2:Number.parseInt(e[14]),end2:Number.parseInt(e[15]),name:e[3],score:Number(e[4]),value:Number(e[5]),color:"."===e[7]?void 0:"0"===e[7]?"rgb(0,0,0)":e[7]};console.log("Skipping line: "+e.join(" "))}class Ho{constructor(e){this.message=e}}const Po=new Map([["%09","\t"],["%0A","\n"],["%0D","\r"],["%25","%"],["%3B",";"],["%3D","="],["%26","&"],["%2C",","]]);function Oo(e){if(!e.includes("%"))return e;let t="";for(let i=0;i<e.length;i++)if(37===e.charCodeAt(i)&&i<e.length-2){const n=e.substring(i,i+3);Po.has(n)?t+=Po.get(n):t+=n,i+=2}else t+=e.charAt(i);return t}function Vo(e,t="="){const i="="===t;var n=[];for(let r of e.split(";")){r=r.trim();const e=r.indexOf(t);if(e>0&&e<r.length-1){let t=Oo(r.substring(0,e).trim()),s=Oo(r.substring(e+1).trim());i||(t=qo(t),s=qo(s)),n.push([t,s])}}return n}function qo(e){return e.startsWith('"')&&e.endsWith('"')&&(e=e.substr(1,e.length-2)),e}const Qo=new Set(["transcript","primary_transcript","processed_transcript","mRNA","mrna","lnc_RNA","miRNA","ncRNA","rRNA","scRNA","snRNA","snoRNA","tRNA"]),Uo=new Set(["CDS","cds"]),jo=new Set(["start_codon","stop_codon"]),Go=new Set(["5UTR","3UTR","UTR","five_prime_UTR","three_prime_UTR","3'-UTR","5'-UTR"]),Wo=new Set(["exon","coding-exon"]),$o=new Set;for(let Yv of[Uo,jo,Go,Wo])for(let Xv of Yv)$o.add(Xv);function Ko(e){return e.includes("intron")}function Yo(e){return Uo.has(e)||jo.has(e)}function Xo(e){return Go.has(e)}function Zo(e){return Qo.has(e)||e.endsWith("RNA")||e.endsWith("transcript")}function Jo(e){return $o.has(e)||e.endsWith("RNA")||Ko(e)}const ea=new Set(["id","parent","name"]);class ta{constructor(e){Object.assign(this,e),void 0!==e.phase&&"."!==e.phase&&(this.readingFrame=(3-parseInt(e.phase))%3)}popupData(e){const t=this.geneObject?this.geneObject.popupData():[];if(this.geneObject&&t.push("<hr/>"),this.name&&t.push({name:"Name",value:this.name}),t.push({name:"Type",value:this.type}),t.push({name:"Source",value:this.source}),void 0!==this.score&&t.push({name:"Score",value:this.score}),t.push({name:"Phase",value:this.phase}),this.attributeString){const e=Vo(this.attributeString,this.delim);for(let[i,n]of e)void 0!==n&&n.length>0&&!ea.has(i.toLowerCase())&&t.push({name:i+":",value:n})}return t.push({name:"Location",value:`${this.chr}:${F(this.start+1)}-${F(this.end)}`}),t}getAttributeValue(e){if(this.hasOwnProperty(e))return this[e];if(this._attributeCache||(this._attributeCache=new Map),this._attributeCache.has(e))return this._attributeCache.get(e);{const t=Vo(this.attributeString,this.delim);let i;for(let[n,r]of t)if(n===e){i=r;break}return this._attributeCache.set(e,i),i}}}class ia extends ta{constructor(e){super(e),this.exons=[],this.parts=[]}addExon(e){this.exons.push(e),this.start=Math.min(this.start,e.start),this.end=Math.max(this.end,e.end)}addPart(e){this.parts.push(e)}assembleParts(){if(0===this.parts.length)return;this.parts.sort((function(e,t){return e.start-t.start}));let e=this.parts[0].start,t=this.parts[0].end;for(let i=1;i<this.parts.length;i++){const n=this.parts[i];if(!Ko(n.type))if(n.start<=t)t=Math.max(t,n.end);else{this.findExonContaining({start:e,end:t})||this.exons.push({start:e,end:t,psuedo:!0}),e=n.start,t=n.end}}this.findExonContaining({start:e,end:t})||(this.exons.push({start:e,end:t,psuedo:!0}),this.start=Math.min(this.start,e),this.end=Math.max(this.end,t));for(let e of this.parts){const t=e.type;Yo(t)?this.addCDS(e):Xo(t)&&this.addUTR(e)}}findExonContaining({start:e,end:t}){for(let i of this.exons)if(i.end>=t&&i.start<=e)return i}addCDS(e){let t;const i=this.exons;for(let n of i)if(n.start<=e.start&&n.end>=e.end){t=n;break}t?(t.cdStart=t.cdStart?Math.min(e.start,t.cdStart):e.start,t.cdEnd=t.cdEnd?Math.max(e.end,t.cdEnd):e.end,t.readingFrame=e.readingFrame):console.error("No exon found spanning "+e.start+"-"+e.end),this.cdStart=this.cdStart?Math.min(e.start,this.cdStart):e.start,this.cdEnd=this.cdEnd?Math.max(e.end,this.cdEnd):e.end}addUTR(e){let t;const i=this.exons;for(let n=0;n<i.length;n++)if(i[n].start<=e.start&&i[n].end>=e.end){t=i[n];break}t?e.start===t.start&&e.end===t.end?t.utr=!0:(e.end<t.end&&(t.cdStart=e.end),e.start>t.start&&(t.cdEnd=e.start)):console.error("No exon found spanning "+cds.start+"-"+cds.end)}finish(){this.assembleParts();var e=this.cdStart,t=this.cdEnd;this.exons.sort((function(e,t){return e.start-t.start})),e&&this.exons.forEach((function(i){(i.end<e||i.start>t)&&(i.utr=!0)}))}popupData(e){const t=super.popupData(e);for(let i of this.exons)if(!i.pseudo&&e>=i.start&&e<i.end&&"function"==typeof i.popupData){t.push("<hr/>");const n=i.popupData(e);for(let e of n)t.push(e)}for(let i of this.parts)if(e>=i.start&&e<i.end&&"function"==typeof i.popupData){t.push("<hr/>");const n=i.popupData(e);for(let e of n)t.push(e)}return t}}class na{static gffNameFields=new Set(["Name","transcript_id","gene_name","gene","gene_id","alias","locus","name"]);constructor(e){this.format=e.format,this.nameField=e.nameField,this.filterTypes=void 0===e.filterTypes?new Set(["chromosome"]):new Set(e.filterTypes)}combineFeatures(e,t){let i;const n=this.filterTypes;if(e=e.filter((e=>void 0===n||!n.has(e.type))),"gff3"===this.format){const t=this.combineFeaturesById(e);i=this.combineFeaturesByType(t)}else i=this.combineFeaturesByType(e);return this.numberExons(i,t),this.nameFeatures(i),i}combineFeaturesById(e){const t=new Map,i=[];for(let n of e)if(Jo(n.type)||Zo(n.type)||!n.id)i.push(n);else{let e=t.get(n.chr);e||(e=new Map,t.set(n.chr,e));let i=e.get(n.id);i?i.push(n):e.set(n.id,[n])}for(let e of t.values())for(let t of e.values())if(t.length>1){const e=t[0];e.exons=[];for(let i of t)e.start=Math.min(e.start,i.start),e.end=Math.max(e.end,i.end),e.exons.push({start:i.start,end:i.end});i.push(e)}else i.push(t[0]);return i}combineFeaturesByType(e){const t=e.filter((e=>"gene"===e.type||e.type.endsWith("_gene"))),i=Object.create(null);for(let e of t)i[e.id]=e;const n=Object.create(null),r=[],s=new Set,o=this.filterTypes;e=e.filter((e=>void 0===o||!o.has(e.type)));for(let t of e)if(Zo(t.type)){const e=t.id;if(void 0!==e){const o=new ia(t);n[e]=o,r.push(o),s.add(t);const a=i[t.parent];a&&(o.geneObject=a,s.add(a))}}for(let t of e)if(Jo(t.type)){const e=l(t);if(e)for(let i of e){let o=n[i];if(!o&&"gtf"===this.format){const e=Object.assign({},t);e.type="transcript",o=new ia(e),n[i]=o,r.push(o)}if(void 0!==o){if(a=t.type,Wo.has(a))if(e.length>1){const e=new ta(t);o.addExon(e)}else o.addExon(t);else o.addPart(t);s.add(t)}}}var a;r.forEach((function(e){"function"==typeof e.finish&&e.finish()}));const c=e.filter((e=>!s.has(e)));for(let e of c)r.push(e);return r;function l(e){return e.parent&&""!==e.parent.trim()?e.parent.trim().split(","):null}}numberExons(e,t){for(let i of e)if(i.exons&&(!t||i.end<=t.end&&i.start>t.start))for(let e=0;e<i.exons.length;e++){i.exons[e].number="-"===i.strand?i.exons.length-e:e+1}}nameFeatures(e){for(let t of e)if("function"==typeof t.getAttributeValue)if(this.nameField)t.name=t.getAttributeValue(this.nameField);else for(let e of na.gffNameFields){const i=t.getAttributeValue(e);if(i){t.name=i;break}}}}function ra(e,t,i=Number.MAX_SAFE_INTEGER){if(e.length<3)return;const n=t&&t.gffTags,r=e[0],s=parseInt(e[1]),o=e.length>2?parseInt(e[2]):s+1;if(isNaN(s)||isNaN(o))return new Ho("Unparsable bed record.");const a=new Fa({chr:r,start:s,end:o,score:1e3});let c=3;try{if(e.length>3&&c++<i){if(e[3].indexOf(";")>0&&e[3].indexOf("=")>0){const i=Vo(e[3],"=");a.attributes={};for(let e of i)a.attributes[e[0]]=e[1],n&&(null!=t.nameField&&e[0]===t.nameField||!a.name&&na.gffNameFields.has(e[0]))&&(a.name=e[1])}a.name||n||(a.name="."===e[3]?"":e[3])}if(e.length>4&&c++<i&&(a.score="."===e[4]?0:Number(e[4]),isNaN(a.score)))return a;if(e.length>5&&c++<i&&(a.strand=e[5],"."!==a.strand&&"+"!==a.strand&&"-"!==a.strand))return a;if(e.length>6&&c++<i&&(a.cdStart=parseInt(e[6]),isNaN(a.cdStart)))return a;if(e.length>7&&c++<i&&(a.cdEnd=parseInt(e[7]),isNaN(a.cdEnd)))return a;if(e.length>8&&c++<i&&"."!==e[8]&&"0"!==e[8]&&(a.color=un.createColorString(e[8])),e.length>11&&c++<i){const t=parseInt(e[9]);if(t>1e3)return a;const i=e[10].replace(/,$/,"").split(","),n=e[11].replace(/,$/,"").split(",");if(i.length!==n.length||t!==i.length)return a;const r=[];for(let e=0;e<t;e++){const t=s+parseInt(n[e]),o=t+parseInt(i[e]);r.push({start:t,end:o})}r.length>0&&(fa(r,a.cdStart,a.cdEnd),a.exons=r)}if(t){let i=t.thicknessColumn,n=t.colorColumn;n&&n<e.length&&(a.color=un.createColorString(e[n])),i&&i<e.length&&(a.thickness=e[i])}}catch(e){}return a}function sa(e,t){const i=ra(e,t);return i&&e.length>14&&(i.signal=Number(e[12]),i.pValue=Number(e[13]),i.qValue=Number(e[14])),i}function oa(e,t){const i=ra(e,t,9);if(i){const t=["Coverage","% Showing Methylation","N-mod","N-canonical","N-other mod","N-delete","N-fail","N-dff","N-nocall"];for(let n=9;n<e.length;n++){i[t[n-9]]=e[n]}}return i}function aa(e,t){if(e.length<=15)return;return{swScore:Number.parseInt(e[1]),milliDiv:Number.parseInt(e[2]),milliDel:Number.parseInt(e[3]),milliIns:Number.parseInt(e[4]),chr:e[5],start:Number.parseInt(e[6]),end:Number.parseInt(e[7]),strand:e[9],repName:e[10],repClass:e[11],repFamily:e[12],repStart:Number.parseInt(e[13]),repEnd:Number.parseInt(e[14]),repLeft:Number.parseInt(e[15])}}function ca(e,t){var i=void 0===t.shift?0:1;if(e.length<=9+i)return;const n=parseInt(e[5+i]),r=parseInt(e[6+i]);var s={name:e[0+i],chr:e[1+i],strand:e[2+i],start:parseInt(e[3+i]),end:parseInt(e[4+i]),cdStart:n,cdEnd:r,id:e[0+i]};const o=ua(parseInt(e[7+i]),e[8+i],e[9+i]);return fa(o,n,r),s.exons=o,s}function la(e,t){var i=void 0===t.shift?0:1;if(e.length<=11+i)return;const n=parseInt(e[5+i]),r=parseInt(e[6+i]),s={name:e[11+i],chr:e[1+i],strand:e[2+i],start:parseInt(e[3+i]),end:parseInt(e[4+i]),cdStart:n,cdEnd:r,id:e[0+i]},o=ua(parseInt(e[7+i]),e[8+i],e[9+i],e[14+i]);return fa(o,n,r),s.exons=o,s}function ha(e,t){var i=void 0===t.shift?0:1;if(e.length<=10+i)return;const n=parseInt(e[6+i]),r=parseInt(e[7+i]);var s={name:e[0+i],id:e[1+i],chr:e[2+i],strand:e[3+i],start:parseInt(e[4+i]),end:parseInt(e[5+i]),cdStart:n,cdEnd:r};const o=ua(parseInt(e[8+i]),e[9+i],e[10+i]);return fa(o,n,r),s.exons=o,s}function da(e,t){if(e.length<21)return;const i=e[13],n=parseInt(e[15]),r=parseInt(e[16]),s=e[8].charAt(0),o=parseInt(e[17]),a=[],c=e[20].replace(/,$/,"").split(","),l=e[18].replace(/,$/,"").split(",");for(let e=0;e<o;e++){const t=parseInt(c[e]),i=t+parseInt(l[e]);a.push({start:t,end:i})}return new va({chr:i,start:n,end:r,strand:s,exons:a,tokens:e})}function ua(e,t,i,n){const r=t.replace(/,$/,"").split(","),s=i.replace(/,$/,"").split(","),o=n?n.replace(/,$/,"").split(","):void 0,a=[];for(let t=0;t<e;t++){const e={start:parseInt(r[t]),end:parseInt(s[t])};if(o){const i=parseInt(o[t]);-1!=i&&(e.readingFrame=i)}a.push(e)}return a}function fa(e,t,i){for(let n of e){const e=n.end,r=n.start;e<t||r>i?n.utr=!0:(t>=r&&t<=e&&(n.cdStart=t),i>=r&&i<=e&&(n.cdEnd=i))}}function pa(e,t){var i,n,r,s,o,a,c;if(!(e.length<9))return i=e[0],n=parseInt(e[1]),r=parseInt(e[2]),o=e[3],a=Number(e[4]),s=e[5].trim(),c=Number(e[6]),0===a&&(a=c),{chr:i,start:n,end:r,name:o,score:a,strand:s,signal:c,pValue:Number(e[7]),qValue:Number(e[8])}}function ga(e,t){const i=pa(e);return e.length>9&&(i.peak=Number(e[9])),i}function ma(e,t){if(e.length<=3)return;const i={chr:e[0],start:parseInt(e[1]),end:parseInt(e[2]),value:Number(e[3])};if(t){let n=t.colorColumn;n&&n<e.length&&(i.color=un.createColorString(e[n]))}return i}function wa(e,t){const i=t.wig;if(i&&"fixedStep"===i.format){const t=i.index*i.step+i.start,n=t+i.span,r=Number(e[0]);return++i.index,isNaN(r)?null:{chr:i.chrom,start:t,end:n,value:r}}if(i&&"variableStep"===i.format){if(e.length<2)return null;const t=parseInt(e[0],10)-1,n=t+i.span,r=Number(e[1]);return isNaN(r)?null:{chr:i.chrom,start:t,end:n,value:r}}return ma(e)}function ba(e,t){if(e.length<6)return;const i=["bin","chr","start","end","name","score","strand","refNCBI","refUCSC","observed","molType","class","valid","avHet","avHetSE","func","locType","weight","exceptions","submitterCount","submitters","alleleFreqCount","alleles","alleleNs","alleleFreqs","bitfields"],n={chr:e[1],start:Number.parseInt(e[2]),end:Number.parseInt(e[3]),name:e[4],score:Number.parseInt(e[5])},r=Math.min(e.length,i.length);for(let t=6;t<r;t++)n[i[t]]=e[t];return n}class Fa{constructor(e){Object.assign(this,e)}getAttributeValue(e){return this.hasOwnProperty(e)?this[e]:this.attributes?this.attributes[e]:void 0}}class va{constructor(e){Object.assign(this,e)}get score(){const e=this.tokens,t=parseInt(e[0]),i=parseInt(e[2]),n=parseInt(e[1]),r=parseInt(e[4]),s=parseInt(e[6]),o=parseInt(e[10]);return Math.floor(1e3*(t+i-n-r-s)/o)}get matches(){return this.tokens[0]}get misMatches(){return this.tokens[1]}get repMatches(){return this.tokens[2]}get nCount(){return this.tokens[3]}get qNumInsert(){return this.tokens[4]}get qBaseInsert(){return this.tokens[5]}get tNumInsert(){return this.tokens[6]}get tBaseInsert(){return this.tokens[7]}popupData(){return[{name:"chr",value:this.chr},{name:"start",value:this.start+1},{name:"end",value:this.end},{name:"strand",value:this.strand},{name:"score",value:this.score},{name:"match",value:this.matches},{name:"mis-match",value:this.misMatches},{name:"rep. match",value:this.repMatches},{name:"N's",value:this.nCount},{name:"Q gap count",value:this.qNumInsert},{name:"Q gap bases",value:this.qBaseInsert},{name:"T gap count",value:this.tNumInsert},{name:"T gap bases",value:this.tBaseInsert}]}}function ya(e,t){const i=t.format;if(e.length<9)return;const n="gff3"===i?"=":" ";return new ta({source:Oo(e[1]),type:e[2],chr:e[0],start:parseInt(e[3])-1,end:parseInt(e[4]),score:"."===e[5]?void 0:Number(e[5]),strand:e[6],phase:"."===e[7]?".":parseInt(e[7]),attributeString:e[8],delim:n})}function Aa(e,t){const i=ya(e,t);if(!i)return;const n=Vo(i.attributeString,i.delim);for(let[e,t]of n){const n=e.toLowerCase();"color"===n||"colour"===n?i.color=un.createColorString(t):"ID"===e?i.id=t:"Parent"===e&&(i.parent=t)}return i}function Ca(e,t){const i=ya(e,t);if(!i)return;const n=Vo(i.attributeString,i.delim);let r,s;switch(i.type){case"gene":r="gene_id";break;case"transcript":r="transcript_id",s="gene_id";break;default:s="transcript_id"}for(let[e,t]of n){const n=e.toLowerCase();"color"===n||"colour"===n?i.color=un.createColorString(t):e===r?i.id=t:e===s&&(i.parent=t)}return i}function _a(e,t){if(!(e.length<7)){var i=e[0],n=e[1],r=parseInt(e[2]),s=parseInt(e[3]),o=parseInt(e[4]),a=parseInt(e[5]),c=e[6],l={chr:i,name:n,junction_left:r,junction_right:s,num_junction_reads:o,num_spanning_frags:a,spanning_frag_coords:[],start:-1,end:-1},h=r,d=s;if(a>0)for(var u=c.split(","),f=0;f<u.length;f++){var p=u[f].split("-"),g=p[0],m=p[1];g<h&&(h=g),m>d&&(d=m),l.spanning_frag_coords.push({left:g,right:m})}return l.start=h,l.end=d,l}}function xa(e,t){if(e.length<7)return null;const i={chr:e[0],start:parseInt(e[1])-1,end:parseInt(e[2]),"Strongest SNP-risk allele":e[3],"Disease/Phenotype":e[4],"P-value":e[5],"Odds ratio or beta":e[6]};return e.length>6&&(i.PUBMEDID=`<a target = "blank" href = "https://www.ncbi.nlm.nih.gov/pubmed/${e[7]}">${e[7]}</a>`),i}function ka(e,t){const i=t.customFormat;if(e.length<i.fields.length)return;const n=i.coords||0,r=e[i.chr],s=parseInt(e[i.start])-n,o={chr:r,start:s,end:void 0!==i.end?parseInt(e[i.end]):s+1};return i.fields&&i.fields.forEach((function(t,n){n!==i.chr&&n!==i.start&&n!==i.end&&(o[t]=e[n])})),o}function Ia(e,t){const i=t.columnNames;if(!i)throw Error("Sample names are not defined. Missing column headers?");const n=i.length-3,r=e[0],s=parseInt(e[1]),o=parseInt(e[2]),a=e.slice(3).map(Number);return a.length==n?{chr:r,start:s,end:o,values:a}:void console.warn(`${r}:${s}-${o} row contains ${a.length} sample columns instead of the expected ${n} columns. Skipping...`)}function Sa(e,t,i=Number.MAX_SAFE_INTEGER){if(e.length<4)return;const n=e[0],r=parseInt(e[1]),s=parseInt(e[2]);if(isNaN(r)||isNaN(s))return new Ho("Unparsable bed record.");const o={chr:n,start:r,end:s},a=[];for(let t=3;t<e.length;t++)a.push(Number.parseFloat(e[t]));return o.values=a,o}const Ea={gwascatalog:{fields:["bin","chr","start","end","name","pubMedID","author","pubDate","journal","title","trait","initSample","replSample","region","genes","riskAllele","riskAlFreq","pValue","pValueDesc","orOrBeta","ci95","platform","cnv"]},wgrna:{fields:["bin","chr","start","end","name","score","strand","thickStart","thickEnd","type"]},cpgislandext:{fields:["bin","chr","start","end","name","length","cpgNum","gcNum","perCpg","perGc","obsExp"]},clinVarMain:{fields:["chr1","start","end","name","score","strand","thickStart","thickEnd","reserved","blockCount","blockSizes","chromStarts","origName","clinSign","reviewStatus","type","geneId","snpId","nsvId","rcvAcc","testedInGtr","phenotypeList","phenotype","origin","assembly","cytogenetic","hgvsCod","hgvsProt","numSubmit","lastEval","guidelines","otherIds"]}};class Na{constructor(e){this.config=e,this.header={},e.nameField&&(this.header.nameField=e.nameField),this.skipRows=0,e.decode?(this.decode=e.decode,this.delimiter=e.delimiter||"\t"):e.format&&(this.header.format=e.format.toLowerCase(),this.setDecoder(this.header.format)),this.delimiter||(this.delimiter="\t")}async parseHeader(e){let t,i,n=this.header;for(;void 0!==(i=await e.nextLine());)if(i.startsWith("track")||i.startsWith("#track")){let e=Ma(i);Object.assign(n,e)}else if(i.startsWith("browser"));else if(i.startsWith("#columns")){let e=Ra(i);Object.assign(n,e)}else if(i.startsWith("##gff-version 3"))n.format="gff3";else if(i.startsWith("#gffTags"))n.gffTags=!0;else{if(i.startsWith("fixedStep")||i.startsWith("variableStep"))break;if(i.startsWith("#")){const e=i.split(this.delimiter||"\t");e.length>1&&(t=e)}else{this.setDecoder(n.format);const e=i.split(this.delimiter||"\t");try{const i=Object.assign({columnNames:t},n);let r;if(r=this.decode(e,i)){n.firstFeature=r;break}e.length>1&&(t=e)}catch(i){e.length>1&&(t=e)}}}if(t){n.columnNames=t;for(let e=0;e<t.length;e++)"color"===t[e]||"colour"===t[e]?n.colorColumn=e:"thickness"===t[e]&&(n.thicknessColumn=e)}return this.header=n,n}async parseFeatures(e){const t=[],i=this.decode,n=this.header.format,r=this.delimiter||"\t";let s,o=0,a=0;for(;void 0!==(s=await e.nextLine());){if(o++,o<=this.skipRows)continue;if(!s||s.startsWith("track")||s.startsWith("#")||s.startsWith("browser"))continue;if("wig"===n&&s.startsWith("fixedStep")){this.header.wig=Ba(s);continue}if("wig"===n&&s.startsWith("variableStep")){this.header.wig=Da(s);continue}const e=s.split(r);if(e.length<1)continue;const c=i(e,this.header);c instanceof Ho?(a++,a>0&&console.error(`Error parsing line '${s}': ${c.message}`)):c&&t.push(c)}return i===Do&&function(e){if(0==e.length)return;const t=e[0];if(void 0===t.score&&void 0!==t.name){for(let t of e)if(!$s(t.name)&&"."!==t.name)return;for(let t of e)t.score=Number(t.name),delete t.name}const i=e.filter((e=>e.chr1!==e.chr2));for(let t of i){const i=Object.assign({},t);i.dup=!0,e.push(i),t.chr=t.chr1,t.start=t.start1,t.end=t.end1,i.chr=i.chr2,i.start=i.start2,i.end=i.end2}}(t),"gtf"!==this.config.format&&"gff3"!==this.config.format&&"gff"!==this.config.format||!1===this.config.assembleGFF?t:new na(this.config).combineFeatures(t)}setDecoder(e){switch(e){case"broadpeak":case"regionpeak":case"peaks":this.decode=pa,this.delimiter=this.config.delimiter||/\s+/;break;case"narrowpeak":this.decode=ga,this.delimiter=this.config.delimiter||/\s+/;break;case"bedgraph":this.decode=ma,this.delimiter=/\s+/;break;case"wig":this.decode=wa,this.delimiter=this.config.delimiter||/\s+/;break;case"gff3":case"gff":this.decode=Aa,this.delimiter="\t";break;case"gtf":this.decode=Ca,this.delimiter="\t";break;case"fusionjuncspan":this.decode=_a,this.delimiter=this.config.delimiter||/\s+/;break;case"gtexgwas":this.skipRows=1,this.decode=xa,this.delimiter="\t";break;case"refflat":this.decode=ha,this.delimiter=this.config.delimiter||/\s+/;break;case"genepred":this.decode=ca,this.delimiter=this.config.delimiter||/\s+/;break;case"genepredext":this.decode=la,this.delimiter=this.config.delimiter||/\s+/;break;case"ensgene":this.decode=ca,this.header.shift=1,this.delimiter=this.config.delimiter||/\s+/;break;case"refgene":this.decode=la,this.delimiter=this.config.delimiter||/\s+/,this.header.shift=1;break;case"bed":this.decode=ra,this.delimiter=this.config.delimiter||/\s+/;break;case"gappedpeak":this.decode=sa,this.delimiter=this.config.delimiter||/\s+/;break;case"bedmethyl":this.decode=oa,this.delimiter=this.config.delimiter||/\s+/;break;case"bedpe":case"hiccups":this.decode=Do,this.delimiter=this.config.delimiter||"\t";break;case"bedpe-domain":this.decode=To,this.headerLine=!0,this.delimiter=this.config.delimiter||"\t";break;case"bedpe-loop":this.decode=Do,this.delimiter=this.config.delimiter||"\t",this.header={colorColumn:7};break;case"interact":this.decode=Lo,this.delimiter=this.config.delimiter||/\s+/;break;case"snp":this.decode=ba,this.delimiter="\t";break;case"rmsk":this.decode=aa,this.delimiter="\t";break;case"gcnv":this.decode=Ia,this.delimiter="\t";break;case"shoebox":this.decode=Sa,this.delimiter="\t";break;default:const t=function(e){return Ea&&Ea[e]?function(e){const t=e.fields,i=["chr","start","end"];for(let n=0;n<t.length;n++)for(let r of i)r===t[n]&&(e[r]=n);return e}(Ea[e]):void 0}(e);void 0!==t?(this.decode=ka,this.header.customFormat=t,this.delimiter=t.delimiter||"\t"):(this.decode=ra,this.delimiter=this.config.delimiter||/\s+/)}}}function Ma(e){const t={},i=e.split(/(?:")([^"]+)(?:")|([^\s"]+)(?=\s+|$)/g);let n;const r=[];for(let e of i)e&&0!==e.trim().length&&(e.endsWith("=")?n=e:n?(r.push(n+e),n=void 0):r.push(e));for(let e of r){if(!e)return;var s=e.split("=",2);if(2===s.length){const e=s[0].trim(),i=s[1].trim();if(t.hasOwnProperty(e)){let n=t[e];Array.isArray(n)?n.push(i):t[e]=[n,i]}else t[e]=i}}return"interact"==t.type?t.format="interact":"gcnv"===t.type&&(t.format="gcnv"),t}function Ra(e){let t={},i=e.split(/\s+/);if(2===i.length){i[1].split(";").forEach((function(e){let i=e.split("=");"color"===i[0]?t.colorColumn=Number.parseInt(i[1])-1:"thickness"===i[0]&&(t.thicknessColumn=Number.parseInt(i[1])-1)}))}return t}function Ba(e){const t=e.split(/\s+/);return{format:"fixedStep",chrom:t[1].split("=")[1],start:parseInt(t[2].split("=")[1],10)-1,step:parseInt(t[3].split("=")[1],10),span:t.length>4?parseInt(t[4].split("=")[1],10):1,index:0}}function Da(e){const t=e.split(/\s+/);return{format:"variableStep",chrom:t[1].split("=")[1],span:t.length>2?parseInt(t[2].split("=")[1],10):1}}function Ta(e,i){const n=t({class:"igv-menu-popup-check-container"}),r=t();n.appendChild(r);const s=l("check",!0===i?"#444":"transparent");r.appendChild(s);const o=t();return o.innerText=e,n.appendChild(o),n}function za(e,t){t=t||Number.MAX_SAFE_INTEGER;const i=[];e.sort((function(e,t){return e.start-t.start})),i.push(-1e3);for(let n of e){let e=0;const r=Math.min(i.length,t);for(e=0;e<r;e++)if(n.start>=i[e]){n.row=e,i[e]=n.end;break}n.row=e,i[e]=n.end}}async function La(e,t,i){const n=e=>{const i=Object.assign({},e);return i.chr="all",i.start=t.getGenomeCoordinate(e.chr,e.start),i.end=t.getGenomeCoordinate(e.chr,e.end),i._f=e,i.exons&&delete i.exons,i},r=new Set(t.wgChromosomeNames),s=[];let o=0;for(let a of t.wgChromosomeNames){if(Array.isArray(e)){const i={};for(let n of e){const e=t.getChromosomeName(n.chr);i.hasOwnProperty(e)||(i[e]=[]),i[e].push(n)}e=i}const c=e[a];if(c){const e=i||1e4;for(let i of c){let a=t.getChromosomeName(i.chr);if(r.has(a))if(s.length<e)s.push(n(i));else{const t=e/(o+1);if(Math.random()<t){s[Math.floor(Math.random()*(e-1))]=n(i)}}o++}}}return s.sort((function(e,t){return e.start-t.start})),s}function Ha(e,t,i){if(t=t||1e3,null==e||0===e.length)return;const n={},r=[];for(let t of e)if(i&&!i(t))t.row=void 0;else{const e=t.chr;let i=n[e];i||(i=[],n[e]=i,r.push(e)),i.push(t)}for(let e of r)za(n[e],t)}class Pa{static defaultColor="rgb(150,150,150)";static defaults={height:50,autoHeight:!1,visibilityWindow:void 0,color:void 0,altColor:void 0,supportHiDPI:!0,selected:!1};constructor(e,t){this.browser=t,this.init(e)}init(e){this.config=e,e.displayMode&&(e.displayMode=e.displayMode.toUpperCase());const t=Object.assign({},Pa.defaults);if(this.constructor.defaults)for(let e of Object.keys(this.constructor.defaults))t[e]=this.constructor.defaults[e];for(let n of Object.keys(t))this[n]=e.hasOwnProperty(n)?e[n]:t[n],"color"!==n&&"altColor"!==n||!this[n]||(this[n]=b(i=this[n])&&i.indexOf(",")>0&&!i.startsWith("rgb(")&&!i.startsWith("rgba(")?`rgb(${i})`:i);var i;e.name||e.label?this.name=e.name||e.label:_(e.url)?this.name=e.url.name:b(e.url)&&!e.url.startsWith("data:")&&(this.name=C(e.url)),this.url=e.url,this.config.type&&(this.type=this.config.type),this.id=void 0===this.config.id?this.name:this.config.id,this.order=e.order,this.autoscaleGroup=e.autoscaleGroup,this.removable=void 0===e.removable||e.removable,this.minHeight=e.minHeight||Math.min(25,this.height),this.maxHeight=e.maxHeight||Math.max(1e3,this.height),e.onclick&&(this.onclick=e.onclick,e.onclick=void 0),e.description&&("function"==typeof e.description?this.description=e.description:this.description=()=>e.description),e.hoverTextFields?this.hoverText=Oa.bind(this):"function"==typeof this.config.hoverText&&(this.hoverText=this.config.hoverText)}async postInit(){return this._initialColor=this.color||this.constructor.defaultColor,this._initialAltColor=this.altColor||this.constructor.defaultColor,this}get name(){return this._name}set name(e){this._name=e,this.trackView&&this.trackView.setTrackLabelName(e)}clearCachedFeatures(){this.trackView&&this.trackView.clearCachedFeatures()}updateViews(){this.trackView&&this.trackView.updateViews()}repaintViews(){this.trackView&&this.trackView.repaintViews()}getState(){const e={},t=Object.keys(this.config).filter((e=>{return!(void 0===(t=this.config[e])||"function"==typeof t||t instanceof Promise);var t}));for(const i of t)i.startsWith("_")||(e[i]=this.config[i]);for(let t of Object.keys(e)){if(t.startsWith("_"))continue;const i=this[t];void 0===i||!Us(i)&&"boolean"!=typeof i&&"metadata"!==t||(e[t]=i)}const i=Object.assign({},Pa.defaults);if(this.constructor.defaults)for(let e of Object.keys(this.constructor.defaults))i[e]=this.constructor.defaults[e];for(let t of Object.keys(i))void 0!==this[t]&&i[t]!==this[t]&&(e[t]=this[t]);return!this.autoscale&&this.dataRange&&(e.min=this.dataRange.min,e.max=this.dataRange.max),this.autoscaleGroup&&(e.autoscaleGroup=this.autoscaleGroup),e}get supportsWholeGenome(){return!0===this.config.supportsWholeGenome}hasSamples(){return!1}getGenomeId(){return this.browser.genome?this.browser.genome.id:void 0}setTrackProperties(e){if(this.disposed)return;const t={};let i;for(let n of Object.keys(e))switch(n.toLowerCase()){case"usescore":t.useScore=1===e[n]||"1"===e[n]||"on"===e[n]||!0===e[n];break;case"visibility":switch(e[n]){case"2":case"3":case"pack":case"full":t.displayMode="EXPANDED";break;case"4":case"squish":t.displayMode="SQUISHED";break;case"1":case"dense":t.displayMode="COLLAPSED"}break;case"color":case"altcolor":t[n]=e[n].startsWith("rgb(")?e[n]:"rgb("+e[n]+")";break;case"featurevisiblitywindow":case"visibilitywindow":t.visibilityWindow=Number.parseInt(e[n]);break;case"maxheightpixels":i=e[n].split(":"),3===i.length&&(t.minHeight=Number.parseInt(i[2]),t.height=Number.parseInt(i[1]),t.maxHeight=Number.parseInt(i[0]));break;case"viewlimits":if(!this.config.autoscale&&!this.config.max){i=e[n].split(":");let r,s=0;1==i.length?r=Number(i[0]):2==i.length&&(s=Number(i[0]),r=Number(i[1])),Number.isNaN(r)||Number.isNaN(s)?console.warn(`Unexpected viewLimits value in track line: ${e.viewLimits}`):(t.autoscale=!1,t.dataRange={min:s,max:r},this.viewLimitMin=s,this.viewLimitMax=r)}case"name":t[n]=e[n];break;case"url":t.infoURL=e[n];break;case"type":const r=e[n];Va.has(r)?t[n]=Va.get(r):t[n]=r;break;case"graphtype":t.graphType=e[n];break;default:t[n]=e[n]}for(let e of Object.keys(t))if(!this.config.hasOwnProperty(e)||"name"===e&&this.config._derivedName){let i=t[e];if("true"===i&&(i=!0),"false"===i&&(i=!1),this[e]=i,"height"===e&&this.trackView)try{const e=Number.parseInt(i);this.trackView.setTrackHeight(e)}catch(e){console.error(e)}}}clickedFeatures(e){const t=e.viewport.cachedFeatures;if(!t||!Array.isArray(t)||0===t.length)return[];const i=e.genomicLocation,n=e.referenceFrame.bpPerPixel>.2?3*e.referenceFrame.bpPerPixel:.2;return Qn(t,i-n,i+n)}extractPopupData(e,t){const i=new Set(["row","color","chr","start","end","cdStart","cdEnd","strand","alpha"]),n=[];let r,s;for(let t in e)if(e.hasOwnProperty(t)&&!i.has(t)&&Us(e[t])){let i=e[t];n.push({name:A(t),value:i}),"alleles"===t?r=e[t]:"alleleFreqs"===t&&(s=e[t])}if(r&&s){r.endsWith(",")&&(r=r.substr(0,r.length-1)),s.endsWith(",")&&(s=s.substr(0,s.length-1));let i=r.split(","),o=s.split(",");if(o.length>1){let r=[];for(let e=0;e<o.length;e++)r.push({a:i[e],af:Number(o[e])});r.sort((function(e,t){return e.af-t.af}));let s=r[r.length-1].a;if(1===s.length)for(let i=r.length-2;i>=0;i--){let o=r[i].a;if(1===o.length){t||(t=this.getGenomeId());const i=Pa.getCravatLink(e.chr,e.start+1,s,o,t);console.log(i),i&&(n.push("<hr/>"),n.push({html:i}),n.push("<hr/>"))}}}}if(e.attributes)for(let t of Object.keys(e.attributes))n.push({name:t,value:e.attributes[t]});let o=`${e.chr}:${F(e.start+1)}-${F(e.end)}`;return e.strand&&(o+=` (${e.strand})`),n.push({name:"Location",value:o}),n}description(){const e=(e,t)=>`<div class="igv-track-label-popup-shim"><b>${e}: </b>${t}</div>`;let t='<div class="igv-track-label-popup">';if(this.url?_(this.url)?t+=e("Filename",this.url.name):t+=e("URL",this.url):t=this.name,this.config){if(this.config.metadata)for(let i of Object.keys(this.config.metadata)){t+=e(i,this.config.metadata[i])}for(let i of Object.keys(this.config)){if(i.startsWith("_"))continue;let n=i.substr(0,1);if(n!==n.toLowerCase()){const n=this.config[i];n&&Us(n)&&(t+=e(i,n))}}}return t+="</div>",t}getColorForFeature(e){return"function"==typeof this.color?this.color(feature):this.color}numericDataMenuItems(){const e=[];if("heatmap"!==this.graphType){function t(e){this.trackView.track.selected?this.browser.dataRangeDialog.configure(this.trackView.browser.getSelectedTrackViews()):this.browser.dataRangeDialog.configure(this.trackView),this.browser.dataRangeDialog.present(e)}if(e.push("<hr/>"),e.push({label:"Set data range",dialog:t}),void 0!==this.logScale){function n(){this.logScale=!this.logScale,this.trackView.repaintViews()}e.push({element:Ta("Log scale",this.logScale),click:n})}function i(){this.autoscaleGroup=void 0,this.autoscale=!this.autoscale,this.browser.updateViews()}e.push({element:Ta("Autoscale",this.autoscale),click:i})}return e}setDataRange({min:e,max:t}){this.dataRange={min:e,max:t},this.autoscale=!1,this.autoscaleGroup=void 0,this.trackView.repaintViews()}async nextFeatureAfter(e,t,i){let n=this.trackView.viewports[0].cachedFeatures;if(n&&Array.isArray(n)&&n.length>0){if(this.browser.genome.getChromosomeName(n[0].chr)===e){const e=function(e,t,i=!0){const n=e=>(e.start+e.end)/2,r=i?(e,t)=>e.start-t.start+e.end-t.end:(e,t)=>t.start-e.start+t.end-e.end,s=Array.from(e);s.sort(r);let o=0,a=s.length;for(;o<a;){let e=Math.floor((o+a)/2);i?n(s[e])<=t?o=e+1:a=e:n(s[e])>=t?o=e+1:a=e}return s[o]}(n,t,i);if(e)return e}}if("function"==typeof this.featureSource.nextFeature)return this.featureSource.nextFeature(e,t,i,this.visibilityWindow)}dispose(){this.disposed=!0;for(let e of Object.keys(this))this[e]=void 0}static getCravatLink(e,t,i,n,r){if("hg38"===r||"GRCh38"===r){return`<a target="_blank" href="https://run.opencravat.org/result/nocache/variant.html?chrom=${e.startsWith("chr")?e:"chr"+e}&pos=${t}&ref_base=${i}&alt_base=${n}"><b>Cravat ${i}->${n}</b></a>`}}static localFileInspection(e){const t=Object.assign({},e),i={url:"file",indexURL:"indexFile"};for(const e of["url","indexURL"])t[e]&&t[e]instanceof File&&(t[i[e]]=t[e].name,delete t[e]);return t}set filter(e){this._filter=e,this.trackView.repaintViews()}getInViewFeatures(){const e=[];for(let t of this.trackView.viewports)if(t.isVisible()){const i=t.referenceFrame;i.chr;const n=i.start,r=n+i.toBP(t.getWidth());if(t.cachedFeatures){const i=Qn(t.cachedFeatures,n,r);for(let t of i)this._filter&&!this._filter(t)||e.push(t)}}return e}getFilterableAttributes(){return{}}}function Oa(e){if(!this.hoverTextFields)return;const t=this.clickedFeatures(e);if(t&&t.length>0){let e="";for(let i=0;i<t.length;i++){if(10===i){e+="; ...";break}if(!t[i])continue;const n=t[i]._f||t[i];e.length>0&&(e+="\n"),e="";for(let t of this.hoverTextFields)e.length>0&&(e+="\n"),n.hasOwnProperty(t)?e+=n[t]:"function"==typeof n.getAttribute&&(e+=n.getAttribute(t))}return e}}const Va=new Map([["wiggle_0","wig"],["bed","bed"],["bigBed","bigBed"],["bigWig","bigWig"]]);class qa{constructor(e){switch(this.type=e||"seg",this.type){case"mut":this.sampleColumn=3,this.chrColumn=0,this.startColumn=1,this.endColumn=2,this.dataColumn=4;break;case"maf":this.sampleColumn=15,this.chrColumn=4,this.startColumn=5,this.endColumn=6,this.dataColumn=8;break;default:this.sampleColumn=0,this.chrColumn=1,this.startColumn=2,this.endColumn=3}}async parseHeader(e){let t;for(;void 0!==(t=await e.nextLine());)if(!t.startsWith("#")){const e=t.split("\t");this.header={headings:e};break}return this.header}async parseFeatures(e){const t=[];let i;this.header||(this.header=await this.parseHeader(e)),"seg"===this.type&&(this.dataColumn=this.header.headings.length-1),this.header.headings.length>5&&(i=this.extractExtraColumns(this.header.headings));const n=this.header.headings[this.dataColumn];let r;for(;void 0!==(r=await e.nextLine());){const e=r.split("\t"),s="seg"===this.type?Number(e[this.dataColumn]):e[this.dataColumn];if(e.length>this.dataColumn){const r=new Qa({sample:e[this.sampleColumn],chr:e[this.chrColumn],start:parseInt(e[this.startColumn])-1,end:parseInt(e[this.endColumn]),value:s,valueColumnName:n});if(i){const t=this.extractExtraColumns(e);r.setAttributes({names:i,values:t})}t.push(r)}}return t}extractExtraColumns(e){const t=[];for(let i=0;i<e.length;i++)i!==this.chrColumn&&i!==this.startColumn&&i!==this.endColumn&&i!==this.sampleColumn&&t.push(e[i]);return t}}class Qa{constructor({sample:e,chr:t,start:i,end:n,value:r,valueColumnName:s}){this.sample=e,this.chr=t,this.start=i,this.end=n,this.value=r,this.valueColumnName=s}setAttributes({names:e,values:t}){this.attributeNames=e,this.attributeValues=t}getAttribute(e){if(this.attributeNames){const t=this.attributeNames.indexOf(e);if(t>=0)return this.attributeValues[t]}}popupData(e,t){const i=new Set(["chr","start","end","sample","value","row","color","sampleKey","uniqueSampleKey","sampleId","chromosome","uniquePatientKey"]),n=this.chr+":"+F(this.start+1)+"-"+F(this.end),r=[{name:"Sample",value:this.sample},{name:"Location",value:n},{name:this.valueColumnName?A(this.valueColumnName):"Value",value:this.value}];if("mut"===e&&"hg38"===t){const e=this.extractCravatLink(t);e&&(r.push("<hr/>"),r.push({html:e}),r.push("<hr/>"))}if(this.attributeNames&&this.attributeNames.length>0)for(let e=0;e<this.attributeNames.length;e++)!i.has(this.attributeNames[e])&this.valueColumnName!==this.attributeNames[e]&&r.push({name:A(this.attributeNames[e]),value:this.attributeValues[e]});return r}extractCravatLink(e){let t,i;if(this.attributeNames&&this.attributeNames.length>0)for(let n=0;n<this.attributeNames.length;n++)if(t||"Reference_Allele"!==this.attributeNames[n]||(t=this.attributeValues[n]),!i&&this.attributeNames[n].startsWith("Tumor_Seq_Allele")&&this.attributeValues[n]!==t&&(i=this.attributeValues[n]),t&&i)return Pa.getCravatLink(this.chr,this.start+1,t,i,e)}}const Ua=new Map([["REF","referenceBases"],["ALT","alternateBases"],["QUAL","quality"],["FILTER","filter"]]);class ja{constructor(e){this.chr=e[0],this.pos=parseInt(e[1]),this.names=e[2],this.referenceBases=e[3],this.alternateBases=e[4],this.quality=e[5],this.filter=e[6],this.info={};const t=e[7];if(t&&"."!==t)for(let e of t.split(";")){var i=e.split("=");this.info[i[0]]=i[1]}this.init()}getAttributeValue(e){return Ua.has(e)&&(e=Ua.get(e)),this.hasOwnProperty(e)?this[e]:this.info[e]}init(){const e=this.referenceBases,t=this.alternateBases;if(this.info&&(this.info.VT?this.type=this.info.VT:this.info.SVTYPE?this.type="SV":this.info.PERIOD&&(this.type="STR")),void 0===this.type&&(this.type=function(e,t){const i=e.length;if(void 0===t)return"UNKNOWN";if(0===t.trim().length||"<NON_REF>"===t||"<*>"===t||"."===t)return"NONVARIANT";{const e=t.split(",").map((function(e){return 1===i&&1===e.length?"SNP":"<NON_REF>"===e?"NONVARIANT":e.length>i&&Ka(e)?"INSERTION":e.length<i&&Ka(e)?"DELETION":"OTHER"}));let n=e[0];for(let t of e)if(t!==n)return"MIXED";return n}}(e,t)),this.info.END)this.start=this.pos-1,this.info.CHR2&&this.info.CHR2!==this.chr?this.end=this.start+1:this.end=Number.parseInt(this.info.END);else if("NONVARIANT"===this.type)this.start=this.pos-1,this.end=this.start+e.length;else{const i=t.split(",").filter((e=>e.length>0));this.alleles=[],this.start=void 0,this.end=void 0;for(let t of i)if(this.alleles.push(t),"SV"!==this.type&&Ka(t)){let i=t.length,n=e.length;const r=Math.min(i,n);let s=0;for(;s<r&&e.charCodeAt(s)===t.charCodeAt(s);)s++,i--,n--;for(;i>0&&n>0;){const r=s+i-1,o=s+n-1;if(t.charCodeAt(r)!==e.charCodeAt(o))break;i--,n--}for(;i>0&&n>0;){const r=s,o=s;if(t.charCodeAt(r)!==e.charCodeAt(o))break;s++,i--,n--}const o=this.pos+s-1,a=o+n;this.start=void 0===this.start?o:Math.min(this.start,o),this.end=void 0===this.end?a:Math.max(this.end,a)}void 0===this.start&&(this.start=this.pos-1,this.end=this.pos),this.start===this.end&&(this.start-=.5,this.end+=.5)}}popupData(e,t){const i=`${F(this.pos)}`,n=this.start===this.end?`${F(this.start)} | ${F(this.start+1)}`:`${F(this.start+1)}-${F(this.end)}`,r=[{name:"Chr",value:this.chr},{name:"Pos",value:i},{name:"Loc",value:n},{name:"ID",value:this.names?this.names:""},{name:"Ref",value:this.referenceBases},{name:"Alt",value:this.alternateBases.replace("<","<")},{name:"Qual",value:this.quality},{name:"Filter",value:this.filter}];if(this.type&&r.push({name:"Type",value:this.type}),"SNP"===this.type){let e=this.referenceBases;if(1===e.length){let i=this.alternateBases.split(",");for(let n of i)if(1===n.length){let i=Pa.getCravatLink(this.chr,this.pos,e,n,t);i&&(r.push("<hr/>"),r.push({html:i}))}}}const s=Object.keys(this.info);if(this.info&&s.length>0){r.push({html:'<hr style="border-top: dotted 1px;border-color: #c9c3ba" />'});for(let e of s)r.push({name:e,value:Ya(decodeURIComponent(this.info[e]))})}return r}getInfo(e){return this.info?this.info[e]:void 0}isRefBlock(){return"NONVARIANT"===this.type}isFiltered(){return!("."===this.filter||"PASS"===this.filter)}alleleFreq(){return this.info?this.info.AF:void 0}}class Ga{constructor(e){this.mate=e,this.chr=e.info.CHR2,this.pos=Number.parseInt(e.info.END),this.start=this.pos-1,this.end=this.pos}get info(){return this.mate.info}get names(){return this.mate.names}get referenceBases(){return this.mate.referenceBases}get alternateBases(){return this.mate.alternateBases}get quality(){return this.mate.quality}get filter(){return this.mate.filter}get calls(){return this.mate.calls}getAttributeValue(e){return this.mate.getAttributeValue(e)}getInfo(e){this.mate.getInfo(e)}isFiltered(){return this.mate.isFiltered()}alleleFreq(){return this.mate.alleleFreq()}popupData(e,t){const i=[];return i.push("SV Breakpoint"),i.push({name:"Chr",value:this.chr}),i.push({name:"Pos",value:`${F(this.pos)}`}),i.push({html:'<hr style="border-top: dotted 1px;border-color: #c9c3ba" />'}),i.push("SV"),i.push(...this.mate.popupData(e,t)),i}}class Wa{constructor({formatFields:e,sample:t,token:i}){this.info={},this.sample=t;const n=i.split(":");for(let t=0;t<n.length;t++){const i=n[t];if(t==e.genotypeIndex){this.genotype=[];for(let e of i.split(/[\|\/]/))this.genotype.push("."===e?e:parseInt(e))}else this.info[e.fields[t]]=i}}get zygosity(){if(!this._zygosity)if(this.genotype){let e=!0,t=!0,i=!1;for(let n of this.genotype){if("."===n){i=!0;break}0!==n&&(t=!1),0===n&&(e=!1)}this._zygosity=i?"nocall":t?"homref":e?"homvar":"hetvar"}else this._zygosity="unknown";return this._zygosity}zygosityScore(){switch(this.zygosity){case"homvar":return 4;case"hetvar":return 3;case"homref":return 2;case"nocall":return 1;default:return 0}}#l(){switch(this.zygosity){case"homref":return"Homozygous reference";case"homvar":return"Homozygous variant";case"hetvar":return"Heterozygous";default:return""}}popupData(e,t){const i=[];void 0!==this.sample&&i.push({name:"Sample",value:this.sample}),this.genotypeString&&i.push({name:"Genotype",value:this.genotypeString});const n=this.#l();n&&i.push({name:"Zygosity",value:n});var r=Object.keys(this.info);r.length&&i.push("<hr/>");for(let e of r)i.push({name:e,value:decodeURIComponent(this.info[e])});return i}}const $a=new Set(["A","C","T","G"].map((e=>e.charCodeAt(0))));function Ka(e){for(let t=0;t<e.length;t++)if(!$a.has(e.charCodeAt(t)))return!1;return!0}function Ya(e,t){return void 0===t&&(t=","),Array.isArray(e)?e.join(t):e}class Xa{construtor(){}async parseHeader(e,t){const i={};i.chrAliasTable=new Map;let n=await e.nextLine();if(!n.startsWith("##fileformat"))throw new Error("Invalid VCF file: missing fileformat line");for(i.version=n.substr(13);void 0!==(n=await e.nextLine())&&n.startsWith("#");){let e;const s={};if(n.startsWith("##")){if(n.startsWith("##INFO")||n.startsWith("##FILTER")||n.startsWith("##FORMAT")){const t=n.indexOf("<"),o=n.lastIndexOf(">");if(!(t>2&&o>0)){console.log("Malformed VCF header line: "+n);continue}const a=n.substring(2,t-1);i[a]||(i[a]={});const c=y(n.substring(t+1,o-1),",");for(let t of c){var r=t.split("=");r.length>1&&("ID"===r[0]?e=r[1]:s[r[0]]=r[1])}e&&(i[a][e]=s)}else if(n.startsWith("##contig")&&t){const e=n.indexOf("<ID=");let r=n.indexOf(",",e);-1==r&&(r=n.indexOf(">",e));const s=n.substring(e+4,r),o=t.getChromosomeName(s);i.chrAliasTable.set(o,s)}}else if(n.startsWith("#CHROM")){const e=n.split("\t");if(e.length>8){i.sampleNameMap=new Map;for(let t=9;t<e.length;t++)i.sampleNameMap.set(e[t],t-9)}}}return this.header=i,i}async parseFeatures(e){const t=[],i=this.header.sampleNameMap?Array.from(this.header.sampleNameMap.keys()):void 0,n=8+(i?i.length+1:0);let r;for(;void 0!==(r=await e.nextLine());)if(r&&!r.startsWith("#")){const e=r.trim().split("\t");if(e.length===n){const n=new ja(e);if(n.header=this.header,t.push(n),e.length>9){const r=Za(e[8].split(":"));n.calls=[];for(let t=9;t<e.length;t++){const s=i[t-9],o=e[t],a=new Wa({formatFields:r,sample:s,token:o});n.calls.push(a)}n.info&&n.info.CHR2&&n.info.END&&t.push(new Ga(n))}}}return t}}function Za(e){const t={genotypeIndex:-1,fields:e};for(let i=0;i<e.length;i++)"GT"===e[i]&&(t.genotypeIndex=i);return t}const Ja=Math.log10(Number.MIN_VALUE);class ec{constructor(e){if(this.config=e,e.columns){if(void 0===e.columns.chromosome||void 0===e.columns.position||void 0===e.columns.value)throw Error("columns property must define chrCol, posCol, and valueCol");this.posCol=e.columns.position-1,this.chrCol=e.columns.chromosome-1,this.valueCol=e.columns.value-1}else this.posCol=2,this.chrCol=1,this.valueCol=3}async parseHeader(e){const t=await e.nextLine();return this.parseHeaderLine(t)}parseHeaderLine(e){if(this.columns=e.split(/\t/),!this.config.columns)for(let e=0;e<this.columns.length;e++){switch(this.columns[e].toLowerCase()){case"chr":case"chromosome":case"chr_id":this.chrCol=e;break;case"bp":case"pos":case"position":case"chr_pos":this.posCol=e;break;case"p":case"pval":case"pvalue":case"p-value":case"p.value":this.valueCol=e}}return this.columns}async parseFeatures(e){const t=[],i=e.nextLine();let n;this.columns||this.parseHeaderLine(i);const r=e=>{const t=e.indexOf("E");if(t>0){if(Number.parseInt(e.substring(t+1))<Ja)return Number.MIN_VALUE}return Number(e)};for(;void 0!==(n=e.nextLine());){const e=n.split(/\t/);if(e.length===this.columns.length){const i=e[this.posCol];if(i.indexOf(";")>0||0==i.length||i.indexOf("x")>0)continue;const s=e[this.chrCol],o=r(e[this.valueCol]),a=parseInt(i)-1,c=a+1;t.push(new tc({chr:s,start:a,end:c,value:o,line:n,columns:this.columns}))}}return t}static isGWAS(e){const t=e.split("\t");if(t.length<5)return!1;const i=[["chr","chromosome","chr_id","chrom"],["bp","pos","position","chr_pos","chromEnd"],["p","pval","p-value","p.value"]];for(let e of i)if(!t.some((t=>e.includes(t.toLowerCase()))))return!1;return!0}}class tc{constructor({chr:e,start:t,end:i,value:n,line:r,columns:s}){this.chr=e,this.start=t,this.end=i,this.value=n,this.line=r,this.columns=s}popupData(){const e=this.line.split(/\t/);return this.columns.map((function(t,i){return{name:t,value:e[i]}}))}getAttribute(e){const t=this.line.split(/\t/);for(let i=0;i<this.columns.length;i++)if(this.columns[i]===e)return t[i]}}var ic=new RegExp("([^:]*)\\(([^)]*)\\)"),nc=new RegExp("([^:]*):([^(]*)\\(([^)]*)\\)");class rc{constructor(e){const t=e?e.decode:void 0;this.nameField=e?e.nameField:void 0,this.skipRows=0,this.decode=t||hc,this.delimiter="\t"}async parseHeader(e){let t,i;for(;(t=await e.nextLine())&&(t.startsWith("track")||t.startsWith("#")||t.startsWith("browser"));)if(t.startsWith("track")||t.startsWith("#track")){let e=ac(t);i?Object.assign(i,e):i=e}else if(t.startsWith("#columns")){let e=cc(t);i?Object.assign(i,e):i=e}else t.startsWith("##gff-version 3")&&(this.format="gff3",i||(i={}),i.format="gff3");return this.header=i,i}async parseFeatures(e){const t=[],i=this.decode,n=this.delimiter||"\t";let r,s=0;for(;void 0!==(r=e.nextLine());){if(s++,s<=this.skipRows||r.startsWith("track")||r.startsWith("#")||r.startsWith("browser"))continue;let e=o();if(e.length<1)continue;if(!this.aed){this.aed=oc(e);continue}const n=i.call(this,e,undefined);n&&t.push(n)}return t;function o(){for(var e,t,i=[],s="",o=!1;r||""===r;){for(e=0;e<r.length;e++)(t=r.charAt(e))===n?o?s+=t:(i.push(s),s=""):'"'===t?e+1<r.length&&'"'===r.charAt(e+1)?(o&&(s+='"'),e++):o=!o:s+=t;if(!o)break;s+="\n",r=nextLine()}return i.push(s),i}}}function sc(e){var t=nc.exec(e);if(t)return{namespace:t[1],name:t[2],type:t[3]};if(t=ic.exec(e))return{namespace:"?",name:t[1],type:t[2]};throw new Error("Error parsing the header row of AED file - column not in ns:name(ns:type) format")}function oc(e){var t,i,n;for(t={columns:[],metadata:{}},i=0;i<e.length;i++)n=sc(e[i]),t.columns.push(n);return t}function ac(e){const t={},i=e.split(/(?:")([^"]+)(?:")|([^\s"]+)(?=\s+|$)/g);let n;const r=[];for(let e of i)e&&0!==e.trim().length&&(e.endsWith("=")>0?n=e:n?(r.push(n+e),n=void 0):r.push(e));for(let e of r){if(!e)return;var s=e.split("=",2);if(2===s.length){const e=s[0].trim(),i=s[1].trim();t[e]=i}}return t}function cc(e){let t={},i=e.split(/\s+/);if(2===i.length){i[1].split(";").forEach((function(e){let i=e.split("=");"color"===i[0]?t.colorColumn=Number.parseInt(i[1])-1:"thickness"===i[0]&&(t.thicknessColumn=Number.parseInt(i[1])-1)}))}return t}function lc(e,t){var i,n,r=e.columns;this.aed=e,this.allColumns=t,this.chr=null,this.start=null,this.end=null,this.score=1e3,this.strand=".",this.cdStart=null,this.cdEnd=null,this.name=null,this.color=null;for(let e=0;e<t.length;e++)if(i=t[e]){"aed:Integer"===(n=r[e]).type&&(i=parseInt(i));var s=[];if(n.namespace.length>0)for(let e=0;e<n.namespace.length;e++)s.push(n.namespace.charCodeAt(e));"bio"===n.namespace.trim()?"sequence"===n.name?this.chr=i:"start"===n.name?this.start=i:"end"===n.name?this.end=i:"cdsMin"===n.name?this.cdStart=i:"cdsMax"===n.name?this.cdEnd=i:"strand"===n.name&&(this.strand=i):"aed"===n.namespace?"name"===n.name&&(this.name=i):"style"===n.namespace&&"color"===n.name&&(this.color=un.createColorString(i))}}function hc(e,t){var i,n,r,s,o,a,c=0,l=this.aed.columns;if(e.length===l.length){for(a=0;a<e.length;a++)s=l[a],""!==(r=e[a])&&c++,"name"===s.name&&"aed"===s.namespace?i=r:"value"===s.name&&"aed"===s.namespace&&(n=r);if(2===c&&i&&n)return o=sc(i),this.aed.metadata[o.namespace]||(this.aed.metadata[o.namespace]={}),void(this.aed.metadata[o.namespace][o.name]||(this.aed.metadata[o.namespace][o.name]={type:o.type,value:n}));var h=new lc(this.aed,e);if(h.chr&&(h.start||0===h.start)&&h.end)return h;console.log("Cannot parse feature: "+e.join(","))}else console.log("Corrupted AED file row: "+e.join(","))}function dc(e,t){if(0===e.length)return e;if(e.sort((function(e,t){const i=e.minv.block-t.minv.block;return 0!==i?i:e.minv.offset-t.minv.offset})),e.length<=1)return e;t&&(e=e.filter((e=>e.maxv.isGreaterThan(t))));const i=[];let n;for(let t of e)n&&uc(n,t)?t.maxv.isGreaterThan(n.maxv)&&(n.maxv=t.maxv):(i.push(t),n=t);return i}function uc(e,t){const i=t.minv.block-e.maxv.block;return t.maxv.block-e.minv.block<5e6&&i<65e3}lc.prototype.popupData=function(){for(var e=[],t=this.aed,i=0;i<this.allColumns.length;i++){var n=this.allColumns[i],r=t.columns[i].name;"sequence"!==r&&"color"!==r&&n&&e.push({name:r,value:n})}return e};class fc{constructor(){this.tabix=!0}parse(e){const t=new Co(new DataView(e)),i=t.getInt();if(21582659!==i)throw 38359875===i?Error("CSI version 2 is not supported. Please enter an issue at https://github.com/igvteam/igv.js"):Error("Not a CSI index");this.indices=[],this.blockMin=Number.MAX_SAFE_INTEGER,this.lastBlockPosition=[],this.sequenceIndexMap={},this.minShift=t.getInt(),this.depth=t.getInt();const n=[];let r=0;if(t.getInt()>=28){t.getInt(),t.getInt(),t.getInt(),t.getInt(),t.getInt(),t.getInt();const e=t.getInt(),i=t.position+e;let r=0;for(;t.position<i;){let e=t.getString();this.sequenceIndexMap[e]=r,n[r]=e,r++}}const s=this.bin_limit()+1,o=t.getInt();for(let e=0;e<o;e++){const i=[],n=[],o=t.getInt();for(let e=0;e<o;e++){const e=t.getInt();if(n[e]=t.getVPointer(),e>s)t.getInt(),t.getVPointer(),t.getVPointer(),t.getLong(),t.getLong();else{i[e]=[];const n=t.getInt();for(let s=0;s<n;s++){const n=t.getVPointer(),s=t.getVPointer();n&&s&&(n.block<this.blockMin&&(this.blockMin=n.block),s.block>r&&(r=s.block),i[e].push([n,s]))}}}o>0&&(this.indices[e]={binIndex:i,loffset:n})}this.lastBlockPosition=r}get sequenceNames(){return Object.keys(this.sequenceIndexMap)}chunksForRange(e,t,i){const n=this.indices[e];if(n){const e=this.reg2bins(t,i);if(0==e.length)return[];const r=[];for(let t of e)for(let e=t[0];e<=t[1];e++)if(n.binIndex[e]){const t=n.binIndex[e];for(let i of t){const t=i[0],n=i[1];r.push({minv:t,maxv:n,bin:e})}}let s=e[this.depth][0];do{if(n.binIndex[s])break;s>1+(this.getParentBin(s)<<3)?s--:s=this.getParentBin(s)}while(0!=s);return dc(r,n.loffset[s])}return[]}getParentBin(e){return 0==e?0:e-1>>3}reg2bins(e,t){(e-=1)<1&&(e=1),t>2**34&&(t=2**34),t-=1;let i=0,n=0,r=this.minShift+3*this.depth;const s=[];for(;i<=this.depth;r-=3,n+=1<<3*i,i+=1){const i=n+(e>>r),o=n+(t>>r);s.push([i,o])}return s}bin_limit(){return((1<<3*(this.depth+1))-1)/7}}class pc{constructor(){}async parse(e,t){const i=[];let n=Number.MAX_SAFE_INTEGER,r=0;const s=new Co(new DataView(e)),o=s.getInt(),a={};if(!(21578050===o||t&&21578324===o))throw new Error(indexURL+" is not a "+(t?"tabix":"bai")+" file");{const e=s.getInt();if(t){s.getInt(),s.getInt(),s.getInt(),s.getInt(),s.getInt(),s.getInt(),s.getInt();for(let t=0;t<e;t++){a[s.getString()]=t}}for(let t=0;t<e;t++){const e={},o=[],a=s.getInt();for(let t=0;t<a;t++){const t=s.getInt();if(37450===t)s.getInt(),s.getVPointer(),s.getVPointer(),s.getLong(),s.getLong();else{e[t]=[];const i=s.getInt();for(let o=0;o<i;o++){const i=s.getVPointer(),o=s.getVPointer();i&&o&&(i.block<n&&(n=i.block),o.block>r&&(r=o.block),e[t].push([i,o]))}}}const c=s.getInt();for(let e=0;e<c;e++){const e=s.getVPointer();o.push(e)}a>0&&(i[t]={binIndex:e,linearIndex:o})}this.firstBlockPosition=n,this.lastBlockPosition=r,this.indices=i,this.sequenceIndexMap=a,this.tabix=t}}get sequenceNames(){return Object.keys(this.sequenceIndexMap)}chunksForRange(e,t,i){const n=this.indices[e];if(n){const e=function(e,t){const i=[];t>=1<<29&&(t=1<<29);return--t,i.push([0,0]),i.push([1+(e>>26),1+(t>>26)]),i.push([9+(e>>23),9+(t>>23)]),i.push([73+(e>>20),73+(t>>20)]),i.push([585+(e>>17),585+(t>>17)]),i.push([4681+(e>>14),4681+(t>>14)]),i}(t,i),r=[];for(let t of e)for(let e=t[0];e<=t[1];e++)if(n.binIndex[e]){const t=n.binIndex[e];for(let e of t){const t=e[0],i=e[1];r.push({minv:t,maxv:i})}}const s=n.linearIndex.length;let o;const a=Math.min(t>>14,s-1),c=Math.min(i>>14,s-1);for(let e=a;e<=c;e++){const t=n.linearIndex[e];if(t){o=t;break}}return dc(r,o)}return[]}}class gc{constructor(){this.tribble=!0}async parse(e){let t=0;this.chrIndex={},this.lastBlockPosition=[];const i=new Co(new DataView(e));!function(e){e.getInt(),e.getInt();const t=e.getInt();if(e.getString(),e.getLong(),e.getLong(),e.getString(),e.getInt(),t>=3){let t=e.getInt();for(;t-- >0;)e.getString(),e.getString()}}(i);let n=i.getInt();for(;n-- >0;){let e=i.getString();const n=i.getInt(),r=i.getInt(),s=i.getInt();i.getInt(),i.getInt();let o=i.getLong();const a=[];for(let e=0;e<r;e++){const e=i.getLong();a.push({min:o,max:e}),o=e,e>t&&(t=e)}this.chrIndex[e]={chr:e,blocks:a,longestFeature:s,binWidth:n}}this.lastBlockPosition=t}get sequenceNames(){return Object.keys(this.chrIndex)}chunksForRange(e,t,i){const n=this.chrIndex[e];if(n){const e=n.blocks,r=n.longestFeature,s=n.binWidth,o=Math.max(t-r,0),a=Math.floor(o/s);if(a>=e.length)return[];{const t=Math.min(Math.floor((i-1)/s),e.length-1),n=e[a].min,r=e[t].max;if(0===r-n)return[];return[{minv:{block:n,offset:0},maxv:{block:r,offset:0}}]}}}}async function mc(e,t){let i=await Mn.loadArrayBuffer(e,js(t)),n=new DataView(i);if(31===n.getUint8(0)&&139===n.getUint8(1)){i=en(i).buffer,n=new DataView(i)}switch(n.getInt32(0,!0)){case 21578050:return async function(e){const t=new pc;return await t.parse(e,!1),t}(i);case 21578324:return async function(e){const t=new pc;return await t.parse(e,!0),t}(i);case 21582659:return async function(e){const t=new fc;return t.parse(e),t}(i);case 1480870228:return async function(e){const t=new gc;return t.parse(e),t}(i);case 38359875:throw Error("CSI version 2 is not supported.");default:throw Error(`Unrecognized index type: ${e}`)}}function wc(e){return"string"==typeof e||e instanceof String?new bc(e):new Fc(e)}class bc{constructor(e){this.data=e,this.ptr=0}nextLine(){var e=this.ptr,t=this.data.indexOf("\n",e),i=this.data;if(t>0)return this.ptr=t+1,t>e&&"\r"===i.charAt(t-1)?i.substring(e,t-1):i.substring(e,t);var n=i.length;return this.ptr=n,e>=n?void 0:i.substring(e)}}class Fc{constructor(e){this.data=e,this.length=this.data.length,this.ptr=0}nextLine(){if(this.ptr>=this.data.length)return;let e=this.ptr;const t=this.data;let i="",n=!1;for(;e<t.length;){var r=t[e],s=0,o=0;if(r<=127?(s=0,o=255&r):r<=223?(s=1,o=31&r):r<=239?(s=2,o=15&r):r<=244&&(s=3,o=7&r),t.length-e-s>0)for(var a=0;a<s;)o=o<<6|63&(r=t[e+a+1]),a+=1;else o=65533,s=t.length-e;e+=s+1;const c=String.fromCodePoint(o);if("\r"===c)n=!0;else{if("\n"===c)break;n&&(i+="\r",n=!1),i+=c}}return this.ptr=e,i}}class vc{constructor(e){this.config=e,this.filePtr=0,this.bufferPtr=0,this.buffer}async nextLine(){let e;try{for(;;){const t=this.buffer?this.buffer.length:0;for(;this.bufferPtr<t;){const t=String.fromCharCode(this.buffer[this.bufferPtr++]);if("\r"!==t){if("\n"===t)return e;e=e?e+t:t}}if(this.eof)return e;await this.readNextBlock()}}catch(t){return console.warn(t),this.eof=!0,e}}async readNextBlock(){const e=js(this.config,{range:{start:this.filePtr,size:26}}),t=tn(await Mn.loadArrayBuffer(this.config.url,e));if(0===t)this.eof=!0,this.buffer=void 0;else{const e=js(this.config,{range:{start:this.filePtr,size:t}}),i=await Mn.loadArrayBuffer(this.config.url,e);i.byteLength<t&&(this.eof=!0),this.buffer=en(i),0==this.buffer.byteLength&&(this.eof=!0),this.bufferPtr=0,this.filePtr+=i.byteLength}}}const yc=e=>{const t=ArrayBuffer.isView(e)?e:new Uint8Array(e);return 1+(t[17]<<8|t[16])};class Ac{constructor(e){this.config=e,this.cacheBlocks=0!=e.cacheBlocks,this.cache=void 0}async getData(e,t){const i=e.block,n=t.block,r=0===t.offset,s=await this.getInflatedBlocks(i,n,r);if(1===s.length)return s[0];let o=0;for(const e of s)o+=e.byteLength;const a=new Uint8Array(o);let c=0;for(const e of s)a.set(e,c),c+=e.byteLength;return a}async getInflatedBlocks(e,t,i){if(this.cacheBlocks){const n=this.cache;if(n&&n.startBlock<=e&&(n.endBlock>=t||i&&n.nextEndBlock===t)){const i=e-n.startBlock,r=t-n.startBlock;return _c(n.buffer,i,r)}{let r;if(!n||n.startBlock>t||n.endBlock<e)r=await this.loadBLockData(e,t,{skipEnd:i});else{const s=[];if(e<n.startBlock){const t=await this.loadBLockData(e,n.startBlock,{skipEnd:!0});s.push(t)}let o;if(e<=n.startBlock&&t>=n.endBlock)o=n.buffer;else{const i=Math.max(0,e-n.startBlock);let r;if(t>=n.endBlock)r=n.buffer.byteLength;else{const e=Cc(n.buffer);for(let i=0;i<e.length-1;i++)if(n.startBlock+e[i]===t){r=e[i+1];break}}o=n.buffer.slice(i,r)}if(s.push(o),t>n.endBlock){const e=await this.loadBLockData(n.endBlock,t,{skipStart:!0,skipEnd:i});s.push(e)}r=function(e){if(1===e.length)return e[0];let t=0;for(const i of e)t+=i.byteLength;const i=new Uint8Array(t);let n=0;for(const t of e)i.set(new Uint8Array(t),n),n+=t.byteLength;return i.buffer}(s)}let s=t;if(i){const e=Cc(r);t=e[e.length-1]}return this.cache={startBlock:e,endBlock:t,nextEndBlock:s,buffer:r},_c(r)}}return _c(await this.loadBLockData(e,t,{skipEnd:i}))}async loadBLockData(e,t,i){const n=this.config,r=i&&i.skipStart;let s=0;if(!(i&&i.skipEnd)){const e=js(n,{range:{start:t,size:26}}),i=await Mn.loadArrayBuffer(n.url,e);s=yc(i)}if(r){const t=js(n,{range:{start:e,size:26}}),i=await Mn.loadArrayBuffer(n.url,t);e+=yc(i)}const o=js(n,{range:{start:e,size:t+s-e}});return Mn.loadArrayBuffer(n.url,o)}}function Cc(e){const t=e.byteLength;let i=0;const n=[0];for(;i<t;){const r=new Uint8Array(e,i);i+=1+(r[17]<<8|r[16]),i<t&&n.push(i)}return n}function _c(e,t,i){const n=[];let r=t=t||0;const s=e.byteLength-18;for(;r<s;)try{const t=new Uint8Array(e,r,18),s=t[11]<<8|t[10],o=t[17]<<8|t[16],a=12+s+r,c=e.byteLength-a,l=o-s-18;if(c<l||l<=0)break;const h=new Uint8Array(e,a,l),d=Yi(h);if(n.push(d),i===r)break;r+=o+1}catch(e){console.error(e);break}return n}const xc=Math.log10(Number.MIN_VALUE);class kc{chrCol=-1;snpCol=-1;posCol=-1;pValueCol=-1;phenotypeColumn=-1;delimiter="\t";constructor(e){this.config=e}async parseHeader(e){const t=this.config;t.delimiter&&(this.delimiter=t.delimiter);const i=await e.nextLine(),n=this.parseHeaderLine(i);return t.chrColumn&&(this.chrColumn=t.chrColumn-1),t.snpColumn&&(this.snpColumn=t.snpColumn-1),t.posColumn&&(this.posColumn=t.posColumn-1),t.pValueColumn&&(this.pValueColumn=t.pValueColumn-1),t.phenotypeColumn&&(this.phenotypeColumn=t.phenotypeColumn-1),n}parseHeaderLine(e){this.columns=e.split(this.delimiter);for(let e=0;e<this.columns.length;e++){switch(this.columns[e].toLowerCase()){case"chr":case"chromosome":case"chr_id":case"chrom":this.chrColumn=e;break;case"bp":case"pos":case"position":case"chr_pos":case"chromEnd":this.posColumn=e;break;case"p":case"pval":case"pvalue":case"p-value":case"p.value":this.pValueColumn=e;break;case"rsid":case"variant":case"snp":this.snpColumn=e;break;case"phenotype":case"gene":case"gene_id":case"molecular_trait_id":this.phenotypeColumn=e}}return this.columns}async parseFeatures(e){const t=[],i=e.nextLine();let n;this.columns||this.parseHeaderLine(i);const r=e=>{const t=e.indexOf("E");if(t>0){if(Number.parseInt(e.substring(t+1))<xc)return Number.MIN_VALUE}return Number(e)};for(;void 0!==(n=e.nextLine());){const e=n.split(this.delimiter);if(e.length===this.columns.length){const i=e[this.posColumn];if(i.indexOf(";")>0||0==i.length||i.indexOf("x")>0)continue;const n=e[this.chrColumn],s=r(e[this.pValueColumn]),o=parseInt(i)-1,a=o+1,c=e[this.snpColumn],l=e[this.phenotypeColumn],h=new Ic({chr:n,start:o,end:a,pValue:s,snp:c,phenotype:l},this.columns,e);t.push(h)}}return t}static isQTL(e){const t=e.split("\t");if(t.length<5)return!1;const i=[["chr","chromosome","chr_id","chrom"],["bp","pos","position","chr_pos","chromEnd"],["p","pval","p-value","p.value"],["rsid","variant","snp"],["phenotype","gene","gene_id","molecular_trait_id"]];for(let e of i)if(!t.some((t=>e.includes(t.toLowerCase()))))return!1;return!0}}class Ic{constructor({chr:e,start:t,end:i,pValue:n,snp:r,phenotype:s},o,a){this.chr=e,this.start=t,this.end=i,this.pValue=n,this.snp=r,this.phenotype=s,this.headers=o,this.tokens=a}popupData(){const e=[];for(let t=0;t<this.headers.length;t++)e.push({name:this.headers[t],value:this.tokens[t]});return e}}class Sc{sequenceNames;constructor(e,t){if(this.config=e||{},this.genome=t,this.indexURL=e.indexURL,this.indexed=e.indexed||void 0!==this.indexURL,this.queryable=this.indexed,_(this.config.url))this.filename=this.config.url.name;else if(Xs(this.config.url))this.indexed=!1,this.dataURI=e.url;else{const t=k(this.config.url);this.filename=e.filename||t.file}this.parser=this.getParser(this.config),"vcf"!==this.config.format||this.config.indexURL||console.warn("Warning: index file not specified. The entire vcf file will be loaded.")}async defaultVisibilityWindow(){if(this.config.indexURL){const e=await this.getIndex();if(e&&e.lastBlockPosition){let t=0;const i=1e4;for(let i of e.sequenceNames){const e=this.genome.getChromosome(i);e&&(t+=e.bpLength)}return Math.round(t/e.lastBlockPosition*i)}}}async readFeatures(e,t,i){let n;this.dataURI||this.header||await this.readHeader();return await this.getIndex()?(this.indexed=!0,n=await this.loadFeaturesWithIndex(e,t,i)):this.dataURI?(this.indexed=!1,n=await this.loadFeaturesFromDataURI()):"service"===this.config.sourceType?n=await this.loadFeaturesFromService(e,t,i):(this.indexed=!1,n=await this.loadFeaturesNoIndex()),n.sort((function(e,t){return e.chr===t.chr?e.start-t.start:e.chr.localeCompare(t.chr)})),n}async readHeader(){if(this.dataURI)return await this.loadFeaturesFromDataURI(this.dataURI),this.header;if(this.config.indexURL){const e=await this.getIndex();if(!e)throw new Error("Unable to load index: "+this.config.indexURL);let t;if(this.sequenceNames=new Set(e.sequenceNames),e.tabix)this._blockLoader=new Ac(this.config),t=new vc(this.config);else{const i=Object.values(e.chrIndex).flatMap((e=>e.blocks)).map((e=>e.max)).reduce(((e,t)=>Math.min(e,t)),Number.MAX_SAFE_INTEGER),n=js(this.config,{bgz:e.tabix,range:{start:0,size:i}});t=wc(await Mn.loadString(this.config.url,n))}return this.header=await this.parser.parseHeader(t),this.header}if("service"!==this.config.sourceType){let e;if(this.config._filecontents)e=this.config._filecontents,delete this.config._filecontents;else{const t=js(this.config);e=await Mn.loadByteArray(this.config.url,t)}e.length<5e8&&(e=(new TextDecoder).decode(e));let t=wc(e);this.header=await this.parser.parseHeader(t),t=wc(e),this.features=await this.parser.parseFeatures(t),this.sequenceNames=new Set;for(let e of this.features)this.sequenceNames.add(e.chr);return this.header}if(this.config.seqnamesURL){const e=js(this.config,{}),t=await Mn.loadString(this.config.seqnamesURL,e);t&&(this.sequenceNames=new Set(t.split(",").map((e=>e.trim())).filter((e=>e))))}if(this.config.headerURL){const e=js(this.config,{}),t=wc(await Mn.loadString(this.config.headerURL,e));return this.header=await this.parser.parseHeader(t),this.header}}getParser(e){switch(e.format){case"vcf":return new Xa(e);case"seg":return new qa("seg");case"mut":return new qa("mut");case"maf":return new qa("maf");case"gwas":return new ec(e);case"qtl":return new kc(e);case"aed":return new rc(e);default:return new Na(e)}}async loadFeaturesNoIndex(){if(this.features){const e=this.features;return delete this.features,e}{const e=js(this.config),t=await Mn.loadByteArray(this.config.url,e);if(!this.header){const e=wc(t);this.header=await this.parser.parseHeader(e)}const i=wc(t),n=[];return await this._parse(n,i),n}}async loadFeaturesWithIndex(e,t,i){const n=this.config;this.parser;const r=this.index.tabix,s=r?this.index.sequenceIndexMap[e]:e;if(void 0===s)return[];const o=this.index.chunksForRange(s,t,i);if(o&&0!==o.length){const s=[];for(let a of o){let o;if(r)o=await this._blockLoader.getData(a.minv,a.maxv);else{const e=js(n,{range:{start:a.minv.block,size:a.maxv.block-a.minv.block+1}});o=await Mn.loadString(n.url,e)}const c=wc(a.minv.offset?o.slice(a.minv.offset):o);await this._parse(s,c,e,i,t)}return s}return[]}async loadFeaturesFromService(e,t,i){let n;n="function"==typeof this.config.url?this.config.url({chr:e,start:t,end:i}):this.config.url.replace("$CHR",e).replace("$START",t).replace("$END",i);const r=js(this.config),s=wc(await Mn.loadString(n,r)),o=[];return await this._parse(o,s),o}async _parse(e,t,i,n,r){let s=await this.parser.parseFeatures(t);if(s.sort((function(e,t){return e.chr===t.chr?e.start-t.start:e.chr.localeCompare(t.chr)})),void 0===i)for(let t of s)e.push(t);else{let t=!1;for(let o=0;o<s.length;o++){const a=s[o];if(a.chr===i){if(a.start>n){e.push(a);break}a.end>=r&&a.start<=n&&(t||(t=!0,o>0&&e.push(s[o-1])),e.push(a))}}}}async getIndex(){return this.index?this.index:this.config.indexURL?(this.index=await this.loadIndex(),this.index):void 0}async loadIndex(){return mc(this.config.indexURL,this.config)}async loadFeaturesFromDataURI(){if(this.features){const e=this.features;return delete this.features,e}{const e=on(this.dataURI);let t=wc(e);this.header=await this.parser.parseHeader(t),this.header instanceof String&&this.header.startsWith("##gff-version 3")&&(this.format="gff3"),t=wc(e);const i=[];return await this._parse(i,t),i}}}const Ec=b;class Nc{constructor(e){this.config=e}async readFeatures(e,t,i){let n;n="function"==typeof this.config.url?this.config.url({chr:e,start:t,end:i}):this.config.url.replace("$CHR",e).replace("$START",t).replace("$END",i);let r,s=Object.assign({},this.config);void 0!==this.config.body&&("function"==typeof this.config.body?s.body=this.config.body({chr:e,start:t,end:i}):s.body=this.config.body.replace("$CHR",e).replace("$START",t).replace("$END",i));const o=await Mn.load(n,s);if(o&&(r="function"==typeof this.config.parser?this.config.parser(o):Ec(o)?JSON.parse(o):o),this.config.mappings){let e=Object.keys(this.config.mappings);for(let t of r)for(let i of e)t[i]=t[this.config.mappings[i]]}return r}}const Mc=function(e,t){this.config=e,this.genome=t,this.expandQueryInterval=!1};Mc.prototype.readFeatures=function(e,t,i){const n=Math.max(0,Math.floor(t));let r=Math.ceil(i);if(this.genome){const t=this.genome.getChromosome(e);t&&r>t.bpLength&&(r=t.bpLength)}const s=this.config.url+"?db="+this.config.db+"&table="+this.config.tableName+"&chr="+e+"&start="+n+"&end="+r;return Mn.loadJson(s,this.config).then((function(e){return e?(e.forEach((function(e){e.hasOwnProperty("exonStarts")&&e.hasOwnProperty("exonEnds")&&e.hasOwnProperty("exonCount")&&e.hasOwnProperty("cdsStart")&&e.hasOwnProperty("cdsEnd")&&function(e){var t,i,n,r,s,o;t=e.exonCount,i=e.exonStarts.split(","),n=e.exonEnds.split(","),r=[];for(var a=0;a<t;a++){var c={start:s=parseInt(i[a]),end:o=parseInt(n[a])};(e.cdsStart>o||e.cdsEnd<e.cdsStart)&&(c.utr=!0),e.cdsStart>=s&&e.cdsStart<=o&&(c.cdStart=e.cdsStart),e.cdsEnd>=s&&e.cdsEnd<=o&&(c.cdEnd=e.cdsEnd),r.push(c)}e.exons=r}(e)})),e):null}))};class Rc{featureCaches=[];gtexChrs=new Set(["chr1","chr10","chr11","chr12","chr13","chr14","chr15","chr16","chr17","chr18","chr19","chr2","chr20","chr21","chr22","chr3","chr4","chr5","chr6","chr7","chr8","chr9","chrM","chrX","chrY"]);constructor(e){this.config=e,this.url=e.url,this.tissueId=e.tissueSiteDetailId,this.datasetId=e.datasetId||"gtex_v8"}async readFeatures(e,t,i){const n=e.startsWith("chr")?e:"MT"===e?"chrM":"chr"+e;if(!this.gtexChrs.has(n))return[];const r=Math.floor(t),s=Math.ceil(i),o=this.datasetId,a=this.url+"?chromosome="+n+"&start="+r+"&end="+s+"&tissueSiteDetailId="+this.tissueId+"&datasetId="+o,c=await Mn.loadJson(a,{withCredentials:this.config.withCredentials});return c&&c.singleTissueEqtl?c.singleTissueEqtl.map((e=>new Bc(e))):[]}}class Bc{constructor(e){this.chr=e.chromosome,this.start=e.pos-1,this.end=this.start+1,this.snp=e.snpId,this.phenotype=e.geneSymbol,this.pValue=e.pValue,this.json=e}popupData(){return Object.keys(this.json).map((e=>({name:e,value:this.json[e]})))}}class Dc{constructor(e,t){if(this.config=e,this.genome=t,!e.format)throw Error('Format is required, and must be either "bam" or "cram"');if(this.format=e.format.toUpperCase(),"BAM"!==this.format&&"VCF"!==this.format)throw Error(`htsget format ${e.format} is not supported`)}async readHeaderData(){const e=`${Tc(this.config)}?class=header&format=${this.format}`,t=await Mn.loadJson(e,js(this.config));return await this.loadUrls(t.htsget.urls)}async readData(e,t,i){const n=`${Tc(this.config)}?format=${this.format}&referenceName=${e}&start=${Math.floor(t)}&end=${Math.ceil(i)}`,r=await Mn.loadJson(n,js(this.config));return this.loadUrls(r.htsget.urls)}async loadUrls(e){const t=[];for(let i of e)if(i.url.startsWith("data:"))t.push(Promise.resolve(zc(i.url)));else{const e={headers:i.headers||{}};t.push(Mn.loadArrayBuffer(i.url,e))}return function(e){let t=0;for(let i of e)t+=i.byteLength;let i=0;const n=new Uint8Array(t);for(let t of e){const e=new Uint8Array(t);n.set(e,i),i+=e.length}return n}(await Promise.all(t))}static async inferFormat(e){try{const t=Tc(e),i=`${t}${t.includes("?")?"&":"?"}class=header`,n=await Mn.loadJson(i,js(e));if(n.htsget){const t=n.htsget.format;if("BAM"!==t&&"VCF"!==t)throw Error(`htsget format ${t} is not supported`);e.format=t.toLowerCase(),e.sourceType="htsget",e.name||(e.name=await Ks(e.url))}}catch(e){}}}function Tc(e){if(e.url&&e.endpoint&&e.id)return e.url+e.endpoint+e.id;if(e.endpoint&&e.id)return e.endpoint+e.id;if(e.url)return e.url.startsWith("htsget://")?e.url.replace("htsget://","https://"):e.url;throw Error("Must specify either 'url', or 'endpoint' and 'id")}function zc(e){const t=e.split(","),i=t[0].split(":")[1];let n=t[1];n=i.indexOf("base64")>=0?atob(n):decodeURI(n);const r=new Uint8Array(n.length);for(var s=0;s<n.length;s++)r[s]=n.charCodeAt(s);return r}class Lc extends Dc{constructor(e,t){super(e,t),this.parser=new Xa}async readHeader(){if(!this.header){let e=await this.readHeaderData();Zi(e)&&(e=Ji(e));const t=wc(e);this.header=await this.parser.parseHeader(t,this.genome),this.chrAliasTable=this.header.chrAliasTable}return this.header}async readFeatures(e,t,i){if(this.config.format&&"VCF"!==this.config.format.toUpperCase())throw Error(`htsget format ${this.config.format} is not supported`);this.chrAliasTable||await this.readHeader();let n=this.chrAliasTable.has(e)?this.chrAliasTable.get(e):e,r=await this.readData(n,t,i);Zi(r)&&(r=Ji(r));const s=wc(r);return this.parser.parseFeatures(s)}}class Hc{chrAliasTable=new Map;constructor(e,t){this.sequenceNames=new Set(e),this.genome=t}async getAliasName(e){if(!this.genome)return e;if(!this.chrAliasTable.has(e)){const t=await this.genome.getAliasRecord(e);if(t){let i;const n=Object.keys(t).filter((e=>"start"!==e&&"end"!==e)).map((e=>t[e])).filter((e=>this.sequenceNames.has(e)));n.length>0&&(i=n[0]),this.chrAliasTable.set(e,i)}else this.chrAliasTable.set(e,void 0)}return this.chrAliasTable.get(e)}}class Pc{constructor(e){this.genome=e}async nextFeature(e,t,i,n){let r=this.genome.chromosomeNames||[e],s=r.indexOf(e);if(s<0)return;const o=Math.min(1e4,n||1e4);let a=i?t:Math.max(t-o,0);for(;s<r.length&&s>=0;){e=r[s];const c=this.genome.getChromosome(e).bpLength;for(;a<c&&a>=0;){let r=i?a+o:Math.min(t,a+o);const s=await this.getFeatures({chr:e,start:a,end:r,visibilityWindow:n});if(s){const e=(e,t)=>e.start-t.start+e.end-t.end,n=Array.from(s);n.sort(e);let r=i?0:n.length-1;for(;r>=0&&r<n.length;){const e=n[r],s=(e.start+e.end)/2;if(i){if(s>t)return e;r++}else{if(s<t)return e;r--}}}a=i?r:a-o}if(i)s++,a=0,t=0;else{if(s--,s<0)break;a=(t=this.genome.getChromosome(r[s]).bpLength)-o}}}async previousFeature(e,t,i,n){let r=this.genome.chromosomeNames||[e],s=r.indexOf(e);if(s<0)return;const o=Math.min(1e4,n||1e4);let a=i?t:Math.max(t-o,0);for(;s<r.length&&s>=0;){e=r[s];const c=this.genome.getChromosome(e).bpLength;for(;a<c&&a>=0;){let r=Math.min(t,a+o);const s=await this.getFeatures({chr:e,start:a,end:r,visibilityWindow:n});if(s){const e=(e,t)=>e.start-t.start+e.end-t.end,n=Array.from(s);n.sort(e);let r=i?0:n.length-1;for(;r>=0&&r<n.length;){const e=n[r],s=(e.start+e.end)/2;if(i){if(s>t)return e;r++}else{if(s<t)return e;r--}}}a=i?r:a-o}if(i)s++,a=0,t=0;else{if(s--,s<0)break;a=(t=this.genome.getChromosome(r[s]).bpLength)-o}}}}class Oc{constructor(e,t){this.config=e,this.genome=t,this.path=e.url,this.groupCache={},this.datasetCache={}}async readHeader(){if(void 0!==this.magic)return this;let e=await Mn.loadArrayBuffer(this.path,js(this.config,{range:{start:0,size:64e3}})),t=new Co(new DataView(e));if(this.magic=t.getInt(),this.version=t.getInt(),this.indexPos=t.getLong(),this.indexSize=t.getInt(),t.getInt(),this.version>=2){let e=t.getInt();for(this.windowFunctions=[];e-- >0;)this.windowFunctions.push(t.getString())}this.trackType=t.getString(),this.trackLine=t.getString();let i=t.getInt();for(this.trackNames=[];i-- >0;)this.trackNames.push(t.getString());this.genomeID=t.getString(),this.flags=t.getInt(),this.compressed=!!(1&this.flags),e=await Mn.loadArrayBuffer(this.path,js(this.config,{range:{start:this.indexPos,size:this.indexSize}})),t=new Co(new DataView(e)),this.datasetIndex={};let n=t.getInt();for(;n-- >0;){const e=t.getString(),i=t.getLong(),n=t.getInt();this.datasetIndex[e]={position:i,size:n}}for(this.groupIndex={},n=t.getInt();n-- >0;){const e=t.getString(),i=t.getLong(),n=t.getInt();this.groupIndex[e]={position:i,size:n}}return this}async readDataset(e,t,i){const n=e+"_"+t+"_"+i;if(this.datasetCache[n])return this.datasetCache[n];{await this.readHeader();const r=this.version<2?"":"/"+t,s="all"===e.toLowerCase()||void 0===i?"0":i.toString();let o;o="raw"===t?"/"+e+"/raw":"/"+e+"/z"+s+r;const a=this.datasetIndex[o];if(void 0===a)return;const c=await Mn.loadArrayBuffer(this.path,js(this.config,{range:{start:a.position,size:a.size}}));if(!c)return;const l=new Co(new DataView(c));let h=l.getInt();const d={};for(;h-- >0;)d[l.getString()]=l.getString();const u=l.getString(),f=l.getFloat();let p=l.getInt();const g=[];for(;p-- >0;)g.push({position:l.getLong(),size:l.getInt()});const m={name:o,attributes:d,dataType:u,tileWidth:f,tiles:g};return this.datasetCache[n]=m,m}}async readRootGroup(){const e=this.genome,t=this.groupCache["/"];if(t)return t;{const t=await this.readGroup("/"),i=t.chromosomes,n=t.maxZoom;n&&(this.maxZoom=Number(n));const r=t.totalCount;r&&(t.totalCount=Number(r));const s={};return i&&i.split(",").forEach((function(t){const i=e.getChromosomeName(t);s[i]=t})),this.chrAliasTable=s,this.groupCache["/"]=t,t}}async readGroup(e){const t=this.groupCache[e];if(t)return t;{await this.readHeader();const t=this.groupIndex[e];if(void 0===t)return;const i=await Mn.loadArrayBuffer(this.path,js(this.config,{range:{start:t.position,size:t.size}}));if(!i)return;const n=new Co(new DataView(i)),r={name:e};let s=n.getInt();for(;s-- >0;){const e=n.getString(),t=n.getString();r[e]=t}return this.groupCache[e]=r,r}}async readTiles(e,t){if(e.sort((function(e,t){return e.position-t.position})),0===(e=e.filter((function(e){return e.size>0}))).length)return[];const i=[];for(let n of e){const e=await Mn.loadArrayBuffer(this.path,js(this.config,{range:{start:n.position,size:n.size}}));let r;try{r=this.compressed?Ki(e).buffer:e}catch(e){console.error(e);continue}const s=new Co(new DataView(r)),o=s.getString();let a;switch(o){case"fixedStep":a=Vc(s,t);break;case"variableStep":a=qc(s,t);break;case"bed":case"bedWithName":a=Qc(s,t,o);break;default:throw"Unknown tile type: "+o}i.push(a)}return i}async readTile(e,t){let i=await Mn.loadArrayBuffer(this.path,js(this.config,{range:{start:e.position,size:e.size}}));if(this.compressed){i=Ki(i).buffer}const n=new Co(new DataView(i)),r=n.getString();switch(r){case"fixedStep":return Vc(n,t);case"variableStep":return qc(n,t);case"bed":case"bedWithName":return Qc(n,t,r);default:throw"Unknown tile type: "+r}}}function Vc(e,t){const i=e.getInt(),n=e.getInt(),r=e.getFloat(),s=[];let o=t;for(;o-- >0;){let t=i;const n=[];for(;t-- >0;)n.push(e.getFloat());s.push(n)}return{type:"fixedStep",start:n,span:r,data:s,nTracks:t,nPositions:i}}function qc(e,t){const i=e.getInt(),n=e.getFloat(),r=e.getInt(),s=[];let o=r;for(;o-- >0;)s.push(e.getInt());e.getInt();const a=[];let c=t;for(;c-- >0;){o=r;const t=[];for(;o-- >0;)t.push(e.getFloat());a.push(t)}return{type:"variableStep",tileStart:i,span:n,start:s,data:a,nTracks:t,nPositions:r}}function Qc(e,t,i){const n=e.getInt();let r=n;const s=[];for(;r-- >0;)s.push(e.getInt());r=n;const o=[];for(;r-- >0;)o.push(e.getInt());e.getInt();const a=[];let c=t;for(;c-- >0;){let t=n;const i=[];for(;t-- >0;)i.push(e.getFloat());a.push(i)}if("bedWithName"===i){r=n;const t=[];for(;r-- >0;)t.push(e.getString())}return{type:i,start:s,end:o,data:a,nTracks:t,nPositions:n}}class Uc extends Pc{#h={};searchable=!1;constructor(e,t){super(t),this.genome=t,this.reader=new Oc(e,t),this.queryable=!0}async getFeatures({chr:e,start:t,end:i,bpPerPixel:n,windowFunction:r="mean"}){return"all"===e.toLowerCase()?this.getWGValues(r,n):this._getFeatures(e,t,i,n,r)}async _getFeatures(e,t,i,n,r){const s=new uo(e,t,i),o=this.genome;if(!this.rootGroup&&(this.rootGroup=await this.reader.readRootGroup(),!this.normalizationFactor)){const e=this.rootGroup.totalCount;e&&(this.normalizationFactor=1e6/e)}s.bpPerPixel=n;const a=function(e,t,i){var n=i.getChromosome(e).bpLength;return Math.ceil(Math.log(Math.max(0,n/(700*t)))/$c)}(e,n,o);let c=this.reader.chrAliasTable[e],l=this.reader.maxZoom;void 0===c&&(c=e),void 0===l&&(l=-1);const h=a>l?"raw":r,d=await this.reader.readDataset(c,h,a);if(null==d)return[];const u=d.tileWidth,f=Math.floor(t/u),p=Math.floor(i/u),g=await this.reader.readTiles(d.tiles.slice(f,p+1),1),m=[];for(let r of g)switch(r.type){case"bed":jc(r,e,t,i,n,m);break;case"variableStep":Gc(r,e,t,i,n,m);break;case"fixedStep":Wc(r,e,t,i,n,m);break;default:throw"Unknown tile type: "+r.type}return m.sort((function(e,t){return e.start-t.start})),m}get supportsWholeGenome(){return!0}get windowFunctions(){return this.reader.windowFunctions}async getWGValues(e,t){const i=this.#h[e];if(i&&i.bpPerPixel>.8*t&&i.bpPerPixel<1.2*t)return i.values;{const i=[],n=this.genome;if(this.genome.wgChromosomeNames)for(let r of n.wgChromosomeNames){const s=n.getChromosome(r).bpLength;t=s/1e3;const o=await this._getFeatures(r,0,s,t,e);if(o)for(let e of o){const t=Object.assign({},e);t.chr="all",t.start=n.getGenomeCoordinate(e.chr,e.start),t.end=n.getGenomeCoordinate(e.chr,e.end),t._f=e,i.push(t)}}return this.#h[e]={values:i,bpPerPixel:t},i}}}function jc(e,t,i,n,r,s){const o=e.nPositions,a=e.start,c=e.end,l=e.data[0];for(let e=0;e<o;e++){const r=a[e],o=c[e];if(!(o<i)){if(r>n)break;s.push({chr:t,start:r,end:o,value:l[e]})}}}function Gc(e,t,i,n,r,s){const o=e.nPositions,a=e.start,c=e.span,l=e.data[0];for(let e=0;e<o;e++){const r=a[e],o=r+c;if(!(o<i)){if(r>n)break;s.push({chr:t,start:r,end:o,value:l[e]})}}}function Wc(e,t,i,n,r,s){const o=e.nPositions;let a=e.start;const c=e.span,l=e.data[0];for(let e=0;e<o;e++){const r=a+c;if(a>n)break;r>=i&&(Number.isNaN(l[e])||s.push({chr:t,start:a,end:r,value:l[e]})),a=r}}var $c=Math.log(2);class Kc{constructor(e,t,i,n){this.header=e,this.nameToId=t,this.idToName=i,this.sumLengths=n}static parseTree(e,t,i=!1){{const n=e.getInt(),r=e.getInt(),s=e.getInt(),o=e.getInt(),a=e.getLong(),c=e.getLong(),l={magic:n,blockSize:r,keySize:s,valSize:o,itemCount:a,reserved:c},h=new Map,d=[];let u=0;const f=n=>{n>=0&&(e.position=n);const r=e.getByte();e.getByte();const a=e.getUShort();if(1===r)for(let t=0;t<a;t++){let t,n=e.getFixedLengthString(s);if(8!==o)throw Error(`Unexpected "valSize" value in chromosome tree. Expected 8, actual value is ${o}`);{t=e.getInt();const r=e.getInt();u+=r,i&&(n=i.getChromosomeName(n)),h.set(n,t),d[t]=n}}else for(let i=0;i<a;i++){e.getFixedLengthString(s);const i=e.getLong()-t,n=e.position;f(i),e.position=n}};return f(-1),new Kc(l,h,d,u)}}}class Yc{static magic=610839776;littleEndian=!0;nodeCache=new Map;constructor(e,t,i){this.path=e,this.config=t,this.startOffset=i}async init(){const e=await this.#t(this.startOffset,48);let t=e.getInt();if(t!==Yc.magic&&(e.setPosition(0),this.littleEndian=!this.littleEndian,e.littleEndian=this.littleEndian,t=e.getInt(),t!==Yc.magic))throw Error(`Bad magic number ${t}`);const i=e.getUInt(),n=e.getLong(),r=e.getUInt(),s=e.getUInt(),o=e.getUInt(),a=e.getUInt(),c=e.getLong(),l=e.getUInt(),h=e.getUInt(),d=this.startOffset+48;return this.header={magic:t,blockSize:i,itemCount:n,startChromIx:r,startBase:s,endChromIx:o,endBase:a,endFileOffset:c,itemsPerSlot:l,reserved:h,rootNodeOffset:d},this}async#t(e,t){const i=await Mn.loadArrayBuffer(this.path,js(this.config,{range:{start:e,size:t}}));return new Co(new DataView(i),this.littleEndian)}async findLeafItemsOverlapping(e,t,i,n){const r=[],s=async o=>{const a=await this.readNode(o);for(let o of a.items)Xc(o,e,t,i,n)&&(1===a.type?r.push(o):await s(o.childOffset))};return await s(this.header.rootNodeOffset),r}async readNode(e){const t=e;if(this.nodeCache.has(t))return this.nodeCache.get(t);let i=await this.#t(e,4);const n=i.getByte(),r=1===n;i.getByte();const s=i.getUShort();let o=s*(r?32:24);i=await this.#t(e+4,o);const a=[];for(let e=0;e<s;e++){let e={isLeaf:r,startChrom:i.getInt(),startBase:i.getInt(),endChrom:i.getInt(),endBase:i.getInt(),childOffset:i.getLong()};r&&(e.dataSize=i.getLong(),e.dataOffset=e.childOffset),a.push(e)}const c={type:n,items:a};return this.nodeCache.set(t,c),c}}function Xc(e,t,i,n,r){return e?(n>e.startChrom||n===e.startChrom&&r>=e.startBase)&&(t<e.endChrom||t===e.endChrom&&i<=e.endBase):(console.log("null item for "+t+" "+i+" "+r),!1)}function Zc(e,t){return Math.min(1,.11+e/779*.89).toString()}class Jc{ixFile;ixxFile;bufferCache=new Map;constructor(e,t){this.ixFile=t,this.ixxFile=e}async search(e,t){const i=e.split(" ")[0].toLowerCase(),n=await this._getBuffer(i,t);if(!n)return;const r=n.slice(0,n.lastIndexOf("\n")).split("\n").filter((e=>!!e)),s=[];for(let e of r){const t=e.split(" ")[0];if(t.startsWith(i)&&s.push(e),t.slice(0,i.length)>i)break}if(0!==s.length){const e=new Map;for(let t of s){const[i,...n]=t.split(" ");e.set(i,n.map((e=>e.split(",")[0])))}return e}}async getIndex(e){return this.index||(this.index=await this._readIndex()),this.index}async _readIndex(e){return(await Mn.loadString(this.ixxFile)).split("\n").filter((e=>!!e)).map((e=>{const t=e.length-10,i=e.slice(0,t),n=e.slice(t);return[i,Number.parseInt(n,16)]}))}async _getBuffer(e,t){let i=0,n=65536;const r=await this.getIndex(t);for(let t=0;t<r.length;t++){const[s,o]=r[t],a=Math.min(s.length,e.length);s.slice(0,a)<e&&(i=o,n=o+65536)}const s=n-i;if(!(s<0)){if(this.bufferCache.has(i))return this.bufferCache.get(i);{const e=await Mn.loadString(this.ixFile,{range:{start:i,size:s}});return this.bufferCache.set(i,e),e}}}}class el{chrAliasTable=new Map;rpTreeCache=new Map;constructor(e,t){this.path=e.url,this.format=e.format||"bigwig",this.genome=t,this.config=e,this.bufferSize=512e3,this.loader=Xs(this.path)?new al(on(this.path).buffer):Mn;const i=e.trixURL||e.searchTrix;i&&(this._trix=new Jc(`${i}x`,i))}async preload(){const e=await Mn.loadArrayBuffer(this.path);this.loader=new al(e)}async readWGFeatures(e,t){await this.loadHeader();const i=this.chromTree.idToName.length-1,n=this.chromTree.idToName[0],r=this.chromTree.idToName[i];return this.readFeatures(n,0,r,Number.MAX_VALUE,e,t)}async readFeatures(e,t,i,n,r,s="mean"){t||(t=0),n||(n=Number.MAX_SAFE_INTEGER),await this.loadHeader();let o,a,c=await this.#d(e),l=await this.#d(i);if(void 0===c||void 0===l)return[];if("bigwig"===this.type){const e=await this.getZoomHeaders();let t=r?function(e,t){let i;for(let n=0;n<t.length;n++){const r=t[n];if(r.reductionLevel<e){i=r;break}}return i}(r,e):void 0;t&&"none"!=s?(o=t.indexOffset,a=ol):(o=this.header.fullIndexOffset,a=rl)}else o=this.header.fullIndexOffset,a=sl.call(this);const h=await this.loadRPTree(o),d=await h.findLeafItemsOverlapping(c,t,l,n);if(d&&0!==d.length){let e=Number.MAX_VALUE,i=0;for(let t of d)e=Math.min(e,t.dataOffset),i=Math.max(i,t.dataOffset+t.dataSize);const r=i-e,o=await this.loader.loadArrayBuffer(this.config.url,js(this.config,{range:{start:e,size:r}})),h=[];for(let i of d){const r=new Uint8Array(o,i.dataOffset-e,i.dataSize);let d;d=this.header.uncompressBuffSize>0?Ki(r):r,a.call(this,new DataView(d.buffer),c,t,l,n,h,this.chromTree.idToName,s,this.littleEndian)}return h.sort((function(e,t){return e.start-t.start})),h}return[]}async#d(e){if(this.chrAliasTable.has(e)&&void 0===(e=this.chrAliasTable.get(e)))return;let t=this.chromTree.nameToId.get(e);if(void 0===t&&this.genome){const i=await this.genome.getAliasRecord(e);let n;if(i){const e=Object.keys(i).filter((e=>"start"!==e&&"end"!==e)).map((e=>i[e])).filter((e=>this.chromTree.nameToId.has(e)));e.length>0&&(n=e[0],t=this.chromTree.nameToId.get(e[0]))}this.chrAliasTable.set(e,n)}return t}get searchable(){return"bigbed"===this.type}async search(e){if(this.header||await this.loadHeader(),!this.header||!this.header.extraIndexCount)return;const t=await this._searchForRegions(e);if(t){const i=await this._loadFeaturesForRange(t.offset,t.length);if(i){const t=i.filter((t=>{for(let i of Object.keys(t)){const n=t[i];if(b(n)&&n.toLowerCase()===e.toLowerCase())return!0}return!1}));return t.length>0?t.reduce(((e,t)=>e.end-e.start>t.end-t.start?e:t),i[0]):void 0}}}async _searchForRegions(e){const t=await this.#u();if(t){if(this._trix){const t=e.toLowerCase(),i=await this._trix.search(t);i&&i.has(t)&&(e=i.get(t)[0])}for(let i of t){const t=await i.search(e);if(t)return t}}}async#u(){if(void 0===this._searchTrees&&this.header.extraIndexOffsets&&this.header.extraIndexOffsets.length>0){this._searchTrees=[];for(let e of this.header.extraIndexOffsets){const t=await xo.loadBpTree(this.path,this.config,e);this._searchTrees.push(t)}}return this._searchTrees}async getZoomHeaders(){return this.zoomLevelHeaders||await this.loadHeader(),this.zoomLevelHeaders}async loadHeader(){if(this.header)return this.header;{let e,t=await this.loader.loadArrayBuffer(this.path,js(this.config,{range:{start:0,size:64}}));this.littleEndian=!0;const i=new Co(new DataView(t),this.littleEndian);let n=i.getUInt();if(2291137574===n)this.type="bigwig";else if(2273964779===n)this.type="bigbed";else{this.littleEndian=!1,i.littleEndian=!1,i.position=0;let e=i.getUInt();654085990===e?this.type="bigwig":3958540679===e&&(this.type="bigbed")}e={bwVersion:i.getUShort(),nZoomLevels:i.getUShort(),chromTreeOffset:i.getLong(),fullDataOffset:i.getLong(),fullIndexOffset:i.getLong(),fieldCount:i.getUShort(),definedFieldCount:i.getUShort(),autoSqlOffset:i.getLong(),totalSummaryOffset:i.getLong(),uncompressBuffSize:i.getInt(),extensionOffset:i.getLong()};const r=64;let s={start:r,size:e.totalSummaryOffset>0?e.totalSummaryOffset-r+40:Math.min(e.fullDataOffset,e.chromTreeOffset)-r};t=await this.loader.loadArrayBuffer(this.path,js(this.config,{range:s}));const o=new Co(new DataView(t),this.littleEndian),a=e.nZoomLevels;this.zoomLevelHeaders=[],this.firstZoomDataOffset=Number.MAX_SAFE_INTEGER;for(let e=1;e<=a;e++){const t=a-e,i=new tl(t,o);this.firstZoomDataOffset=Math.min(i.dataOffset,this.firstZoomDataOffset),this.zoomLevelHeaders[t]=i}if(e.autoSqlOffset>0){o.position=e.autoSqlOffset-r;const t=o.getString();t&&(this.autoSql=function(e){let t;const i=[];let n=!1;const r=e.trim().split(/\s*[\r\n]+\s*/g);for(let e of r)if(e=e.trim(),e.length>0){if(e.startsWith("#"))continue;if(e.startsWith("table"))t=e.split(/\s+/)[1].trim();else if(e.startsWith("("))n=!0;else if(e.startsWith(")"));else if(n){const t=e.indexOf(";");if(t>0){const n=e.substr(0,t).split(/\s+/),r=e.substr(t+1).replace(/"/g,"").trim();i.push({type:n[0],name:n[1],description:r})}}}return{table:t,fields:i}}(t))}e.totalSummaryOffset>0&&(o.position=e.totalSummaryOffset-r,this.totalSummary=new il(o));const c=Math.min(2e5,Math.max(1e4,e.fullDataOffset-e.chromTreeOffset));if(this.chromTree=await this.#f(e.chromTreeOffset,c),this.chrNames=new Set(this.chromTree.idToName),"bigbed"===this.type){const t=await this.#p(e.fullDataOffset);this.featureDensity=t/this.chromTree.sumLengths}return this.header=e,e.extensionOffset>0&&await this.loadExtendedHeader(e.extensionOffset),this.header}}async#p(e){const t=await this.loader.loadArrayBuffer(this.path,js(this.config,{range:{start:e,size:4}}));return new Co(new DataView(t),this.littleEndian).getInt()}async#f(e,t){let i=t;const n=async()=>{const t=await this.loader.loadArrayBuffer(this.path,js(this.config,{range:{start:e,size:i}})),n=new Co(new DataView(t),this.littleEndian);return Kc.parseTree(n,e,this.genome)};let r;for(;i<1e6;)try{return await n()}catch(e){r=e,i*=2}throw r}async loadExtendedHeader(e){let t=await this.loader.loadArrayBuffer(this.path,js(this.config,{range:{start:e,size:64}})),i=new Co(new DataView(t),this.littleEndian);i.getUShort();const n=i.getUShort(),r=i.getLong();if(0===n)return;let s=56*n;t=await this.loader.loadArrayBuffer(this.path,js(this.config,{range:{start:r,size:s}})),i=new Co(new DataView(t),this.littleEndian);const o=[],a=[],c=[];for(let e=0;e<n;e++){o.push(i.getUShort());const e=i.getUShort();c.push(i.getLong()),a.push(i.getInt());for(let t=0;t<e;t++)i.getUShort(),a.push(i.getUShort())}this.header.extraIndexCount=n,this.header.extraIndexOffsets=c}async loadRPTree(e){let t=this.rpTreeCache.get(e);return t||(t=new Yc(this.path,this.config,e),await t.init(),this.rpTreeCache.set(e,t),t)}async getType(){return await this.loadHeader(),this.type}async getTrackType(){return await this.loadHeader(),"bigwig"===this.type?"wig":!this.autoSql||"interact"!==this.autoSql.table&&"chromatinInteract"!==this.autoSql.table?"annotation":"interact"}async _loadFeaturesForRange(e,t){const i=await this.loader.loadArrayBuffer(this.config.url,js(this.config,{range:{start:e,size:t}})),n=new Uint8Array(i),r=this.header.uncompressBuffSize>0?Ki(n):n,s=[];return sl.call(this).call(this,new DataView(r.buffer),0,0,Number.MAX_SAFE_INTEGER,Number.MAX_SAFE_INTEGER,s,this.chromTree.idToName),s}}class tl{constructor(e,t){this.index=e,this.reductionLevel=t.getInt(),this.reserved=t.getInt(),this.dataOffset=t.getLong(),this.indexOffset=t.getLong()}}class il{constructor(e){e?(this.basesCovered=e.getLong(),this.minVal=e.getDouble(),this.maxVal=e.getDouble(),this.sumData=e.getDouble(),this.sumSquares=e.getDouble(),nl.call(this)):(this.basesCovered=0,this.minVal=0,this.maxVal=0,this.sumData=0,this.sumSquares=0,this.mean=0,this.stddev=0)}}function nl(){let e=this.basesCovered;if(e>0){this.mean=this.sumData/e,this.stddev=Math.sqrt(this.sumSquares/(e-1));let t=this.minVal<0?this.mean-2*this.stddev:0,i=this.maxVal>0?this.mean+2*this.stddev:0;this.defaultRange={min:t,max:i}}}function rl(e,t,i,n,r,s,o,a,c){const l=new Co(e,c),h=l.getInt(),d=l.getInt();let u=d,f=l.getInt();const p=l.getInt(),g=l.getInt(),m=l.getByte();l.getByte();let w=l.getUShort();if(h>=t&&h<=n){let e=0;for(;w-- >0;){let a;switch(m){case 1:u=l.getInt(),f=l.getInt(),a=l.getFloat();break;case 2:u=l.getInt(),a=l.getFloat(),f=u+g;break;case 3:a=l.getFloat(),u=d+e*p,f=u+g,e++}if(!(h<t||h===t&&f<i)){if(h>n||h===n&&u>=r)break;if(Number.isFinite(a)){const e=o[h];s.push({chr:e,start:u,end:f,value:a})}}}}}function sl(){const e=function(e,t,i,n){if("biginteract"===n||i&&("chromatinInteract"===i.table||"interact"===i.table))return function(e,t){return e.chr1=t[5],e.start1=Number.parseInt(t[6]),e.end1=Number.parseInt(t[7]),e.chr2=t[10],e.start2=Number.parseInt(t[11]),e.end2=Number.parseInt(t[12]),e.name=t[0],e.score=Number(t[1]),e.value=Number(t[2]),e.color="."===t[4]?void 0:"0"===t[4]?"rgb(0,0,0)":t[4],e};{const n=e-3;return function(r,s){if(n>0&&(r.name=s[0]),n>1&&(r.score=Number(s[1])),n>2&&(r.strand=s[2]),n>3&&(r.cdStart=parseInt(s[3])),n>4&&(r.cdEnd=parseInt(s[4])),n>5&&"."!==s[5]&&"0"!==s[5]&&"-1"!==s[5]){const e=un.createColorString(s[5]);r.color=e.startsWith("rgb")?e:void 0}if(n>8){const e=parseInt(s[6]),t=s[7].split(","),i=s[8].split(","),n=[];for(let s=0;s<e;s++){const e=r.start+parseInt(i[s]),o=e+parseInt(t[s]);n.push({start:e,end:o})}!function(e,t,i){for(let n of e){const e=n.end,r=n.start;e<t||r>i?n.utr=!0:(t>=r&&t<=e&&(n.cdStart=t),i>=r&&i<=e&&(n.cdEnd=i))}}(n,r.cdStart,r.cdEnd),r.exons=n}if(i)for(let n=e;n<t;n++)if(n<i.fields.length){const e=i.fields[n].name,t=s[n-3];r[e]=t}}}}(this.header.definedFieldCount,this.header.fieldCount,this.autoSql,this.format);return function(t,i,n,r,s,o,a,c,l){const h=new Co(t,l);for(;h.remLength()>=13;){const t=h.getInt(),c=a[t],l=h.getInt(),d=h.getInt(),u=h.getString();if(!(t<i||t===i&&d<n)){if(t>r||t===r&&l>=s)break;if(d>0){const t={chr:c,start:l,end:d};o.push(t);const i=u.split("\t");e(t,i)}}}}}function ol(e,t,i,n,r,s,o,a,c){const l=new Co(e,c);for(;l.remLength()>=32;){const e=l.getInt(),c=l.getInt(),h=l.getInt(),d=l.getInt(),u=l.getFloat(),f=l.getFloat(),p=l.getFloat();let g;switch(l.getFloat(),a){case"min":g=u;break;case"max":g=f;break;default:g=0===d?0:p/d}if(!(e<t||e===t&&h<i)){if(e>n||e===n&&c>=r)break;if(Number.isFinite(g)){const t=o[e];s.push({chr:t,start:c,end:h,value:g})}}}}class al{constructor(e){this.data=e}loadArrayBuffer(e,t){const i=t.range;return i?this.data.slice(i.start,i.start+i.size):this.data}async dataViewForRange(e,t){const i=Math.min(this.data.byteLength-e.start,e.size);return t?new Uint8Array(this.data,e.start,i):new DataView(this.data,e.start,i)}}class cl extends Pc{queryable=!0;#h={};windowFunctions=["mean","min","max","none"];constructor(e,t){super(t),this.reader=new el(e,t),this.genome=t,this.format=e.format||"bigwig"}async getFeatures({chr:e,start:t,end:i,bpPerPixel:n,windowFunction:r}){await this.reader.loadHeader();const s="bigwig"===this.reader.type;let o;return o="all"===e.toLowerCase()?s?await this.getWGValues(r,n):[]:await this.reader.readFeatures(e,t,e,i,n,r),s||za(o),o}async getHeader(){return this.reader.loadHeader()}async defaultVisibilityWindow(){return"bigwig"===this.reader.type?-1:this.reader.featureDensity?Math.floor(1e4/this.reader.featureDensity):-1}async getWGValues(e,t){const i=this.genome,n=this.#h[e];if(n&&n.bpPerPixel>.8*t&&n.bpPerPixel<1.2*t)return n.values;{const n=await this.reader.readWGFeatures(t,e);let r=[];for(let e of n){const t=e.chr,n=i.getCumulativeOffset(t);if(void 0===n)continue;const s=Object.assign({},e);s.chr="all",s.start=n+e.start,s.end=n+e.end,s._f=e,r.push(s)}return r.sort(((e,t)=>e.start-t.start)),this.#h[e]={values:r,bpPerPixel:t},r}}supportsWholeGenome(){return"bigwig"===this.reader.type}async trackType(){return this.reader.getTrackType()}get searchable(){return this.reader.searchable}async search(e){return this.reader.search(e)}}const ll=.01;function hl(e,t,i,n){let r=this.axisMin,s=this.axisMax;if(void 0===s&&this.dataRange&&(r=this.dataRange.min||0,s=this.dataRange.max),void 0===s)return;fr.fillRect(e,0,0,t,i,{fillStyle:"white"}),n&&fr.fillRect(e,t-4-2,0,4,i,{fillStyle:n});const o=void 0!==this.flipAxis&&this.flipAxis,a=.95*t-8-5,c=.95*t-5,l={font:"normal 10px Arial",textAlign:"right",fillStyle:"black",strokeStyle:"black"};fr.strokeLine(e,a,ll*i,c,ll*i,l),fr.fillText(e,d(o?r:s),a+4,ll*i+12,l);const h=.99*i;function d(e){return Number.isInteger(e)||e%1==0?e:Math.abs(e)>=10?e.toFixed():Math.abs(e)>=1?e.toFixed(1):Math.abs(e)>=.1?e.toFixed(2):e.toExponential(1)}fr.strokeLine(e,a,h,c,h,l),fr.fillText(e,d(o?s:r),a+4,h-4,l),fr.strokeLine(e,c,ll*i,c,h,l)}const dl=e=>{switch(e.type){case"gradient":return new gl(e);case"doubleGradient":case"diverging":return new ml(e);default:throw Error("Unknown color scale type: "+e)}},ul=function(e,t){return new gl({type:"doubleGradient",min:e,max:t,minColor:"rgb(46,56,183)",maxColor:"rgb(164,0,30)"})},fl=function(e,t,i){return new ml({type:"doubleGradient",min:0,mid:.25,max:.5,minColor:"rgb(46,56,183)",midColor:"white",maxColor:"rgb(164,0,30)"})};class pl{constructor(e){this.thresholds=e.thresholds,this.colors=e.colors}getColor(e){for(let t of this.thresholds)if(e<t)return this.colors[this.thresholds.indexOf(t)];return this.colors[this.colors.length-1]}}class gl{constructor(e){this.type="gradient";const t={min:void 0!==e.min?e.min:e.low,max:void 0!==e.max?e.max:e.high,minColor:e.minColor||e.lowColor,maxColor:e.maxColor||e.highColor};this.setProperties(t)}setProperties({min:e,max:t,minColor:i,maxColor:n}){this.type="gradient",this.min=e,this.max=t,this._lowColor=i,this._highColor=n,this.lowComponents=un.rgbComponents(i),this.highComponents=un.rgbComponents(n)}get minColor(){return this._lowColor}set minColor(e){this._lowColor=e,this.lowComponents=un.rgbComponents(e)}get maxColor(){return this._highColor}set maxColor(e){this._highColor=e,this.highComponents=un.rgbComponents(e)}getColor(e){if(e<=this.min)return this.minColor;if(e>=this.max)return this.maxColor;const t=(e-this.min)/(this.max-this.min);return"rgb("+Math.floor(this.lowComponents[0]+t*(this.highComponents[0]-this.lowComponents[0]))+","+Math.floor(this.lowComponents[1]+t*(this.highComponents[1]-this.lowComponents[1]))+","+Math.floor(this.lowComponents[2]+t*(this.highComponents[2]-this.lowComponents[2]))+")"}toJson(){return{type:this.type,min:this.min,max:this.max,minColor:this.minColor,maxColor:this.maxColor}}clone(){return new gl(this.toJson())}}class ml{constructor(e){this.type="diverging",this.lowGradientScale=new gl({minColor:e.minColor||e.lowColor,maxColor:e.midColor,min:void 0!==e.min?e.min:e.low,max:e.mid}),this.highGradientScale=new gl({minColor:e.midColor,maxColor:e.maxColor||e.highColor,min:e.mid,max:void 0!==e.max?e.max:e.high})}getColor(e){return e<this.mid?this.lowGradientScale.getColor(e):this.highGradientScale.getColor(e)}get min(){return this.lowGradientScale.min}set min(e){this.lowGradientScale.min=e}get max(){return this.highGradientScale.max}set max(e){this.highGradientScale.max=e}get mid(){return this.lowGradientScale.max}set mid(e){this.lowGradientScale.max=e,this.highGradientScale.min=e}get minColor(){return this.lowGradientScale.minColor}set minColor(e){this.lowGradientScale.minColor=e}get maxColor(){return this.highGradientScale.maxColor}set maxColor(e){this.highGradientScale.maxColor=e}get midColor(){return this.lowGradientScale.maxColor}set midColor(e){this.lowGradientScale.maxColor=e,this.highGradientScale.minColor=e}toJson(){return{type:this.type,min:this.min,mid:this.mid,max:this.max,minColor:this.minColor,midColor:this.midColor,maxColor:this.maxColor}}clone(){const e=this.toJson();return new ml(e)}}class wl{constructor(e){this.color=e}getColor(){return this.color}}const bl={display:"flex",flexDirection:"row",alignItems:"center",backgroundColor:"transparent"};class Fl{constructor({selected:e,label:i,onchange:n}){this.state=e,this.onchange=n,this.elem=t({style:bl});const r=t({style:{width:"14px",height:"14px",borderColor:"gray",borderWidth:"1px",borderStyle:"solid"}});if(this.svg=l("check",!0===e?"#444":"transparent"),this.svg.style.width="12px",this.svg.style.height="12px",r.appendChild(this.svg),this.elem.appendChild(r),i){const e=t({style:{marginLeft:"5px"}});e.textContent=i,this.elem.appendChild(e)}const s=e=>{e.preventDefault(),e.stopPropagation();const t=!this.state;this.selected=t,"function"==typeof this.onchange&&this.onchange(t)};this.elem.addEventListener("click",s),this.elem.addEventListener("touchend",s)}set selected(e){this.state=e;this.svg.querySelector("path").setAttributeNS(null,"fill",!0===e?"#444":"transparent")}get selected(){return this.state}onchange(e){this.onchange=e}}function vl(e,t){const i=e.getContext("2d"),n=e.width,r=(t.max-t.min)/n;for(let s=0;s<n;s++){const n=t.min+s*r,o=t.getColor(n);i.fillStyle=o,i.fillRect(s,0,1,e.height)}}class yl{static open(e,t,i){let n=e.clone();const s=document.createElement("table"),o=document.createElement("canvas");o.style.height="20px",o.style.width="100%",o.style.marginTop="10px",o.style.border="1px solid black";const a=new Cl({label:"Min value",value:n.min.toString(),onchange:e=>{n.min=Number.parseFloat(e),vl(o,n)}});s.appendChild(a.row);const c=new Cl({label:"Mid value",value:(n.mid||n.min).toString(),onchange:e=>{n.mid=Number.parseFloat(e),vl(o,n)}});s.appendChild(c.row);const l=new Cl({label:"Max value",value:n.max.toString(),onchange:e=>{n.max=Number.parseFloat(e),vl(o,n)}});s.appendChild(l.row);const h=new _l({label:"Min color",value:n.minColor,onchange:e=>{n.minColor=e,vl(o,n)}});s.appendChild(h.row);const d=new _l({label:"Mid color",value:n.midColor||n.minColor,onchange:e=>{n.midColor=e,vl(o,n)}});s.appendChild(d.row);const u=new _l({label:"Max color",value:n.maxColor,onchange:e=>{n.maxColor=e,vl(o,n)}});s.appendChild(u.row);const f=new Fl({selected:"diverging"===e.type,label:"Diverging Scale",onchange:e=>{e?(n.mid=n.min<0&&n.max>0?0:(n.min+n.max)/2,n.midColor="rgb(255,255,255)",n=new ml(n),c.value=n.mid,c.show(),d.value=n.midColor,d.show(),vl(o,n)):(n=new gl(n),c.hide(),d.hide(),vl(o,n))}});f.elem.style.marginBottom="20px","diverging"!==e.type&&(c.hide(),d.hide());const p=document.createElement("div");p.appendChild(f.elem),p.appendChild(s),p.appendChild(o);const g=new w({parent:t,content:{elem:p},okHandler:()=>{i&&i(n)}});t.appendChild(g.elem),r(g.elem),vl(o,n)}}class Al{constructor({label:e,value:t,onchange:i}){this.row=document.createElement("tr");const n=document.createElement("td");this.row.appendChild(n);const r=document.createElement("div");r.innerHTML=e,n.appendChild(r)}hide(){this.row.style.display="none"}show(){this.row.style.display="table-row"}}class Cl extends Al{constructor({label:e,value:t,onchange:i}){super({label:e,value:t,onchange:i});const n=document.createElement("td");this.row.appendChild(n),this.input=document.createElement("input"),t=t||"0",this.input.value=Fs.sanitize(t),n.appendChild(this.input),i&&this.input.addEventListener("change",(e=>i(this.input.value)))}get value(){return this.input.value}set value(e){this.input.value=e}}class _l extends Al{constructor({label:e,value:t,onchange:i}){super({label:e,value:t,onchange:i});const n=document.createElement("td");this.row.appendChild(n);const r=document.createElement("div");n.appendChild(r),r.style.width="20px",r.style.height="20px",r.style.border="1px solid black",this.colorButton=r,t=t||"white",r.style.background=t;const s=new Ts(r);s.setOptions({alpha:!1,color:t}),s.onDone=e=>{r.style.background=e.rgbString,i&&i(e.rgbString)}}set value(e){this.colorButton.style.background=e}}class xl extends Pa{static defaultColor="rgb(150, 150, 150)";static defaults={height:50,flipAxis:!1,logScale:!1,windowFunction:"mean",graphType:"bar",normalize:void 0,scaleFactor:void 0,overflowColor:"rgb(255, 32, 255)",baselineColor:"lightGray",summarize:!0,visibilityWindow:void 0};constructor(e,t){super(e,t)}init(e){super.init(e),this.type="wig",this.featureType="numeric",this.resolutionAware=!0,this._paintAxis=hl.bind(this);const t=e.format?e.format.toLowerCase():e.format;e.featureSource?(this.featureSource=e.featureSource,delete e.featureSource):this.featureSource="bigwig"===t?new cl(e,this.browser.genome):"tdf"===t?new Uc(e,this.browser.genome):Hl(e,this.browser.genome),void 0===e.max||!0===e.autoscale?this.autoscale=!0:this.dataRange={min:e.min||0,max:e.max},e.colorScale&&(this._colorScale=dl(e.colorScale)),"heatmap"!==e.graphType||e.height||(this.height=20)}async postInit(){const e=await this.getHeader();this.disposed||(e&&this.setTrackProperties(e),this._initialColor=this.color||this.constructor.defaultColor,this._initialAltColor=this.altColor||this.constructor.defaultColor)}get supportsWholeGenome(){return!this.config.indexURL&&!1!==this.config.supportsWholeGenome}get paintAxis(){return"heatmap"===this.graphType?()=>{}:this._paintAxis}get colorScale(){return this._colorScale}async getFeatures(e,t,i,n){const r=this.windowFunction,s=await this.featureSource.getFeatures({chr:e,start:t,end:i,bpPerPixel:n,visibilityWindow:this.visibilityWindow,windowFunction:r});if(this.normalize&&this.featureSource.normalizationFactor){const e=this.featureSource.normalizationFactor;for(let t of s)t.value*=e}if(this.scaleFactor){const e=this.scaleFactor;for(let t of s)t.value*=e}return!this.summarize||"mean"!==r&&"min"!==r&&"max"!==r?s:kl(s,t,n,r)}menuItemList(){const e=[];return"heatmap"===this.graphType?(e.push("<hr>"),e.push({label:"Set color scale",click:function(){yl.open(this.colorScale,this.browser.columnContainer,(e=>{this._colorScale=e,this.trackView.repaintViews()}))}})):void 0!==this.flipAxis&&(e.push("<hr>"),e.push({label:"Flip y-axis",click:function(){this.flipAxis=!this.flipAxis,this.trackView.repaintViews()}})),e.push(...this.graphTypeItems()),this.featureSource.windowFunctions&&e.push(...this.wigSummarizationItems()),e.push(...this.numericDataMenuItems()),e}wigSummarizationItems(){const e=this.featureSource.windowFunctions,t=[];t.push("<hr/>"),t.push("<div>Windowing function</div>");for(const i of e){function n(){this.windowFunction=i,this.trackView.updateViews()}t.push({element:Ta(i,this.windowFunction===i),click:n})}return t}graphTypeItems(){const e=["bar","line","points","heatmap"],t=[];t.push("<hr/>"),t.push("<div>Graph type</div>");for(const i of e){function n(){this.graphType=i,this.trackView.repaintViews()}t.push({element:Ta(i,this.graphType===i),click:n})}return t}async getHeader(){return"function"==typeof this.featureSource.getHeader&&(this.header=await this.featureSource.getHeader()),this.header}getScaleFactor(e,t,i,n){const r=!0===n?e<0?-Math.log10(Math.abs(e)+1):Math.log10(Math.abs(e)+1):e;return i/((!0===n?Math.log10(Math.abs(t)+1):t)-r)}computeYPixelValue(e,t){return(this.flipAxis?e-this.dataRange.min:this.dataRange.max-e)*t}computeYPixelValueInLogScale(e,t){let i=this.dataRange.max,n=this.dataRange.min;return n=n<0?-Math.log10(Math.abs(n)+1):Math.log10(Math.abs(n)+1),i=i<0?-Math.log10(Math.abs(i)+1):Math.log10(Math.abs(i)+1),e=e<0?-Math.log10(Math.abs(e)+1):Math.log10(e+1),(this.flipAxis?e-n:i-e)*t}draw(e){const t=e.features,i=e.context,n=e.bpPerPixel,r=e.bpStart,s=e.pixelWidth,o=e.pixelHeight-1,a=r+s*n+1,c=this.getScaleFactor(this.dataRange.min,this.dataRange.max,o,this.logScale),l=e=>this.logScale?this.computeYPixelValueInLogScale(e,c):this.computeYPixelValue(e,c);if(t&&t.length>0&&(void 0===this.dataRange.min&&(this.dataRange.min=0),this.dataRange.max>this.dataRange.min)){let s,c=-1;const h=l(0);for(let d of t){if(d.end<r)continue;if(d.start>a)break;const t=(d.start-r)/n;if(Number.isNaN(t))continue;let u=l(d.value);const f=(d.end-r)/n-t,p=e.alpha?un.addAlpha(this.getColorForFeature(d),e.alpha):this.getColorForFeature(d);if("line"===this.graphType)void 0!==s&&fr.strokeLine(i,c,s,t,u,{fillStyle:p,strokeStyle:p}),fr.strokeLine(i,t,u,t+f,u,{fillStyle:p,strokeStyle:p});else if("points"===this.graphType){const e=this.config.pointSize||3,n=t+f/2;fr.fillCircle(i,n,u,e/2,{fillStyle:p,strokeStyle:p}),d.value>this.dataRange.max?fr.fillCircle(i,n,e/2,e/2,3,{fillStyle:this.overflowColor}):d.value<this.dataRange.min&&fr.fillCircle(i,n,o-e/2,e/2,3,{fillStyle:this.overflowColor})}else if("heatmap"===this.graphType){this._colorScale||(this._colorScale=this.dataRange.min<0&&this.dataRange.max>0?fl(this.dataRange.min,0,this.dataRange.max):ul(this.dataRange.min,this.dataRange.max));const e=this._colorScale.getColor(d.value);fr.fillRect(i,t,0,f,o,{fillStyle:e})}else{const e=Math.min(o,u-h);fr.fillRect(i,t,h,f,e,{fillStyle:p}),d.value>this.dataRange.max?fr.fillRect(i,t,0,f,3,{fillStyle:this.overflowColor}):d.value<this.dataRange.min&&fr.fillRect(i,t,o-2,f,3,{fillStyle:this.overflowColor})}c=t+f,s=u}if(this.dataRange.min<0){let t=this.dataRange.max,n=this.dataRange.min;n=!0===this.logScale?n<0?-Math.log10(Math.abs(n)+1):Math.log10(Math.abs(n)+1):n,t=!0===this.logScale?t<0?-Math.log10(Math.abs(t)+1):Math.log10(Math.abs(t)+1):t;const r=t/(t-n),s=this.flipAxis?(1-r)*o:r*o;fr.strokeLine(i,0,s,e.pixelWidth,s,{strokeStyle:this.baselineColor})}}if(this.config.hasOwnProperty("guideLines"))for(let t of this.config.guideLines)if(t.hasOwnProperty("color")&&t.hasOwnProperty("y")&&t.hasOwnProperty("dotted")){let i=l(t.y),n={strokeStyle:t.color,strokeWidth:2};t.dotted?fr.dashedLine(e.context,0,i,e.pixelWidth,i,5,n):fr.strokeLine(e.context,0,i,e.pixelWidth,i,n)}}popupData(e,t){if(void 0===t&&(t=this.clickedFeatures(e)),t&&t.length>0){const i=e.genomicLocation,n=[];t.sort((function(e,t){return Math.abs((e.start+e.end)/2-i)-Math.abs((t.start+t.end)/2-i)}));const r=t.length>10?t.slice(0,10):t;r.sort((function(e,t){return e.start-t.start}));for(let e of r)if(e){n.length>0&&n.push("<hr/>");let t=e.end-e.start==1?F(Math.floor(e.start)+1):F(Math.floor(e.start)+1)+"-"+F(Math.floor(e.end));n.push({name:"Position:",value:t}),n.push({name:"Value: ",value:F(e.value.toFixed(4))})}return r.length<t.length&&n.push("<hr/>..."),n}return[]}getColorForFeature(e){let t=e.value<0&&this.altColor?this.altColor:this.color||xl.defaultColor;return"function"==typeof t?t(e.value):t}getState(){const e=super.getState();return this._colorScale&&(e.colorScale=this._colorScale.toJson()),e}dispose(){this.trackView=void 0}}function kl(e,t,i,n="mean"){if(i<=1||!e||0===e.length||"none"===n)return e;const r=e[0].chr,s=i,o=[],a=e=>{const i=t+e.bin*s,a=i+s;let c;switch(n){case"mean":c=e.sumData/e.count;break;case"max":c=e.max;break;case"min":c=e.min;break;default:throw Error(`Unknown window function: ${n}`)}const l=`${n} of ${e.count} values`;o.push({chr:r,start:i,end:a,value:c,description:l})};let c;for(let i of e){let e=Math.floor((i.start-t)/s);const n=Math.floor((i.end-t)/s);if(c&&e===c.bin&&(c.add(i),e++),!c||n>c.bin){if(c&&a(c),n>e){const e=t+n*s;o.push({chr:r,start:i.start,end:e,value:i.value})}c=new Il(n,i)}}c&&a(c);const l=[];let h=o[0];for(let e of o)h.value===e.value&&e.start<=h.end?h.end=e.end:(l.push(h),h=e);return l.push(h),l}class Il{constructor(e,t){this.bin=e,this.sumData=t.value,this.count=1,this.min=t.value,this.max=t.value}add(e){this.sumData+=e.value,this.max=Math.max(e.value,this.max),this.min=Math.min(e.value,this.min),this.count++}get mean(){return this.sumData/this.count}}class Sl extends Pc{constructor(e,t){super(t),this.config=e||{},this.genome=t,this.sourceType=void 0===e.sourceType?"file":e.sourceType,this.maxWGCount=e.maxWGCount||1e4,this.windowFunctions=["mean","min","max","none"];const i=new Set(["bigwig","bw","bigbed","bb","biginteract","biggenepred","bignarrowpeak","tdf"]);if(this.queryable=e.indexURL||!0===e.queryable,e.reader)this.reader=e.reader,this.queryable=!1!==e.queryable;else{if("ga4gh"===e.sourceType)throw Error("Unsupported source type 'ga4gh'");"eqtl"!==e.type&&"qtl"!==e.type||"gtex-ws"!==e.sourceType?"htsget"===e.sourceType?(this.reader=new Lc(e,t),this.queryable=!0):"ucscservice"===e.sourceType?(this.reader=new Mc(e.source),this.queryable=!0):"custom"===e.sourceType?(this.reader=new Nc(e.source),this.queryable=!1!==e.source.queryable):"service"===e.sourceType?(this.reader=new Sc(e,t),this.queryable=!0):(this.reader=new Sc(e,t),void 0!==e.queryable?this.queryable=e.queryable:(i.has(e.format)||this.reader.indexed)&&(this.queryable=!0)):(this.reader=new Rc(e),this.queryable=!0)}this.searchable=!1!==e.searchable}async defaultVisibilityWindow(){if(this.reader&&"function"==typeof this.reader.defaultVisibilityWindow)return this.reader.defaultVisibilityWindow()}async trackType(){const e=await this.getHeader();return e?e.type:void 0}async getHeader(){if(!this.header)if(this.reader&&"function"==typeof this.reader.readHeader){const e=await this.reader.readHeader();e?(this.header=e,e.format&&(this.config.format=e.format)):this.header={}}else this.header={};return this.header}async getFeatures({chr:e,start:t,end:i,bpPerPixel:n,visibilityWindow:r,windowFunction:s}){const o="all"===e.toLowerCase();if(t=t||0,i=i||Number.MAX_SAFE_INTEGER,(o&&!this.wgFeatures&&this.supportsWholeGenome()||this.config.disableCache||!this.featureCache||!this.featureCache.containsRange(new uo(e,t,i)))&&await this.loadFeatures(e,t,i,r),o){if(!this.wgFeatures)if(this.supportsWholeGenome())if("wig"===this.config.type){const e=await La(this.featureCache.getAllFeatures(),this.genome,1e6);this.wgFeatures=kl(e,0,n,s)}else this.wgFeatures=await La(this.featureCache.getAllFeatures(),this.genome,this.maxWGCount);else this.wgFeatures=[];return this.wgFeatures}return this.featureCache.queryFeatures(e,t,i)}async findFeatures(e){return this.featureCache?this.featureCache.findFeatures(e):[]}supportsWholeGenome(){return!this.queryable}getAllFeatures(){return this.queryable||!this.featureCache?[]:this.featureCache.getAllFeatures()}async loadFeatures(e,t,i,n){await this.getHeader();const r=this.reader;let s=t,o=i,a=e;if(!this.chrAliasManager&&this.reader&&this.reader.sequenceNames&&(this.chrAliasManager=new Hc(this.reader.sequenceNames,this.genome)),this.chrAliasManager&&(a=await this.chrAliasManager.getAliasName(e)),(!n||n<=0)&&!1!==this.config.expandQuery){const t=this.genome?this.genome.getChromosome(e):void 0;s=0,o=Math.max(t?t.bpLength:Number.MAX_SAFE_INTEGER,i)}else if(n>i-t&&!1!==this.config.expandQuery){let e=Math.min(4.1*(i-t),n);this.config.minQuerySize&&e<this.config.minQuerySize&&(e=this.config.minQuerySize),s=Math.max(0,(t+i-e)/2),o=s+e}let c=await r.readFeatures(a,s,o);void 0===this.queryable&&(this.queryable=r.indexed);const l=this.queryable?new uo(e,s,o):void 0;if(c){if("wig"!==this.config.format&&"junctions"!==this.config.type){Ha(c,this.config.maxRows||Number.MAX_SAFE_INTEGER)}this.featureCache=new On(c,this.genome,l),this.searchable&&this.addFeaturesToDB(c,this.config)}else this.featureCache=new On([],l)}addFeaturesToDB(e,t){this.featureMap||(this.featureMap=new Map);const i=t.searchableFields||["name","transcript_id","gene_id","gene_name","id"];for(let t of e)for(let e of i){let i;if(t.hasOwnProperty(e)?i=t[e]:"function"==typeof t.getAttributeValue&&(i=t.getAttributeValue(e)),i){if(i=i.replaceAll(" ","+").toUpperCase(),this.featureMap.has(i)){const e=this.featureMap.get(i);if(t.end-t.start<e.end-e.start)continue}this.featureMap.set(i,t)}}}search(e){if(this.featureMap)return this.featureMap.get(e.toUpperCase())}}class El extends Pc{constructor(e,t){super(t),this.config=e,this.genome=t,this.queryable=!1,this.searchable=!1!==e.searchable,this.updateFeatures(e.features)}updateFeatures(e){Ha(e=function(e,t){if(t)for(let i of e)i.chr=t.getChromosomeName(i.chr);return e}(e,this.genome)),this.config.mappings&&function(e,t){let i=Object.keys(t);e.forEach((function(e){i.forEach((function(i){e[i]=e[t[i]]}))}))}(e,this.config.mappings),this.featureCache=new On(e,this.genome),(this.searchable||this.config.searchableFields)&&this.addFeaturesToDB(e,this.config)}async getFeatures({chr:e,start:t,end:i,bpPerPixel:n,visibilityWindow:r}){const s=this.genome,o=s?s.getChromosomeName(e):e;return"all"===o.toLowerCase()?La(this.featureCache.getAllFeatures(),this.genome,this.maxWGCount):this.featureCache.queryFeatures(o,t,i)}getAllFeatures(){return this.featureCache.getAllFeatures()}supportsWholeGenome(){return!0}addFeaturesToDB(e,t){this.featureMap||(this.featureMap=new Map);const i=t.searchableFields||["name"];for(let t of e)for(let e of i){let i;if("function"==typeof t.getAttributeValue&&(i=t.getAttributeValue(e)),i||(i=t[e]),i){i=i.replaceAll(" ","+");const e=this.featureMap.get(i.toUpperCase());if(e&&e.end-e.start>t.end-t.start)continue;this.featureMap.set(i.toUpperCase(),t)}}}search(e){if(this.featureMap)return this.featureMap.get(e.toUpperCase())}}class Nl{constructor({chr:e,locus:t,accession:i,aliases:n,features:r,sequence:s}){this.chr=e,this.locus=t,this.accession=i,this.aliases=n,this.features=r,this.sequence=s,this.bpLength=s.length}toJSON(){return{gbkURL:this.url}}getSequenceRecord(e){return{chr:this.chr,bpLength:this.bpLength}}get chromosomeNames(){return[this.chr]}getFirstChromosomeName(){return this.chr}get id(){return this.accession}get name(){return this.locus}get initialLocus(){return this.chr}get description(){return this.locus}get infoURL(){return this.url}showWholeGenomeView(){return!1}getHomeChromosomeName(){return this.chr}getChromosomeName(e){return e}getChromosomeDisplayName(e){return this.chr}getChromosome(e){if(e===this.chr)return{name:this.chr,bpLength:this.bpLength}}async loadChromosome(e){return this.getChromosome(e)}async getAliasRecord(e){}getCytobands(e){return[]}getChromosomes(){return[this.getChromosome(this.chr)]}get wgChromosomeNames(){}getGenomeCoordinate(e,t){if(e===this.chr)return t}getChromosomeCoordinate(e){return{chr:this.chr,position:e}}getCumulativeOffset(e){return 0}getGenomeLength(){return this.bpLength}async getSequence(e,t,i){return e===this.chr?this.sequence.substring(t,i):void 0}getSequenceInterval(e,t,i){return e===this.chr?new fo(this.chr,0,this.sequence.length,this.sequence):void 0}}const Ml=/\s+/,Rl=new Map;async function Bl(e){let t=Rl.get(e);if(!t){t=function(e){if(!e)return null;const t=wc(e);let i=t.nextLine();const n=i.split(/\s+/);if("LOCUS"!==n[0].toUpperCase())throw Error("Expected `LOCUS` line. Found: "+i);const r=n[1].trim();let s,o;do{if(i=t.nextLine(),i.startsWith("ACCESSION")){const e=i.split(Ml);if(e.length<2)throw Error("Genbank file missing ACCESSION number.");s=e[1].trim()}else if(i.startsWith("ALIASES")){const e=i.split(Ml);e.length>1&&(o=e[1].split(","))}}while(i&&!i.startsWith("FEATURES"));const a=s||r,c=function(e,t){const i=[];let n,r,s,o=0;for(;;)if(r=t.nextLine(),""!==r){if(!r||r.startsWith("ORIGIN"))break;if(r.length<6)o<10&&console("Unexpected line in genbank file (skipping): "+r),o++;else if(" "!==r.charAt(5)){let t=r.substring(5,21).trim();s={chr:e,type:t,attributes:{},getAttributeValue:function(e){return this.attributes[e]}},n=r.substring(21),"source"!==t.toLowerCase()&&i.push(s)}else{let t=r.substring(21).trim();if(t.length>0)if(47===t.charCodeAt(0)){if(47===n.charCodeAt(0)){let e=n.split("=",2);if(e.length>1){let t=e[0].length>1?e[0].substring(1):"",i=Tl(e[1]);s.attributes[t]=i}}else{const t=n.includes("complement")?"-":"+";s.strand=t;let i=n.replace("join","").replace("order","").replace("complement","").replace("(","").replace(")","");if(i.includes("..")){i=i.replace("<","").replace(">","");const n=Dl(i,e,t),r=n[0];s.start=r.start;const o=n[n.length-1];s.end=o.end,n.length>1&&(s.exons=n)}else s.start=parseInt(i)-1,s.end=s.start+1}n=t}else n+=t}}return i}(a,t),l=function(e){let t,i="";for(;(t=e.nextLine())&&!t.startsWith("//");){t=t.trim();const e=t.split(/\s+/);for(let t=1;t<e.length;t++)i+=e[t]}return i}(t);return new Nl({chr:a,locus:r,accession:s,aliases:o,features:c,sequence:l})}(await Mn.loadString(e,{})),t.url=e,Rl.set(e,t)}return t}function Dl(e,t,i){const n=e.split(","),r=[];e.includes("complement");for(const e of n){const n=e.split("..");let s=0;try{s=parseInt(n[0])-1}catch(e){console.error(e)}let o=s+1;n.length>1&&(o=parseInt(n[1])),r.push({chr:t,start:s,end:o,strand:i})}return r.sort((function(e,t){return e.start-t.start})),r}function Tl(e){return e.startsWith('"')&&e.endsWith('"')&&(e=e.substring(1,e.length-2)),e}class zl extends Pc{constructor(e,t){super(t),this.config=e,this.searchable=!0}async getFeatures({chr:e,start:t,end:i,bpPerPixel:n,visibilityWindow:r}){if(!this.featureSource){const e=await Bl(this.config.url);this.featureSource=new El({genome:this.config.genome,features:e.features,searchableFields:["gene","db_xref","locus_tag","transcript_id"]})}return this.featureSource.getFeatures({chr:e,start:t,end:i})}supportsWholeGenome(){return!1}search(e){return this.featureSource.search(e)}}const Ll=new Set(["bigwig","bw","bigbed","bb","biginteract","biggenepred","bignarrowpeak"]);function Hl(e,t){const i=e.format?e.format.toLowerCase():void 0;return e.features?new El(e,t):Ll.has(i)?new cl(e,t):"tdf"===i?new Uc(e,t):"gbk"===i?new zl(e,t):new Sl(e,t)}function Pl(e){return(3-e.readingFrame)%3}function Ol(e){return e.cdStart||e.start}function Vl(e){return e.cdEnd||e.end}const ql=.25;function Ql(e,t,i){let n=(e.start-t)/i,r=(e.end-t)/i,s=r-n;return s<3&&(s=3,n-=1.5),{px:n,px1:r,pw:s}}function Ul(e,t,i,n,r,s){try{r.save(),r.fillStyle=this.color,r.strokeStyle=this.color;const n=this.getColorForFeature(e);let o,a;r.fillStyle=n,r.strokeStyle=n,"SQUISHED"===this.displayMode&&void 0!==e.row?(o=this.featureHeight/2,a=this.margin+this.squishedRowHeight*e.row):"EXPANDED"===this.displayMode&&void 0!==e.row?(o=this.featureHeight,a=this.margin+this.expandedRowHeight*e.row):(o=this.featureHeight,a=this.margin);const c=s.pixelWidth,l=a+o/2,h=o/2,d=l-h/2,u=e.exons?e.exons.length:0,f=Ql(e,t,i),p=this.arrowSpacing,g="+"===e.strand?1:"-"===e.strand?-1:0;if(0===u){const e=Math.max(0,f.px),t=Math.min(c,f.px1),i=t-e;if(r.fillRect(e,a,i,o),0!==g){r.fillStyle="white",r.strokeStyle="white";for(let i=e+p/2;i<t;i+=p)fr.strokeLine(r,i-2*g,l-2,i,l),fr.strokeLine(r,i-2*g,l+2,i,l);r.fillStyle=n,r.strokeStyle=n}}else{fr.strokeLine(r,f.px+1,l,f.px1-1,l);const u=Math.max(0,f.px)+p/2,m=Math.min(c,f.px1);for(let e=u;e<m;e+=p)fr.strokeLine(r,e-2*g,l-2,e,l),fr.strokeLine(r,e-2*g,l+2,e,l);for(let u=0;u<e.exons.length;u++){const f=e.exons[u];let m,w=Math.round((f.start-t)/i),b=Math.round((f.end-t)/i),F=Math.max(1,b-w);if(!(w+F<0)){if(w>c)break;if(f.utr)r.fillRect(w,d,F,h);else{if(f.cdStart&&(m=Math.round((f.cdStart-t)/i),r.fillRect(w,d,m-w,h),F-=m-w,w=m),f.cdEnd&&(m=Math.round((f.cdEnd-t)/i),r.fillRect(m,d,b-m,h),F-=b-m,b=m),F=Math.max(F,1),r.fillRect(w,a,F,o),void 0!==f.readingFrame&&s.bpPerPixel<ql&&s.sequenceInterval){const i=u>0&&void 0!==e.exons[u-1].readingFrame?e.exons[u-1]:void 0,n=u<e.exons.length-1&&void 0!==e.exons[u+1].readingFrame?e.exons[u+1]:void 0;jl.call(this,r,e.strand,i,f,n,t,s.bpPerPixel,a,o,s.sequenceInterval)}if(F>p+5&&0!==g&&s.bpPerPixel>ql){r.fillStyle="white",r.strokeStyle="white";for(let e=w+p/2;e<b;e+=p)fr.strokeLine(r,e-2*g,l-2,e,l),fr.strokeLine(r,e-2*g,l+2,e,l);r.fillStyle=n,r.strokeStyle=n}}}}}s.drawLabel&&"SQUISHED"!==this.displayMode&&Gl.call(this,r,e,f.px,f.px1,a,s.referenceFrame,s)}finally{r.restore()}}function jl(e,t,i,n,r,s,o,a,c,l){const h=["rgb(124,124,204)","rgb(12, 12, 120)"];e.save();const d=(t,i,n,r,d,u)=>{const f=Math.round((i-s)/o),p=Math.round((n-s)/o)-f;let g;if(void 0===r){if(l.hasSequence(i,n)){const e=l.getSequence(i,n);if(e&&3===e.length){const i="+"===t?e:co(e.split("").reverse().join(""));g=ch[i]}}}else g=r;e.fillStyle="M"===r||"M"===g&&0===u?"#83f902":"STOP"===g?"#ff2101":h[d],e.fillRect(f,a,p,c),g&&(e.save(),((t,i,n,r,s)=>{"STOP"===s&&(s="*");const o=e.measureText(s).width;fr.fillText(e,s,n+(i-o)/2,r-4,{fillStyle:"#ffffff"})})(0,p,f,a+c,g),e.restore());const m=n-i;return m>0&&m<3?{start:i,end:n}:void 0},u=Pl(n);let f,p,g,m,w,b=Ol(n),F=Vl(n),v=1;if("+"===t){for(u>0&&(b+=u),v=1,w=0,f=b;f<F;w++,f+=3)m=v%2,p=Math.min(F,f+3),g=d(t,f,p,void 0,v%2,w),++v;if(u>0||g){const e=u>0?Wl.call(this,t,u,b-u,b,g,i,n,r,l):Wl.call(this,t,void 0,void 0,void 0,g,i,n,r,l);if(e){const{left:i,rite:n}=e;i&&d(t,b-u,b,i.aminoAcidLetter,0,void 0),n&&d(t,g.start,g.end,n.aminoAcidLetter,m,void 0)}}}else{for(u>0&&(F-=u),v=1,w=0,w=0,p=F;p>b;w++,p-=3)m=v%2,f=Math.max(b,p-3),g=d(t,f,p,void 0,v%2,w),++v;if(u>0||g){const e=u>0?Wl.call(this,t,u,F,F+u,g,i,n,r,l):Wl.call(this,t,void 0,void 0,void 0,g,i,n,r,l);if(e){const{left:i,rite:n}=e;n&&d(t,F,F+u,n.aminoAcidLetter,0,void 0),i&&d(t,g.start,g.end,i.aminoAcidLetter,m,void 0)}}}e.restore()}function Gl(e,t,i,n,r,s,o){try{e.save();let s=t.name;if(void 0===s&&t.gene&&(s=t.gene.name),void 0===s&&(s=t.id||t.ID),!s||"."===s)return;let a=o.pixelXOffset||0;const c=Math.max(i,-a);let l,h=(c+Math.min(n,-a+o.viewportWidth))/2;"COLLAPSED"===this.displayMode&&"SLANT"===this.labelDisplayMode&&(l={rotate:{angle:45}});const d=function(e,t){return t?e+20:e+25}(r,l);let u=this.getColorForFeature(t),f=this.browser.qtlSelections.hasPhenotype(t.name);const p={textAlign:"SLANT"===this.labelDisplayMode?void 0:"center",fillStyle:u,strokeStyle:u},g=e.measureText(s),m=h-g.width/2,w=h+g.width/2,b=o.rowLastLabelX[t.row]||-Number.MAX_SAFE_INTEGER;(o.labelAllFeatures||m>b||f)&&(o.rowLastLabelX[t.row]=w,"y"===o.axis?(e.save(),fr.labelTransformWithContext(e,h),fr.fillText(e,s,h,d,p,l),e.restore()):(e.clearRect(h-g.width/2-1,d-g.actualBoundingBoxAscent-1,g.width+2,g.actualBoundingBoxAscent+g.actualBoundingBoxDescent+2),fr.fillText(e,s,h,d,p,l)))}finally{e.restore()}}function Wl(e,t,i,n,r,s,o,a,c){let l,h,d="",u="",f="";const p={left:void 0,rite:void 0};if("+"===e){if(t){if(u=c.getSequence(i,n),!u)return;if([l,h]=[Vl(s)-(3-t),Vl(s)],d=c.getSequence(l,h),!d)return;f=d+u,p.left={triplet:f,aminoAcidLetter:ch[f]}}if(r){if(d=c.getSequence(r.start,r.end),!d)return;const e=Pl(a),t=Ol(a);if(u=c.getSequence(t,t+e),!u)return;f=d+u,p.rite={triplet:f,aminoAcidLetter:ch[f]}}}else{if(t){if(d=c.getSequence(i,n),void 0===d)return;if([l,h]=[Ol(a),Ol(a)+(3-t)],u=c.getSequence(l,h),void 0===u)return;f=d+u,f=co(f.split("").reverse().join("")),p.rite={triplet:f,aminoAcidLetter:ch[f]}}if(r){if(u=c.getSequence(r.start,r.end),void 0===u)return;const e=Pl(s),t=Vl(s);if(d=c.getSequence(t-e,t),void 0===d)return;f=d+u,f=co(f.split("").reverse().join("")),p.left={triplet:f,aminoAcidLetter:ch[f]}}}return p}const $l=new Set(["nonsense","missense","stop-loss","frameshift","cds-indel"]),Kl=new Set(["coding-synon"]),Yl=new Set(["splice-3","splice-5"]),Xl=new Set(["untranslated-5","untranslated-3"]);function Zl(e,t,i,n,r){var s,o,a,c,l,h,d=Ql(e,t,i),u=this.margin,f=this.snpColors.length;switch(s="squished"===this.displayMode?this.squishedRowHeight:this.expandedRowHeight,this.colorBy){case"function":c=e.func,h=c.split(","),l=h.map((function(e){return $l.has(e)||Yl.has(e)?f-1:Kl.has(e)?f-2:Xl.has(e)?f-3:0})),o=l.reduce((function(e,t){return Math.max(e,t)}));break;case"class":o="deletion"===(a=e.class)?f-1:"mnp"===a?f-2:"microsatellite"===a||"named"===a?f-3:0}r.fillStyle=this.snpColors[o],r.fillRect(d.px,u,d.pw,s)}function Jl(e,t,i,n,r){const s="EXPANDED"===this.displayMode?this.expandedRowHeight:this.squishedRowHeight;let o=this.margin;"COLLAPSED"!==this.displayMode&&void 0!==e.row&&(o+=e.row*s);const a=o+.5*s,c=a-.5*s,l=a+.5*s,h=Math.round((e.junction_left-t)/i),d=Math.round((e.junction_right-t)/i);r.beginPath(),r.moveTo(h,a),r.bezierCurveTo(h,c,d,c,d,a),r.lineWidth=1+Math.log(e.num_junction_reads)/Math.log(2),r.strokeStyle="blue",r.stroke();const u=e.spanning_frag_coords;for(let e=0;e<u.length;e++){const n=u[e],s=Math.round((n.left-t)/i),o=Math.round((n.right-t)/i);r.beginPath(),r.moveTo(s,a),r.bezierCurveTo(s,l,o,l,o,a),r.lineWidth=1,r.strokeStyle="purple",r.stroke()}}class eh extends Pa{static defaultColor="rgb(0,0,150)";static defaults={type:"annotation",maxRows:1e3,displayMode:"EXPANDED",margin:10,featureHeight:14,useScore:!1};constructor(e,t){super(e,t)}init(e){super.init(e),this.labelDisplayMode=e.labelDisplayMode,e._featureSource?(this.featureSource=e._featureSource,delete e._featureSource):"blat"!==e.type&&(this.featureSource=e.featureSource?e.featureSource:Hl(e,this.browser.genome)),"FusionJuncSpan"===e.type?(this.render=e.render||Jl,this.squishedRowHeight=e.squishedRowHeight||50,this.expandedRowHeight=e.expandedRowHeight||50,this.height=e.height||this.margin+2*this.expandedRowHeight):"snp"===e.type?(this.render=e.render||Zl,this.snpColors=["rgb(0,0,0)","rgb(0,0,255)","rgb(0,255,0)","rgb(255,0,0)"],this.colorBy="function",this.expandedRowHeight=e.expandedRowHeight||10,this.squishedRowHeight=e.squishedRowHeight||5,this.height=e.height||30):(this.render=e.render||Ul,this.arrowSpacing=30,function(e){e.browser.on&&(e.browser.on("trackdragend",t),e.browser.on("trackremoved",i));function t(){e.trackView&&"SQUISHED"!==e.displayMode&&e.trackView.repaintViews()}function i(n){e.browser.un&&e===n&&(e.browser.un("trackdragend",t),e.browser.un("trackremoved",i))}}(this),this.squishedRowHeight=e.squishedRowHeight||15,this.expandedRowHeight=e.expandedRowHeight||30,this.height=e.height||this.margin+2*this.expandedRowHeight,e.colorBy&&(e.colorBy.field&&(e.colorTable=e.colorBy.pallete||e.colorBy.palette,e.colorBy=e.colorBy.field),this.colorBy=e.colorBy,e.colorTable?this.colorTable=new Yn(e.colorTable):this.colorTable=new Kn("Set1")))}async postInit(){if("function"!=typeof this.featureSource.getHeader||(this.header=await this.featureSource.getHeader(),!this.disposed))return this.header&&this.setTrackProperties(this.header),void 0===this.visibilityWindow&&"function"==typeof this.featureSource.defaultVisibilityWindow&&(this.visibilityWindow=await this.featureSource.defaultVisibilityWindow()),this._initialColor=this.color||this.constructor.defaultColor,this._initialAltColor=this.altColor||this.constructor.defaultColor,this}get searchable(){return this.featureSource.searchable}async search(e){return this.featureSource&&this.featureSource.searchable?this.featureSource.search(e):void 0}get supportsWholeGenome(){return void 0!==this.config.supportsWholeGenome?this.config.supportsWholeGenome:this.featureSource&&"function"==typeof this.featureSource.supportsWholeGenome?this.featureSource.supportsWholeGenome():!(void 0!==this.visibilityWindow||!1!==this.config.indexed&&this.config.indexURL)||void 0}async getFeatures(e,t,i,n){const r=this.visibilityWindow;return this.featureSource.getFeatures({chr:e,start:t,end:i,bpPerPixel:n,visibilityWindow:r})}computePixelHeight(e){if("COLLAPSED"===this.displayMode)return this.margin+this.expandedRowHeight;{let t=0;if(e&&"function"==typeof e.forEach)for(let i of e)i.row&&i.row>t&&(t=i.row);return this.margin+(t+1)*("SQUISHED"===this.displayMode?this.squishedRowHeight:this.expandedRowHeight)}}draw(e){const{features:t,context:i,bpPerPixel:n,bpStart:r,bpEnd:s,pixelWidth:o,pixelHeight:a,referenceFrame:c}=e;if(n<ql&&(e.sequenceInterval=this.browser.genome.getSequenceInterval(c.chr,r,s)),this.isMergedTrack||fr.fillRect(i,0,e.pixelTop,o,a,{fillStyle:"rgb(255, 255, 255)"}),t){const c=[];e.rowLastX=[],e.rowLastLabelX=[];for(let i of t)if((!this._filter||this._filter(i))&&i.start>r&&i.end<s){const t="COLLAPSED"===this.displayMode?0:i.row||0;c[t]?c[t]++:c[t]=1,e.rowLastX[t]=-Number.MAX_SAFE_INTEGER,e.rowLastLabelX[t]=-Number.MAX_SAFE_INTEGER}const l=o/Math.max(1,Math.max(...c.filter((e=>!isNaN(e)))));let h=[];const d=[];for(let o of t){if(this._filter&&!this._filter(o))continue;if(o.end<r)continue;if(o.start>s)break;"COLLAPSED"===this.displayMode&&this.browser.qtlSelections.hasPhenotype(o.name)&&d.push(o);const t="COLLAPSED"===this.displayMode?0:o.row;e.drawLabel=e.labelAllFeatures||l>10;const c=Math.ceil((o.end-r)/n),u=h[t];if(!u||c>u){this.render.call(this,o,r,n,a,i,e);const s=Math.floor((o.start-r)/n);u&&s-u<=0&&(i.globalAlpha=.5,fr.strokeLine(i,s,0,s,a,{strokeStyle:"rgb(255, 255, 255)"}),i.globalAlpha=1),h[t]=c}}for(let t of d)e.drawLabel=!0,this.render.call(this,t,r,n,a,i,e)}else console.log("No feature list")}clickedFeatures(e){const t=e.y-this.margin,i=super.clickedFeatures(e);let n;switch(this.displayMode){case"SQUISHED":n=Math.floor(t/this.squishedRowHeight);break;case"EXPANDED":n=Math.floor(t/this.expandedRowHeight);break;default:n=void 0}return i.filter((function(e){return void 0===n||void 0===e.row||n===e.row}))}popupData(e,t){void 0===t&&(t=this.clickedFeatures(e));const i=e.genomicLocation,n=[];for(let e of t){const t=e._f||e,r="function"==typeof t.popupData?t.popupData(i):this.extractPopupData(t);if(r){n.length>0&&n.push("<hr/><hr/>");const s=this.infoURL||this.config.infoURL;for(let t of r)if(n.push(t),s&&t.name&&"name"===t.name.toLowerCase()&&t.value&&b(t.value)&&!t.value.startsWith("<")){const i=s.replace("$$",e.name);t.value=`<a target=_blank href=${i}>${t.value}</a>`}const o="gff"===this.config.format||"gff3"===this.config.format||"gtf"===this.config.format;if(t.exons&&t.exons.length>1)for(let e=0;e<t.exons.length;e++){const r=t.exons[e];if(i>=r.start&&i<=r.end){const i=o?r.number:"-"===t.strand?t.exons.length-e:e+1;i&&(n.push("<hr/>"),n.push({name:"Exon Number",value:i}));break}}}}return n}menuItemList(){const e=[];if(this.render===Zl){e.push("<hr/>");for(const i of["function","class"]){function n(){this.colorBy=i,this.trackView.repaintViews()}e.push({element:Ta(`Color by ${i}`,i===this.colorBy),click:n})}}e.push("<hr/>");const t={COLLAPSED:"Collapse",SQUISHED:"Squish",EXPANDED:"Expand"};for(const r of["COLLAPSED","SQUISHED","EXPANDED"]){function s(){this.displayMode=r,this.config.displayMode=r,this.trackView.checkContentHeight(),this.trackView.repaintViews()}e.push({element:Ta(t[r],r===this.displayMode),click:s})}return e}contextMenuItemList(e){const t=this.clickedFeatures(e);if(void 0===t||0===t.length)return;t.length>1&&t.sort(((e,t)=>t.end-t.start-(e.end-e.start)));const i=t[0];if(i.end-i.start<=1e6){const e=[{label:"View feature sequence",click:async()=>{let e=await this.browser.genome.getSequence(i.chr,i.start,i.end);e?"-"===i.strand&&(e=lo(e)):e="Unknown sequence",this.browser.alert.present(e)}}];return to()&&void 0!==navigator.clipboard&&e.push({label:"Copy feature sequence",click:async()=>{let e=await this.browser.genome.getSequence(i.chr,i.start,i.end);e?"-"===i.strand&&(e=lo(e)):e="Unknown sequence";try{await navigator.clipboard.writeText(e)}catch(e){console.error(e),this.browser.alert.present(`error copying sequence to clipboard ${e}`)}}}),e.push("<hr/>"),e}}description(){if(Zl===this.render){let e="<html>"+this.name+"<hr/>";return e+="<em>Color By Function:</em><br>",e+='<span style="color:red">Red</span>: Coding-Non-Synonymous, Splice Site<br>',e+='<span style="color:green">Green</span>: Coding-Synonymous<br>',e+='<span style="color:blue">Blue</span>: Untranslated<br>',e+='<span style="color:black">Black</span>: Intron, Locus, Unknown<br><br>',e+="<em>Color By Class:</em><br>",e+='<span style="color:red">Red</span>: Deletion<br>',e+='<span style="color:green">Green</span>: MNP<br>',e+='<span style="color:blue">Blue</span>: Microsatellite, Named<br>',e+='<span style="color:black">Black</span>: Indel, Insertion, SNP',e+="</html>",e}return super.description()}getColorForFeature(e){const t=e._f||e;let i;if(e.name&&this.browser.qtlSelections.hasPhenotype(e.name))i=this.browser.qtlSelections.colorForGene(e.name);else if(this.altColor&&"-"===t.strand)i="function"==typeof this.altColor?this.altColor(t):this.altColor;else if(this.color)i="function"==typeof this.color?this.color(t):this.color;else if(this.colorBy){const e=t.getAttributeValue?t.getAttributeValue(this.colorBy):t[this.colorBy];i=this.colorTable.getColor(e)}else t.color&&(i=t.color);if(i||(i=eh.defaultColor),t.alpha&&1!==t.alpha)i=un.addAlpha(i,t.alpha);else if(this.useScore&&t.score&&!Number.isNaN(t.score)){const e=function(e,t,i){const n=(t-e)/9,r=Math.floor((i-e)/n);return Math.min(1,.2+.8*r/9)}(this.config.min?this.config.min:this.viewLimitMin?this.viewLimitMin:0,this.config.max?this.config.max:this.viewLimitMax?this.viewLimitMax:1e3,t.score);t.alpha=e,i=un.addAlpha(i,e)}return i}dispose(){this.trackView=void 0}}class th{constructor(e){if(this.config=e,this.browser=e.browser,this.columnFormat=e.columnFormat,this.tableRowSelectionList=[],this.tableDOM=t({class:"igv-roi-table"}),e.width){let[t]=e.width.split("px");t=parseInt(t,10),this.tableDOM.style.width=`${Math.min(t,1600)}px`}e.parent.appendChild(this.tableDOM),this.headerDOM=e,this.tableColumnTitles=this.tableDOM,this.tableRowContainer=this.tableDOM,this.footerDOM=e.gotoButtonHandler}set headerDOM({browser:e,parent:i,headerTitle:n,dismissHandler:r}){const s=t();this.tableDOM.appendChild(s);const o=t();s.appendChild(o),o.innerHTML=n;const a=t();s.appendChild(a),a.appendChild(l("times")),this.boundDismissHandler=function(e){e.stopPropagation(),r()}.bind(this),a.addEventListener("click",this.boundDismissHandler);const{y:c}=e.root.getBoundingClientRect(),{y:h}=i.getBoundingClientRect(),d=-(h-c);p(this.tableDOM,s,{minX:0,minY:d}),this.tableDOM.style.display="none",this._headerDOM=s}set tableColumnTitles(e){const i=t({class:"igv-roi-table-column-titles"});e.appendChild(i);for(const{label:e,width:n}of this.columnFormat){const r=t();i.appendChild(r),r.style.width=n,r.innerText=e}this._tableColumnTitlesDOM=i}get tableColumnTitles(){return this._tableColumnTitlesDOM}set tableRowContainer(e){const i=t({class:"igv-roi-table-row-container"});e.appendChild(i),this._tableRowContainerDOM=i}get tableRowContainer(){return this._tableRowContainerDOM}set footerDOM(e){const i=t();this.tableDOM.appendChild(i);const n=t({class:"igv-roi-table-button"});i.appendChild(n),n.id="igv-roi-table-view-button",n.textContent="Go To",n.style.pointerEvents="none",this._footerDOM=i,this.gotoButton=n,this.boundGotoButtonHandler=e.bind(this),this.gotoButton.addEventListener("click",this.boundGotoButtonHandler)}tableRowDOMHelper(e){e.addEventListener("mousedown",(t=>{t.stopPropagation(),e.classList.toggle("igv-roi-table-row-selected"),e.classList.contains("igv-roi-table-row-selected")?e.classList.remove("igv-roi-table-row-hover"):e.classList.add("igv-roi-table-row-hover"),this.setTableRowSelectionState(e.classList.contains("igv-roi-table-row-selected"))})),e.addEventListener("mouseover",(t=>{e.classList.contains("igv-roi-table-row-selected")?e.classList.remove("igv-roi-table-row-hover"):e.classList.add("igv-roi-table-row-hover")})),e.addEventListener("mouseout",(t=>{e.classList.remove("igv-roi-table-row-hover")}))}clearTable(){const e=this.tableRowContainer.querySelectorAll(".igv-roi-table-row");for(let t of e)t.remove()}setTableRowSelectionState(e){e?this.tableRowSelectionList.push(1):this.tableRowSelectionList.pop(),this.gotoButton.style.pointerEvents=this.tableRowSelectionList.length>0?"auto":"none"}present(){this.tableDOM.style.left="0px";const{y:e}=this.browser.root.getBoundingClientRect(),{y:t}=this.config.parent.getBoundingClientRect();this.tableDOM.style.top=e-t+"px",this.tableDOM.style.display="flex"}dismiss(){this.tableDOM.style.display="none"}isVisible(){return"none"!==this.tableDOM.style.display}dispose(){this.tableDOM.innerHTML="",this.tableDOM.remove();for(const e of Object.keys(this))this[e]=void 0;document.removeEventListener("click",this.boundDismissHandler)}}class ih extends th{constructor(e){super(Object.assign({width:"1024px"},e)),this.descriptionDOM=e}set descriptionDOM(e){if(e.description){let i;i=t({class:"igv-roi-table-description"}),this.tableDOM.insertBefore(i,this.tableColumnTitles),i.style.height="auto",i.innerHTML="BLAT result for query sequence:",i=t({class:"igv-roi-table-description"}),this.tableDOM.insertBefore(i,this.tableColumnTitles),i.style.height="auto",i.style.maxHeight="128px",i.innerHTML=e.description,i=t({class:"igv-roi-table-goto-explainer"}),this.tableDOM.insertBefore(i,this.tableColumnTitles),i.innerHTML="Select one or more rows and click Go To to view the regions"}}tableRowDOM(e){const i=t({class:"igv-roi-table-row"}),n=e.map((e=>isFinite(e)?F(e):e));for(let e=0;e<n.length;e++){const r=t();i.appendChild(r);const s=this.columnFormat[e];r.style.width=s.width||"fit-content",r.innerText=n[e]}return this.tableRowDOMHelper(i),i}renderTable(e){if(Array.from(this.tableRowContainer.querySelectorAll(".igv-roi-table-row")).forEach((e=>e.remove())),e.length>0)for(let t of e){const e=this.tableRowDOM(t);this.tableRowContainer.appendChild(e)}}static getColumnFormatConfiguration(){return[{label:"chr",width:"7%"},{label:"start",width:"12%"},{label:"end",width:"12%"},{label:"strand",width:"5%"},{label:"score",width:"5%"},{label:"match",width:"5%"},{label:"mis-match",width:"7%"},{label:"rep. match",width:"7%"},{label:"N's",width:"3%"},{label:"Q gap count",width:"9%"},{label:"Q gap bases",width:"9%"},{label:"T gap count",width:"9%"},{label:"T gap bases",width:"9%"}]}static gotoButtonHandler(e){e.stopPropagation();const t=this.tableDOM.querySelectorAll(".igv-roi-table-row-selected"),i=[];for(const e of t){const t=[];e.querySelectorAll("div").forEach((e=>t.push(e.innerText)));const[n,r,s]=t;i.push(`${n}:${r}-${s}`)}for(const e of this.tableDOM.querySelectorAll(".igv-roi-table-row"))e.classList.remove("igv-roi-table-row-selected");this.setTableRowSelectionState(!1),this.browser.search(i.join(" "))}}async function nh({url:e,userSeq:t,db:i}){if(e=e||"https://igv.org/services/blatUCSC.php",!i)throw Error("Blat database is not defined");const n=await async function(e="",t,i){const n=new URLSearchParams;n.append("userSeq",t),n.append("db",i);const r=await fetch(e,{method:"post",body:n});return r.json()}(e,t,i);n.fields;return n.blat.map(da)}const rh=25e3;class sh extends eh{constructor(e,t){super(e,t),this.name||(this.name="Blat Results"),this.sequence=e.sequence,this.table=void 0,e.features&&(this._features=e.features,this.featureSource=new El({features:e.features},this.browser.genome),delete e.features)}async postInit(){if(!this.featureSource){const e=this.browser.genome.id,t=this.browser.config.blatServerURL,i=await nh({url:t,userSeq:this.sequence,db:e});this._features=i,this.featureSource=new El({features:i},this.browser.genome)}this._initialColor=this.color||this.constructor.defaultColor,this._initialAltColor=this.altColor||this.constructor.defaultColor}openTableView(){if(void 0===this.table){const e=this._features.map((e=>[e.chr,e.start+1,e.end,e.strand,e.score,e.matches,e.misMatches,e.repMatches,e.nCount,e.qNumInsert,e.qBaseInsert,e.tNumInsert,e.tBaseInsert])),t={browser:this.browser,parent:this.browser.columnContainer,headerTitle:this.config.title,description:this.sequence,dismissHandler:()=>{this.table.dismiss(),this.table.dispose(),this.table=void 0},columnFormat:ih.getColumnFormatConfiguration(),gotoButtonHandler:ih.gotoButtonHandler};this.table=new ih(t),this.table.renderTable(e)}this.table.present()}menuItemList(){const e=super.menuItemList();return e.push("<hr/>"),e.push({label:"Open table view",click:function(){this.openTableView()}}),e}dispose(){super.dispose(),this.table&&this.table.popover.parentElement.removeChild(this.table.popover)}}async function oh({sequence:e,browser:t,name:i,title:n}){if(e.length>rh)t.alert.present(`Sequence size exceeds maximum allowed length (${e.length} > 25000)`);else try{const r=t.genome.id,s=t.config.blatServerURL||"https://igv.org/services/blatUCSC.php",o={type:"blat",name:i||"blat results",title:n||"blat results",sequence:e,altColor:"rgb(176, 176, 236)",color:"rgb(236, 176, 176)",searchable:!1,features:await nh({url:s,userSeq:e,db:r})};(await t.loadTrack(o)).openTableView()}catch(e){t.alert.present(`Error performing blat search: ${e}`)}}const ah=Number.MIN_SAFE_INTEGER,ch={TTT:"F",TTC:"F",TTA:"L",TTG:"L",CTT:"L",CTC:"L",CTA:"L",CTG:"L",ATT:"I",ATC:"I",ATA:"I",ATG:"M",GTT:"V",GTC:"V",GTA:"V",GTG:"V",TCT:"S",TCC:"S",TCA:"S",TCG:"S",CCT:"P",CCC:"P",CCA:"P",CCG:"P",ACT:"T",ACC:"T",ACA:"T",ACG:"T",GCT:"A",GCC:"A",GCA:"A",GCG:"A",TAT:"Y",TAC:"Y",TAA:"STOP",TAG:"STOP",CAT:"H",CAC:"H",CAA:"Q",CAG:"Q",AAT:"N",AAC:"N",AAA:"K",AAG:"K",GAT:"D",GAC:"D",GAA:"E",GAG:"E",TGT:"C",TGC:"C",TGA:"STOP",TGG:"W",CGT:"R",CGC:"R",CGA:"R",CGG:"R",AGT:"S",AGC:"S",AGA:"R",AGG:"R",GGT:"G",GGC:"G",GGA:"G",GGG:"G"},lh={},hh=["A","G","C","T","Y","R","W","S","K","M","D","V","H","B","N","X"],dh=["T","C","G","A","R","Y","W","S","M","K","H","B","D","V","N","X"];for(let Zv=0;Zv<hh.length;Zv++)lh[hh[Zv]]=dh[Zv],lh[hh[Zv].toLowerCase()]=dh[Zv].toLowerCase();const uh=115;class fh{constructor(e,t){this.config=e,this.browser=t,this.type="sequence",this.removable=!0===e.removable,this.name=e.name,this.id=e.id,this.sequenceType=e.sequenceType||"dna",this.disableButtons=!1,this.order=e.order||ah,this.ignoreTrackMenu=!1,this.reversed=!0===e.reversed,this.frameTranslate=!0===e.frameTranslate,this.height=this.frameTranslate?uh:25,e.url&&(e.fastaURL=e.url),e.fastaURL||(this.id=e.id||"sequence")}menuItemList(){return[{name:this.reversed?"Forward":"Reverse",click:()=>{this.reversed=!this.reversed,this.trackView.repaintViews()}},{name:this.frameTranslate?"Close Translation":"Three-frame Translate",click:()=>{if(this.frameTranslate=!this.frameTranslate,this.frameTranslate){for(let e of this.trackView.viewports)e.setContentHeight(uh);this.trackView.setTrackHeight(uh)}else{for(let e of this.trackView.viewports)e.setContentHeight(25);this.trackView.setTrackHeight(25)}this.trackView.repaintViews()}}]}contextMenuItemList(e){const t=e.viewport;if(t.referenceFrame.bpPerPixel<=1){const e=t.getWidth()*t.referenceFrame.bpPerPixel,i=t.referenceFrame.chr,n=Math.floor(t.referenceFrame.start),r=Math.ceil(n+e),s=[{label:this.reversed?"View visible sequence (reversed)...":"View visible sequence...",click:async()=>{let e=await this.browser.genome.getSequence(i,n,r);e?this.reversed&&(e=lo(e)):e="Unknown sequence",this.browser.alert.present(e)}}];return to()&&s.push({label:"Copy visible sequence",click:async()=>{let e=await this.browser.genome.getSequence(i,n,r);e?this.reversed&&(e=lo(e)):e="Unknown sequence";try{await navigator.clipboard.writeText(e)}catch(e){console.error(e),this.browser.alert.present(`error copying sequence to clipboard ${e}`)}}}),s.push({label:"BLAT read sequence",click:async()=>{let e=await this.browser.genome.getSequence(i,n,r);if(e){this.reversed&&(e=lo(e));const t=`blat: ${i}:${n+1}-${r}`,s=`blat: ${i}:${n+1}-${r}`;oh({sequence:e,browser:this.browser,name:t,title:s})}}}),s.push("<hr/>"),s}}translateSequence(e){const t=[[],[],[]];for(let i of[0,1,2]){let n=i;for(;e.length-n>=3;){let r=e.slice(n,n+3);this.reversed&&(r=r.split("").reverse().join(""));const s=ch[r.toUpperCase()]||"";t[i].push({codons:r,aminoA:s}),n+=3}}return t}async getSequenceSource(){return this.config.fastaURL?(this.fasta||(this.fasta=new ph(this.config,this.browser.genome),await this.fasta.init()),this.fasta):this.browser.genome}async getFeatures(e,t,i,n){if(t=Math.floor(t),i=Math.floor(i),n&&n>10)return null;{const n=await this.getSequenceSource();return{bpStart:t,sequence:await n.getSequence(e,t,i)}}}draw(e){const t=e.context;if(e.features){let i=e.features.sequence;if(!i)return;this.reversed&&(i=i.split("").map((function(e){return lh[e]})).join(""));const n=e.features.bpStart,r=1+e.bpStart+e.pixelWidth*e.bpPerPixel;for(let s=Math.floor(e.bpStart);s<=r;s++){const r=Math.floor(s-n);if(r>=0&&r<i.length){const n=(s-e.bpStart)/e.bpPerPixel,o=1/e.bpPerPixel,a=i[r],c=this.fillColor(a.toUpperCase());if(e.bpPerPixel>.1)fr.fillRect(t,n,5,o,10,{fillStyle:c});else{const i=n+.5*(o-t.measureText(a).width);"y"===e.axis?(t.save(),fr.labelTransformWithContext(t,i),fr.strokeText(t,a,i,15,{strokeStyle:c}),t.restore()):fr.strokeText(t,a,i,15,{strokeStyle:c})}}}if(this.frameTranslate){let r=25;const s=this.translateSequence(i);for(let i=0;i<s.length;i++){const o=s[i];for(let s=0;s<o.length;s++){let a=0==s%2?"rgb(160,160,160)":"rgb(224,224,224)";const c=o[s],l=n+i+3*s-e.bpStart,h=Math.floor(l/e.bpPerPixel),d=Math.floor((l+3)/e.bpPerPixel),u=Math.round((h+d)/2);if(d<0)continue;if(h>e.pixelWidth)break;let f=c.aminoA;c.aminoA.indexOf("STOP")>-1?(a="rgb(255, 0, 0)",f="STOP"):"M"===c.aminoA&&(a="rgb(0, 153, 0)",f="START"),fr.fillRect(t,h,r,d-h,25,{fillStyle:a}),e.bpPerPixel<=.1&&fr.strokeText(t,f,u-t.measureText(f).width/2,r+15)}r+=30}}}}get supportsWholeGenome(){return!1}computePixelHeight(e){return this.height=this.frameTranslate?uh:25,this.height}fillColor(e){return this.color?this.color:"dna"===this.sequenceType?this.browser.nucleotideColors[e]||"gray":"rgb(0, 0, 150)"}getState(){const e={type:"sequence"};return this.order!==ah&&(e.order=this.order),this.reversed&&(e.revealed=!0),e}}class ph{constructor(e,t){this.config=e,this.genome=t}async init(){this.fasta=await Ro(this.config),this.chrNameMap=new Map;for(let e of this.fasta.chromosomeNames)this.chrNameMap.set(this.genome.getChromosomeName(e),e)}async getSequence(e,t,i){const n=this.chrNameMap.has(e)?this.chrNameMap.get(e):e;return this.fasta.getSequence(n,t,i)}}class gh{constructor(e,t,i,n){this.guid=o(),this.trackView=e,this.referenceFrame=i,this.browser=e.browser,this.viewportElement=document.createElement("div"),this.viewportElement.className="igv-viewport",t.appendChild(this.viewportElement),e.track.height&&this.setHeight(e.track.height),e.track instanceof fh&&(this.alert=new Ps(this.viewportElement)),this.contentTop=0,this.contentHeight=this.viewportElement.clientHeight,this.setWidth(n),this.initializationHelper()}initializationHelper(){}showMessage(e){this.messageDiv||(this.messageDiv=document.createElement("div"),this.messageDiv.className="igv-viewport-message",this.viewportElement.appendChild(this.messageDiv)),this.messageDiv.textContent=e,this.messageDiv.style.display="inline-block"}hideMessage(){this.messageDiv&&(this.messageDiv.style.display="none")}setTrackLabel(e){}startSpinner(){}stopSpinner(){}checkZoomIn(){return!0}shift(){}setTop(e){this.contentTop=e}async loadFeatures(){}clearCache(){}repaint(){}draw(e,t,i){console.log("Viewport - draw(drawConfiguration, features, roiFeatures)")}checkContentHeight(e){const t=this.trackView.track;if(e=e||this.cachedFeatures,"FILL"===t.displayMode)this.setContentHeight(this.viewportElement.clientHeight);else if("function"==typeof t.computePixelHeight&&e&&e.length>0){const i=t.computePixelHeight(e);i!==this.contentHeight&&this.setContentHeight(i)}}getContentHeight(){return this.contentHeight}setContentHeight(e){this.contentHeight=e}isLoading(){return!1}saveSVG(){}isVisible(){return this.viewportElement.clientWidth>0}setWidth(e){this.viewportElement.style.width=`${e}px`}getWidth(){return this.viewportElement.clientWidth}setHeight(e){this.viewportElement.style.height=`${e}px`}getContentTop(){return this.contentTop}containsPosition(e,t){console.log("Viewport - containsPosition(chr, position)")}addMouseHandlers(){}dispose(){this.viewportElement.remove();for(const e in this)this.hasOwnProperty(e)&&(this[e]=void 0)}}
|
|
14
14
|
/*!!
|
|
15
15
|
* Canvas 2 Svg v1.0.19
|
|
16
16
|
* A low level canvas to SVG converter. Uses a mock canvas context to build an SVG document.
|
|
@@ -31,6 +31,6 @@ function e(e){const t=document.createElement("div");return t.innerHTML=e,t.first
|
|
|
31
31
|
* Copyright 2017-2021 Andreas Borgen (https://github.com/Sphinxxxx), Adam Brooks (https://github.com/dissimulate)
|
|
32
32
|
* Released under the ISC license.
|
|
33
33
|
*/var vf=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},yf=function(){function e(e,t){for(var i=0;i<t.length;i++){var n=t[i];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(t,i,n){return i&&e(t.prototype,i),n&&e(t,n),t}}(),Af=function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var i=[],n=!0,r=!1,s=void 0;try{for(var o,a=e[Symbol.iterator]();!(n=(o=a.next()).done)&&(i.push(o.value),!t||i.length!==t);n=!0);}catch(e){r=!0,s=e}finally{try{!n&&a.return&&a.return()}finally{if(r)throw s}}return i}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")};String.prototype.startsWith=String.prototype.startsWith||function(e){return 0===this.indexOf(e)},String.prototype.padStart=String.prototype.padStart||function(e,t){for(var i=this;i.length<e;)i=t+i;return i};var Cf={cb:"0f8ff",tqw:"aebd7",q:"-ffff",qmrn:"7fffd4",zr:"0ffff",bg:"5f5dc",bsq:"e4c4",bck:"---",nch:"ebcd",b:"--ff",bvt:"8a2be2",brwn:"a52a2a",brw:"deb887",ctb:"5f9ea0",hrt:"7fff-",chcT:"d2691e",cr:"7f50",rnw:"6495ed",crns:"8dc",crms:"dc143c",cn:"-ffff",Db:"--8b",Dcn:"-8b8b",Dgnr:"b8860b",Dgr:"a9a9a9",Dgrn:"-64-",Dkhk:"bdb76b",Dmgn:"8b-8b",Dvgr:"556b2f",Drng:"8c-",Drch:"9932cc",Dr:"8b--",Dsmn:"e9967a",Dsgr:"8fbc8f",DsTb:"483d8b",DsTg:"2f4f4f",Dtrq:"-ced1",Dvt:"94-d3",ppnk:"1493",pskb:"-bfff",mgr:"696969",grb:"1e90ff",rbrc:"b22222",rwht:"af0",stg:"228b22",chs:"-ff",gnsb:"dcdcdc",st:"8f8ff",g:"d7-",gnr:"daa520",gr:"808080",grn:"-8-0",grnw:"adff2f",hnw:"0fff0",htpn:"69b4",nnr:"cd5c5c",ng:"4b-82",vr:"0",khk:"0e68c",vnr:"e6e6fa",nrb:"0f5",wngr:"7cfc-",mnch:"acd",Lb:"add8e6",Lcr:"08080",Lcn:"e0ffff",Lgnr:"afad2",Lgr:"d3d3d3",Lgrn:"90ee90",Lpnk:"b6c1",Lsmn:"a07a",Lsgr:"20b2aa",Lskb:"87cefa",LsTg:"778899",Lstb:"b0c4de",Lw:"e0",m:"-ff-",mgrn:"32cd32",nn:"af0e6",mgnt:"-ff",mrn:"8--0",mqm:"66cdaa",mmb:"--cd",mmrc:"ba55d3",mmpr:"9370db",msg:"3cb371",mmsT:"7b68ee","":"-fa9a",mtr:"48d1cc",mmvt:"c71585",mnLb:"191970",ntc:"5fffa",mstr:"e4e1",mccs:"e4b5",vjw:"dead",nv:"--80",c:"df5e6",v:"808-0",vrb:"6b8e23",rng:"a5-",rngr:"45-",rch:"da70d6",pgnr:"eee8aa",pgrn:"98fb98",ptrq:"afeeee",pvtr:"db7093",ppwh:"efd5",pchp:"dab9",pr:"cd853f",pnk:"c0cb",pm:"dda0dd",pwrb:"b0e0e6",prp:"8-080",cc:"663399",r:"--",sbr:"bc8f8f",rb:"4169e1",sbrw:"8b4513",smn:"a8072",nbr:"4a460",sgrn:"2e8b57",ssh:"5ee",snn:"a0522d",svr:"c0c0c0",skb:"87ceeb",sTb:"6a5acd",sTgr:"708090",snw:"afa",n:"-ff7f",stb:"4682b4",tn:"d2b48c",t:"-8080",thst:"d8bfd8",tmT:"6347",trqs:"40e0d0",vt:"ee82ee",whT:"5deb3",wht:"",hts:"5f5f5",w:"-",wgrn:"9acd32"};function _f(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;return(t>0?e.toFixed(t).replace(/0+$/,"").replace(/\.$/,""):e.toString())||"0"}var xf=function(){function e(t,i,n,r){vf(this,e);var s=this;if(void 0===t);else if(Array.isArray(t))this.rgba=t;else if(void 0===n){var o=t&&""+t;o&&function(t){if(t.startsWith("hsl")){var i=t.match(/([\-\d\.e]+)/g).map(Number),n=Af(i,4),r=n[0],o=n[1],a=n[2],c=n[3];void 0===c&&(c=1),r/=360,o/=100,a/=100,s.hsla=[r,o,a,c]}else if(t.startsWith("rgb")){var l=t.match(/([\-\d\.e]+)/g).map(Number),h=Af(l,4),d=h[0],u=h[1],f=h[2],p=h[3];void 0===p&&(p=1),s.rgba=[d,u,f,p]}else t.startsWith("#")?s.rgba=e.hexToRgb(t):s.rgba=e.nameToRgb(t)||e.hexToRgb(t)}(o.toLowerCase())}else this.rgba=[t,i,n,void 0===r?1:r]}return yf(e,[{key:"printRGB",value:function(e){var t=(e?this.rgba:this.rgba.slice(0,3)).map((function(e,t){return _f(e,3===t?3:0)}));return e?"rgba("+t+")":"rgb("+t+")"}},{key:"printHSL",value:function(e){var t=[360,100,100,1],i=["","%","%",""],n=(e?this.hsla:this.hsla.slice(0,3)).map((function(e,n){return _f(e*t[n],3===n?3:1)+i[n]}));return e?"hsla("+n+")":"hsl("+n+")"}},{key:"printHex",value:function(e){var t=this.hex;return e?t:t.substring(0,7)}},{key:"rgba",get:function(){if(this._rgba)return this._rgba;if(!this._hsla)throw new Error("No color is set");return this._rgba=e.hslToRgb(this._hsla)},set:function(e){3===e.length&&(e[3]=1),this._rgba=e,this._hsla=null}},{key:"rgbString",get:function(){return this.printRGB()}},{key:"rgbaString",get:function(){return this.printRGB(!0)}},{key:"hsla",get:function(){if(this._hsla)return this._hsla;if(!this._rgba)throw new Error("No color is set");return this._hsla=e.rgbToHsl(this._rgba)},set:function(e){3===e.length&&(e[3]=1),this._hsla=e,this._rgba=null}},{key:"hslString",get:function(){return this.printHSL()}},{key:"hslaString",get:function(){return this.printHSL(!0)}},{key:"hex",get:function(){return"#"+this.rgba.map((function(e,t){return t<3?e.toString(16):Math.round(255*e).toString(16)})).map((function(e){return e.padStart(2,"0")})).join("")},set:function(t){this.rgba=e.hexToRgb(t)}}],[{key:"hexToRgb",value:function(e){var t=(e.startsWith("#")?e.slice(1):e).replace(/^(\w{3})$/,"$1F").replace(/^(\w)(\w)(\w)(\w)$/,"$1$1$2$2$3$3$4$4").replace(/^(\w{6})$/,"$1FF");if(!t.match(/^([0-9a-fA-F]{8})$/))throw new Error("Unknown hex color; "+e);var i=t.match(/^(\w\w)(\w\w)(\w\w)(\w\w)$/).slice(1).map((function(e){return parseInt(e,16)}));return i[3]=i[3]/255,i}},{key:"nameToRgb",value:function(t){var i=t.toLowerCase().replace("at","T").replace(/[aeiouyldf]/g,"").replace("ght","L").replace("rk","D").slice(-5,4),n=Cf[i];return void 0===n?n:e.hexToRgb(n.replace(/\-/g,"00").padStart(6,"f"))}},{key:"rgbToHsl",value:function(e){var t=Af(e,4),i=t[0],n=t[1],r=t[2],s=t[3];i/=255,n/=255,r/=255;var o=Math.max(i,n,r),a=Math.min(i,n,r),c=void 0,l=void 0,h=(o+a)/2;if(o===a)c=l=0;else{var d=o-a;switch(l=h>.5?d/(2-o-a):d/(o+a),o){case i:c=(n-r)/d+(n<r?6:0);break;case n:c=(r-i)/d+2;break;case r:c=(i-n)/d+4}c/=6}return[c,l,h,s]}},{key:"hslToRgb",value:function(e){var t=Af(e,4),i=t[0],n=t[1],r=t[2],s=t[3],o=void 0,a=void 0,c=void 0;if(0===n)o=a=c=r;else{var l=function(e,t,i){return i<0&&(i+=1),i>1&&(i-=1),i<1/6?e+6*(t-e)*i:i<.5?t:i<2/3?e+(t-e)*(2/3-i)*6:e},h=r<.5?r*(1+n):r+n-r*n,d=2*r-h;o=l(d,h,i+1/3),a=l(d,h,i),c=l(d,h,i-1/3)}var u=[255*o,255*a,255*c].map(Math.round);return u[3]=s,u}}]),e}(),kf=function(){function e(){vf(this,e),this._events=[]}return yf(e,[{key:"add",value:function(e,t,i){e.addEventListener(t,i,!1),this._events.push({target:e,type:t,handler:i})}},{key:"remove",value:function(t,i,n){this._events=this._events.filter((function(r){var s=!0;return t&&t!==r.target&&(s=!1),i&&i!==r.type&&(s=!1),n&&n!==r.handler&&(s=!1),s&&e._doRemove(r.target,r.type,r.handler),!s}))}},{key:"destroy",value:function(){this._events.forEach((function(t){return e._doRemove(t.target,t.type,t.handler)})),this._events=[]}}],[{key:"_doRemove",value:function(e,t,i){e.removeEventListener(t,i,!1)}}]),e}();function If(e,t,i){var n=!1;function r(e,t,i){return Math.max(t,Math.min(e,i))}function s(e,s,o){if(o&&(n=!0),n){e.preventDefault();var a=t.getBoundingClientRect(),c=a.width,l=a.height,h=s.clientX,d=s.clientY,u=r(h-a.left,0,c),f=r(d-a.top,0,l);i(u/c,f/l)}}function o(e,t){1===(void 0===e.buttons?e.which:e.buttons)?s(e,e,t):n=!1}function a(e,t){1===e.touches.length?s(e,e.touches[0],t):n=!1}e.add(t,"mousedown",(function(e){o(e,!0)})),e.add(t,"touchstart",(function(e){a(e,!0)})),e.add(window,"mousemove",o),e.add(t,"touchmove",a),e.add(window,"mouseup",(function(e){n=!1})),e.add(t,"touchend",(function(e){n=!1})),e.add(t,"touchcancel",(function(e){n=!1}))}var Sf="keydown",Ef="mousedown",Nf="focusin";function Mf(e,t){return(t||document).querySelector(e)}function Rf(e){e.preventDefault(),e.stopPropagation()}function Bf(e,t,i,n,r){e.add(t,Sf,(function(e){i.indexOf(e.key)>=0&&(r&&Rf(e),n(e))}))}var Df=function(){function e(t){vf(this,e),this.settings={popup:"right",layout:"default",alpha:!0,editor:!0,editorFormat:"hex",cancelButton:!1,defaultColor:"#0cf"},this._events=new kf,this.onChange=null,this.onDone=null,this.onOpen=null,this.onClose=null,this.setOptions(t)}return yf(e,[{key:"setOptions",value:function(e){var t=this;if(e){var i=this.settings;if(e instanceof HTMLElement)i.parent=e;else{i.parent&&e.parent&&i.parent!==e.parent&&(this._events.remove(i.parent),this._popupInited=!1),function(e,t,i){for(var n in e)i&&i.indexOf(n)>=0||(t[n]=e[n])}(e,i),e.onChange&&(this.onChange=e.onChange),e.onDone&&(this.onDone=e.onDone),e.onOpen&&(this.onOpen=e.onOpen),e.onClose&&(this.onClose=e.onClose);var n=e.color||e.colour;n&&this._setColor(n)}var r=i.parent;if(r&&i.popup&&!this._popupInited){var s=function(e){return t.openHandler(e)};this._events.add(r,"click",s),Bf(this._events,r,[" ","Spacebar","Enter"],s),this._popupInited=!0}else e.parent&&!i.popup&&this.show()}}},{key:"openHandler",value:function(e){if(this.show()){e&&e.preventDefault(),this.settings.parent.style.pointerEvents="none";var t=e&&e.type===Sf?this._domEdit:this.domElement;setTimeout((function(){return t.focus()}),100),this.onOpen&&this.onOpen(this.colour)}}},{key:"closeHandler",value:function(e){var t=e&&e.type,i=!1;if(e)if(t===Ef||t===Nf){var n=(this.__containedEvent||0)+100;e.timeStamp>n&&(i=!0)}else Rf(e),i=!0;else i=!0;i&&this.hide()&&(this.settings.parent.style.pointerEvents="",t!==Ef&&this.settings.parent.focus(),this.onClose&&this.onClose(this.colour))}},{key:"movePopup",value:function(e,t){this.closeHandler(),this.setOptions(e),t&&this.openHandler()}},{key:"setColor",value:function(e,t){this._setColor(e,{silent:t})}},{key:"_setColor",value:function(e,t){if("string"==typeof e&&(e=e.trim()),e){t=t||{};var i=void 0;try{i=new xf(e)}catch(e){if(t.failSilently)return;throw e}if(!this.settings.alpha){var n=i.hsla;n[3]=1,i.hsla=n}this.colour=this.color=i,this._setHSLA(null,null,null,null,t)}}},{key:"setColour",value:function(e,t){this.setColor(e,t)}},{key:"show",value:function(){if(!this.settings.parent)return!1;if(this.domElement){var e=this._toggleDOM(!0);return this._setPosition(),e}var t=function(e){var t=document.createElement("div");return t.innerHTML=e,t.firstElementChild}(this.settings.template||'<div class="picker_wrapper" tabindex="-1"><div class="picker_arrow"></div><div class="picker_hue picker_slider"><div class="picker_selector"></div></div><div class="picker_sl"><div class="picker_selector"></div></div><div class="picker_alpha picker_slider"><div class="picker_selector"></div></div><div class="picker_editor"><input aria-label="Type a color name or hex value"/></div><div class="picker_sample"></div><div class="picker_done"><button>Ok</button></div><div class="picker_cancel"><button>Cancel</button></div></div>');return this.domElement=t,this._domH=Mf(".picker_hue",t),this._domSL=Mf(".picker_sl",t),this._domA=Mf(".picker_alpha",t),this._domEdit=Mf(".picker_editor input",t),this._domSample=Mf(".picker_sample",t),this._domOkay=Mf(".picker_done button",t),this._domCancel=Mf(".picker_cancel button",t),t.classList.add("layout_"+this.settings.layout),this.settings.alpha||t.classList.add("no_alpha"),this.settings.editor||t.classList.add("no_editor"),this.settings.cancelButton||t.classList.add("no_cancel"),this._ifPopup((function(){return t.classList.add("popup")})),this._setPosition(),this.colour?this._updateUI():this._setColor(this.settings.defaultColor),this._bindEvents(),!0}},{key:"hide",value:function(){return this._toggleDOM(!1)}},{key:"destroy",value:function(){this._events.destroy(),this.domElement&&this.settings.parent.removeChild(this.domElement)}},{key:"_bindEvents",value:function(){var e=this,t=this,i=this.domElement,n=this._events;function r(e,t,i){n.add(e,t,i)}r(i,"click",(function(e){return e.preventDefault()})),If(n,this._domH,(function(e,i){return t._setHSLA(e)})),If(n,this._domSL,(function(e,i){return t._setHSLA(null,e,1-i)})),this.settings.alpha&&If(n,this._domA,(function(e,i){return t._setHSLA(null,null,null,1-i)}));var s=this._domEdit;r(s,"input",(function(e){t._setColor(this.value,{fromEditor:!0,failSilently:!0})})),r(s,"focus",(function(e){var t=this;t.selectionStart===t.selectionEnd&&t.select()})),this._ifPopup((function(){var t=function(t){return e.closeHandler(t)};r(window,Ef,t),r(window,Nf,t),Bf(n,i,["Esc","Escape"],t);var s=function(t){e.__containedEvent=t.timeStamp};r(i,Ef,s),r(i,Nf,s),r(e._domCancel,"click",t)}));var o=function(t){e._ifPopup((function(){return e.closeHandler(t)})),e.onDone&&e.onDone(e.colour)};r(this._domOkay,"click",o),Bf(n,i,["Enter"],o)}},{key:"_setPosition",value:function(){var e=this.settings.parent,t=this.domElement;e!==t.parentNode&&e.appendChild(t),this._ifPopup((function(i){"static"===getComputedStyle(e).position&&(e.style.position="relative");var n=!0===i?"popup_right":"popup_"+i;["popup_top","popup_bottom","popup_left","popup_right"].forEach((function(e){e===n?t.classList.add(e):t.classList.remove(e)})),t.classList.add(n)}))}},{key:"_setHSLA",value:function(e,t,i,n,r){r=r||{};var s=this.colour,o=s.hsla;[e,t,i,n].forEach((function(e,t){(e||0===e)&&(o[t]=e)})),s.hsla=o,this._updateUI(r),this.onChange&&!r.silent&&this.onChange(s)}},{key:"_updateUI",value:function(e){if(this.domElement){e=e||{};var t=this.colour,i=t.hsla,n="hsl("+360*i[0]+", 100%, 50%)",r=t.hslString,s=t.hslaString,o=this._domH,a=this._domSL,c=this._domA,l=Mf(".picker_selector",o),h=Mf(".picker_selector",a),d=Mf(".picker_selector",c);b(0,l,i[0]),this._domSL.style.backgroundColor=this._domH.style.color=n,b(0,h,i[1]),F(0,h,1-i[2]),a.style.color=r,F(0,d,1-i[3]);var u=r,f=u.replace("hsl","hsla").replace(")",", 0)"),p="linear-gradient("+[u,f]+")";if(this._domA.style.background=p+", linear-gradient(45deg, lightgrey 25%, transparent 25%, transparent 75%, lightgrey 75%) 0 0 / 2em 2em,\n linear-gradient(45deg, lightgrey 25%, white 25%, white 75%, lightgrey 75%) 1em 1em / 2em 2em",!e.fromEditor){var g=this.settings.editorFormat,m=this.settings.alpha,w=void 0;switch(g){case"rgb":w=t.printRGB(m);break;case"hsl":w=t.printHSL(m);break;default:w=t.printHex(m)}this._domEdit.value=w}this._domSample.style.color=s}function b(e,t,i){t.style.left=100*i+"%"}function F(e,t,i){t.style.top=100*i+"%"}}},{key:"_ifPopup",value:function(e,t){this.settings.parent&&this.settings.popup?e&&e(this.settings.popup):t&&t()}},{key:"_toggleDOM",value:function(e){var t=this.domElement;if(!t)return!1;var i=e?"":"none",n=t.style.display!==i;return n&&(t.style.display=i),n}}]),e}(),Tf=document.createElement("style");function zf(e){if(Lf[e])return Lf[e];if(Lf["chr"+e]){const t=Lf["chr"+e];return Lf[e]=t,t}{const r=(t=Math.round(255*Math.random()).toString(10),i=Math.round(255*Math.random()).toString(10),n=Math.round(255*Math.random()).toString(10),"rgb("+t+","+i+","+n+")");return Lf[e]=r,r}var t,i,n}Tf.textContent='.picker_wrapper.no_alpha .picker_alpha{display:none}.picker_wrapper.no_editor .picker_editor{position:absolute;z-index:-1;opacity:0}.picker_wrapper.no_cancel .picker_cancel{display:none}.layout_default.picker_wrapper{display:flex;flex-flow:row wrap;justify-content:space-between;align-items:stretch;font-size:10px;width:25em;padding:.5em}.layout_default.picker_wrapper input,.layout_default.picker_wrapper button{font-size:1rem}.layout_default.picker_wrapper>*{margin:.5em}.layout_default.picker_wrapper::before{content:"";display:block;width:100%;height:0;order:1}.layout_default .picker_slider,.layout_default .picker_selector{padding:1em}.layout_default .picker_hue{width:100%}.layout_default .picker_sl{flex:1 1 auto}.layout_default .picker_sl::before{content:"";display:block;padding-bottom:100%}.layout_default .picker_editor{order:1;width:6.5rem}.layout_default .picker_editor input{width:100%;height:100%}.layout_default .picker_sample{order:1;flex:1 1 auto}.layout_default .picker_done,.layout_default .picker_cancel{order:1}.picker_wrapper{box-sizing:border-box;background:#f2f2f2;box-shadow:0 0 0 1px silver;cursor:default;font-family:sans-serif;color:#444;pointer-events:auto}.picker_wrapper:focus{outline:none}.picker_wrapper button,.picker_wrapper input{box-sizing:border-box;border:none;box-shadow:0 0 0 1px silver;outline:none}.picker_wrapper button:focus,.picker_wrapper button:active,.picker_wrapper input:focus,.picker_wrapper input:active{box-shadow:0 0 2px 1px #1e90ff}.picker_wrapper button{padding:.4em .6em;cursor:pointer;background-color:#f5f5f5;background-image:linear-gradient(0deg, gainsboro, transparent)}.picker_wrapper button:active{background-image:linear-gradient(0deg, transparent, gainsboro)}.picker_wrapper button:hover{background-color:#fff}.picker_selector{position:absolute;z-index:1;display:block;-webkit-transform:translate(-50%, -50%);transform:translate(-50%, -50%);border:2px solid #fff;border-radius:100%;box-shadow:0 0 3px 1px #67b9ff;background:currentColor;cursor:pointer}.picker_slider .picker_selector{border-radius:2px}.picker_hue{position:relative;background-image:linear-gradient(90deg, red, yellow, lime, cyan, blue, magenta, red);box-shadow:0 0 0 1px silver}.picker_sl{position:relative;box-shadow:0 0 0 1px silver;background-image:linear-gradient(180deg, white, rgba(255, 255, 255, 0) 50%),linear-gradient(0deg, black, rgba(0, 0, 0, 0) 50%),linear-gradient(90deg, #808080, rgba(128, 128, 128, 0))}.picker_alpha,.picker_sample{position:relative;background:linear-gradient(45deg, lightgrey 25%, transparent 25%, transparent 75%, lightgrey 75%) 0 0/2em 2em,linear-gradient(45deg, lightgrey 25%, white 25%, white 75%, lightgrey 75%) 1em 1em/2em 2em;box-shadow:0 0 0 1px silver}.picker_alpha .picker_selector,.picker_sample .picker_selector{background:none}.picker_editor input{font-family:monospace;padding:.2em .4em}.picker_sample::before{content:"";position:absolute;display:block;width:100%;height:100%;background:currentColor}.picker_arrow{position:absolute;z-index:-1}.picker_wrapper.popup{position:absolute;z-index:2;margin:1.5em}.picker_wrapper.popup,.picker_wrapper.popup .picker_arrow::before,.picker_wrapper.popup .picker_arrow::after{background:#f2f2f2;box-shadow:0 0 10px 1px rgba(0,0,0,.4)}.picker_wrapper.popup .picker_arrow{width:3em;height:3em;margin:0}.picker_wrapper.popup .picker_arrow::before,.picker_wrapper.popup .picker_arrow::after{content:"";display:block;position:absolute;top:0;left:0;z-index:-99}.picker_wrapper.popup .picker_arrow::before{width:100%;height:100%;-webkit-transform:skew(45deg);transform:skew(45deg);-webkit-transform-origin:0 100%;transform-origin:0 100%}.picker_wrapper.popup .picker_arrow::after{width:150%;height:150%;box-shadow:none}.popup.popup_top{bottom:100%;left:0}.popup.popup_top .picker_arrow{bottom:0;left:0;-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}.popup.popup_bottom{top:100%;left:0}.popup.popup_bottom .picker_arrow{top:0;left:0;-webkit-transform:rotate(90deg) scale(1, -1);transform:rotate(90deg) scale(1, -1)}.popup.popup_left{top:0;right:100%}.popup.popup_left .picker_arrow{top:0;right:0;-webkit-transform:scale(-1, 1);transform:scale(-1, 1)}.popup.popup_right{top:0;left:100%}.popup.popup_right .picker_arrow{top:0;left:0}',document.documentElement.firstElementChild.appendChild(Tf),Df.StyleElement=Tf;const Lf={chrX:"rgb(204, 153, 0)",chrY:"rgb(153, 204, 0",chrUn:"rgb(50, 50, 50)",chr1:"rgb(80, 80, 255)",chrI:"rgb(139, 155, 187)",chr2:"rgb(206, 61, 50)",chrII:"rgb(206, 61, 50)",chr2a:"rgb(216, 71, 60)",chr2b:"rgb(226, 81, 70)",chr3:"rgb(116, 155, 88)",chrIII:"rgb(116, 155, 88)",chr4:"rgb(240, 230, 133)",chrIV:"rgb(240, 230, 133)",chr5:"rgb(70, 105, 131)",chr6:"rgb(186, 99, 56)",chr7:"rgb(93, 177, 221)",chr8:"rgb(128, 34, 104)",chr9:"rgb(107, 215, 107)",chr10:"rgb(213, 149, 167)",chr11:"rgb(146, 72, 34)",chr12:"rgb(131, 123, 141)",chr13:"rgb(199, 81, 39)",chr14:"rgb(213, 143, 92)",chr15:"rgb(122, 101, 165)",chr16:"rgb(228, 175, 105)",chr17:"rgb(59, 27, 83)",chr18:"rgb(205, 222, 183)",chr19:"rgb(97, 42, 121)",chr20:"rgb(174, 31, 99)",chr21:"rgb(231, 199, 111)",chr22:"rgb(90, 101, 94)",chr23:"rgb(204, 153, 0)",chr24:"rgb(153, 204, 0)",chr25:"rgb(51, 204, 0)",chr26:"rgb(0, 204, 51)",chr27:"rgb(0, 204, 153)",chr28:"rgb(0, 153, 204)",chr29:"rgb(10, 71, 255)",chr30:"rgb(71, 117, 255)",chr31:"rgb(255, 194, 10)",chr32:"rgb(255, 209, 71)",chr33:"rgb(153, 0, 51)",chr34:"rgb(153, 26, 0)",chr35:"rgb(153, 102, 0)",chr36:"rgb(128, 153, 0)",chr37:"rgb(51, 153, 0)",chr38:"rgb(0, 153, 26)",chr39:"rgb(0, 153, 102)",chr40:"rgb(0, 128, 153)",chr41:"rgb(0, 51, 153)",chr42:"rgb(26, 0, 153)",chr43:"rgb(102, 0, 153)",chr44:"rgb(153, 0, 128)",chr45:"rgb(214, 0, 71)",chr46:"rgb(255, 20, 99)",chr47:"rgb(0, 214, 143)",chr48:"rgb(20, 255, 177)"};class Hf{constructor(e){this.tracks=[],this.chordSets=[]}addChordSet(e){this.chordSets=this.chordSets.filter((t=>t.name!==e.name)),this.chordSets.push(e);let t=this.tracks.find((t=>e.trackName===t.name));t&&(t.chordSets=t.chordSets.filter((t=>t.name!==e.name)),t.chordSets.push(e)),t||(t=new Pf(e),this.tracks.push(t))}clearChords(){this.tracks=[],this.chordSets=[]}getTrack(e){return this.tracks.find((t=>e===t.name))}getChordSet(e){return this.chordSets.find((t=>e===t.name))}}class Pf{constructor(e){this.name=e.trackName,this.color=e.trackColor,this.visible=!0,this.chordSets=[e],this.id=("0000"+(Math.random()*Math.pow(36,4)|0).toString(36)).slice(-4)}get chords(){if(1===this.chordSets.length)return this.chordSets[0].chords;const e=[];for(let t of this.chordSets)for(let i of t.chords)e.push(i);return e}}const Of=Math.exp(5);class Vf{static isInstalled(){return void 0!==window.JBrowseReactCircularGenomeView&&void 0!==window.React&&void 0!==window.ReactDOM}constructor(e,t){if(t=t||{},this.config=t,Vf.isInstalled()){this.parent=e,this.groupByTrack=!0===t.groupByTrack,this.chordManager=new Hf(t);const i=document.createElement("div");i.className="igv-circview-container",e.appendChild(i),this.createControls(i),this.resetControlPanel();const n=document.createElement("div");n.className="igv-circview-circular-genome-view",i.appendChild(n),this.container=n,t.assembly&&this.setAssembly(t.assembly),this.width=t.width||500,this.height=t.height||500,this.setSize(this.width,this.height)}else console.error("JBrowse circular view is not installed")}createControls(e){const t=document.createElement("div");t.className="igv-circview-toolbar",e.appendChild(t),this.toolbar=t;const i=document.createElement("div");i.className="igv-circview-track-panel",e.appendChild(i),this.controlPanel=i,this.controlPanel.style.display="none";const n=document.createElement("div");n.className="igv-circview-toolbar-button-container",this.toolbar.appendChild(n),this.showControlsButton=document.createElement("div"),this.showControlsButton.className="igv-circview-button",n.appendChild(this.showControlsButton),this.showControlsButton.innerText="none"===this.controlPanel.style.display?"Show Controls":"Hide Controls",this.showControlsButton.addEventListener("click",(e=>{this.controlPanel.querySelectorAll("div").length>0&&("none"===this.controlPanel.style.display?(this.controlPanel.style.display="flex",e.target.innerText="Hide Controls"):(this.controlPanel.style.display="none",e.target.innerText="Show Controls"))}));let r=document.createElement("div");r.className="igv-circview-button",n.appendChild(r),r.innerText="Clear All",r.addEventListener("click",(()=>{this.clearChords()})),!1!==this.config.showCloseButton&&(r=document.createElement("div"),r.className="igv-circview-button",n.appendChild(r),r.innerText="Close",r.addEventListener("click",(()=>{this.visible=!1})))}resetControlPanel(){this.controlPanel.innerHTML="",this.controlPanel.appendChild(this.createGroupByCB());const e=this.groupByTrack?this.chordManager.tracks:this.chordManager.chordSets;for(let t of e)this.addToControlPanel(t)}createGroupByCB(){const e=document.createElement("input");e.type="checkbox",e.id="groupByCB",e.style.width="1.4em",e.style.height="1.4em",e.checked=this.groupByTrack,e.onclick=e=>{this.groupByTrack=e.target.checked,this.resetControlPanel(),this.render()};const t=document.createElement("label");t.for="groupByCB",t.innerText="Group by track",t.style.color="black",t.style.paddingLeft="10px";const i=document.createElement("div");return i.style.width="100%",i.style.paddingTop="5px",i.style.paddingBottom="5px",i.style.background="rgb(216, 230, 234)",i.appendChild(e),i.appendChild(t),i}addToControlPanel(e){const t=document.createElement("div");this.controlPanel.appendChild(t);const i=document.createElement("div");i.className="igv-circview-button",t.appendChild(i),i.innerText=!0===e.visible?"Hide":"Show",i.addEventListener("click",(t=>{!0===e.visible?(this.hideChordSet(e.name),t.target.innerText="Show"):(this.showChordSet(e.name),t.target.innerText="Hide")}));const n=document.createElement("input"),r=e=>200*Math.log(e*Of),s=document.createElement("div");s.className="igv-circview-button",s.innerHTML=" ",t.appendChild(s),s.style.backgroundColor=qf(e.color,1);const o={parent:s,popup:"right",editorFormat:"rgb",color:e.color,onChange:({rgbaString:t})=>{s.style.backgroundColor=qf(t,1),this.setColor(e.name,t),n.value=r(Qf(e.color))}},a=new Df(o);n.setAttribute("title","Adjust transparency of arcs"),n.type="range",n.style.width="100px",n.style.marginRight="10px",n.setAttribute("class","range"),n.setAttribute("min","0"),n.setAttribute("max","1000"),n.value=r(Qf(e.color)),n.oninput=()=>{const t=(i=n.value,Math.exp(i/200)/Of);var i;this.setColor(e.name,qf(e.color,t)),a.setColor(e.color)},t.appendChild(n);const c=document.createElement("div");c.style.color="black",t.appendChild(c),c.innerText=c.title=e.name}setAssembly(e){const t=this.genomeId||Gf();if(this.genomeId===t)return;this.chordManager.clearChords(),this.genomeId=t,this.chrNames=new Set(e.chromosomes.map((e=>Uf(e.name))));const i=[],n=[];for(let t of e.chromosomes){const e=Uf(t.name);n.push(t.color||zf(e)),i.push({refName:e,uniqueId:e,start:0,end:t.bpLength})}this.assembly={name:e.name,sequence:{trackId:t,type:"ReferenceSequenceTrack",adapter:{type:"FromConfigSequenceAdapter",features:i}},refNameColors:n},this.render()}addChords(e,t={}){const i=t.name||t.track||"*",n=i.split(" ")[0].replaceAll("%20"," "),r={name:i.replaceAll("%20"," "),trackName:n,chords:e,color:t.color||"black",trackColor:t.trackColor||t.color||"black",visible:!0,id:t.id||Gf()};this.chordManager.addChordSet(r),this.resetControlPanel(),this.render()}setSize(e,t){if(t=t||e,this.width=e,this.height=t,this.viewState){const i=this.viewState.session.view;i.setWidth(e),i.setHeight(t),i.setBpPerPx(i.minBpPerPx)}}getSize(){return Math.min(this.width,this.height)}clearChords(){this.chordManager.clearChords(),this.resetControlPanel(),this.render()}clearSelection(){this.viewState.pluginManager.rootModel.session.clearSelection()}show(){this.parent.style.display="block"}hide(){this.parent.style.display="none"}get visible(){return"none"!==this.parent.style.display}set visible(e){this.parent.style.display=e?"block":"none"}hideChordSet(e){let t=this.getChordSet(e);t?(t.visible=!1,this.render()):console.warn(`No track with name: ${name}`)}showChordSet(e){let t=this.getChordSet(e);t?(t.visible=!0,this.render()):console.warn(`No track with name: ${e}`)}deleteTrack(e){let t=this.tracks.findIndex((t=>e===t.name));t>=0&&this.tracks.splice(t,1),this.render()}getChordSet(e){return this.groupByTrack?this.chordManager.getTrack(e):this.chordManager.getChordSet(e)}setColor(e,t){const i=this.getChordSet(e);if(i){i.color=t;const e=i.id;for(let i of this.viewState.config.tracks)if(e===i.trackId){i.displays[0].renderer.strokeColor.set(t);break}}}render(){const{createViewState:e,JBrowseCircularGenomeView:t}=JBrowseReactCircularGenomeView;ReactDOM.unmountComponentAtNode(this.container);const i=(this.groupByTrack?this.chordManager.tracks:this.chordManager.chordSets).filter((e=>e.visible)),n=[],r=[];for(let e of i)n.push({trackId:e.id,name:e.name,assemblyNames:["forIGV"],type:"VariantTrack",adapter:{type:"FromConfigAdapter",features:e.chords}}),r.push(e.color);this.viewState=e({assembly:this.assembly,tracks:n});for(let e=0;e<i.length;e++)this.viewState.config.tracks[e].displays[0].renderer.strokeColor.set(r[e]);this.element=React.createElement(t,{viewState:this.viewState}),this.setSize(this.width,this.height),ReactDOM.render(this.element,this.container);const s=this.config.onChordClick||jf;for(let e=0;e<i.length;e++)this.viewState.session.view.showTrack(this.viewState.config.tracks[e].trackId),s&&(this.viewState.pluginManager.jexl.addFunction("onChordClick",s),this.viewState.config.tracks[e].displays[0].onChordClick.set("jexl:onChordClick(feature, track, pluginManager)"))}}function qf(e,t){const[i,n,r,s]=e.split(",");return`${i},${n},${r},${t})`}function Qf(e){return e.startsWith("rgba(")?Number(e.split(",")[3].replace(")","")):1}function Uf(e){return e.startsWith("chr")?e.substring(3):e}function jf(e,t,i){console.log(e)}function Gf(){return("0000"+(Math.random()*Math.pow(36,4)|0).toString(36)).slice(-4)}if("undefined"!=typeof document){function Jv(e){for(let t of document.styleSheets)if(t=t.href?t.href.replace(/^.*[\\\/]/,""):"",t===e)return!0;return!1}Jv("circular-view.css")||function(){const e=document.createElement("style");e.setAttribute("type","text/css"),e.innerHTML='.igv-circview-container {\n width: fit-content;\n height: fit-content;\n box-sizing: content-box;\n color: dimgray;\n font-family: "Open Sans", sans-serif;\n font-size: 12px;\n background-color: white;\n border-color: dimgray;\n border-style: solid;\n border-width: thin;\n display: flex;\n flex-direction: column;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: flex-start;\n}\n\n.igv-circview-toolbar {\n position: relative;\n width: 100%;\n height: 32px;\n background-color: lightgrey;\n border-bottom-style: solid;\n border-bottom-color: dimgray;\n border-bottom-width: thin;\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: space-between;\n align-items: center;\n}\n\n.igv-circview-toolbar-button-container {\n height: 100%;\n width: fit-content;\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: center;\n}\n.igv-circview-toolbar-button-container > div {\n margin: 4px;\n}\n\n.igv-circview-track-panel {\n z-index: 1024;\n position: absolute;\n top: 33px;\n left: 0;\n width: 100%;\n height: fit-content;\n border-bottom-style: solid;\n border-bottom-color: dimgray;\n border-bottom-width: thin;\n background-color: white;\n display: flex;\n flex-flow: column;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: flex-start;\n}\n.igv-circview-track-panel > div {\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: center;\n}\n.igv-circview-track-panel > div > div {\n margin: 4px;\n}\n\n.igv-circview-swatch-button {\n cursor: pointer;\n padding: 5px;\n width: 8px;\n height: 8px;\n border: 1px solid #8d8b8b;\n border-radius: 16px;\n}\n\n.igv-circview-button {\n cursor: pointer;\n padding: 5px;\n color: #444;\n vertical-align: middle;\n text-align: center;\n font-family: "Open Sans", sans-serif;\n font-size: 12px;\n border: 1px solid #8d8b8b;\n border-radius: 4px;\n background: #efefef;\n box-shadow: 0 0 5px -1px rgba(0, 0, 0, 0.2);\n}\n\n.igv-circview-button:hover {\n background: #efefef;\n box-shadow: 0 0 5px -1px rgba(0, 0, 0, 0.6);\n}\n\n.igv-circview-button:active {\n color: #007bff;\n box-shadow: 0 0 5px -1px rgba(0, 0, 0, 0.6);\n}\n\n/*# sourceMappingURL=circular-view.css.map */\n',document.head.insertBefore(e,document.head.childNodes[document.head.childNodes.length-1])}()}const Wf=e=>e.startsWith("chr")?e.substring(3):e;function $f(e){const t=[],i=[];if(e.wgChromosomeNames)for(let n of e.wgChromosomeNames){const r=e.getChromosome(n);i.push(Gh(r.name)),t.push({name:r.name,bpLength:r.bpLength})}return t}function Kf(e,t,i,n){const r=t.color||"rgb(0,0,255)",s=un.addAlpha("all"===i.chr?r:Gh(i.chr),n),o=un.addAlpha(r,n),a=t.name.replaceAll(" ","%20"),c="all"===i.chr?a:`${a} ${i.chr}:${i.start}-${i.end}`;t.browser.circularView.addChords(e,{track:c,color:s,trackColor:o}),t.browser.circularViewVisible||(t.browser.circularViewVisible=!0)}class Yf{constructor(e,{minTLENPercentile:t,maxTLENPercentile:i}){this.totalCount=0,this.frCount=0,this.rfCount=0,this.ffCount=0,this.sumF=0,this.sumF2=0,this.lp=void 0===t?.1:t,this.up=void 0===i?99.5:i,this.isizes=[],this.compute(e)}compute(e){for(let n of e)if(n.isProperPair()){var t=Math.abs(n.fragmentLength);this.sumF+=t,this.sumF2+=t*t,this.isizes.push(t);var i=n.pairOrientation;if("string"==typeof i&&4===i.length)switch(""+i.charAt(0)+i.charAt(2)){case"FF":case"RR":this.ffCount++;break;case"FR":this.frCount++;break;case"RF":this.rfCount++}this.totalCount++}this.ffCount/this.totalCount>.9?this.orienation="ff":this.frCount/this.totalCount>.9?this.orienation="fr":this.rfCount/this.totalCount>.9&&(this.orienation="rf"),this.minTLEN=0===this.lp?0:Xf(this.isizes,this.lp),this.maxTLEN=Xf(this.isizes,this.up)}}function Xf(e,t){if(0!==e.length){var i=Math.floor(e.length*(t/100));return e.sort((function(e,t){return e-t})),e[i]}}const Zf="rgb(255,0,255)",Jf="rgb(0,0,255)",ep="rgb(132, 178, 158)",tp=new Map;tp.set("m","rgb(255,0,0)"),tp.set("h",Zf),tp.set("o","rgb(111, 78, 129)"),tp.set("f","rgb(246, 200, 95)"),tp.set("c","rgb(157, 216, 102)"),tp.set("g","rgb(255, 160, 86)"),tp.set("e","rgb(141, 221, 208)"),tp.set("b","rgb(202, 71, 47)"),tp.set("h",Zf),tp.set("a","rgb(51,0,111)"),tp.set("NONE_A",Jf),tp.set("NONE_C",Jf),tp.set("NONE_T",Jf),tp.set("NONE_G",Jf),tp.set("NONE_N",Jf);const ip=new Map;function np(e,t,i){let n=function(e){return tp.has(e)?tp.get(e):ep}(e),r=hu(t);if(r>255)return n;const s=e+r+i;if(r<0&&(r=0),!ip.has(s)){const e="basemod2"===i?Math.max(20,Math.min(255,r*r/50-4*r+200+20)):Math.max(20,Math.min(255,.006127*r*r)),[t,o,a]=un.rgbComponents(n);ip.set(s,`rgba(${t},${o},${a},${e/255})`)}return ip.get(s)}class rp{constructor(e){this.alignmentTrack=e}updateContext(e){this.context=e}drawModifications(e,t,i,n,r,s){const{ctx:o,pixelEnd:a,bpStart:c,bpPerPixel:l}=n,h=e.getBaseModificationSets();if(h){let n;const d=r.split(":");2==d.length&&(r=d[0],n=d[1]);for(let d of e.blocks){if("S"===d.type)continue;const e=t,u=i;let f=Math.max(1,1/l);for(let t=d.seqOffset;t<d.seqOffset+d.len;t++){let i=(d.start+(t-d.seqOffset)-c)/l;if(i>a)break;if(i+f<0)continue;let p,g=-1,m=255,w=0;for(let e of h)if((!n||e.modification===n)&&e.containsPosition(t)){const i=hu(e.likelihoods.get(t));m-=i,(!p||i>g)&&(p=e.modification,w=e.canonicalBase,g=i)}if(p){const t=255*s;let n;m>g&&"basemod2"===r&&m>=t?n=np("NONE_"+w,m,r):g>=t&&(n=np(p,g,r)),o.fillStyle=n,f<3&&(f=3,i--),o.fillRect(i,e,f,Math.max(1,u-2))}}}}}}const sp=new Set(["firstOfPairStrand"]);class op extends Pa{static defaults={viewAsPairs:!1,showSoftClips:!1,showAllBases:!1,showInsertions:!0,showMismatches:!0,colorBy:void 0,groupBy:void 0,displayMode:"EXPANDED",alignmentRowHeight:14,squishedRowHeight:3,negStrandColor:"rgba(150, 150, 230, 0.75)",posStrandColor:"rgba(230, 150, 150, 0.75)",baseModPosStrandColor:"rgb(195, 195, 195)",baseModNegStrandColor:"rgb(195, 210, 195)",insertionColor:"rgb(138, 94, 161)",insertionTextColor:"white",showInsertionText:!1,deletionColor:"black",deletionTextColor:"black",showDeletionText:!1,skippedColor:"rgb(150, 170, 170)",pairConnectorColor:void 0,smallTLENColor:"rgb(0, 0, 150)",largeTLENColor:"rgb(200, 0, 0)",expectedPairOrientation:"fr",rlColor:"rgb(0, 150, 0)",rrColor:"rgb(20, 50, 200)",llColor:"rgb(0, 150, 150)",bamColorTag:"YC",hideSmallIndels:!1,indelSizeThreshold:1,highlightColor:void 0,minTLEN:void 0,maxTLEN:void 0,tagColorPallete:"Set1"};_colorTables=new Map;_baseModifications=new Set;constructor(e,t){super(e,t),(e.colorTable||e.tagColorTable)&&(this.colorTable=new Yn(e.tagColorTable)),e.largeFragmentLengthColor&&(this.largeTLENColor=e.largeFragmentLengthColor),e.pairOrienation&&(this.expectedPairOrientation=e.pairOrientation),e.smallFragmentLengthColor&&(this.smallTLENColor=e.smallFragmentLengthColor),e.largeFragmentLengthColor&&(this.largeTLENColor=e.largeFragmentLengthColor),e.minFragmentLength&&(this.minTLEN=e.minFragmentLength),e.maxFragmentLength&&(this.maxTLEN=e.maxFragmentLength),e.displayMode&&(this.displayMode=e.displayMode.toUpperCase()),e.colorBy&&e.colorByTag&&(this.colorBy=e.colorBy+":"+e.colorByTag),this.featureSource=this.parent.featureSource,this.top=0===e.coverageTrackHeight?0:e.coverageTrackHeight+5,this.pairColors={RL:this.rlColor,RR:this.rrColor,LL:this.llColor},e.highlightedReads&&this.setHighlightedReads(e.highlightedReads),this.hasPairs=!1,this.hasSupplemental=!1,this._groupByTags=[],this._groupByPositions=[],e.groupBy&&(this.groupBy=e.groupBy,e.groupBy.startsWith("base:")&&this._groupByPositions.push(e.groupBy.substring(5)),e.groupBy.startsWith("tag:")&&this._groupByTags.push(e.groupBy.substring(4))),this._locusChange=cp.bind(this),this.browser.on("locuschange",this._locusChange)}init(e){this.parent=e.parent,delete e.parent,super.init(e)}dispose(){this.browser.off("locuschage",this._locusChange)}get baseModRenderer(){return this._baseModRenderer||(this._baseModRenderer=new rp(this)),this._baseModRenderer}get baseModificationThreshold(){return this.parent.baseModificationThreshold}setTop(e,t){this.top=0===e.height||!1===t?0:5+e.height}setHighlightedReads(e,t){if(!Array.isArray(e)||!e.every((e=>"string"==typeof e)))throw new Error("AlignmentTrack.setHighlightedReads() only accept array of strings");t&&(this.highlightColor=t),this.highlightedReads=new Set(e)}computePixelHeight(e){if(e.packedGroups){let t=e.hasDownsampledIntervals()?15:0;const i="SQUISHED"===this.displayMode?this.squishedRowHeight:this.alignmentRowHeight;for(let n of e.packedGroups.values())t+=i*n.length+10;return t+5}return 0}draw(e){const t=e.features,i=e.context,n=e.bpPerPixel,r=e.bpStart,s=e.pixelWidth,o=r+s*n+1,a=this.showSoftClips,c=this.showAllBases,l=this.browser.nucleotideColors;i.save();for(let e of t.baseModificationKeys)this._baseModifications.add(e.modification);let h=t.sequence;h&&(h=h.toUpperCase());let d=0;this.colorBy||(this.colorBy=this.hasPairs?"unexpectedPair":"none");let u=e.pixelTop;this.top&&i.translate(0,this.top);const f=u+e.pixelHeight;t.hasDownsampledIntervals()?(d=15,t.downsampledIntervals.forEach((function(e){var t=(e.start-r)/n,s=(e.end-r)/n;s-t>5&&(t+=1,s-=1),fr.fillRect(i,t,2,s-t,8,{fillStyle:"black"})}))):d=0,this.alignmentsYOffset=d;const p="SQUISHED"===this.displayMode?this.squishedRowHeight:this.alignmentRowHeight,g=t.packedGroups;if(g){let t=d;for(let n of g.keys()){const a=g.get(n),c=a.rows,l=c.length;a.pixelTop=t;for(let e=0;e<l;e++){const i=c[e],n=p<=4?p:p-2;if(t>f)break;if(t+n<u)t+=p;else{for(let e of i.alignments)if(this.browser.circularView&&(this.hasSupplemental=this.hasSupplemental||e.hasTag("SA")),!(e.start+e.lengthOnRef<r)){if(e.start>o)break;!0!==e.hidden&&(e instanceof iu?(m.call(this,e,t,n),w.call(this,e.firstAlignment,t,n),e.secondAlignment&&w.call(this,e.secondAlignment,t,n)):w.call(this,e,t,n))}t+=p}}if(a.pixelBottom=t,this.groupBy&&n){i.save(),i.font="400 12px sans-serif";const r=i.measureText(n),o=r.width+10,c=-e.pixelShift+e.viewportWidth-o-10,l=r.actualBoundingBoxAscent+r.actualBoundingBoxDescent+10,h=Math.min(a.pixelTop+l-1,a.pixelBottom);i.textAlign="center",i.fillStyle="white",i.strokeStyle="lightGray",fr.roundRect(i,c,h-r.actualBoundingBoxAscent-5,o,l,2,1,1),i.fillStyle="black",i.fillText(n,c+o/2,h),fr.dashedLine(i,0,t,s,t),i.restore(),t+=10}}}function m(e,t,s){var a=this.getConnectorColor(e.firstAlignment),c=(e.connectingStart-r)/n,l=(e.connectingEnd-r)/n,h=t+s/2;e.connectingEnd<r||e.connectingStart>o||(e.mq<=0&&(a=un.addAlpha(a,.15)),fr.setProperties(i,{fillStyle:a,strokeStyle:a}),fr.strokeLine(i,c,h,l,h))}function w(e,d,u){if(e.start+e.lengthOnRef<r||e.start>o)return;const f=a?e.blocks:e.blocks.filter((e=>"S"!==e.type));let g=this.getAlignmentColor(e);const m=g;e.mq<=0&&(g=un.addAlpha(g,.15)),fr.setProperties(i,{fillStyle:g,strokeStyle:m});const w=[];for(let e=0;e<f.length;e++){const t=f[e];if(!(e!==f.length-1&&f[e+1].start<r)&&(w.push(...b.call(this,t,e)),t.start+t.len>o))break}if(e.gaps){const t=d+u/2;for(let s of e.gaps){const e=(s.start-r)/n,o=(s.start+s.len-r)/n,a=o-e,c=s.len.toString(),l=6*c.length,h=e+a/2,u="D"===s.type?this.deletionColor:this.skippedColor;if(fr.strokeLine(i,e,t,o,t,{strokeStyle:u,lineWidth:2}),this.showDeletionText&&s.len>1&&a>=l+8){const e=h-l/2;fr.fillRect(i,e-1,d-1,l+2,12,{fillStyle:"white"}),fr.fillText(i,c,e,d+10,{font:"normal 10px monospace",fillStyle:this.deletionTextColor})}}}if(e.insertions&&this.showInsertions){let t=-1;for(let s of e.insertions){if(this.hideSmallIndels&&s.len<=this.indelSizeThreshold)continue;if(s.start<r)continue;if(s.start>o)break;const e=s.start-r,a=s.len.toString(),c=2+6*a.length,l=this.showInsertionText&&1!==s.len?Math.round(s.len/n):2,h=Math.max(Math.min(c,l),2),f=e/n-h/2;if(f-t>2){const e={fillStyle:this.insertionColor};fr.fillRect(i,f-2,d,h+4,2,e),fr.fillRect(i,f,d+2,h,u-4,e),fr.fillRect(i,f-2,d+u-2,h+4,2,e),this.showInsertionText&&s.len>1&&l>c&&fr.fillText(i,a,f+1,d+10,{font:"normal 10px monospace",fillStyle:this.insertionTextColor}),t=f}}}for(let{bbox:e,baseColor:t,readChar:r}of w){if(n<=.1&&e.height>=8){const n=Math.min(10,e.height);i.font=n+"px sans-serif";const s=e.x+e.width/2;fr.strokeText(i,r,s-i.measureText(r).width/2,n-1+e.y,{strokeStyle:t})}else fr.fillRect(i,e.x,e.y,e.width,e.height,{fillStyle:t})}if(this.colorBy&&this.colorBy.startsWith("basemod")){const t={ctx:i,bpPerPixel:n,bpStart:r,bpEnd:o,pixelEnd:s};this.baseModRenderer.drawModifications(e,d,u,t,this.colorBy,this.baseModificationThreshold)}function b(o,a){const w=[],b=o.start-t.start,F=(o.start-r)/n,v=(o.start+o.len-r)/n,y=Math.max(1,v-F),A=100/n,C=Math.min(p/2,A/6),_="S"===o.type,x=e.mq<=0||this.selectedReadName===e.readName||_||this.highlightedReads&&this.highlightedReads.has(e.readName);let k=m;this.selectedReadName===e.readName?k="red":_?k="rgb(50,50,50)":this.highlightedReads&&this.highlightedReads.has(e.readName)&&(k=this.highlightColor||"#00ff00");const I=!0===e.strand&&a===f.length-1,S=!1===e.strand&&0===a;if(I|S){let e,t;I?(e=[F,v,v+C,v,F,F],t=[d,d,d+u/2,d+u,d+u,d]):S&&(e=[v,F,F-C,F,v,v],t=[d,d,d+u/2,d+u,d+u,d]),fr.fillPolygon(i,e,t,{fillStyle:g}),x&&fr.strokePolygon(i,e,t,{strokeStyle:k})}else fr.fillRect(i,F,d,y,u,{fillStyle:g}),x&&(i.save(),i.strokeStyle=k,i.strokeRect(F,d,y,u),i.restore());if(_||c||this.showMismatches&&h&&e.seq&&"*"!==e.seq){const t=e.seq?e.seq.toUpperCase():void 0,i=e.qual,a=o.seqOffset,f=Math.max(1,1/n);for(let e=0,p=o.len;e<p;e++){const p=(o.start+e-r)/n;if(p+f<0)continue;if(p>s)break;let g=t?t.charAt(a+e):"";const m=b+e>=0?h.charAt(b+e):"";if("="===g&&(g=m),"X"===g||m!==g||_||c){let t=l[g]||"rgb(0,0,0)";if(!_&&void 0!==i&&i.length>a+e){t=ap(i[a+e],t)}w.push({bbox:{x:p,y:d,width:f,height:u},baseColor:t,readChar:g})}}}return w}}i.restore()}popupData(e){const t=this.getClickedObject(e);return t?t.popupData(e.genomicLocation):void 0}menuItemList(){let t=[];t.push("<hr/>");let i=e('<div class="igv-track-menu-category">');i.innerText="Color by:",t.push({name:void 0,element:i,click:void 0,init:void 0});const n=[];n.push({key:"none",label:"none"}),n.push({key:"strand",label:"read strand"}),this.hasPairs&&(n.push({key:"firstOfPairStrand",label:"first-of-pair strand"}),n.push({key:"pairOrientation",label:"pair orientation"}),n.push({key:"tlen",label:"insert size (TLEN)"}),n.push({key:"unexpectedPair",label:"pair orientation & insert size (TLEN)"})),n.push({key:"tag",label:"tag"});for(let e of n){const i=void 0===this.colorBy&&"none"===e.key||this.colorBy===e.key;t.push(this.colorByCB(e,i))}const r=this._baseModifications.size;if(r>0){t.push('<hr style="border-top:1px dotted;border-bottom: none;">');let e=1===r?"base modification":"base modification (all)";if(t.push(this.basemodColorByCB({key:"basemod",label:e})),r>1)for(let e of this._baseModifications)t.push(this.basemodColorByCB({key:"basemod:"+e,label:`base modification (${cu(e)})`}));if(t.push('<hr style="border-top:1px dotted;border-bottom: none;">'),e=1===r?"base modification 2-color":"base modification 2-color (all)",t.push(this.basemodColorByCB({key:"basemod2",label:e})),r>1)for(let e of this._baseModifications)t.push(this.basemodColorByCB({key:"basemod2:"+e,label:`base modification 2-color (${cu(e)})`}))}t.push("<hr/>"),i=document.createElement("div"),i.className="igv-track-menu-category",i.textContent="Group by:",t.push({name:void 0,element:i,click:void 0,init:void 0});const s=[];s.push({key:"none",label:"none"}),s.push({key:"strand",label:"read strand"}),this.hasPairs&&(s.push({key:"firstOfPairStrand",label:"first-of-pair strand"}),s.push({key:"pairOrientation",label:"pair orientation"}),s.push({key:"mateChr",label:"chromosome of mate"})),s.push({key:"chimeric",label:"chimeric"}),s.push({key:"supplementary",label:"supplementary flag"}),s.push({key:"readOrder",label:"read order"});for(let e of this._groupByTags)s.push({key:`tag:${e}`,label:`tag:${e}`});for(let e of this._groupByPositions)s.push({key:`base:${e}`,label:`base:${e}`});s.push({key:"tag",label:"tag..."});for(let e of s){const i=void 0===this.groupBy&&"none"===e.key||this.groupBy===e.key;t.push(this.groupByCB(e,i))}t.push("<hr/>"),t.push({element:Ta("Show all bases",this.showAllBases),click:function(){this.alignmentTrack.showAllBases=!this.alignmentTrack.showAllBases,this.trackView.repaintViews()}}),t.push({element:Ta("Show mismatches",this.showMismatches),click:function(){this.alignmentTrack.showMismatches=!this.alignmentTrack.showMismatches,this.trackView.repaintViews()}}),t.push({element:Ta("Show insertions",this.showInsertions),click:function(){this.alignmentTrack.showInsertions=!this.alignmentTrack.showInsertions,this.trackView.repaintViews()}}),t.push({element:Ta("Show soft clips",this.showSoftClips),click:function(){this.alignmentTrack.showSoftClips=!this.alignmentTrack.showSoftClips;const e=this.getCachedAlignmentContainers();for(let t of e)t.pack(this);this.trackView.repaintViews()}}),this.hasPairs&&(t.push("<hr/>"),t.push({element:Ta("View as pairs",this.viewAsPairs),click:function(){const e=!this.alignmentTrack.viewAsPairs;if(e&&this.groupBy&&!sp.has(this.groupBy))return void this.browser.alert.present(`'View as Pairs' is incompatible with 'Group By ${this.groupBy}'`);this.alignmentTrack.viewAsPairs=e;const t=this.getCachedAlignmentContainers();for(let e of t)e.pack(this);this.trackView.checkContentHeight(),this.trackView.repaintViews()}})),this.browser.circularView&&(this.hasPairs||this.hasSupplemental)&&(t.push("<hr/>"),this.hasPairs&&t.push({label:"Add discordant pairs to circular view",click:function(){for(let e of this.trackView.viewports)this.addPairedChordsForViewport(e)}}),this.hasSupplemental&&t.push({label:"Add split reads to circular view",click:function(){for(let e of this.trackView.viewports)this.addSplitChordsForViewport(e)}})),t.push("<hr/>"),i=document.createElement("div"),i.className="igv-track-menu-category",i.textContent="Display mode:",t.push({name:void 0,element:i,click:void 0,init:void 0});for(let e of["EXPANDED","SQUISHED","FULL"])t.push({element:Ta(e.toLowerCase(),this.displayMode===e),click:function(){this.alignmentTrack.setDisplayMode(e)}});return t}setDisplayMode(e){const t="FULL"===this.displayMode||"FULL"===e;if(this.displayMode=e,t){const e=this.getCachedAlignmentContainers();for(let t of e)t.pack(this)}this.trackView.checkContentHeight(),this.trackView.repaintViews()}colorByCB(e,t){const i=Ta(e.label,t);if("tag"!==e.key){function n(){this.alignmentTrack.colorBy=e.key,this.trackView.repaintViews()}return{name:void 0,element:i,click:n,init:void 0}}{function r(e){const t=this.alignmentTrack.colorBy.startsWith("tag:")?this.alignmentTrack.colorBy.substring(4):"";this.browser.inputDialog.present({label:"Tag Name",value:t,callback:e=>{const t=this.alignmentTrack;e?(t.colorBy="tag:"+e,t.colorTable||(t.colorTable=new Kn("Set1"))):t.colorBy=void 0,this.trackView.repaintViews()}},e)}return{name:void 0,element:i,dialog:r,init:void 0}}}basemodColorByCB(e){const t=this.colorBy===e.key;return{name:void 0,element:Ta(e.label,t),click:function(){this.alignmentTrack.colorBy=e.key,this.trackView.repaintViews()},init:void 0}}groupByCB(e,t){return{name:void 0,element:Ta(e.label,t),dialog:function(t){const i=()=>this.alignmentTrack.repackAlignments();if("tag"===e.key){let e="";this.alignmentTrack.groupBy&&this.alignmentTrack.groupBy.startsWith("tag:")&&(e=this.alignmentTrack.groupBy.substring(4)),this.browser.inputDialog.present({label:"Tag Name",value:e,callback:e=>{e&&(this.alignmentTrack.groupBy="tag:"+e,this.alignmentTrack._groupByTags.push(e),i())}},t)}else"none"===e.key?this.alignmentTrack.groupBy=void 0:this.alignmentTrack.groupBy=e.key,i()},init:void 0}}repackAlignments(){const e=this.getCachedAlignmentContainers();for(let t of e)"function"==typeof t.pack&&t.pack(this);this.trackView.checkContentHeight(),this.trackView.repaintViews()}contextMenuItemList(e){const t=e.viewport,i=[],n=i=>{const n=this.sortObject,r=!n||n.position!==Math.floor(e.genomicLocation)||!n.direction,s={chr:t.referenceFrame.chr,position:Math.floor(e.genomicLocation),option:i,direction:r,sortAsPairs:t.trackView.track.viewAsPairs};this.sortObject=s,t.cachedFeatures.sortRows(s),t.repaint()};i.push("<b>Sort by...</b>"),i.push({label:" base",click:()=>n("BASE")}),i.push({label:" read strand",click:()=>n("strand")}),i.push({label:" start location",click:()=>n("START")}),i.push({label:" insert size",click:()=>n("INSERT_SIZE")}),i.push({label:" gap size",click:()=>n("GAP_SIZE")}),i.push({label:" chromosome of mate",click:()=>n("MATE_CHR")}),i.push({label:" mapping quality",click:()=>n("MQ")}),i.push({label:" read name",click:()=>n("READ_NAME")}),i.push({label:" aligned read length",click:()=>n("ALIGNED_READ_LENGTH")}),i.push({label:" tag",click:()=>{const i=this.sortObject,n=!i||i.position!==Math.floor(e.genomicLocation)||!i.direction,r={label:"Tag Name",value:this.sortByTag?this.sortByTag:"",callback:i=>{if(i){const r={chr:t.referenceFrame.chr,position:Math.floor(e.genomicLocation),option:"TAG",tag:i,direction:n};this.sortByTag=i,this.sortObject=r,t.cachedFeatures.sortRows(r),t.repaint()}}};this.browser.inputDialog.present(r,e.event)}}),i.push("<hr/>");const r=`${t.referenceFrame.chr}:${F(Math.floor(e.genomicLocation)+1)}`;i.push({label:`Group by base @${r}`,click:()=>{this._groupByPositions.push(r),this.groupBy=`base:${r}`;const e=this.getCachedAlignmentContainers();for(let t of e)t.pack(this);this.trackView.checkContentHeight(),this.trackView.repaintViews()}}),i.push("<hr/>");const s=this.getClickedObject(e);if(s){const t=this.showSoftClips,n="function"==typeof s.alignmentContaining?s.alignmentContaining(e.genomicLocation,t):s;if(n){n.isPaired()&&n.isMateMapped()&&i.push({label:"View mate in split screen",click:()=>{if(n.mate){const t=e.viewport.referenceFrame,i=this.browser.genome.getChromosome(n.mate.chr);if(i){this.selectedReadName=n.readName;const r=t.bpPerPixel*e.viewport.getWidth(),s=n.mate.position-r/2,o=n.mate.position+r/2;this.browser.addMultiLocusPanel(i.name,s,o,t)}else this.browser.alert.present(`Reference does not contain chromosome: ${n.mate.chr}`)}},init:void 0}),i.push({label:"View read sequence",click:()=>{const e=n.seq;e&&"*"!==e?this.browser.alert.present(e):this.browser.alert.present("Read sequence: *")}}),to()&&i.push({label:"Copy read sequence",click:async()=>{const e=n.seq;try{await navigator.clipboard.writeText(e)}catch(e){console.error(e),this.browser.alert.present(`error copying sequence to clipboard ${e}`)}}});const t=n.seq;if(t&&"*"!==t){t.length<rh&&i.push({label:"BLAT read sequence",click:()=>{const e=n.isNegativeStrand()?lo(t):t,i=`${n.readName} - blat`,r=`${this.name} - ${i}`;oh({sequence:e,browser:this.browser,name:i,title:r})}});const e=n.softClippedBlocks();e.left&&e.left.len>20&&e.left.len<rh&&i.push({label:"BLAT left soft-clipped sequence",click:()=>{const i=t.substr(e.left.seqOffset,e.left.len),r=n.isNegativeStrand()?lo(i):i,s=`${n.readName} - blat left clip`,o=`${this.name} - ${s}`;oh({sequence:r,browser:this.browser,name:s,title:o})}}),e.right&&e.right.len>20&&e.right.len<rh&&i.push({label:"BLAT right soft-clipped sequence",click:()=>{const i=t.substr(e.right.seqOffset,e.right.len),r=n.isNegativeStrand()?lo(i):i,s=`${n.readName} - blat right clip`,o=`${this.name} - ${s}`;oh({sequence:r,browser:this.browser,name:s,title:o})}})}i.push("<hr/>")}}return this.browser.circularView&&(this.hasPairs||this.hasSupplemental)&&(this.hasPairs&&i.push({label:"Add discordant pairs to circular view",click:()=>{this.addPairedChordsForViewport(t)}}),this.hasSupplemental&&i.push({label:"Add split reads to circular view",click:()=>{this.addSplitChordsForViewport(t)}}),i.push("<hr/>")),i}getClickedObject(e){let t=e.viewport.cachedFeatures;if(!t)return;const i=e.y-this.top,n=e.genomicLocation;if(t.packedGroups){let e=Number.MAX_VALUE;for(let r of t.packedGroups.values())if(e=Math.min(e,r.pixelTop),i>r.pixelTop&&i<=r.pixelBottom){const e="SQUISHED"===this.displayMode?this.squishedRowHeight:this.alignmentRowHeight;let t=Math.floor((i-r.pixelTop)/e);if(t>=0&&t<r.length){const e=r.rows[t].alignments.filter((e=>e.containsLocation(n,this.showSoftClips)));if(e.length>0)return e[0]}}}if(i<minGroupY&&t.downsampledIntervals)for(const e of t.downsampledIntervals)if(e.start<=n&&e.end>=n)return e}getConnectorColor(e){if(this.pairConnectorColor)return this.pairConnectorColor;let t=this.colorBy;switch(t&&t.startsWith("tag:")&&(t.substring(4),t="tag"),t){case"strand":case"firstOfPairStrand":case"pairOrientation":case"tag":return this.color?"function"==typeof this.color?this.color(e):this.color:"rgb(200, 200, 200)";default:return this.getAlignmentColor(e)}}getAlignmentColor(e){let t;t=this.color?"function"==typeof this.color?this.color(e):this.color:"rgb(185, 185, 185)";let i,n=this.colorBy;switch(n&&n.startsWith("tag:")&&(i=n.substring(4),n="tag"),n){case"basemod":case"basemod2":t=e.strand?this.baseModPosStrandColor:this.baseModNegStrandColor;break;case"strand":t=e.strand?this.posStrandColor:this.negStrandColor;break;case"firstOfPairStrand":const r=e.firstOfPairStrand;void 0!==r&&(t=r?this.posStrandColor:this.negStrandColor);break;case"unexpectedPair":case"pairOrientation":if(e.pairOrientation){const i=fu[this.expectedPairOrientation];if(i){const n=this.pairColors[i[e.pairOrientation]];if(n){t=n;break}}}if("pairOrientation"===n)break;case"tlen":case"fragmentLength":e.mate&&e.isMateMapped()&&(e.mate.chr!==e.chr?t=Gh(e.mate.chr):this.minTemplateLength&&Math.abs(e.fragmentLength)<this.minTemplateLength?t=this.smallTLENColor:this.maxTemplateLength&&Math.abs(e.fragmentLength)>this.maxTemplateLength&&(t=this.largeTLENColor));break;case"tag":const s=e.tags()[i];void 0!==s&&(this.bamColorTag===i&&(t=un.createColorStringSafe(s)),this.colorTable||(this.colorTable=new Kn(this.tagColorPallete)),t=this.colorTable.getColor(s))}return t}get nucleotideColors(){return this.browser.nucleotideColors}get minTemplateLength(){return void 0!==this.minTLEN?this.minTLEN:this.parent._pairedEndStats?this.parent._pairedEndStats.minTLEN:0}get maxTemplateLength(){return void 0!==this.maxTLEN?this.maxTLEN:this.parent._pairedEndStats?this.parent._pairedEndStats.maxTLEN:1e3}getState(){const e=super.getState();return this.highlightedReads&&(e.highlightedReads=Array.from(this.highlightedReads)),e}get name(){return this.parent.name}set name(e){this.parent.name=e}get color(){return this.parent.color}set color(e){this.parent.color=e}get trackView(){return this.parent.trackView}get getCachedAlignmentContainers(){return this.parent.getCachedAlignmentContainers}get sortObject(){return this.parent.sortObject}set sortObject(e){this.parent.sortObject=e}addPairedChordsForViewport(e){return this.parent.addPairedChordsForViewport(e)}addSplitChordsForViewport(e){return this.parent.addSplitChordsForViewport(e)}}function ap(e,t){let i;return i=e<5?.1:Math.max(.1,Math.min(1,.1+.9*(e-5)/15)),i=Math.round(10*i)/10,i<1&&(t=un.addAlpha(t,i)),t}function cp(){"FULL"!==this.displayMode||this.browser.isTrackPanning()||this.repackAlignments()}function lp(e,t,i,n,r,s,o,a,c){const l=o.baseModCounts,h=o.coverageMap;if(l){let o;const d=a.split(":");2==d.length&&(a=d[0],o=d[1]);const u=Array.from(l.allModifications);u.sort(nu.compare);const f=h.getTotalCount(s);if(!u.filter((e=>o?o===e.modification:!e.modification.startsWith("NONE_"))).find((e=>l.getCount(s,e,0,!1)>0)))return;for(let d of u){if(d.modification.startsWith("NONE_")&&"basemod2"!==a)continue;if(o&&o!==d.modification&&!d.modification.startsWith("NONE_"))continue;const u=d.base,p=ao(u),g=h.getCount(s,u)+h.getCount(s,p),m=l.simplexModifications.has(d.modification)?h.getPosCount(s,u)+h.getNegCount(s,p):g;if(0==m)continue;const w="basemod2"===a,b=l.getCount(s,d,c,w);if(0==b)continue;const F=g/f*(b/m),v=Math.round(F*r),y=l.getLikelihoodSum(s,d,c,w)/b,A=i-v,C=np(d.modification,y,a);e.fillStyle=C,e.fillRect(t,A,n,v),i=A}}}class hp{constructor(e,t){this.featureType="numeric",this.parent=t,this.featureSource=t.featureSource,this.paintAxis=hl,this.top=0,this.autoscale=e.autoscale||void 0===e.max,e.coverageColor&&(this.color=e.coverageColor),this.autoscale||(this.dataRange={min:e.min||0,max:e.max})}get height(){return this.parent.coverageTrackHeight}draw(e){const t=e.pixelTop;e.pixelHeight;const i=this.parent.browser.nucleotideColors;if(t>this.height)return;const n=e.context,r=e.features,s=r.coverageMap;let o;s.refSeq&&(o=s.refSeq.toUpperCase());const a=e.bpPerPixel,c=e.bpStart,l=c+e.pixelWidth*a+1;let h;h=this.color?this.color:this.parent.color&&"function"!=typeof this.parent.color?un.darkenLighten(this.parent.color,-35):"rgb(150, 150, 150)",fr.setProperties(n,{fillStyle:h,strokeStyle:h});const d=Math.max(1,1/a);for(let e=0,t=s.coverage.length;e<t;e++){const t=s.bpStart+e;if(t<c)continue;if(t>l)break;const i=s.coverage[e];if(!i)continue;const r=i.total/this.dataRange.max*this.height,o=this.height-r,h=(t-c)/a;fr.fillRect(n,h,o,d,r)}if(o)for(let e=0,t=s.coverage.length;e<t;e++){const t=s.bpStart+e;if(t<c)continue;if(t>l)break;const h=s.coverage[e];if(!h)continue;const u=h.total/this.dataRange.max*this.height;let f=this.height-u;const p=Math.floor((t-c)/a),g=o[e];if(this.parent.colorBy&&this.parent.colorBy.startsWith("basemod"))lp(n,p,this.height,d,u,t,r,this.parent.colorBy,this.parent.baseModificationThreshold);else if(h.isMismatch(g)){fr.setProperties(n,{fillStyle:i[g]}),fr.fillRect(n,p,f,d,u);let e=0;for(let t of["A","C","T","G"]){const r=(h["pos"+t]+h["neg"+t])/this.dataRange.max*this.height;f=this.height-r-e,e+=r,fr.setProperties(n,{fillStyle:i[t]}),fr.fillRect(n,p,f,d,r)}}}}getClickedObject(e){let t=e.viewport.cachedFeatures;if(!t||0===t.length)return;const i=Math.floor(e.genomicLocation),n=t.coverageMap,r=Math.floor(i-n.bpStart),s=n.coverage[r];return s?{coverage:s,baseModCounts:t.baseModCounts,hoverText:()=>n.coverage[r].hoverText()}:void 0}popupData(e){const t=[],{coverage:i,baseModCounts:n}=this.getClickedObject(e);if(i){const r=Math.floor(e.genomicLocation),s=e.viewport.referenceFrame;t.push(s.chr+":"+F(1+r)),t.push({name:"Total Count",value:i.total});let o=i.posA+i.negA;o>0&&(o=o.toString()+" ("+Math.round(o/i.total*100)+"%, "+i.posA+"+, "+i.negA+"- )"),t.push({name:"A",value:o}),o=i.posC+i.negC,o>0&&(o=o.toString()+" ("+Math.round(o/i.total*100)+"%, "+i.posC+"+, "+i.negC+"- )"),t.push({name:"C",value:o}),o=i.posG+i.negG,o>0&&(o=o.toString()+" ("+Math.round(o/i.total*100)+"%, "+i.posG+"+, "+i.negG+"- )"),t.push({name:"G",value:o}),o=i.posT+i.negT,o>0&&(o=o.toString()+" ("+Math.round(o/i.total*100)+"%, "+i.posT+"+, "+i.negT+"- )"),t.push({name:"T",value:o}),o=i.posN+i.negN,o>0&&(o=o.toString()+" ("+Math.round(o/i.total*100)+"%, "+i.posN+"+, "+i.negN+"- )"),t.push({name:"N",value:o}),t.push("<HR/>"),t.push({name:"DEL",value:i.del.toString()}),t.push({name:"INS",value:i.ins.toString()}),n&&(t.push("<hr/>"),t.push(...n.popupData(r,this.parent.colorBy)))}return t}}class dp extends Pa{static defaults={alleleFreqThreshold:.2,visibilityWindow:3e4,showCoverage:!0,showAlignments:!0,height:300,coverageTrackHeight:50,baseModificationThreshold:0};constructor(e,t){super(e,t)}init(e){this.type="alignment",this.featureSource=new bf(e,this.browser);const t=Object.assign({parent:this},e);this.coverageTrack=new hp(t,this);const i=Object.assign({parent:this},e);this.alignmentTrack=new op(i,this.browser),super.init(e),this.showAlignments||(this._height=this.coverageTrackHeight),e.sort&&(Array.isArray(e.sort)?this.assignSort(e.sort[0]):this.assignSort(e.sort))}dispose(){this.alignmentTrack.dispose()}setHighlightedReads(e,t){this.alignmentTrack.setHighlightedReads(e,t),this.updateViews()}get expectedPairOrientation(){return this.alignmentTrack.expectedPairOrientation}get viewAsPairs(){return this.alignmentTrack.viewAsPairs}get colorBy(){return this.alignmentTrack.colorBy}set height(e){this._height=e,this.showAlignments&&(this.alignmentTrack.height=this.showCoverage?e-this.coverageTrackHeight:e)}get height(){return this._height}sort(e){e=this.assignSort(e);for(let t of this.trackView.viewports)if(t.containsPosition(e.chr,e.position)){const i=t.cachedFeatures;i&&(i.sortRows(e),t.repaint())}}assignSort(e){if(e.locus){const t=function(e){const t=e.split(":"),i=t[1].split("-"),n={chr:t[0],start:Number.parseInt(i[0].replace(/,/g,""))-1};return i.length>1?n.end=Number.parseInt(i[1].replace(/,/g,"")):n.end=n.start+1,n}(e.locus);e.chr=t.chr,e.position=t.start}else e.position--;return e.direction="ASC"===e.direction||!0===e.direction,e.chr=this.browser.genome.getChromosomeName(e.chr),this.sortObject=e,this.sortObject}async getFeatures(e,t,i,n,r){const s=await this.featureSource.getAlignments(e,t,i);if(s.viewport=r,s.hasPairs&&!this._pairedEndStats&&!this.config.maxFragmentLength){const e=new Yf(s.allAlignments(),this.config);e.totalCount>99&&(this._pairedEndStats=e)}s.pack(this.alignmentTrack);const o=this.sortObject;return o&&o.chr===e&&o.position>=t&&o.position<=i&&s.sortRows(o),this.alignmentTrack.hasPairs=this.alignmentTrack.hasPairs||s.hasPairs,s}computePixelHeight(e){return(this.showCoverage?this.coverageTrackHeight:0)+(this.showAlignments?this.alignmentTrack.computePixelHeight(e):0)}draw(e){fr.fillRect(e.context,0,e.pixelTop,e.pixelWidth,e.pixelHeight,{fillStyle:"rgb(255, 255, 255)"}),!0===this.showCoverage&&this.coverageTrackHeight>0?(this.trackView.axisCanvas.style.display="block",this.coverageTrack.draw(e)):this.trackView.axisCanvas.style.display="none",!0===this.showAlignments&&(this.alignmentTrack.setTop(this.coverageTrack,this.showCoverage),this.alignmentTrack.draw(e))}paintAxis(e,t,i){this.coverageTrack.paintAxis(e,t,this.coverageTrackHeight)}contextMenuItemList(e){return this.alignmentTrack.contextMenuItemList(e)}popupData(e){return!0===this.showCoverage&&e.y>=this.coverageTrack.top&&e.y<this.coverageTrackHeight?this.coverageTrack.popupData(e):this.alignmentTrack.popupData(e)}clickedFeatures(e){let t;return t=!0===this.showCoverage&&e.y>=this.coverageTrack.top&&e.y<this.coverageTrackHeight?this.coverageTrack.getClickedObject(e):this.alignmentTrack.getClickedObject(e),t?[t]:void 0}hoverText(e){if(!0===this.showCoverage&&e.y>=this.coverageTrack.top&&e.y<this.coverageTrackHeight){const t=this.coverageTrack.getClickedObject(e);if(t)return t.hoverText()}}menuItemList(){let e=[];e=e.concat(this.numericDataMenuItems()),e=e.concat(this.alignmentTrack.menuItemList());const t=()=>{if(!this.autoHeight){const e=(this.showCoverage?this.coverageTrackHeight:0)+(this.showAlignments?this.alignmentTrack.height:0);this.trackView.setTrackHeight(e)}};return e.push("<hr/>"),e.push({element:Ta("Show Coverage",this.showCoverage),click:function(){this.showCoverage=!this.showCoverage,t(),this.trackView.checkContentHeight(),this.trackView.repaintViews()}}),e.push({element:Ta("Show Alignments",this.showAlignments),click:function(){this.showAlignments=!this.showAlignments,t(),this.trackView.checkContentHeight(),this.trackView.repaintViews()}}),e}getState(){const e=super.getState();return this.sortObject&&(e.sort={chr:this.sortObject.chr,position:this.sortObject.position+1,option:this.sortObject.option,direction:this.sortObject.direction?"ASC":"DESC"}),Object.assign(e,this.alignmentTrack.getState()),e}getCachedAlignmentContainers(){return this.trackView.viewports.map((e=>e.cachedFeatures))}get dataRange(){return this.coverageTrack.dataRange}set dataRange(e){this.coverageTrack.dataRange=e}get logScale(){return this.coverageTrack.logScale}set logScale(e){this.coverageTrack.logScale=e}get autoscale(){return this.coverageTrack.autoscale}set autoscale(e){this.coverageTrack.autoscale=e}addPairedChordsForViewport(e){const t=this.maxTemplateLength,i=[],n=e.referenceFrame;for(let r of e.cachedFeatures.allAlignments())r.end>=n.start&&r.start<=n.end&&(r.paired?r.end-r.start>t&&i.push(r):r.mate&&r.mate.chr&&(r.mate.chr!==r.chr||Math.max(r.fragmentLength)>t)&&i.push(r));Kf((e=>{const t=[];for(let i of e)if(i.paired)i.firstAlignment&&i.secondAlignment&&t.push({uniqueId:i.readName,refName:Wf(i.firstAlignment.chr),start:i.firstAlignment.start,end:i.firstAlignment.end,mate:{refName:Wf(i.secondAlignment.chr),start:i.secondAlignment.start,end:i.secondAlignment.end}});else{const e=i.mate;e&&e.chr&&e.position&&t.push({uniqueId:i.readName,refName:Wf(i.chr),start:i.start,end:i.end,mate:{refName:Wf(e.chr),start:e.position-1,end:e.position}})}return t})(i),this,n,.02)}addSplitChordsForViewport(e){const t=[],i=e.referenceFrame;for(let n of e.cachedFeatures.allAlignments()){const e=n.hasTag("SA");n.end>=i.start&&n.start<=i.end&&e&&t.push(n)}Kf((e=>{const t=e=>{const t=Su(e.tags().SA);let n=0;for(let r of t)r.start!==e.start&&i.push({uniqueId:`${e.readName}_${n++}`,refName:Wf(e.chr),start:e.start,end:e.end,mate:{refName:Wf(r.chr),start:r.start,end:r.start+r.lenOnRef}})},i=[];for(let i of e)i.paired?(t(i.firstAlignment),i.secondAlignment&&t(i.secondAlignment)):t(i);return i})(t),this,i,.02)}}const up="rgb(180,25,137)";class fp extends Pa{static defaults={height:250,theta:Math.PI/4,arcOrientation:"UP",showBlocks:!0,blockHeight:3,thickness:1,alpha:.02,logScale:!0};constructor(e,t){super(e,t)}init(e){super.init(e),!1===e.arcOrientation?this.arcOrientation="DOWN":!0===e.arcOrientation?this.arcOrientation="UP":e.arcOrientation?this.arcOrientation=e.arcOrientation.toUpperCase():this.arcOrientation="UP",this.sinTheta=Math.sin(this.theta),this.cosTheta=Math.cos(this.theta),this.arcType=function(e){if(!e.arcType)return"nested";switch(e.arcType){case"chiapet":return"inView";case"chiapetoutbound":return"partialInView";default:return e.arcType}}(e),this.painter={flipAxis:"DOWN"===this.arcOrientation,dataRange:this.dataRange,paintAxis:hl},e.valueColumn?(this.valueColumn=e.valueColumn,this.hasValue=!0):e.useScore&&(this.hasValue=!0,this.valueColumn="score"),e.max?(this.dataRange={min:e.min||0,max:e.max},this.autoscale=!1):this.autoscale=!0,e.featureSource?(this.featureSource=e.featureSource,delete e._featureSource):(this.featureSource=Hl(e,this.browser.genome),this.featureSource.getWGFeatures=bp)}async postInit(){if("function"!=typeof this.featureSource.getHeader||(this.header=await this.featureSource.getHeader(),!this.disposed))return this.header&&this.setTrackProperties(this.header),void 0===this.visibilityWindow&&"function"==typeof this.featureSource.defaultVisibilityWindow&&(this.visibilityWindow=await this.featureSource.defaultVisibilityWindow(),this.featureSource.visibilityWindow=this.visibilityWindow),this._initialColor=this.color||this.constructor.defaultColor,this._initialAltColor=this.altColor||this.constructor.defaultColor,this}get supportsWholeGenome(){return"function"!=typeof this.featureSource.supportsWholeGenome||this.featureSource.supportsWholeGenome()}async getFeatures(e,t,i){const n=this.visibilityWindow,r=await this.featureSource.getFeatures({chr:e,start:t,end:i,visibilityWindow:n});return void 0===this.hasValue&&r&&r.length>0&&(this.hasValue=void 0!==r[0].score),r}draw(e){"proportional"===this.arcType||"inView"===this.arcType||"partialInView"===this.arcType?this.drawProportional(e):this.drawNested(e)}drawNested(e){const t=e.context,i=e.pixelWidth,n=e.pixelHeight,r=e.viewportWidth,s=e.bpPerPixel,o=e.bpStart,a=s;fr.fillRect(t,0,e.pixelTop,i,n,{fillStyle:"rgb(255, 255, 255)"});const c=e.features;if(c){(function(){let e=0;for(let t of c){let n=(t.start-o)/a,r=(t.end-o)/a;n>=0&&r<=i&&(e=Math.max(e,r-n))}let t=Math.min(r,e)/2;if(e>0){let e=(n-10)/t;this.theta=function(e){let t,i=[.01570925532366355,.15838444032453644,.3249196962329063,.5095254494944288,.7265425280053609,.9999999999999999],n=[.031415926535897934,.3141592653589793,.6283185307179586,.9424777960769379,1.2566370614359172,1.5707963267948966];for(t=0;t<i.length&&!(i[t]>e);t++);let r=0===t?0:i[t-1],s=t<i.length?i[t]:1,o=(e-r)/(s-r),a=0===t?0:n[t-1],c=t<n.length?n[t]:Math.PI/2;return Math.min(Math.PI/2,a+o*(c-a))}(e),this.sinTheta=Math.sin(this.theta),this.cosTheta=Math.cos(this.theta)}}).call(this);const s="UP"===this.arcOrientation,l=s?e.pixelHeight:0;t.font="8px sans-serif",t.textAlign="center";for(let e of c){let n;if(e.drawState=void 0,"function"==typeof this.color?n=this.color(e):(n=this.color||e.color||up,n&&this.config.useScore&&(n=wp(n,Zc(e.score)))),t.lineWidth=e.thickness||this.thickness||1,e.chr1===e.chr2||"all"===e.chr){const{m1:c,m2:h}=pp(e,this.browser.genome);let d=Math.round((c-o)/a),u=Math.round((h-o)/a);if(u<0||d>i)continue;let f=u-d;f<3&&(f=3,d--);const p=f/2,g=p/this.sinTheta,m=this.cosTheta*g,w=d+p;let b,F,v;if(s?(b=this.height+m,F=Math.PI+Math.PI/2-this.theta,v=Math.PI+Math.PI/2+this.theta):(b=-m,F=Math.PI/2-this.theta,v=Math.PI/2+this.theta),this.showBlocks&&"all"!==e.chr){const i=(e.start1-o)/a,n=(e.end1-o)/a,r=(e.start2-o)/a,c=(e.end2-o)/a,h=s?-this.blockHeight:this.blockHeight;t.fillRect(i,l,n-i,h),t.fillRect(r,l,c-r,h)}n&&!this.config.useScore&&f>r&&(n=wp(n,this.alpha)),t.strokeStyle=n,t.fillStyle=n,t.beginPath(),t.arc(w,b,g,F,v,!1),t.stroke(),e.drawState={xc:w,yc:b,r:g}}else{let r=Math.round((e.start-o)/a),c=Math.round((e.end-o)/a);if(c<0||r>i)continue;let l=c-r;l<3&&(l=3,r--);const h=e.chr===e.chr1?e.chr2:e.chr1;t.strokeStyle=n,t.fillStyle=wp(Gh(h),.5),s?(t.fillRect(r,this.height/2,l,this.height/2),t.fillText(h,r+l/2,this.height/2-5),e.drawState={x:r,y:this.height/2,w:l,h:this.height/2}):(t.fillRect(r,0,l,this.height/2),t.fillText(h,r+l/2,this.height/2+13),e.drawState={x:r,y:0,w:l,h:this.height/2})}}}}getScaleFactor(e,t,i,n){return n?i/(Math.log10(t+1)-(e<=0?0:Math.log10(e+1))):i/(t-e)}drawProportional(e){const t=e.context,i=e.pixelWidth,n=e.pixelHeight,r=e.bpPerPixel,s=e.bpStart,o=r,a=e.referenceFrame.start,c=e.referenceFrame.end,l="UP"===this.arcOrientation;fr.fillRect(t,0,e.pixelTop,i,n,{fillStyle:"rgb(255, 255, 255)"});const h=e.features;if(h&&h.length>0){const n=0,r=this.getScaleFactor(n,this.dataRange.max,e.pixelHeight-1,this.logScale),d=l?e.pixelHeight:0;for(let e of h){e.drawState=void 0;const n=this.valueColumn?e[this.valueColumn]:e.score;if(void 0===n||Number.isNaN(n))continue;const h=Math.round((this.logScale?Math.log10(n+1):n)*r);if(e.chr1===e.chr2||"all"===e.chr){const{m1:i,m2:r}=pp(e,this.browser.genome);let u=Math.round((i-s)/o),f=Math.round((r-s)/o)-u;if(f<3&&(f=3,u--),n<this.dataRange.min||n>this.dataRange.max)continue;if("proportional"!==this.arcType){const e="partialInView"===this.arcType,t=i>=a&&r<=c;let n=!1,s=!1;if(!t&&e&&(n=a<=i&&i<=c,n||(s=a<=r&&r<=c)),!(t||n||s))continue}const p=f/2,g=u+f/2;e.drawState={xc:g,yc:d,radiusX:p,radiusY:h};const m=l;let w;w="function"==typeof this.color?this.color(e):this.color||e.color||up;const b=this.config.useScore?wp(w,Zc(e.score)):w;if(t.strokeStyle=b,t.lineWidth=e.thickness||this.thickness||1,!0===t.isSVG?t.strokeEllipse(g,d,p,h,0,0,Math.PI,m):(t.beginPath(),t.ellipse(g,d,p,h,0,0,Math.PI,m),t.stroke()),this.alpha&&(t.fillStyle=wp(w,this.alpha),!0===t.isSVG?t.fillEllipse(g,d,p,h,0,0,Math.PI,m):t.fill()),this.showBlocks&&"all"!==e.chr){t.fillStyle=w;const i=(e.start1-s)/o,n=(e.end1-s)/o,r=(e.start2-s)/o,a=(e.end2-s)/o,c=l?-this.blockHeight:this.blockHeight;t.fillRect(i,d,n-i,c),t.fillRect(r,d,a-r,c)}}else{let r=Math.round((e.start-s)/o),a=Math.round((e.end-s)/o);if(a<0||r>i||n<this.dataRange.min||n>this.dataRange.max)continue;const c=Math.min(h,this.height-13);let d=a-r;d<3&&(d=3,r--);const u=e.chr===e.chr1?e.chr2:e.chr1;if(t.font="8px sans-serif",t.textAlign="center",t.fillStyle=wp(Gh(u),.5),l){const i=this.height-c;t.fillRect(r,i,d,c),t.fillText(u,r+d/2,i-5),e.drawState={x:r,y:i,w:d,h:c}}else t.fillRect(r,0,d,c),t.fillText(u,r+d/2,c+13),e.drawState={x:r,y:0,w:d,h:c}}}}}clearAxis(e,t,i){fr.fillRect(e,0,0,t,i,{fillStyle:"rgb(255, 255, 255)"})}paintAxis(e,t,i){const n={min:0,max:this.dataRange.max};"proportional"===this.arcType||"inView"===this.arcType||"partialInView"===this.arcType?(this.painter.flipAxis="DOWN"===this.arcOrientation,this.painter.dataRange=n,this.painter.paintAxis(e,t,i)):this.clearAxis(e,t,i)}menuItemList(){let e=[];if(this.hasValue){e.push("<hr/>");const t={nested:"Nested",proportional:"Proportional - All",inView:"Proportional - Both Ends in View",partialInView:"Proportional - One End in View"};e.push("<b>Arc Type</b>");for(let i of["nested","proportional","inView","partialInView"])e.push({element:Ta(t[i],i===this.arcType),click:function(){this.arcType=i,this.trackView.repaintViews()}})}return e.push("<hr/>"),e.push({name:"Toggle arc direction",click:function(){this.arcOrientation="UP"===this.arcOrientation?"DOWN":"UP",this.trackView.repaintViews()}}),e.push({name:this.showBlocks?"Hide Blocks":"Show Blocks",click:function(){this.showBlocks=!this.showBlocks,this.trackView.repaintViews()}}),"proportional"!==this.arcType&&"inView"!==this.arcType&&"partialInView"!==this.arcType||(e=e.concat(this.numericDataMenuItems())),this.browser.circularView&&(e.push("<hr/>"),e.push({label:"Add interactions to circular view",click:function(){for(let e of this.trackView.viewports)this.addChordsForViewport(e.referenceFrame)}})),e}contextMenuItemList(e){if(this.browser.circularView){const t=e.viewport,i=[];return i.push({label:"Add interactions to circular view",click:()=>{const e=t.referenceFrame;this.addChordsForViewport(e)}}),i.push("<hr/>"),i}}addChordsForViewport(e){let t;if("all"===e.chr)t=Object.values(this.featureSource.getAllFeatures()).flat();else{t=this.featureSource.featureCache.queryFeatures(e.chr,e.start,e.end).filter((e=>e.drawState))}if(0===t.length)return;Kf(t.map((e=>{const t=e._f||e;return{uniqueId:`${t.chr1}:${t.start1}-${t.end1}_${t.chr2}:${t.start2}-${t.end2}`,refName:Wf(t.chr1),start:t.start1,end:t.end1,mate:{refName:Wf(t.chr2),start:t.start2,end:t.end2}}})),this,e,.5)}doAutoscale(e){let t=0;if(e)for(let i of e){const e=this.valueColumn?i[this.valueColumn]:i.score;Number.isNaN(e)||(t=Math.max(t,e))}return{min:0,max:t}}popupData(e,t){void 0===t&&(t=this.clickedFeatures(e));const i=[];for(let e of t){const t=e._||e;if(i.push({name:"Region 1",value:gp(t.chr1,t.start1,t.end1,t.strand1)}),i.push({name:"Region 2",value:gp(t.chr2,t.start2,t.end2,t.strand2)}),t.name&&i.push({name:"Name",value:t.name}),void 0!==t.value&&i.push({name:"Value",value:t.value}),void 0!==t.score&&i.push({name:"Score",value:t.score}),t.extras&&this.header&&this.header.columnNames){const e=this.header.columnNames,n=this.header.hiccups?6:10;for(let r=n;r<e.length;r++)this.header.colorColumn!==r&&("info"===e[r]?Fp(i,t.extras[r-n]):i.push({name:e[r],value:t.extras[r-n]}))}break}return i}clickedFeatures(e){const t=e.viewport.cachedFeatures,i=[];if(t){const n="proportional"===this.arcType||"inView"===this.arcType||"partialInView"===this.arcType;for(let r of t)if(r.drawState)if(r.chr1===r.chr2||"all"===r.chr)if(n){const{xc:t,yc:n,radiusX:s,radiusY:o}=r.drawState,a=e.canvasX-t,c=e.canvasY-n,l=a/s*(a/s)+c/o*(c/o);l<=1&&i.push({score:1/l,feature:r})}else{const{xc:t,yc:n,r:s}=r.drawState,o=e.canvasX-t,a=e.canvasY-n,c=Math.abs(Math.sqrt(o*o+a*a)-s);c<5&&i.push({score:c,feature:r})}else{const{x:t,y:n,w:s,h:o}=r.drawState,a=5;if(e.canvasX>=t-a&&e.canvasX<=t+s+a&&e.canvasY>=n&&e.canvasY<=n+o){const n=-Math.abs(e.canvasX-(t+s/2));i.push({score:n,feature:r});break}}}return i.length>1&&i.sort(((e,t)=>e.score-t.score)),i.map((e=>e.feature))}}function pp(e,t){let i=(e.start1+e.end1)/2,n=(e.start2+e.end2)/2;if("all"===e.chr&&(i=t.getGenomeCoordinate(e.chr1,i),n=t.getGenomeCoordinate(e.chr2,n)),i>n){const e=i;i=n,n=e}return{m1:i,m2:n}}function gp(e,t,i,n){return n&&"."!==n?`${e}:${F(t+1)}-${F(i)} (${n})`:`${e}:${F(t+1)}-${F(i)}`}const mp=new Map;function wp(e,t){const i=`${e}_${t}`;let n=mp.get(i);return n||(n=un.addAlpha(e,t),mp.set(i,n)),n}function bp(e){const t=e=>{const t=Object.assign({},e);return t.chr="all",t.start=i.getGenomeCoordinate(e.chr1,e.start1),t.end=i.getGenomeCoordinate(e.chr2,e.end2),t},i=this.genome;let n,r=0;for(let t of i.wgChromosomeNames){let i=e[t];if(i)for(let e of i)e.dup||(r++,e.score&&(!n||e.score>n.score)&&(n=e))}const s=this.maxWGCount,o=n&&n.score>0&&r>s?5:1,a=Math.floor(s/o),c=n&&n.score>0?Math.log(n.score)/o:Number.MAX_SAFE_INTEGER;let l,h=[],d=[];for(let e=0;e<o;e++)d.push([0]),h.push([]);for(let n of i.wgChromosomeNames){let i=e[n];if(i)for(let e of i)if(!e.dup){const i=e.score?Math.max(0,Math.min(o-1,Math.floor(Math.log(e.score)/c))):0;if(h[i].length<a)h[i].push(t(e));else{const n=a/(d[i]+1);if(Math.random()<n){const n=Math.floor(Math.random()*(a-1));h[i][n]=t(e)}}d[i]++}}if(1===o)l=h[0];else{l=[];for(let e of h)for(let t of e)l.push(t);n&&l.push(t(n)),l.sort((function(e,t){return e.start-t.start})),console.log(l.length)}return l}function Fp(e,t){const i=t.split(";");for(let t of i){const i=t.split("=");2===i.length&&e.push({name:i[0],value:i[1]})}}class vp{constructor(e){var t;this.config=e,this.url=(t=e.path||e.url).includes("//www.dropbox.com")?t.replace("//www.dropbox.com","//dl.dropboxusercontent.com"):t.startsWith("ftp://ftp.ncbi.nlm.nih.gov")?t.replace("ftp://","https://"):t}async read(e,t){const i=this.config.headers||{};if(void 0!==e&&t){const n="bytes="+e+"-"+(e+t-1);i.Range=n}let n=this.url.slice();if(this.config.oauthToken){const e=async function(e){return"function"==typeof e?await Promise.resolve(e()):e}(this.config.oauthToken);i.Authorization=`Bearer ${e}`}this.config.apiKey&&(n=function(e,t,i){const n=e.includes("?")?"&":"?";return e+n+t+"="+i}(n,"key",this.config.apiKey));const r=await fetch(n,{method:"GET",headers:i,redirect:"follow",mode:"cors"}),s=r.status;if(s>=400){const e=Error(r.statusText);throw e.code=s,e}return r.arrayBuffer()}}class yp{constructor(e){this.file=e.file,this.fetchSize=e.fetchSize||16e3,this.maxSize=e.maxSize||1e6,this.buffers=[]}async read(e,t){let i=this.buffers.filter((i=>i.overlaps(e,e+t)));for(let n of i)if(n.contains(e,e+t))return n.slice(e,e+t);if(0===i.length){let i=Math.max(t,this.fetchSize);this.buffers.sort(((e,t)=>e.start-t.start));const n=function(e,t,i){let n=i-1,r=e.length;for(;1+n<r;){const i=n+(r-n>>1);t(e[i])?r=i:n=i}return r}(this.buffers,(t=>t.start>e),0);n<this.buffers.length&&(i=Math.min(i,this.buffers[n].start-e));const r=e,s=await this.file.read(r,i),o=new Ap(r,s);return this.addBuffer(o),o.slice(e,e+t)}{i.sort(((e,t)=>e.start-t.start));const n=[];let r=e;for(let e of i){if(r<e.start){const t=r,i=e.start-r,s=await this.file.read(t,i),o=new Ap(t,s);n.push(o)}n.push(e),r=e.end}const s=e+t;if(s>r){const e=r,t=s-e,i=await this.file.read(e,t),o=new Ap(e,i);n.push(o)}const o=n[0].start,a=function(e){const t=e.reduce(((e,t)=>e+t.byteLength),0),i=new Uint8Array(t);let n=0;for(let t of e)i.set(new Uint8Array(t),n),n+=t.byteLength;return i.buffer}(n.map((e=>e.buffer))),c=new Ap(o,a),l=new Set(i);return this.buffers=this.buffers.filter((e=>!l.has(e))),this.addBuffer(c),c.slice(e,e+t)}}addBuffer(e){const t=this.buffers.reduce(((e,t)=>e+t.size),0)+e.size;if(t>this.maxSize){const e=t-this.maxSize;this.buffers.sort(((e,t)=>e.creationTime-t.creationTime));let i,n=0;for(i=0;i<this.buffers.length&&(n+=this.buffers[i].size,!(n>e));i++);this.buffers=i<this.buffers.length-1?this.buffers.slice(i):[]}e.size<=this.maxSize&&this.buffers.push(e)}}class Ap{constructor(e,t){this.creationTime=Date.now(),this.start=e,this.buffer=t}slice(e,t){if(e<this.start||t-e>this.buffer.byteLength)throw Error("buffer bounds error");return this.buffer.slice(e-this.start,t-this.start)}get end(){return this.start+this.buffer.byteLength}get size(){return this.buffer.byteLength}contains(e,t){return e>=this.start&&t<=this.end}overlaps(e,t){return e>this.start&&e<this.end||t>this.start&&t<this.end}toString(){return`Buffer ${this.creationTime} ${this.start} - ${this.end}`}}class Cp{constructor(e){this.file=e}async read(e,t){if(0===t)return new ArrayBuffer;return(null!=e&&t?this.file.slice(e,e+t):this.file).arrayBuffer()}}var _p=Object.defineProperty,xp=(e,t,i)=>(((e,t,i)=>{t in e?_p(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i})(e,"symbol"!=typeof t?t+"":t,i),i);async function kp(e,t,i=0){var n=new Map;for(let[r,s]of e.entries()){let e=await Bp.unpack_from_async("<"+s,t,i);i+=Bp.calcsize(s),1==e.length&&(e=e[0]),n.set(r,e)}return n}function Ip(e,t,i=0){var n=new Map;for(let[r,s]of e.entries()){let e=Bp.unpack_from("<"+s,t,i);i+=Bp.calcsize(s),1==e.length&&(e=e[0]),n.set(r,e)}return n}function Sp(e){e||e()}function Ep(e){var t="<"+Array.from(e.values()).join("");return Bp.calcsize(t)}function Np(e,t=8){return Math.ceil(e/t)*t}var Mp={u:"Uint",i:"Int",f:"Float"};function Rp(e){var t,i,n=Bp._is_big_endian(e);if(/S/.test(e))t="getString",i=0|((e.match(/S(\d*)/)||[])[1]||1);else{let[n,r,s]=e.match(/[<>=!@]?(i|u|f)(\d*)/);i=parseInt(s||4,10),t="get"+Mp[r]+(8*i).toFixed()}return[t,n,i]}var Bp=new class{constructor(){this.big_endian=function(){const e=new Uint8Array(4);return!((new Uint32Array(e.buffer)[0]=1)&e[0])}(),this.getters={s:"getUint8",b:"getInt8",B:"getUint8",h:"getInt16",H:"getUint16",i:"getInt32",I:"getUint32",l:"getInt32",L:"getUint32",q:"getInt64",Q:"getUint64",f:"getFloat32",d:"getFloat64"},this.byte_lengths={s:1,b:1,B:1,h:2,H:2,i:4,I:4,l:4,L:4,q:8,Q:8,f:4,d:8};let e=Object.keys(this.byte_lengths).join("");this.fmt_size_regex="(\\d*)(["+e+"])"}calcsize(e){for(var t,i=0,n=new RegExp(this.fmt_size_regex,"g");null!==(t=n.exec(e));){let e=parseInt(t[1]||1,10),n=t[2];i+=e*this.byte_lengths[n]}return i}_is_big_endian(e){return!/^</.test(e)&&(!!/^(!|>)/.test(e)||this.big_endian)}async unpack_from_async(e,t,i){i=Number.parseInt(i||0);const n=this.calcsize(e),r=await t.slice(i,i+n);let s=0;for(var o,a=new Dp(r),c=[],l=this._is_big_endian(e),h=new RegExp(this.fmt_size_regex,"g");null!==(o=h.exec(e));){let e=parseInt(o[1]||1,10),t=o[2],i=this.getters[t],n=this.byte_lengths[t];if("s"==t)c.push((new TextDecoder).decode(r.slice(s,s+e))),s+=e;else for(var d=0;d<e;d++)c.push(a[i](s,!l)),s+=n}return c}unpack_from(e,t,i){i=Number.parseInt(i||0);const n=this.calcsize(e),r=t.slice(i,i+n);let s=0;for(var o,a=new Dp(r),c=[],l=this._is_big_endian(e),h=new RegExp(this.fmt_size_regex,"g");null!==(o=h.exec(e));){let e=parseInt(o[1]||1,10),t=o[2],i=this.getters[t],n=this.byte_lengths[t];if("s"==t)c.push((new TextDecoder).decode(r.slice(s,s+e))),s+=e;else for(var d=0;d<e;d++)c.push(a[i](s,!l)),s+=n}return c}};var Dp=class extends DataView{getUint64(e,t){const i=BigInt(this.getUint32(e,t)),n=BigInt(this.getUint32(e+4,t));let r=t?i+(n<<32n):(i<<32n)+n;return Number.parseInt(r)}getInt64(e,t){var i,n;t?(i=this.getUint32(e,!0),n=this.getInt32(e+4,!0)):(n=this.getInt32(e,!1),i=this.getUint32(e+4,!1));let r=BigInt(i)+(BigInt(n)<<32n);return Number.parseInt(r)}getString(e,t,i){const n=this.buffer.slice(e,e+i);return(new TextDecoder).decode(n)}getVLENStruct(e,t,i){return[this.getUint32(e,t),this.getUint64(e+4,t),this.getUint32(e+12,t)]}};function Tp(e){return e.toString(2).length}function zp(e,t,i=0,n=!0){const r=t.slice(i,i+e);let s=new Uint8Array(r);n||s.reverse();let o=s.reduce(((e,t,i)=>e+(t<<8*i)),0);return o}var Lp=class{constructor(e,t){this.buf=e,this.offset=t,this.dtype=this.determine_dtype()}async determine_dtype(){let e=await kp(Hp,this.buf,this.offset);this.offset+=Pp;let t=15&e.get("class_and_version");if(t==Op)return this._determine_dtype_fixed_point(e);if(t==Vp)return this._determine_dtype_floating_point(e);if(t==qp)throw"Time datatype class not supported.";if(t==Qp)return this._determine_dtype_string(e);if(t==Up)throw"Bitfield datatype class not supported.";if(t==jp)return{datatype_class:jp,size:e.get("size")};if(t==Gp)return this._determine_dtype_compound(e);if(t==Wp)return["REFERENCE",e.get("size")];if(t==$p)return this.determine_dtype();if(t==Yp)throw"Array datatype class not supported.";if(t==Kp){let t=this._determine_dtype_vlen(e);if("VLEN_SEQUENCE"==t[0]){t=["VLEN_SEQUENCE",this.determine_dtype()]}return t}throw"Invalid datatype class "+t}_determine_dtype_fixed_point(e){let t=e.get("size");if(![1,2,4,8].includes(t))throw"Unsupported datatype size";var i;var n;return i=(8&e.get("class_bit_field_0"))>0?"i":"u",n=0==(1&e.get("class_bit_field_0"))?"<":">",this.offset+=4,n+i+t.toFixed()}_determine_dtype_floating_point(e){let t=e.get("size");if(![1,2,4,8].includes(t))throw"Unsupported datatype size";var i;return i=0==(1&e.get("class_bit_field_0"))?"<":">",this.offset+=12,i+"f"+t.toFixed()}_determine_dtype_string(e){return"S"+e.get("size").toFixed()}_determine_dtype_vlen(e){return 1!=(1&e.get("class_bit_field_0"))?["VLEN_SEQUENCE",0,0]:["VLEN_STRING",e.get("class_bit_field_0")>>4,1&e.get("class_bit_field_1")]}_determine_dtype_compound(e){throw"Compound type not yet implemented!"}},Hp=new Map([["class_and_version","B"],["class_bit_field_0","B"],["class_bit_field_1","B"],["class_bit_field_2","B"],["size","I"]]),Pp=Ep(Hp);Ep(new Map([["offset","I"],["dimensionality","B"],["reserved_0","B"],["reserved_1","B"],["reserved_2","B"],["permutation","I"],["reserved_3","I"],["dim_size_1","I"],["dim_size_2","I"],["dim_size_3","I"],["dim_size_4","I"]]));var Op=0,Vp=1,qp=2,Qp=3,Up=4,jp=5,Gp=6,Wp=7,$p=8,Kp=9,Yp=10;function Xp(e){let t=e.length;for(;--t>=0;)e[t]=0}Xp(new Array(576)),Xp(new Array(60)),Xp(new Array(512)),Xp(new Array(256)),Xp(new Array(29)),Xp(new Array(30));var Zp=(e,t,i,n)=>{let r=65535&e,s=e>>>16&65535,o=0;for(;0!==i;){o=i>2e3?2e3:i,i-=o;do{r=r+t[n++]|0,s=s+r|0}while(--o);r%=65521,s%=65521}return r|s<<16},Jp=new Uint32Array((()=>{let e,t=[];for(var i=0;i<256;i++){e=i;for(var n=0;n<8;n++)e=1&e?3988292384^e>>>1:e>>>1;t[i]=e}return t})()),eg=(e,t,i,n)=>{const r=Jp,s=n+i;e^=-1;for(let i=n;i<s;i++)e=e>>>8^r[255&(e^t[i])];return~e},tg={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"},ig={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_MEM_ERROR:-4,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8},ng=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),rg=function(e){const t=Array.prototype.slice.call(arguments,1);for(;t.length;){const i=t.shift();if(i){if("object"!=typeof i)throw new TypeError(i+"must be non-object");for(const t in i)ng(i,t)&&(e[t]=i[t])}}return e},sg=e=>{let t=0;for(let i=0,n=e.length;i<n;i++)t+=e[i].length;const i=new Uint8Array(t);for(let t=0,n=0,r=e.length;t<r;t++){let r=e[t];i.set(r,n),n+=r.length}return i},og=!0;try{String.fromCharCode.apply(null,new Uint8Array(1))}catch(ey){og=!1}var ag=new Uint8Array(256);for(let ty=0;ty<256;ty++)ag[ty]=ty>=252?6:ty>=248?5:ty>=240?4:ty>=224?3:ty>=192?2:1;ag[254]=ag[254]=1;var cg=e=>{if("function"==typeof TextEncoder&&TextEncoder.prototype.encode)return(new TextEncoder).encode(e);let t,i,n,r,s,o=e.length,a=0;for(r=0;r<o;r++)i=e.charCodeAt(r),55296==(64512&i)&&r+1<o&&(n=e.charCodeAt(r+1),56320==(64512&n)&&(i=65536+(i-55296<<10)+(n-56320),r++)),a+=i<128?1:i<2048?2:i<65536?3:4;for(t=new Uint8Array(a),s=0,r=0;s<a;r++)i=e.charCodeAt(r),55296==(64512&i)&&r+1<o&&(n=e.charCodeAt(r+1),56320==(64512&n)&&(i=65536+(i-55296<<10)+(n-56320),r++)),i<128?t[s++]=i:i<2048?(t[s++]=192|i>>>6,t[s++]=128|63&i):i<65536?(t[s++]=224|i>>>12,t[s++]=128|i>>>6&63,t[s++]=128|63&i):(t[s++]=240|i>>>18,t[s++]=128|i>>>12&63,t[s++]=128|i>>>6&63,t[s++]=128|63&i);return t},lg=(e,t)=>{const i=t||e.length;if("function"==typeof TextDecoder&&TextDecoder.prototype.decode)return(new TextDecoder).decode(e.subarray(0,t));let n,r;const s=new Array(2*i);for(r=0,n=0;n<i;){let t=e[n++];if(t<128){s[r++]=t;continue}let o=ag[t];if(o>4)s[r++]=65533,n+=o-1;else{for(t&=2===o?31:3===o?15:7;o>1&&n<i;)t=t<<6|63&e[n++],o--;o>1?s[r++]=65533:t<65536?s[r++]=t:(t-=65536,s[r++]=55296|t>>10&1023,s[r++]=56320|1023&t)}}return((e,t)=>{if(t<65534&&e.subarray&&og)return String.fromCharCode.apply(null,e.length===t?e:e.subarray(0,t));let i="";for(let n=0;n<t;n++)i+=String.fromCharCode(e[n]);return i})(s,r)},hg=(e,t)=>{(t=t||e.length)>e.length&&(t=e.length);let i=t-1;for(;i>=0&&128==(192&e[i]);)i--;return i<0||0===i?t:i+ag[e[i]]>t?i:t};var dg=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0},ug=function(e,t){let i,n,r,s,o,a,c,l,h,d,u,f,p,g,m,w,b,F,v,y,A,C,_,x;const k=e.state;i=e.next_in,_=e.input,n=i+(e.avail_in-5),r=e.next_out,x=e.output,s=r-(t-e.avail_out),o=r+(e.avail_out-257),a=k.dmax,c=k.wsize,l=k.whave,h=k.wnext,d=k.window,u=k.hold,f=k.bits,p=k.lencode,g=k.distcode,m=(1<<k.lenbits)-1,w=(1<<k.distbits)-1;e:do{f<15&&(u+=_[i++]<<f,f+=8,u+=_[i++]<<f,f+=8),b=p[u&m];t:for(;;){if(F=b>>>24,u>>>=F,f-=F,F=b>>>16&255,0===F)x[r++]=65535&b;else{if(!(16&F)){if(64&F){if(32&F){k.mode=12;break e}e.msg="invalid literal/length code",k.mode=30;break e}b=p[(65535&b)+(u&(1<<F)-1)];continue t}for(v=65535&b,F&=15,F&&(f<F&&(u+=_[i++]<<f,f+=8),v+=u&(1<<F)-1,u>>>=F,f-=F),f<15&&(u+=_[i++]<<f,f+=8,u+=_[i++]<<f,f+=8),b=g[u&w];;){if(F=b>>>24,u>>>=F,f-=F,F=b>>>16&255,16&F){if(y=65535&b,F&=15,f<F&&(u+=_[i++]<<f,f+=8,f<F&&(u+=_[i++]<<f,f+=8)),y+=u&(1<<F)-1,y>a){e.msg="invalid distance too far back",k.mode=30;break e}if(u>>>=F,f-=F,F=r-s,y>F){if(F=y-F,F>l&&k.sane){e.msg="invalid distance too far back",k.mode=30;break e}if(A=0,C=d,0===h){if(A+=c-F,F<v){v-=F;do{x[r++]=d[A++]}while(--F);A=r-y,C=x}}else if(h<F){if(A+=c+h-F,F-=h,F<v){v-=F;do{x[r++]=d[A++]}while(--F);if(A=0,h<v){F=h,v-=F;do{x[r++]=d[A++]}while(--F);A=r-y,C=x}}}else if(A+=h-F,F<v){v-=F;do{x[r++]=d[A++]}while(--F);A=r-y,C=x}for(;v>2;)x[r++]=C[A++],x[r++]=C[A++],x[r++]=C[A++],v-=3;v&&(x[r++]=C[A++],v>1&&(x[r++]=C[A++]))}else{A=r-y;do{x[r++]=x[A++],x[r++]=x[A++],x[r++]=x[A++],v-=3}while(v>2);v&&(x[r++]=x[A++],v>1&&(x[r++]=x[A++]))}break}if(64&F){e.msg="invalid distance code",k.mode=30;break e}b=g[(65535&b)+(u&(1<<F)-1)]}}break}}while(i<n&&r<o);v=f>>3,i-=v,f-=v<<3,u&=(1<<f)-1,e.next_in=i,e.next_out=r,e.avail_in=i<n?n-i+5:5-(i-n),e.avail_out=r<o?o-r+257:257-(r-o),k.hold=u,k.bits=f},fg=15,pg=new Uint16Array([3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,0,0]),gg=new Uint8Array([16,16,16,16,16,16,16,16,17,17,17,17,18,18,18,18,19,19,19,19,20,20,20,20,21,21,21,21,16,72,78]),mg=new Uint16Array([1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,0,0]),wg=new Uint8Array([16,16,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23,24,24,25,25,26,26,27,27,28,28,29,29,64,64]),bg=(e,t,i,n,r,s,o,a)=>{const c=a.bits;let l,h,d,u,f,p,g=0,m=0,w=0,b=0,F=0,v=0,y=0,A=0,C=0,_=0,x=null,k=0;const I=new Uint16Array(16),S=new Uint16Array(16);let E,N,M,R=null,B=0;for(g=0;g<=fg;g++)I[g]=0;for(m=0;m<n;m++)I[t[i+m]]++;for(F=c,b=fg;b>=1&&0===I[b];b--);if(F>b&&(F=b),0===b)return r[s++]=20971520,r[s++]=20971520,a.bits=1,0;for(w=1;w<b&&0===I[w];w++);for(F<w&&(F=w),A=1,g=1;g<=fg;g++)if(A<<=1,A-=I[g],A<0)return-1;if(A>0&&(0===e||1!==b))return-1;for(S[1]=0,g=1;g<fg;g++)S[g+1]=S[g]+I[g];for(m=0;m<n;m++)0!==t[i+m]&&(o[S[t[i+m]]++]=m);if(0===e?(x=R=o,p=19):1===e?(x=pg,k-=257,R=gg,B-=257,p=256):(x=mg,R=wg,p=-1),_=0,m=0,g=w,f=s,v=F,y=0,d=-1,C=1<<F,u=C-1,1===e&&C>852||2===e&&C>592)return 1;for(;;){E=g-y,o[m]<p?(N=0,M=o[m]):o[m]>p?(N=R[B+o[m]],M=x[k+o[m]]):(N=96,M=0),l=1<<g-y,h=1<<v,w=h;do{h-=l,r[f+(_>>y)+h]=E<<24|N<<16|M}while(0!==h);for(l=1<<g-1;_&l;)l>>=1;if(0!==l?(_&=l-1,_+=l):_=0,m++,0==--I[g]){if(g===b)break;g=t[i+o[m]]}if(g>F&&(_&u)!==d){for(0===y&&(y=F),f+=w,v=g-y,A=1<<v;v+y<b&&(A-=I[v+y],!(A<=0));)v++,A<<=1;if(C+=1<<v,1===e&&C>852||2===e&&C>592)return 1;d=_&u,r[d]=F<<24|v<<16|f-s}}return 0!==_&&(r[f+_]=g-y<<24|64<<16),a.bits=F,0},{Z_FINISH:Fg,Z_BLOCK:vg,Z_TREES:yg,Z_OK:Ag,Z_STREAM_END:Cg,Z_NEED_DICT:_g,Z_STREAM_ERROR:xg,Z_DATA_ERROR:kg,Z_MEM_ERROR:Ig,Z_BUF_ERROR:Sg,Z_DEFLATED:Eg}=ig,Ng=12,Mg=30,Rg=e=>(e>>>24&255)+(e>>>8&65280)+((65280&e)<<8)+((255&e)<<24);function Bg(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new Uint16Array(320),this.work=new Uint16Array(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}var Dg,Tg,zg=e=>{if(!e||!e.state)return xg;const t=e.state;return e.total_in=e.total_out=t.total=0,e.msg="",t.wrap&&(e.adler=1&t.wrap),t.mode=1,t.last=0,t.havedict=0,t.dmax=32768,t.head=null,t.hold=0,t.bits=0,t.lencode=t.lendyn=new Int32Array(852),t.distcode=t.distdyn=new Int32Array(592),t.sane=1,t.back=-1,Ag},Lg=e=>{if(!e||!e.state)return xg;const t=e.state;return t.wsize=0,t.whave=0,t.wnext=0,zg(e)},Hg=(e,t)=>{let i;if(!e||!e.state)return xg;const n=e.state;return t<0?(i=0,t=-t):(i=1+(t>>4),t<48&&(t&=15)),t&&(t<8||t>15)?xg:(null!==n.window&&n.wbits!==t&&(n.window=null),n.wrap=i,n.wbits=t,Lg(e))},Pg=(e,t)=>{if(!e)return xg;const i=new Bg;e.state=i,i.window=null;const n=Hg(e,t);return n!==Ag&&(e.state=null),n},Og=!0,Vg=e=>{if(Og){Dg=new Int32Array(512),Tg=new Int32Array(32);let t=0;for(;t<144;)e.lens[t++]=8;for(;t<256;)e.lens[t++]=9;for(;t<280;)e.lens[t++]=7;for(;t<288;)e.lens[t++]=8;for(bg(1,e.lens,0,288,Dg,0,e.work,{bits:9}),t=0;t<32;)e.lens[t++]=5;bg(2,e.lens,0,32,Tg,0,e.work,{bits:5}),Og=!1}e.lencode=Dg,e.lenbits=9,e.distcode=Tg,e.distbits=5},qg=(e,t,i,n)=>{let r;const s=e.state;return null===s.window&&(s.wsize=1<<s.wbits,s.wnext=0,s.whave=0,s.window=new Uint8Array(s.wsize)),n>=s.wsize?(s.window.set(t.subarray(i-s.wsize,i),0),s.wnext=0,s.whave=s.wsize):(r=s.wsize-s.wnext,r>n&&(r=n),s.window.set(t.subarray(i-n,i-n+r),s.wnext),(n-=r)?(s.window.set(t.subarray(i-n,i),0),s.wnext=n,s.whave=s.wsize):(s.wnext+=r,s.wnext===s.wsize&&(s.wnext=0),s.whave<s.wsize&&(s.whave+=r))),0},Qg={inflateReset:Lg,inflateReset2:Hg,inflateResetKeep:zg,inflateInit:e=>Pg(e,15),inflateInit2:Pg,inflate:(e,t)=>{let i,n,r,s,o,a,c,l,h,d,u,f,p,g,m,w,b,F,v,y,A,C,_=0;const x=new Uint8Array(4);let k,I;const S=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]);if(!e||!e.state||!e.output||!e.input&&0!==e.avail_in)return xg;i=e.state,i.mode===Ng&&(i.mode=13),o=e.next_out,r=e.output,c=e.avail_out,s=e.next_in,n=e.input,a=e.avail_in,l=i.hold,h=i.bits,d=a,u=c,C=Ag;e:for(;;)switch(i.mode){case 1:if(0===i.wrap){i.mode=13;break}for(;h<16;){if(0===a)break e;a--,l+=n[s++]<<h,h+=8}if(2&i.wrap&&35615===l){i.check=0,x[0]=255&l,x[1]=l>>>8&255,i.check=eg(i.check,x,2,0),l=0,h=0,i.mode=2;break}if(i.flags=0,i.head&&(i.head.done=!1),!(1&i.wrap)||(((255&l)<<8)+(l>>8))%31){e.msg="incorrect header check",i.mode=Mg;break}if((15&l)!==Eg){e.msg="unknown compression method",i.mode=Mg;break}if(l>>>=4,h-=4,A=8+(15&l),0===i.wbits)i.wbits=A;else if(A>i.wbits){e.msg="invalid window size",i.mode=Mg;break}i.dmax=1<<i.wbits,e.adler=i.check=1,i.mode=512&l?10:Ng,l=0,h=0;break;case 2:for(;h<16;){if(0===a)break e;a--,l+=n[s++]<<h,h+=8}if(i.flags=l,(255&i.flags)!==Eg){e.msg="unknown compression method",i.mode=Mg;break}if(57344&i.flags){e.msg="unknown header flags set",i.mode=Mg;break}i.head&&(i.head.text=l>>8&1),512&i.flags&&(x[0]=255&l,x[1]=l>>>8&255,i.check=eg(i.check,x,2,0)),l=0,h=0,i.mode=3;case 3:for(;h<32;){if(0===a)break e;a--,l+=n[s++]<<h,h+=8}i.head&&(i.head.time=l),512&i.flags&&(x[0]=255&l,x[1]=l>>>8&255,x[2]=l>>>16&255,x[3]=l>>>24&255,i.check=eg(i.check,x,4,0)),l=0,h=0,i.mode=4;case 4:for(;h<16;){if(0===a)break e;a--,l+=n[s++]<<h,h+=8}i.head&&(i.head.xflags=255&l,i.head.os=l>>8),512&i.flags&&(x[0]=255&l,x[1]=l>>>8&255,i.check=eg(i.check,x,2,0)),l=0,h=0,i.mode=5;case 5:if(1024&i.flags){for(;h<16;){if(0===a)break e;a--,l+=n[s++]<<h,h+=8}i.length=l,i.head&&(i.head.extra_len=l),512&i.flags&&(x[0]=255&l,x[1]=l>>>8&255,i.check=eg(i.check,x,2,0)),l=0,h=0}else i.head&&(i.head.extra=null);i.mode=6;case 6:if(1024&i.flags&&(f=i.length,f>a&&(f=a),f&&(i.head&&(A=i.head.extra_len-i.length,i.head.extra||(i.head.extra=new Uint8Array(i.head.extra_len)),i.head.extra.set(n.subarray(s,s+f),A)),512&i.flags&&(i.check=eg(i.check,n,f,s)),a-=f,s+=f,i.length-=f),i.length))break e;i.length=0,i.mode=7;case 7:if(2048&i.flags){if(0===a)break e;f=0;do{A=n[s+f++],i.head&&A&&i.length<65536&&(i.head.name+=String.fromCharCode(A))}while(A&&f<a);if(512&i.flags&&(i.check=eg(i.check,n,f,s)),a-=f,s+=f,A)break e}else i.head&&(i.head.name=null);i.length=0,i.mode=8;case 8:if(4096&i.flags){if(0===a)break e;f=0;do{A=n[s+f++],i.head&&A&&i.length<65536&&(i.head.comment+=String.fromCharCode(A))}while(A&&f<a);if(512&i.flags&&(i.check=eg(i.check,n,f,s)),a-=f,s+=f,A)break e}else i.head&&(i.head.comment=null);i.mode=9;case 9:if(512&i.flags){for(;h<16;){if(0===a)break e;a--,l+=n[s++]<<h,h+=8}if(l!==(65535&i.check)){e.msg="header crc mismatch",i.mode=Mg;break}l=0,h=0}i.head&&(i.head.hcrc=i.flags>>9&1,i.head.done=!0),e.adler=i.check=0,i.mode=Ng;break;case 10:for(;h<32;){if(0===a)break e;a--,l+=n[s++]<<h,h+=8}e.adler=i.check=Rg(l),l=0,h=0,i.mode=11;case 11:if(0===i.havedict)return e.next_out=o,e.avail_out=c,e.next_in=s,e.avail_in=a,i.hold=l,i.bits=h,_g;e.adler=i.check=1,i.mode=Ng;case Ng:if(t===vg||t===yg)break e;case 13:if(i.last){l>>>=7&h,h-=7&h,i.mode=27;break}for(;h<3;){if(0===a)break e;a--,l+=n[s++]<<h,h+=8}switch(i.last=1&l,l>>>=1,h-=1,3&l){case 0:i.mode=14;break;case 1:if(Vg(i),i.mode=20,t===yg){l>>>=2,h-=2;break e}break;case 2:i.mode=17;break;case 3:e.msg="invalid block type",i.mode=Mg}l>>>=2,h-=2;break;case 14:for(l>>>=7&h,h-=7&h;h<32;){if(0===a)break e;a--,l+=n[s++]<<h,h+=8}if((65535&l)!=(l>>>16^65535)){e.msg="invalid stored block lengths",i.mode=Mg;break}if(i.length=65535&l,l=0,h=0,i.mode=15,t===yg)break e;case 15:i.mode=16;case 16:if(f=i.length,f){if(f>a&&(f=a),f>c&&(f=c),0===f)break e;r.set(n.subarray(s,s+f),o),a-=f,s+=f,c-=f,o+=f,i.length-=f;break}i.mode=Ng;break;case 17:for(;h<14;){if(0===a)break e;a--,l+=n[s++]<<h,h+=8}if(i.nlen=257+(31&l),l>>>=5,h-=5,i.ndist=1+(31&l),l>>>=5,h-=5,i.ncode=4+(15&l),l>>>=4,h-=4,i.nlen>286||i.ndist>30){e.msg="too many length or distance symbols",i.mode=Mg;break}i.have=0,i.mode=18;case 18:for(;i.have<i.ncode;){for(;h<3;){if(0===a)break e;a--,l+=n[s++]<<h,h+=8}i.lens[S[i.have++]]=7&l,l>>>=3,h-=3}for(;i.have<19;)i.lens[S[i.have++]]=0;if(i.lencode=i.lendyn,i.lenbits=7,k={bits:i.lenbits},C=bg(0,i.lens,0,19,i.lencode,0,i.work,k),i.lenbits=k.bits,C){e.msg="invalid code lengths set",i.mode=Mg;break}i.have=0,i.mode=19;case 19:for(;i.have<i.nlen+i.ndist;){for(;_=i.lencode[l&(1<<i.lenbits)-1],m=_>>>24,w=_>>>16&255,b=65535&_,!(m<=h);){if(0===a)break e;a--,l+=n[s++]<<h,h+=8}if(b<16)l>>>=m,h-=m,i.lens[i.have++]=b;else{if(16===b){for(I=m+2;h<I;){if(0===a)break e;a--,l+=n[s++]<<h,h+=8}if(l>>>=m,h-=m,0===i.have){e.msg="invalid bit length repeat",i.mode=Mg;break}A=i.lens[i.have-1],f=3+(3&l),l>>>=2,h-=2}else if(17===b){for(I=m+3;h<I;){if(0===a)break e;a--,l+=n[s++]<<h,h+=8}l>>>=m,h-=m,A=0,f=3+(7&l),l>>>=3,h-=3}else{for(I=m+7;h<I;){if(0===a)break e;a--,l+=n[s++]<<h,h+=8}l>>>=m,h-=m,A=0,f=11+(127&l),l>>>=7,h-=7}if(i.have+f>i.nlen+i.ndist){e.msg="invalid bit length repeat",i.mode=Mg;break}for(;f--;)i.lens[i.have++]=A}}if(i.mode===Mg)break;if(0===i.lens[256]){e.msg="invalid code -- missing end-of-block",i.mode=Mg;break}if(i.lenbits=9,k={bits:i.lenbits},C=bg(1,i.lens,0,i.nlen,i.lencode,0,i.work,k),i.lenbits=k.bits,C){e.msg="invalid literal/lengths set",i.mode=Mg;break}if(i.distbits=6,i.distcode=i.distdyn,k={bits:i.distbits},C=bg(2,i.lens,i.nlen,i.ndist,i.distcode,0,i.work,k),i.distbits=k.bits,C){e.msg="invalid distances set",i.mode=Mg;break}if(i.mode=20,t===yg)break e;case 20:i.mode=21;case 21:if(a>=6&&c>=258){e.next_out=o,e.avail_out=c,e.next_in=s,e.avail_in=a,i.hold=l,i.bits=h,ug(e,u),o=e.next_out,r=e.output,c=e.avail_out,s=e.next_in,n=e.input,a=e.avail_in,l=i.hold,h=i.bits,i.mode===Ng&&(i.back=-1);break}for(i.back=0;_=i.lencode[l&(1<<i.lenbits)-1],m=_>>>24,w=_>>>16&255,b=65535&_,!(m<=h);){if(0===a)break e;a--,l+=n[s++]<<h,h+=8}if(w&&!(240&w)){for(F=m,v=w,y=b;_=i.lencode[y+((l&(1<<F+v)-1)>>F)],m=_>>>24,w=_>>>16&255,b=65535&_,!(F+m<=h);){if(0===a)break e;a--,l+=n[s++]<<h,h+=8}l>>>=F,h-=F,i.back+=F}if(l>>>=m,h-=m,i.back+=m,i.length=b,0===w){i.mode=26;break}if(32&w){i.back=-1,i.mode=Ng;break}if(64&w){e.msg="invalid literal/length code",i.mode=Mg;break}i.extra=15&w,i.mode=22;case 22:if(i.extra){for(I=i.extra;h<I;){if(0===a)break e;a--,l+=n[s++]<<h,h+=8}i.length+=l&(1<<i.extra)-1,l>>>=i.extra,h-=i.extra,i.back+=i.extra}i.was=i.length,i.mode=23;case 23:for(;_=i.distcode[l&(1<<i.distbits)-1],m=_>>>24,w=_>>>16&255,b=65535&_,!(m<=h);){if(0===a)break e;a--,l+=n[s++]<<h,h+=8}if(!(240&w)){for(F=m,v=w,y=b;_=i.distcode[y+((l&(1<<F+v)-1)>>F)],m=_>>>24,w=_>>>16&255,b=65535&_,!(F+m<=h);){if(0===a)break e;a--,l+=n[s++]<<h,h+=8}l>>>=F,h-=F,i.back+=F}if(l>>>=m,h-=m,i.back+=m,64&w){e.msg="invalid distance code",i.mode=Mg;break}i.offset=b,i.extra=15&w,i.mode=24;case 24:if(i.extra){for(I=i.extra;h<I;){if(0===a)break e;a--,l+=n[s++]<<h,h+=8}i.offset+=l&(1<<i.extra)-1,l>>>=i.extra,h-=i.extra,i.back+=i.extra}if(i.offset>i.dmax){e.msg="invalid distance too far back",i.mode=Mg;break}i.mode=25;case 25:if(0===c)break e;if(f=u-c,i.offset>f){if(f=i.offset-f,f>i.whave&&i.sane){e.msg="invalid distance too far back",i.mode=Mg;break}f>i.wnext?(f-=i.wnext,p=i.wsize-f):p=i.wnext-f,f>i.length&&(f=i.length),g=i.window}else g=r,p=o-i.offset,f=i.length;f>c&&(f=c),c-=f,i.length-=f;do{r[o++]=g[p++]}while(--f);0===i.length&&(i.mode=21);break;case 26:if(0===c)break e;r[o++]=i.length,c--,i.mode=21;break;case 27:if(i.wrap){for(;h<32;){if(0===a)break e;a--,l|=n[s++]<<h,h+=8}if(u-=c,e.total_out+=u,i.total+=u,u&&(e.adler=i.check=i.flags?eg(i.check,r,u,o-u):Zp(i.check,r,u,o-u)),u=c,(i.flags?l:Rg(l))!==i.check){e.msg="incorrect data check",i.mode=Mg;break}l=0,h=0}i.mode=28;case 28:if(i.wrap&&i.flags){for(;h<32;){if(0===a)break e;a--,l+=n[s++]<<h,h+=8}if(l!==(4294967295&i.total)){e.msg="incorrect length check",i.mode=Mg;break}l=0,h=0}i.mode=29;case 29:C=Cg;break e;case Mg:C=kg;break e;case 31:return Ig;default:return xg}return e.next_out=o,e.avail_out=c,e.next_in=s,e.avail_in=a,i.hold=l,i.bits=h,(i.wsize||u!==e.avail_out&&i.mode<Mg&&(i.mode<27||t!==Fg))&&qg(e,e.output,e.next_out,u-e.avail_out),d-=e.avail_in,u-=e.avail_out,e.total_in+=d,e.total_out+=u,i.total+=u,i.wrap&&u&&(e.adler=i.check=i.flags?eg(i.check,r,u,e.next_out-u):Zp(i.check,r,u,e.next_out-u)),e.data_type=i.bits+(i.last?64:0)+(i.mode===Ng?128:0)+(20===i.mode||15===i.mode?256:0),(0===d&&0===u||t===Fg)&&C===Ag&&(C=Sg),C},inflateEnd:e=>{if(!e||!e.state)return xg;let t=e.state;return t.window&&(t.window=null),e.state=null,Ag},inflateGetHeader:(e,t)=>{if(!e||!e.state)return xg;const i=e.state;return 2&i.wrap?(i.head=t,t.done=!1,Ag):xg},inflateSetDictionary:(e,t)=>{const i=t.length;let n,r,s;return e&&e.state?(n=e.state,0!==n.wrap&&11!==n.mode?xg:11===n.mode&&(r=1,r=Zp(r,t,i,0),r!==n.check)?kg:(s=qg(e,t,i,i),s?(n.mode=31,Ig):(n.havedict=1,Ag))):xg},inflateInfo:"pako inflate (from Nodeca project)"};var Ug=function(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name="",this.comment="",this.hcrc=0,this.done=!1},jg=Object.prototype.toString,{Z_NO_FLUSH:Gg,Z_FINISH:Wg,Z_OK:$g,Z_STREAM_END:Kg,Z_NEED_DICT:Yg,Z_STREAM_ERROR:Xg,Z_DATA_ERROR:Zg,Z_MEM_ERROR:Jg}=ig;function em(e){this.options=rg({chunkSize:65536,windowBits:15,to:""},e||{});const t=this.options;t.raw&&t.windowBits>=0&&t.windowBits<16&&(t.windowBits=-t.windowBits,0===t.windowBits&&(t.windowBits=-15)),!(t.windowBits>=0&&t.windowBits<16)||e&&e.windowBits||(t.windowBits+=32),t.windowBits>15&&t.windowBits<48&&(15&t.windowBits||(t.windowBits|=15)),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new dg,this.strm.avail_out=0;let i=Qg.inflateInit2(this.strm,t.windowBits);if(i!==$g)throw new Error(tg[i]);if(this.header=new Ug,Qg.inflateGetHeader(this.strm,this.header),t.dictionary&&("string"==typeof t.dictionary?t.dictionary=cg(t.dictionary):"[object ArrayBuffer]"===jg.call(t.dictionary)&&(t.dictionary=new Uint8Array(t.dictionary)),t.raw&&(i=Qg.inflateSetDictionary(this.strm,t.dictionary),i!==$g)))throw new Error(tg[i])}function tm(e,t){const i=new em(t);if(i.push(e),i.err)throw i.msg||tg[i.err];return i.result}em.prototype.push=function(e,t){const i=this.strm,n=this.options.chunkSize,r=this.options.dictionary;let s,o,a;if(this.ended)return!1;for(o=t===~~t?t:!0===t?Wg:Gg,"[object ArrayBuffer]"===jg.call(e)?i.input=new Uint8Array(e):i.input=e,i.next_in=0,i.avail_in=i.input.length;;){for(0===i.avail_out&&(i.output=new Uint8Array(n),i.next_out=0,i.avail_out=n),s=Qg.inflate(i,o),s===Yg&&r&&(s=Qg.inflateSetDictionary(i,r),s===$g?s=Qg.inflate(i,o):s===Zg&&(s=Yg));i.avail_in>0&&s===Kg&&i.state.wrap>0&&0!==e[i.next_in];)Qg.inflateReset(i),s=Qg.inflate(i,o);switch(s){case Xg:case Zg:case Yg:case Jg:return this.onEnd(s),this.ended=!0,!1}if(a=i.avail_out,i.next_out&&(0===i.avail_out||s===Kg))if("string"===this.options.to){let e=hg(i.output,i.next_out),t=i.next_out-e,r=lg(i.output,e);i.next_out=t,i.avail_out=n-t,t&&i.output.set(i.output.subarray(e,e+t),0),this.onData(r)}else this.onData(i.output.length===i.next_out?i.output:i.output.subarray(0,i.next_out));if(s!==$g||0!==a){if(s===Kg)return s=Qg.inflateEnd(this.strm),this.onEnd(s),this.ended=!0,!0;if(0===i.avail_in)break}}return!0},em.prototype.onData=function(e){this.chunks.push(e)},em.prototype.onEnd=function(e){e===$g&&("string"===this.options.to?this.result=this.chunks.join(""):this.result=sg(this.chunks)),this.chunks=[],this.err=e,this.msg=this.strm.msg};var im=function(e,t){return(t=t||{}).raw=!0,tm(e,t)},nm={Inflate:em,inflate:tm,inflateRaw:im,ungzip:tm,constants:ig},{Inflate:rm,inflate:sm,inflateRaw:om,ungzip:am}=nm,cm=sm,lm=am;var hm=new Map([[1,function(e,t){let i=new Uint8Array(e);return cm(i).buffer}],[2,function(e,t){let i=e.byteLength,n=new Uint8Array(i),r=Math.floor(i/t),s=new DataView(e);for(var o=0;o<t;o++)for(var a=0;a<r;a++)n[o+a*t]=s.getUint8(o*r+a);return n.buffer}],[3,function(e,t){return function(e){for(var t=e.byteLength%2!=0,i=e.byteLength-4,n=new DataView(e),r=0,s=0,o=0;o<i-1;o+=2){s=(s+(r=(r+n.getUint16(o,!0))%65535))%65535}if(t){s=(s+(r=(r+n.getUint8(i-1))%65535))%65535}var[a,c]=Bp.unpack_from(">HH",e,i);if(c%=65535,r!=(a%=65535)||s!=c)throw'ValueError("fletcher32 checksum invalid")'}(e),e.slice(0,-4)}]]),dm=class{constructor(e,t){this.fh=e,this.offset=t,this.depth=null}async init(){this.all_nodes=new Map,await this._read_root_node(),await this._read_children()}async _read_children(){let e=this.depth;for(;e>0;){for(var t of this.all_nodes.get(e))for(var i of t.get("addresses"))this._add_node(await this._read_node(i,e-1));e--}}async _read_root_node(){let e=await this._read_node(this.offset,null);this._add_node(e),this.depth=e.get("node_level")}_add_node(e){let t=e.get("node_level");this.all_nodes.has(t)?this.all_nodes.get(t).push(e):this.all_nodes.set(t,[e])}async _read_node(e,t){let i=await this._read_node_header(e,t);return i.set("keys",[]),i.set("addresses",[]),i}async _read_node_header(e){throw"NotImplementedError: must define _read_node_header in implementation class"}},um=class extends dm{constructor(){super(...arguments),xp(this,"B_LINK_NODE",new Map([["signature","4s"],["node_type","B"],["node_level","B"],["entries_used","H"],["left_sibling","Q"],["right_sibling","Q"]]))}async _read_node_header(e,t){let i=await kp(this.B_LINK_NODE,this.fh,e);if(null!=t&&i.get("node_level")!=t)throw"node level does not match";return i}},fm=class extends um{constructor(e,t){super(e,t),xp(this,"NODE_TYPE",0),this.ready=this.init()}async _read_node(e,t){let i=await this._read_node_header(e,t);e+=Ep(this.B_LINK_NODE);let n=[],r=[],s=i.get("entries_used");for(var o=0;o<s;o++){let t=(await Bp.unpack_from_async("<Q",this.fh,e))[0];e+=8;let i=(await Bp.unpack_from_async("<Q",this.fh,e))[0];e+=8,n.push(t),r.push(i)}return n.push((await Bp.unpack_from_async("<Q",this.fh,e))[0]),i.set("keys",n),i.set("addresses",r),i}symbol_table_addresses(){var e=[],t=this.all_nodes.get(0);for(var i of t)e=e.concat(i.get("addresses"));return e}},pm=class extends um{constructor(e,t,i){super(e,t),xp(this,"NODE_TYPE",1),this.dims=i,this.ready=this.init()}async _read_node(e,t){let i=await this._read_node_header(e,t);e+=Ep(this.B_LINK_NODE);var n=[],r=[];let s=i.get("entries_used");for(var o=0;o<s;o++){let[t,i]=await Bp.unpack_from_async("<II",this.fh,e);e+=8;let s="<"+this.dims.toFixed()+"Q",o=Bp.calcsize(s),a=await Bp.unpack_from_async(s,this.fh,e);e+=o;let c=(await Bp.unpack_from_async("<Q",this.fh,e))[0];e+=8,n.push(new Map([["chunk_size",t],["filter_mask",i],["chunk_offset",a]])),r.push(c)}return i.set("keys",n),i.set("addresses",r),i}async construct_data_from_chunks(e,t,i,n){var r,s,o;if(i instanceof Array){let e=i[0];if("REFERENCE"==e){if(8!=i[1])throw"NotImplementedError('Unsupported Reference type')";i="<u8",r="getUint64",s=!1,o=8}else{if("VLEN_STRING"!=e&&"VLEN_SEQUENCE"!=e)throw"NotImplementedError('datatype not implemented')";r="getVLENStruct",s=!1,o=16}}else[r,s,o]=Rp(i);var a=t.reduce((function(e,t){return e*t}),1),c=e.reduce((function(e,t){return e*t}),1);let l=t.length;var h=1;e.slice().map((function(e){let t=h;return h*=e,t}));h=1;var d=t.slice().reverse().map((function(e){let t=h;return h*=e,t})).reverse(),u=new Array(a);let f=c*o;for(var p of this.all_nodes.get(0)){let i=p.get("keys"),a=p.get("addresses"),h=i.length;for(var g=0;g<h;g++){let h=i[g],p=a[g];var m;if(null==n)m=await this.fh.slice(p,p+f);else{m=await this.fh.slice(p,p+h.get("chunk_size"));let e=h.get("filter_mask");m=this._filter_chunk(m,e,n,o)}for(var w=h.get("chunk_offset").slice(),b=w.slice(),F=b.map((function(){return 0})),v=new Dp(m),y=0;y<c;y++){for(var A=l-1;A>=0&&F[A]>=e[A];A--)F[A]=0,b[A]=w[A],A>0&&(F[A-1]+=1,b[A-1]+=1);if(b.slice(0,-1).every((function(e,i){return e<t[i]}))){let e=y*o,t=v[r](e,!s,o),i=b.slice(0,-1).reduce((function(e,t,i){return t*d[i]+e}),0);u[i]=t}F[l-1]+=1,b[l-1]+=1}}}return u}_filter_chunk(e,t,i,n){let r=i.length,s=e.slice();for(var o=r-1;o>=0;o--){if(t&1<<o)continue;let e=i[o],r=e.get("filter_id"),a=e.get("client_data");if(!hm.has(r))throw'NotImplementedError("Filter with id:'+r.toFixed()+' not supported")';s=hm.get(r)(s,n,a)}return s}},gm=class extends dm{constructor(e,t){super(e,t),xp(this,"B_TREE_HEADER",new Map([["signature","4s"],["version","B"],["node_type","B"],["node_size","I"],["record_size","H"],["depth","H"],["split_percent","B"],["merge_percent","B"],["root_address","Q"],["root_nrecords","H"],["total_nrecords","Q"]])),xp(this,"B_LINK_NODE",new Map([["signature","4s"],["version","B"],["node_type","B"]])),this.ready=this.init()}async _read_root_node(){let e=await this._read_tree_header(this.offset);this.address_formats=this._calculate_address_formats(e),this.header=e,this.depth=e.get("depth");let t=[e.get("root_address"),e.get("root_nrecords"),e.get("total_nrecords")],i=await this._read_node(t,this.depth);this._add_node(i)}async _read_tree_header(e){return await kp(this.B_TREE_HEADER,this.fh,this.offset)}_calculate_address_formats(e){let t=e.get("node_size"),i=e.get("record_size"),n=0,r=0,s=new Map,o=e.get("depth");for(var a=0;a<=o;a++){let e,c,l,h="",d="",u="";if(0==a?(e=0,c=0,l=0):1==a?(e=8,h="<Q",c=this._required_bytes(n),d=this._int_format(c),l=0):(e=8,h="<Q",c=this._required_bytes(n),d=this._int_format(c),l=this._required_bytes(r),u=this._int_format(l)),s.set(a,[e,c,l,h,d,u]),a<o){let s=e+c+l;n=this._nrecords_max(t,i,s),r>0?r*=n:r=n}}return s}_nrecords_max(e,t,i){return Math.floor((e-10-i)/(t+i))}_required_bytes(e){return Math.ceil(Tp(e)/8)}_int_format(e){return["<B","<H","<I","<Q"][e-1]}async _read_node(e,t){let[i,n,r]=e,s=this._read_node_header(i,t);i+=Ep(this.B_LINK_NODE);let o=this.header.get("record_size"),a=[];for(let e=0;e<n;e++){let e=await this._parse_record(this.fh,i,o);i+=o,a.push(e)}let c=[],l=this.address_formats.get(t);if(0!=t){let[e,t,r,s,o,a]=l;for(let l=0;l<=n;l++){let n=(await Bp.unpack_from_async(s,this.fh,i))[0];i+=e;let l=(await Bp.unpack_from_async(o,this.fh,i))[0];i+=t;let h=l;r>0&&(h=(await Bp.unpack_from_async(a,this.fh,i))[0],i+=r),c.push([n,l,h])}}return s.set("keys",a),s.set("addresses",c),s}async _read_node_header(e,t){let i=await kp(this.B_LINK_NODE,this.fh,e);return i.set("node_level",t),i}*iter_records(){for(let e of this.all_nodes.values())for(let t of e)for(let e of t.get("keys"))yield e}_parse_record(e){throw"NotImplementedError"}},mm=class extends gm{constructor(){super(...arguments),xp(this,"NODE_TYPE",5)}async _parse_record(e,t,i){let n=(await Bp.unpack_from_async("<I",e,t))[0];t+=4;const r=await e.slice(t,t+7);return new Map([["namehash",n],["heapid",r]])}},wm=class extends gm{constructor(){super(...arguments),xp(this,"NODE_TYPE",6)}async _parse_record(e,t,i){let n=(await Bp.unpack_from_async("<Q",e,t))[0];t+=8;const r=await e.slice(t,t+7);return new Map([["creationorder",n],["heapid",r]])}},bm=class{constructor(e,t){this.ready=this.init(e,t)}async init(e,t){let i=await Bp.unpack_from_async("<B",e,t+8);var n;if(0==i)n=await kp(xm,e,t),this._end_of_sblock=t+km;else{if(2!=i&&3!=i)throw"unsupported superblock version: "+i.toFixed();n=await kp(Im,e,t),this._end_of_sblock=t+Sm}if(n.get("format_signature")!=Cm)throw"Incorrect file signature: "+n.get("format_signature");if(8!=n.get("offset_size")||8!=n.get("length_size"))throw"File uses non-64-bit addressing";this.version=n.get("superblock_version"),this._contents=n,this._root_symbol_table=null,this._fh=e}async get_offset_to_dataobjects(){if(0==this.version){var e=new vm(this._fh,this._end_of_sblock,!0);return await e.ready,this._root_symbol_table=e,e.group_offset}if(2==this.version||3==this.version)return this._contents.get("root_group_address");throw"Not implemented version = "+this.version.toFixed()}},Fm=class{constructor(e,t){this.ready=this.init(e,t)}async init(e,t){let i=await kp(Bm,e,t);Sp("HEAP"==i.get("signature")),Sp(0==i.get("version"));let n=i.get("address_of_data_segment"),r=await e.slice(n,n+i.get("data_segment_size"));i.set("heap_data",r),this._contents=i,this.data=r}get_object_name(e){let t=new Uint8Array(this.data).indexOf(0,e)-e;return Bp.unpack_from("<"+t.toFixed()+"s",this.data,e)[0]}},vm=class{constructor(e,t,i=!1){this.ready=this.init(e,t,i)}async init(e,t,i){var n;if(i)n=new Map([["symbols",1]]);else{if("SNOD"!=(n=await kp(Mm,e,t)).get("signature"))throw"incorrect node type";t+=Rm}for(var r=[],s=n.get("symbols"),o=0;o<s;o++)r.push(await kp(Em,e,t)),t+=Nm;return i&&(this.group_offset=r[0].get("object_header_address")),this.entries=r,this._contents=n,this}assign_name(e){this.entries.forEach((function(t){let i=t.get("link_name_offset"),n=e.get_object_name(i);t.set("link_name",n)}))}get_links(e){var t={};return this.entries.forEach((function(i){let n=i.get("cache_type"),r=i.get("link_name");if(0==n||1==n)t[r]=i.get("object_header_address");else if(2==n){let n=i.get("scratch"),o=new ArrayBuffer(4),a=new Uint8Array(o);for(var s=0;s<4;s++)a[s]=n.charCodeAt(s);let c=Bp.unpack_from("<I",o,0)[0];t[r]=e.get_object_name(c)}})),t}},ym=class{constructor(e,t){this.ready=this.init(e,t)}async init(e,t){let i=await kp(Dm,e,t);t+=Tm;let n=i.get("collection_size")-Tm,r=await e.slice(t,t+n);this.heap_data=r,this._header=i,this._objects=null}get objects(){if(null==this._objects){this._objects=new Map;for(var e=0;e<=this.heap_data.byteLength-Lm;){let t=Ip(zm,this.heap_data,e);if(0==t.get("object_index"))break;e+=Lm;let i=this.heap_data.slice(e,e+t.get("object_size"));this._objects.set(t.get("object_index"),i),e+=Np(t.get("object_size"))}}return this._objects}},Am=class{constructor(e,t){this.fh=e,this.ready=this.init(t)}async init(e){let t=await kp(Hm,this.fh,e);if(e+=Ep(Hm),Sp("FRHP"==t.get("signature")),Sp(0==t.get("version")),t.get("filter_info_size")>0)throw"Filter info size not supported on FractalHeap";if(t.get("btree_address_huge_objects")!=_m)throw"Huge objects not implemented in FractalHeap";t.set("btree_address_huge_objects",null),t.get("root_block_address")==_m&&t.set("root_block_address",null);let i=t.get("log2_maximum_heap_size"),n=this._min_size_nbits(i),r=new Map([["signature","4s"],["version","B"],["heap_header_adddress","Q"],["block_offset",`${n}B`]]);this.indirect_block_header=new Map(r),this.indirect_block_header_size=Ep(r),2&~t.get("flags")||r.set("checksum","I"),this.direct_block_header=r,this.direct_block_header_size=Ep(r);let s=t.get("maximum_direct_block_size");this._managed_object_offset_size=this._min_size_nbits(i);let o=Math.min(s,t.get("max_managed_object_size"));this._managed_object_length_size=this._min_size_integer(o);let a=t.get("starting_block_size"),c=t.get("table_width");if(!(a>0))throw"Starting block size == 0 not implemented";let l=Number(Math.floor(Math.log2(s)));Sp(1n<<BigInt(l)==s);let h=Number(Math.floor(Math.log2(a)));Sp(1n<<BigInt(h)==a),this._max_direct_nrows=l-h+2;let d=Math.floor(Math.log2(c));Sp(1<<d==c),this._indirect_nrows_sub=d+h-1,this.header=t,this.nobjects=t.get("managed_object_count")+t.get("huge_object_count")+t.get("tiny_object_count");let u=[],f=t.get("root_block_address"),p=0;if(null!=f&&(p=t.get("indirect_current_rows_count")),p>0)for await(let e of this._iter_indirect_block(this.fh,f,p))u.push(e);else{let e=await this._read_direct_block(this.fh,f,a);u.push(e)}let g=u.reduce(((e,t)=>e+t.byteLength),0),m=new Uint8Array(g),w=0;u.forEach((e=>{m.set(new Uint8Array(e),w),w+=e.byteLength})),this.managed=m.buffer}async _read_direct_block(e,t,i){let n=await e.slice(t,t+i);return Sp("FHDB"==Ip(this.direct_block_header,n).get("signature")),n}get_data(e){let t=Bp.unpack_from("<B",e,0)[0],i=t>>4&3,n=1;if(0==i){Sp(0==t>>6);let i=this._managed_object_offset_size,r=zp(i,e,n);n+=i,i=this._managed_object_length_size;let s=zp(i,e,n);return this.managed.slice(r,r+s)}throw 1==i?"tiny objectID not supported in FractalHeap":2==i?"huge objectID not supported in FractalHeap":"unknown objectID type in FractalHeap"}_min_size_integer(e){return this._min_size_nbits(Tp(e))}_min_size_nbits(e){return Math.ceil(e/8)}async*_iter_indirect_block(e,t,i){let n=await kp(this.indirect_block_header,e,t);t+=this.indirect_block_header_size,Sp("FHIB"==n.get("signature"));let r=n.get("block_offset").reduce(((e,t,i)=>e+(t<<8*i)),0);n.set("block_offset",r);let[s,o]=this._indirect_info(i),a=[];for(let i=0;i<s;i++){let n=(await Bp.unpack_from_async("<Q",e,t))[0];if(t+=8,n==_m)break;let r=this._calc_block_size(i);a.push([n,r])}let c=[];for(let i=s;i<s+o;i++){let n=(await Bp.unpack_from_async("<Q",e,t))[0];if(t+=8,n==_m)break;let r=this._calc_block_size(i),s=this._iblock_nrows_from_block_size(r);c.push([n,s])}for(let[t,i]of a){let n=await this._read_direct_block(e,t,i);yield n}for(let[t,i]of c)for await(let n of this._iter_indirect_block(e,t,i))yield n}_calc_block_size(e){let t=Math.floor(e/this.header.get("table_width"));return 2**Math.max(t-1,0)*this.header.get("starting_block_size")}_iblock_nrows_from_block_size(e){let t=Math.floor(Math.log2(e));return Sp(2**t==e),t-this._indirect_nrows_sub}_indirect_info(e){let t,i,n=this.header.get("table_width"),r=e*n,s=this._max_direct_nrows*n;return e<=s?(t=r,i=0):(t=s,i=r-s),[t,i]}_int_format(e){return["B","H","I","Q"][e-1]}},Cm=Bp.unpack_from("8s",new Uint8Array([137,72,68,70,13,10,26,10]).buffer)[0],_m=Bp.unpack_from("<Q",new Uint8Array([255,255,255,255,255,255,255,255]).buffer)[0],xm=new Map([["format_signature","8s"],["superblock_version","B"],["free_storage_version","B"],["root_group_version","B"],["reserved_0","B"],["shared_header_version","B"],["offset_size","B"],["length_size","B"],["reserved_1","B"],["group_leaf_node_k","H"],["group_internal_node_k","H"],["file_consistency_flags","L"],["base_address_lower","Q"],["free_space_address","Q"],["end_of_file_address","Q"],["driver_information_address","Q"]]),km=Ep(xm),Im=new Map([["format_signature","8s"],["superblock_version","B"],["offset_size","B"],["length_size","B"],["file_consistency_flags","B"],["base_address","Q"],["superblock_extension_address","Q"],["end_of_file_address","Q"],["root_group_address","Q"],["superblock_checksum","I"]]),Sm=Ep(Im),Em=new Map([["link_name_offset","Q"],["object_header_address","Q"],["cache_type","I"],["reserved","I"],["scratch","16s"]]),Nm=Ep(Em),Mm=new Map([["signature","4s"],["version","B"],["reserved_0","B"],["symbols","H"]]),Rm=Ep(Mm),Bm=new Map([["signature","4s"],["version","B"],["reserved","3s"],["data_segment_size","Q"],["offset_to_free_list","Q"],["address_of_data_segment","Q"]]),Dm=new Map([["signature","4s"],["version","B"],["reserved","3s"],["collection_size","Q"]]),Tm=Ep(Dm),zm=new Map([["object_index","H"],["reference_count","H"],["reserved","I"],["object_size","Q"]]),Lm=Ep(zm),Hm=new Map([["signature","4s"],["version","B"],["object_index_size","H"],["filter_info_size","H"],["flags","B"],["max_managed_object_size","I"],["next_huge_object_index","Q"],["btree_address_huge_objects","Q"],["managed_freespace_size","Q"],["freespace_manager_address","Q"],["managed_space_size","Q"],["managed_alloc_size","Q"],["next_directblock_iterator_address","Q"],["managed_object_count","Q"],["huge_objects_total_size","Q"],["huge_object_count","Q"],["tiny_objects_total_size","Q"],["tiny_object_count","Q"],["table_width","H"],["starting_block_size","Q"],["maximum_direct_block_size","Q"],["log2_maximum_heap_size","H"],["indirect_starting_rows_count","H"],["root_block_address","Q"],["indirect_current_rows_count","H"]]),Pm=class{constructor(e,t){this.ready=this.init(e,t)}async init(e,t){let i=(await Bp.unpack_from_async("<B",e,t))[0];if(1==i)var[n,r,s]=await this._parse_v1_objects(e,t);else{if(i!="O".charCodeAt(0))throw"InvalidHDF5File('unknown Data Object Header')";var[n,r,s]=await this._parse_v2_objects(e,t)}this.fh=e,this.msgs=n,this.msg_data=r,this.offset=t,this._global_heaps={},this._header=s,this._filter_pipeline=null,this._chunk_params_set=!1,this._chunks=null,this._chunk_dims=null,this._chunk_address=null}get dtype(){let e=this.find_msg_type(fw)[0].get("offset_to_message");return new Lp(this.fh,e).dtype}get chunks(){return this._get_chunk_params().then((()=>this._chunks))}get shape(){let e=this.find_msg_type(dw)[0].get("offset_to_message");return async function(e,t){let i=(await Bp.unpack_from_async("<B",e,t))[0];var n;if(1==i)Sp(1==(n=await kp($m,e,t)).get("version")),t+=Km;else{if(2!=i)throw"InvalidHDF5File('unknown dataspace message version')";Sp(2==(n=await kp(Ym,e,t)).get("version")),t+=Xm}let r=n.get("dimensionality");return(await Bp.unpack_from_async("<"+(2*r).toFixed()+"I",e,t)).filter((function(e,t){return t%2==0}))}(this.fh,e)}async get_filter_pipeline(){if(null!=this._filter_pipeline)return this._filter_pipeline;let e=this.find_msg_type(ww);if(!e.length)return this._filter_pipeline=null,this._filter_pipeline;var t=e[0].get("offset_to_message");let[i,n]=await Bp.unpack_from_async("<BB",this.fh,t);t+=Bp.calcsize("<BB");var r=[];if(1==i){await Bp.unpack_from_async("<HI",this.fh,t),t+=Bp.calcsize("<HI");for(var s=0;s<n;s++){let e=await kp(lw,this.fh,t);t+=hw;let i=Np(e.get("name_length"),8),n="<"+i.toFixed()+"s",s=(await Bp.unpack_from_async(n,this.fh,t))[0];e.set("filter_name",s),t+=i,n="<"+e.get("client_data_values").toFixed()+"I";let o=await Bp.unpack_from_async(n,this.fh,t);e.set("client_data",o),t+=4*e.get("client_data_values"),e.get("client_data_values")%2&&(t+=4),r.push(e)}}else{if(2!=i)throw`version ${i} is not supported`;for(let e=0;e<n;e++){let e=new Map,i=this.fh,n=(await Bp.unpack_from_async("<H",i,t))[0];t+=2,e.set("filter_id",n);let s=0;n>255&&(s=(await Bp.unpack_from_async("<H",i,t))[0],t+=2);let o=(await Bp.unpack_from_async("<H",i,t))[0];t+=2;let a=(1&o)>0;e.set("optional",a);let c,l=(await Bp.unpack_from_async("<H",i,t))[0];t+=2,s>0&&(c=(await Bp.unpack_from_async(`${s}s`,i,t))[0],t+=s),e.set("name",c);let h=await Bp.unpack_from_async(`<${l}i`,i,t);t+=4*l,e.set("client_data_values",h),r.push(e)}}return this._filter_pipeline=r,this._filter_pipeline}find_msg_type(e){return this.msgs.filter((function(t){return t.get("type")==e}))}async get_attributes(){let e={},t=this.find_msg_type(bw);for(let i of t){let t=i.get("offset_to_message"),[n,r]=await this.unpack_attribute(t);e[n]=r}return e}async get_fillvalue(){var e,t=this.find_msg_type(pw)[0].get("offset_to_message");let i=(await Bp.unpack_from_async("<B",this.fh,t))[0];var n,r,s;if(1==i||2==i)n=await kp(sw,this.fh,t),t+=ow,e=n.get("fillvalue_defined");else{if(3!=i)throw'InvalidHDF5File("Unknown fillvalue msg version: "'+String(i);n=await kp(aw,this.fh,t),t+=cw,e=32&n.get("flags")}if(e?(r=(await Bp.unpack_from_async("<I",this.fh,t))[0],t+=4):r=0,r){let[e,i,n]=Rp(await this.dtype);s=new Dp(await this.fh.slice(t,t+n))[e](t,!i,n)}else s=0;return s}async unpack_attribute(e){let t=(await Bp.unpack_from_async("<B",this.fh,e))[0];var i,n;if(1==t)Sp(1==(i=await kp(qm,this.fh,e)).get("version")),e+=Qm,n=8;else{if(3!=t)throw"unsupported attribute message version: "+t;Sp(3==(i=await kp(Um,this.fh,e)).get("version")),e+=jm,n=1}let r=i.get("name_size"),s=(await Bp.unpack_from_async("<"+r.toFixed()+"s",this.fh,e))[0];var o;s=s.replace(/\x00$/,""),e+=Np(r,n);try{o=await new Lp(this.fh,e).dtype}catch(e){return console.warn("Attribute "+s+" type not implemented, set to null."),[s,null]}e+=Np(i.get("datatype_size"),n);let a=await this.determine_data_shape(this.fh,e),c=a.reduce((function(e,t){return e*t}),1);if(e+=Np(i.get("dataspace_size"),n),5===o.datatype_class)l=await this.fh.slice(e,e+o.size);else{var l=await this._attr_value(o,this.fh,c,e);0==a.length&&(l=l[0])}return[s,l]}async determine_data_shape(e,t){let i=(await Bp.unpack_from_async("<B",e,t))[0];var n;if(1==i)Sp(1==(n=await kp($m,e,t)).get("version")),t+=Km;else{if(2!=i)throw"unknown dataspace message version";Sp(2==(n=await kp(Ym,e,t)).get("version")),t+=Xm}let r=n.get("dimensionality");return await Bp.unpack_from_async("<"+r.toFixed()+"Q",e,t)}async _attr_value(e,t,i,n){var r=new Array(i);if(e instanceof Array){let l=e[0];for(var s=0;s<i;s++)if("VLEN_STRING"==l){let i=e[2];var[o,a]=await this._vlen_size_and_data(t,n);const c=new TextDecoder(0==i?"ascii":"utf-8");r[s]=c.decode(a),n+=16}else if("REFERENCE"==l){var c=await Bp.unpack_from_async("<Q",t,n);r[s]=c,n+=8}else{if("VLEN_SEQUENCE"!=l)throw"NotImplementedError";{let i=e[1];var[o,a]=this._vlen_size_and_data(t,n);r[s]=this._attr_value(i,a,o,0),n+=16}}}else{let[o,a,c]=Rp(e);const l=await t.slice(n,n+i*c);let h=new Dp(l,0),d=0;for(s=0;s<i;s++)r[s]=h[o](d,!a,c),d+=c}return r}async _vlen_size_and_data(e,t){let i=(await Bp.unpack_from_async("<I",e,t))[0],n=await kp(Vm,e,t+4),r=n.get("collection_address");var s;return Sp(n.get("collection_address")<Number.MAX_SAFE_INTEGER),r in this._global_heaps||(s=new ym(this.fh,r),await s.ready,this._global_heaps[r]=s),[i,(s=this._global_heaps[r]).objects.get(n.get("object_index"))]}async _parse_v1_objects(e,t){let i=await kp(Gm,e,t);Sp(1==i.get("version"));let n=i.get("total_header_messages");for(var r=i.get("object_header_size"),s=t+Ep(Gm),o=await e.slice(s,s+r),a=[[s,r]],c=0,l=0,h=new Array(n),d=0;d<n;d++){l>=r&&([s,r]=a[++c],l=0);let t=await kp(Zm,e,s+l),i=s+l+Jm;if(t.set("offset_to_message",i),t.get("type")==Fw){var[u,f]=await Bp.unpack_from_async("<QQ",e,i);a.push([u,f])}l+=Jm+t.get("size"),h[d]=t}return[h,o,i]}async _parse_v2_objects(e,t){var[i,n,r]=await this._parse_v2_header(e,t);t=r;for(var s=[],o=i.get("size_of_chunk_0"),a=e.slice(t,t+=o),c=[[r,o]],l=0,h=0;;){if(h>=o-tw){let e=c[++l];if(null==e)break;[r,o]=e,h=0}let t=await kp(ew,e,r+h),i=r+h+tw+n;if(t.set("offset_to_message",i),t.get("type")==Fw){var[d,u]=await Bp.unpack_from_async("<QQ",e,i);c.push([d+4,u-4])}h+=tw+t.get("size")+n,s.push(t)}return[s,a,i]}async _parse_v2_header(e,t){let i=await kp(Wm,e,t);var n;if(t+=Ep(Wm),Sp(2==i.get("version")),n=4&i.get("flags")?2:0,Sp(!(16&i.get("flags"))),32&i.get("flags")){let n=await Bp.unpack_from_async("<4I",e,t);t+=16,i.set("access_time",n[0]),i.set("modification_time",n[1]),i.set("change_time",n[2]),i.set("birth_time",n[3])}let r=["<B","<H","<I","<Q"][3&i.get("flags")];return i.set("size_of_chunk_0",(await Bp.unpack_from_async(r,e,t))[0]),[i,n,t+=Bp.calcsize(r)]}async find_link(e){if(this._links){for(link of this._links)if(e===link[0])return link}else{const t=[];for await(const i of this.iter_links()){if(e===i[0])return i;t.push(i)}this._links=t}}async get_links(){const e=[];for await(const t of this.iter_links())e.push(t);return Object.fromEntries(e)}async*iter_links(){for(let e of this.msgs)e.get("type")==vw?yield*this._iter_links_from_symbol_tables(e):e.get("type")==gw?yield this._get_link_from_link_msg(e):e.get("type")==uw&&(yield*this._iter_link_from_link_info_msg(e))}async*_iter_links_from_symbol_tables(e){Sp(16==e.get("size"));let t=await kp(iw,this.fh,e.get("offset_to_message"));yield*this._iter_links_btree_v1(t.get("btree_address"),t.get("heap_address"))}async*_iter_links_btree_v1(e,t){let i=new fm(this.fh,e);await i.ready;let n=new Fm(this.fh,t);await n.ready;for(let e of i.symbol_table_addresses()){let t=new vm(this.fh,e);await t.ready,t.assign_name(n),yield*Object.entries(t.get_links(n))}}async _get_link_from_link_msg(e){let t=e.get("offset_to_message");return await this._decode_link_msg(this.fh,t)[1]}async _decode_link_msg(e,t){let[i,n]=await Bp.unpack_from_async("<BB",e,t);t+=2,Sp(1==i);let r,s,o=2**(3&n),a=(16&n)>0,c=(4&n)>0;(8&n)>0?(r=(await Bp.unpack_from_async("<B",e,t))[0],t+=1):r=0,Sp([0,1].includes(r)),c&&(s=(await Bp.unpack_from_async("<Q",e,t))[0],t+=8);let l=0;a&&(l=(await Bp.unpack_from_async("<B",e,t))[0],t+=1);let h=0==l?"ascii":"utf-8",d=["<B","<H","<I","<Q"][3&n],u=(await Bp.unpack_from_async(d,e,t))[0];t+=o;let f,p=new TextDecoder(h).decode(await e.slice(t,t+u));if(t+=u,0==r)f=(await Bp.unpack_from_async("<Q",e,t))[0];else if(1==r){let i=(await Bp.unpack_from_async("<H",e,t))[0];t+=2,f=new TextDecoder(h).decode(await e.slice(t,t+i))}return[s,[p,f]]}async*_iter_link_from_link_info_msg(e){let t=e.get("offset_to_message"),i=await this._decode_link_info_msg(this.fh,t),n=i.get("heap_address"),r=i.get("name_btree_address"),s=i.get("order_btree_address");null!=r&&(yield*this._iter_links_btree_v2(r,s,n))}async*_iter_links_btree_v2(e,t,i){let n,r=new Am(this.fh,i);await r.ready;const s=null!=t;s?(n=new wm(this.fh,t),await n.ready):(n=new mm(this.fh,e),await n.ready);let o=new Map;for(let e of n.iter_records()){let t=r.get_data(e.get("heapid")),[i,n]=await this._decode_link_msg(t,0);const a=s?i:n[0];o.set(a,n)}let a=Array.from(o.keys()).sort();for(let e of a)yield o.get(e)}async _decode_link_info_msg(e,t){let[i,n]=await Bp.unpack_from_async("<BB",e,t);Sp(0==i),t+=2,(1&n)>0&&(t+=8);let r=(2&n)>0?rw:nw,s=await kp(r,e,t),o=new Map;for(let[e,t]of s.entries())o.set(e,t==Om?null:t);return o}get is_dataset(){return this.find_msg_type(dw).length>0}async get_data(){let e=this.find_msg_type(mw)[0].get("offset_to_message");var[t,i,n,r]=await this._get_data_message_properties(e);if(0==n)throw"Compact storage of DataObject not implemented";return 1==n?this._get_contiguous_data(r):2==n?this._get_chunked_data(e):void 0}async _get_data_message_properties(e){let t,i,n,[r,s,o]=await Bp.unpack_from_async("<BBB",this.fh,e);return 1==r||2==r?(t=s,i=o,n=e,n+=Bp.calcsize("<BBB"),n+=Bp.calcsize("<BI"),Sp(1==i||2==i)):3!=r&&4!=r||(i=s,n=e,n+=Bp.calcsize("<BB")),Sp(r>=1&&r<=4),[r,t,i,n]}async _get_contiguous_data(e){let[t]=await Bp.unpack_from_async("<Q",this.fh,e);const i=await this.shape,n=await this.dtype;if(t==Om){let e=i.reduce((function(e,t){return e*t}),1);return new Array(e)}var r=i.reduce((function(e,t){return e*t}),1);if(n instanceof Array){let e=n[0];if("REFERENCE"==e){if(8!=n[1])throw"NotImplementedError('Unsupported Reference type')";return await this.fh.slice(t,t+r)}if("VLEN_STRING"==e){let e=n[2];const i=new TextDecoder(0==e?"ascii":"utf-8");var s=[];for(o=0;o<r;o++){const[e,n]=await this._vlen_size_and_data(this.fh,t);s[o]=i.decode(n),t+=16}return s}throw"NotImplementedError('datatype not implemented')"}if(/[<>=!@\|]?(i|u|f|S)(\d*)/.test(n)){let[e,i,s]=Rp(n),a=new Array(r);const c=await this.fh.slice(t,t+s*r);let l=new Dp(c);for(var o=0;o<r;o++)a[o]=l[e](o*s,!i,s);return a}if(5===n.datatype_class)return this.fh.slice(t,t+n.size);throw"not Implemented - no proper dtype defined"}async _get_chunked_data(e){if(await this._get_chunk_params(),this._chunk_address==Om)return[];var t=new pm(this.fh,this._chunk_address,this._chunk_dims);await t.ready;const i=await this.dtype,n=await this.shape,r=await this.chunks,s=await this.get_filter_pipeline();let o=await t.construct_data_from_chunks(r,n,i,s);if(i instanceof Array&&/^VLEN/.test(i[0])){let e=i[0];for(var a=0;a<o.length;a++){let[t,n,r]=o[a];var c;n in this._global_heaps?c=this._global_heaps[n]:(c=new ym(this.fh,n),await c.ready,this._global_heaps[n]=c);let s=c.objects.get(r);if("VLEN_STRING"==e){let e=i[2];const t=new TextDecoder(0==e?"ascii":"utf-8");o[a]=t.decode(s)}}}return o}async _get_chunk_params(){if(!this._chunk_params_set){this._chunk_params_set=!0;var e=this.find_msg_type(mw)[0].get("offset_to_message"),[t,i,n,r]=await this._get_data_message_properties(e);if(2==n){var s;if(1==t||2==t){var o=(await Bp.unpack_from_async("<Q",this.fh,r))[0];s=r+Bp.calcsize("<Q")}else if(3==t){var[i,o]=await Bp.unpack_from_async("<BQ",this.fh,r);s=r+Bp.calcsize("<BQ")}Sp(t>=1&&t<=3);var a="<"+(i-1).toFixed()+"I",c=await Bp.unpack_from_async(a,this.fh,s);this._chunks=c,this._chunk_dims=i,this._chunk_address=o}}}};var Om=Bp.unpack_from("<Q",new Uint8Array([255,255,255,255,255,255,255,255]).buffer),Vm=new Map([["collection_address","Q"],["object_index","I"]]);Ep(Vm);var qm=new Map([["version","B"],["reserved","B"],["name_size","H"],["datatype_size","H"],["dataspace_size","H"]]),Qm=Ep(qm),Um=new Map([["version","B"],["flags","B"],["name_size","H"],["datatype_size","H"],["dataspace_size","H"],["character_set_encoding","B"]]),jm=Ep(Um),Gm=new Map([["version","B"],["reserved","B"],["total_header_messages","H"],["object_reference_count","I"],["object_header_size","I"],["padding","I"]]),Wm=new Map([["signature","4s"],["version","B"],["flags","B"]]),$m=new Map([["version","B"],["dimensionality","B"],["flags","B"],["reserved_0","B"],["reserved_1","I"]]),Km=Ep($m),Ym=new Map([["version","B"],["dimensionality","B"],["flags","B"],["type","B"]]),Xm=Ep(Ym),Zm=new Map([["type","H"],["size","H"],["flags","B"],["reserved","3s"]]),Jm=Ep(Zm),ew=new Map([["type","B"],["size","H"],["flags","B"]]),tw=Ep(ew),iw=new Map([["btree_address","Q"],["heap_address","Q"]]),nw=new Map([["heap_address","Q"],["name_btree_address","Q"]]),rw=new Map([["heap_address","Q"],["name_btree_address","Q"],["order_btree_address","Q"]]),sw=new Map([["version","B"],["space_allocation_time","B"],["fillvalue_write_time","B"],["fillvalue_defined","B"]]),ow=Ep(sw),aw=new Map([["version","B"],["flags","B"]]),cw=Ep(aw),lw=new Map([["filter_id","H"],["name_length","H"],["flags","H"],["client_data_values","H"]]),hw=Ep(lw),dw=1,uw=2,fw=3,pw=5,gw=6,mw=8,ww=11,bw=12,Fw=16,vw=17,yw=class{constructor(e,t){null==t?(this.parent=this,this.file=this):(this.parent=t,this.file=t.file),this.name=e}async init(e){const t=this.file.index;t&&this.name in t?this._links=t[this.name]:this._links=await e.get_links(),this._dataobjects=e,this._attrs=null,this._keys=null}get keys(){return null==this._keys&&(this._keys=Object.keys(this._links)),this._keys.slice()}get values(){return this.keys.map((e=>this.get(e)))}length(){return this.keys.length}_dereference(e){if(!e)throw"cannot deference null reference";let t=this.file._get_object_by_address(e);if(null==t)throw"reference not found in file";return t}async get(e){if("number"==typeof e)return this._dereference(e);var t=_w(e);if("/"==t)return this.file;if("."==t)return this;if(/^\//.test(t))return this.file.get(t.slice(1));if(""!=function(e){let t="/",i=e.lastIndexOf(t)+1,n=e.slice(0,i),r=new RegExp("^"+t+"+$"),s=new RegExp(t+"$");n&&!r.test(n)&&(n=n.replace(s,""));return n}(t))var[i,n]=t.split(/\/(.*)/);else var i=t,n=".";if(!(i in this._links))throw i+" not found in group";var r=_w(this.name+"/"+i);let s=this._links[i];if("string"==typeof s)try{return this.get(s)}catch(e){return null}var o=new Pm(this.file._fh,s);if(await o.ready,o.is_dataset){if("."!=n)throw r+" is a dataset, not a group";return new Cw(r,o,this)}var a=new yw(r,this);return await a.init(o),a.get(n)}visit(e){return this.visititems(((t,i)=>e(t)))}visititems(e){var t=this.name.length;/\/$/.test(this.name)||(t+=1);for(var i=this.values.slice();i;){let n=i.shift();1==i.length&&console.log(n);let r=e(n.name.slice(t),n);if(null!=r)return r;n instanceof yw&&(i=i.concat(n.values))}return null}get attrs(){return null==this._attrs&&(this._attrs=this._dataobjects.get_attributes()),this._attrs}},Aw=class extends yw{constructor(e,t,i){super("/",null),this.ready=this.init(e,t,i)}async init(e,t,i){var n=new bm(e,0);await n.ready;var r=await n.get_offset_to_dataobjects(),s=new Pm(e,r);if(await s.ready,this.parent=this,this.file=this,this.name="/",this._dataobjects=s,this._attrs=null,this._keys=null,this._fh=e,this.filename=t||"",this.mode="r",this.userblock_size=0,i&&i.index)this.index=i.index;else{let t;if(i&&i.indexOffset)t=i.indexOffset;else{const e=await this.attrs;if(e.hasOwnProperty("_index_offset"))t=e._index_offset;else{const e=this.indexName||"_index",i=await s.find_link(e);i&&(t=i[1])}}if(t)try{const i=new Pm(e,t);await i.ready;const n=await i.get_data(),r=lm(n),s=(new TextDecoder).decode(r);this.index=JSON.parse(s)}catch(e){console.error(`Error loading index by offset ${e}`)}}this.index&&this.name in this.index?this._links=this.index[this.name]:this._links=await s.get_links()}_get_object_by_address(e){return this._dataobjects.offset==e?this:this.visititems((e=>{e._dataobjects.offset}))}},Cw=class extends Array{constructor(e,t,i){super(),this.parent=i,this.file=i.file,this.name=e,this._dataobjects=t,this._attrs=null,this._astype=null}get value(){var e=this._dataobjects.get_data();return null==this._astype?this.getValue(e):e.astype(this._astype)}get shape(){return this._dataobjects.shape}get attrs(){return this._dataobjects.get_attributes()}get dtype(){return this._dataobjects.dtype}get fillvalue(){return this._dataobjects.get_fillvalue()}async to_array(){return function(e,t){const i=e.length,n=t.reduce(((e,t)=>e*t),1);i!==n&&console.warn(`shape product: ${n} does not match length of flattened array: ${i}`);let r=e;const s=t.slice(1).reverse();for(let e of s){const t=[],{length:i}=r;let n=0;for(;n<i;)t.push(r.slice(n,n+=e));r=t}return r}
|
|
34
|
-
/*! pako 2.0.4 https://github.com/nodeca/pako @license (MIT AND Zlib) */(await this.value,await this.shape)}async getValue(e){const t=await this.dtype;return("string"==typeof t||t instanceof String)&&t.startsWith("S")?(await e).map((e=>{let t=e.indexOf("\0");return t>=0?e.substring(0,t):e})):e}};function _w(e){return e.replace(/\/(\/)+/g,"/")}async function xw(e){var t;e.url&&("function"==typeof(t=e.url).slice&&"function"==typeof t.arrayBuffer)&&(e.file=e.url,e.url=void 0);const i=void 0!==e.url;let n=e.reader?e.reader:function(e){if(e.url)return new vp(e);if(e.path)return new NodeLocalFile(e);if(e.file)return new Cp(e.file);throw Error("One of 'url', 'path (node only)', or 'file (browser only)' must be specified")}(e);const r=e.fetchSize||2e3,s=e.maxSize||2e5;i&&(n=new yp({file:n,fetchSize:r,maxSize:s}));const o=new kw(n),a=await async function(e){let t;if(e.indexReader)t=e.indexReader;else{if(e.index)return e.index;e.indexURL?t=new vp({url:e.indexURL}):e.indexPath?t=new NodeLocalFile({path:e.indexPath}):e.indexFile&&(t=new Cp({file:e.indexFile}))}if(t){const e=await t.read(),i=(new TextDecoder).decode(e);return JSON.parse(i)}return}(e),c=e.indexOffset,l=function(e){if(e.url)return Iw(e.url);if(e.path)return Iw(e.path);if(e.file)return e.file.name}(e),h=new Aw(o,l,{index:a,indexOffset:c});return await h.ready,h}class kw{constructor(e){this.fileReader=e}async slice(e,t){return this.fileReader.read(e,t-e)}}function Iw(e){const t=e.lastIndexOf("/");return t>0?e.substring(t+1):e}class Sw{constructor(e,t){this.chrom=e,this.signal_bin_size=t;this.signals={raw_RD:`his_rd_p_${this.chrom}_${this.signal_bin_size}`,gc_RD:`his_rd_p_${this.chrom}_${this.signal_bin_size}_GC`,gc_partition:`his_rd_p_${this.chrom}_${this.signal_bin_size}_partition_GC_merge`,baf:`snp_likelihood_${this.chrom}_${this.signal_bin_size}_mask`,baf_i1:`snp_i1_${this.chrom}_${this.signal_bin_size}_mask`,Mosaic_segments:`his_rd_p_${this.chrom}_${this.signal_bin_size}_partition_GC_mosaic_segments_2d`,Mosaic_calls:`his_rd_p_${this.chrom}_${this.signal_bin_size}_partition_GC_mosaic_call_2d`}}}class Ew{constructor(e,t=1e5){this.h5_file=e,this.bin_size=t,this.h5_obj=void 0,this.pytorKeys=[],this.availableBins=[]}async fetch(){return this.h5_obj||(this.h5_obj=await xw({url:this.h5_file,fetchSize:1e6,maxSize:2e8})),this.h5_obj}async get_keys(){return(await this.fetch()).keys}async get_rd_signal(e=this.bin_size,t=void 0){const i=await this.fetch();this.pytorKeys=i.keys;const n=new Nw(this.pytorKeys);this.availableBins=n.getAllBins(),this.availableBins.includes(e)||(e=this.availableBins.at(-1));const r=await this.getChromosomes(t);let s=await this.rd_stat(e);const o=await this.getWigFeatures(r,e,s);return this.setCallers(o),{[e]:o}}async getWigFeatures(e,t,i){const n={RD_Raw:[],RD_Raw_gc_coor:[],ReadDepth:[],"2D":[],BAF1:[],BAF2:[]};for(const r of e){const e=new Sw(r,t);n.RD_Raw.push(...await this.get_chr_signal(r,t,e.signals.raw_RD,i)),n.RD_Raw_gc_coor.push(...await this.get_chr_signal(r,t,e.signals.gc_RD,i)),n.ReadDepth.push(...await this.get_chr_signal(r,t,e.signals.gc_partition,i)),n["2D"].push(...await this.rd_call_combined(r,t,i,e));const[s,o]=await this.getBafSignals(r,t,e.signals.baf_i1);n.BAF1.push(...s),n.BAF2.push(...o)}return n}async getChromosomes(e){const t=await this.h5_obj.get("rd_chromosomes"),i=await t.value;if(e){let t=new Set(e);return i.filter((e=>t.has(e)))}return i}setCallers(e){this.callers=[],e.ReadDepth.length&&this.callers.push("ReadDepth"),e["2D"].length&&this.callers.push("2D")}decode_segments(e){let t=[],i=[];for(let n of e)4294967295==n?(t.push(i),i=[]):i.push(n);return t}async rd_call_combined(e,t,i,n){let r,s=[],o=n.signals.Mosaic_segments;if(this.pytorKeys.includes(o)){const e=await this.h5_obj.get(o);let t=await e.value;r=this.decode_segments(t)}let a=n.signals.Mosaic_calls;if(this.pytorKeys.includes(a)){const n=await this.h5_obj.get(a);let o=await n.to_array();r.forEach(((n,r)=>{n.forEach(((n,a)=>{s.push({chr:e,start:n*t,end:(n+1)*t,value:o[0][r]/i[4]*2})}))}))}return s}async rd_stat(e){let t,i=`rd_stat_${e}_auto`;if(this.pytorKeys.includes(i)){const e=await this.h5_obj.get(i);t=await e.value}return t}async get_chr_signal(e,t,i,n){let r=[];if(this.pytorKeys.includes(i)){const s=await this.h5_obj.get(i);(await s.value).forEach(((i,s)=>{r.push({chr:e,start:s*t,end:(s+1)*t,value:i/n[4]*2})}))}return r}async getBafSignals(e,t,i,n=-1){const r=[],s=[];if(this.pytorKeys.includes(i)){const o=await this.h5_obj.get(i);(await o.to_array()).forEach(((i,o)=>{isNaN(i)||(r.push({chr:e,start:o*t,end:(o+1)*t,value:n*(.5-i)}),.5!==i&&s.push({chr:e,start:o*t,end:(o+1)*t,value:n*(.5+i)}))}))}return[r,s]}}class Nw{constructor(e){this.signals=e}getAllBins(){const e=this.getRdBins(),t=this.getSnpBins();return[...new Set([...e,...t])].sort(((e,t)=>e-t))}getRdBins(){return this.extractBins(/^his_rd_p_(.*)_(\d+)$/)}getSnpBins(){return this.extractBins(/^snp_likelihood_(.*)_(\d+)_mask$/)}extractBins(e){return[...new Set(this.signals.map((t=>t.match(e))).filter((e=>null!==e)).map((e=>Number(e[2]))))]}}function Mw(e){if(e.length<4)return e;let t,i,n,r,s,o;return t=e.slice().sort(((e,t)=>e-t)),t.length/4%1==0?(i=.5*(t[t.length/4]+t[t.length/4+1]),n=.5*(t[t.length*(3/4)]+t[t.length*(3/4)+1])):(i=t[Math.floor(t.length/4+1)],n=t[Math.ceil(t.length*(3/4)+1)]),r=n-i,s=n+1.5*r,o=i-1.5*r,t.filter((e=>e>=o&&e<=s))}function Rw(e){let t=Mw(e);const i=t.length,n=t.reduce(((e,t)=>e+t))/i,r=Math.sqrt(t.map((e=>Math.pow(e-n,2))).reduce(((e,t)=>e+t))/i);return[n,r]}var Bw={range_function:function(e,t,i){return Array(Math.ceil((t-e)/i)).fill(e).map(((e,t)=>e+t*i))},getDistParams:Rw,linspace:function(e,t,i){if(void 0===i&&(i=Math.max(Math.round(t-e)+1,1)),i<2)return 1===i?[e]:[];var n=Array(i);for(let r=--i;r>=0;r--)n[r]=(r*t+(i-r)*e)/i;return n},GetFit:class{constructor(e){this.allBins=e}getValues(){return Object.values(this.allBins).reduce(((e,t)=>e.concat(t.filter((e=>e.binScore>0)).map((e=>e.binScore)))),[])}getMean(e){return e.reduce((function(e,t){return e+t}))/e.length}fit_data(){return Rw(this.getValues())}histogram(e,t){const i=t[1]-t[0],n=[];e.forEach(((e,r)=>{t.forEach(((t,r)=>{if(n[t]||(n[t]={count:0}),t<=e&&e<t+i)return n[t].count++,!1}))}));const r=[];return n.forEach(((e,t)=>{r.push(e.count)})),r}},filterOutliers:Mw};function Dw(e,t){return isNaN(e)||isNaN(t)||t<=0?NaN:0===e?.5:.5+.5*(Tw(.5*t,.5,1)-Tw(.5*t,.5,t/(t+e*e)))*Math.sign(e)}function Tw(e,t,i){if(0==i)return 0;if(1==i)return 1;{let n=Pw(e+t)-Pw(e)-Pw(t)+e*Math.log(i)+t*Math.log(1-i);return i<(e+1)/(e+t+2)?Math.exp(n)*zw(e,t,i)/e:1-Math.exp(n)*zw(t,e,1-i)/t}}function zw(e,t,i,n=1e3){let r=1,s=1,o=1,a=e+t,c=e+1,l=e-1,h=1-a*i/c;for(let d=0;d<=n;d++){let n=parseFloat(d+1),u=n+n,f=n*(t-n)*i/((l+u)*(e+u)),p=r+f*s,g=h+f*o;f=-(e+n)*(a+n)*i/((c+u)*(e+u));let m=g+f*h,w=r;if(s=p/m,o=g/m,r=(p+f*r)/m,h=1,Math.abs(r-w)<3e-7*Math.abs(r))return r}}function Lw(e){if(0==e||1==e)return 1;return e*Lw(e-1)}function Hw(e){let t;var i=[75122.633153,80916.6278952,36308.2951477,8687.24529705,1168.92649479,83.8676043424,2.50662827511],n=0,r=1;if(0==e)t=1e99;else if(e%1==0)t=Lw(e-1);else{for(let t=0;t<i.length;t++)n+=i[t]*Math.pow(e,t),r*=e+t;t=n*Math.pow(e+5.5,e+.5)*Math.exp(-(e+5.5))/r}return t}function Pw(e){return Math.log(Hw(e))}var Ow={TdistributionCDF:Dw,gamma:Hw,t_test_1_sample:function(e,t,i,n){0==i&&(i=1);var r=(e-t)/i*Math.sqrt(n);return 1-Dw(Math.abs(r),n-1)},t_test_2_samples:function(e,t,i,n,r,s){0==t&&(t=1),0==r&&(r=1);var o=(e-n)/Math.sqrt(t**2/i+r**2/s),a=(t**2/i+r**2/s)**2*(i-1)*(s-1)/(t**4*(s-1)/i**2+r**4*(i-1)/s**2);return 1-Dw(Math.abs(o),parseInt(a+.5))}};const Vw=Object.prototype.toString;function qw(e){return Vw.call(e).endsWith("Array]")}function Qw(e,t,i,n){let r=0;const s=i(t);for(let t=0;t<e.x.length;t++)r+=Math.pow(e.y[t]-s(e.x[t]),2)/n[t];return r}function Uw(e){if(e.__esModule)return e;var t=Object.defineProperty({},"__esModule",{value:!0});return Object.keys(e).forEach((function(i){var n=Object.getOwnPropertyDescriptor(e,i);Object.defineProperty(t,i,n.get?n:{enumerable:!0,get:function(){return e[i]}})})),t}var jw={};const Gw=Object.prototype.toString;var Ww=Uw(Object.freeze({__proto__:null,isAnyArray:function(e){const t=Gw.call(e);return t.endsWith("Array]")&&!t.includes("Big")}}));const $w=Object.prototype.toString;function Kw(e){const t=$w.call(e);return t.endsWith("Array]")&&!t.includes("Big")}const Yw=Object.prototype.toString;function Xw(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!function(e){const t=Yw.call(e);return t.endsWith("Array]")&&!t.includes("Big")}(e))throw new TypeError("input must be an array");if(0===e.length)throw new TypeError("input must not be empty");var i=t.fromIndex,n=void 0===i?0:i,r=t.toIndex,s=void 0===r?e.length:r;if(n<0||n>=e.length||!Number.isInteger(n))throw new Error("fromIndex must be a positive integer smaller than length");if(s<=n||s>e.length||!Number.isInteger(s))throw new Error("toIndex must be an integer greater than fromIndex and at most equal to length");for(var o=e[n],a=n+1;a<s;a++)e[a]>o&&(o=e[a]);return o}const Zw=Object.prototype.toString;function Jw(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!function(e){const t=Zw.call(e);return t.endsWith("Array]")&&!t.includes("Big")}(e))throw new TypeError("input must be an array");if(0===e.length)throw new TypeError("input must not be empty");var i=t.fromIndex,n=void 0===i?0:i,r=t.toIndex,s=void 0===r?e.length:r;if(n<0||n>=e.length||!Number.isInteger(n))throw new Error("fromIndex must be a positive integer smaller than length");if(s<=n||s>e.length||!Number.isInteger(s))throw new Error("toIndex must be an integer greater than fromIndex and at most equal to length");for(var o=e[n],a=n+1;a<s;a++)e[a]<o&&(o=e[a]);return o}var eb=Object.freeze({__proto__:null,default:function(e){var t,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!Kw(e))throw new TypeError("input must be an array");if(0===e.length)throw new TypeError("input must not be empty");if(void 0!==i.output){if(!Kw(i.output))throw new TypeError("output option must be an array if specified");t=i.output}else t=new Array(e.length);var n=Jw(e),r=Xw(e);if(n===r)throw new RangeError("minimum and maximum input values are equal. Cannot rescale a constant array");var s=i.min,o=void 0===s?i.autoMinMax?n:0:s,a=i.max,c=void 0===a?i.autoMinMax?r:1:a;if(o>=c)throw new RangeError("min option must be smaller than max option");for(var l=(c-o)/(r-n),h=0;h<e.length;h++)t[h]=(e[h]-n)*l+o;return t}}),tb=Uw(eb);Object.defineProperty(jw,"__esModule",{value:!0});var ib=Ww,nb=tb;const rb=" ".repeat(2),sb=" ".repeat(4);function ob(e,t={}){const{maxRows:i=15,maxColumns:n=10,maxNumSize:r=8,padMinus:s="auto"}=t;return`${e.constructor.name} {\n${rb}[\n${sb}${function(e,t,i,n,r){const{rows:s,columns:o}=e,a=Math.min(s,t),c=Math.min(o,i),l=[];if("auto"===r){r=!1;e:for(let t=0;t<a;t++)for(let i=0;i<c;i++)if(e.get(t,i)<0){r=!0;break e}}for(let t=0;t<a;t++){let i=[];for(let s=0;s<c;s++)i.push(ab(e.get(t,s),n,r));l.push(`${i.join(" ")}`)}c!==o&&(l[l.length-1]+=` ... ${o-i} more columns`);a!==s&&l.push(`... ${s-t} more rows`);return l.join(`\n${sb}`)}(e,i,n,r,s)}\n${rb}]\n${rb}rows: ${e.rows}\n${rb}columns: ${e.columns}\n}`}function ab(e,t,i){return(e>=0&&i?` ${cb(e,t-1)}`:cb(e,t)).padEnd(t)}function cb(e,t){let i=e.toString();if(i.length<=t)return i;let n=e.toFixed(t);if(n.length>t&&(n=e.toFixed(Math.max(0,t-(n.length-t)))),n.length<=t&&!n.startsWith("0.000")&&!n.startsWith("-0.000"))return n;let r=e.toExponential(t);return r.length>t&&(r=e.toExponential(Math.max(0,t-(r.length-t)))),r.slice(0)}function lb(e,t,i){let n=i?e.rows:e.rows-1;if(t<0||t>n)throw new RangeError("Row index out of range")}function hb(e,t,i){let n=i?e.columns:e.columns-1;if(t<0||t>n)throw new RangeError("Column index out of range")}function db(e,t){if(t.to1DArray&&(t=t.to1DArray()),t.length!==e.columns)throw new RangeError("vector size must be the same as the number of columns");return t}function ub(e,t){if(t.to1DArray&&(t=t.to1DArray()),t.length!==e.rows)throw new RangeError("vector size must be the same as the number of rows");return t}function fb(e,t){if(!ib.isAnyArray(t))throw new TypeError("row indices must be an array");for(let i=0;i<t.length;i++)if(t[i]<0||t[i]>=e.rows)throw new RangeError("row indices are out of range")}function pb(e,t){if(!ib.isAnyArray(t))throw new TypeError("column indices must be an array");for(let i=0;i<t.length;i++)if(t[i]<0||t[i]>=e.columns)throw new RangeError("column indices are out of range")}function gb(e,t,i,n,r){if(5!==arguments.length)throw new RangeError("expected 4 arguments");if(wb("startRow",t),wb("endRow",i),wb("startColumn",n),wb("endColumn",r),t>i||n>r||t<0||t>=e.rows||i<0||i>=e.rows||n<0||n>=e.columns||r<0||r>=e.columns)throw new RangeError("Submatrix indices are out of range")}function mb(e,t=0){let i=[];for(let n=0;n<e;n++)i.push(t);return i}function wb(e,t){if("number"!=typeof t)throw new TypeError(`${e} must be a number`)}function bb(e){if(e.isEmpty())throw new Error("Empty matrix has no elements to index")}class Fb{static from1DArray(e,t,i){if(e*t!==i.length)throw new RangeError("data length does not match given dimensions");let n=new yb(e,t);for(let r=0;r<e;r++)for(let e=0;e<t;e++)n.set(r,e,i[r*t+e]);return n}static rowVector(e){let t=new yb(1,e.length);for(let i=0;i<e.length;i++)t.set(0,i,e[i]);return t}static columnVector(e){let t=new yb(e.length,1);for(let i=0;i<e.length;i++)t.set(i,0,e[i]);return t}static zeros(e,t){return new yb(e,t)}static ones(e,t){return new yb(e,t).fill(1)}static rand(e,t,i={}){if("object"!=typeof i)throw new TypeError("options must be an object");const{random:n=Math.random}=i;let r=new yb(e,t);for(let i=0;i<e;i++)for(let e=0;e<t;e++)r.set(i,e,n());return r}static randInt(e,t,i={}){if("object"!=typeof i)throw new TypeError("options must be an object");const{min:n=0,max:r=1e3,random:s=Math.random}=i;if(!Number.isInteger(n))throw new TypeError("min must be an integer");if(!Number.isInteger(r))throw new TypeError("max must be an integer");if(n>=r)throw new RangeError("min must be smaller than max");let o=r-n,a=new yb(e,t);for(let i=0;i<e;i++)for(let e=0;e<t;e++){let t=n+Math.round(s()*o);a.set(i,e,t)}return a}static eye(e,t,i){void 0===t&&(t=e),void 0===i&&(i=1);let n=Math.min(e,t),r=this.zeros(e,t);for(let e=0;e<n;e++)r.set(e,e,i);return r}static diag(e,t,i){let n=e.length;void 0===t&&(t=n),void 0===i&&(i=t);let r=Math.min(n,t,i),s=this.zeros(t,i);for(let t=0;t<r;t++)s.set(t,t,e[t]);return s}static min(e,t){e=this.checkMatrix(e),t=this.checkMatrix(t);let i=e.rows,n=e.columns,r=new yb(i,n);for(let s=0;s<i;s++)for(let i=0;i<n;i++)r.set(s,i,Math.min(e.get(s,i),t.get(s,i)));return r}static max(e,t){e=this.checkMatrix(e),t=this.checkMatrix(t);let i=e.rows,n=e.columns,r=new this(i,n);for(let s=0;s<i;s++)for(let i=0;i<n;i++)r.set(s,i,Math.max(e.get(s,i),t.get(s,i)));return r}static checkMatrix(e){return Fb.isMatrix(e)?e:new yb(e)}static isMatrix(e){return null!=e&&"Matrix"===e.klass}get size(){return this.rows*this.columns}apply(e){if("function"!=typeof e)throw new TypeError("callback must be a function");for(let t=0;t<this.rows;t++)for(let i=0;i<this.columns;i++)e.call(this,t,i);return this}to1DArray(){let e=[];for(let t=0;t<this.rows;t++)for(let i=0;i<this.columns;i++)e.push(this.get(t,i));return e}to2DArray(){let e=[];for(let t=0;t<this.rows;t++){e.push([]);for(let i=0;i<this.columns;i++)e[t].push(this.get(t,i))}return e}toJSON(){return this.to2DArray()}isRowVector(){return 1===this.rows}isColumnVector(){return 1===this.columns}isVector(){return 1===this.rows||1===this.columns}isSquare(){return this.rows===this.columns}isEmpty(){return 0===this.rows||0===this.columns}isSymmetric(){if(this.isSquare()){for(let e=0;e<this.rows;e++)for(let t=0;t<=e;t++)if(this.get(e,t)!==this.get(t,e))return!1;return!0}return!1}isDistance(){if(!this.isSymmetric())return!1;for(let e=0;e<this.rows;e++)if(0!==this.get(e,e))return!1;return!0}isEchelonForm(){let e=0,t=0,i=-1,n=!0,r=!1;for(;e<this.rows&&n;){for(t=0,r=!1;t<this.columns&&!1===r;)0===this.get(e,t)?t++:1===this.get(e,t)&&t>i?(r=!0,i=t):(n=!1,r=!0);e++}return n}isReducedEchelonForm(){let e=0,t=0,i=-1,n=!0,r=!1;for(;e<this.rows&&n;){for(t=0,r=!1;t<this.columns&&!1===r;)0===this.get(e,t)?t++:1===this.get(e,t)&&t>i?(r=!0,i=t):(n=!1,r=!0);for(let i=t+1;i<this.rows;i++)0!==this.get(e,i)&&(n=!1);e++}return n}echelonForm(){let e=this.clone(),t=0,i=0;for(;t<e.rows&&i<e.columns;){let n=t;for(let r=t;r<e.rows;r++)e.get(r,i)>e.get(n,i)&&(n=r);if(0===e.get(n,i))i++;else{e.swapRows(t,n);let r=e.get(t,i);for(let n=i;n<e.columns;n++)e.set(t,n,e.get(t,n)/r);for(let n=t+1;n<e.rows;n++){let r=e.get(n,i)/e.get(t,i);e.set(n,i,0);for(let s=i+1;s<e.columns;s++)e.set(n,s,e.get(n,s)-e.get(t,s)*r)}t++,i++}}return e}reducedEchelonForm(){let e=this.echelonForm(),t=e.columns,i=e.rows,n=i-1;for(;n>=0;)if(0===e.maxRow(n))n--;else{let r=0,s=!1;for(;r<i&&!1===s;)1===e.get(n,r)?s=!0:r++;for(let i=0;i<n;i++){let s=e.get(i,r);for(let o=r;o<t;o++){let t=e.get(i,o)-s*e.get(n,o);e.set(i,o,t)}}n--}return e}set(){throw new Error("set method is unimplemented")}get(){throw new Error("get method is unimplemented")}repeat(e={}){if("object"!=typeof e)throw new TypeError("options must be an object");const{rows:t=1,columns:i=1}=e;if(!Number.isInteger(t)||t<=0)throw new TypeError("rows must be a positive integer");if(!Number.isInteger(i)||i<=0)throw new TypeError("columns must be a positive integer");let n=new yb(this.rows*t,this.columns*i);for(let e=0;e<t;e++)for(let t=0;t<i;t++)n.setSubMatrix(this,this.rows*e,this.columns*t);return n}fill(e){for(let t=0;t<this.rows;t++)for(let i=0;i<this.columns;i++)this.set(t,i,e);return this}neg(){return this.mulS(-1)}getRow(e){lb(this,e);let t=[];for(let i=0;i<this.columns;i++)t.push(this.get(e,i));return t}getRowVector(e){return yb.rowVector(this.getRow(e))}setRow(e,t){lb(this,e),t=db(this,t);for(let i=0;i<this.columns;i++)this.set(e,i,t[i]);return this}swapRows(e,t){lb(this,e),lb(this,t);for(let i=0;i<this.columns;i++){let n=this.get(e,i);this.set(e,i,this.get(t,i)),this.set(t,i,n)}return this}getColumn(e){hb(this,e);let t=[];for(let i=0;i<this.rows;i++)t.push(this.get(i,e));return t}getColumnVector(e){return yb.columnVector(this.getColumn(e))}setColumn(e,t){hb(this,e),t=ub(this,t);for(let i=0;i<this.rows;i++)this.set(i,e,t[i]);return this}swapColumns(e,t){hb(this,e),hb(this,t);for(let i=0;i<this.rows;i++){let n=this.get(i,e);this.set(i,e,this.get(i,t)),this.set(i,t,n)}return this}addRowVector(e){e=db(this,e);for(let t=0;t<this.rows;t++)for(let i=0;i<this.columns;i++)this.set(t,i,this.get(t,i)+e[i]);return this}subRowVector(e){e=db(this,e);for(let t=0;t<this.rows;t++)for(let i=0;i<this.columns;i++)this.set(t,i,this.get(t,i)-e[i]);return this}mulRowVector(e){e=db(this,e);for(let t=0;t<this.rows;t++)for(let i=0;i<this.columns;i++)this.set(t,i,this.get(t,i)*e[i]);return this}divRowVector(e){e=db(this,e);for(let t=0;t<this.rows;t++)for(let i=0;i<this.columns;i++)this.set(t,i,this.get(t,i)/e[i]);return this}addColumnVector(e){e=ub(this,e);for(let t=0;t<this.rows;t++)for(let i=0;i<this.columns;i++)this.set(t,i,this.get(t,i)+e[t]);return this}subColumnVector(e){e=ub(this,e);for(let t=0;t<this.rows;t++)for(let i=0;i<this.columns;i++)this.set(t,i,this.get(t,i)-e[t]);return this}mulColumnVector(e){e=ub(this,e);for(let t=0;t<this.rows;t++)for(let i=0;i<this.columns;i++)this.set(t,i,this.get(t,i)*e[t]);return this}divColumnVector(e){e=ub(this,e);for(let t=0;t<this.rows;t++)for(let i=0;i<this.columns;i++)this.set(t,i,this.get(t,i)/e[t]);return this}mulRow(e,t){lb(this,e);for(let i=0;i<this.columns;i++)this.set(e,i,this.get(e,i)*t);return this}mulColumn(e,t){hb(this,e);for(let i=0;i<this.rows;i++)this.set(i,e,this.get(i,e)*t);return this}max(e){if(this.isEmpty())return NaN;switch(e){case"row":{const e=new Array(this.rows).fill(Number.NEGATIVE_INFINITY);for(let t=0;t<this.rows;t++)for(let i=0;i<this.columns;i++)this.get(t,i)>e[t]&&(e[t]=this.get(t,i));return e}case"column":{const e=new Array(this.columns).fill(Number.NEGATIVE_INFINITY);for(let t=0;t<this.rows;t++)for(let i=0;i<this.columns;i++)this.get(t,i)>e[i]&&(e[i]=this.get(t,i));return e}case void 0:{let e=this.get(0,0);for(let t=0;t<this.rows;t++)for(let i=0;i<this.columns;i++)this.get(t,i)>e&&(e=this.get(t,i));return e}default:throw new Error(`invalid option: ${e}`)}}maxIndex(){bb(this);let e=this.get(0,0),t=[0,0];for(let i=0;i<this.rows;i++)for(let n=0;n<this.columns;n++)this.get(i,n)>e&&(e=this.get(i,n),t[0]=i,t[1]=n);return t}min(e){if(this.isEmpty())return NaN;switch(e){case"row":{const e=new Array(this.rows).fill(Number.POSITIVE_INFINITY);for(let t=0;t<this.rows;t++)for(let i=0;i<this.columns;i++)this.get(t,i)<e[t]&&(e[t]=this.get(t,i));return e}case"column":{const e=new Array(this.columns).fill(Number.POSITIVE_INFINITY);for(let t=0;t<this.rows;t++)for(let i=0;i<this.columns;i++)this.get(t,i)<e[i]&&(e[i]=this.get(t,i));return e}case void 0:{let e=this.get(0,0);for(let t=0;t<this.rows;t++)for(let i=0;i<this.columns;i++)this.get(t,i)<e&&(e=this.get(t,i));return e}default:throw new Error(`invalid option: ${e}`)}}minIndex(){bb(this);let e=this.get(0,0),t=[0,0];for(let i=0;i<this.rows;i++)for(let n=0;n<this.columns;n++)this.get(i,n)<e&&(e=this.get(i,n),t[0]=i,t[1]=n);return t}maxRow(e){if(lb(this,e),this.isEmpty())return NaN;let t=this.get(e,0);for(let i=1;i<this.columns;i++)this.get(e,i)>t&&(t=this.get(e,i));return t}maxRowIndex(e){lb(this,e),bb(this);let t=this.get(e,0),i=[e,0];for(let n=1;n<this.columns;n++)this.get(e,n)>t&&(t=this.get(e,n),i[1]=n);return i}minRow(e){if(lb(this,e),this.isEmpty())return NaN;let t=this.get(e,0);for(let i=1;i<this.columns;i++)this.get(e,i)<t&&(t=this.get(e,i));return t}minRowIndex(e){lb(this,e),bb(this);let t=this.get(e,0),i=[e,0];for(let n=1;n<this.columns;n++)this.get(e,n)<t&&(t=this.get(e,n),i[1]=n);return i}maxColumn(e){if(hb(this,e),this.isEmpty())return NaN;let t=this.get(0,e);for(let i=1;i<this.rows;i++)this.get(i,e)>t&&(t=this.get(i,e));return t}maxColumnIndex(e){hb(this,e),bb(this);let t=this.get(0,e),i=[0,e];for(let n=1;n<this.rows;n++)this.get(n,e)>t&&(t=this.get(n,e),i[0]=n);return i}minColumn(e){if(hb(this,e),this.isEmpty())return NaN;let t=this.get(0,e);for(let i=1;i<this.rows;i++)this.get(i,e)<t&&(t=this.get(i,e));return t}minColumnIndex(e){hb(this,e),bb(this);let t=this.get(0,e),i=[0,e];for(let n=1;n<this.rows;n++)this.get(n,e)<t&&(t=this.get(n,e),i[0]=n);return i}diag(){let e=Math.min(this.rows,this.columns),t=[];for(let i=0;i<e;i++)t.push(this.get(i,i));return t}norm(e="frobenius"){switch(e){case"max":return this.max();case"frobenius":return Math.sqrt(this.dot(this));default:throw new RangeError(`unknown norm type: ${e}`)}}cumulativeSum(){let e=0;for(let t=0;t<this.rows;t++)for(let i=0;i<this.columns;i++)e+=this.get(t,i),this.set(t,i,e);return this}dot(e){Fb.isMatrix(e)&&(e=e.to1DArray());let t=this.to1DArray();if(t.length!==e.length)throw new RangeError("vectors do not have the same size");let i=0;for(let n=0;n<t.length;n++)i+=t[n]*e[n];return i}mmul(e){e=yb.checkMatrix(e);let t=this.rows,i=this.columns,n=e.columns,r=new yb(t,n),s=new Float64Array(i);for(let o=0;o<n;o++){for(let t=0;t<i;t++)s[t]=e.get(t,o);for(let e=0;e<t;e++){let t=0;for(let n=0;n<i;n++)t+=this.get(e,n)*s[n];r.set(e,o,t)}}return r}mpow(e){if(!this.isSquare())throw new RangeError("Matrix must be square");if(!Number.isInteger(e)||e<0)throw new RangeError("Exponent must be a non-negative integer");let t=yb.eye(this.rows),i=this;for(let n=e;n>1;n/=2)1&n&&(t=t.mmul(i)),i=i.mmul(i);return t}strassen2x2(e){e=yb.checkMatrix(e);let t=new yb(2,2);const i=this.get(0,0),n=e.get(0,0),r=this.get(0,1),s=e.get(0,1),o=this.get(1,0),a=e.get(1,0),c=this.get(1,1),l=e.get(1,1),h=(i+c)*(n+l),d=(o+c)*n,u=i*(s-l),f=c*(a-n),p=(i+r)*l,g=h+f-p+(r-c)*(a+l),m=u+p,w=d+f,b=h-d+u+(o-i)*(n+s);return t.set(0,0,g),t.set(0,1,m),t.set(1,0,w),t.set(1,1,b),t}strassen3x3(e){e=yb.checkMatrix(e);let t=new yb(3,3);const i=this.get(0,0),n=this.get(0,1),r=this.get(0,2),s=this.get(1,0),o=this.get(1,1),a=this.get(1,2),c=this.get(2,0),l=this.get(2,1),h=this.get(2,2),d=e.get(0,0),u=e.get(0,1),f=e.get(0,2),p=e.get(1,0),g=e.get(1,1),m=e.get(1,2),w=e.get(2,0),b=e.get(2,1),F=e.get(2,2),v=(i-s)*(-u+g),y=(-i+s+o)*(d-u+g),A=(s+o)*(-d+u),C=i*d,_=(-i+c+l)*(d-f+m),x=(-i+c)*(f-m),k=(c+l)*(-d+f),I=(-r+l+h)*(g+w-b),S=(r-h)*(g-b),E=r*w,N=(l+h)*(-w+b),M=(-r+o+a)*(m+w-F),R=(r-a)*(m-F),B=(o+a)*(-w+F),D=C+E+n*p,T=(i+n+r-s-o-l-h)*g+y+A+C+I+E+N,z=C+_+k+(i+n+r-o-a-c-l)*m+E+M+B,L=v+o*(-d+u+p-g-m-w+F)+y+C+E+M+R,H=v+y+A+C+a*b,P=E+M+R+B+s*f,O=C+_+x+l*(-d+f+p-g-m-w+b)+I+S+E,V=I+S+E+N+c*u,q=C+_+x+k+h*F;return t.set(0,0,D),t.set(0,1,T),t.set(0,2,z),t.set(1,0,L),t.set(1,1,H),t.set(1,2,P),t.set(2,0,O),t.set(2,1,V),t.set(2,2,q),t}mmulStrassen(e){e=yb.checkMatrix(e);let t=this.clone(),i=t.rows,n=t.columns,r=e.rows,s=e.columns;function o(e,t,i){let n=e.rows,r=e.columns;if(n===t&&r===i)return e;{let n=Fb.zeros(t,i);return n=n.setSubMatrix(e,0,0),n}}n!==r&&console.warn(`Multiplying ${i} x ${n} and ${r} x ${s} matrix: dimensions do not match.`);let a=Math.max(i,r),c=Math.max(n,s);return t=o(t,a,c),function e(t,i,n,r){if(n<=512||r<=512)return t.mmul(i);n%2==1&&r%2==1?(t=o(t,n+1,r+1),i=o(i,n+1,r+1)):n%2==1?(t=o(t,n+1,r),i=o(i,n+1,r)):r%2==1&&(t=o(t,n,r+1),i=o(i,n,r+1));let s=parseInt(t.rows/2,10),a=parseInt(t.columns/2,10),c=t.subMatrix(0,s-1,0,a-1),l=i.subMatrix(0,s-1,0,a-1),h=t.subMatrix(0,s-1,a,t.columns-1),d=i.subMatrix(0,s-1,a,i.columns-1),u=t.subMatrix(s,t.rows-1,0,a-1),f=i.subMatrix(s,i.rows-1,0,a-1),p=t.subMatrix(s,t.rows-1,a,t.columns-1),g=i.subMatrix(s,i.rows-1,a,i.columns-1),m=e(Fb.add(c,p),Fb.add(l,g),s,a),w=e(Fb.add(u,p),l,s,a),b=e(c,Fb.sub(d,g),s,a),F=e(p,Fb.sub(f,l),s,a),v=e(Fb.add(c,h),g,s,a),y=e(Fb.sub(u,c),Fb.add(l,d),s,a),A=e(Fb.sub(h,p),Fb.add(f,g),s,a),C=Fb.add(m,F);C.sub(v),C.add(A);let _=Fb.add(b,v),x=Fb.add(w,F),k=Fb.sub(m,w);k.add(b),k.add(y);let I=Fb.zeros(2*C.rows,2*C.columns);return I=I.setSubMatrix(C,0,0),I=I.setSubMatrix(_,C.rows,0),I=I.setSubMatrix(x,0,C.columns),I=I.setSubMatrix(k,C.rows,C.columns),I.subMatrix(0,n-1,0,r-1)}(t,e=o(e,a,c),a,c)}scaleRows(e={}){if("object"!=typeof e)throw new TypeError("options must be an object");const{min:t=0,max:i=1}=e;if(!Number.isFinite(t))throw new TypeError("min must be a number");if(!Number.isFinite(i))throw new TypeError("max must be a number");if(t>=i)throw new RangeError("min must be smaller than max");let n=new yb(this.rows,this.columns);for(let e=0;e<this.rows;e++){const r=this.getRow(e);r.length>0&&nb(r,{min:t,max:i,output:r}),n.setRow(e,r)}return n}scaleColumns(e={}){if("object"!=typeof e)throw new TypeError("options must be an object");const{min:t=0,max:i=1}=e;if(!Number.isFinite(t))throw new TypeError("min must be a number");if(!Number.isFinite(i))throw new TypeError("max must be a number");if(t>=i)throw new RangeError("min must be smaller than max");let n=new yb(this.rows,this.columns);for(let e=0;e<this.columns;e++){const r=this.getColumn(e);r.length&&nb(r,{min:t,max:i,output:r}),n.setColumn(e,r)}return n}flipRows(){const e=Math.ceil(this.columns/2);for(let t=0;t<this.rows;t++)for(let i=0;i<e;i++){let e=this.get(t,i),n=this.get(t,this.columns-1-i);this.set(t,i,n),this.set(t,this.columns-1-i,e)}return this}flipColumns(){const e=Math.ceil(this.rows/2);for(let t=0;t<this.columns;t++)for(let i=0;i<e;i++){let e=this.get(i,t),n=this.get(this.rows-1-i,t);this.set(i,t,n),this.set(this.rows-1-i,t,e)}return this}kroneckerProduct(e){e=yb.checkMatrix(e);let t=this.rows,i=this.columns,n=e.rows,r=e.columns,s=new yb(t*n,i*r);for(let o=0;o<t;o++)for(let t=0;t<i;t++)for(let i=0;i<n;i++)for(let a=0;a<r;a++)s.set(n*o+i,r*t+a,this.get(o,t)*e.get(i,a));return s}kroneckerSum(e){if(e=yb.checkMatrix(e),!this.isSquare()||!e.isSquare())throw new Error("Kronecker Sum needs two Square Matrices");let t=this.rows,i=e.rows,n=this.kroneckerProduct(yb.eye(i,i)),r=yb.eye(t,t).kroneckerProduct(e);return n.add(r)}transpose(){let e=new yb(this.columns,this.rows);for(let t=0;t<this.rows;t++)for(let i=0;i<this.columns;i++)e.set(i,t,this.get(t,i));return e}sortRows(e=vb){for(let t=0;t<this.rows;t++)this.setRow(t,this.getRow(t).sort(e));return this}sortColumns(e=vb){for(let t=0;t<this.columns;t++)this.setColumn(t,this.getColumn(t).sort(e));return this}subMatrix(e,t,i,n){gb(this,e,t,i,n);let r=new yb(t-e+1,n-i+1);for(let s=e;s<=t;s++)for(let t=i;t<=n;t++)r.set(s-e,t-i,this.get(s,t));return r}subMatrixRow(e,t,i){if(void 0===t&&(t=0),void 0===i&&(i=this.columns-1),t>i||t<0||t>=this.columns||i<0||i>=this.columns)throw new RangeError("Argument out of range");let n=new yb(e.length,i-t+1);for(let r=0;r<e.length;r++)for(let s=t;s<=i;s++){if(e[r]<0||e[r]>=this.rows)throw new RangeError(`Row index out of range: ${e[r]}`);n.set(r,s-t,this.get(e[r],s))}return n}subMatrixColumn(e,t,i){if(void 0===t&&(t=0),void 0===i&&(i=this.rows-1),t>i||t<0||t>=this.rows||i<0||i>=this.rows)throw new RangeError("Argument out of range");let n=new yb(i-t+1,e.length);for(let r=0;r<e.length;r++)for(let s=t;s<=i;s++){if(e[r]<0||e[r]>=this.columns)throw new RangeError(`Column index out of range: ${e[r]}`);n.set(s-t,r,this.get(s,e[r]))}return n}setSubMatrix(e,t,i){if((e=yb.checkMatrix(e)).isEmpty())return this;gb(this,t,t+e.rows-1,i,i+e.columns-1);for(let n=0;n<e.rows;n++)for(let r=0;r<e.columns;r++)this.set(t+n,i+r,e.get(n,r));return this}selection(e,t){fb(this,e),pb(this,t);let i=new yb(e.length,t.length);for(let n=0;n<e.length;n++){let r=e[n];for(let e=0;e<t.length;e++){let s=t[e];i.set(n,e,this.get(r,s))}}return i}trace(){let e=Math.min(this.rows,this.columns),t=0;for(let i=0;i<e;i++)t+=this.get(i,i);return t}clone(){return this.constructor.copy(this,new yb(this.rows,this.columns))}static copy(e,t){for(const[i,n,r]of e.entries())t.set(i,n,r);return t}sum(e){switch(e){case"row":return function(e){let t=mb(e.rows);for(let i=0;i<e.rows;++i)for(let n=0;n<e.columns;++n)t[i]+=e.get(i,n);return t}(this);case"column":return function(e){let t=mb(e.columns);for(let i=0;i<e.rows;++i)for(let n=0;n<e.columns;++n)t[n]+=e.get(i,n);return t}(this);case void 0:return function(e){let t=0;for(let i=0;i<e.rows;i++)for(let n=0;n<e.columns;n++)t+=e.get(i,n);return t}(this);default:throw new Error(`invalid option: ${e}`)}}product(e){switch(e){case"row":return function(e){let t=mb(e.rows,1);for(let i=0;i<e.rows;++i)for(let n=0;n<e.columns;++n)t[i]*=e.get(i,n);return t}(this);case"column":return function(e){let t=mb(e.columns,1);for(let i=0;i<e.rows;++i)for(let n=0;n<e.columns;++n)t[n]*=e.get(i,n);return t}(this);case void 0:return function(e){let t=1;for(let i=0;i<e.rows;i++)for(let n=0;n<e.columns;n++)t*=e.get(i,n);return t}(this);default:throw new Error(`invalid option: ${e}`)}}mean(e){const t=this.sum(e);switch(e){case"row":for(let e=0;e<this.rows;e++)t[e]/=this.columns;return t;case"column":for(let e=0;e<this.columns;e++)t[e]/=this.rows;return t;case void 0:return t/this.size;default:throw new Error(`invalid option: ${e}`)}}variance(e,t={}){if("object"==typeof e&&(t=e,e=void 0),"object"!=typeof t)throw new TypeError("options must be an object");const{unbiased:i=!0,mean:n=this.mean(e)}=t;if("boolean"!=typeof i)throw new TypeError("unbiased must be a boolean");switch(e){case"row":if(!ib.isAnyArray(n))throw new TypeError("mean must be an array");return function(e,t,i){const n=e.rows,r=e.columns,s=[];for(let o=0;o<n;o++){let n=0,a=0,c=0;for(let t=0;t<r;t++)c=e.get(o,t)-i[o],n+=c,a+=c*c;t?s.push((a-n*n/r)/(r-1)):s.push((a-n*n/r)/r)}return s}(this,i,n);case"column":if(!ib.isAnyArray(n))throw new TypeError("mean must be an array");return function(e,t,i){const n=e.rows,r=e.columns,s=[];for(let o=0;o<r;o++){let r=0,a=0,c=0;for(let t=0;t<n;t++)c=e.get(t,o)-i[o],r+=c,a+=c*c;t?s.push((a-r*r/n)/(n-1)):s.push((a-r*r/n)/n)}return s}(this,i,n);case void 0:if("number"!=typeof n)throw new TypeError("mean must be a number");return function(e,t,i){const n=e.rows,r=e.columns,s=n*r;let o=0,a=0,c=0;for(let t=0;t<n;t++)for(let n=0;n<r;n++)c=e.get(t,n)-i,o+=c,a+=c*c;return t?(a-o*o/s)/(s-1):(a-o*o/s)/s}(this,i,n);default:throw new Error(`invalid option: ${e}`)}}standardDeviation(e,t){"object"==typeof e&&(t=e,e=void 0);const i=this.variance(e,t);if(void 0===e)return Math.sqrt(i);for(let e=0;e<i.length;e++)i[e]=Math.sqrt(i[e]);return i}center(e,t={}){if("object"==typeof e&&(t=e,e=void 0),"object"!=typeof t)throw new TypeError("options must be an object");const{center:i=this.mean(e)}=t;switch(e){case"row":if(!ib.isAnyArray(i))throw new TypeError("center must be an array");return function(e,t){for(let i=0;i<e.rows;i++)for(let n=0;n<e.columns;n++)e.set(i,n,e.get(i,n)-t[i])}(this,i),this;case"column":if(!ib.isAnyArray(i))throw new TypeError("center must be an array");return function(e,t){for(let i=0;i<e.rows;i++)for(let n=0;n<e.columns;n++)e.set(i,n,e.get(i,n)-t[n])}(this,i),this;case void 0:if("number"!=typeof i)throw new TypeError("center must be a number");return function(e,t){for(let i=0;i<e.rows;i++)for(let n=0;n<e.columns;n++)e.set(i,n,e.get(i,n)-t)}(this,i),this;default:throw new Error(`invalid option: ${e}`)}}scale(e,t={}){if("object"==typeof e&&(t=e,e=void 0),"object"!=typeof t)throw new TypeError("options must be an object");let i=t.scale;switch(e){case"row":if(void 0===i)i=function(e){const t=[];for(let i=0;i<e.rows;i++){let n=0;for(let t=0;t<e.columns;t++)n+=e.get(i,t)**2/(e.columns-1);t.push(Math.sqrt(n))}return t}(this);else if(!ib.isAnyArray(i))throw new TypeError("scale must be an array");return function(e,t){for(let i=0;i<e.rows;i++)for(let n=0;n<e.columns;n++)e.set(i,n,e.get(i,n)/t[i])}(this,i),this;case"column":if(void 0===i)i=function(e){const t=[];for(let i=0;i<e.columns;i++){let n=0;for(let t=0;t<e.rows;t++)n+=e.get(t,i)**2/(e.rows-1);t.push(Math.sqrt(n))}return t}(this);else if(!ib.isAnyArray(i))throw new TypeError("scale must be an array");return function(e,t){for(let i=0;i<e.rows;i++)for(let n=0;n<e.columns;n++)e.set(i,n,e.get(i,n)/t[n])}(this,i),this;case void 0:if(void 0===i)i=function(e){const t=e.size-1;let i=0;for(let n=0;n<e.columns;n++)for(let r=0;r<e.rows;r++)i+=e.get(r,n)**2/t;return Math.sqrt(i)}(this);else if("number"!=typeof i)throw new TypeError("scale must be a number");return function(e,t){for(let i=0;i<e.rows;i++)for(let n=0;n<e.columns;n++)e.set(i,n,e.get(i,n)/t)}(this,i),this;default:throw new Error(`invalid option: ${e}`)}}toString(e){return ob(this,e)}[Symbol.iterator](){return this.entries()}*entries(){for(let e=0;e<this.rows;e++)for(let t=0;t<this.columns;t++)yield[e,t,this.get(e,t)]}*values(){for(let e=0;e<this.rows;e++)for(let t=0;t<this.columns;t++)yield this.get(e,t)}}function vb(e,t){return e-t}Fb.prototype.klass="Matrix","undefined"!=typeof Symbol&&(Fb.prototype[Symbol.for("nodejs.util.inspect.custom")]=function(){return ob(this)}),Fb.random=Fb.rand,Fb.randomInt=Fb.randInt,Fb.diagonal=Fb.diag,Fb.prototype.diagonal=Fb.prototype.diag,Fb.identity=Fb.eye,Fb.prototype.negate=Fb.prototype.neg,Fb.prototype.tensorProduct=Fb.prototype.kroneckerProduct;class yb extends Fb{data;#k(e,t){if(this.data=[],!(Number.isInteger(t)&&t>=0))throw new TypeError("nColumns must be a positive integer");for(let i=0;i<e;i++)this.data.push(new Float64Array(t));this.rows=e,this.columns=t}constructor(e,t){if(super(),yb.isMatrix(e))this.#k(e.rows,e.columns),yb.copy(e,this);else if(Number.isInteger(e)&&e>=0)this.#k(e,t);else{if(!ib.isAnyArray(e))throw new TypeError("First argument must be a positive number or an array");{const i=e;if("number"!=typeof(t=(e=i.length)?i[0].length:0))throw new TypeError("Data must be a 2D array with at least one element");this.data=[];for(let n=0;n<e;n++){if(i[n].length!==t)throw new RangeError("Inconsistent array dimensions");if(!i[n].every((e=>"number"==typeof e)))throw new TypeError("Input data contains non-numeric values");this.data.push(Float64Array.from(i[n]))}this.rows=e,this.columns=t}}}set(e,t,i){return this.data[e][t]=i,this}get(e,t){return this.data[e][t]}removeRow(e){return lb(this,e),this.data.splice(e,1),this.rows-=1,this}addRow(e,t){return void 0===t&&(t=e,e=this.rows),lb(this,e,!0),t=Float64Array.from(db(this,t)),this.data.splice(e,0,t),this.rows+=1,this}removeColumn(e){hb(this,e);for(let t=0;t<this.rows;t++){const i=new Float64Array(this.columns-1);for(let n=0;n<e;n++)i[n]=this.data[t][n];for(let n=e+1;n<this.columns;n++)i[n-1]=this.data[t][n];this.data[t]=i}return this.columns-=1,this}addColumn(e,t){void 0===t&&(t=e,e=this.columns),hb(this,e,!0),t=ub(this,t);for(let i=0;i<this.rows;i++){const n=new Float64Array(this.columns+1);let r=0;for(;r<e;r++)n[r]=this.data[i][r];for(n[r++]=t[i];r<this.columns+1;r++)n[r]=this.data[i][r-1];this.data[i]=n}return this.columns+=1,this}}!function(e,t){e.prototype.add=function(e){return"number"==typeof e?this.addS(e):this.addM(e)},e.prototype.addS=function(e){for(let t=0;t<this.rows;t++)for(let i=0;i<this.columns;i++)this.set(t,i,this.get(t,i)+e);return this},e.prototype.addM=function(e){if(e=t.checkMatrix(e),this.rows!==e.rows||this.columns!==e.columns)throw new RangeError("Matrices dimensions must be equal");for(let t=0;t<this.rows;t++)for(let i=0;i<this.columns;i++)this.set(t,i,this.get(t,i)+e.get(t,i));return this},e.add=function(e,i){return new t(e).add(i)},e.prototype.sub=function(e){return"number"==typeof e?this.subS(e):this.subM(e)},e.prototype.subS=function(e){for(let t=0;t<this.rows;t++)for(let i=0;i<this.columns;i++)this.set(t,i,this.get(t,i)-e);return this},e.prototype.subM=function(e){if(e=t.checkMatrix(e),this.rows!==e.rows||this.columns!==e.columns)throw new RangeError("Matrices dimensions must be equal");for(let t=0;t<this.rows;t++)for(let i=0;i<this.columns;i++)this.set(t,i,this.get(t,i)-e.get(t,i));return this},e.sub=function(e,i){return new t(e).sub(i)},e.prototype.subtract=e.prototype.sub,e.prototype.subtractS=e.prototype.subS,e.prototype.subtractM=e.prototype.subM,e.subtract=e.sub,e.prototype.mul=function(e){return"number"==typeof e?this.mulS(e):this.mulM(e)},e.prototype.mulS=function(e){for(let t=0;t<this.rows;t++)for(let i=0;i<this.columns;i++)this.set(t,i,this.get(t,i)*e);return this},e.prototype.mulM=function(e){if(e=t.checkMatrix(e),this.rows!==e.rows||this.columns!==e.columns)throw new RangeError("Matrices dimensions must be equal");for(let t=0;t<this.rows;t++)for(let i=0;i<this.columns;i++)this.set(t,i,this.get(t,i)*e.get(t,i));return this},e.mul=function(e,i){return new t(e).mul(i)},e.prototype.multiply=e.prototype.mul,e.prototype.multiplyS=e.prototype.mulS,e.prototype.multiplyM=e.prototype.mulM,e.multiply=e.mul,e.prototype.div=function(e){return"number"==typeof e?this.divS(e):this.divM(e)},e.prototype.divS=function(e){for(let t=0;t<this.rows;t++)for(let i=0;i<this.columns;i++)this.set(t,i,this.get(t,i)/e);return this},e.prototype.divM=function(e){if(e=t.checkMatrix(e),this.rows!==e.rows||this.columns!==e.columns)throw new RangeError("Matrices dimensions must be equal");for(let t=0;t<this.rows;t++)for(let i=0;i<this.columns;i++)this.set(t,i,this.get(t,i)/e.get(t,i));return this},e.div=function(e,i){return new t(e).div(i)},e.prototype.divide=e.prototype.div,e.prototype.divideS=e.prototype.divS,e.prototype.divideM=e.prototype.divM,e.divide=e.div,e.prototype.mod=function(e){return"number"==typeof e?this.modS(e):this.modM(e)},e.prototype.modS=function(e){for(let t=0;t<this.rows;t++)for(let i=0;i<this.columns;i++)this.set(t,i,this.get(t,i)%e);return this},e.prototype.modM=function(e){if(e=t.checkMatrix(e),this.rows!==e.rows||this.columns!==e.columns)throw new RangeError("Matrices dimensions must be equal");for(let t=0;t<this.rows;t++)for(let i=0;i<this.columns;i++)this.set(t,i,this.get(t,i)%e.get(t,i));return this},e.mod=function(e,i){return new t(e).mod(i)},e.prototype.modulus=e.prototype.mod,e.prototype.modulusS=e.prototype.modS,e.prototype.modulusM=e.prototype.modM,e.modulus=e.mod,e.prototype.and=function(e){return"number"==typeof e?this.andS(e):this.andM(e)},e.prototype.andS=function(e){for(let t=0;t<this.rows;t++)for(let i=0;i<this.columns;i++)this.set(t,i,this.get(t,i)&e);return this},e.prototype.andM=function(e){if(e=t.checkMatrix(e),this.rows!==e.rows||this.columns!==e.columns)throw new RangeError("Matrices dimensions must be equal");for(let t=0;t<this.rows;t++)for(let i=0;i<this.columns;i++)this.set(t,i,this.get(t,i)&e.get(t,i));return this},e.and=function(e,i){return new t(e).and(i)},e.prototype.or=function(e){return"number"==typeof e?this.orS(e):this.orM(e)},e.prototype.orS=function(e){for(let t=0;t<this.rows;t++)for(let i=0;i<this.columns;i++)this.set(t,i,this.get(t,i)|e);return this},e.prototype.orM=function(e){if(e=t.checkMatrix(e),this.rows!==e.rows||this.columns!==e.columns)throw new RangeError("Matrices dimensions must be equal");for(let t=0;t<this.rows;t++)for(let i=0;i<this.columns;i++)this.set(t,i,this.get(t,i)|e.get(t,i));return this},e.or=function(e,i){return new t(e).or(i)},e.prototype.xor=function(e){return"number"==typeof e?this.xorS(e):this.xorM(e)},e.prototype.xorS=function(e){for(let t=0;t<this.rows;t++)for(let i=0;i<this.columns;i++)this.set(t,i,this.get(t,i)^e);return this},e.prototype.xorM=function(e){if(e=t.checkMatrix(e),this.rows!==e.rows||this.columns!==e.columns)throw new RangeError("Matrices dimensions must be equal");for(let t=0;t<this.rows;t++)for(let i=0;i<this.columns;i++)this.set(t,i,this.get(t,i)^e.get(t,i));return this},e.xor=function(e,i){return new t(e).xor(i)},e.prototype.leftShift=function(e){return"number"==typeof e?this.leftShiftS(e):this.leftShiftM(e)},e.prototype.leftShiftS=function(e){for(let t=0;t<this.rows;t++)for(let i=0;i<this.columns;i++)this.set(t,i,this.get(t,i)<<e);return this},e.prototype.leftShiftM=function(e){if(e=t.checkMatrix(e),this.rows!==e.rows||this.columns!==e.columns)throw new RangeError("Matrices dimensions must be equal");for(let t=0;t<this.rows;t++)for(let i=0;i<this.columns;i++)this.set(t,i,this.get(t,i)<<e.get(t,i));return this},e.leftShift=function(e,i){return new t(e).leftShift(i)},e.prototype.signPropagatingRightShift=function(e){return"number"==typeof e?this.signPropagatingRightShiftS(e):this.signPropagatingRightShiftM(e)},e.prototype.signPropagatingRightShiftS=function(e){for(let t=0;t<this.rows;t++)for(let i=0;i<this.columns;i++)this.set(t,i,this.get(t,i)>>e);return this},e.prototype.signPropagatingRightShiftM=function(e){if(e=t.checkMatrix(e),this.rows!==e.rows||this.columns!==e.columns)throw new RangeError("Matrices dimensions must be equal");for(let t=0;t<this.rows;t++)for(let i=0;i<this.columns;i++)this.set(t,i,this.get(t,i)>>e.get(t,i));return this},e.signPropagatingRightShift=function(e,i){return new t(e).signPropagatingRightShift(i)},e.prototype.rightShift=function(e){return"number"==typeof e?this.rightShiftS(e):this.rightShiftM(e)},e.prototype.rightShiftS=function(e){for(let t=0;t<this.rows;t++)for(let i=0;i<this.columns;i++)this.set(t,i,this.get(t,i)>>>e);return this},e.prototype.rightShiftM=function(e){if(e=t.checkMatrix(e),this.rows!==e.rows||this.columns!==e.columns)throw new RangeError("Matrices dimensions must be equal");for(let t=0;t<this.rows;t++)for(let i=0;i<this.columns;i++)this.set(t,i,this.get(t,i)>>>e.get(t,i));return this},e.rightShift=function(e,i){return new t(e).rightShift(i)},e.prototype.zeroFillRightShift=e.prototype.rightShift,e.prototype.zeroFillRightShiftS=e.prototype.rightShiftS,e.prototype.zeroFillRightShiftM=e.prototype.rightShiftM,e.zeroFillRightShift=e.rightShift,e.prototype.not=function(){for(let e=0;e<this.rows;e++)for(let t=0;t<this.columns;t++)this.set(e,t,~this.get(e,t));return this},e.not=function(e){return new t(e).not()},e.prototype.abs=function(){for(let e=0;e<this.rows;e++)for(let t=0;t<this.columns;t++)this.set(e,t,Math.abs(this.get(e,t)));return this},e.abs=function(e){return new t(e).abs()},e.prototype.acos=function(){for(let e=0;e<this.rows;e++)for(let t=0;t<this.columns;t++)this.set(e,t,Math.acos(this.get(e,t)));return this},e.acos=function(e){return new t(e).acos()},e.prototype.acosh=function(){for(let e=0;e<this.rows;e++)for(let t=0;t<this.columns;t++)this.set(e,t,Math.acosh(this.get(e,t)));return this},e.acosh=function(e){return new t(e).acosh()},e.prototype.asin=function(){for(let e=0;e<this.rows;e++)for(let t=0;t<this.columns;t++)this.set(e,t,Math.asin(this.get(e,t)));return this},e.asin=function(e){return new t(e).asin()},e.prototype.asinh=function(){for(let e=0;e<this.rows;e++)for(let t=0;t<this.columns;t++)this.set(e,t,Math.asinh(this.get(e,t)));return this},e.asinh=function(e){return new t(e).asinh()},e.prototype.atan=function(){for(let e=0;e<this.rows;e++)for(let t=0;t<this.columns;t++)this.set(e,t,Math.atan(this.get(e,t)));return this},e.atan=function(e){return new t(e).atan()},e.prototype.atanh=function(){for(let e=0;e<this.rows;e++)for(let t=0;t<this.columns;t++)this.set(e,t,Math.atanh(this.get(e,t)));return this},e.atanh=function(e){return new t(e).atanh()},e.prototype.cbrt=function(){for(let e=0;e<this.rows;e++)for(let t=0;t<this.columns;t++)this.set(e,t,Math.cbrt(this.get(e,t)));return this},e.cbrt=function(e){return new t(e).cbrt()},e.prototype.ceil=function(){for(let e=0;e<this.rows;e++)for(let t=0;t<this.columns;t++)this.set(e,t,Math.ceil(this.get(e,t)));return this},e.ceil=function(e){return new t(e).ceil()},e.prototype.clz32=function(){for(let e=0;e<this.rows;e++)for(let t=0;t<this.columns;t++)this.set(e,t,Math.clz32(this.get(e,t)));return this},e.clz32=function(e){return new t(e).clz32()},e.prototype.cos=function(){for(let e=0;e<this.rows;e++)for(let t=0;t<this.columns;t++)this.set(e,t,Math.cos(this.get(e,t)));return this},e.cos=function(e){return new t(e).cos()},e.prototype.cosh=function(){for(let e=0;e<this.rows;e++)for(let t=0;t<this.columns;t++)this.set(e,t,Math.cosh(this.get(e,t)));return this},e.cosh=function(e){return new t(e).cosh()},e.prototype.exp=function(){for(let e=0;e<this.rows;e++)for(let t=0;t<this.columns;t++)this.set(e,t,Math.exp(this.get(e,t)));return this},e.exp=function(e){return new t(e).exp()},e.prototype.expm1=function(){for(let e=0;e<this.rows;e++)for(let t=0;t<this.columns;t++)this.set(e,t,Math.expm1(this.get(e,t)));return this},e.expm1=function(e){return new t(e).expm1()},e.prototype.floor=function(){for(let e=0;e<this.rows;e++)for(let t=0;t<this.columns;t++)this.set(e,t,Math.floor(this.get(e,t)));return this},e.floor=function(e){return new t(e).floor()},e.prototype.fround=function(){for(let e=0;e<this.rows;e++)for(let t=0;t<this.columns;t++)this.set(e,t,Math.fround(this.get(e,t)));return this},e.fround=function(e){return new t(e).fround()},e.prototype.log=function(){for(let e=0;e<this.rows;e++)for(let t=0;t<this.columns;t++)this.set(e,t,Math.log(this.get(e,t)));return this},e.log=function(e){return new t(e).log()},e.prototype.log1p=function(){for(let e=0;e<this.rows;e++)for(let t=0;t<this.columns;t++)this.set(e,t,Math.log1p(this.get(e,t)));return this},e.log1p=function(e){return new t(e).log1p()},e.prototype.log10=function(){for(let e=0;e<this.rows;e++)for(let t=0;t<this.columns;t++)this.set(e,t,Math.log10(this.get(e,t)));return this},e.log10=function(e){return new t(e).log10()},e.prototype.log2=function(){for(let e=0;e<this.rows;e++)for(let t=0;t<this.columns;t++)this.set(e,t,Math.log2(this.get(e,t)));return this},e.log2=function(e){return new t(e).log2()},e.prototype.round=function(){for(let e=0;e<this.rows;e++)for(let t=0;t<this.columns;t++)this.set(e,t,Math.round(this.get(e,t)));return this},e.round=function(e){return new t(e).round()},e.prototype.sign=function(){for(let e=0;e<this.rows;e++)for(let t=0;t<this.columns;t++)this.set(e,t,Math.sign(this.get(e,t)));return this},e.sign=function(e){return new t(e).sign()},e.prototype.sin=function(){for(let e=0;e<this.rows;e++)for(let t=0;t<this.columns;t++)this.set(e,t,Math.sin(this.get(e,t)));return this},e.sin=function(e){return new t(e).sin()},e.prototype.sinh=function(){for(let e=0;e<this.rows;e++)for(let t=0;t<this.columns;t++)this.set(e,t,Math.sinh(this.get(e,t)));return this},e.sinh=function(e){return new t(e).sinh()},e.prototype.sqrt=function(){for(let e=0;e<this.rows;e++)for(let t=0;t<this.columns;t++)this.set(e,t,Math.sqrt(this.get(e,t)));return this},e.sqrt=function(e){return new t(e).sqrt()},e.prototype.tan=function(){for(let e=0;e<this.rows;e++)for(let t=0;t<this.columns;t++)this.set(e,t,Math.tan(this.get(e,t)));return this},e.tan=function(e){return new t(e).tan()},e.prototype.tanh=function(){for(let e=0;e<this.rows;e++)for(let t=0;t<this.columns;t++)this.set(e,t,Math.tanh(this.get(e,t)));return this},e.tanh=function(e){return new t(e).tanh()},e.prototype.trunc=function(){for(let e=0;e<this.rows;e++)for(let t=0;t<this.columns;t++)this.set(e,t,Math.trunc(this.get(e,t)));return this},e.trunc=function(e){return new t(e).trunc()},e.pow=function(e,i){return new t(e).pow(i)},e.prototype.pow=function(e){return"number"==typeof e?this.powS(e):this.powM(e)},e.prototype.powS=function(e){for(let t=0;t<this.rows;t++)for(let i=0;i<this.columns;i++)this.set(t,i,this.get(t,i)**e);return this},e.prototype.powM=function(e){if(e=t.checkMatrix(e),this.rows!==e.rows||this.columns!==e.columns)throw new RangeError("Matrices dimensions must be equal");for(let t=0;t<this.rows;t++)for(let i=0;i<this.columns;i++)this.set(t,i,this.get(t,i)**e.get(t,i));return this}}(Fb,yb);class Ab extends Fb{#I;get size(){return this.#I.size}get rows(){return this.#I.rows}get columns(){return this.#I.columns}get diagonalSize(){return this.rows}static isSymmetricMatrix(e){return yb.isMatrix(e)&&"SymmetricMatrix"===e.klassType}static zeros(e){return new this(e)}static ones(e){return new this(e).fill(1)}constructor(e){if(super(),yb.isMatrix(e)){if(!e.isSymmetric())throw new TypeError("not symmetric data");this.#I=yb.copy(e,new yb(e.rows,e.rows))}else if(Number.isInteger(e)&&e>=0)this.#I=new yb(e,e);else if(this.#I=new yb(e),!this.isSymmetric())throw new TypeError("not symmetric data")}clone(){const e=new Ab(this.diagonalSize);for(const[t,i,n]of this.upperRightEntries())e.set(t,i,n);return e}toMatrix(){return new yb(this)}get(e,t){return this.#I.get(e,t)}set(e,t,i){return this.#I.set(e,t,i),this.#I.set(t,e,i),this}removeCross(e){return this.#I.removeRow(e),this.#I.removeColumn(e),this}addCross(e,t){void 0===t&&(t=e,e=this.diagonalSize);const i=t.slice();return i.splice(e,1),this.#I.addRow(e,i),this.#I.addColumn(e,t),this}applyMask(e){if(e.length!==this.diagonalSize)throw new RangeError("Mask size do not match with matrix size");const t=[];for(const[i,n]of e.entries())n||t.push(i);t.reverse();for(const e of t)this.removeCross(e);return this}toCompact(){const{diagonalSize:e}=this,t=new Array(e*(e+1)/2);for(let i=0,n=0,r=0;r<t.length;r++)t[r]=this.get(n,i),++i>=e&&(i=++n);return t}static fromCompact(e){const t=e.length,i=(Math.sqrt(8*t+1)-1)/2;if(!Number.isInteger(i))throw new TypeError(`This array is not a compact representation of a Symmetric Matrix, ${JSON.stringify(e)}`);const n=new Ab(i);for(let r=0,s=0,o=0;o<t;o++)n.set(r,s,e[o]),++r>=i&&(r=++s);return n}*upperRightEntries(){for(let e=0,t=0;e<this.diagonalSize;void 0){const i=this.get(e,t);yield[e,t,i],++t>=this.diagonalSize&&(t=++e)}}*upperRightValues(){for(let e=0,t=0;e<this.diagonalSize;void 0){const i=this.get(e,t);yield i,++t>=this.diagonalSize&&(t=++e)}}}Ab.prototype.klassType="SymmetricMatrix";class Cb extends Ab{static isDistanceMatrix(e){return Ab.isSymmetricMatrix(e)&&"DistanceMatrix"===e.klassSubType}constructor(e){if(super(e),!this.isDistance())throw new TypeError("Provided arguments do no produce a distance matrix")}set(e,t,i){return e===t&&(i=0),super.set(e,t,i)}addCross(e,t){return void 0===t&&(t=e,e=this.diagonalSize),(t=t.slice())[e]=0,super.addCross(e,t)}toSymmetricMatrix(){return new Ab(this)}clone(){const e=new Cb(this.diagonalSize);for(const[t,i,n]of this.upperRightEntries())t!==i&&e.set(t,i,n);return e}toCompact(){const{diagonalSize:e}=this,t=new Array((e-1)*e/2);for(let i=1,n=0,r=0;r<t.length;r++)t[r]=this.get(n,i),++i>=e&&(i=1+ ++n);return t}static fromCompact(e){const t=e.length;if(0===t)return new this(0);const i=(Math.sqrt(8*t+1)+1)/2;if(!Number.isInteger(i))throw new TypeError(`This array is not a compact representation of a DistanceMatrix, ${JSON.stringify(e)}`);const n=new this(i);for(let r=1,s=0,o=0;o<t;o++)n.set(r,s,e[o]),++r>=i&&(r=1+ ++s);return n}}Cb.prototype.klassSubType="DistanceMatrix";class _b extends Fb{constructor(e,t,i){super(),this.matrix=e,this.rows=t,this.columns=i}}class xb extends _b{constructor(e,t,i){fb(e,t),pb(e,i),super(e,t.length,i.length),this.rowIndices=t,this.columnIndices=i}set(e,t,i){return this.matrix.set(this.rowIndices[e],this.columnIndices[t],i),this}get(e,t){return this.matrix.get(this.rowIndices[e],this.columnIndices[t])}}class kb extends Fb{constructor(e,t={}){const{rows:i=1}=t;if(e.length%i!=0)throw new Error("the data length is not divisible by the number of rows");super(),this.rows=i,this.columns=e.length/i,this.data=e}set(e,t,i){let n=this._calculateIndex(e,t);return this.data[n]=i,this}get(e,t){let i=this._calculateIndex(e,t);return this.data[i]}_calculateIndex(e,t){return e*this.columns+t}}class Ib extends Fb{constructor(e){super(),this.data=e,this.rows=e.length,this.columns=e[0].length}set(e,t,i){return this.data[e][t]=i,this}get(e,t){return this.data[e][t]}}class Sb{constructor(e){let t,i,n,r,s,o,a,c,l,h=(e=Ib.checkMatrix(e)).clone(),d=h.rows,u=h.columns,f=new Float64Array(d),p=1;for(t=0;t<d;t++)f[t]=t;for(c=new Float64Array(d),i=0;i<u;i++){for(t=0;t<d;t++)c[t]=h.get(t,i);for(t=0;t<d;t++){for(l=Math.min(t,i),s=0,n=0;n<l;n++)s+=h.get(t,n)*c[n];c[t]-=s,h.set(t,i,c[t])}for(r=i,t=i+1;t<d;t++)Math.abs(c[t])>Math.abs(c[r])&&(r=t);if(r!==i){for(n=0;n<u;n++)o=h.get(r,n),h.set(r,n,h.get(i,n)),h.set(i,n,o);a=f[r],f[r]=f[i],f[i]=a,p=-p}if(i<d&&0!==h.get(i,i))for(t=i+1;t<d;t++)h.set(t,i,h.get(t,i)/h.get(i,i))}this.LU=h,this.pivotVector=f,this.pivotSign=p}isSingular(){let e=this.LU,t=e.columns;for(let i=0;i<t;i++)if(0===e.get(i,i))return!0;return!1}solve(e){e=yb.checkMatrix(e);let t=this.LU;if(t.rows!==e.rows)throw new Error("Invalid matrix dimensions");if(this.isSingular())throw new Error("LU matrix is singular");let i,n,r,s=e.columns,o=e.subMatrixRow(this.pivotVector,0,s-1),a=t.columns;for(r=0;r<a;r++)for(i=r+1;i<a;i++)for(n=0;n<s;n++)o.set(i,n,o.get(i,n)-o.get(r,n)*t.get(i,r));for(r=a-1;r>=0;r--){for(n=0;n<s;n++)o.set(r,n,o.get(r,n)/t.get(r,r));for(i=0;i<r;i++)for(n=0;n<s;n++)o.set(i,n,o.get(i,n)-o.get(r,n)*t.get(i,r))}return o}get determinant(){let e=this.LU;if(!e.isSquare())throw new Error("Matrix must be square");let t=this.pivotSign,i=e.columns;for(let n=0;n<i;n++)t*=e.get(n,n);return t}get lowerTriangularMatrix(){let e=this.LU,t=e.rows,i=e.columns,n=new yb(t,i);for(let r=0;r<t;r++)for(let t=0;t<i;t++)r>t?n.set(r,t,e.get(r,t)):r===t?n.set(r,t,1):n.set(r,t,0);return n}get upperTriangularMatrix(){let e=this.LU,t=e.rows,i=e.columns,n=new yb(t,i);for(let r=0;r<t;r++)for(let t=0;t<i;t++)r<=t?n.set(r,t,e.get(r,t)):n.set(r,t,0);return n}get pivotPermutationVector(){return Array.from(this.pivotVector)}}function Eb(e,t){let i=0;return Math.abs(e)>Math.abs(t)?(i=t/e,Math.abs(e)*Math.sqrt(1+i*i)):0!==t?(i=e/t,Math.abs(t)*Math.sqrt(1+i*i)):0}class Nb{constructor(e){let t,i,n,r,s=(e=Ib.checkMatrix(e)).clone(),o=e.rows,a=e.columns,c=new Float64Array(a);for(n=0;n<a;n++){let e=0;for(t=n;t<o;t++)e=Eb(e,s.get(t,n));if(0!==e){for(s.get(n,n)<0&&(e=-e),t=n;t<o;t++)s.set(t,n,s.get(t,n)/e);for(s.set(n,n,s.get(n,n)+1),i=n+1;i<a;i++){for(r=0,t=n;t<o;t++)r+=s.get(t,n)*s.get(t,i);for(r=-r/s.get(n,n),t=n;t<o;t++)s.set(t,i,s.get(t,i)+r*s.get(t,n))}}c[n]=-e}this.QR=s,this.Rdiag=c}solve(e){e=yb.checkMatrix(e);let t=this.QR,i=t.rows;if(e.rows!==i)throw new Error("Matrix row dimensions must agree");if(!this.isFullRank())throw new Error("Matrix is rank deficient");let n,r,s,o,a=e.columns,c=e.clone(),l=t.columns;for(s=0;s<l;s++)for(r=0;r<a;r++){for(o=0,n=s;n<i;n++)o+=t.get(n,s)*c.get(n,r);for(o=-o/t.get(s,s),n=s;n<i;n++)c.set(n,r,c.get(n,r)+o*t.get(n,s))}for(s=l-1;s>=0;s--){for(r=0;r<a;r++)c.set(s,r,c.get(s,r)/this.Rdiag[s]);for(n=0;n<s;n++)for(r=0;r<a;r++)c.set(n,r,c.get(n,r)-c.get(s,r)*t.get(n,s))}return c.subMatrix(0,l-1,0,a-1)}isFullRank(){let e=this.QR.columns;for(let t=0;t<e;t++)if(0===this.Rdiag[t])return!1;return!0}get upperTriangularMatrix(){let e,t,i=this.QR,n=i.columns,r=new yb(n,n);for(e=0;e<n;e++)for(t=0;t<n;t++)e<t?r.set(e,t,i.get(e,t)):e===t?r.set(e,t,this.Rdiag[e]):r.set(e,t,0);return r}get orthogonalMatrix(){let e,t,i,n,r=this.QR,s=r.rows,o=r.columns,a=new yb(s,o);for(i=o-1;i>=0;i--){for(e=0;e<s;e++)a.set(e,i,0);for(a.set(i,i,1),t=i;t<o;t++)if(0!==r.get(i,i)){for(n=0,e=i;e<s;e++)n+=r.get(e,i)*a.get(e,t);for(n=-n/r.get(i,i),e=i;e<s;e++)a.set(e,t,a.get(e,t)+n*r.get(e,i))}}return a}}class Mb{constructor(e,t={}){if((e=Ib.checkMatrix(e)).isEmpty())throw new Error("Matrix must be non-empty");let i=e.rows,n=e.columns;const{computeLeftSingularVectors:r=!0,computeRightSingularVectors:s=!0,autoTranspose:o=!1}=t;let a,c=Boolean(r),l=Boolean(s),h=!1;if(i<n)if(o){a=e.transpose(),i=a.rows,n=a.columns,h=!0;let t=c;c=l,l=t}else a=e.clone(),console.warn("Computing SVD on a matrix with more columns than rows. Consider enabling autoTranspose");else a=e.clone();let d=Math.min(i,n),u=Math.min(i+1,n),f=new Float64Array(u),p=new yb(i,d),g=new yb(n,n),m=new Float64Array(n),w=new Float64Array(i),b=new Float64Array(u);for(let e=0;e<u;e++)b[e]=e;let F=Math.min(i-1,n),v=Math.max(0,Math.min(n-2,i)),y=Math.max(F,v);for(let e=0;e<y;e++){if(e<F){f[e]=0;for(let t=e;t<i;t++)f[e]=Eb(f[e],a.get(t,e));if(0!==f[e]){a.get(e,e)<0&&(f[e]=-f[e]);for(let t=e;t<i;t++)a.set(t,e,a.get(t,e)/f[e]);a.set(e,e,a.get(e,e)+1)}f[e]=-f[e]}for(let t=e+1;t<n;t++){if(e<F&&0!==f[e]){let n=0;for(let r=e;r<i;r++)n+=a.get(r,e)*a.get(r,t);n=-n/a.get(e,e);for(let r=e;r<i;r++)a.set(r,t,a.get(r,t)+n*a.get(r,e))}m[t]=a.get(e,t)}if(c&&e<F)for(let t=e;t<i;t++)p.set(t,e,a.get(t,e));if(e<v){m[e]=0;for(let t=e+1;t<n;t++)m[e]=Eb(m[e],m[t]);if(0!==m[e]){m[e+1]<0&&(m[e]=0-m[e]);for(let t=e+1;t<n;t++)m[t]/=m[e];m[e+1]+=1}if(m[e]=-m[e],e+1<i&&0!==m[e]){for(let t=e+1;t<i;t++)w[t]=0;for(let t=e+1;t<i;t++)for(let i=e+1;i<n;i++)w[t]+=m[i]*a.get(t,i);for(let t=e+1;t<n;t++){let n=-m[t]/m[e+1];for(let r=e+1;r<i;r++)a.set(r,t,a.get(r,t)+n*w[r])}}if(l)for(let t=e+1;t<n;t++)g.set(t,e,m[t])}}let A=Math.min(n,i+1);if(F<n&&(f[F]=a.get(F,F)),i<A&&(f[A-1]=0),v+1<A&&(m[v]=a.get(v,A-1)),m[A-1]=0,c){for(let e=F;e<d;e++){for(let t=0;t<i;t++)p.set(t,e,0);p.set(e,e,1)}for(let e=F-1;e>=0;e--)if(0!==f[e]){for(let t=e+1;t<d;t++){let n=0;for(let r=e;r<i;r++)n+=p.get(r,e)*p.get(r,t);n=-n/p.get(e,e);for(let r=e;r<i;r++)p.set(r,t,p.get(r,t)+n*p.get(r,e))}for(let t=e;t<i;t++)p.set(t,e,-p.get(t,e));p.set(e,e,1+p.get(e,e));for(let t=0;t<e-1;t++)p.set(t,e,0)}else{for(let t=0;t<i;t++)p.set(t,e,0);p.set(e,e,1)}}if(l)for(let e=n-1;e>=0;e--){if(e<v&&0!==m[e])for(let t=e+1;t<n;t++){let i=0;for(let r=e+1;r<n;r++)i+=g.get(r,e)*g.get(r,t);i=-i/g.get(e+1,e);for(let r=e+1;r<n;r++)g.set(r,t,g.get(r,t)+i*g.get(r,e))}for(let t=0;t<n;t++)g.set(t,e,0);g.set(e,e,1)}let C=A-1,_=Number.EPSILON;for(;A>0;){let e,t;for(e=A-2;e>=-1&&-1!==e;e--){const t=Number.MIN_VALUE+_*Math.abs(f[e]+Math.abs(f[e+1]));if(Math.abs(m[e])<=t||Number.isNaN(m[e])){m[e]=0;break}}if(e===A-2)t=4;else{let i;for(i=A-1;i>=e&&i!==e;i--){let t=(i!==A?Math.abs(m[i]):0)+(i!==e+1?Math.abs(m[i-1]):0);if(Math.abs(f[i])<=_*t){f[i]=0;break}}i===e?t=3:i===A-1?t=1:(t=2,e=i)}switch(e++,t){case 1:{let t=m[A-2];m[A-2]=0;for(let i=A-2;i>=e;i--){let r=Eb(f[i],t),s=f[i]/r,o=t/r;if(f[i]=r,i!==e&&(t=-o*m[i-1],m[i-1]=s*m[i-1]),l)for(let e=0;e<n;e++)r=s*g.get(e,i)+o*g.get(e,A-1),g.set(e,A-1,-o*g.get(e,i)+s*g.get(e,A-1)),g.set(e,i,r)}break}case 2:{let t=m[e-1];m[e-1]=0;for(let n=e;n<A;n++){let r=Eb(f[n],t),s=f[n]/r,o=t/r;if(f[n]=r,t=-o*m[n],m[n]=s*m[n],c)for(let t=0;t<i;t++)r=s*p.get(t,n)+o*p.get(t,e-1),p.set(t,e-1,-o*p.get(t,n)+s*p.get(t,e-1)),p.set(t,n,r)}break}case 3:{const t=Math.max(Math.abs(f[A-1]),Math.abs(f[A-2]),Math.abs(m[A-2]),Math.abs(f[e]),Math.abs(m[e])),r=f[A-1]/t,s=f[A-2]/t,o=m[A-2]/t,a=f[e]/t,h=m[e]/t,d=((s+r)*(s-r)+o*o)/2,u=r*o*(r*o);let w=0;0===d&&0===u||(w=d<0?0-Math.sqrt(d*d+u):Math.sqrt(d*d+u),w=u/(d+w));let b=(a+r)*(a-r)+w,F=a*h;for(let t=e;t<A-1;t++){let r=Eb(b,F);0===r&&(r=Number.MIN_VALUE);let s=b/r,o=F/r;if(t!==e&&(m[t-1]=r),b=s*f[t]+o*m[t],m[t]=s*m[t]-o*f[t],F=o*f[t+1],f[t+1]=s*f[t+1],l)for(let e=0;e<n;e++)r=s*g.get(e,t)+o*g.get(e,t+1),g.set(e,t+1,-o*g.get(e,t)+s*g.get(e,t+1)),g.set(e,t,r);if(r=Eb(b,F),0===r&&(r=Number.MIN_VALUE),s=b/r,o=F/r,f[t]=r,b=s*m[t]+o*f[t+1],f[t+1]=-o*m[t]+s*f[t+1],F=o*m[t+1],m[t+1]=s*m[t+1],c&&t<i-1)for(let e=0;e<i;e++)r=s*p.get(e,t)+o*p.get(e,t+1),p.set(e,t+1,-o*p.get(e,t)+s*p.get(e,t+1)),p.set(e,t,r)}m[A-2]=b;break}case 4:if(f[e]<=0&&(f[e]=f[e]<0?-f[e]:0,l))for(let t=0;t<=C;t++)g.set(t,e,-g.get(t,e));for(;e<C&&!(f[e]>=f[e+1]);){let t=f[e];if(f[e]=f[e+1],f[e+1]=t,l&&e<n-1)for(let i=0;i<n;i++)t=g.get(i,e+1),g.set(i,e+1,g.get(i,e)),g.set(i,e,t);if(c&&e<i-1)for(let n=0;n<i;n++)t=p.get(n,e+1),p.set(n,e+1,p.get(n,e)),p.set(n,e,t);e++}A--}}if(h){let e=g;g=p,p=e}this.m=i,this.n=n,this.s=f,this.U=p,this.V=g}solve(e){let t=e,i=this.threshold,n=this.s.length,r=yb.zeros(n,n);for(let e=0;e<n;e++)Math.abs(this.s[e])<=i?r.set(e,e,0):r.set(e,e,1/this.s[e]);let s=this.U,o=this.rightSingularVectors,a=o.mmul(r),c=o.rows,l=s.rows,h=yb.zeros(c,l);for(let e=0;e<c;e++)for(let t=0;t<l;t++){let i=0;for(let r=0;r<n;r++)i+=a.get(e,r)*s.get(t,r);h.set(e,t,i)}return h.mmul(t)}solveForDiagonal(e){return this.solve(yb.diag(e))}inverse(){let e=this.V,t=this.threshold,i=e.rows,n=e.columns,r=new yb(i,this.s.length);for(let s=0;s<i;s++)for(let i=0;i<n;i++)Math.abs(this.s[i])>t&&r.set(s,i,e.get(s,i)/this.s[i]);let s=this.U,o=s.rows,a=s.columns,c=new yb(i,o);for(let e=0;e<i;e++)for(let t=0;t<o;t++){let i=0;for(let n=0;n<a;n++)i+=r.get(e,n)*s.get(t,n);c.set(e,t,i)}return c}get condition(){return this.s[0]/this.s[Math.min(this.m,this.n)-1]}get norm2(){return this.s[0]}get rank(){let e=Math.max(this.m,this.n)*this.s[0]*Number.EPSILON,t=0,i=this.s;for(let n=0,r=i.length;n<r;n++)i[n]>e&&t++;return t}get diagonal(){return Array.from(this.s)}get threshold(){return Number.EPSILON/2*Math.max(this.m,this.n)*this.s[0]}get leftSingularVectors(){return this.U}get rightSingularVectors(){return this.V}get diagonalMatrix(){return yb.diag(this.s)}}function Rb(e,t,i=!1){return e=Ib.checkMatrix(e),t=Ib.checkMatrix(t),i?new Mb(e).solve(t):e.isSquare()?new Sb(e).solve(t):new Nb(e).solve(t)}function Bb(e,t){let i=[];for(let n=0;n<e;n++)n!==t&&i.push(n);return i}function Db(e,t,i,n=1e-9,r=1e-9){if(e>r)return new Array(t.rows+1).fill(0);{let e=t.addRow(i,[0]);for(let t=0;t<e.rows;t++)Math.abs(e.get(t,0))<n&&e.set(t,0,0);return e.to1DArray()}}class Tb{constructor(e,t={}){const{assumeSymmetric:i=!1}=t;if(!(e=Ib.checkMatrix(e)).isSquare())throw new Error("Matrix is not a square matrix");if(e.isEmpty())throw new Error("Matrix must be non-empty");let n,r,s=e.columns,o=new yb(s,s),a=new Float64Array(s),c=new Float64Array(s),l=e,h=!1;if(h=!!i||e.isSymmetric(),h){for(n=0;n<s;n++)for(r=0;r<s;r++)o.set(n,r,l.get(n,r));!function(e,t,i,n){let r,s,o,a,c,l,h,d;for(c=0;c<e;c++)i[c]=n.get(e-1,c);for(a=e-1;a>0;a--){for(d=0,o=0,l=0;l<a;l++)d+=Math.abs(i[l]);if(0===d)for(t[a]=i[a-1],c=0;c<a;c++)i[c]=n.get(a-1,c),n.set(a,c,0),n.set(c,a,0);else{for(l=0;l<a;l++)i[l]/=d,o+=i[l]*i[l];for(r=i[a-1],s=Math.sqrt(o),r>0&&(s=-s),t[a]=d*s,o-=r*s,i[a-1]=r-s,c=0;c<a;c++)t[c]=0;for(c=0;c<a;c++){for(r=i[c],n.set(c,a,r),s=t[c]+n.get(c,c)*r,l=c+1;l<=a-1;l++)s+=n.get(l,c)*i[l],t[l]+=n.get(l,c)*r;t[c]=s}for(r=0,c=0;c<a;c++)t[c]/=o,r+=t[c]*i[c];for(h=r/(o+o),c=0;c<a;c++)t[c]-=h*i[c];for(c=0;c<a;c++){for(r=i[c],s=t[c],l=c;l<=a-1;l++)n.set(l,c,n.get(l,c)-(r*t[l]+s*i[l]));i[c]=n.get(a-1,c),n.set(a,c,0)}}i[a]=o}for(a=0;a<e-1;a++){if(n.set(e-1,a,n.get(a,a)),n.set(a,a,1),o=i[a+1],0!==o){for(l=0;l<=a;l++)i[l]=n.get(l,a+1)/o;for(c=0;c<=a;c++){for(s=0,l=0;l<=a;l++)s+=n.get(l,a+1)*n.get(l,c);for(l=0;l<=a;l++)n.set(l,c,n.get(l,c)-s*i[l])}}for(l=0;l<=a;l++)n.set(l,a+1,0)}for(c=0;c<e;c++)i[c]=n.get(e-1,c),n.set(e-1,c,0);n.set(e-1,e-1,1),t[0]=0}(s,c,a,o),function(e,t,i,n){let r,s,o,a,c,l,h,d,u,f,p,g,m,w,b,F;for(o=1;o<e;o++)t[o-1]=t[o];t[e-1]=0;let v=0,y=0,A=Number.EPSILON;for(l=0;l<e;l++){for(y=Math.max(y,Math.abs(i[l])+Math.abs(t[l])),h=l;h<e&&!(Math.abs(t[h])<=A*y);)h++;if(h>l)do{for(r=i[l],d=(i[l+1]-r)/(2*t[l]),u=Eb(d,1),d<0&&(u=-u),i[l]=t[l]/(d+u),i[l+1]=t[l]*(d+u),f=i[l+1],s=r-i[l],o=l+2;o<e;o++)i[o]-=s;for(v+=s,d=i[h],p=1,g=p,m=p,w=t[l+1],b=0,F=0,o=h-1;o>=l;o--)for(m=g,g=p,F=b,r=p*t[o],s=p*d,u=Eb(d,t[o]),t[o+1]=b*u,b=t[o]/u,p=d/u,d=p*i[o]-b*r,i[o+1]=s+b*(p*r+b*i[o]),c=0;c<e;c++)s=n.get(c,o+1),n.set(c,o+1,b*n.get(c,o)+p*s),n.set(c,o,p*n.get(c,o)-b*s);d=-b*F*m*w*t[l]/f,t[l]=b*d,i[l]=p*d}while(Math.abs(t[l])>A*y);i[l]=i[l]+v,t[l]=0}for(o=0;o<e-1;o++){for(c=o,d=i[o],a=o+1;a<e;a++)i[a]<d&&(c=a,d=i[a]);if(c!==o)for(i[c]=i[o],i[o]=d,a=0;a<e;a++)d=n.get(a,o),n.set(a,o,n.get(a,c)),n.set(a,c,d)}}(s,c,a,o)}else{let e=new yb(s,s),t=new Float64Array(s);for(r=0;r<s;r++)for(n=0;n<s;n++)e.set(n,r,l.get(n,r));!function(e,t,i,n){let r,s,o,a,c,l,h,d=0,u=e-1;for(l=d+1;l<=u-1;l++){for(h=0,a=l;a<=u;a++)h+=Math.abs(t.get(a,l-1));if(0!==h){for(o=0,a=u;a>=l;a--)i[a]=t.get(a,l-1)/h,o+=i[a]*i[a];for(s=Math.sqrt(o),i[l]>0&&(s=-s),o-=i[l]*s,i[l]=i[l]-s,c=l;c<e;c++){for(r=0,a=u;a>=l;a--)r+=i[a]*t.get(a,c);for(r/=o,a=l;a<=u;a++)t.set(a,c,t.get(a,c)-r*i[a])}for(a=0;a<=u;a++){for(r=0,c=u;c>=l;c--)r+=i[c]*t.get(a,c);for(r/=o,c=l;c<=u;c++)t.set(a,c,t.get(a,c)-r*i[c])}i[l]=h*i[l],t.set(l,l-1,h*s)}}for(a=0;a<e;a++)for(c=0;c<e;c++)n.set(a,c,a===c?1:0);for(l=u-1;l>=d+1;l--)if(0!==t.get(l,l-1)){for(a=l+1;a<=u;a++)i[a]=t.get(a,l-1);for(c=l;c<=u;c++){for(s=0,a=l;a<=u;a++)s+=i[a]*n.get(a,c);for(s=s/i[l]/t.get(l,l-1),a=l;a<=u;a++)n.set(a,c,n.get(a,c)+s*i[a])}}}(s,e,t,o),function(e,t,i,n,r){let s,o,a,c,l,h,d,u,f,p,g,m,w,b,F,v=e-1,y=0,A=e-1,C=Number.EPSILON,_=0,x=0,k=0,I=0,S=0,E=0,N=0,M=0;for(s=0;s<e;s++)for((s<y||s>A)&&(i[s]=r.get(s,s),t[s]=0),o=Math.max(s-1,0);o<e;o++)x+=Math.abs(r.get(s,o));for(;v>=y;){for(c=v;c>y&&(E=Math.abs(r.get(c-1,c-1))+Math.abs(r.get(c,c)),0===E&&(E=x),!(Math.abs(r.get(c,c-1))<C*E));)c--;if(c===v)r.set(v,v,r.get(v,v)+_),i[v]=r.get(v,v),t[v]=0,v--,M=0;else if(c===v-1){if(d=r.get(v,v-1)*r.get(v-1,v),k=(r.get(v-1,v-1)-r.get(v,v))/2,I=k*k+d,N=Math.sqrt(Math.abs(I)),r.set(v,v,r.get(v,v)+_),r.set(v-1,v-1,r.get(v-1,v-1)+_),u=r.get(v,v),I>=0){for(N=k>=0?k+N:k-N,i[v-1]=u+N,i[v]=i[v-1],0!==N&&(i[v]=u-d/N),t[v-1]=0,t[v]=0,u=r.get(v,v-1),E=Math.abs(u)+Math.abs(N),k=u/E,I=N/E,S=Math.sqrt(k*k+I*I),k/=S,I/=S,o=v-1;o<e;o++)N=r.get(v-1,o),r.set(v-1,o,I*N+k*r.get(v,o)),r.set(v,o,I*r.get(v,o)-k*N);for(s=0;s<=v;s++)N=r.get(s,v-1),r.set(s,v-1,I*N+k*r.get(s,v)),r.set(s,v,I*r.get(s,v)-k*N);for(s=y;s<=A;s++)N=n.get(s,v-1),n.set(s,v-1,I*N+k*n.get(s,v)),n.set(s,v,I*n.get(s,v)-k*N)}else i[v-1]=u+k,i[v]=u+k,t[v-1]=N,t[v]=-N;v-=2,M=0}else{if(u=r.get(v,v),f=0,d=0,c<v&&(f=r.get(v-1,v-1),d=r.get(v,v-1)*r.get(v-1,v)),10===M){for(_+=u,s=y;s<=v;s++)r.set(s,s,r.get(s,s)-u);E=Math.abs(r.get(v,v-1))+Math.abs(r.get(v-1,v-2)),u=f=.75*E,d=-.4375*E*E}if(30===M&&(E=(f-u)/2,E=E*E+d,E>0)){for(E=Math.sqrt(E),f<u&&(E=-E),E=u-d/((f-u)/2+E),s=y;s<=v;s++)r.set(s,s,r.get(s,s)-E);_+=E,u=f=d=.964}for(M+=1,l=v-2;l>=c&&(N=r.get(l,l),S=u-N,E=f-N,k=(S*E-d)/r.get(l+1,l)+r.get(l,l+1),I=r.get(l+1,l+1)-N-S-E,S=r.get(l+2,l+1),E=Math.abs(k)+Math.abs(I)+Math.abs(S),k/=E,I/=E,S/=E,l!==c)&&!(Math.abs(r.get(l,l-1))*(Math.abs(I)+Math.abs(S))<C*(Math.abs(k)*(Math.abs(r.get(l-1,l-1))+Math.abs(N)+Math.abs(r.get(l+1,l+1)))));)l--;for(s=l+2;s<=v;s++)r.set(s,s-2,0),s>l+2&&r.set(s,s-3,0);for(a=l;a<=v-1&&(b=a!==v-1,a!==l&&(k=r.get(a,a-1),I=r.get(a+1,a-1),S=b?r.get(a+2,a-1):0,u=Math.abs(k)+Math.abs(I)+Math.abs(S),0!==u&&(k/=u,I/=u,S/=u)),0!==u);a++)if(E=Math.sqrt(k*k+I*I+S*S),k<0&&(E=-E),0!==E){for(a!==l?r.set(a,a-1,-E*u):c!==l&&r.set(a,a-1,-r.get(a,a-1)),k+=E,u=k/E,f=I/E,N=S/E,I/=k,S/=k,o=a;o<e;o++)k=r.get(a,o)+I*r.get(a+1,o),b&&(k+=S*r.get(a+2,o),r.set(a+2,o,r.get(a+2,o)-k*N)),r.set(a,o,r.get(a,o)-k*u),r.set(a+1,o,r.get(a+1,o)-k*f);for(s=0;s<=Math.min(v,a+3);s++)k=u*r.get(s,a)+f*r.get(s,a+1),b&&(k+=N*r.get(s,a+2),r.set(s,a+2,r.get(s,a+2)-k*S)),r.set(s,a,r.get(s,a)-k),r.set(s,a+1,r.get(s,a+1)-k*I);for(s=y;s<=A;s++)k=u*n.get(s,a)+f*n.get(s,a+1),b&&(k+=N*n.get(s,a+2),n.set(s,a+2,n.get(s,a+2)-k*S)),n.set(s,a,n.get(s,a)-k),n.set(s,a+1,n.get(s,a+1)-k*I)}}}if(0===x)return;for(v=e-1;v>=0;v--)if(k=i[v],I=t[v],0===I)for(c=v,r.set(v,v,1),s=v-1;s>=0;s--){for(d=r.get(s,s)-k,S=0,o=c;o<=v;o++)S+=r.get(s,o)*r.get(o,v);if(t[s]<0)N=d,E=S;else if(c=s,0===t[s]?r.set(s,v,0!==d?-S/d:-S/(C*x)):(u=r.get(s,s+1),f=r.get(s+1,s),I=(i[s]-k)*(i[s]-k)+t[s]*t[s],h=(u*E-N*S)/I,r.set(s,v,h),r.set(s+1,v,Math.abs(u)>Math.abs(N)?(-S-d*h)/u:(-E-f*h)/N)),h=Math.abs(r.get(s,v)),C*h*h>1)for(o=s;o<=v;o++)r.set(o,v,r.get(o,v)/h)}else if(I<0)for(c=v-1,Math.abs(r.get(v,v-1))>Math.abs(r.get(v-1,v))?(r.set(v-1,v-1,I/r.get(v,v-1)),r.set(v-1,v,-(r.get(v,v)-k)/r.get(v,v-1))):(F=zb(0,-r.get(v-1,v),r.get(v-1,v-1)-k,I),r.set(v-1,v-1,F[0]),r.set(v-1,v,F[1])),r.set(v,v-1,0),r.set(v,v,1),s=v-2;s>=0;s--){for(p=0,g=0,o=c;o<=v;o++)p+=r.get(s,o)*r.get(o,v-1),g+=r.get(s,o)*r.get(o,v);if(d=r.get(s,s)-k,t[s]<0)N=d,S=p,E=g;else if(c=s,0===t[s]?(F=zb(-p,-g,d,I),r.set(s,v-1,F[0]),r.set(s,v,F[1])):(u=r.get(s,s+1),f=r.get(s+1,s),m=(i[s]-k)*(i[s]-k)+t[s]*t[s]-I*I,w=2*(i[s]-k)*I,0===m&&0===w&&(m=C*x*(Math.abs(d)+Math.abs(I)+Math.abs(u)+Math.abs(f)+Math.abs(N))),F=zb(u*S-N*p+I*g,u*E-N*g-I*p,m,w),r.set(s,v-1,F[0]),r.set(s,v,F[1]),Math.abs(u)>Math.abs(N)+Math.abs(I)?(r.set(s+1,v-1,(-p-d*r.get(s,v-1)+I*r.get(s,v))/u),r.set(s+1,v,(-g-d*r.get(s,v)-I*r.get(s,v-1))/u)):(F=zb(-S-f*r.get(s,v-1),-E-f*r.get(s,v),N,I),r.set(s+1,v-1,F[0]),r.set(s+1,v,F[1]))),h=Math.max(Math.abs(r.get(s,v-1)),Math.abs(r.get(s,v))),C*h*h>1)for(o=s;o<=v;o++)r.set(o,v-1,r.get(o,v-1)/h),r.set(o,v,r.get(o,v)/h)}for(s=0;s<e;s++)if(s<y||s>A)for(o=s;o<e;o++)n.set(s,o,r.get(s,o));for(o=e-1;o>=y;o--)for(s=y;s<=A;s++){for(N=0,a=y;a<=Math.min(o,A);a++)N+=n.get(s,a)*r.get(a,o);n.set(s,o,N)}}(s,c,a,o,e)}this.n=s,this.e=c,this.d=a,this.V=o}get realEigenvalues(){return Array.from(this.d)}get imaginaryEigenvalues(){return Array.from(this.e)}get eigenvectorMatrix(){return this.V}get diagonalMatrix(){let e,t,i=this.n,n=this.e,r=this.d,s=new yb(i,i);for(e=0;e<i;e++){for(t=0;t<i;t++)s.set(e,t,0);s.set(e,e,r[e]),n[e]>0?s.set(e,e+1,n[e]):n[e]<0&&s.set(e,e-1,n[e])}return s}}function zb(e,t,i,n){let r,s;return Math.abs(i)>Math.abs(n)?(r=n/i,s=i+r*n,[(e+r*t)/s,(t-r*e)/s]):(r=i/n,s=n+r*i,[(r*e+t)/s,(r*t-e)/s])}class Lb{constructor(e){if(!(e=Ib.checkMatrix(e)).isSymmetric())throw new Error("Matrix is not symmetric");let t,i,n,r=e,s=r.rows,o=new yb(s,s),a=!0;for(i=0;i<s;i++){let e=0;for(n=0;n<i;n++){let s=0;for(t=0;t<n;t++)s+=o.get(n,t)*o.get(i,t);s=(r.get(i,n)-s)/o.get(n,n),o.set(i,n,s),e+=s*s}for(e=r.get(i,i)-e,a&&=e>0,o.set(i,i,Math.sqrt(Math.max(e,0))),n=i+1;n<s;n++)o.set(i,n,0)}this.L=o,this.positiveDefinite=a}isPositiveDefinite(){return this.positiveDefinite}solve(e){e=Ib.checkMatrix(e);let t=this.L,i=t.rows;if(e.rows!==i)throw new Error("Matrix dimensions do not match");if(!1===this.isPositiveDefinite())throw new Error("Matrix is not positive definite");let n,r,s,o=e.columns,a=e.clone();for(s=0;s<i;s++)for(r=0;r<o;r++){for(n=0;n<s;n++)a.set(s,r,a.get(s,r)-a.get(n,r)*t.get(s,n));a.set(s,r,a.get(s,r)/t.get(s,s))}for(s=i-1;s>=0;s--)for(r=0;r<o;r++){for(n=s+1;n<i;n++)a.set(s,r,a.get(s,r)-a.get(n,r)*t.get(n,s));a.set(s,r,a.get(s,r)/t.get(s,s))}return a}get lowerTriangularMatrix(){return this.L}}class Hb{constructor(e,t={}){e=Ib.checkMatrix(e);let{Y:i}=t;const{scaleScores:n=!1,maxIterations:r=1e3,terminationCriteria:s=1e-10}=t;let o;if(i){if(i=ib.isAnyArray(i)&&"number"==typeof i[0]?yb.columnVector(i):Ib.checkMatrix(i),i.rows!==e.rows)throw new Error("Y should have the same number of rows as X");o=i.getColumnVector(0)}else o=e.getColumnVector(0);let a,c,l,h,d=1;for(let t=0;t<r&&d>s;t++)l=e.transpose().mmul(o).div(o.transpose().mmul(o).get(0,0)),l=l.div(l.norm()),a=e.mmul(l).div(l.transpose().mmul(l).get(0,0)),t>0&&(d=a.clone().sub(h).pow(2).sum()),h=a.clone(),i?(c=i.transpose().mmul(a).div(a.transpose().mmul(a).get(0,0)),c=c.div(c.norm()),o=i.mmul(c).div(c.transpose().mmul(c).get(0,0))):o=a;if(i){let t=e.transpose().mmul(a).div(a.transpose().mmul(a).get(0,0));t=t.div(t.norm());let n=e.clone().sub(a.clone().mmul(t.transpose())),r=o.transpose().mmul(a).div(a.transpose().mmul(a).get(0,0)),s=i.clone().sub(a.clone().mulS(r.get(0,0)).mmul(c.transpose()));this.t=a,this.p=t.transpose(),this.w=l.transpose(),this.q=c,this.u=o,this.s=a.transpose().mmul(a),this.xResidual=n,this.yResidual=s,this.betas=r}else this.w=l.transpose(),this.s=a.transpose().mmul(a).sqrt(),this.t=n?a.clone().div(this.s.get(0,0)):a,this.xResidual=e.sub(a.mmul(l.transpose()))}}jw.AbstractMatrix=Fb,jw.CHO=Lb,jw.CholeskyDecomposition=Lb,jw.DistanceMatrix=Cb,jw.EVD=Tb,jw.EigenvalueDecomposition=Tb,jw.LU=Sb,jw.LuDecomposition=Sb;var Pb=jw.Matrix=yb;jw.MatrixColumnSelectionView=class extends _b{constructor(e,t){pb(e,t),super(e,e.rows,t.length),this.columnIndices=t}set(e,t,i){return this.matrix.set(e,this.columnIndices[t],i),this}get(e,t){return this.matrix.get(e,this.columnIndices[t])}},jw.MatrixColumnView=class extends _b{constructor(e,t){hb(e,t),super(e,e.rows,1),this.column=t}set(e,t,i){return this.matrix.set(e,this.column,i),this}get(e){return this.matrix.get(e,this.column)}},jw.MatrixFlipColumnView=class extends _b{constructor(e){super(e,e.rows,e.columns)}set(e,t,i){return this.matrix.set(e,this.columns-t-1,i),this}get(e,t){return this.matrix.get(e,this.columns-t-1)}},jw.MatrixFlipRowView=class extends _b{constructor(e){super(e,e.rows,e.columns)}set(e,t,i){return this.matrix.set(this.rows-e-1,t,i),this}get(e,t){return this.matrix.get(this.rows-e-1,t)}},jw.MatrixRowSelectionView=class extends _b{constructor(e,t){fb(e,t),super(e,t.length,e.columns),this.rowIndices=t}set(e,t,i){return this.matrix.set(this.rowIndices[e],t,i),this}get(e,t){return this.matrix.get(this.rowIndices[e],t)}},jw.MatrixRowView=class extends _b{constructor(e,t){lb(e,t),super(e,1,e.columns),this.row=t}set(e,t,i){return this.matrix.set(this.row,t,i),this}get(e,t){return this.matrix.get(this.row,t)}},jw.MatrixSelectionView=xb,jw.MatrixSubView=class extends _b{constructor(e,t,i,n,r){gb(e,t,i,n,r),super(e,i-t+1,r-n+1),this.startRow=t,this.startColumn=n}set(e,t,i){return this.matrix.set(this.startRow+e,this.startColumn+t,i),this}get(e,t){return this.matrix.get(this.startRow+e,this.startColumn+t)}},jw.MatrixTransposeView=class extends _b{constructor(e){super(e,e.columns,e.rows)}set(e,t,i){return this.matrix.set(t,e,i),this}get(e,t){return this.matrix.get(t,e)}},jw.NIPALS=Hb,jw.Nipals=Hb,jw.QR=Nb,jw.QrDecomposition=Nb,jw.SVD=Mb,jw.SingularValueDecomposition=Mb,jw.SymmetricMatrix=Ab,jw.WrapperMatrix1D=kb,jw.WrapperMatrix2D=Ib,jw.correlation=function(e,t=e,i={}){e=new yb(e);let n=!1;if("object"!=typeof t||yb.isMatrix(t)||ib.isAnyArray(t)?t=new yb(t):(i=t,t=e,n=!0),e.rows!==t.rows)throw new TypeError("Both matrices must have the same number of rows");const{center:r=!0,scale:s=!0}=i;r&&(e.center("column"),n||t.center("column")),s&&(e.scale("column"),n||t.scale("column"));const o=e.standardDeviation("column",{unbiased:!0}),a=n?o:t.standardDeviation("column",{unbiased:!0}),c=e.transpose().mmul(t);for(let t=0;t<c.rows;t++)for(let i=0;i<c.columns;i++)c.set(t,i,c.get(t,i)*(1/(o[t]*a[i]))*(1/(e.rows-1)));return c},jw.covariance=function(e,t=e,i={}){e=new yb(e);let n=!1;if("object"!=typeof t||yb.isMatrix(t)||ib.isAnyArray(t)?t=new yb(t):(i=t,t=e,n=!0),e.rows!==t.rows)throw new TypeError("Both matrices must have the same number of rows");const{center:r=!0}=i;r&&(e=e.center("column"),n||(t=t.center("column")));const s=e.transpose().mmul(t);for(let t=0;t<s.rows;t++)for(let i=0;i<s.columns;i++)s.set(t,i,s.get(t,i)*(1/(e.rows-1)));return s};var Ob=jw.default=yb;jw.determinant=function e(t){if((t=yb.checkMatrix(t)).isSquare()){if(0===t.columns)return 1;let i,n,r,s;if(2===t.columns)return i=t.get(0,0),n=t.get(0,1),r=t.get(1,0),s=t.get(1,1),i*s-n*r;if(3===t.columns){let s,o,a;return s=new xb(t,[1,2],[1,2]),o=new xb(t,[1,2],[0,2]),a=new xb(t,[1,2],[0,1]),i=t.get(0,0),n=t.get(0,1),r=t.get(0,2),i*e(s)-n*e(o)+r*e(a)}return new Sb(t).determinant}throw Error("determinant can only be calculated for a square matrix")};var Vb=jw.inverse=function(e,t=!1){return e=Ib.checkMatrix(e),t?new Mb(e).inverse():Rb(e,yb.eye(e.rows))};jw.linearDependencies=function(e,t={}){const{thresholdValue:i=1e-9,thresholdError:n=1e-9}=t;let r=(e=yb.checkMatrix(e)).rows,s=new yb(r,r);for(let t=0;t<r;t++){let o=yb.columnVector(e.getRow(t)),a=e.subMatrixRow(Bb(r,t)).transpose(),c=new Mb(a).solve(o),l=yb.sub(o,a.mmul(c)).abs().max();s.setRow(t,Db(l,c,t,i,n))}return s},jw.pseudoInverse=function(e,t=Number.EPSILON){if((e=yb.checkMatrix(e)).isEmpty())return e.transpose();let i=new Mb(e,{autoTranspose:!0}),n=i.leftSingularVectors,r=i.rightSingularVectors,s=i.diagonal;for(let e=0;e<s.length;e++)Math.abs(s[e])>t?s[e]=1/s[e]:s[e]=0;return r.mmul(yb.diag(s).mmul(n.transpose()))},jw.solve=Rb,jw.wrap=function(e,t){if(ib.isAnyArray(e))return e[0]&&ib.isAnyArray(e[0])?new Ib(e):new kb(e,t);throw new Error("the argument is not an array")};const qb=Pb;Ob.Matrix&&Ob.Matrix;const Qb=Vb;function Ub(e,t,i,n,r,s,o){let a=i,c=qb.eye(t.length,t.length,a);const l=r(t);let h=new Float64Array(e.x.length);for(let t=0;t<e.x.length;t++)h[t]=l(e.x[t]);let d=function(e,t,i,n,r,s){const o=i.length,a=e.x.length;let c=qb.zeros(o,a),l=0;for(let h=0;h<o;h++){if(0===n[h])continue;let o=n[h],d=i.slice();d[h]+=o;let u=r(d);if(s){d=i.slice(),d[h]-=o,o*=2;let t=r(d);for(let i=0;i<a;i++)c.set(l,i,(t(e.x[i])-u(e.x[i]))/o)}else for(let i=0;i<a;i++)c.set(l,i,(t[i]-u(e.x[i]))/o);l++}return c}(e,h,t,n,r,s),u=function(e,t){const i=e.x.length;let n=new qb(i,1);for(let r=0;r<i;r++)n.set(r,0,e.y[r]-t[r]);return n}(e,h),f=Qb(c.add(d.mmul(d.transpose().scale("row",{scale:o})))),p=d.mmul(u.scale("row",{scale:o}));return{perturbations:f.mmul(p),jacobianWeigthResidualError:p}}function jb(e,t,i={}){let{checkTimeout:n,minValues:r,maxValues:s,parameters:o,weightSquare:a,damping:c,dampingStepUp:l,dampingStepDown:h,maxIterations:d,errorTolerance:u,centralDifference:f,gradientDifference:p,improvementThreshold:g}=function(e,t,i){let{timeout:n,minValues:r,maxValues:s,initialValues:o,weights:a=1,damping:c=.01,dampingStepUp:l=11,dampingStepDown:h=9,maxIterations:d=100,errorTolerance:u=1e-7,centralDifference:f=!1,gradientDifference:p=.1,improvementThreshold:g=.001}=i;if(c<=0)throw new Error("The damping option must be a positive number");if(!e.x||!e.y)throw new Error("The data parameter must have x and y elements");if(!qw(e.x)||e.x.length<2||!qw(e.y)||e.y.length<2)throw new Error("The data parameter elements must be an array with more than 2 points");if(e.x.length!==e.y.length)throw new Error("The data parameter elements must have the same size");let m,w,b=o||new Array(t.length).fill(1),F=e.y.length,v=b.length;if(s=s||new Array(v).fill(Number.MAX_SAFE_INTEGER),r=r||new Array(v).fill(Number.MIN_SAFE_INTEGER),s.length!==r.length)throw new Error("minValues and maxValues must be the same size");if(!qw(b))throw new Error("initialValues must be an array");if("number"==typeof p)p=new Array(b.length).fill(p);else{if(!qw(p))throw new Error("gradientDifference should be a number or array with length equal to the number of parameters");p.length!==v&&(p=new Array(v).fill(p[0]))}if("number"==typeof a){let e=1/a**2;m=()=>e}else{if(!qw(a))throw new Error("weights should be a number or array with length equal to the number of data points");if(a.length<e.x.length){let e=1/a[0]**2;m=()=>e}else m=e=>1/a[e]**2}if(void 0!==n){if("number"!=typeof n)throw new Error("timeout should be a number");let e=Date.now()+1e3*n;w=()=>Date.now()>e}else w=()=>!1;let y=new Array(e.x.length);for(let e=0;e<F;e++)y[e]=m(e);return{checkTimeout:w,minValues:r,maxValues:s,parameters:b,weightSquare:y,damping:c,dampingStepUp:l,dampingStepDown:h,maxIterations:d,errorTolerance:u,centralDifference:f,gradientDifference:p,improvementThreshold:g}}(e,t,i),m=Qw(e,o,t,a),w=m<=u,b=0;for(;b<d&&!w;b++){let d=m,{perturbations:b,jacobianWeigthResidualError:F}=Ub(e,o,c,p,t,f,a);for(let e=0;e<o.length;e++)o[e]=Math.min(Math.max(r[e],o[e]-b.get(e,0)),s[e]);if(m=Qw(e,o,t,a),isNaN(m))break;if((d-m)/b.transpose().mmul(b.mulS(c).add(F)).get(0,0)>g?c=Math.max(c/h,1e-7):(m=d,c=Math.min(c*l,1e7)),n())throw new Error(`The execution time is over to ${i.timeout} seconds`);w=m<=u}return{parameterValues:o,parameterError:m,iterations:b}}class Gb{constructor(e){this.binScores=e}get_histogram(){let e=Math.max(...this.binScores),t=Math.floor(e/1e3),i=this.range(0,Math.floor(e/t)*t+t,t);const{counts:n,bins:r}=this.histogram(this.binScores,i);return{counts:n,bins:r}}range(e,t,i){const n=[];for(let r=e;r<t;r+=i)n.push(r);return n}histogram(e,t){const i=Array(t.length).fill(0);return e.forEach((e=>{for(let n=0;n<t.length-1;n++)if(e>=t[n]&&e<t[n+1]){i[n]++;break}})),{counts:i,bins:t}}normal_distribution([e,t,i]){return n=>e*Math.exp(-Math.pow(n-t,2)/(2*Math.pow(i,2)))/(Math.sqrt(2*Math.PI)*i)}get_initial_model_values(e,t){const i=t.slice(1,-1).reduce(((e,t)=>e+t),0);if(0===i)return console.debug("Problem with fit: all data points have zero value. Return zeros instead fit parameters!"),null;const n=(e[1]-e[0])*i,r=e.reduce(((e,i,n)=>e+i*t[n]),0)/i,s=e.reduce(((e,i,n)=>e+t[n]*Math.pow(i-r,2)),0),o=Math.sqrt(s/i);return[n,r,o]}normal_fit(e,t){const i={initialValues:this.get_initial_model_values(e,t),maxIterations:100};return jb({x:e,y:t},this.normal_distribution,i)}}class Wb{constructor(e,t){this.binSize=e,this.refGenome=t,this.gcBin=this.getGCbinSize()}getGCbinSize(){for(let e of[1e5,1e4])if(this.binSize%e==0)return e;return!1}async getBinGC(){const e={};if(!this.gcBin)return e;const t="https://storage.googleapis.com/cnvpytor_data/gcInfoData/GCinfo.json";try{const i=(await Mn.loadJson(t,{timeout:5e3})).find((e=>e.id===this.refGenome));if(!i)return console.warn("GC data not found for ",this.refGenome),e;const n=i.Bins.find((e=>e.BinSize===this.gcBin));if(!n)return console.warn("GC data not found for ",this.refGenome," Bin : ",this.gcBin),e;let r=`${t.split("/").slice(0,-1).join("/")}${n.fileURL}`;(await Mn.load(r,{})).split("\n").forEach((t=>{if(""!==t.trim()){const[i,n,r,s,o]=t.split("\t");e[i]||(e[i]=[]),e[i].push({start:+n,gcContent:+r,gcCount:+s,atCount:+o})}}))}catch(e){console.error(e),console.warn("Errors loading GC correction data.")}return e}}class $b extends Wb{constructor(e,t,i){super(t,i),this.wigFeatures=e,this.binSize=t,this.refGenome=i}async apply_gcCorrection(){if(!this.wigFeatures)return console.error("BinScore data is not available."),null;const e=Object.values(this.wigFeatures).reduce(((e,t)=>e.concat(t.filter((e=>e.binScore>0)).map((e=>e.binScore)))),[]);let t=new Gb(e);const{counts:i,bins:n}=t.get_histogram();let r=t.normal_fit(n,i);this.globalMean=r.parameterValues[1],this.globalStd=r.parameterValues[2],this.gcData=await this.getBinGC(),this.gcFlag=Object.keys(this.gcData).length>0,this.binScoreField=this.gcFlag?"gcCorrectedBinScore":"binScore",this.getGcCorrectionSignal(this.globalMean)}getGcCorrectionSignal(e){let t=this.getGcCorrection(e);Object.keys(this.wigFeatures).forEach((e=>{this.wigFeatures[e].forEach((e=>{e.binScore?e.gcCorrectedBinScore=Math.round(t[e.gc]*e.binScore):e.gcCorrectedBinScore=null}))}))}getGcCorrection(e){const t={};if(this.gcFlag){let i=this.getGCbinSize();const n={};let r=parseInt(this.binSize/i);for(let e in this.wigFeatures)for(let t=0;t<this.wigFeatures[e].length;t++){let i={AT:0,GC:0};for(let n=t*r;n<t*r+r;n++)this.gcData[e][n]&&(i.GC+=this.gcData[e][n].gcCount,i.AT+=this.gcData[e][n].atCount);let s=Math.round(100*i.GC/(i.GC+i.AT));this.wigFeatures[e][t].gc=s,n[s]||(n[s]=[]),this.wigFeatures[e][t].binScore&&n[s].push(this.wigFeatures[e][t].binScore)}Object.keys(n).forEach((i=>{let r,s=n[i];if(s.length<4)r=s.reduce(((e,t)=>e+t),0)/s.length;else{let e=new Gb(n[i]);const{counts:t,bins:s}=e.get_histogram();r=e.normal_fit(s,t).parameterValues[1]}t[i]=e/r}))}return t}formatDataStructure(e,t=1){const i=[];for(const[r,s]of Object.entries(this.wigFeatures))for(let r of s){var n={...r};1!=t&&(n.value=r[e]/t*2),i.push(n)}return i}formatDataStructure_BAF(e,t=-1){const i=[],n=[];for(const[r,s]of Object.entries(this.wigFeatures))s.forEach((r=>{var s={...r},o={...r};let a=r[e];.5!=a&&(o.value=t*(1-a),n.push(o)),s.value=t*a,i.push(s)}));return[i,n]}}function Kb(e){return e.reduce((function(e,t){return e>t?e:t}))}function Yb(e,t,i,n){return t*Math.exp(-1*(e-i)**2/(2*n**2))/Math.sqrt(2*Math.PI)/n}function Xb(e,t,i,n){return Math.exp(-1*(e-i)**2/(t**2+n**2))}function Zb(e,t){let i;try{i=e.reduce(((e,i,n)=>e+Math.min(i,t[n])))}catch{return console.log("Failed to find likelihood overlap: ",e,t),0}return i}function Jb(e,t,i,n){return 0==t&&0==n?{nl:.5*(e+i),ne:0}:{nl:(e*n*n+i*t*t)/(t*t+n*n),ne:Math.sqrt(t*t*n*n/(t*t+n*n))}}function eF(e,t){let i=parseInt(t*(e.length-1)),n=t*(e.length-1)-i;return i<e.length-1?e[i]*(1-n)+e[i+1]*n:e[i]}function tF(e){const t=e.length,i=Math.max(...e);let n=e.indexOf(i);n>Math.floor(t/2)&&(n=t-1-n);const r=(t/2-n)/(t+1),s=Math.floor((t/2+n)/2),o=t-1-s;let a=e.slice(s,o+1).reduce(((e,t)=>e+t),0)/e.reduce(((e,t)=>e+t),0);return n===Math.floor(t/2)&&(a=1),{mean:r,p:a}}var iF={CombinedCaller:class extends $b{constructor(e,t,i){super(e,t,i)}async call_2d(e=null,t=null,i="both",n=.1,r=0,s=10,o=0){await this.apply_gcCorrection();let a=this.gcFlag?"gcCorrectedBinScore":"binScore",c=null==e?.05*this.binSize/3e9:e,l=null==t?parseInt(this.binSize/1e4):t,h=[],d=[],u=[],f=[],p=[],g=[];for(const[e,t]of Object.entries(this.wigFeatures)){let e=[],i=[],s=[];t.forEach(((t,n)=>{t.hets_count>4&&t.dp_count>l&&t[a]&&(e.push([n]),i.push(t[a]),s.push(t.likelihood_score),delete t.likelihood_score)}));let o=[];for(let e=1;e<i.length;e++)o.push(Math.abs(i[e]-i[e-1]));let g=[0];for(let e=1;e<o.length;e++)g.push(Math.min(o[e-1],o[e]));g.push(0);let m=i.map(((e,t)=>Math.sqrt(Math.sqrt(e)**2+this.globalStd**2+Math.pow(g[t]/2,2)))),w=[];for(let t=0;t<e.length-1;t++){let n=0;try{n=Zb(s[t],s[t+1])}catch{console.log("Overlap failed: ",t,s[t],e[t+1],s[t+1])}let r=Xb(i[t],m[t],i[t+1],m[t+1]);w.push(r*n)}for(;w.length>0;){w=w.filter((e=>"number"==typeof e));let t=Kb(w);if(isNaN(t)&&console.log("NaN value",w),t<c)break;let n,r,o=w.indexOf(t),a=Jb(i[o],m[o],i[o+1],m[o+1]);try{n=s[o].map(((e,t)=>e*s[o+1][t])),r=n.reduce(((e,t)=>e+t))}catch{console.log(s),console.log("max_overlap:",t,o,w.length),console.log("likelihood: ",o,s[o],s[o+1]),console.log("nlh: ",r)}if(i[o]=a.nl,m[o]=a.ne,s[o]=n.map((function(e){return e/r})),e[o].push(...e[o+1]),i.splice(o+1,1),m.splice(o+1,1),e.splice(o+1,1),s.splice(o+1,1),w.splice(o,1),o<w.length){let e=Xb(i[o],m[o],i[o+1],m[o+1])*Zb(s[o],s[o+1]);w[o]=e}if(o>0){let e=Xb(i[o-1],m[o-1],i[o],m[o])*Zb(s[o-1],s[o]);w[o-1]=e}}let b=-1;for(;;){w=[];for(let t=0;t<i.length;t++)for(let r=t;r<i.length;r++)e[r][0]-e[t].at(-1)<n*(e[t].length+e[r].length)&&w.push(Xb(i[t],m[t],i[r],m[r])*Zb(s[t],s[r]));if(0==w.length)break;let t=Kb(w);if(t<c)break;let r=0,o=1;for(;r<e.length-1;){let a=Xb(i[r],m[r],i[o],m[o])*Zb(s[r],s[o]);if(e[o][0]-e[r].at(-1)<n*(e[r].length+e[o].length)&&a==t){let t=Jb(i[r],m[r],i[r+1],m[r+1]);i[r]=t.nl,m[r]=t.ne;let n=s[r].map(((e,t)=>e*s[r+1][t])),a=n.reduce(((e,t)=>e+t));s[r]=n.map((function(e){return e/a})),e[r].push(...e[r+1]),e[r]=e[r].sort(((e,t)=>e-t)),i.splice(o,1),m.splice(o,1),e.splice(o,1),s.splice(o,1),o>=e.length&&(r+=1,o=r+1)}else o+=1,o>=e.length&&(r+=1,o=r+1)}if(b==e.length)break;b=e.length}e.forEach(((e,n)=>{let o=tF(s[n]);e.length>1&&(e.forEach(((e,s)=>{d.push(t[e]),o.mean<=r&&h.push(t[e]),t[e].segment_score=i[n]})),u.push(i[n]),f.push(m[n]),p.push(s[n]))}))}let m=parseInt(1e3*(1-o));0==m&&(m=1);let w=Bw.linspace(o,1,m),b={},F={};for(let e=10;e>-1;e--)for(let t=0;t<e/2+1;t++){let n,r,s=e-t,o=w.map(((t,i)=>1-t+t*e/2)),a=e/2;e>0?(n=.5-t/(t+s),r=w.map(((e,i)=>.5-(1-e+e*t)/(2-2*e+(t+s)*e)))):(n=0,r=w.map(((e,t)=>0*e)));for(let i=0;i<u.length;i++){let c=Yb(a*this.globalMean,1,u[i],f[i])*eF(p[i],.5+n);i in F?F[i].push([e,t,s,c,1]):F[i]=[e,t,s,c,1];let l=0,h=0,d=0;o.forEach(((e,t)=>{if(!isNaN(r[t])){let n=Yb(e*this.globalMean,1,u[i],f[i])*eF(p[i],.5+r[t]);l+=n,n>h&&(h=n,d=w[t])}})),i in b?b[i].push([e,t,s,l/w.length,d]):b[i]=[e,t,s,l/w.length,d]}for(let e=0;e<u.length;e++)if("germline"==i)b[e].sort(((e,t)=>e[3]-t[3]));else if(b[e].sort(((e,t)=>e[3]-t[3])),"both"==i&&(F[e].sort(((e,t)=>e[3]-t[3])),F[e][0][3]>b[e][0][3])){let t=b[e].filter((t=>t[0]!=F[e][0][0]&&t[1]<=F[e][0][1]));b[e]=[F[e][0]].push(...t)}for(let e=0;e<u.length;e++)b[e][0][0],b[e][0][0],u[e],this.globalMean,Ow.t_test_1_sample(this.globalMean,u[e],f[e],g[e])}var v=this.formatDataStructure(this.wigFeatures,"binScore",this.globalMean);let y=[];return this.gcFlag&&(y=this.formatDataStructure(this.wigFeatures,"gcCorrectedBinScore",this.globalMean)),{binScore:v,gcCorrectedBinScore:y,segmentScore:this.formatDataStructure(this.wigFeatures,"segment_score",this.globalMean)}}formatDataStructure(e,t,i=1){const n=[];for(const[r,s]of Object.entries(e))s.forEach((e=>{var r={...e};1!=i&&(r.value=e[t]/i*2),n.push(r)}));return n}}};const nF=2871e6;function rF(e){for(var t=1,i=1,n=1*e,r=1;r<50;r++)t*=r,n+=(i*=-1)*Math.pow(e,2*r+1)/(t*(2*r+1));return 2*n/Math.sqrt(3.14159265358979)}function sF(e,t,i,n,r){var s=new cF(i.slice(n,r));return 0==s.std&&(s.std=t>0?t*s.mean/e:1),lF(e,s.mean,s.std,r-n)/(r-n)}function oF(e,t,i,n,r){var s=new cF(i.slice(n,r));if(s.mean<e){var o=(s.max-s.mean)/(t*Math.sqrt(2));return Math.pow(.5*(1+rF(o)),r-n)}o=(s.min-s.mean)/(t*Math.sqrt(2));return Math.pow(.5*(1-rF(o)),r-n)}function aF(e,t,i,n,r,s,o=1e3){for(var a=sF(e,t,i,n,r),c=0,l=!1;a>s&!l&c<o;){l=!0,c+=1;var[h,d,u,f]=[1e10,1e10,1e10,1e10];if(n>0&&(h=sF(e,t,i,n-1,r)),r-n>2)var d=sF(e,t,i,n+1,r),u=sF(e,t,i,n,r-1);if(r<i.length)var f=sF(e,t,i,n,r+1);Math.min[f]<a&&(l=!1,h==Math.min[f]&&(n-=1,a=h),elif(d==Math.min[f]),n+=1,a=d,elif(u==Math.min[f]),r-=1,a=u,elif(f==Math.min[f]),r+=1,a=f)}return a<=s?r:0}class cF{constructor(e){this.data=e,this.mean=e.reduce(((e,t)=>e+t))/e.length,this.std=Math.sqrt(e.reduce(((e,t)=>(t-this.mean)**2))/e.length)}}function lF(e,t,i,n){0==i&&(i=1);var r=(e-t)/i*Math.sqrt(n);return 1-Ow.TdistributionCDF(Math.abs(r),n-1)}function hF(e,t,i,n,r,s){0==t&&(t=1),0==r&&(r=1);var o=(e-n)/Math.sqrt(t**2/i+r**2/s),a=(t**2/i+r**2/s)**2*(i-1)*(s-1)/(t**4*(s-1)/i**2+r**4*(i-1)/s**2);return 1-Ow.TdistributionCDF(Math.abs(o),parseInt(a+.5))}var dF={Partition:class{constructor(e,t,i){this.rd=e,this.mean=t,this.std=i,this.bin_bands=[2,3,4,5,6,7,8,10,12,14,16,20,24,28,32,40,48,56,64,80,96,112,128]}get_rd_signal_bandwidth(e){var t=[];return e.forEach(((e,i)=>{var n=0;n=e>this.mean/4?this.mean/(this.std**2*e):4/this.std**2,t.push(n)})),t}meanShiftCaller(e,t=3){var i={};return Object.entries(this.rd).forEach((([e,n])=>{var r=new Array(n.length).fill(!1),s=new Array(n.length);for(let e=0;e<n.length;e++)r[e]||(s[e]=n[e]);this.bin_bands.forEach(((e,i)=>{var o=r.map(((e,t)=>!e)),a=[];Object.entries(n).forEach((([e,t])=>{a.push(t.binScore)}));var c=[0],l=0;for(let e=0;e<r.length;e++)r[e]?l>0&&(c.push(c[c.length-1]+l-1),l=0):l+=1;c.shift();for(let i=0;i<t;i++){var h=this.get_rd_signal_bandwidth(a),d=new Array(a.length).fill(0);for(let t=0;t<a.length;t++)for(let i=t-3*e;i<=t+3*e+1;i++)if(!(i<0||i>=a.length||Math.abs(t-i)>=a.length)){var u=(i-t)*Math.exp(-.5*(i-t)**2/e**2)*Math.exp(-.5*(a[t]-a[i])**2*h[t]);d[t]+=u}for(var f=new Array,p=0;p<d.length-1;p++)d[p]<0&d[p+1]>=0&&f.push(p);f.push(d.length-1),f=f.concat(c).sort(((e,t)=>e-t)),f=Array.from(new Set(f));var g=0;for(p=0;p<f.length;p++){var m=a.slice(g,f[p]+1),w=m.reduce(((e,t)=>e+t))/m.length;a.fill(w,g,f[p]+1),g=f[p]+1}}p=0;for(var b=0;p<s.length;p++)o[p]&&(s[p]=a[b],b++);for(f=new Array,p=0;p<s.length-1;p++){Math.abs(s[p+1]-s[p])>.01&&f.push(p+1)}f.unshift(0),f.push(s.length),r=new Array(this.rd.length).fill(!1);for(p=1;p<f.length;p++){var F=[f[p-1],f[p]],v=[f[p-1],f[p-1]];if(!(p>1))continue;v[0]=f[p-2];var y=[f[p],f[p]];if(!(p<f.length-1))continue;y[1]=f[p+1];var A=F[1]-F[0],C=v[1]-v[0],_=y[1]-y[0];if(A<=1)continue;var x=new cF(s.slice(F[0],F[1]));if(_<=15||C<=15||A<=15){var k=1.8*Math.sqrt(s[v[0]]/this.mean)*this.std;if(Math.abs(s[v[0]]-s[F[0]])<k)continue;if(k=1.8*Math.sqrt(s[y[0]]/this.mean)*this.std,Math.abs(s[y[0]]-s[F[0]])<k)continue}else{var I=s.slice(v[0],v[1]),S=new cF(I),E=s.slice(y[0],y[1]),N=new cF(E);if(hF(x.mean,x.std,x.data.length,S.mean,S.std,S.data.length)>.01/nF*bin_size*(A+C))continue;if(hF(x.mean,x.std,x.data.length,N.mean,N.std,N.data.length)>.01/nF*bin_size*(A+_))continue}if(lF(this.mean,x.mean,x.std,x.data.length)>.05)continue;let e=a.slice(F[0],F[1]);var M=new cF(e);r.fill(!0,F[0],F[1]),s.fill(M.mean,F[0],F[1])}})),i[e]=s})),i}call_mean_shift(e=3){for(var t=new Array(this.rd.length).fill(!1),i=new Array(this.rd.length),n=0;n<this.rd.length;n++)t[n]||(i[n]=this.rd[n]);return this.bin_bands.forEach(((n,r)=>{var s=t.map(((e,t)=>!e)),o=[];s.forEach(((e,t)=>{e&&o.push(this.rd[t])}));for(var a=[0],c=0,l=0;l<t.length;l++)t[l]?c>0&&(a.push(a[a.length-1]+c-1),c=0):c+=1;a.shift();for(var h=0;h<e;h++){var d=this.get_rd_signal_bandwidth(o),u=new Array(o.length).fill(0);for(l=0;l<o.length;l++)for(var f=l-3*n;f<=l+3*n+1;f++)if(!(f<0||f>=o.length||Math.abs(l-f)>=o.length)){var p=(f-l)*Math.exp(-.5*(f-l)**2/n**2)*Math.exp(-.5*(o[l]-o[f])**2*d[l]);u[l]+=p}var g=new Array;for(l=0;l<u.length-1;l++)u[l]<0&u[l+1]>=0&&g.push(l);g.push(u.length-1),g=g.concat(a).sort(((e,t)=>e-t)),g=Array.from(new Set(g));var m=0;for(l=0;l<g.length;l++){var w=o.slice(m,g[l]+1),b=w.reduce(((e,t)=>e+t))/w.length;o.fill(b,m,g[l]+1),m=g[l]+1}}for(l=0,f=0;l<i.length;l++)s[l]&&(i[l]=o[f],f++);for(g=new Array,l=0;l<i.length-1;l++){Math.abs(i[l+1]-i[l])>.01&&g.push(l+1)}g.unshift(0),g.push(i.length),t=new Array(this.rd.length).fill(!1);for(l=1;l<g.length;l++){var F=[g[l-1],g[l]],v=[g[l-1],g[l-1]];if(l>1){v[0]=g[l-2];var y=[g[l],g[l]];if(l<g.length-1){y[1]=g[l+1];var A=F[1]-F[0],C=v[1]-v[0],_=y[1]-y[0];if(!(A<=1)){var x=new cF(i.slice(F[0],F[1]));if(_<=15||C<=15||A<=15){var k=1.8*Math.sqrt(i[v[0]]/this.mean)*this.std;if(Math.abs(i[v[0]]-i[F[0]])<k)continue;if(k=1.8*Math.sqrt(i[y[0]]/this.mean)*this.std,Math.abs(i[y[0]]-i[F[0]])<k)continue}else{var I=i.slice(v[0],v[1]),S=new cF(I),E=i.slice(y[0],y[1]),N=new cF(E);if(hF(x.mean,x.std,x.data.length,S.mean,S.std,S.data.length)>3.483106931382794e-9*(A+C))continue;if(hF(x.mean,x.std,x.data.length,N.mean,N.std,N.data.length)>3.483106931382794e-9*(A+_))continue}if(!(lF(this.mean,x.mean,x.std,x.data.length)>.05)){var M=new cF(this.rd.slice(F[0],F[1]));t.fill(!0,F[0],F[1]),i.fill(M.mean,F[0],F[1])}}}}}})),i}cnv_calling(e=1e5){var t=.25*this.mean,i=this.mean-t,n=this.mean+t,r=2971e6,s=this.meanShiftCaller(e),o={},a=[];return Object.entries(s).forEach((([c,l])=>{for(var h=!1;!h;){h=!0;var d=new Array(1).fill(0);for(let e=0;e<l.length-1;e++){Math.abs(l[e+1]-l[e])>.01&&d.push(e+1)}d.push(l.length);for(let e=0;e<d.length-2;e++){var u=Math.abs(l[d[e]]-l[d[e+1]]);if(u<t){var f=u+1,p=u+1;if(e>0&&(f=Math.abs(l[d[e]]-l[d[e-1]])),e<d.length-3&&(p=Math.abs(s[d[e+1]]-l[d[e+2]])),u<f&&u<p){h=!1;var g=new cF(l.slice(d[e],d[e+2]));l.fill(g.mean,d[e],d[e+2]),d.splice(e+1,e+1)}}}}var m=[];Object.entries(this.rd[c]).forEach((([e,t])=>{m.push(t.binScore)}));for(var w,b=new Array(l.length).fill(""),F=0,v=.05*e/r;F<l.length;){for(var y=F,A=F;F<l.length&l[F]<i;)F+=1;if((_=F)>A+1){var C=aF(this.mean,this.std,m,A,_,v);if(C){var _=C;b.fill("D",A,_)}}for(A=F;F<l.length&l[F]>n;)F+=1;(_=F)>A+1&&(C=aF(this.mean,this.std,m,A,_,v))&&(_=C,b.fill("A",A,_)),F==y&&(F+=1)}for(F=0;F<l.length;){for(;F<l.length&""!=b[F];)F+=1;for(A=F;F<l.length&l[F]<i;)F+=1;(_=F)>A+1&&(oF(this.mean,this.std,m,A,_)<1682935038707506e-26&&b.fill(["d"]*(_-A),A,_),F-=1),F+=1}(F=0)<l.length&&(w=b[F]),A=0;for(var x=[...m];F<l.length;){for(;b[F]==w&&!((F+=1)>=b.length););if(F>A){var k=new cF(x.slice(A,F));x.fill(k.mean,A,F)}F<l.length&&(w=b[F]),A=F}for(o[c]=x,F=0;F<l.length;){if(""==(w=b[F])){F+=1;continue}for(A=F;F<l.length&w==b[F];)F+=1;let t,i=new cF(x.slice(A,F)).mean/this.mean;t="D"==w?"deletion":"duplication";let n={chr:c,start:e*A+1,end:e*F,size:e*(F-A+1),value:2*i,event_type:t};a.push(n)}})),[o,a]}},MeanShiftCaller:class extends $b{constructor(e,t,i){super(e,t,i),this.binBands=[2,3,4,5,6,7,8,10,12,14,16,20,24,28,32,40,48,56,64,80,96,112,128]}async callMeanshift(e=3){await this.apply_gcCorrection();let t=this.partition();Object.entries(this.wigFeatures).forEach((([e,i])=>{i.forEach(((i,n)=>{t[e]&&(i.partitionLevel=parseInt(t[e][n]))}))}));return{binScore:this.formatDataStructure("binScore",this.globalMean),gcCorrectedBinScore:this.formatDataStructure("gcCorrectedBinScore",this.globalMean),segmentsCNV:this.formatDataStructure("partitionLevel",this.globalMean)}}getRDSignalBandWidth(e){const t=this.globalMean/4,i=4/this.globalStd**2;return e.map((e=>e>t?this.globalMean/(this.globalStd**2*e):i))}partition(e=3){let t={};Object.keys(this.wigFeatures).sort(((e,t)=>e.localeCompare(t,void 0,{numeric:!0}))).forEach((e=>{t[e]=this.wigFeatures[e]}));let i=this.gcFlag?"gcCorrectedBinScore":"binScore";var n={};for(const[o,a]of Object.entries(t)){var r=new Array(a.length).fill(!1),s=a.map(((e,t)=>r[t]?void 0:e[i]));this.binBands.forEach(((t,i)=>{var n=r.map(((e,t)=>!e)),o=s.filter(((e,t)=>!r[t])),a=[0],c=0;r.forEach((e=>{e?c>0&&(a.push(a[a.length-1]+c-1),c=0):e||c++})),a.shift();for(let i=0;i<e;i++){var l=this.getRDSignalBandWidth(o),h=new Array(o.length).fill(0);for(let e=0;e<o.length;e++){const i=Math.max(0,e-3*t),n=Math.min(o.length-1,e+3*t+1);for(let r=i;r<=n;r++){var d=(r-e)*Math.exp(-.5*(r-e)**2/t**2)*Math.exp(-.5*(o[e]-o[r])**2*l[e]);h[e]+=d}}for(var u=new Array,f=0;f<h.length-1;f++)h[f]<0&h[f+1]>=0&&u.push(f);u.push(h.length-1),u=u.concat(a).sort(((e,t)=>e-t)),u=Array.from(new Set(u));var p=0;for(f=0;f<u.length;f++){var g=o.slice(p,u[f]+1),m=g.reduce(((e,t)=>e+t))/g.length;o.fill(m,p,u[f]+1),p=u[f]+1}}f=0;for(var w=0;f<s.length;f++)n[f]&&(s[f]=o[w],w++);for(u=new Array,f=0;f<s.length-1;f++){Math.abs(s[f+1]-s[f])>.01&&u.push(f+1)}u.unshift(0),u.push(s.length),r=new Array(this.wigFeatures.length).fill(!1);for(f=1;f<u.length;f++){var b=[u[f-1],u[f]],F=[u[f-1],u[f-1]];if(!(f>1))continue;F[0]=u[f-2];var v=[u[f],u[f]];if(!(f<u.length-1))continue;v[1]=u[f+1];var y=b[1]-b[0],A=F[1]-F[0],C=v[1]-v[0];if(y<=1)continue;var _=new cF(s.slice(b[0],b[1]));if(C<=15||A<=15||y<=15){var x=1.8*Math.sqrt(s[F[0]]/this.globalMean)*this.globalStd;if(Math.abs(s[F[0]]-s[b[0]])<x)continue;if(x=1.8*Math.sqrt(s[v[0]]/this.globalMean)*this.globalStd,Math.abs(s[v[0]]-s[b[0]])<x)continue}else{var k=s.slice(F[0],F[1]),I=new cF(k),S=s.slice(v[0],v[1]),E=new cF(S);if(hF(_.mean,_.std,_.data.length,I.mean,I.std,I.data.length)>.01/nF*this.binSize*(y+A))continue;if(hF(_.mean,_.std,_.data.length,E.mean,E.std,E.data.length)>.01/nF*this.binSize*(y+C))continue}if(lF(this.globalMean,_.mean,_.std,_.data.length)>.05)continue;let e=o.slice(b[0],b[1]);var N=new cF(e);r.fill(!0,b[0],b[1]),s.fill(N.mean,b[0],b[1])}})),n[o]=s}return n}cnvCalling(e){var t=.25*this.globalMean,i=this.globalMean-t,n=this.globalMean+t,r=2971e6,s={},o=[];return Object.entries(e).forEach((([a,c])=>{for(var l=!1;!l;){l=!0;var h=new Array(1).fill(0);for(let e=0;e<c.length-1;e++){Math.abs(c[e+1]-c[e])>.01&&h.push(e+1)}h.push(c.length);for(let i=0;i<h.length-2;i++){var d=Math.abs(c[h[i]]-c[h[i+1]]);if(d<t){var u=d+1,f=d+1;if(i>0&&(u=Math.abs(c[h[i]]-c[h[i-1]])),i<h.length-3&&(f=Math.abs(e[h[i+1]]-c[h[i+2]])),d<u&&d<f){l=!1;var p=new cF(c.slice(h[i],h[i+2]));c.fill(p.mean,h[i],h[i+2]),h.splice(i+1,i+1)}}}}var g=[];Object.entries(this.wigFeatures[a]).forEach((([e,t])=>{g.push(t.binScore)}));for(var m,w=new Array(c.length).fill(""),b=0,F=.05*this.binSize/r;b<c.length;){for(var v=b,y=b;b<c.length&c[b]<i;)b+=1;if((C=b)>y+1){var A=aF(this.globalMean,this.std,g,y,C,F);if(A){var C=A;w.fill("D",y,C)}}for(y=b;b<c.length&c[b]>n;)b+=1;(C=b)>y+1&&(A=aF(this.globalMean,this.std,g,y,C,F))&&(C=A,w.fill("A",y,C)),b==v&&(b+=1)}for(b=0;b<c.length;){for(;b<c.length&""!=w[b];)b+=1;for(y=b;b<c.length&c[b]<i;)b+=1;(C=b)>y+1&&(oF(this.globalMean,this.std,g,y,C)<1682935038707506e-26&&w.fill(["d"]*(C-y),y,C),b-=1),b+=1}(b=0)<c.length&&(m=w[b]),y=0;for(var _=[...g];b<c.length;){for(;w[b]==m&&!((b+=1)>=w.length););if(b>y){var x=new cF(_.slice(y,b));_.fill(x.mean,y,b)}b<c.length&&(m=w[b]),y=b}for(s[a]=_,b=0;b<c.length;){if(""==(m=w[b])){b+=1;continue}for(y=b;b<c.length&m==w[b];)b+=1;let e,t=new cF(_.slice(y,b)).mean/this.globalMean;e="D"==m?"deletion":"duplication";let i={chr:a,start:this.binSize*y+1,end:this.binSize*b,size:this.binSize*(b-y+1),value:2*t,event_type:e};o.push(i)}})),[s,o]}}};class uF{constructor(e,t,i){this.allVariants=e,this.rowBinSize=1e4,this.binSize=t,this.binFactor=parseInt(t/this.rowBinSize),this.refGenome=i}async read_rd_baf(e="ReadDepth"){var t={};for(let e=this.allVariants.length-1;e>=0;e--){var i;let n=this.allVariants[e];this.allVariants.splice(e,1);let r=n.chr;i=Math.max(Math.floor(n.start/this.rowBinSize),0),t[r]||(t[r]=[]),t[r][i]||(t[r][i]={chr:r,start:i*this.rowBinSize,end:(i+1)*this.rowBinSize,dp_sum_score:0,dp_count:0,hets_count:0,hets:[]});const s=Object.values(n.calls);if(1!==s.length)throw Error(`Unexpected number of genotypes: ${s.length}. CNVPytor expects 1 and only 1 genotype`);const o=s[0],a=o.info.DP;a&&(t[r][i].dp_sum_score+=Number.parseInt(a),t[r][i].dp_count++);let c=o.info.AD.split(","),l=o.genotype;if(0==l[0]&&1==l[1]||1==l[0]&&0==l[1]){t[r][i].hets_count++;let e=parseInt(c[0]),n=parseInt(c[1]);t[r][i].hets.push({ref:e,alt:n})}}this.chromosomes=Object.keys(t);let n="ReadDepth"==e;var r,s=this.adjust_bin_size(t,n);if("ReadDepth"==e){let e=new dF.MeanShiftCaller(s,this.binSize,this.refGenome),t=await e.callMeanshift();r=[t.binScore,t.gcCorrectedBinScore,t.segmentsCNV];var o=e.formatDataStructure_BAF("max_likelihood",-1)}else if("2D"==e){let e=new iF.CombinedCaller(s,this.binSize,this.refGenome),t=await e.call_2d();r=[t.binScore,t.gcCorrectedBinScore,t.segmentScore];o=e.formatDataStructure_BAF("max_likelihood",-1)}return[r,o]}format_BAF_likelihood(e){const t=[];for(const[n,r]of Object.entries(e))for(let e of r){var i={...e};.5!=e.value&&(i.value=1-e.value,t.push(i))}return t}get_max_min_score(e){if(e.likelihood_score.length>0){const t=Math.max(...e.likelihood_score),i=e.likelihood_score.indexOf(t);e.value=Math.max(i/100,1-i/100),e.min_score=Math.min(i/100,1-i/100)}else e.score=0;return e}adjust_bin_size(e,t=!1){var i={};const n=this.binSize/150;for(let o of this.chromosomes){i[o]||(i[o]=[]);for(let a=0;a<e[o].length/this.binFactor;a++){const c=a;i[o][a]||(i[o][a]={chr:o,start:c*this.binSize,end:(c+1)*this.binSize,dp_count:0,hets_count:0,binScore:null,likelihood_score:[],dp_sum_score:0});for(var r=a*this.binFactor;r<this.binFactor*a+this.binFactor;r++)if(e[o][r]&&(i[o][a].dp_sum_score+=e[o][r].dp_sum_score,i[o][a].dp_count+=e[o][r].dp_count,i[o][a].hets_count+=e[o][r].hets_count,0!=e[o][r].hets.length))for(let t of e[o][r].hets)if(0==i[o][a].likelihood_score.length)i[o][a].likelihood_score=Bw.linspace(0,1,100).map(((e,i)=>fF(t.ref,t.alt,e)));else{var s=0;i[o][a].likelihood_score=Bw.linspace(0,1,100).map(((e,n)=>{var r=i[o][a].likelihood_score[n]*fF(t.ref,t.alt,e);return s+=r,r})),i[o][a].likelihood_score=Bw.linspace(0,1,100).map(((e,t)=>i[o][a].likelihood_score[t]/s))}i[o][a].dp_count>0&&(i[o][a].binScore=i[o][a].dp_sum_score/i[o][a].dp_count*n);const l=this.get_max_min_score(i[o][a]);i[o][a].max_likelihood=l.value,t&&delete i[o][a].likelihood_score}}return i}}function fF(e,t,i,n=!0){return Math.pow(i,e)*Math.pow(1-i,t)+Math.pow(i,t)*Math.pow(1-i,e)}class pF extends Pa{static DEFAULT_TRACK_HEIGHT=250;constructor(e,t){super(e,t)}init(e){this.featureType="numeric",this.type="cnvpytor",e.max||(this.defaultScale=!0,this.autoscale=!1),e.height||(e.height=pF.DEFAULT_TRACK_HEIGHT),this.type="cnvpytor",this.graphType=e.graphType||"points",this.bin_size=e.bin_size||1e5,this.signal_name=e.signal_name||"rd_snp",this.cnv_caller=e.cnv_caller||"2D",this.colors=e.colors||["gray","black","green","blue"],this.hasChroms={},super.init(e)}get supportsWholeGenome(){return!0}get_signals(){let e=[];return"rd_snp"==this.signal_name?e=["RD_Raw","RD_Raw_gc_coor",this.cnv_caller,"BAF1","BAF2"]:"rd"==this.signal_name?e=["RD_Raw","RD_Raw_gc_coor",this.cnv_caller]:"snp"==this.signal_name?e=["BAF1","BAF2"]:"cnh"==this.signal_name&&(e=[this.cnv_caller]),e}get_signal_colors(){return[{singal_name:"RD_Raw",color:this.colors[0]},{singal_name:"RD_Raw_gc_coor",color:this.colors[1]},{singal_name:"ReadDepth",color:this.colors[2]},{singal_name:"2D",color:this.colors[2]},{singal_name:"BAF1",color:this.colors[3]},{singal_name:"BAF2",color:this.colors[3]}]}async postInit(){if("vcf"==this.config.format){let e;this.featureSource?e=Object.values(this.featureSource.getAllFeatures()).flat():(this.featureSource=this.featureSource||Hl(this.config,this.browser.genome),this.header=await this.getHeader(),e=this.featureSource.reader.features);const t=this.browser.config.genome,i=new uF(e,this.bin_size,t);let n,r,s;this.wigFeatures_obj={},this.wigFeatures_obj[this.bin_size]={},"2D"==this.cnv_caller?(s=await i.read_rd_baf("2D"),n=s[0],r=s[1],this.wigFeatures_obj[this.bin_size]["2D"]=n[2],this.available_callers=["2D"]):(s=await i.read_rd_baf(),n=s[0],r=s[1],this.wigFeatures_obj[this.bin_size].ReadDepth=n[2],this.available_callers=["ReadDepth"]),this.wigFeatures_obj[this.bin_size].RD_Raw=n[0],this.wigFeatures_obj[this.bin_size].RD_Raw_gc_coor=n[1],this.wigFeatures_obj[this.bin_size].BAF1=r[0],this.wigFeatures_obj[this.bin_size].BAF2=r[1],this.available_bins=[this.bin_size],this.set_available_callers()}else{this.cnvpytor_obj=new Ew(this.config.url,this.bin_size);let e=[...new Set(this.browser.referenceFrameList.map((e=>e.chr)))],t=this.getAliasChromsList(e);this.wigFeatures_obj=await this.cnvpytor_obj.get_rd_signal(this.bin_size,t),this.update_hasChroms(this.wigFeatures_obj,e),this.available_bins=this.cnvpytor_obj.availableBins,this.available_bins.includes(this.bin_size)||(this.bin_size=this.available_bins.at(-1)),this.available_callers=this.cnvpytor_obj.callers,this.set_available_callers()}this.tracks=[];const e=[];this.signals=this.get_signals(),this.signal_colors=this.get_signal_colors();for(let t in this.wigFeatures_obj)for(const[i,n]of Object.entries(this.wigFeatures_obj[t]))if(this.signals.includes(i)){let t={type:"wig",isMergedTrack:!0};t.features=n,t.name=i,t.color=this.signal_colors.filter((e=>e.singal_name===i)).map((e=>e.color));const r=await this.browser.createTrack(t);r?(r.autoscale=!1,this.tracks.push(r)):console.warn("Could not create track "+t),"function"==typeof r.postInit&&e.push(r.postInit())}this.flipAxis=!!this.config.flipAxis&&this.config.flipAxis,this.logScale=!!this.config.logScale&&this.config.logScale,this.autoscale=this.config.autoscale,this.autoscale||(this.dataRange={min:this.config.min||0,max:this.config.max});for(let e of this.tracks)e.autoscale=!1,e.dataRange=this.dataRange;return Promise.all(e)}getAliasChromsList(e){let t=e.map((e=>{let t=this.browser.genome.chromAlias.aliasRecordCache.get(e);return Object.values(t)}));return t=t.flat(),t}set_available_callers(){this.available_callers.includes(this.cnv_caller)||(this.available_callers.length>0?this.cnv_caller=this.available_callers[0]:this.cnv_caller=null)}async getHeader(){if(!this.header){if("function"==typeof this.featureSource.getHeader){const e=await this.featureSource.getHeader();e&&(this.callSets=e.callSets||[]),this.header=e}this.sampleKeys=this.callSets?this.callSets.map((e=>e.sample)):[],this.sampleNames=this.sampleKeys}return this.header}get height(){return this._height}set height(e){if(this._height=e,this.tracks)for(let t of this.tracks)t.height=e,t.config.height=e}menuItemList(){let e=[];void 0!==this.flipAxis&&e.push({label:"Flip y-axis",click:function(){this.flipAxis=!this.flipAxis,this.trackView.repaintViews()}}),e=e.concat(this.numericDataMenuItems()),e.push("<hr/>"),e.push("Bin Sizes");for(let t of this.available_bins)e.push({element:Ta(t,t===this.bin_size),click:async function(){this.bin_size=t,this.trackView.startSpinner(),await this.recreate_tracks(t),this.clearCachedFeatures(),this.trackView.updateViews(),this.trackView.repaintViews()}});e.push("<hr/>"),e.push("Signal Type");let t={rd_snp:"RD and BAF Likelihood",rd:"RD Signal",snp:"BAF Likelihood"};for(let i in t)e.push({element:Ta(t[i],i===this.signal_name),click:async function(){this.signal_name=i,await this.recreate_tracks(this.bin_size),this.clearCachedFeatures(),this.trackView.updateViews(),this.trackView.repaintViews()}});e.push("<hr/>"),e.push("CNV caller");for(let t of this.available_callers)e.push({element:Ta(t,t===this.cnv_caller),click:async function(){this.cnv_caller=t,this.trackView.startSpinner(),await this.recreate_tracks(this.bin_size),this.clearCachedFeatures(),this.trackView.updateViews(),this.trackView.repaintViews()}});if(this.variantState){e.push("<hr/>");for(let t of this.available_callers)e.push({label:"Convert to variant track",click:()=>{this.convertToVariant()}})}return e}async recreate_tracks(e){this.tracks=[];const t=[];if(!(e in this.wigFeatures_obj))if(Object.keys(this.hasChroms).length>0){let t=[...new Set(this.browser.referenceFrameList.map((e=>e.chr)))];"all"==t[0]&&(t=this.browser.genome.chromosomeNames),this.wigFeatures_obj={...this.wigFeatures_obj,...await this.cnvpytor_obj.get_rd_signal(e,t)},this.update_hasChroms(this.wigFeatures_obj,t)}else this.wigFeatures_obj={...this.wigFeatures_obj,...await this.cnvpytor_obj.get_rd_signal(e)};this.signals=this.get_signals(),this.signal_colors=this.get_signal_colors();for(const[i,n]of Object.entries(this.wigFeatures_obj[e]))if(this.signals.includes(i)){let e={type:"wig",isMergedTrack:!0};e.features=n,e.name=i,e.color=this.signal_colors.filter((e=>e.singal_name===i)).map((e=>e.color));const r=await this.browser.createTrack(e);r?(r.autoscale=!1,this.tracks.push(r)):console.warn("Could not create track "+e),"function"==typeof r.postInit&&t.push(r.postInit())}this.flipAxis=!!this.config.flipAxis&&this.config.flipAxis,this.logScale=!!this.config.logScale&&this.config.logScale,this.autoscale=this.config.autoscale,this.autoscale||(this.dataRange={min:this.config.min||0,max:this.config.max});for(let e of this.tracks)e.autoscale=!1,e.dataRange=this.dataRange;return Promise.all(t)}update_hasChroms(e,t){for(let i in e)this.hasChroms[i]||(this.hasChroms[i]=new Set),t.forEach((e=>this.hasChroms[i].add(e)));return this.hasChroms}async getFeatures(e,t,i,n){if(Object.keys(this.hasChroms).length>0&&0!=this.hasChroms[this.bin_size].size){let e=[...new Set(this.browser.referenceFrameList.map((e=>e.chr)))];"all"==e[0]&&(e=this.browser.genome.chromosomeNames);let t=e.filter((e=>!this.hasChroms[this.bin_size].has(e)));if(0!=t.length){let e=this.getAliasChromsList(t),i=await this.cnvpytor_obj.get_rd_signal(this.bin_size,e);this.update_hasChroms(i,t);for(let e in i)for(const[t,n]of Object.entries(i[e]))await this.wigFeatures_obj[e][t].push(...n);for(let e of this.tracks)await e.featureSource.updateFeatures(this.wigFeatures_obj[this.bin_size][e.name])}}if(this.tracks){const r=this.tracks.map((r=>r.getFeatures(e,t,i,n)));return Promise.all(r)}}getScaleFactor(e,t,i,n){return n?i/(Math.log10(t+1)-(e<=0?0:Math.log10(e+1))):i/(t-e)}computeYPixelValue(e,t){return(this.flipAxis?e-this.dataRange.min:this.dataRange.max-e)*t}computeYPixelValueInLogScale(e,t){let i=this.dataRange.max,n=this.dataRange.min;return i<=0?0:(n<=-1&&(n=0),n=n<=0?0:Math.log10(n+1),i=Math.log10(i+1),e=Math.log10(e+1),(this.flipAxis?e-n:i-e)*t)}draw(e){const t=e.features;if(!t)return;if(this.defaultScale&&("rd_snp"==this.signal_name?this.dataRange={min:this.config.min||this.dataRange.min||-1,max:this.config.max||this.dataRange.max||5}:"rd"==this.signal_name?this.dataRange={min:this.config.min||this.dataRange.min||0,max:this.config.max||this.dataRange.max||5}:"snp"==this.signal_name&&(this.dataRange={min:this.config.min||this.dataRange.min||-1,max:this.config.max||this.dataRange.max||0})),this.autoscale&&(this.dataRange=function(e,t){let i=0,n=-Number.MAX_VALUE;for(let e of t)for(let t of e)void 0===t.value||Number.isNaN(t.value)||(i=Math.min(i,t.value),n=Math.max(n,t.value));return{min:i,max:n}}(e.referenceFrame.chr,t)),this.tracks)for(let i=0,n=this.tracks.length;i<n;i++){const n=Object.assign({},e);n.features=t[i],this.tracks[i].dataRange=this.dataRange,this.tracks[i].flipAxis=this.flipAxis,this.tracks[i].logScale=this.logScale,this.graphType&&(this.tracks[i].graphType=this.graphType),this.tracks[i].draw(n)}const i=this.getScaleFactor(this.dataRange.min,this.dataRange.max,e.pixelHeight,this.logScale),n=e=>this.logScale?this.computeYPixelValueInLogScale(e,i):this.computeYPixelValue(e,i);if(this.config.hasOwnProperty("guideLines"))for(let t of this.config.guideLines)if(t.hasOwnProperty("color")&&t.hasOwnProperty("y")&&t.hasOwnProperty("dotted")){let i=n(t.y),r={strokeStyle:t.color,strokeWidth:1};t.dotted?fr.dashedLine(e.context,0,i,e.pixelWidth,i,5,r):fr.strokeLine(e.context,0,i,e.pixelWidth,i,r)}let r=n(2);fr.dashedLine(e.context,0,r,e.pixelWidth,r,5,{strokeStyle:"lightgray",strokeWidth:.5})}paintAxis(e,t,i){var n,r,s,o,a,c,l,h={font:"normal 10px Arial",textAlign:"right",strokeStyle:"black"};if(void 0===this.dataRange||void 0===this.dataRange.max||void 0===this.dataRange.min)return;let d=void 0!==this.flipAxis&&this.flipAxis;function u(e){return e<0?Math.abs(e):0===e?"0":Math.abs(e)>=10||e%1==0?e.toFixed():Math.abs(e)>=1?e.toFixed(1):e.toFixed(2)}fr.fillRect(e,0,0,t,i,{fillStyle:"rgb(255, 255, 255)"}),n=(l=.95*t)-8,a={x:r=l,y:s=o=.01*i},fr.strokeLine(e,n,s,r,o,h),fr.fillText(e,u(d?this.dataRange.min:this.dataRange.max),n+4,s+12,h),c={x:r,y:s=o=.99*i},fr.strokeLine(e,n,s,r,o,h),fr.fillText(e,u(d?this.dataRange.max:this.dataRange.min),n+4,s-4,h),fr.strokeLine(e,a.x,a.y,c.x,c.y,h);const f=this.getScaleFactor(this.dataRange.min,this.dataRange.max,i,this.logScale),p=e=>this.logScale?this.computeYPixelValueInLogScale(e,f):this.computeYPixelValue(e,f),g=Math.ceil((this.dataRange.max-this.dataRange.min)/10);for(let t=Math.ceil(this.dataRange.min+1);t<Math.round(this.dataRange.max-.4);t+=g){const i=p(t);fr.strokeLine(e,45,i,50,i,h),fr.fillText(e,u(d?this.dataRange.max-t:t),44,i+4,h)}}popupData(e,t){const i=t||e.viewport.cachedFeatures;if(i&&i.length===this.tracks.length){const t=[];for(let n=0;n<this.tracks.length;n++){n>0&&t.push("<hr/>"),t.push(`<div style=background-color:rgb(245,245,245);border-bottom-style:dashed;border-bottom-width:1px;padding-bottom:5px;padding-top:10px;font-weight:bold;font-size:larger >${this.tracks[n].name}</div>`);const r=this.tracks[n].popupData(e,i[n]);t.push(...r)}return t}}async convertToVariant(){this.variantState&&(Object.setPrototypeOf(this,wF.prototype),this.init(this.variantState),await this.postInit(),this.trackView.clearCachedFeatures(),this.variantState.trackHeight&&this.trackView.setTrackHeight(this.variantState.trackHeight),this.trackView.checkContentHeight(),this.trackView.updateViews(),delete this.variantState)}}const gF=b,mF=10;class wF extends Pa{static defaultColor="rgb(0,0,150)";static defaults={displayMode:"EXPANDED",sortDirection:"ASC",showGenotypes:!0,expandedVariantHeight:10,squishedVariantHeight:2,squishedCallHeight:1,expandedCallHeight:10,expandedVGap:2,squishedVGap:1,expandedGroupGap:10,squishedGroupGap:5,featureHeight:14,noGenotypeColor:"rgb(200,180,180)",noCallColor:"rgb(225, 225, 225)",nonRefColor:"rgb(200, 200, 215)",mixedColor:"rgb(200, 220, 200)",homrefColor:"rgb(200, 200, 200)",homvarColor:"rgb(17,248,254)",hetvarColor:"rgb(34,12,253)",refColor:"rgb(0,0,220)",altColor:"rgb(255,0,0)",visibilityWindow:void 0,labelDisplayMode:void 0,type:"variant"};_sortDirections=new Map;constructor(e,t){super(e,t)}init(e){if(super.init(e),e.variantHeight&&(this.expandedVariantHeight=e.variantHeight),this.featureSource=Hl(e,this.browser.genome),this.colorTables=new Map,e.colorTable){const t=e.colorBy||"*";this.colorTables.set(t,new Yn(e.colorTable))}if(this.strokecolor=e.strokecolor,this._context_hook=e.context_hook,e.color&&(this.colorBy=void 0),this.nVariantRows=1,e.samples)for(let t of e.samples)this.sampleKeys=e.samples;e.sort&&(this.initialSort=e.sort),this._colorByItems=new Map([["none","None"]])}async postInit(){if(this.header=await this.getHeader(),this.header.INFO){const e=new Set(Object.keys(this.header.INFO));this.config.colorBy?this.colorBy=this.config.colorBy:!this.config.color&&e.has("AF")&&(this.colorBy="AF"),e.has("AF")&&this._colorByItems.set("AF","Allele frequency"),e.has("VT")&&this._colorByItems.set("VT","Variant Type"),e.has("SVTYPE")&&this._colorByItems.set("SVTYPE","SV Type")}if(this.config.colorBy&&!this._colorByItems.has(this.config.colorBy)&&this._colorByItems.set(this.config.colorBy,this.config.colorBy),!this.disposed){if(this.header&&!this.sampleKeys&&(this.sampleKeys=this.header.sampleNameMap?Array.from(this.header.sampleNameMap.keys()):[]),void 0===this.visibilityWindow&&!1!==this.config.indexed){const e=_(this.config.url)?this.config.url.name:this.config.url;gF(e)&&e.toLowerCase().includes("gnomad")?this.visibilityWindow=1e3:"function"==typeof this.featureSource.defaultVisibilityWindow?this.visibilityWindow=await this.featureSource.defaultVisibilityWindow():this.visibilityWindow=1e6}return this._initialColor=this.color||this.constructor.defaultColor,this._initialAltColor=this.altColor||this.constructor.defaultColor,this}}get supportsWholeGenome(){return!this.config.indexURL||!0===this.config.supportsWholeGenome}get color(){return this._color||wF.defaultColor}set color(e){this._color=e,e&&(this.colorBy=void 0)}async getHeader(){return this.header||"function"==typeof this.featureSource.getHeader&&(this.header=await this.featureSource.getHeader()),this.header}getSampleCount(){return this.sampleKeys?this.sampleKeys.length:0}async getFeatures(e,t,i,n){void 0===this.header&&(this.header=await this.getHeader());const r=await this.featureSource.getFeatures({chr:e,start:t,end:i,bpPerPixel:n,visibilityWindow:this.visibilityWindow});if(this.initialSort){const e=this.initialSort;if(void 0===e.option||"GENOTYPE"===e.option.toUpperCase())this.sortSamplesByGenotype(e,r);else if("ATTRIBUTE"===e.option.toUpperCase()&&e.attribute){const t="ASC"===e.direction?1:-1;this.sortByAttribute(e.attribute,t)}this.initialSort=void 0}return r}hasSamples(){return this.getSampleCount()>0}getSamples(){const e="SQUISHED"===this.displayMode?this.squishedVGap:this.expandedVGap,t="COLLAPSED"===this.displayMode?1:this.nVariantRows,i="SQUISHED"===this.displayMode?this.squishedVariantHeight:this.expandedVariantHeight,n=t*(("SQUISHED"===this.displayMode?this.squishedCallHeight:this.expandedCallHeight)+e),r=mF+t*(i+e);return{names:this.sampleKeys,yOffset:r,height:n}}computePixelHeight(e){if(!e||0===e.length)return mF;const t="COLLAPSED"===this.displayMode?1:this.nVariantRows,i="SQUISHED"===this.displayMode?this.squishedVGap:this.expandedVGap,n="SQUISHED"===this.displayMode?this.squishedVariantHeight:this.expandedVariantHeight,r="SQUISHED"===this.displayMode?this.squishedCallHeight:this.expandedCallHeight,s=!1===this.showGenotypes?0:this.getSampleCount()*t;return mF+t*(n+i)+i+(s+1)*(r+i)}variantRowCount(e){this.nVariantRows=e}draw({context:e,pixelWidth:t,pixelHeight:i,bpPerPixel:n,bpStart:r,pixelTop:s,features:o}){fr.fillRect(e,0,s,t,i,{fillStyle:"rgb(255, 255, 255)"});const a="SQUISHED"===this.displayMode?this.squishedVGap:this.expandedVGap,c="COLLAPSED"===this.displayMode?1:this.nVariantRows,l="SQUISHED"===this.displayMode?this.squishedVariantHeight:this.expandedVariantHeight;this.variantBandHeight=mF+c*(l+a);let h=this.sampleColumns;const d=this.hasSamples();if(h&&d&&!1!==this.showGenotypes&&fr.strokeLine(e,0,this.variantBandHeight,t,this.variantBandHeight,{strokeStyle:"rgb(224,224,224) "}),o){const i="SQUISHED"===this.displayMode?this.squishedCallHeight:this.expandedCallHeight,s="SQUISHED"===this.displayMode?this.squishedVGap:this.expandedVGap,a=r+t*n+1;for(let t of o){if(this._filter&&!this._filter(t))continue;if(t.end<r)continue;if(t.start>a)break;const o="SQUISHED"===this.displayMode?this.squishedVariantHeight:this.expandedVariantHeight,c=mF+("COLLAPSED"===this.displayMode?0:t.row*(o+s)),l=o;let h=(t.start-r)/n,u=(t.end-r)/n,f=Math.max(1,u-h);f<3?(f=3,h-=1):f>5&&(h+=1,f-=2);const p=t._f||t;let g;try{g=p.alleleFreq()}catch(e){console.log(e)}if("AF"===this.colorBy&&g){const t=Math.min(1,g)*l,i=l-t;e.fillStyle=p.isFiltered()?this.refColorFiltered:this.refColor,e.fillRect(h,c,f,i),e.fillStyle=p.isFiltered()?this.altColorFiltered:this.altColor,e.fillRect(h,c+i,f,t)}else e.fillStyle=this.getColorForFeature(p),e.fillRect(h,c,f,l);let m=this.getVariantStrokecolor(p);if(m&&(e.strokeStyle=m,e.strokeRect(h,c,f,l)),this.callContextHook(p,e,h,c,f,l),d&&!1!==this.showGenotypes){const t="COLLAPSED"===this.displayMode?1:this.nVariantRows;this.sampleYOffset=this.variantBandHeight+s,this.sampleHeight=t*(i+s);let n=0;for(let t of this.sampleKeys){const r=this.header.sampleNameMap.get(t),o=p.calls[r];if(o){const t="COLLAPSED"===this.displayMode?0:p.row,r=this.sampleYOffset+n*this.sampleHeight+t*(i+s);let a=!0,c=!0,l=!1;if(o.genotype)for(let e of o.genotype){if("."===e){l=!0;break}0!==e&&(c=!1),0===e&&(a=!1)}o.genotype?e.fillStyle=l?this.noCallColor:c?this.homrefColor:a?this.homvarColor:this.hetvarColor:e.fillStyle=this.noGenotypeColor,e.fillRect(h,r,f,i)}n++}}}}else console.log("No feature list")}get refColorFiltered(){return this._refColorFiltered||(this._refColorFiltered=un.addAlpha(this.refColor,.2)),this._refColorFiltered}get altColorFiltered(){return this._altColorFiltered||(this._altColorFiltered=un.addAlpha(this.altColor,.2)),this._altColorFiltered}getColorForFeature(e){const t=e._f||e;let i;if(this.colorBy&&"none"!==this.colorBy){const e=t.getAttributeValue(this.colorBy);i=void 0!==e?this.getVariantColorTable(this.colorBy).getColor(e):"gray"}else i=this.color?"function"==typeof this.color?this.color(e):this.color:"NONVARIANT"===t.type?this.nonRefColor:"MIXED"===t.type?this.mixedColor:this.color;return t.isFiltered()&&(i=un.addAlpha(i,.2)),i}getVariantStrokecolor(e){const t=e._f||e;let i;return i=this.strokecolor?"function"==typeof this.strokecolor?this.strokecolor(t):this.strokecolor:void 0,i}callContextHook(e,t,i,n,r,s){if(this._context_hook&&"function"==typeof this._context_hook){const o=e._f||e;t.save(),this._context_hook(o,t,i,n,r,s),t.restore()}}clickedFeatures(e){let t=super.clickedFeatures(e);const i="EXPANDED"===this.displayMode?this.expandedVGap:this.squishedVGap,n=i+("SQUISHED"===this.displayMode?this.squishedCallHeight:this.expandedCallHeight),r=e.y;if(r<=this.variantBandHeight){const e="SQUISHED"===this.displayMode?this.squishedVariantHeight:this.expandedVariantHeight,n=Math.floor((r-mF)/(e+i));"COLLAPSED"!==this.displayMode&&(t=t.filter((e=>e.row===n)))}else if(this.sampleKeys){const e=r-this.variantBandHeight,i=Math.floor(e/this.sampleHeight);if(i>=0&&i<this.sampleKeys.length){const r=Math.floor((e-i*this.sampleHeight)/n),s="COLLAPSED"===this.displayMode?t:t.filter((e=>e.row===r)),o=this.sampleKeys[i],a=this.header.sampleNameMap.get(o);t=s.map((e=>{const t=e.calls[a];return t.genotypeString=function(e,t){if(e.genotype){let i="";if("."===t.alternateBases)i="No Call";else{const n=t.alternateBases.split(",");for(let r of e.genotype)if(i.length>0&&(i+=" | "),"."===r)i+=".";else if(0===r)i+=t.referenceBases;else{i+=n[r-1].replace("<","<")}}return i}}(t,e),t}))}}return t}popupData(e,t){void 0===t&&(t=this.clickedFeatures(e));const i=e.genomicLocation,n=this.browser.genome.id;let r=[];for(let e of t){const t=e._f||e;if(r.length>0&&r.push({html:'<hr style="border-top-width:2px ;border-color: #c9c3ba" />'}),"function"==typeof t.popupData){const e=t.popupData(i,n);Array.prototype.push.apply(r,e)}}return r}menuItemList(){const t=[];if(this.header.INFO&&this.header.INFO){const i=this._colorByItems;t.push("<hr/>");const n=e('<div class="igv-track-menu-category igv-track-menu-border-top">');n.textContent="Color by:",t.push({name:void 0,element:n,click:void 0,init:void 0});for(let e of i.keys()){const n=this.colorBy===e;t.push(this.colorByCB({key:e,label:i.get(e)},n))}t.push(this.colorByCB({key:"info",label:"Info field..."}))}if(!0===Xd(this.browser.sampleInfo,this.sampleKeys)){t.push("<hr/>"),t.push("Sort by attribute:");for(const e of this.browser.sampleInfo.attributeNames)if(this.sampleKeys.some((t=>{const i=this.browser.sampleInfo.getAttributes(t);return i&&i[e]}))){const i=document.createElement("div");i.innerHTML=` ${e.split(rd.emptySpaceReplacement).join(" ")}`;const n=()=>{const t=this._sortDirections.get(e)||1;this.sortByAttribute(e,t),this.config.sort={option:"ATTRIBUTE",attribute:e,direction:t>0?"ASC":"DESC"},this._sortDirections.set(e,-1*t)};t.push({element:i,click:n})}}t.push("<hr/>"),this.getSampleCount()>0&&(t.push({element:e('<div class="igv-track-menu-border-top">')}),t.push({element:Ta("Show Genotypes",this.showGenotypes),click:function(){this.showGenotypes=!this.showGenotypes,this.trackView.checkContentHeight(),this.trackView.repaintViews(),this.browser.sampleNameControl.performClickWithState(this.browser,this.showGenotypes),this.browser.sampleInfoControl.performClickWithState(this.browser,this.showGenotypes)}})),t.push({element:e('<div class="igv-track-menu-border-top">')});for(let e of["COLLAPSED","SQUISHED","EXPANDED"]){t.push({element:Ta({COLLAPSED:"Collapse",SQUISHED:"Squish",EXPANDED:"Expand"}[e],e===this.displayMode),click:function(){this.displayMode=e,this.trackView.checkContentHeight(),this.trackView.repaintViews()}})}return this.browser.circularView&&(t.push("<hr>"),t.push({label:"Add SVs to circular view",click:function(){for(let e of this.trackView.viewports)this.sendChordsForViewport(e)}})),this.canCovertToPytor()&&(t.push("<hr>"),t.push({label:"Convert to CNVpytor track",click:function(){this.convertToPytor()}})),t}contextMenuItemList(e){const t=[];if(this.hasSamples()&&this.showGenotypes){const i=e.viewport.referenceFrame,n=e.genomicLocation,r=i.toBP(2.5),s=this._sortDirections.get("genotype")||1;this._sortDirections.set("genotype",-1*s),t.push({label:"Sort by genotype",click:t=>{const i={direction:s,option:"genotype",chr:e.viewport.referenceFrame.chr,start:Math.floor(n-r),end:Math.ceil(n+r)},o=e.viewport.cachedFeatures;this.sortSamplesByGenotype(i,o),this.config.sort=i}}),t.push("<hr/>")}if(this.browser.circularView){const i=e.viewport;t.push({label:"Add SVs to Circular View",click:()=>{this.sendChordsForViewport(i)}}),t.push("<hr/>")}return t}async sortSamplesByGenotype({chr:e,position:t,start:i,end:n,direction:r},s){if(void 0===i&&(i=t-1),void 0===n&&(n=t),s||(s=await this.featureSource.getFeatures({chr:e,start:i,end:n})),!s)return;const o=new Map,a="ASC"===r?1:-1;for(let e of s)if(!(e.end<i)){if(e.start>n)break;for(let t of e.calls){const e=t.sample,i=t.zygosityScore();o.set(e,o.has(e)?o.get(e)+i:i)}}this.sampleKeys.sort((function(e,t){let i=o.get(e)||0,n=o.get(t)||0;return a*(i-n)})),this.trackView.repaintViews()}sortByAttribute(e,t){this.config.sort={option:"ATTRIBUTE",attribute:e,direction:1===t?"ASC":"DESC"},this.sampleKeys=this.browser.sampleInfo.getSortedSampleKeysByAttribute(this.sampleKeys,e,t),this.trackView.repaintViews()}sendChordsForViewport(e){const t=e.referenceFrame;let i;if("all"===t.chr){const e=this.featureSource.getAllFeatures(),t=Object.keys(e).map((t=>e[t]));i=[].concat(...t)}else i=this.featureSource.featureCache.queryFeatures(t.chr,t.start,t.end);Kf(i.filter((e=>{const t=e._f||e;return t.info&&t.info.CHR2&&t.info.END&&(t.info.CHR2!==t.chr||Math.abs(Number.parseInt(t.info.END)-t.pos)>1e6)})).map((e=>{const t=e._f||e,i=Number.parseInt(t.info.END),n=i-100,r=i+100;return{uniqueId:`${t.chr}:${t.start}-${t.end}_${t.info.CHR2}:${t.info.END}`,refName:Wf(t.chr),start:t.start,end:t.end,mate:{refName:Wf(t.info.CHR2),start:n,end:r}}})),this,t,.5)}colorByCB(e,t){const i=Ta(e.label,t);if("info"!==e.key){function n(){const t="none"===e.key?void 0:e.key;this.colorBy=t,this.config.colorBy=t,this.trackView.repaintViews()}return{name:void 0,element:i,click:n,init:void 0}}{function r(e){this.browser.inputDialog.present({label:"Info field",value:"",callback:e=>{e?(this.colorBy=e,this._colorByItems.set(e,e)):this.colorBy=void 0,this.trackView.repaintViews()}},e)}return{name:void 0,element:i,dialog:r,init:void 0}}}getState(){const e=super.getState();return this.color&&"function"!=typeof this.color&&(e.color=this.color),e}getVariantColorTable(e){if(this.colorTables.has(e))return this.colorTables.get(e);if(this.colorTables.has("*"))return this.colorTables.get("*");{let t;if("SVTYPE"===e)t=bF;else t=new Kn("Set1");return this.colorTables.set(e,t),t}}paintAxis(){}canCovertToPytor(){return!this.config.indexURL&&(!!this.header&&(1===Object.keys(this.sampleKeys).length&&this.header.FORMAT&&this.header.FORMAT.AD&&this.header.FORMAT.DP))}async convertToPytor(){this.variantState={...this.config,...this.getState()},this.variantState.trackHeight=this.height,this.trackView.startSpinner(),setTimeout((async()=>{try{const e=Object.assign({},this.config);Object.setPrototypeOf(this,pF.prototype),this.init(e),await this.postInit(),this.trackView.clearCachedFeatures(),this.trackView.setTrackHeight(this.config.height||pF.DEFAULT_TRACK_HEIGHT),this.trackView.checkContentHeight(),this.trackView.updateViews()}finally{this.trackView.stopSpinner()}}),100)}getFilterableAttributes(){return this.header.INFO}_repackCachedFeatures(){for(let e of this.trackView.viewports)if(e.cachedFeatures){const t=this.config.maxRows||Number.MAX_SAFE_INTEGER;Ha(e.cachedFeatures,t,this._filter)}}}const bF=new Yn({DEL:"#ff2101",INS:"#001888",DUP:"#028401",INV:"#008688",CNV:"#8931ff",BND:"#891100","*":"#002eff"}),FF={timeout:5e3,type:"plain",url:"https://igv.org/genomes/locus.php?genome=$GENOME$&name=$FEATURE$",coords:0};async function vF(e,t){const i=e.searchConfig||FF;let n;t=t.toUpperCase();const r=e.tracks.filter((e=>e.searchable));for(let e of r){const i=await e.search(t);if(i)return i}if(e.config&&!1!==e.config.search)try{return n=await async function(e,t,i){let n=i.url.replace("$FEATURE$",t.toUpperCase());n.indexOf("$GENOME$")>-1&&(n=n.replace("$GENOME$",e.genome.id?e.genome.id:"hg19"));const r=i.timeout?{timeout:i.timeout}:void 0,s=await Mn.loadString(n,r);return function(e,t,i){let n;n="plain"===i.type?function(e,t){const i=[],n=v(t);for(let t of n){const n=t.split("\t");if(n.length>=3){const t=n[1].split(":"),r=t[1].split("-");i.push({chromosome:e.genome.getChromosomeName(t[0].trim()),start:parseInt(r[0].replace(/,/g,"")),end:parseInt(r[1].replace(/,/g,"")),name:n[0].toUpperCase()})}}return i}(e,t):JSON.parse(t);i.resultsField&&(n=n[i.resultsField]);if(n&&0!==n.length){const e=i.chromosomeField||"chromosome",t=i.startField||"start",r=i.endField||"end",s=i.coords||1;let o;o=Array.isArray(n)?n[0]:n,o.hasOwnProperty(e)&&o.hasOwnProperty(t)||console.error("Search service results must include chromosome and start fields: "+o);const a=o[e];let c=o[t]-s,l=o[r];void 0===l&&(l=c+1);const h={chr:a,start:c,end:l};if(!o.type||o.type,i.geneField&&i.snpField){const e=o[i.geneField]||o[i.snpField];e&&(h.name=e.toUpperCase())}return h}return}(e,s,i)}(e,t,i),n}catch(e){console.log("Search service not available "+e)}}function yF(e,t=!1){const i=e.split("\t");if(i.length>2)try{const e=i[0],t=parseInt(i[1].replace(/,/g,""),10)-1,n=parseInt(i[2].replace(/,/g,""),10);if(!isNaN(t)&&!isNaN(n))return{chr:e,start:t,end:n}}catch(e){}const n=e.split(":"),r={chr:n[0]};if(n.length>1){let e,i=n[1].split("-");if(i.length>2){if(!n[1].startsWith("-"))return;{const e=n[1].indexOf("-",1);if(e>0){i=[n[1].substring(0,e),n[1].substring(e+1)]}}}if(e=i[0].replace(/,/g,""),isNaN(e))return;if(r.start=parseInt(e,10)-1,r.end=r.start+1,1===i.length&&(r.start-=20,r.end+=20),2===i.length){if(e=i[1].replace(/,/g,""),isNaN(e))return;if(r.end=parseInt(e,10),r.start<0&&!t){const e=-extent.start;r.start+=e,r.end+=e}}}return r}class AF extends Pa{constructor(e,t){super(e,t)}init(e){super.init(e),this.type="qtl",this.name=e.name;const t=e.minLogP||e.min,i=e.maxLogP||e.max;this.dataRange={min:void 0!==t?t:3.5,max:i||25},this.autoscale=!i||e.autoscale,this.autoscalePercentile=void 0===e.autoscalePercentile?98:e.autoscalePercentile,this.background=e.background,this.divider=e.divider||"rgb(225,225,225)",this.dotSize=e.dotSize||2,this.height=e.height||100,this.disableButtons=e.disableButtons,this.featureSource=Hl(e,this.browser.genome)}paintAxis(e,t,i){const n=(this.dataRange.max-this.dataRange.min)/i,r={font:"normal 10px Arial",textAlign:"right",strokeStyle:"black"};fr.fillRect(e,0,0,t,i,{fillStyle:"rgb(255, 255, 255)"});const s=Math.ceil(10*(this.dataRange.max-this.dataRange.min)/i);for(let o=4;o<=this.dataRange.max;o+=s){const s=.85*t,a=s-5,c=s,l=i-(o-this.dataRange.min)/n;fr.strokeLine(e,a,l,c,l,r),l>8&&fr.fillText(e,o,a-1,l+2,r)}r.textAlign="center",fr.fillText(e,"-log10(pvalue)",t/4,i/2,r,{rotate:{angle:-90}})}async getFeatures(e,t,i){const n=this.visibilityWindow;return await this.featureSource.getFeatures({chr:e,start:t,end:i,visibilityWindow:n})}draw(e){const{context:t,referenceFrame:i,pixelWidth:n,pixelHeight:r}=e;this.background&&fr.fillRect(t,0,0,n,r,{fillStyle:this.background}),fr.strokeLine(t,0,r-1,n,r-1,{strokeStyle:this.divider}),i.feature&&i.feature.match(/RS[0-9]+/);const s=i=>{const s=i?2*this.dotSize:this.dotSize,o=e.bpStart,a=(this.dataRange.max-this.dataRange.min)/r;for(let d of e.features){const u=(d.start-o+.5)/e.bpPerPixel;if(u<0)continue;if(u>n)break;const f=d.phenotype;let p;if(this.browser.qtlSelections.qtl?(l=this.browser.qtlSelections.qtl,h=d,p=l.chr===h.chr&&l.start===h.start&&l.pValue===h.pValue):p=this.browser.qtlSelections.snps.size>0?this.browser.qtlSelections.hasSnp(d.snp)&&this.browser.qtlSelections.hasPhenotype(f):this.browser.qtlSelections.hasPhenotype(f),!i||p){var c=-Math.log(d.pValue)/Math.LN10;if(c>=this.dataRange.min){let e;c>this.dataRange.max?(c=this.dataRange.max,e=!0):e=!1;const n=Math.max(0+s,r-Math.round((c-this.dataRange.min)/a));let o;d.px=u,d.py=n,d.radius=s,i&&p?(o=this.browser.qtlSelections.colorForGene(f),fr.setProperties(t,{fillStyle:o,strokeStyle:"black"})):(o=e?"rgb(150, 150, 150)":"rgb(180, 180, 180)",fr.setProperties(t,{fillStyle:o,strokeStyle:o})),fr.fillCircle(t,u,n,s),fr.strokeCircle(t,u,n,s)}}}var l,h};s(!1),s(!0)}popupData(e,t){if(void 0===t&&(t=e.viewport.cachedFeatures),!t||0===t.length)return[];const i=this.name,n=[];for(let r of this._clickedFeatures(e,t))n.length>0&&n.push("<hr/>"),"function"==typeof r.popupData?n.push(...r.popupData(e)):n.push({name:"snp id",value:r.snp},{name:"gene id",value:r.gencodeId},{name:"gene name",value:r.geneSymbol},{name:"p value",value:r.pValue},{name:"tissue",value:i});return n}_clickedFeatures(e,t){const i=(e,t)=>Math.sqrt((e.px-t.canvasX)*(e.px-t.canvasX)+(e.py-t.canvasY)*(e.py-t.canvasY)),n=t.filter((t=>i(t,e)<6));if(n.length>1){n.sort(((t,n)=>i(t,e)-i(n,e)));const t=i(n[0],e);return n.filter((n=>i(n,e)<=t))}return n}contextMenuItemList(e){const t=[],i=e.viewport.cachedFeatures;if(i){const n=this._clickedFeatures(e,i);n.length>0&&(t.push({label:"Highlight associated features",click:async()=>{this.browser.qtlSelections.clear();for(let e of n)this.browser.qtlSelections.qtl=e,this.browser.qtlSelections.addPhenotype(e.phenotype);this.browser.repaintViews()}}),t.push("<hr>"))}return t}menuItemList(){const e=[];return e.push(...this.numericDataMenuItems()),e.push("<hr/>"),e.push({label:"Search for...",dialog:function(e){this.browser.inputDialog.present({label:"Search for snp or phenotype",value:"",callback:async e=>{if(e){e=e.trim().toUpperCase();const t=t=>((t.phenotype&&t.phenotype.toUpperCase())===e||t.snp&&t.snp.toUpperCase()===e)&&-Math.log(t.pValue)/Math.LN10>this.dataRange.min;let i,n,r,s=await this.featureSource.findFeatures(t);if(0==s.length){await this.browser.search(e)&&(s=await this.featureSource.findFeatures(t))}if(s.length>0){this.browser.qtlSelections.clear();const t=new Set;i=s[0].chr,n=s[0].start,r=s[0].end;for(let o of s)o.snp&&o.snp.toUpperCase()===e&&this.browser.qtlSelections.addSnp(o.snp),this.browser.qtlSelections.addPhenotype(o.phenotype),t.add(o.phenotype),o.chr===i&&(n=Math.min(n,o.start),r=Math.max(r,o.end));const o=this.browser.genome.getChromosomeName(i);for(let e of t){const t=await vF(this.browser,e);t&&o===this.browser.genome.getChromosomeName(t.chr)&&(n=Math.min(n,t.start),r=Math.max(r,t.end))}const a=Math.floor(.1*(r-n));n=Math.max(0,n-a),r+=a,await this.browser.search(`${i}:${n}-${r}`)}}}},e)}}),e}doAutoscale(e){let t=this.config.max||25;if(e.length>0){const i=e.map((e=>-Math.log(e.pValue)/Math.LN10));i.sort(((e,t)=>e-t));t=i[Math.floor(i.length*(this.autoscalePercentile/100))]}return this.dataRange.max=Math.max(t,10),this.dataRange}}const CF={X:"rgb(204, 153, 0)",Y:"rgb(153, 204, 0)",Un:"darkGray)",1:"rgb(80, 80, 255)",2:"rgb(206, 61, 50)","2a":"rgb(210, 65, 55)","2b":"rgb(215, 70, 60)",3:"rgb(116, 155, 88)",4:"rgb(240, 230, 133)",5:"rgb(70, 105, 131)",6:"rgb(186, 99, 56)",7:"rgb(93, 177, 221)",8:"rgb(128, 34, 104)",9:"rgb(107, 215, 107)",10:"rgb(213, 149, 167)",11:"rgb(146, 72, 34)",12:"rgb(131, 123, 141)",13:"rgb(199, 81, 39)",14:"rgb(213, 143, 92)",15:"rgb(122, 101, 165)",16:"rgb(228, 175, 105)",17:"rgb(59, 27, 83)",18:"rgb(205, 222, 183)",19:"rgb(97, 42, 121)",20:"rgb(174, 31, 99)",21:"rgb(231, 199, 111)",22:"rgb(90, 101, 94)",23:"rgb(204, 153, 0)",24:"rgb(153, 204, 0)",25:"rgb(51, 204, 0)",26:"rgb(0, 204, 51)",27:"rgb(0, 204, 153)",28:"rgb(0, 153, 204)",29:"rgb(10, 71, 255)",30:"rgb(71, 117, 255)",31:"rgb(255, 194, 10)",32:"rgb(255, 209, 71)",33:"rgb(153, 0, 51)",34:"rgb(153, 26, 0)",35:"rgb(153, 102, 0)",36:"rgb(128, 153, 0)",37:"rgb(51, 153, 0)",38:"rgb(0, 153, 26)",39:"rgb(0, 153, 102)",40:"rgb(0, 128, 153)",41:"rgb(0, 51, 153)",42:"rgb(26, 0, 153)",43:"rgb(102, 0, 153)",44:"rgb(153, 0, 128)",45:"rgb(214, 0, 71)",46:"rgb(255, 20, 99)",47:"rgb(0, 214, 143)",48:"rgb(20, 255, 177)"};for(let iy of Object.keys(CF)){CF["chr"+iy]=CF[iy]}for(let ny=1;ny<=48;ny++){if(10===ny)continue;const ry=_F(ny);CF[ry]=CF[ny.toString()]}function _F(e){if(!+e)return!1;for(var t=String(+e).split(""),i=["","C","CC","CCC","CD","D","DC","DCC","DCCC","CM","","X","XX","XXX","XL","L","LX","LXX","LXXX","XC","","I","II","III","IV","V","VI","VII","VIII","IX"],n="",r=3;r--;)n=(i[+t.pop()+10*r]||"")+n;return Array(+t.join("")+1).join("M")+n}class xF extends Pa{constructor(e,t){super(e,t)}init(e){super.init(e),this.useChrColors=void 0===e.useChrColors||e.useChrColors,this.trait=e.trait,this.posteriorProbability=e.posteriorProbability,this.valueProperty="bed"===e.format?"score":"value",this.height=e.height||100,this.autoscale=e.autoscale,this.autoscalePercentile=void 0===e.autoscalePercentile?98:e.autoscalePercentile,this.background=e.background,this.divider=e.divider||"rgb(225,225,225)",this.dotSize=e.dotSize||3,this.popoverWindow=void 0===e.popoverWindow?1e8:e.popoverWindow,this.useChrColors?this.colorScale=new Yn(e.colorTable||CF):e.color?this.colorScale=new wl(e.color):this.colorScale=new pl(e.colorScale||{thresholds:[5e-8,5e-4,.5],colors:["rgb(255,50,50)","rgb(251,100,100)","rgb(251,170,170)","rgb(227,238,249)"]}),this.featureSource=Hl(e,this.browser.genome)}async postInit(){if("function"!=typeof this.featureSource.getHeader||(this.header=await this.featureSource.getHeader(),!this.disposed))return this.header&&this.setTrackProperties(this.header),this.autoscale||(this.posteriorProbability?this.dataRange={min:void 0===this.config.min?0:this.config.min,max:void 0===this.config.max?1:this.config.max}:this.dataRange={min:void 0===this.config.min?0:this.config.min,max:void 0===this.config.max?25:this.config.max}),this._initialColor=this.color||this.constructor.defaultColor,this._initialAltColor=this.altColor||this.constructor.defaultColor,this}get supportsWholeGenome(){return!0}async getFeatures(e,t,i){const n=this.visibilityWindow;return this.featureSource.getFeatures({chr:e,start:t,end:i,visibilityWindow:n})}draw(e){const t=e.features,i=e.context,n=e.pixelWidth,r=e.pixelHeight;if(this.background&&fr.fillRect(i,0,0,n,r,{fillStyle:this.background}),fr.strokeLine(i,0,r-1,n,r-1,{strokeStyle:this.divider}),t){const s=e.bpPerPixel,o=e.bpStart,a=o+n*s+1;for(let e of t){const t=e.start;if(t<o)continue;if(t>a)break;let n;if(this.posteriorProbability)n=e[this.valueProperty];else{const t=e[this.valueProperty];if(!t)continue;n=-Math.log10(t)}const c=this.useChrColors?e._f?e._f.chr:e.chr:n,l=this.colorScale.getColor(c),h=(this.dataRange.max-this.dataRange.min)/r,d=Math.round((t-o)/s),u=Math.max(this.dotSize,r-Math.round((n-this.dataRange.min)/h));l&&fr.setProperties(i,{fillStyle:l,strokeStyle:"black"}),fr.fillCircle(i,d,u,this.dotSize),e.px=d,e.py=u}}}paintAxis(e,t,i){fr.fillRect(e,0,0,t,i,{fillStyle:"rgb(255, 255, 255)"});var n={font:"normal 10px Arial",textAlign:"right",strokeStyle:"black"};const r=(this.dataRange.max-this.dataRange.min)/i;if(this.posteriorProbability){const t=.1;for(let s=this.dataRange.min;s<this.dataRange.max;s+=t){const t=i-Math.round((s-this.dataRange.min)/r);fr.strokeLine(e,45,t-2,50,t-2,n),fr.fillText(e,s.toFixed(1),44,t+2,n)}}else{const t=Math.ceil(10*(this.dataRange.max-this.dataRange.min)/i);for(let s=this.dataRange.min;s<this.dataRange.max;s+=t){const t=i-Math.round((s-this.dataRange.min)/r);fr.strokeLine(e,45,t,50,t,n),fr.fillText(e,Math.floor(s),44,t+4,n)}}n.textAlign="center",this.posteriorProbability?fr.fillText(e,"PPA",t/2,i/2,n,{rotate:{angle:-90}}):fr.fillText(e,"-log10(pvalue)",t/2,i/2,n,{rotate:{angle:-90}})}popupData(e,t){void 0===t&&(t=e.viewport.cachedFeatures);let i=[];const n=e.viewport.trackView.track;if(t){let r=0;for(let s of t){const t=Math.abs(e.canvasX-s.px),o=Math.abs(e.canvasY-s.py);if(t<this.dotSize&&o<this.dotSize){if(r>0&&i.push("<HR/>"),5==r){i.push("...");break}if(s=s._f||s,"function"==typeof s.popupData)i=i.concat(s.popupData());else{const e=s[this.valueProperty],t=s.chr,r=F(s.start+1);i.push({name:"chromosome",value:t}),i.push({name:"position",value:r}),i.push({name:"name",value:s.name}),n.posteriorProbability?i.push({name:"posterior probability",value:e}):i.push({name:"pValue",value:e})}r++}}}return i}menuItemList(){return this.numericDataMenuItems()}doAutoscale(e){if(e.length>0){const t=this.valueProperty,i=this.posteriorProbability,n=e.map((function(e){const n=e[t];return{value:i?n:-Math.log(n)/Math.LN10}}));this.dataRange=Gs(n)}else this.posteriorProbability?this.dataRange={min:this.config.min||0,max:this.config.max||1}:this.dataRange={min:this.config.max||25,max:this.config.min||0};return this.dataRange}}class kF extends Pa{constructor(e,t){super(e,t)}init(e){super.init(e),this.autoscale=e.autoscale||void 0===e.max,this.dataRange={min:e.min||0,max:e.max},this.windowFunction=e.windowFunction||"mean",this.paintAxis=hl,this.graphType=e.graphType||"bar",e._featureSource?(this.featureSource=e._featureSource,delete e._featureSource):this.featureSource=Hl(this.config,this.browser.genome),this.visibilityWindow=-1,this.featureSource.visibilityWindow=this.visibilityWindow}async postInit(){if("function"==typeof this.featureSource.getHeader){if(this.header=await this.featureSource.getHeader(),this.disposed)return;if(this.sampleKeys=this.header.columnNames.slice(3),this.setTrackProperties(this.header),this.header.hasOwnProperty("clickToHighlight")){let e=this.header.clickToHighlight;this.config.clickToHighlight=e,this.config.samplesClickedToHighlight={}}if(this.header.hasOwnProperty("onlyHandleClicksForHighlightedSamples")&&(this.config.onlyHandleClicksForHighlightedSamples=!0),this.header.hasOwnProperty("highlight")){this.config.highlightSamples={};let e=this.header.highlight;Array.isArray(e)||(e=[e]);for(let t of e){const e=t.split(";");2===e.length&&(this.config.highlightSamples[e[0]]=e[1])}}}this._initialColor=this.color||this.constructor.defaultColor,this._initialAltColor=this.altColor||this.constructor.defaultColor}menuItemList(){return this.numericDataMenuItems()}async getFeatures(e,t,i){const n=await this.featureSource.getFeatures({chr:e,start:0,end:Number.MAX_SAFE_INTEGER,visibilityWindow:this.visibilityWindow});let r,s;for(let e=1;e<n.length-1;e++)if(void 0===r&&n[e].end>t&&(r=e-1),void 0===s&&n[e].start>i){s=e+1;break}return void 0===r&&(r=0),void 0===s&&(s=n.length),n.slice(r,s)}draw(e){const{features:t,context:i,bpPerPixel:n,bpStart:r,pixelWidth:s,pixelHeight:o}=e,a=e=>(this.dataRange.max-e)/(this.dataRange.max-this.dataRange.min)*o,c=function(e){let t=Math.floor((e-r)/n);return isNaN(t)&&console.warn("isNaN(x). feature start "+F(e)+" bp start "+F(r)),t};if(t&&t.length>0&&(void 0===this.dataRange.min&&(this.dataRange.min=0),this.dataRange.max>this.dataRange.min)){const e=this.config.highlightSamples,n=this.config.onlyHandleClicksForHighlightedSamples,r=this.config.clickToHighlight;let s=-1,o={},l=[],h=[];this.clickDetectorCache={};for(let d of t){const t=c(d.start),u=c(d.end),f=s>=0?c(s):t;if(!isNaN(t)&&!isNaN(u)){this.clickDetectorCache[t]=[],this.clickDetectorCache[u]=[];for(let s=0;s<d.values.length;s++){const c=this.sampleKeys[s],p=d.values[s],g=a(p);if(t-f>=1){const s=o[c],h=a(s),d=e&&e[c];d?l.push([f,h,t,g,d]):r&&c in this.config.samplesClickedToHighlight?l.push([f,h,t,g,this.config.samplesClickedToHighlight[c]]):fr.strokeLine(i,f,h,t,g,{strokeStyle:"#D9D9D9"}),n&&!(c in e)||this.clickDetectorCache[t].push([f,h,t,g,c,d||"gray"])}if(u-t>=1){const s=e&&e[c];s?h.push([t,g,u,g,s]):r&&c in this.config.samplesClickedToHighlight?h.push([t,g,u,g,this.config.samplesClickedToHighlight[c]]):fr.strokeLine(i,t,g,u,g,{strokeStyle:"gray"}),n&&!(c in e)||this.clickDetectorCache[u].push([t,g,u,g,c,s||"gray"])}o[c]=p}s=d.end}}for(let e of l)fr.strokeLine(i,e[0],e[1],e[2],e[3],{strokeStyle:e[4],lineWidth:1.3});for(let e of h)fr.strokeLine(i,e[0],e[1],e[2],e[3],{strokeStyle:e[4],lineWidth:2})}(e=>{if(this.config.hasOwnProperty("guideLines"))for(let t of this.config.guideLines)if(t.hasOwnProperty("color")&&t.hasOwnProperty("y")&&t.hasOwnProperty("dotted")){let i=a(t.y),n={strokeStyle:t.color,strokeWidth:2};t.dotted?fr.dashedLine(e.context,0,i,e.pixelWidth,i,5,n):fr.strokeLine(e.context,0,i,e.pixelWidth,i,n)}})(e)}doAutoscale(e){let t,i;return e.length>0?(t=Number.MAX_VALUE,i=-Number.MAX_VALUE,e.forEach((function(e){t=Math.min(t,...e.values),i=Math.max(i,...e.values)})),t-=.01,i+=.01):(t=0,i=100),{min:t,max:i}}clickedFeatures(e){const t=e.canvasX,i=e.canvasY;let n=null;for(n of Object.keys(this.clickDetectorCache))if(n=parseInt(n),n>=t)break;if(n){let e=Number.MAX_VALUE,o=[];const a=this.clickDetectorCache[n];for(let n of a){const r=n[0],s=n[2];if(t<r||t>s)return[];const a=n[1],c=n[3];if(i<Math.min(a,c)-10||i>Math.max(a,c)+10)continue;const l=IF(t,i,r,a,s,c);l<e&&(o=[{name:n[4],color:n[5]}],e=l)}if(e<5){if(this.config.clickToHighlight){if(o[0].name in this.config.samplesClickedToHighlight)delete this.config.samplesClickedToHighlight[o[0].name];else if("any"===this.config.clickToHighlight){var r=["red","darkblue","green","teal","olivedrab","orange","maroon","purple","blue","gold"],s=r[Math.floor(Math.random()*(r.length+1))];this.config.samplesClickedToHighlight[o[0].name]=s}else this.config.samplesClickedToHighlight[o[0].name]=this.config.clickToHighlight;this.trackView.repaintViews()}return o}}return[]}popupData(e,t){void 0===t&&(t=this.clickedFeatures(e));const i=[];return t.forEach((function(e){for(let t of Object.keys(e))Us(e[t])&&i.push({name:t,value:e[t]})})),i}get supportsWholeGenome(){return!1}}function IF(e,t,i,n,r,s){const o=r-i,a=s-n,c=Math.abs(o*(n-t)-(i-e)*a),l=Math.sqrt(o*o+a*a);return l>0?c/l:0}class SF extends Pa{static defaults={height:300,theta:Math.PI/2,arcOrientation:"UP"};constructor(e,t){super(e,t),!1===e.arcOrientation?this.arcOrientation="DOWN":!0===e.arcOrientation?this.arcOrientation="UP":e.arcOrientation?this.arcOrientation=e.arcOrientation.toUpperCase():this.arcOrientation="UP","bp"===e.format?this.featureSource=new NF(e,t.genome):this.featureSource=new Sl(e,t.genome)}async getFeatures(e,t,i){const n=this.visibilityWindow;return this.featureSource.getFeatures({chr:e,start:t,end:i,visibilityWindow:n})}draw(e){const t=e.context,i=Math.PI/2,n=e.pixelWidth,r=e.pixelHeight;e.viewportWidth;const s=e.bpPerPixel,o=e.bpStart,a=s,c="UP"===this.arcOrientation;fr.fillRect(t,0,e.pixelTop,n,r,{fillStyle:"rgb(255, 255, 255)"});const l=e.features;if(l){EF(l,1);for(let e of l)if(e.startLeft){let n=Math.round((e.startLeft-o)/a),r=Math.round((e.startRight-o)/a),s=Math.round((e.endLeft-o)/a),l=Math.round((e.endRight-o)/a);t.fillStyle=e.color,t.strokeStyle=e.color,t.beginPath();let h=(n+l)/2,d=(l-n)/2,u=this.height,f=Math.PI+(Math.PI/2-i),p=2*Math.PI-(Math.PI/2-i);c?(t.arc(h,u,d,f,p),t.lineTo(s,u)):(u=0,t.arc(h,u,d,p,f),t.lineTo(l,u));const g=(r+s)/2,m=(s-r)/2,w=u;c?(t.arc(g,w,m,p,f,!0),t.lineTo(n,w)):(t.arc(g,w,m,f,p,!0),t.lineTo(s,w)),t.stroke(),t.fill(),e.drawState={x1:h,y1:u,r1:d,x2:g,y2:w,r2:m,sa:f,ea:p}}else{let n=Math.round((e.start-o)/a),r=Math.round((e.end-o)/a);t.strokeStyle=e.color,t.beginPath();let s=(n+r)/2,l=(r-n)/2,h=this.height,d=Math.PI+(Math.PI/2-i),u=2*Math.PI-(Math.PI/2-i);c?t.arc(s,h,l,d,u):(h=0,t.arc(s,h,l,u,d)),t.stroke(),e.drawState={x1:s,y1:h,r1:l,sa:d,ea:u}}}}clickedFeatures(e){const t=super.clickedFeatures(e),i=[];EF(t,-1);for(let n of t){const t=n.drawState,r=e.canvasX-t.x1,s=e.canvasY-t.y1,o=Math.sqrt(r*r+s*s),a=t.r1+3;let c,l;if(void 0===t.x2)c=o,l=t.r1-3;else{const i=e.canvasX-t.x2,n=e.canvasY-t.y2;c=Math.sqrt(i*i+n*n),l=t.r2-3}if(o<a&&c>l){i.push(n);break}}return i}popupData(e,t){if(void 0===t&&(t=this.clickedFeatures(e)),t&&t.length>0)return this.extractPopupData(t[0],this.getGenomeId())}menuItemList(){return[{name:"Toggle arc direction",click:function(){this.arcOrientation="UP"===this.arcOrientation?"DOWN":"UP",this.trackView.repaintViews()}}]}}function EF(e,t){e.sort((function(e,i){const n=void 0===e.score?-Number.MAX_VALUE:e.score,r=void 0===i.score?-Number.MAX_VALUE:i.score;return(void 0===t?1:t)*(n-r)}))}class NF{constructor(e,t){this.config=e,this.genome=t}async getFeatures({chr:e,start:t,end:i,bpPerPixel:n,visibilityWindow:r}){const s=this.genome;if(this.featureCache)return this.featureCache.queryFeatures(e,t,i);{const n=js(this.config),r=await Mn.loadByteArray(this.config.url,n);return this.featureCache=new On(function(e){if(!e)return null;const t=wc(e);let i,n=!0;const r=[],s=[],o=[];for(;void 0!==(i=t.nextLine());){const e=i.split("\t");if(n&&i.startsWith("color:")){const t="rgb("+e[1]+","+e[2]+","+e[3]+")";r.push(t),e.length>4&&s.push(e[4])}else{n=!1;const t=e[0],i=Number.parseInt(e[1])-1,c=Number.parseInt(e[2])-1,l=Number.parseInt(e[3]),h=Number.parseInt(e[4]);var a=Number.parseInt(e[5]);const d=r[a];let u;u=i<=h?{chr:t,startLeft:Math.min(i,c),startRight:Math.max(i,c),endLeft:Math.min(l,h),endRight:Math.max(l,h),color:d,score:a}:{chr:t,startLeft:Math.min(l,h),startRight:Math.max(l,h),endLeft:Math.min(i,c),endRight:Math.max(i,c),color:d,score:a},u.start=u.startLeft,u.end=u.endRight,s.length>a&&(u.description=s[a]),o.push(u)}}return o}(r),s),this.featureCache.queryFeatures(e,t,i)}}}class MF{constructor(e){this.browser=e,this.type="ideogram",this.id="ideogram",this.height=e.config.showCytobandNames?20:16,this.order=Number.MIN_SAFE_INTEGER,this.disableButtons=!0,this.ignoreTrackMenu=!0,this.showCytobandNames=e.config.showCytobandNames}computePixelHeight(e){return this.height}draw({context:e,referenceFrame:t,pixelWidth:i,pixelHeight:n,features:r}){const s=t.chr,o=t.genome.getChromosome(s);if(void 0===o||i<=0||n<=0||"all"===s.toLowerCase())return;!function({ctx:e,chr:t,referenceFrame:i,genome:n,width:r,height:s,stainColors:o,features:a,showCytobandNames:c}){const l=1,h=.5*l,d=0;if(void 0===n)return;fr.fillRect(e,0,0,r,s,{fillStyle:un.greyScale(255)});const u=a;if(u){const t=d+s/2,i=[],n=[];if(0===u.length)return;const a=r/u[u.length-1].end;e.beginPath(),fr.roundRect(e,h,h+d,r-2*h,s-2*h,(s-2*h)/2,0,1),e.clip();for(let r=0;r<u.length;r++){const h=u[r],f=a*h.start,p=a*h.end;if("c"===h.type)"p"===h.name.charAt(0)?(i[0]=f,n[0]=s+d,i[1]=f,n[1]=d,i[2]=p,n[2]=t):(i[0]=p,n[0]=s+d,i[1]=p,n[1]=d,i[2]=f,n[2]=t),e.fillStyle="rgb(150, 0, 0)",e.strokeStyle="rgb(150, 0, 0)",fr.polygon(e,i,n,1,0);else{const t=BF(o,h);e.fillStyle=t.color,fr.fillRect(e,f,l+d,p-f,s-2*l),c&&RF(e,h.name,f,p,d,s,t.shade)}}}e.strokeStyle=un.greyScale(41),fr.roundRect(e,h,h+d,r-2*h,s-2*h,(s-2*h)/2,0,1)}({ctx:e,features:r,chr:s,referenceFrame:t,genome:t.genome,width:i,height:n,stainColors:[],showCytobandNames:this.showCytobandNames});const a=Math.round(t.bpPerPixel*i),c=t.start;let l=o.bpLength;const h=t.genome.getCytobands(s);if(h&&h.length>0&&h[h.length-1].end&&(l=Math.max(l,h[h.length-1].end),o.bpLength=l),a<l){const t=a/l,r=c/l;let s=Math.floor(r*i),o=Math.floor(t*i);s=Math.max(0,s),s=Math.min(i-o,s),e.save(),e.strokeStyle="red",e.lineWidth=o<2?1:2;const h=s+e.lineWidth/2;o=o<2?1:o-e.lineWidth;const d=e.lineWidth/2,u=n-e.lineWidth;e.strokeRect(h,d,o,u),e.restore()}}dispose(){this.trackView=void 0}}function RF(e,t,i,n,r,s,o){const a=s-4,c=n-i;let l=a-4;do{e.font=`${l}px sans-serif`;if(e.measureText(t).width<=c)break;l-=1}while(l>4);e.save(),e.beginPath(),e.rect(i,2+r,c,a),e.clip();const h=i+c/2,d=2+r+a/2+1;let u;u=null!==o?.2126*o+.7152*o+.0722*o:39.764;const f=u<128?"white":"black";fr.fillText(e,t,h,d,{fillStyle:f,textAlign:"center",textBaseline:"middle",font:`${l}px sans-serif`}),e.restore()}function BF(e,t){if("c"===t.type)return{color:"rgb(150, 10, 10)",shade:null};{let n=t.stain,r=230;"p"===t.type&&(r=Math.floor(230-n/100*230));var i=e[r];return i||(i="rgb("+r+","+r+","+r+")",e[r]=i),{color:i,shade:r}}}let DF=new Kn("Dark2");["GT/AG","CT/AC","GC/AG","CT/GC","AT/AC","GT/AT","non-canonical"].forEach((e=>{DF.getColor(e)}));class TF extends Pa{static defaults={margin:10,colorByNumReadsThreshold:5,height:100};constructor(e,t){super(e,t)}init(e){super.init(e),this.type=e.type||"junctions",e._featureSource?(this.featureSource=e._featureSource,delete e._featureSource):this.featureSource=e.featureSource?e.featureSource:Hl(e,this.browser.genome)}async postInit(){if("function"!=typeof this.featureSource.getHeader||(this.header=await this.featureSource.getHeader(),!this.disposed))return this.header&&this.setTrackProperties(this.header),void 0===this.visibilityWindow&&"function"==typeof this.featureSource.defaultVisibilityWindow&&(this.visibilityWindow=await this.featureSource.defaultVisibilityWindow()),this._initialColor=this.color||this.constructor.defaultColor,this._initialAltColor=this.altColor||this.constructor.defaultColor,this}get supportsWholeGenome(){return!1}async getFeatures(e,t,i,n){const r=this.visibilityWindow;return this.featureSource.getFeatures({chr:e,start:t,end:i,bpPerPixel:n,visibilityWindow:r})}computePixelHeight(e){return this.height}draw(e){const t=e.features,i=e.context,n=e.bpPerPixel,r=e.bpStart,s=e.pixelWidth,o=e.pixelHeight,a=r+s*n+1;if(this.isMergedTrack||fr.fillRect(i,0,e.pixelTop,s,o,{fillStyle:"rgb(255, 255, 255)"}),t){const s={};s.referenceFrame=e.viewport.referenceFrame,s.referenceFrameStart=s.referenceFrame.start,s.referenceFrameEnd=s.referenceFrameStart+s.referenceFrame.toBP(e.viewport.getWidth()),s.featureZoomOutTracker={};for(let e of t)if(!(e.end<r)){if(e.start>a)break;this.renderJunction(e,r,n,o,i,s)}}else console.log("No feature list")}renderJunction(e,t,i,n,r,s){e.isVisible=!1;const o=Math.round((e.start-t)/i),a=Math.round((e.end-t)/i),c=(o+a)/2;if(a-o<=3){if(c in s.featureZoomOutTracker)return;s.featureZoomOutTracker[c]=!0}if(this.config.hideAnnotatedJunctions&&"true"===e.attributes.annotated_junction)return;if(this.config.hideUnannotatedJunctions&&"false"===e.attributes.annotated_junction)return;if(this.config.hideMotifs&&this.config.hideMotifs.includes(e.attributes.motif))return;if(this.config.hideStrand===e.strand)return;if(this.config.minJunctionEndsVisible){let t=0;if(e.start>=s.referenceFrameStart&&e.start<=s.referenceFrameEnd&&(t+=1),e.end>=s.referenceFrameStart&&e.end<=s.referenceFrameEnd&&(t+=1),t<this.config.minJunctionEndsVisible)return}let l,h,d,u;if(e.attributes.uniquely_mapped){if(l=parseInt(e.attributes.uniquely_mapped),l<this.config.minUniquelyMappedReads)return;if(h=parseInt(e.attributes.multi_mapped),d=l+h,d<this.config.minTotalReads)return;if(d>0&&h/d>this.config.maxFractionMultiMappedReads)return;if(e.attributes.maximum_spliced_alignment_overhang&&parseInt(e.attributes.maximum_spliced_alignment_overhang)<this.config.minSplicedAlignmentOverhang)return}if(e.attributes.num_samples_with_this_junction){if(u=parseInt(e.attributes.num_samples_with_this_junction),this.config.minSamplesWithThisJunction&&u<this.config.minSamplesWithThisJunction)return;if(this.config.maxSamplesWithThisJunction&&u>this.config.maxSamplesWithThisJunction)return;if(e.attributes.num_samples_total&&(e.attributes.percent_samples_with_this_junction=100*u/Number(e.attributes.num_samples_total),this.config.minPercentSamplesWithThisJunction&&(e.attributes.percent_samples_with_this_junction<this.config.minPercentSamplesWithThisJunction||e.attributes.percent_samples_with_this_junction>this.config.maxPercentSamplesWithThisJunction)))return}const f=this.margin,p=n,g=f+.5*p;let m=f;const w=f+p-10,b=(o+c)/2,F=(c+a)/2;let v,y,A=1;e.attributes.line_width?A=Number(e.attributes.line_width):(void 0===this.config.thicknessBasedOn||"numUniqueReads"===this.config.thicknessBasedOn?A=l:"numReads"===this.config.thicknessBasedOn?A=d:"numSamplesWithThisJunction"===this.config.thicknessBasedOn&&void 0!==u&&(A=u),A=1+Math.log(A+1)/Math.log(12)),void 0===this.config.bounceHeightBasedOn||"random"===this.config.bounceHeightBasedOn?v=(e.start+e.end)%7:"distance"===this.config.bounceHeightBasedOn?v=6*(e.end-e.start)/(s.referenceFrameEnd-s.referenceFrameStart):"thickness"===this.config.bounceHeightBasedOn&&(v=2*A),m+=p*Math.max(7-v,0)/10,y=e.attributes.color?e.attributes.color:void 0===this.config.colorBy||"numUniqueReads"===this.config.colorBy?l>this.config.colorByNumReadsThreshold?"blue":"#AAAAAA":"numReads"===this.config.colorBy?d>this.config.colorByNumReadsThreshold?"blue":"#AAAAAA":"isAnnotatedJunction"===this.config.colorBy?"true"===e.attributes.annotated_junction?"#b0b0ec":"orange":"strand"===this.config.colorBy?"+"===e.strand?"#b0b0ec":"#ecb0b0":"motif"===this.config.colorBy?DF.getColor(e.attributes.motif):"#AAAAAA";let C="";e.attributes.label?C=e.attributes.label.replace(/_/g," "):void 0===this.config.labelWith||"uniqueReadCount"===this.config.labelWith?C=l:"totalReadCount"===this.config.labelWith?C=d:"numSamplesWithThisJunction"===this.config.labelWith?void 0!==u&&(C=u):"percentSamplesWithThisJunction"===this.config.labelWith?void 0!==e.attributes.percent_samples_with_this_junction&&(C=e.attributes.percent_samples_with_this_junction.toFixed(0)+"%"):"motif"===this.config.labelWith&&void 0!==e.attributes.motif&&(C+=e.attributes.motif),"uniqueReadCount"===this.config.labelWithInParen?C+=" ("+l+")":"totalReadCount"===this.config.labelWithInParen?C+=" ("+d+")":"multiMappedReadCount"===this.config.labelWithInParen?h>0&&(C+=" (+"+h+")"):"numSamplesWithThisJunction"===this.config.labelWithInParen?void 0!==u&&(C+=" ("+u+")"):"percentSamplesWithThisJunction"===this.config.labelWithInParen?void 0!==e.attributes.percent_samples_with_this_junction&&(C+=" ("+e.attributes.percent_samples_with_this_junction.toFixed(0)+"%)"):"motif"===this.config.labelWithInParen&&void 0!==e.attributes.motif&&(C+=` ${e.attributes.motif}`),e.isVisible=!0,r.beginPath(),r.moveTo(o,w),r.bezierCurveTo(b,m,F,m,a,w),r.lineWidth=A,r.strokeStyle=y,r.stroke();const _=(e,t,i,n)=>{e.beginPath(),e.moveTo(t,i),e.lineTo(t-n/2,i-n),e.lineTo(t+n/2,i-n),e.lineTo(t,i),e.closePath(),e.fill()};if(e.attributes.left_shape||e.attributes.right_shape){r.fillStyle=y;const t=r.lineWidth>2?10:7;e.attributes.left_shape&&_(r,o,w,t),e.attributes.right_shape&&_(r,a,w,t)}r.fillText(C,c-r.measureText(C).width/2,(7*m+g)/8)}clickedFeatures(e){return super.clickedFeatures(e).filter((function(e){return e.isVisible&&e.attributes}))}popupData(e,t){void 0===t&&(t=this.clickedFeatures(e));const i=e.genomicLocation,n=[];for(let e of t){const t="function"==typeof e.popupData?e.popupData(i):this.extractPopupData(e._f||e,this.getGenomeId());t&&(n.length>0&&n.push("<hr/><hr/>"),Array.prototype.push.apply(n,t))}return n}dispose(){this.trackView=void 0}}const zF={min:0,max:3e3,color:"rgb(0,0,255)"};class LF{constructor(e){e=e||zF,this.max=e.max,this.min=e.min||0,this.cache=[],this.nbins=1e3,this.binsize=(this.max-this.min)/this.nbins,this.updateColor(e.color||"rgb(0,0,255)"),this.br=255,this.bg=255,this.bb=255}updateColor(e){const t=e.substring(4).replace(")","").split(",");3===t.length&&(this.r=Number.parseInt(t[0].trim()),this.g=Number.parseInt(t[1].trim()),this.b=Number.parseInt(t[2].trim())),this.cache=[]}setMinMax(e,t){this.min=e,this.max=t,this.cache=[],this.binsize=(this.max-this.min)/this.nbins}getColor(e){if(e<=this.min)return"white";if(e>=this.max)return`rgb(${this.r},${this.g},${this.b})`;const t=Math.floor((Math.min(this.max,e)-this.min)/this.binsize);if(void 0===this.cache[t]){const i=(e-this.min)/(this.max-this.min),n=1-i;this.cache[t]=`rgb(${Math.floor(i*this.r+n*this.br)},${Math.floor(i*this.g+n*this.bg)},${Math.floor(i*this.b+n*this.bb)})`}return this.cache[t]}toJson(){return{min:this.min,max:this.max,color:`rgb(${this.r},${this.g},${this.b})`}}static parse(e){const t=e.split(","),i={min:Number.parseFloat(t[0]),max:Number.parseFloat(t[1]),color:`${t[2]},${t[3]},${t[4]}`};return new LF(i)}}class HF extends Pa{static defaults={height:300,rowHeight:3,min:.5,max:3,scale:1,visibilityWindow:1e4,supportHiDPI:!1,startSize:4,stepSize:2};constructor(e,t){super(e,t)}init(e){super.init(e),this.type="shoebox",e.max&&(this.dataRange={min:e.min||0,max:e.max});const t=Object.assign({},this.config);t.format="shoebox",this.featureSource=Hl(t,this.browser.genome)}async postInit(){if("function"==typeof this.featureSource.getHeader&&(this.header=await this.featureSource.getHeader(),this.disposed))return;this.header&&(this.header.scale&&(this.header.scale=Number.parseFloat(this.header.scale)),this.setTrackProperties(this.header),this.rowCount=this.header.firstFeature?this.header.firstFeature.values.length:100);const e=this.dataRange.min,t=this.dataRange.max;this.colorScale=new LF({min:e,max:t,color:this.color}),this.scale||(this.scale=1),this._initialColor=this.color||this.constructor.defaultColor,this._initialAltColor=this.altColor||this.constructor.defaultColor}get color(){return this._color||"rgb(0,0,255)"}set color(e){this._color=e,this.colorScale&&this.colorScale.updateColor(e)}menuItemList(){const e=[];e.push("<hr/>");let t=document.createElement("div");t.textContent="Set row height";const i=this.browser;return e.push({element:t,dialog:function(e){const t={label:"Row Height",value:this.rowHeight,callback:()=>{const e=parseInt(this.browser.inputDialog.value,10);if(void 0!==e){i.sampleNameViewportWidth=void 0;const t=[];this.trackView.track.selected?t.push(...this.trackView.browser.getSelectedTrackViews().map((({track:e})=>e))):t.push(this);for(const i of t)i.rowHeight=e,i.rowHeight*i.rowCount<i.height&&i.trackView.setTrackHeight(i.rowHeight*i.rowCount,!0),i.trackView.checkContentHeight(),i.trackView.repaintViews()}}};this.browser.inputDialog.present(t,e)}}),e.push("<hr/>"),t=document.createElement("div"),t.textContent="Set data range",e.push({element:t,dialog:function(){this.trackView.track.selected?this.browser.dataRangeDialog.configure(this.trackView.browser.getSelectedTrackViews()):this.browser.dataRangeDialog.configure(this.trackView),this.browser.dataRangeDialog.present(this.browser.columnContainer)}}),e}setDataRange({min:e,max:t}){this.dataRange.min=e,this.dataRange.max=t,this.colorScale.setMinMax(e,t),this.trackView.repaintViews()}async getFeatures(e,t,i,n){const r=this.visibilityWindow;return await this.featureSource.getFeatures({chr:e,start:t,end:i,bpPerPixel:n,visibilityWindow:r})}draw({context:e,pixelTop:t,pixelWidth:i,pixelHeight:n,features:r,bpPerPixel:s,bpStart:o}){if(fr.fillRect(e,0,t,i,n,{fillStyle:"rgb(255, 255, 255)"}),r&&r.length>0){const a=this.rowHeight,c=t+n,l=o+i*s+1,h=a;for(let i of r){if(i.end<o||i.start>l)continue;const n=Math.floor((i.start-o)/s),r=Math.floor((i.end-o)/s),d=Math.max(1,r-n);for(let r=i.values.length-1;r>=0;r--){const s=i.values[r];if(s>=this.dataRange.min){const o=(i.values.length-1-r)*a;if(o+a<t||o>c)continue;const l=this.colorScale.getColor(s);e.fillStyle=l,e.fillRect(n,o,d,h)}}}}}paintAxis(e,t,i){var n={font:"normal 10px Arial",textAlign:"right",strokeStyle:"black"};const r=this.startSize+this.rowCount*this.stepSize,s=this.startSize,o=(r-s)/i;for(let t=50;t<=r;t+=50){const r=Math.max(10,i-Math.round((t-s)/o));fr.strokeLine(e,35,r,40,r,n),t>s&&fr.fillText(e,PF(t),30,r+4,n)}n.textAlign="center",n.font="normal 10px Arial",fr.fillText(e,"Footprint size (bp)",10,i/2,n,{rotate:{angle:-90}})}computePixelHeight(e){return e&&0!==e.length?e[0].values.length*this.rowHeight:0}clickedFeatures(e){const t=super.clickedFeatures(e),i=e.y;return t.filter((function(e){const t=e.pixelRect;return t&&i>=t.y&&i<=t.y+t.h}))}hoverText(e){const t=this.clickedFeatures(e);if(t&&t.length>0)return`${t[0].sample}: ${t[0].value}`}popupData(e,t){void 0===t&&(t=this.clickedFeatures(e));const i=[];for(let e of t){i.length>0&&(i.push("<hr/>"),i.push("<hr/>"));const t=e._f||e,n="function"==typeof t.popupData?t.popupData(this.type,this.browser.genome.id):this.extractPopupData(t);Array.prototype.push.apply(i,n)}return i}get supportsWholeGenome(){return!1}getState(){const e=super.getState();return e.colorScale=this.colorScale.toJson(),e}}function PF(e){return Number.isInteger(e)||e%1==0?e:Math.abs(e)>=10?e.toFixed():Math.abs(e)>=1?e.toFixed(1):Math.abs(e)>=.1?e.toFixed(2):e.toExponential(1)}const OF=new Map([["ideogram",(e,t)=>new MF(e,t)],["sequence",(e,t)=>new fh(e,t)],["feature",(e,t)=>new eh(e,t)],["seg",(e,t)=>new Zd(e,t)],["mut",(e,t)=>new Zd(e,t)],["maf",(e,t)=>new Zd(e,t)],["shoebox",(e,t)=>new HF(e,t)],["wig",(e,t)=>new xl(e,t)],["merged",(e,t)=>new bd(e,t)],["alignment",(e,t)=>new dp(e,t)],["interaction",(e,t)=>new fp(e,t)],["interact",(e,t)=>new fp(e,t)],["variant",(e,t)=>new wF(e,t)],["qtl",(e,t)=>new AF(e,t)],["eqtl",(e,t)=>new AF(e,t)],["gwas",(e,t)=>new xF(e,t)],["arc",(e,t)=>new SF(e,t)],["gcnv",(e,t)=>new kF(e,t)],["junction",(e,t)=>new TF(e,t)],["blat",(e,t)=>new sh(e,t)],["cnvpytor",(e,t)=>new pF(e,t)]]);class VF{constructor(e,t){const i=(new DOMParser).parseFromString(e,"text/xml");this.processRootNode(i,t);const n=i.getElementsByTagName("Resource"),r=i.getElementsByTagName("Track"),s=r&&r.length>0,o=[];this.tracks=o;const a=new Map;Array.from(n).forEach((function(e,t){var i={url:e.getAttribute("path"),indexURL:e.getAttribute("index"),order:t};a.set(i.url,i),s||o.push(i)})),s&&Array.from(r).forEach((function(e){const t=e.getElementsByTagName("Track");if(t&&t.length>0){const i={type:"merged",tracks:[]};qF(e,i),o.push(i),Array.from(t).forEach((function(e){e.processed=!0;const t=e.getAttribute("id"),n=a.get(t);n&&(i.tracks.push(n),qF(e,n),n.autoscale=!1,i.height=n.height)}))}else if(!e.processed){const t=e.getAttribute("id"),i=a.get(t);i&&(o.push(i),qF(e,i))}}))}processRootNode(e,t){const i=e.getElementsByTagName("Session");!i||i.length;const n=i.item(0),r=n.getAttribute("genome"),s=n.getAttribute("locus"),o=n.getAttribute("ucscID");t&&t.hasOwnProperty(r)?this.genome=r:(this.reference={fastaURL:r},o&&(this.reference.id=o)),s&&(this.locus=s)}}function qF(e,t){t.name=e.getAttribute("name");const i=e.getAttribute("color");i&&(t.color="rgb("+i+")");const n=e.getAttribute("altColor");i&&(t.altColor="rgb("+n+")");const r=e.getAttribute("height");r&&(t.height=parseInt(r));const s=e.getAttribute("autoScale");s&&(t.autoscale="true"===s);const o=e.getAttribute("autoscaleGroup");o&&(t.autoscaleGroup=o);const a=e.getAttribute("windowFunction");a&&(t.windowFunction=a);const c=e.getAttribute("visibilityWindow")||e.getAttribute("featureVisibilityWindow");c&&(t.visibilityWindow=c);const l=e.getAttribute("indexed");l&&(t.indexed="true"===l);const h=e.getAttribute("normalize");h&&(t.normalize="true"===h);const d=e.getElementsByTagName("DataRange");if(d.length>0){const e=d.item(0);t.min=Number(e.getAttribute("minimum")),t.max=Number(e.getAttribute("maximum")),t.logScale="LOG"===e.getAttribute("type")}}class QF{constructor(e,t,i,n,r){this.genome=e,this.chr=t,this.start=i,this.end=n,this.bpPerPixel=r,this.id=o()}get center(){return(this.start+this.end)/2}get locusSearchString(){return`${this.chr}:${this.start+1}-${this.end}`}extend(e){const t=Math.min(e.start,this.start),i=Math.max(e.end,this.end),n=(i-t)/(this.end-this.start);this.start=t,this.end=i,this.bpPerPixel*=n}calculateEnd(e){return this.start+this.bpPerPixel*e}calculateCenter(e){return this.start+this.bpPerPixel*e/2}calculateBPP(e,t){return(e-this.start)/t}set(e){this.chr=e.chr,this.start=e.start,this.bpPerPixel=e.bpPerPixel}toPixels(e){return e/this.bpPerPixel}toBP(e){return this.bpPerPixel*e}shift(e){this.start+=e,this.end+=e}shiftPixels(e,t,i){const n=this.start,r=e*this.bpPerPixel;return this.start+=r,i&&this.clampStart(t),this.end=this.start+t*this.bpPerPixel,n!==this.start}clampStart(e){const t=this.genome.getChromosome(this.chr).bpStart||0;if(this.start=Math.max(t,this.start),e){const{bpLength:t}=this.genome.getChromosome(this.chr),i=t-e*this.bpPerPixel;this.start>i&&(this.start=i)}}async zoomWithScaleFactor(e,t,i,n){const r=void 0===n?this.start+this.toBP(i/2):n,s=this.start,o=this.bpPerPixel,a=this.getChromosome().bpLength,c=t<1?e.minimumBases()/i:a/i;this.bpPerPixel=t<1?Math.max(this.bpPerPixel*t,c):Math.min(this.bpPerPixel*t,c);const l=this.bpPerPixel*i;this.start=r-.5*l,this.clampStart(i),this.end=this.start+l;(s!==this.start||o!==this.bpPerPixel)&&await e.updateViews(!0)}getChromosome(){return this.genome.getChromosome(this.chr)}getMultiLocusLabelBPLengthOnly(e){const t=" ",i=Math.floor(this.start)+1,n=Math.round(this.start+this.bpPerPixel*e);return`${t}${this.chr}${t}${Ys(n-i)}${t}`}getMultiLocusLabelLocusOnly(e){const t=" ",{chr:i,start:n,end:r}=this.getPresentationLocusComponents(e);return`${t}${i}:${n}-${r}${t}`}getMultiLocusLabel(e){const t=" ",{chr:i,start:n,end:r}=this.getPresentationLocusComponents(e),s=Math.floor(this.start)+1;return`${t}${i}:${n}-${r}${t}${t}(${Ys(Math.round(this.start+this.bpPerPixel*e)-s)})${t}`}getPresentationLocusComponents(e){if("all"===this.chr)return{chr:this.chr};{const t=F(Math.floor(this.start)+1),i=F(Math.round(this.start+this.bpPerPixel*e));return{chr:this.chr,start:t,end:i}}}getLocusString(){if("all"===this.chr)return"all";return`${this.genome.getChromosomeDisplayName(this.chr)}:${F(Math.floor(this.start)+1)}-${F(Math.round(this.end))}`}description(e){console.log(` ${e||""} referenceFrame - ${this.chr} bpp ${this.bpPerPixel.toFixed(3)} start ${F(Math.round(this.start))} end ${F(Math.round(this.end))} `)}overlaps(e){return this.chr===e.chr&&this.end>=e.start&&e.end>=this.start}}function UF(){return"3.2.0"}const jF="Maximum sequence count exceeded";class GF{constructor(e,i){this.container=t({class:"igv-chromosome-select-widget-container"}),i.appendChild(this.container),this.select=document.createElement("select"),this.select.setAttribute("name","chromosome-select-widget"),this.container.appendChild(this.select),this.select.addEventListener("change",(()=>{this.select.blur(),""!==this.select.value&&jF!==this.select.value&&e.search(this.select.value)})),this.showAllChromosomes=!1!==e.config.showAllChromosomes,this.genome=e.genome}show(){this.container.style.display="flex"}hide(){this.container.style.display="none"}setValue(e){this.select.value=this.genome.getChromosomeDisplayName(e)}update(e){this.genome=e;const t=e.wgChromosomeNames.map((t=>e.getChromosomeDisplayName(t)))||[];if(this.showAllChromosomes&&e.chromosomeNames.length>1){const i=new Set(t);let n=0;for(let r of e.chromosomeNames){if(1e3==++n){t.push(jF);break}i.has(r)||(r=e.getChromosomeDisplayName(r),t.push(r))}}this.select.innerHTML="",e.showWholeGenomeView()&&t.unshift("all");for(let i of t){const t=document.createElement("option");t.setAttribute("value",i),t.innerText=e.getChromosomeDisplayName(i),this.select.appendChild(t)}}}class WF{constructor(e,i){this.container=t({class:"igv-windowsize-panel-container"}),e.appendChild(this.container),i.on("locuschange",(e=>{this.updatePanel(e)})),this.browser=i}show(){this.container.style.display="block"}hide(){this.container.style.display="none"}updatePanel(e){const t=this.browser.calculateViewportWidth(this.browser.referenceFrameList.length);this.container.innerText=1===e.length?Ys(Math.round(t*e[0].bpPerPixel)):""}}class $F extends md{constructor(e,t,i,n){super(e,t,"Select Tracks",wd,'<svg width="625px" height="625px" viewBox="0 0 625 625" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">\n <title>multi select</title>\n <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">\n <g id="multi-select">\n <rect id="backdrop-copy-3" stroke="#737373" stroke-width="12" fill="#FFFFFF" x="6" y="6" width="613" height="613" rx="135"></rect>\n <g id="row-copy-3" transform="translate(81, 427)" fill="#737373">\n <rect id="Rectangle" x="134" y="0" width="329" height="70"></rect>\n <rect id="Rectangle-Copy-16" stroke="#737373" stroke-width="12" x="6" y="6" width="58" height="58"></rect>\n </g>\n <g id="row-copy-2" transform="translate(82, 277)">\n <rect id="Rectangle" fill-opacity="0.33" fill="#CFCECE" x="133" y="0" width="329" height="70"></rect>\n <rect id="Rectangle-Copy-16" stroke-opacity="0.32659528" stroke="#CFCECE" stroke-width="12" x="6" y="6" width="58" height="58"></rect>\n </g>\n <g id="row-copy" transform="translate(81, 119)" fill="#737373">\n <rect id="Rectangle" x="134" y="0" width="329" height="70"></rect>\n <rect id="Rectangle-Copy-17" stroke="#737373" stroke-width="12" x="6" y="6" width="58" height="58"></rect>\n </g>\n </g>\n </g>\n</svg>','<svg width="625px" height="625px" viewBox="0 0 625 625" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">\n <title>multi select hover</title>\n <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">\n <g id="multi-select-hover">\n <rect id="backdrop-copy-4" stroke="#737373" stroke-width="12" fill="#737373" x="6" y="6" width="613" height="613" rx="135"></rect>\n <g id="row-copy-3" transform="translate(81, 427)" fill="#FFFFFF">\n <rect id="Rectangle" x="134" y="0" width="329" height="70"></rect>\n <rect id="Rectangle-Copy-16" stroke="#FFFFFF" stroke-width="12" x="6" y="6" width="58" height="58"></rect>\n </g>\n <g id="row-copy-2" transform="translate(82, 277)">\n <rect id="Rectangle" fill-opacity="0.33" fill="#CFCECE" x="133" y="0" width="329" height="70"></rect>\n <rect id="Rectangle-Copy-16" stroke-opacity="0.33" stroke="#CFCECE" stroke-width="12" x="6" y="6" width="58" height="58"></rect>\n </g>\n <g id="row-copy" transform="translate(81, 119)" fill="#FFFFFF">\n <rect id="Rectangle" x="134" y="0" width="329" height="70"></rect>\n <rect id="Rectangle-Copy-17" stroke="#FFFFFF" stroke-width="12" x="6" y="6" width="58" height="58"></rect>\n </g>\n </g>\n </g>\n</svg>',!1),this.navbar=i,this.enableMultiTrackSelection=!1,this.button.addEventListener("mouseenter",(e=>{!1===n&&this.setState(!0)})),this.button.addEventListener("mouseleave",(e=>{!1===n&&this.setState(!1)}));this.boundMouseClickHandler=(()=>{this.setMultiTrackSelection(!this.enableMultiTrackSelection)}).bind(this),this.button.addEventListener("click",this.boundMouseClickHandler)}setMultiTrackSelection(e){this.enableMultiTrackSelection=e,this.setState(this.enableMultiTrackSelection),!1===this.enableMultiTrackSelection&&this.navbar.overlayTrackButton.setVisibility(!1);for(const t of this.browser.trackViews)t.enableTrackSelection(e)}}class KF extends md{constructor(e,t){super(e,t,"Crosshairs",wd,'<svg width="625px" height="625px" viewBox="0 0 625 625" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">\n <title>cursor</title>\n <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">\n <g id="cursor" stroke="#737373">\n <rect id="Rectangle-Copy-3" stroke-width="12" fill="#FFFFFF" x="6" y="6" width="613" height="613" rx="135"></rect>\n <g id="Group" transform="translate(5, 9)" stroke-width="24">\n <line x1="0.5" y1="212.5" x2="614.5" y2="212.5" id="Line"></line>\n <line x1="-115.5" y1="303.5" x2="490.5" y2="303.5" id="Line-Copy" transform="translate(187.5, 303.5) scale(-1, 1) rotate(90) translate(-187.5, -303.5)"></line>\n </g>\n <circle id="Oval" stroke-width="24" cx="191.5" cy="221.5" r="88.5"></circle>\n </g>\n </g>\n</svg>','<svg width="625px" height="625px" viewBox="0 0 625 625" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">\n <title>cursor hover</title>\n <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">\n <g id="cursor-hover">\n <rect id="Rectangle-Copy-5" stroke="#737373" stroke-width="12" fill="#737373" x="6" y="6" width="613" height="613" rx="135"></rect>\n <g id="Group-Copy-2" transform="translate(5, 9)" stroke="#FFFFFF" stroke-width="24">\n <line x1="0.5" y1="212.5" x2="614.5" y2="212.5" id="Line"></line>\n <line x1="-115.5" y1="303.5" x2="490.5" y2="303.5" id="Line-Copy" transform="translate(187.5, 303.5) scale(-1, 1) rotate(90) translate(-187.5, -303.5)"></line>\n </g>\n <circle id="Oval" stroke="#FFFFFF" stroke-width="24" cx="191.5" cy="221.5" r="88.5"></circle>\n </g>\n </g>\n</svg>',t.doShowCursorGuide),this.button.addEventListener("mouseenter",(()=>{!1===t.doShowCursorGuide&&this.setState(!0)})),this.button.addEventListener("mouseleave",(()=>{!1===t.doShowCursorGuide&&this.setState(!1)}));this.boundMouseClickHandler=(()=>{t.doShowCursorGuide=!t.doShowCursorGuide,t.setCursorGuideVisibility(t.doShowCursorGuide),this.setState(t.doShowCursorGuide)}).bind(this),this.button.addEventListener("click",this.boundMouseClickHandler),this.setVisibility(t.config.showCursorTrackingGuideButton)}}class YF extends md{constructor(e,t){super(e,t,"Center Line",wd,'<svg width="625px" height="625px" viewBox="0 0 625 625" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">\n <title>centerline</title>\n <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">\n <g id="centerline" stroke="#737373">\n <rect id="Rectangle-Copy-2" stroke-width="12" fill="#FFFFFF" x="6" y="6" width="613" height="613" rx="135"></rect>\n <line x1="6.5" y1="312.5" x2="618.5" y2="312.5" id="Line-Copy" stroke-width="31" transform="translate(312.5, 312.5) scale(-1, 1) rotate(90) translate(-312.5, -312.5)"></line>\n </g>\n </g>\n</svg>','<svg width="625px" height="625px" viewBox="0 0 625 625" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">\n <title>centerline hover</title>\n <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">\n <g id="centerline-hover">\n <rect id="Rectangle-Copy-9" stroke="#737373" stroke-width="12" fill="#737373" x="6" y="6" width="613" height="613" rx="135"></rect>\n <line x1="6.5" y1="312.5" x2="618.5" y2="312.5" id="Line-Copy" stroke="#FFFFFF" stroke-width="31" transform="translate(312.5, 312.5) scale(-1, 1) rotate(90) translate(-312.5, -312.5)"></line>\n </g>\n </g>\n</svg>',t.config.showCenterGuide),this.button.addEventListener("mouseenter",(()=>{!1===t.doShowCenterLine&&this.setState(!0)})),this.button.addEventListener("mouseleave",(()=>{!1===t.doShowCenterLine&&this.setState(!1)}));this.boundMouseClickHandler=(()=>{t.doShowCenterLine=!t.doShowCenterLine,t.setCenterLineVisibility(t.doShowCenterLine),this.setState(t.doShowCenterLine)}).bind(this),this.button.addEventListener("click",this.boundMouseClickHandler),this.setVisibility(t.config.showCenterGuideButton)}}class XF extends md{constructor(e,t){super(e,t,"Track Labels",wd,'<svg width="625px" height="625px" viewBox="0 0 625 625" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">\n <title>track labels</title>\n <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">\n <g id="track-labels" fill="#FFFFFF" stroke="#737373">\n <rect id="Rectangle-Copy-27" stroke-width="12" x="6" y="6" width="613" height="613" rx="135"></rect>\n <g id="group" transform="translate(52.2778, 149.7248)" stroke-width="24">\n <path d="M448.444444,87.1189616 L448.444444,322.431462 L166.619398,322.431462 L19.2344421,204.775212 L166.619398,87.1189616 L448.444444,87.1189616 Z M244.028212,163.997434 C232.925565,163.997434 222.874656,168.493347 215.598982,175.760254 C208.318067,183.032394 203.815972,193.079106 203.815972,204.175675 C203.815972,215.272243 208.318067,225.318955 215.598982,232.591095 C222.874656,239.858002 232.925565,244.353915 244.028212,244.353915 C255.130858,244.353915 265.181767,239.858002 272.457442,232.591095 C279.738356,225.318955 284.240451,215.272243 284.240451,204.175675 C284.240451,193.079106 279.738356,183.032394 272.457442,175.760254 C265.181767,168.493347 255.130858,163.997434 244.028212,163.997434 Z" id="backdrop"></path>\n <path d="M495.232604,12 L495.232604,264.550423 L193.616935,264.550423 L35.4455183,138.275212 L193.616935,12 L495.232604,12 Z M168.133512,95.1660194 C156.441871,95.1660194 145.858581,99.8943121 138.197214,107.534302 C130.523695,115.18641 125.780417,125.758499 125.780417,137.434423 C125.780417,149.110347 130.523695,159.682435 138.197214,167.334543 C145.858581,174.974533 156.441871,179.702826 168.133512,179.702826 C179.825153,179.702826 190.408443,174.974533 198.06981,167.334543 C205.743329,159.682435 210.486607,149.110347 210.486607,137.434423 C210.486607,125.758499 205.743329,115.18641 198.06981,107.534302 C190.408443,99.8943121 179.825153,95.1660194 168.133512,95.1660194 Z" id="hero"></path>\n </g>\n </g>\n </g>\n</svg>','<svg width="625px" height="625px" viewBox="0 0 625 625" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">\n <title>track labels hover</title>\n <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">\n <g id="track-labels-hover" stroke="#737373">\n <rect id="Rectangle-Copy-29" stroke-width="12" fill="#737373" x="6" y="6" width="613" height="613" rx="135"></rect>\n <g id="group" transform="translate(52.2778, 149.7248)" fill="#FFFFFF" stroke-width="24">\n <path d="M448.444444,85.1189616 L448.444444,320.431462 L166.619398,320.431462 L19.2344421,202.775212 L166.619398,85.1189616 L448.444444,85.1189616 Z M244.028212,161.997434 C232.925565,161.997434 222.874656,166.493347 215.598982,173.760254 C208.318067,181.032394 203.815972,191.079106 203.815972,202.175675 C203.815972,213.272243 208.318067,223.318955 215.598982,230.591095 C222.874656,237.858002 232.925565,242.353915 244.028212,242.353915 C255.130858,242.353915 265.181767,237.858002 272.457442,230.591095 C279.738356,223.318955 284.240451,213.272243 284.240451,202.175675 C284.240451,191.079106 279.738356,181.032394 272.457442,173.760254 C265.181767,166.493347 255.130858,161.997434 244.028212,161.997434 Z" id="backdrop"></path>\n <path d="M495.232604,12 L495.232604,264.550423 L193.616935,264.550423 L35.4455183,138.275212 L193.616935,12 L495.232604,12 Z M168.133512,95.1660194 C156.441871,95.1660194 145.858581,99.8943121 138.197214,107.534302 C130.523695,115.18641 125.780417,125.758499 125.780417,137.434423 C125.780417,149.110347 130.523695,159.682435 138.197214,167.334543 C145.858581,174.974533 156.441871,179.702826 168.133512,179.702826 C179.825153,179.702826 190.408443,174.974533 198.06981,167.334543 C205.743329,159.682435 210.486607,149.110347 210.486607,137.434423 C210.486607,125.758499 205.743329,115.18641 198.06981,107.534302 C190.408443,99.8943121 179.825153,95.1660194 168.133512,95.1660194 Z" id="hero"></path>\n </g>\n </g>\n </g>\n</svg>',t.config.showTrackLabels),this.button.addEventListener("mouseenter",(()=>{!1===t.doShowTrackLabels&&this.setState(!0)})),this.button.addEventListener("mouseleave",(()=>{!1===t.doShowTrackLabels&&this.setState(!1)}));this.boundMouseClickHandler=(()=>{t.doShowTrackLabels=!t.doShowTrackLabels,t.setTrackLabelVisibility(t.doShowTrackLabels),this.setState(t.doShowTrackLabels)}).bind(this),this.button.addEventListener("click",this.boundMouseClickHandler),this.setVisibility(t.config.showTrackLabelButton)}}class ZF extends md{constructor(e,t){super(e,t,["ROI","Regions of Interest Table"],wd,'<svg width="625px" height="625px" viewBox="0 0 625 625" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">\n <title>roi</title>\n <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">\n <g id="roi">\n <rect id="Rectangle-Copy-23" stroke="#737373" stroke-width="12" fill="#FFFFFF" x="6" y="6" width="613" height="613" rx="135"></rect>\n <text id="ROI" font-family="HelveticaNeue-Bold, Helvetica Neue" font-size="258" font-weight="bold" fill="#737373">\n <tspan x="81.445" y="389">ROI</tspan>\n </text>\n </g>\n </g>\n</svg>','<svg width="625px" height="625px" viewBox="0 0 625 625" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">\n <title>roi hover</title>\n <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">\n <g id="roi-hover">\n <rect id="Rectangle-Copy-24" stroke="#737373" stroke-width="12" fill="#737373" x="6" y="6" width="613" height="613" rx="135"></rect>\n <text id="ROI" font-family="HelveticaNeue-Bold, Helvetica Neue" font-size="258" font-weight="bold" fill="#FFFFFF">\n <tspan x="81.445" y="389">ROI</tspan>\n </text>\n </g>\n </g>\n</svg>',!1),this.button.addEventListener("mouseenter",(()=>{!1===t.doShowROITable&&this.setState(!0)})),this.button.addEventListener("mouseleave",(()=>{!1===t.doShowROITable&&this.setState(!1)})),this.button.addEventListener("click",(()=>this.buttonHandler(!t.doShowROITable))),this.setVisibility(!1)}buttonHandler(e){this.setState(e),this.browser.setROITableVisibility(e)}}class JF extends md{constructor(e,t){super(e,t,"Sample Info",wd,'<svg width="625px" height="625px" viewBox="0 0 625 625" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">\n <title>sample info</title>\n <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">\n <g id="sample-info">\n <rect id="Rectangle-Copy-6" stroke="#737373" stroke-width="12" fill="#FFFFFF" x="6" y="6" width="613" height="613" rx="135"></rect>\n <g id="Group-2" transform="translate(8, 149)">\n <rect id="Rectangle" fill="#8DD3C7" x="0" y="0" width="102" height="102"></rect>\n <rect id="Rectangle-Copy" fill="#FBB4AE" x="102" y="0" width="102" height="102"></rect>\n <rect id="Rectangle-Copy-8" fill="#7FC97F" x="204" y="0" width="102" height="102"></rect>\n <rect id="Rectangle-Copy-7" fill="#ADE2CF" x="306" y="0" width="102" height="102"></rect>\n <rect id="Rectangle-Copy-7" fill="#E41A1C" x="408" y="0" width="102" height="102"></rect>\n <rect id="Rectangle-Copy-7" fill="#3F70AE" x="510" y="0" width="102" height="102"></rect>\n </g>\n <g id="Group-2-Copy" transform="translate(8, 251)">\n <rect id="Rectangle" fill="#E41A1C" x="0" y="0" width="102" height="102"></rect>\n <rect id="Rectangle-Copy" fill="#377EB8" x="102" y="0" width="102" height="102"></rect>\n <rect id="Rectangle-Copy-8" fill="#FDB46B" x="204" y="0" width="102" height="102"></rect>\n <rect id="Rectangle-Copy-7" fill="#BC80BD" x="306" y="0" width="102" height="102"></rect>\n <rect id="Rectangle-Copy-7" fill="#FFFFB3" x="408" y="0" width="102" height="102"></rect>\n <rect id="Rectangle-Copy-7" fill="#ADE2CF" x="510" y="0" width="102" height="102"></rect>\n </g>\n <g id="Group-2-Copy-2" transform="translate(314, 404) scale(-1, 1) translate(-314, -404)translate(8, 353)">\n <rect id="Rectangle" fill="#1B9E77" x="0" y="0" width="102" height="102"></rect>\n <rect id="Rectangle-Copy" fill="#377EB8" x="102" y="0" width="102" height="102"></rect>\n <rect id="Rectangle-Copy-8" fill="#FDB46B" x="204" y="0" width="102" height="102"></rect>\n <rect id="Rectangle-Copy-7" fill="#BAD1E9" x="306" y="0" width="102" height="102"></rect>\n <rect id="Rectangle-Copy-7" fill="#4DAF4A" x="408" y="0" width="102" height="102"></rect>\n <rect id="Rectangle-Copy-7" fill="#CBF03E" x="510" y="0" width="102" height="102"></rect>\n </g>\n <rect id="Rectangle-Copy-10" stroke="#737373" stroke-width="12" x="6" y="6" width="613" height="613" rx="135"></rect>\n </g>\n </g>\n</svg>','<svg width="625px" height="625px" viewBox="0 0 625 625" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">\n <title>sample info hover</title>\n <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">\n <g id="sample-info-hover">\n <rect id="Rectangle-Copy-14" stroke="#737373" stroke-width="12" fill="#737373" x="6" y="6" width="613" height="613" rx="135"></rect>\n <g id="row-2" transform="translate(314, 404) scale(-1, 1) translate(-314, -404)translate(8, 353)">\n <rect id="Rectangle" fill="#1B9E77" x="0" y="0" width="102" height="102"></rect>\n <rect id="Rectangle-Copy" fill="#377EB8" x="102" y="0" width="102" height="102"></rect>\n <rect id="Rectangle-Copy-8" fill="#FDB46B" x="204" y="0" width="102" height="102"></rect>\n <rect id="Rectangle-Copy-7" fill="#BAD1E9" x="306" y="0" width="102" height="102"></rect>\n <rect id="Rectangle-Copy-7" fill="#4DAF4A" x="408" y="0" width="102" height="102"></rect>\n <rect id="Rectangle-Copy-7" fill="#CBF03E" x="510" y="0" width="102" height="102"></rect>\n </g>\n <g id="row-1" transform="translate(8, 251)">\n <rect id="Rectangle" fill="#E41A1C" x="0" y="0" width="102" height="102"></rect>\n <rect id="Rectangle-Copy" fill="#377EB8" x="102" y="0" width="102" height="102"></rect>\n <rect id="Rectangle-Copy-8" fill="#FDB46B" x="204" y="0" width="102" height="102"></rect>\n <rect id="Rectangle-Copy-7" fill="#BC80BD" x="306" y="0" width="102" height="102"></rect>\n <rect id="Rectangle-Copy-7" fill="#FFFFB3" x="408" y="0" width="102" height="102"></rect>\n <rect id="Rectangle-Copy-7" fill="#ADE2CF" x="510" y="0" width="102" height="102"></rect>\n </g>\n <g id="row-0" transform="translate(8, 149)">\n <rect id="Rectangle" fill="#8DD3C7" x="0" y="0" width="102" height="102"></rect>\n <rect id="Rectangle-Copy" fill="#FBB4AE" x="102" y="0" width="102" height="102"></rect>\n <rect id="Rectangle-Copy-8" fill="#7FC97F" x="204" y="0" width="102" height="102"></rect>\n <rect id="Rectangle-Copy-7" fill="#ADE2CF" x="306" y="0" width="102" height="102"></rect>\n <rect id="Rectangle-Copy-7" fill="#E41A1C" x="408" y="0" width="102" height="102"></rect>\n <rect id="Rectangle-Copy-7" fill="#3F70AE" x="510" y="0" width="102" height="102"></rect>\n </g>\n <rect id="Rectangle-Copy-15" stroke="#737373" stroke-width="12" x="6" y="6" width="613" height="613" rx="135"></rect>\n <rect id="scrim" fill="#000000" style="mix-blend-mode: hue;" x="8" y="149" width="612" height="306"></rect>\n </g>\n </g>\n</svg>',!1),this.showSampleInfo=!1,this.button.addEventListener("mouseenter",(()=>{!1===this.showSampleInfo&&this.setState(!0)})),this.button.addEventListener("mouseleave",(()=>{!1===this.showSampleInfo&&this.setState(!1)})),this.button.addEventListener("click",(()=>{this.performClickWithState(t,void 0)}))}performClickWithState(e,t){this.showSampleInfo=void 0===t?!this.showSampleInfo:t;e.columnContainer.querySelector(".igv-sample-info-column").style.display=!1===this.showSampleInfo?"none":"flex",this.setState(this.showSampleInfo),e.layoutChange()}setButtonVisibility(e){this.showSampleInfo=e,this.setState(this.showSampleInfo),!0===this.showSampleInfo?this.show():this.hide()}}class ev extends md{constructor(e,t){super(e,t,"Sample Names",'<svg width="90px" height="20px" viewBox="0 0 90 20" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">\n <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">\n <g id="igv-navbar-button-group">\n <rect id="Rectangle" x="0.5" y="0.5" width="89" height="18" rx="6"></rect>\n <text id="igv-text-button-label" x="50%" y="50%" dy=".1em" font-family="Helvetica" font-size="12" font-weight="normal" letter-spacing="-0.372">\n <tspan id="igv-navbar-button-label"></tspan>\n </text>\n </g>\n </g>\n</svg>','<svg width="625px" height="625px" viewBox="0 0 625 625" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">\n <title>sample names</title>\n <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">\n <g id="sample-names" stroke="#737373">\n <rect id="Rectangle-Copy-13" stroke-width="12" fill="#FFFFFF" x="6" y="6" width="613" height="613" rx="135"></rect>\n <line x1="80" y1="465" x2="541" y2="464.5" id="Line-3-Copy-3" stroke-width="32"></line>\n <line x1="80" y1="312.5" x2="542" y2="313" id="Line-3" stroke-width="32"></line>\n <line x1="80" y1="158" x2="541" y2="158" id="Line-3-Copy" stroke-width="32"></line>\n </g>\n </g>\n</svg>','<svg width="625px" height="625px" viewBox="0 0 625 625" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">\n <title>sample names hover</title>\n <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">\n <g id="sample-names-hover">\n <rect id="Rectangle-Copy-18" stroke="#737373" stroke-width="12" fill="#737373" x="6" y="6" width="613" height="613" rx="135"></rect>\n <line x1="80" y1="465" x2="541" y2="464.5" id="Line-3-Copy-3" stroke="#FFFFFF" stroke-width="32" fill="#FFFFFF"></line>\n <line x1="80" y1="312.5" x2="542" y2="313" id="Line-3" stroke="#FFFFFF" stroke-width="32" fill="#FFFFFF"></line>\n <line x1="80" y1="158" x2="541" y2="158" id="Line-3-Copy" stroke="#FFFFFF" stroke-width="32" fill="#FFFFFF"></line>\n </g>\n </g>\n</svg>',t.config.showSampleNames),this.button.addEventListener("mouseenter",(()=>{!1===t.showSampleNames&&this.setState(!0)})),this.button.addEventListener("mouseleave",(()=>{!1===t.showSampleNames&&this.setState(!1)})),this.button.addEventListener("click",(()=>{this.performClickWithState(t,void 0)})),!0===t.config.showSampleNameButton?this.show():this.hide()}performClickWithState(e,t){e.showSampleNames=void 0===t?!e.showSampleNames:t;e.columnContainer.querySelector(".igv-sample-name-column").style.display=!1===e.showSampleNames?"none":"flex",this.setState(e.showSampleNames),e.layoutChange()}}class tv{constructor(e,i){this.parent=e,this.popover=t({class:"igv-ui-dropdown"}),e.appendChild(this.popover),this.popoverContent=t(),this.popover.appendChild(this.popoverContent),this.popover.style.display="none",this.shim=i}configure(e){if(0===e.length)return;const t=ro(e,this.popover);for(const{element:e}of t)this.popoverContent.appendChild(e)}present(e){this.popover.style.display="block";let{x:t,y:i}=a(e,this.parent);this.popover.style.left=`${t+this.shim.left}px`,this.popover.style.top=`${i+this.shim.top}px`}_present(e){this.popover.style.display="block";let{x:t,y:i,width:n}=a(e,this.parent);t+=this.shim.left,i+=this.shim.top,this.popover.style.top=`${i}px`;const{width:r}=this.popover.getBoundingClientRect(),s=t+r,o=s-n;this.popover.style.left=`${s>n?t-o:t}px`}dismiss(){this.popover.style.display="none"}}class iv extends md{constructor(e,t){super(e,t,"Save Image",wd,'<svg width="625px" height="625px" viewBox="0 0 625 625" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">\n <title>save image</title>\n <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">\n <g id="save-image">\n <rect id="border" stroke="#737373" stroke-width="12" fill="#FFFFFF" x="6" y="6" width="613" height="613" rx="135"></rect>\n <g id="frame" transform="translate(66, 66)" fill="#737373" fill-rule="nonzero">\n <path d="M54.75,493 C39.69375,493 26.8046875,487.639062 16.0828125,476.917187 C5.3609375,466.195312 0,453.30625 0,438.25 L0,274 L54.75,274 L54.75,438.25 L219,438.25 L219,493 L54.75,493 Z" id="Path"></path>\n <path d="M274,493 L274,438.25 L438.25,438.25 L438.25,274 L493,274 L493,438.25 C493,453.30625 487.639062,466.195312 476.917187,476.917187 C466.195312,487.639062 453.30625,493 438.25,493 L274,493 Z" id="Path"></path>\n <path d="M0,219 L0,54.75 C0,39.69375 5.3609375,26.8046875 16.0828125,16.0828125 C26.8046875,5.3609375 39.69375,0 54.75,0 L219,0 L219,54.75 L54.75,54.75 L54.75,219 L0,219 Z" id="Path"></path>\n <path d="M438.25,219 L438.25,54.75 L274,54.75 L274,0 L438.25,0 C453.30625,0 466.195312,5.3609375 476.917187,16.0828125 C487.639062,26.8046875 493,39.69375 493,54.75 L493,219 L438.25,219 Z" id="Path"></path>\n </g>\n <rect id="border-hold-out-matte" fill="#FFFFFF" x="91" y="90" width="444" height="444" rx="38"></rect>\n <g id="artwork" transform="translate(148, 176)" fill="#737373" fill-rule="nonzero">\n <polygon id="Path" points="0 273 82.25 163.4 143.9375 245.6 226.1875 136 329 273"></polygon>\n <path d="M260,82 C248.155556,82 238.361111,78.1277778 230.616667,70.3833333 C222.872222,62.6388889 219,52.8444444 219,41 C219,29.1555556 222.872222,19.3611111 230.616667,11.6166667 C238.361111,3.87222222 248.155556,0 260,0 C271.844444,0 281.638889,3.87222222 289.383333,11.6166667 C297.127778,19.3611111 301,29.1555556 301,41 C301,52.8444444 297.127778,62.6388889 289.383333,70.3833333 C281.638889,78.1277778 271.844444,82 260,82 Z" id="Path"></path>\n </g>\n </g>\n </g>\n</svg>','<svg width="625px" height="625px" viewBox="0 0 625 625" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">\n <title>save image</title>\n <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">\n <g id="save-image">\n <rect id="border" stroke="#737373" stroke-width="12" fill="#FFFFFF" x="6" y="6" width="613" height="613" rx="135"></rect>\n <g id="frame" transform="translate(66, 66)" fill="#737373" fill-rule="nonzero">\n <path d="M54.75,493 C39.69375,493 26.8046875,487.639062 16.0828125,476.917187 C5.3609375,466.195312 0,453.30625 0,438.25 L0,274 L54.75,274 L54.75,438.25 L219,438.25 L219,493 L54.75,493 Z" id="Path"></path>\n <path d="M274,493 L274,438.25 L438.25,438.25 L438.25,274 L493,274 L493,438.25 C493,453.30625 487.639062,466.195312 476.917187,476.917187 C466.195312,487.639062 453.30625,493 438.25,493 L274,493 Z" id="Path"></path>\n <path d="M0,219 L0,54.75 C0,39.69375 5.3609375,26.8046875 16.0828125,16.0828125 C26.8046875,5.3609375 39.69375,0 54.75,0 L219,0 L219,54.75 L54.75,54.75 L54.75,219 L0,219 Z" id="Path"></path>\n <path d="M438.25,219 L438.25,54.75 L274,54.75 L274,0 L438.25,0 C453.30625,0 466.195312,5.3609375 476.917187,16.0828125 C487.639062,26.8046875 493,39.69375 493,54.75 L493,219 L438.25,219 Z" id="Path"></path>\n </g>\n <rect id="border-hold-out-matte" fill="#FFFFFF" x="91" y="90" width="444" height="444" rx="38"></rect>\n <g id="artwork" transform="translate(148, 176)" fill="#737373" fill-rule="nonzero">\n <polygon id="Path" points="0 273 82.25 163.4 143.9375 245.6 226.1875 136 329 273"></polygon>\n <path d="M260,82 C248.155556,82 238.361111,78.1277778 230.616667,70.3833333 C222.872222,62.6388889 219,52.8444444 219,41 C219,29.1555556 222.872222,19.3611111 230.616667,11.6166667 C238.361111,3.87222222 248.155556,0 260,0 C271.844444,0 281.638889,3.87222222 289.383333,11.6166667 C297.127778,19.3611111 301,29.1555556 301,41 C301,52.8444444 297.127778,62.6388889 289.383333,70.3833333 C281.638889,78.1277778 271.844444,82 260,82 Z" id="Path"></path>\n </g>\n </g>\n </g>\n</svg>',!1),this.button.addEventListener("mouseenter",(()=>this.setState(!0))),this.button.addEventListener("mouseleave",(()=>{for(const e of this.button.querySelectorAll("div"))if("block"===e.style.display)return;this.setState(!1)})),this.dropdown=new tv(this.button.parentNode,{top:24,left:-88});const i=[{label:"Save as SVG",click:e=>{this.browser.saveSVGtoFile("igvjs.svg"),this.dropdown.dismiss()}},{label:"Save as PNG",click:e=>{this.browser.savePNGtoFile("igvjs.png"),this.dropdown.dismiss()}}];this.dropdown.configure(i),this.button.addEventListener("click",(e=>{let t;if(e.target===this.button)t=!0;else if(e.target.closest("svg")){e.target.closest("div")===this.button&&(t=!0)}!0===t&&("none"===this.dropdown.popover.style.display?this.dropdown.present(e):this.dropdown.dismiss())})),this.setVisibility(t.config.showSVGButton)}navbarResizeHandler(e){this.dropdown.dismiss(),super.navbarResizeHandler(e)}}const nv=function(e,i,n){const r=t({class:"igv-navbar-button"});e.appendChild(r),r.textContent=n.label,r.addEventListener("click",(()=>n.callback(i)))};let rv=23,sv=0;class ov{constructor(e,i,n){this.browser=i,this.zoomContainer=t({class:"igv-zoom-widget"}),n.appendChild(this.zoomContainer),this.zoomOutButton=t(),this.zoomContainer.appendChild(this.zoomOutButton),this.zoomOutButton.appendChild(l("minus-circle")),this.zoomOutButton.addEventListener("click",(()=>{i.zoomOut()}));const r=t();this.zoomContainer.appendChild(r),this.slider=document.createElement("input"),this.slider.type="range",this.slider.min="0",this.slider.max=`${rv}`,r.appendChild(this.slider),this.slider.addEventListener("change",(e=>{e.preventDefault(),e.stopPropagation();const t=i.referenceFrameList[0],{bpLength:n}=t.genome.getChromosome(t.chr),{end:r,start:s}=t,o=r-s,a=n/Math.pow(2,e.target.valueAsNumber);i.zoomWithScaleFactor(a/o)})),this.zoomInButton=t(),this.zoomContainer.appendChild(this.zoomInButton),this.zoomInButton.appendChild(l("plus-circle")),this.zoomInButton.addEventListener("click",(()=>{i.zoomIn()})),i.on("locuschange",(e=>{this.browser.isMultiLocusMode()?this.disable():(this.enable(),this.update(e))}))}update(e){if(this.slider){const t=e[0],{bpLength:i}=t.genome.getChromosome(t.chr),{start:n,end:r}=t;rv=Math.ceil(Math.log2(i/this.browser.minimumBases())),this.slider.max=`${rv}`;const s=i/(r-n);sv=Math.log2(s),this.slider.value=`${Math.round(sv)}`}}enable(){this.slider&&(this.slider.disabled=!1)}disable(){this.slider&&(this.slider.disabled=!0)}hide(){this.zoomContainer.style.display="none"}show(){this.zoomContainer.style.display="block"}hideSlider(){this.slider&&(this.slider.style.display="none")}showSlider(){this.slider&&(this.slider.style.display="block")}}class av{constructor(e,t){this.browser=t,this.config=e,this.currentClass="igv-navbar-text-button";const i=document.createElement("div");i.className="igv-navbar",this.navigation=i;const n=document.createElement("div");n.className="igv-navbar-left-container",i.appendChild(n),this.navbarLeftContainer=n;const r=document.createElement("div");r.className="igv-logo",n.appendChild(r);const s=function(){const e=document.createElementNS("http://www.w3.org/2000/svg","svg");e.setAttribute("width","690px"),e.setAttribute("height","324px"),e.setAttribute("viewBox","0 0 690 324"),e.setAttribute("version","1.1"),e.setAttribute("xmlns","http://www.w3.org/2000/svg"),e.setAttribute("xmlns:xlink","http://www.w3.org/1999/xlink");const t=document.createElementNS("http://www.w3.org/2000/svg","title");t.textContent="IGV",e.appendChild(t);const i=document.createElementNS("http://www.w3.org/2000/svg","g");i.setAttribute("id","Page-1"),i.setAttribute("stroke","none"),i.setAttribute("stroke-width","1"),i.setAttribute("fill","none"),i.setAttribute("fill-rule","evenodd"),e.appendChild(i);const n=document.createElementNS("http://www.w3.org/2000/svg","g");n.setAttribute("id","IGV"),n.setAttribute("fill","#666666"),i.appendChild(n);const r=document.createElementNS("http://www.w3.org/2000/svg","polygon");r.setAttribute("id","Path"),r.setAttribute("points","379.54574 8.00169252 455.581247 8.00169252 515.564813 188.87244 532.884012 253.529506 537.108207 253.529506 554.849825 188.87244 614.833392 8.00169252 689.60164 8.00169252 582.729511 320.722144 486.840288 320.722144"),n.appendChild(r);const s=document.createElementNS("http://www.w3.org/2000/svg","path");s.setAttribute("d","M261.482414,323.793286 C207.975678,323.793286 168.339046,310.552102 142.571329,284.069337 C116.803612,257.586572 103.919946,217.158702 103.919946,162.784513 C103.919946,108.410325 117.437235,67.8415913 144.472217,41.0770945 C171.507199,14.3125977 212.903894,0.930550071 268.663545,0.930550071 C283.025879,0.930550071 298.232828,1.84616386 314.284849,3.6774189 C330.33687,5.50867394 344.839793,7.97378798 357.794056,11.072835 L357.794056,68.968378 C339.48912,65.869331 323.578145,63.5450806 310.060654,61.9955571 C296.543163,60.4460336 284.574731,59.6712835 274.154998,59.6712835 C255.850062,59.6712835 240.502308,61.4320792 228.111274,64.9537236 C215.720241,68.4753679 205.793482,74.2507779 198.330701,82.2801269 C190.867919,90.309476 185.587729,100.87425 182.48997,113.974767 C179.392212,127.075284 177.843356,143.345037 177.843356,162.784513 C177.843356,181.942258 179.251407,198.000716 182.067551,210.960367 C184.883695,223.920018 189.671068,234.41436 196.429813,242.443709 C203.188559,250.473058 212.059279,256.178037 223.042241,259.558815 C234.025202,262.939594 247.683295,264.629958 264.01693,264.629958 C268.241146,264.629958 273.098922,264.489094 278.590403,264.207362 C284.081883,263.925631 289.643684,263.50304 295.275972,262.939577 L295.275972,159.826347 L361.595831,159.826347 L361.595831,308.579859 C344.698967,313.087564 327.239137,316.750019 309.215815,319.567334 C291.192494,322.38465 275.281519,323.793286 261.482414,323.793286 L261.482414,323.793286 L261.482414,323.793286 Z"),s.setAttribute("id","Path"),n.appendChild(s);const o=document.createElementNS("http://www.w3.org/2000/svg","polygon");return o.setAttribute("id","Path"),o.setAttribute("points","0.81355666 5.00169252 73.0472883 5.00169252 73.0472883 317.722144 0.81355666 317.722144"),n.appendChild(o),e}();s.style.width="34px",s.style.height="32px",r.appendChild(s),this.currentGenome=document.createElement("div"),this.currentGenome.className="igv-current-genome",n.appendChild(this.currentGenome),this.currentGenome.textContent="";const o=document.createElement("div");o.className="igv-navbar-genomic-location",n.appendChild(o),this.chromosomeSelectWidget=new GF(t,o),!1!==e.showChromosomeWidget?this.chromosomeSelectWidget.show():this.chromosomeSelectWidget.hide();const a=document.createElement("div");a.className="igv-locus-size-group",o.appendChild(a);const c=document.createElement("div");c.className="igv-search-container",a.appendChild(c),this.searchInput=document.createElement("input"),this.searchInput.className="igv-search-input",this.searchInput.type="text",this.searchInput.placeholder="Locus Search",c.appendChild(this.searchInput),this.searchInput.addEventListener("keyup",(e=>{e.stopImmediatePropagation()})),this.searchInput.addEventListener("change",(()=>{t.doSearch(this.searchInput.value)}));const h=document.createElement("div");h.className="igv-search-icon-container",c.appendChild(h);const d=l("search");h.appendChild(d),h.addEventListener("click",(()=>{t.doSearch(this.searchInput.value)})),this.windowSizePanel=new WF(a,t);const u=document.createElement("div");u.className="igv-navbar-right-container",i.appendChild(u),this.navbarRightContainer=u;const f=document.createElement("div");f.className="igv-navbar-toggle-button-container",u.appendChild(f),this.toggleButtonContainer=f,this.overlayTrackButton=new yd(f,t),this.overlayTrackButton.setVisibility(!1);const p=!1!==e.showMultiSelectButton;if(this.multiTrackSelectButton=new $F(f,t,this,p),this.cursorGuideButton=new KF(f,t),this.centerLineButton=new YF(f,t),this.trackLabelControl=new XF(f,t),this.roiTableControl=new ZF(f,t),this.sampleInfoControl=new JF(f,t),this.sampleNameControl=new ev(f,t),!0===e.showSVGButton&&(this.saveImageControl=new iv(f,t)),e.customButtons)for(let i of e.customButtons)new nv(f,t,i);this.zoomWidget=new ov(e,t,u),!1===e.showNavigation&&(this.navigation.style.display="none")}navbarDidResize(){const e=this.currentNavbarButtonClass();"igv-navbar-text-button"===e&&(this.textButtonContainerWidth=this.navbarRightContainer.getBoundingClientRect().width);const t=this.browser,i=t.isMultiLocusWholeGenomeView()||t.referenceFrameList&&Mh.isWholeGenomeView(t.referenceFrameList[0].chr);i?this.windowSizePanel.hide():this.windowSizePanel.show();const{x:n,width:r}=this.navbarLeftContainer.getBoundingClientRect(),s=n+r,{x:o}=this.navbarRightContainer.getBoundingClientRect();let a;if("igv-navbar-text-button"===e&&o-s<8)a="igv-navbar-icon-button";else if(this.textButtonContainerWidth&&"igv-navbar-icon-button"===e){this.navigation.offsetWidth-s-this.textButtonContainerWidth>8&&(a="igv-navbar-text-button")}let c;a&&e!==a&&(this.currentClass=a,this.browser.fireEvent("navbar-resize",[a])),c=i?"igv-zoom-widget-hidden":this.navigation.offsetWidth>860?"igv-zoom-widget":"igv-zoom-widget-900",this.zoomWidget.zoomContainer.className="",this.zoomWidget.zoomContainer.classList.add(c)}updateGenome(e){let t=e.id&&e.id.length<20?e.id:`${e.id.substring(0,8)}...${e.id.substring(e.id.length-8)}`;this.currentGenome.textContent=t,this.currentGenome.setAttribute("title",e.description);!1!==this.config.showChromosomeWidget&&!1!==e.showChromosomeWidget&&e.chromosomeNames&&e.chromosomeNames.length>1?(this.chromosomeSelectWidget.update(e),this.chromosomeSelectWidget.show()):this.chromosomeSelectWidget.hide()}updateLocus(e,t){this.searchInput&&(this.searchInput.value=e),this.chromosomeSelectWidget&&(this.chromosomeSelectWidget.select.value=t)}currentNavbarButtonClass(){return this.currentClass}setEnableTrackSelection(e){this.multiTrackSelectButton.setMultiTrackSelection(e)}getEnableTrackSelection(){return this.multiTrackSelectButton.enableMultiTrackSelection}hide(){this.navigation.style.display="none"}show(){this.navigation.style.display="flex"}}const cv=(e,t)=>{const i=0===e?t.nextElementSibling:t.previousElementSibling;t.remove(),i.remove()},lv=e=>{const i=t({class:"igv-column-shim"});eo(i,e);const n=t({class:"igv-column"});return eo(n,i),n},hv=(e,i)=>{for(let n=0;n<i;n++){const r=t({class:"igv-column"});if(Js(r,e),i>1&&n>0){Js(t({class:"igv-column-shim"}),r)}}};class dv{constructor(e,i,n){this.browser=e,this.referenceFrame=i,this.column=n,this.container=t({class:"igv-center-line"}),n.appendChild(this.container),e.doShowCenterLine?this.show():this.hide()}repaint(){if(this.referenceFrame){if(1/this.referenceFrame.bpPerPixel>1){const e=Math.floor(this.referenceFrame.toPixels(1));this.container.style.width=`${e}px`,this.container.classList.remove("igv-center-line-thin"),this.container.classList.add("igv-center-line-wide")}else this.container.style.width="1px",this.container.classList.remove("igv-center-line-wide"),this.container.classList.add("igv-center-line-thin")}}show(){this.isVisible=!0,this.container.style.display="block",this.repaint()}hide(){this.isVisible=!1,this.container.style.display="none"}resize(){this.repaint()}}const uv=function(e,i){this.button=t({class:"igv-navbar-button"}),e.appendChild(this.button),this.button.textContent="circular view",this.button.addEventListener("click",(()=>{i.circularViewVisible=!i.circularViewVisible})),this.browser=i,this.setVisibility(i.config.showCircularViewButton),this.setState(i.circularViewVisible)};uv.prototype.setVisibility=function(e){!0===e?this.show():this.hide()},uv.prototype.setState=function(e){!0===e?this.button.classList.add("igv-navbar-button-clicked"):this.button.classList.remove("igv-navbar-button-clicked")},uv.prototype.show=function(){this.button.style.display="block",this.setState(this.browser.circularViewVisible)},uv.prototype.hide=function(){this.button.style.display="none"};class fv{constructor(e,i){this.browser=e,this.container=t({class:"igv-roi-menu"}),i.appendChild(this.container);const n=t();this.container.appendChild(n),u(n,(()=>this.container.style.display="none")),this.body=t(),this.container.appendChild(this.body),this.container.style.display="none"}async present(e,t,i,n,r,s){const o=this.menuItems(e,t,i,n,r,s);this.browser.menuPopup.presentTrackContextMenu(i,o)}menuItems(e,t,i,n,r,s){const o=e.name?[`<b>${e.name}</b><br/>`]:[];return"name"in t&&o.push(`<b>ROI Set: ${t.name}</b>`),o.length>0&&o.push("<hr/>"),t.isUserDefined&&o.push({label:"Set description ...",click:()=>{const t={label:"Description",value:e.name||"",callback:()=>{const t=this.browser.inputDialog.value||"";e.name=t.trim(),this.browser.roiManager.repaintTable()}};this.browser.inputDialog.present(t,i)}}),to()&&e.end-e.start<1e6&&o.push({label:"Copy reference sequence",click:async()=>{this.container.style.display="none";let t=await this.browser.genome.getSequence(e.chr,e.start,e.end);t||(t="Unknown sequence");try{await navigator.clipboard.writeText(t)}catch(e){console.error(e),this.browser.alert.present(`error copying sequence to clipboard ${e}`)}}}),e.end-e.start<=25e3&&o.push({label:"BLAT reference sequence",click:async()=>{this.container.style.display="none";const{chr:t,start:i,end:n}=e;let r=await this.browser.genome.getSequence(t,i,n);if(r){const e=`blat: ${t}:${i+1}-${n}`,s=`blat: ${t}:${i+1}-${n}`;oh({sequence:r,browser:this.browser,name:e,title:s})}}}),t.isUserDefined&&o.push("<hr/>",{label:"Delete",click:async()=>{t.removeFeature(e);const i=await t.getAllFeatures();0===Object.keys(i).length&&n.deleteUserDefinedROISet(),n.deleteRegionWithKey(s.dataset.region,r),n.repaintTable()}}),o}dispose(){this.container.innerHTML=""}}class pv extends th{constructor(e){const t={browser:e,parent:e.columnContainer,headerTitle:"Regions of Interest",dismissHandler:()=>e.roiTableControl.buttonHandler(!1),gotoButtonHandler:pv.gotoButtonHandler};t.columnFormat=pv.getColumnFormatConfiguration(!0),super(Object.assign({width:"640px"},t))}tableRowDOM(e){const i=t({class:"igv-roi-table-row"}),{setName:n,feature:r}=e;i.dataset.region=bv(r.chr,r.start,r.end);let s=[r.chr,F(r.start),F(r.end),r.name||"",n];4===this.columnFormat.length&&(s=s.slice(0,4));for(let e=0;e<s.length;e++){const n=t();i.appendChild(n),n.style.width=this.columnFormat[e].width,n.innerText=s[e]}return this.tableRowDOMHelper(i),i}renderTable(e){if(Array.from(this.tableRowContainer.querySelectorAll(".igv-roi-table-row")).forEach((e=>e.remove())),e.length>0){const t=e.sort(((e,t)=>e.feature.chr.localeCompare(t.feature.chr)||e.feature.start-t.feature.start||e.feature.end-t.feature.end));for(let e of t){const t=this.tableRowDOM(e);this.tableRowContainer.appendChild(t)}}}set footerDOM(e){super.footerDOM=e,this.gotoButton.textContent="Go to selected region(s)";const i=t({class:"igv-roi-table-button"});this._footerDOM.appendChild(i),i.id="igv-roi-hide-show-button",i.textContent="Copy Sequence",i.title="One region only of max size 1 mb",this.copySequenceButton=i,gv(this.copySequenceButton,!1),this.boundCopySequenceButtonHandler=async function(e){e.preventDefault(),e.stopPropagation();const t=this.tableDOM.querySelectorAll(".igv-roi-table-row-selected");if(t.length>0){const e=[];for(let i of t){const{locus:t}=vv(i.dataset.region);e.push(t)}for(let e of this.tableDOM.querySelectorAll(".igv-roi-table-row"))e.classList.remove("igv-roi-table-row-selected");if(this.setTableRowSelectionState(!1),e.length>0){const{chr:t,start:i,end:n}=yF(e[0],this.browser.isSoftclipped()),r=await this.browser.genome.getSequence(t,i,n);await navigator.clipboard.writeText(r)}}}.bind(this),this.copySequenceButton.addEventListener("click",this.boundCopySequenceButtonHandler);const n=t({class:"igv-roi-table-button"});this._footerDOM.appendChild(n),n.id="igv-roi-hide-show-button",n.textContent="Hide Overlays",this.toggleROIButton=n,this.boundToggleDisplayButtonHandler=function(e){e.preventDefault(),e.stopPropagation(),this.roiManager.toggleROIs()}.bind(this),this.toggleROIButton.addEventListener("click",this.boundToggleDisplayButtonHandler)}get roiManager(){return this.browser.roiManager}setTableRowSelectionState(e){super.setTableRowSelectionState(e);const t=this.tableDOM.querySelectorAll(".igv-roi-table-row-selected");if(t.length>0&&t.length<2){const{locus:e}=vv(t[0].dataset.region),{chr:i,start:n,end:r}=yF(e,this.browser.isSoftclipped());gv(this.copySequenceButton,r-n<1e6)}else gv(this.copySequenceButton,!1)}dispose(){document.removeEventListener("click",this.boundGotoButtonHandler),document.removeEventListener("click",this.boundCopySequenceButtonHandler),document.removeEventListener("click",this.boundToggleDisplayButtonHandler),this.browser.roiTableControl.buttonHandler(!1),super.dispose()}static getColumnFormatConfiguration(e){return!0===e?[{label:"Chr",width:"20%"},{label:"Start",width:"15%"},{label:"End",width:"15%"},{label:"Description",width:"30%"},{label:"ROI Set",width:"20%"}]:[{label:"Chr",width:"25%"},{label:"Start",width:"20%"},{label:"End",width:"20%"},{label:"Description",width:"35%"}]}static gotoButtonHandler(e){e.stopPropagation();const t=this.tableDOM.querySelectorAll(".igv-roi-table-row-selected"),i=[];for(let e of t){const{locus:t}=vv(e.dataset.region);i.push(t)}for(let e of this.tableDOM.querySelectorAll(".igv-roi-table-row"))e.classList.remove("igv-roi-table-row-selected");this.setTableRowSelectionState(!1),i.length>0&&this.browser.search(i.join(" "))}}function gv(e,t){e.style.pointerEvents=t?"auto":"none",e.style.color=Wn(t?"licorice":"silver"),e.style.borderColor=Wn(t?"licorice":"silver")}class mv{constructor(e){this.browser=e,this.roiMenu=new fv(e,e.columnContainer),this.roiTable=new pv(e,e.columnContainer),this.top=0,this.roiSets=[],this.showOverlays=!0,this.boundLocusChangeHandler=wv.bind(this),e.on("locuschange",this.boundLocusChangeHandler)}async reset(){this.roiSets.length>0&&this.browser.roiTableControl.setVisibility(!0);const e=this.roiSets.map((e=>this.renderROISet({browser:this.browser,pixelTop:this.top,roiSet:e})));e.length>0&&await Promise.all(e);const t=await this.getTableRecords();this.roiTable.renderTable(t),this.roiSets.length>0&&this.setOverlayVisibility(this.showOverlays)}setOverlayVisibility(e){const t=this.browser.columnContainer.querySelectorAll(".igv-roi-region");for(let i=0;i<t.length;i++){const n=t[i];n.style.backgroundColor=e?n.dataset.color:"rgba(0, 0, 0, 0)"}this.roiTable.toggleROIButton.textContent=!1===e?"Show Overlays":"Hide Overlays"}async loadROI(e,t){const i=Array.isArray(e)?e:[e];i.length>0&&!1===i[0].isVisible&&(this.showOverlays=!1);for(let e of i)!e.name&&e.url&&(e.name=await Ks(e.url)),e.url&&!e.format&&(e.format=await wf(e)),this.roiSets.push(new qh(e,t));await this.reset()}clearROIs(){this.roiTable.clearTable();const e=this.browser.columnContainer.querySelectorAll(".igv-roi-region");for(let t of e)t.remove();for(let e of this.roiSets)e.dispose();this.roiSets=[]}async getTableRecords(){const e=[];for(let t of this.roiSets){const i=t.name||"",n=await t.getAllFeatures();for(let t of Object.keys(n))for(let r of n[t])e.push({setName:i,feature:r})}return e}presentTable(){this.roiTable.present()}async repaintTable(){const e=await this.getTableRecords();this.roiTable.renderTable(e)}dismissTable(){this.roiTable.dismiss()}roiTableIsVisible(){return this.roiTable.isVisible()}async updateUserDefinedROISet(e){let t=await this.getUserDefinedROISet();void 0===t&&(t=this.initializeUserDefinedROISet()),t.addFeature(e),this.setROITableButtonVisibility(!0),await this.renderROISet({browser:this.browser,pixelTop:this.top,roiSet:t});const i=await this.getTableRecords();this.roiTable.renderTable(i)}setROITableButtonVisibility(e){this.browser.roiTableControl.setVisibility(e)}toggleROIs(){this.showOverlays=!this.showOverlays,this.setOverlayVisibility(this.showOverlays)}async renderAllROISets(){for(let e of this.roiSets)await this.renderROISet({browser:this.browser,pixelTop:this.top,roiSet:e})}async renderROISet({browser:e,pixelTop:t,roiSet:i}){const n=e.columnContainer.querySelectorAll(".igv-column");for(let r=0;r<n.length;r++){let{chr:s,start:o,end:a,bpPerPixel:c}=e.referenceFrameList[r];const l=n[r].querySelectorAll(".igv-roi-region");for(let e of l){const t=e.dataset.region,{chr:i,start:n,end:r}=vv(t);(i!==s||r<o||n>a)&&e.remove()}const h=await i.getFeatures(s,o,a);if(h)for(let l of h){const h=bv(s,l.start,l.end),{x:d,width:u}=Qh(Math.max(o,l.start),Math.min(a,l.end),o,c),f=n[r].querySelector(Fv(h));if(f)f.style.left=`${d}px`,f.style.width=`${u}px`;else{const s=this.createRegionElement(e.columnContainer,t,d,u,i,h,l);n[r].appendChild(s)}}}}createRegionElement(e,i,n,r,s,o,c){const l=t({class:"igv-roi-region"});l.style.top=`${i}px`,l.style.left=`${n}px`,l.style.width=`${r}px`;const h=`${this.getROIRegionTopMargin()}px`;l.style.marginTop=h,l.dataset.color=s.color,l.dataset.region=o,this.showOverlays?l.style.backgroundColor=s.color:l.style.backgroundColor="rgba(0, 0, 0, 0)";const d=t();return l.appendChild(d),d.style.backgroundColor=s.headerColor,d.addEventListener("click",(t=>{t.preventDefault(),t.stopPropagation(),a(t,e),this.roiMenu.present(c,s,t,this,e,l)})),l}updateROIRegionPositions(){const e=`${this.getROIRegionTopMargin()}px`,t=this.browser.columnContainer.querySelectorAll(".igv-column");for(let i=0;i<t.length;i++){const n=t[i].querySelectorAll(".igv-roi-region");for(let t=0;t<n.length;t++)n[t].style.marginTop=e}}getROIRegionTopMargin(){const e=this.browser.findTracks((e=>new Set(["ideogram","ruler"]).has(e.type))),[t,i]=e.map((e=>e.trackView.viewports[0].viewportElement)).map((e=>function(e){const t=window.getComputedStyle(e),i=parseInt(t.marginTop),n=parseInt(t.marginBottom),{top:r,bottom:s,height:o}=e.getBoundingClientRect();return{top:Math.floor(r)-i,bottom:Math.floor(s)+n,height:Math.floor(o)+i+n}}(e)));return(t?t.height:0)+(i?i.height:0)+-.5}renderSVGContext(e,t,{deltaX:i,deltaY:n}){for(const r of e.querySelectorAll(".igv-roi-region")){const{x:e,y:s,width:o,height:a}=r.getBoundingClientRect();t.fillStyle=r.style.backgroundColor,t.fillRect(e-i,s+n,o,a);const c=r.querySelector("div"),{x:l,y:h,width:d,height:u}=c.getBoundingClientRect();t.fillStyle=c.style.backgroundColor,t.fillRect(l-i,h+n,d,u)}}getUserDefinedROISet(){return this.roiSets.find((e=>!0===e.isUserDefined))}deleteUserDefinedROISet(){this.roiSets=this.roiSets.filter((e=>!0!==e.isUserDefined))}initializeUserDefinedROISet(){const e=new qh({name:"user defined",isUserDefined:!0,features:[]},this.browser.genome);return this.roiSets.push(e),e}async deleteRegionWithKey(e,t){t.querySelectorAll(Fv(e)).forEach((e=>e.remove()));0===(await this.getTableRecords()).length&&(this.browser.roiTableControl.buttonHandler(!1),this.setROITableButtonVisibility(!1))}toJSON(){return this.roiSets.map((e=>e.toJSON()))}dispose(){this.browser.off("locuschange",this.boundLocusChangeHandler);const e=this.browser.columnContainer.querySelectorAll(".igv-roi-region");for(let t of e)t.remove();this.roiMenu&&this.roiMenu.dispose(),this.roiTable&&this.roiTable.dispose();for(let e of this.roiSets)e.dispose();for(let e of Object.keys(this))this[e]=void 0}}function wv(){this.renderAllROISets()}function bv(e,t,i){return`${e}-${t}-${i}`}function Fv(e){return`[data-region="${e}"]`}function vv(e){let t=e.split("-"),i=parseInt(t.pop()),n=parseInt(t.pop()),r=t.join("-");return{chr:r,start:n,end:i,locus:`${r}:${n}-${i}`,bedRecord:`${r}\t${n}\t${i}`}}class yv{constructor(e,t){this.name=e.name,this.featureSource=e.featureSource||Hl(e,t),this.color=e.color||Oh}async getFeatures(e,t,i){return this.featureSource.getFeatures({chr:e,start:t,end:i})}draw(e){const{context:t,bpPerPixel:i,bpStart:n,pixelTop:r,pixelHeight:s,pixelWidth:o,features:a}=e;if(!a)return;const c=n+o*i+1;for(let{start:e,end:o}of a){if(o<n)continue;if(e>c)break;const{x:a,width:l}=Qh(e,o,n,i);fr.fillRect(t,a,r,l,s,{fillStyle:this.color})}}}class Av{aliasRecordCache=new Map;constructor(e,t){this.genomeID=e,this.update(e,t)}async preload(){}getChromosomeName(e){return this.aliasRecordCache.has(e)?this.aliasRecordCache.get(e).chr:e}getChromosomeAlias(e,t){const i=this.aliasRecordCache.get(e);return i&&i[t]||e}update(e,t){if(t){const i=[];for(let n of t){if(this.aliasRecordCache.has(n))continue;const t={chr:n};if(i.push(t),n.startsWith("gi|")){const e=Av.getNCBIName(n);t["ncbi-gi-versioned"]=e;const i=e.lastIndexOf(".");if(i>0){const e=e.substring(0,i);t["ncbi-gi"]=e}}else if("chrM"===n?t.ncbi="MT":"MT"===n?t.ucsc="chrM":n.toLowerCase().startsWith("chr")&&Number.isInteger(Number(n.substring(3)))?t.ncbi=n.substring(3):Number.isInteger(Number(n))&&(t.ucsc="chr"+n),e.startsWith("hg")||e.startsWith("GRCh")||"1kg_ref"===e||"b37"===e)switch(n){case"23":t.ucsc="chrX",t.assembly="X";break;case"24":t.ucsc="chrY",t.assembly="Y";break;case"chrX":t.ncbi="23",t.assembly="X";break;case"chrY":t.ncbi="24",t.assembly="Y";break;case"X":t.ucsc="chrX",t.ncbi="23";break;case"Y":t.ucsc="chrY",t.ncbi="24"}else if(e.startsWith("mm")||e.startsWith("GRCm")||e.startsWith("rheMac"))switch(n){case"21":t.ucsc="chrX",t.assembly="X";break;case"22":t.ucsc="chrY",t.assembly="Y";break;case"chrX":t.ncbi="21",t.assembly="X";break;case"chrY":t.ncbi="22",t.assembly="Y";break;case"X":t.ucsc="chrX",t.ncbi="21";break;case"Y":t.ucsc="chrY",t.ncbi="22"}}for(let e of i){Av.addCaseAliases(e);for(let t of Object.values(e))this.aliasRecordCache.set(t,e)}}}search(e){return this.aliasRecordCache.get(e)}static getNCBIName(e){const t=e.split("\\|");return t[t.length-1]}static addCaseAliases(e){const t=e.chr.toUpperCase(),i=e.chr.toLowerCase(),n=e.chr.charAt(0).toUpperCase()+e.chr.slice(1);e.chr!==t&&(e._uppercase=t),e.chr!==i&&(e._lowercase=i),e.chr!==n&&(e._cap=n)}}class Cv{aliasRecordCache=new Map;constructor(e,t,i){(t=t||{}).url=e,this.reader=new el(t,i)}async preload(e){await this.reader.preload();for(let t of e)await this.search(t)}getChromosomeName(e){return this.aliasRecordCache.has(e)?this.aliasRecordCache.get(e).chr:e}getChromosomeAlias(e,t){const i=this.aliasRecordCache.get(e);return i&&i[t]||e}async search(e){if(!this.aliasRecordCache.has(e)){const t=await this.reader.search(e);if(t){Av.addCaseAliases(t);for(let e of Object.keys(t))"start"!==e&&"end"!==e&&this.aliasRecordCache.set(t[e],t)}}return this.aliasRecordCache.get(e)}async getChromosomeNames(){return await this.reader.loadHeader(),Array.from(this.reader.chrNames)}}class _v{aliasRecordCache=new Map;constructor(e,t,i){this.aliasURL=e,this.config=t,this.genome=i}async preload(){return this.loadAliases()}getChromosomeName(e){return this.aliasRecordCache.has(e)?this.aliasRecordCache.get(e).chr:e}getChromosomeAlias(e,t){const i=this.aliasRecordCache.get(e);return i&&i[t]||e}async loadAliases(){const e=await Mn.loadString(this.aliasURL,js(this.config)),t=v(e),i=t[0];i.startsWith("#")&&(this.headings=i.substring(1).split("\t").map((e=>e.trim())),this.altNameSets=this.headings.slice(1));const n=this.genome.chromosomeNames?new Set(this.genome.chromosomeNames):new Set;for(let e of t)if(!e.startsWith("#")&&e.length>0){const t=e.split("\t");let i=t.find((e=>n.has(e)));i||(i=t[0]);const r={chr:i};Av.addCaseAliases(r);for(let e=0;e<t.length;e++){r[this.headings?this.headings[e]:e]=t[e]}for(let e of Object.values(r))this.aliasRecordCache.set(e,r)}}async search(e){return 0===this.aliasRecordCache.size&&await this.loadAliases(),this.aliasRecordCache.get(e)}}class xv{constructor(e,t,i,n){this.start=e,this.end=t,this.name=i,this.stain=0,"acen"===n?this.type="c":(this.type=n.charAt(1),"p"===this.type&&(this.stain=parseInt(n.substring(4))))}}class kv{cytobandMap=new Map;constructor(e,t,i){(t=t||{}).url=e,this.source=new cl(t,i)}async getCytobands(e){if(this.cytobandMap.has(e))return this.cytobandMap.get(e);{let t=await this.#S(e);return t||(t=[]),this.cytobandMap.set(e,t),t}}async#S(e){return(await this.source.getFeatures({chr:e})).map((e=>new xv(e.start,e.end,e.name,e.gieStain)))}}class Iv{cytobands=new Map;constructor(e,t){this.url=e,this.config=t}async getCytobands(e){return 0===this.cytobands.size&&await this.#E(),this.cytobands.get(e)}async#E(){let e,t;if(Xs(this.url)){const t=on(this.url);e="";const i=t.length;for(let n=0;n<i;n++)e+=String.fromCharCode(t[n])}else e=await Mn.loadString(this.url,js(this.config));let i=[];const n=v(e);for(let e of n){const n=e.split("\t"),r=n[0];if(t||(t=r),r!==t&&(this.cytobands.set(t,i),i=[],t=r),5===n.length){const e=parseInt(n[1]),t=parseInt(n[2]),r=n[3],s=n[4];i.push(new xv(e,t,r,s))}}}async getChromosomeNames(){return 0===this.cytobands.size&&await this.#E(),Array.from(this.cytobands.keys())}async getChromosomes(){0===this.cytobands.size&&await this.#E();const e=[];let t=0;for(let[i,n]of this.cytobands.entries())e.push(new ho(i,t++,n[n.length-1].end));return e}}class Sv{#N;#M=new Map;static async createGenome(e,t){const i=new Sv(e,t);return await i.init(),i}constructor(e,t){this.config=e,this.browser=t,this.id=e.id||function(e){return void 0!==e.id?e.id:e.fastaURL&&b(e.fastaURL)&&!e.fastaURL.startsWith("data:")?e.fastaURL:e.fastaURL&&e.fastaURL.name?e.fastaURL.name:""}(e),this.name=e.name,this.nameSet=e.nameSet}async init(){const e=this.config;if(this.sequence=await Ro(e,this.browser),e.chromSizesURL?this.chromosomes=await async function(e){const t=new Map;let i;if(Xs(e)){let t=on(e);i="";for(let e of t)i+=String.fromCharCode(e)}else i=await Mn.load(e,{});const n=yo(i);let r=0;for(let e of n){const i=e.split("\t");if(i.length>1){const e=Number.parseInt(i[1]);t.set(i[0],new ho(i[0],r++,e))}}return t}(e.chromSizesURL):this.chromosomes=this.sequence.chromosomes||new Map,this.chromosomes.size>0&&(this.chromosomeNames=Array.from(this.chromosomes.keys())),e.chromAliasBbURL?(this.chromAlias=new Cv(e.chromAliasBbURL,Object.assign({},e),this),this.chromosomeNames||(this.chromosomeNames=await this.chromAlias.getChromosomeNames())):e.aliasURL?this.chromAlias=new _v(e.aliasURL,Object.assign({},e),this):this.chromosomeNames&&(this.chromAlias=new Av(this.id,this.chromosomeNames)),e.cytobandBbURL?this.cytobandSource=new kv(e.cytobandBbURL,Object.assign({},e),this):e.cytobandURL&&(this.cytobandSource=new Iv(e.cytobandURL,Object.assign({},e))),this.chromosomeNames||"function"!=typeof this.cytobandSource.getChromosomeNames||(this.chromosomeNames=await this.cytobandSource.getChromosomeNames()),0===this.chromosomes.size&&"function"==typeof this.cytobandSource.getChromosomes){const e=await this.cytobandSource.getChromosomes();for(let t of e)this.chromosomes.set(e.name,e)}if(!1!==e.wholeGenomeView&&this.chromosomes.size>0&&(e.chromosomeOrder?Array.isArray(e.chromosomeOrder)?this.#N=e.chromosomeOrder:this.#N=e.chromosomeOrder.split(",").map((e=>e.trim())):this.#N=function(e){const t=[];let i,n=1;for(let r of e.values()){if(i){if(r.bpLength<i/100)continue;i=((n-1)*i+r.bpLength)/n,t.push(r.name)}else i=r.bpLength,t.push(r.name);n++}return t}(this.chromosomes),await this.chromAlias.preload(this.#N)),this.wholeGenomeView=!1!==e.wholeGenomeView&&this.#N&&this.chromosomes.size>1,this.wholeGenomeView){const e=this.#N.reduce(((e,t)=>e+this.chromosomes.get(t).bpLength),0);this.chromosomes.set("all",new ho("all",0,e))}}get description(){return this.config.description||`${this.id}\n${this.name}`}get infoURL(){return this.config.infoURL}showWholeGenomeView(){return this.wholeGenomeView}toJSON(){return Object.assign({},this.config,{tracks:void 0})}get initialLocus(){return this.config.locus?this.config.locus:this.getHomeChromosomeName()}getHomeChromosomeName(){return this.showWholeGenomeView()&&this.chromosomes.has("all")?"all":this.chromosomeNames[0]}getChromosomeName(e){return this.chromAlias?this.chromAlias.getChromosomeName(e,this.chromosomes.keys()):e}getChromosomeDisplayName(e){return this.nameSet&&this.chromAlias&&this.chromAlias.getChromosomeAlias(e,this.nameSet)||e}getChromosome(e){return this.chromAlias&&(e=this.chromAlias.getChromosomeName(e)),this.chromosomes.get(e)}async loadChromosome(e){const t=await this.getAliasRecord(e);if(t&&(e=t.chr),!this.chromosomes.has(e)){let t;const i=await this.sequence.getSequenceRecord(e);i&&(t=new ho(e,0,i.bpLength)),this.chromosomes.set(e,t)}return this.chromosomes.get(e)}async getAliasRecord(e){if(this.#M.has(e))return this.#M.get(e);if(this.chromAlias){let t=await this.chromAlias.search(e);if(t||e===e.toLowerCase()||(t=await this.chromAlias.search(e.toLowerCase())),t){const e=t.chr.toUpperCase(),i=t.chr.toLowerCase(),n=t.chr.charAt(0).toUpperCase()+t.chr.slice(1);t.chr!==e&&(t._uppercase=e),t.chr!==i&&(t._lowercase=i),t.chr!==n&&(t._cap=n)}return this.#M.set(e,t),t}}async getCytobands(e){if(this.cytobandSource){const t=this.getChromosomeName(e);return await this.cytobandSource.getCytobands(t)}}getChromosomes(){return this.chromosomes}get wgChromosomeNames(){return this.#N?this.#N.slice():void 0}get showChromosomeWidget(){return this.config.showChromosomeWidget}getGenomeCoordinate(e,t){var i=this.getCumulativeOffset(e);if(void 0!==i)return i+t}getChromosomeCoordinate(e){let t;void 0===this.cumulativeOffsets&&(this.cumulativeOffsets=computeCumulativeOffsets.call(this));let i=0;for(let n of this.#N){const r=this.cumulativeOffsets[n];if(r>e){return{chr:t,position:e-i}}t=n,i=r}return{chr:this.#N[this.#N.length-1],position:0}}getCumulativeOffset(e){void 0===this.cumulativeOffsets&&(this.cumulativeOffsets=function(){let e={},t=0;for(let i of this.#N){e[i]=Math.floor(t);t+=this.getChromosome(i).bpLength}return e}.call(this));const t=this.getChromosomeName(e);return this.cumulativeOffsets[t]}getGenomeLength(){if(!this.bpLength){let e=0;for(let t of this.#N){e+=this.chromosomes.get(t).bpLength}this.bpLength=e}return this.bpLength}async getSequence(e,t,i){return e=this.getChromosomeName(e),this.sequence.getSequence(e,t,i)}getSequenceInterval(e,t,i){return"function"==typeof this.sequence.getSequenceInterval?this.sequence.getSequenceInterval(e,t,i):void 0}}class Ev{constructor(){this.clear()}clear(){this.phenotypeColors=new Map,this.snps=new Set,this.qtl=null}isEmpty(){return 0===this.phenotypeColors.size&&0===this.snps.size&&null===this.qtl}addSnp(e){e=e.toUpperCase(),this.snps.add(e)}addPhenotype(e){e=e.toUpperCase();const t=this.phenotypeColors.size;if(!this.phenotypeColors.has(e.toUpperCase())){const i=t<Nv.length?Nv[t]:un.randomRGB(0,255);this.phenotypeColors.set(e.toUpperCase(),i)}}hasSnp(e){return e&&this.snps.has(e.toUpperCase())}hasPhenotype(e){return e&&this.phenotypeColors.has(e.toUpperCase())}hasQTL(e){return this.qtls.has(e)}colorForGene(e){return e?this.phenotypeColors.get(e.toUpperCase()):"black"}toJSON(){const e={};return this.phenotypeColors.size>0&&(e.phenotypes=Array.from(this.phenotypeColors.keys())),this.snps.size>0&&(e.snps=Array.from(this.snps)),this.qtl&&(e.qtl=this.qtl),e}static fromJSON(e){const t=new Ev;if(e.phenotypes)for(let i of e.phenotypes)t.addPhenotype(i);if(e.snps)for(let i of e.snps)t.addSnp(i);return e.qtl&&(t.qtl=e.qtl),t}}const Nv=[];Nv.push("rgb(228,26,28)"),Nv.push("rgb(55,126,184)"),Nv.push("rgb(77,175,74)"),Nv.push("rgb(166,86,40)"),Nv.push("rgb(152,78,163)"),Nv.push("rgb(255,127,0)"),Nv.push("rgb(247,129,191)"),Nv.push("rgb(255,255,51)"),Nv.push("rgb(102,194,165)"),Nv.push("rgb(252,141,98)"),Nv.push("rgb(141, 160, 203)"),Nv.push("rgb(231, 138, 195)"),Nv.push("rgb(166, 216, 84)"),Nv.push("rgb(255, 217, 47)"),Nv.push("rgb(229, 196, 148)"),Nv.push("rgb( 141, 211, 199)"),Nv.push("rgb(255, 255, 179)"),Nv.push("rgb(190, 186, 218)"),Nv.push("rgb(251, 128, 114)"),Nv.push("rgb(128, 177, 211)"),Nv.push("rgb(253, 180, 98)"),Nv.push("rgb(179, 222, 105)"),Nv.push("rgb(252, 205, 229)"),Nv.push("rgb(188, 128, 189)"),Nv.push("rgb(204, 235, 197)"),Nv.push("rgb(255, 237, 111)");class Mv{constructor(e,i){this.browser=i,this.columnContainer=e,this.horizontalGuide=t({class:"igv-cursor-guide-horizontal"}),e.appendChild(this.horizontalGuide),this.verticalGuide=t({class:"igv-cursor-guide-vertical"}),e.appendChild(this.verticalGuide),this.addMouseHandler(i),this.setVisibility(i.config.showCursorGuide)}addMouseHandler(e){this.boundMouseMoveHandler=function(t){t.target.tagName;const{x:i,y:n}=a(t,this.columnContainer);if(this.horizontalGuide.style.top=`${n}px`,"CANVAS"===t.target.tagName){const n=function(e,t){for(;e.parentElement;){if(e.parentElement.classList.contains(t))return e.parentElement;e=e.parentElement}return}(t.target,"igv-viewport");if(n&&e.getRulerTrackView()){this.verticalGuide.style.left=`${i}px`;const r=e.root.querySelectorAll(".igv-column");let s;const o=n.parentElement;for(let e=0;e<r.length;e++)void 0===s&&o===r[e]&&(s=e);if(void 0!==s){const i=e.getRulerTrackView().viewports[s].mouseMove(t);if(i){const{start:e,bp:t,end:n}=i,r=(t-e)/(n-e);this.customMouseHandler&&this.customMouseHandler({start:e,bp:t,end:n,interpolant:r})}}}}}.bind(this),this.columnContainer.addEventListener("mousemove",this.boundMouseMoveHandler)}removeMouseHandler(){this.columnContainer.removeEventListener("mousemove",this.boundMouseMoveHandler)}setVisibility(e){!0===e?this.show():this.hide()}show(){this.verticalGuide.style.display="block",this.horizontalGuide.style.display="block"}hide(){if(this.verticalGuide.style.display="none",this.horizontalGuide.style.display="none",this.browser.getRulerTrackView())for(let e of this.browser.getRulerTrackView().viewports)e.tooltip.style.display="none"}}class Rv{constructor(e){this.parent=e,this.container=t({class:"igv-ui-generic-dialog-container"}),e.appendChild(this.container);const i=t({class:"igv-ui-generic-dialog-header"});this.container.appendChild(i),this.label=t({class:"igv-ui-generic-dialog-one-liner"}),this.container.appendChild(this.label),this.label.textContent="Unlabeled",this.input_container=t({class:"igv-ui-generic-dialog-input"}),this.container.appendChild(this.input_container);let r='<input type="range" id="igv-slider-dialog-input" name="igv-slider-dialog-input" />';this._input=document.createRange().createContextualFragment(r).firstChild,this.input_container.appendChild(this._input),r='<output id="igv-slider-dialog-output" name="igv-slider-dialog-output" for="igv-slider-dialog-input"></output>',this._output=document.createRange().createContextualFragment(r).firstChild,this.input_container.appendChild(this._output);const s=t({class:"igv-ui-generic-dialog-ok-cancel"});this.container.appendChild(s),this.ok=t(),s.appendChild(this.ok),this.ok.textContent="OK",this.cancel=t(),s.appendChild(this.cancel),this.cancel.textContent="Cancel",n(this.container),this._input.addEventListener("input",(()=>{const e=parseFloat(this._input.value)/this._scaleFactor;this.callback(e),this._output.value=`${e.toFixed(this._precision)}`}),!1),this.ok.addEventListener("click",(()=>{if("function"==typeof this.callback){const e=parseFloat(this._input.value)/this._scaleFactor;this.callback(e),this.callback=void 0}this._input.value=void 0,n(this.container)}));const o=()=>{this._input.value=void 0,n(this.container)};this.cancel.addEventListener("click",o),u(i,o),p(this.container,i)}get value(){return Fs.sanitize(this._input.value)}present(e,t){this.label.textContent=e.label,this._scaleFactor=e.scaleFactor,this._precision=e.precision||2;const[i,n,s]=[e.min,e.max,e.value].map((e=>Math.floor(this._scaleFactor*e).toString()));this._input.min=i,this._input.max=n,this._input.value=s;const o=parseFloat(s)/this._scaleFactor;this._output.value=`${o.toFixed(this._precision)}`,this.callback=e.callback||e.click,r(this.container),this.clampLocation(t.clientX,t.clientY)}clampLocation(e,t){const{width:i,height:n}=this.container.getBoundingClientRect(),r=window.innerHeight,s=window.innerWidth,o=Math.min(r-n,t),a=Math.min(s-i,e);this.container.style.left=`${a}px`,this.container.style.top=`${o}px`}}class Bv{qtlSelections=new Ev;constructor(e,i){this.config=e,this.guid=o(),this.namespace=".browser_"+this.guid,this.parent=i;let n=i.shadowRoot;if(!n){n=i.attachShadow({mode:"open"});const e=new CSSStyleSheet;e.replaceSync('.igv-ui-dropdown {\n cursor: default;\n position: absolute;\n top: 0;\n left: 0;\n z-index: 2048;\n border-color: #7F7F7F;\n border-style: solid;\n border-width: 1px;\n font-family: "Open Sans", sans-serif;\n font-size: small;\n font-weight: 400;\n background-color: white;\n}\n.igv-ui-dropdown > div {\n overflow-y: auto;\n overflow-x: hidden;\n background-color: white;\n}\n.igv-ui-dropdown > div > div {\n padding: 4px;\n width: 100%;\n overflow-x: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n border-bottom-color: #7F7F7F;\n border-bottom-style: solid;\n border-bottom-width: 1px;\n background-color: white;\n}\n.igv-ui-dropdown > div > div:last-child {\n border-bottom-color: transparent;\n border-bottom-width: 0;\n}\n.igv-ui-dropdown > div > div:hover {\n cursor: pointer;\n background-color: rgba(0, 0, 0, 0.04);\n}\n\n.igv-ui-popover {\n cursor: default;\n position: absolute;\n z-index: 2048;\n border-color: #7F7F7F;\n border-radius: 4px;\n border-style: solid;\n border-width: 1px;\n font-family: "Open Sans", sans-serif;\n font-size: small;\n background-color: white;\n}\n.igv-ui-popover > div:first-child {\n display: flex;\n flex-direction: row;\n flex-wrap: nowrap;\n justify-content: space-between;\n align-items: center;\n width: 100%;\n height: 24px;\n cursor: move;\n border-top-width: 0;\n border-top-left-radius: 4px;\n border-top-right-radius: 4px;\n border-bottom-color: #7F7F7F;\n border-bottom-style: solid;\n border-bottom-width: thin;\n background-color: #eee;\n}\n.igv-ui-popover > div:first-child > div:first-child {\n margin-left: 4px;\n}\n.igv-ui-popover > div:first-child > div:last-child {\n margin-right: 4px;\n height: 12px;\n width: 12px;\n color: #7F7F7F;\n}\n.igv-ui-popover > div:first-child > div:last-child:hover {\n cursor: pointer;\n color: #444;\n}\n.igv-ui-popover > div:last-child {\n user-select: text;\n overflow-y: auto;\n overflow-x: hidden;\n max-height: 400px;\n max-width: 800px;\n background-color: white;\n border-bottom-width: 0;\n border-bottom-left-radius: 4px;\n border-bottom-right-radius: 4px;\n}\n.igv-ui-popover > div:last-child > div {\n margin-left: 4px;\n margin-right: 4px;\n min-width: 220px;\n overflow-x: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.igv-ui-popover > div:last-child > div > span {\n font-weight: bolder;\n}\n.igv-ui-popover > div:last-child hr {\n width: 100%;\n}\n\n.igv-ui-alert-dialog-container {\n position: fixed;\n top: 20%;\n left: 50%;\n transform: translateX(-50%);\n z-index: 2048;\n box-sizing: content-box;\n width: 400px;\n height: 200px;\n border-color: #7F7F7F;\n border-radius: 4px;\n border-style: solid;\n border-width: thin;\n outline: none;\n font-family: "Open Sans", sans-serif;\n font-size: 15px;\n font-weight: 400;\n background-color: white;\n display: flex;\n flex-flow: column;\n flex-wrap: nowrap;\n justify-content: space-between;\n align-items: center;\n}\n.igv-ui-alert-dialog-container > div:first-child {\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: center;\n width: 100%;\n height: 24px;\n cursor: move;\n border-top-left-radius: 4px;\n border-top-right-radius: 4px;\n border-bottom-color: #7F7F7F;\n border-bottom-style: solid;\n border-bottom-width: thin;\n background-color: #eee;\n}\n.igv-ui-alert-dialog-container > div:first-child div:first-child {\n padding-left: 8px;\n}\n.igv-ui-alert-dialog-container .igv-ui-alert-dialog-body {\n -webkit-user-select: text;\n -moz-user-select: text;\n -ms-user-select: text;\n user-select: text;\n color: #373737;\n width: 100%;\n height: calc(100% - 24px - 64px);\n overflow-y: scroll;\n}\n.igv-ui-alert-dialog-container .igv-ui-alert-dialog-body .igv-ui-alert-dialog-body-copy {\n margin: 16px;\n width: auto;\n height: auto;\n overflow-wrap: break-word;\n word-break: break-word;\n background-color: white;\n border: unset;\n}\n.igv-ui-alert-dialog-container > div:last-child {\n width: 100%;\n margin-bottom: 10px;\n background-color: white;\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: center;\n align-items: center;\n}\n.igv-ui-alert-dialog-container > div:last-child div {\n margin: unset;\n width: 40px;\n height: 30px;\n line-height: 30px;\n text-align: center;\n color: white;\n font-family: "Open Sans", sans-serif;\n font-size: small;\n font-weight: 400;\n border-color: #2B81AF;\n border-style: solid;\n border-width: thin;\n border-radius: 4px;\n background-color: #2B81AF;\n}\n.igv-ui-alert-dialog-container > div:last-child div:hover {\n cursor: pointer;\n border-color: #25597f;\n background-color: #25597f;\n}\n\n.igv-ui-generic-dialog-container {\n box-sizing: content-box;\n position: fixed;\n top: 20%;\n left: 75%;\n transform: translateX(-50%);\n z-index: 2048;\n background-color: white;\n cursor: pointer;\n width: 300px;\n height: fit-content;\n padding-bottom: 16px;\n border-color: #7F7F7F;\n border-radius: 4px;\n border-style: solid;\n border-width: thin;\n font-family: "Open Sans", sans-serif;\n font-size: medium;\n font-weight: 400;\n display: flex;\n flex-flow: column;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: center;\n}\n.igv-ui-generic-dialog-container .igv-ui-generic-dialog-header {\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: flex-end;\n align-items: center;\n width: 100%;\n height: 24px;\n cursor: move;\n border-top-left-radius: 4px;\n border-top-right-radius: 4px;\n border-bottom-color: #7F7F7F;\n border-bottom-style: solid;\n border-bottom-width: thin;\n background-color: #eee;\n}\n.igv-ui-generic-dialog-container .igv-ui-generic-dialog-header div {\n margin-right: 4px;\n margin-bottom: 2px;\n height: 12px;\n width: 12px;\n color: #7F7F7F;\n}\n.igv-ui-generic-dialog-container .igv-ui-generic-dialog-header div:hover {\n cursor: pointer;\n color: #444;\n}\n.igv-ui-generic-dialog-container .igv-ui-generic-dialog-one-liner {\n color: #373737;\n width: 95%;\n line-height: 24px;\n text-align: left;\n margin-top: 8px;\n padding-left: 8px;\n overflow-wrap: break-word;\n background-color: white;\n}\n.igv-ui-generic-dialog-container .igv-ui-generic-dialog-label-input {\n margin-top: 8px;\n width: 95%;\n height: 24px;\n color: #373737;\n line-height: 24px;\n padding-left: 8px;\n background-color: white;\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: center;\n}\n.igv-ui-generic-dialog-container .igv-ui-generic-dialog-label-input > div {\n width: fit-content;\n height: 100%;\n font-size: 16px;\n text-align: right;\n padding-right: 8px;\n background-color: white;\n}\n.igv-ui-generic-dialog-container .igv-ui-generic-dialog-label-input input {\n display: block;\n height: 100%;\n width: 100%;\n padding-left: 4px;\n font-family: "Open Sans", sans-serif;\n font-weight: 400;\n color: #373737;\n text-align: left;\n outline: none;\n border-style: solid;\n border-width: thin;\n border-color: #7F7F7F;\n background-color: white;\n}\n.igv-ui-generic-dialog-container .igv-ui-generic-dialog-label-input input {\n width: 50%;\n font-size: 16px;\n}\n.igv-ui-generic-dialog-container .igv-ui-generic-dialog-input {\n margin-top: 8px;\n width: calc(100% - 16px);\n height: 24px;\n color: #373737;\n line-height: 24px;\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: space-around;\n align-items: center;\n}\n.igv-ui-generic-dialog-container .igv-ui-generic-dialog-input input {\n display: block;\n height: 100%;\n width: 100%;\n padding-left: 4px;\n font-family: "Open Sans", sans-serif;\n font-weight: 400;\n color: #373737;\n text-align: left;\n outline: none;\n border-style: solid;\n border-width: thin;\n border-color: #7F7F7F;\n background-color: white;\n}\n.igv-ui-generic-dialog-container .igv-ui-generic-dialog-input input {\n font-size: 16px;\n}\n.igv-ui-generic-dialog-container .igv-ui-generic-dialog-input input[type=range] {\n width: 70%;\n -webkit-appearance: none;\n background: linear-gradient(90deg, white, black);\n outline: none;\n margin: 0;\n}\n.igv-ui-generic-dialog-container .igv-ui-generic-dialog-input output {\n display: block;\n height: 100%;\n width: 20%;\n font-size: 16px;\n}\n.igv-ui-generic-dialog-container .igv-ui-generic-dialog-ok-cancel {\n width: 100%;\n height: 28px;\n padding-top: 16px;\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: space-around;\n align-items: center;\n}\n.igv-ui-generic-dialog-container .igv-ui-generic-dialog-ok-cancel > div {\n color: white;\n font-family: "Open Sans", sans-serif;\n font-size: 14px;\n font-weight: 400;\n width: 75px;\n height: 28px;\n line-height: 28px;\n text-align: center;\n border-color: transparent;\n border-style: solid;\n border-width: thin;\n border-radius: 2px;\n}\n.igv-ui-generic-dialog-container .igv-ui-generic-dialog-ok-cancel > div:first-child {\n margin-left: 32px;\n margin-right: 0;\n background-color: #5ea4e0;\n}\n.igv-ui-generic-dialog-container .igv-ui-generic-dialog-ok-cancel > div:last-child {\n margin-left: 0;\n margin-right: 32px;\n background-color: #c4c4c4;\n}\n.igv-ui-generic-dialog-container .igv-ui-generic-dialog-ok-cancel > div:first-child:hover {\n cursor: pointer;\n background-color: #3b5c7f;\n}\n.igv-ui-generic-dialog-container .igv-ui-generic-dialog-ok-cancel > div:last-child:hover {\n cursor: pointer;\n background-color: #7f7f7f;\n}\n\n.igv-ui-generic-container {\n position: fixed;\n top: 20%;\n left: 75%;\n transform: translateX(-50%);\n z-index: 2048;\n background-color: white;\n cursor: pointer;\n box-sizing: content-box;\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n justify-content: flex-start;\n align-items: center;\n}\n.igv-ui-generic-container > div:first-child {\n cursor: move;\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: flex-end;\n align-items: center;\n height: 24px;\n width: 100%;\n background-color: #dddddd;\n}\n.igv-ui-generic-container > div:first-child > div {\n display: block;\n color: #5f5f5f;\n cursor: pointer;\n width: 14px;\n height: 14px;\n margin-right: 8px;\n margin-bottom: 4px;\n}\n\n.igv-ui-generic-container {\n position: fixed;\n top: 20%;\n left: 75%;\n transform: translateX(-50%);\n flex-direction: column;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: center;\n background-color: #eee;\n}\n.igv-ui-generic-container > div:nth-child(2) {\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n justify-content: flex-start;\n align-items: center;\n}\n.igv-ui-generic-container > div:nth-child(3) {\n box-sizing: border-box;\n position: relative;\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: center;\n padding: 0.5rem;\n font-family: "Open Sans", sans-serif;\n font-size: 1rem;\n font-weight: 400;\n width: 100%;\n border-top-style: solid;\n border-top-width: thin;\n border-top-color: #373737;\n}\n.igv-ui-generic-container > div:nth-child(4) {\n width: 100%;\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n justify-content: flex-start;\n align-items: center;\n}\n\n.igv-ui-color-swatch {\n position: relative;\n box-sizing: content-box;\n display: flex;\n flex-flow: row;\n flex-wrap: wrap;\n justify-content: center;\n align-items: center;\n margin: 2px;\n width: 32px;\n height: 32px;\n border-style: solid;\n border-width: 0;\n border-color: white;\n border-radius: 3px;\n}\n\n.igv-ui-color-swatch-shim {\n cursor: pointer;\n position: relative;\n box-sizing: content-box;\n display: flex;\n flex-flow: row;\n flex-wrap: wrap;\n justify-content: center;\n align-items: center;\n width: 32px;\n height: 32px;\n background-color: white;\n border-style: solid;\n border-width: thin;\n border-color: white;\n border-radius: 4px;\n}\n\n.igv-ui-dialog {\n z-index: 2048;\n position: fixed;\n width: fit-content;\n height: fit-content;\n display: flex;\n flex-flow: column;\n flex-wrap: nowrap;\n justify-content: flex-start;\n background-color: white;\n border-color: #7F7F7F;\n border-radius: 4px;\n border-style: solid;\n border-width: thin;\n font-family: "Open Sans", sans-serif;\n font-size: medium;\n font-weight: 400;\n}\n.igv-ui-dialog .igv-ui-dialog-header {\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: flex-end;\n align-items: center;\n width: 100%;\n height: 24px;\n cursor: move;\n border-top-left-radius: 4px;\n border-top-right-radius: 4px;\n border-bottom-color: #7F7F7F;\n border-bottom-style: solid;\n border-bottom-width: thin;\n background-color: #eee;\n}\n.igv-ui-dialog .igv-ui-dialog-header div {\n margin-right: 4px;\n margin-bottom: 2px;\n height: 12px;\n width: 12px;\n color: #7F7F7F;\n}\n.igv-ui-dialog .igv-ui-dialog-header div:hover {\n cursor: pointer;\n color: #444;\n}\n.igv-ui-dialog .igv-ui-dialog-one-liner {\n width: 95%;\n height: 24px;\n line-height: 24px;\n text-align: left;\n margin: 8px;\n overflow-wrap: break-word;\n background-color: white;\n font-weight: bold;\n}\n.igv-ui-dialog .igv-ui-dialog-ok-cancel {\n width: 100%;\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: space-around;\n align-items: center;\n}\n.igv-ui-dialog .igv-ui-dialog-ok-cancel div {\n margin: 16px;\n margin-top: 32px;\n color: white;\n font-family: "Open Sans", sans-serif;\n font-size: 14px;\n font-weight: 400;\n width: 75px;\n height: 28px;\n line-height: 28px;\n text-align: center;\n border-color: transparent;\n border-style: solid;\n border-width: thin;\n border-radius: 2px;\n}\n.igv-ui-dialog .igv-ui-dialog-ok-cancel div:first-child {\n background-color: #5ea4e0;\n}\n.igv-ui-dialog .igv-ui-dialog-ok-cancel div:last-child {\n background-color: #c4c4c4;\n}\n.igv-ui-dialog .igv-ui-dialog-ok-cancel div:first-child:hover {\n cursor: pointer;\n background-color: #3b5c7f;\n}\n.igv-ui-dialog .igv-ui-dialog-ok-cancel div:last-child:hover {\n cursor: pointer;\n background-color: #7f7f7f;\n}\n.igv-ui-dialog .igv-ui-dialog-ok {\n width: 100%;\n height: 36px;\n margin-top: 32px;\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: space-around;\n align-items: center;\n}\n.igv-ui-dialog .igv-ui-dialog-ok div {\n width: 98px;\n height: 36px;\n line-height: 36px;\n text-align: center;\n color: white;\n font-family: "Open Sans", sans-serif;\n font-size: medium;\n font-weight: 400;\n border-color: white;\n border-style: solid;\n border-width: thin;\n border-radius: 4px;\n background-color: #2B81AF;\n}\n.igv-ui-dialog .igv-ui-dialog-ok div:hover {\n cursor: pointer;\n background-color: #25597f;\n}\n\n.igv-ui-panel, .igv-ui-panel-row, .igv-ui-panel-column {\n z-index: 2048;\n background-color: white;\n font-family: "Open Sans", sans-serif;\n font-size: medium;\n font-weight: 400;\n display: flex;\n justify-content: flex-start;\n align-items: flex-start;\n}\n\n.igv-ui-panel-column {\n display: flex;\n flex-direction: column;\n}\n\n.igv-ui-panel-row {\n display: flex;\n flex-direction: row;\n}\n\n.igv-ui-textbox {\n background-color: white;\n font-family: "Open Sans", sans-serif;\n font-size: medium;\n font-weight: 400;\n display: flex;\n justify-content: flex-start;\n align-items: flex-start;\n}\n\n.igv-ui-table {\n background-color: white;\n}\n\n.igv-ui-table thead {\n position: sticky;\n top: 0;\n}\n\n.igv-ui-table th {\n text-align: left;\n}\n\n.igv-ui-table td {\n padding-right: 20px;\n}\n\n.igv-ui-table tr:hover {\n background-color: lightblue;\n}\n\n.igv-ui-center-fixed {\n left: 50%;\n top: 50%;\n transform: translate(-50%, -50%);\n}\n\n.igv-navbar {\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: space-between;\n align-items: center;\n box-sizing: border-box;\n width: 100%;\n color: #444;\n font-size: 12px;\n font-family: "Open Sans", sans-serif;\n font-weight: 400;\n line-height: 32px;\n padding-left: 8px;\n padding-right: 8px;\n margin-top: 2px;\n margin-bottom: 6px;\n height: 32px;\n border-style: solid;\n border-radius: 3px;\n border-width: thin;\n border-color: #bfbfbf;\n background-color: #f3f3f3;\n}\n.igv-navbar .igv-navbar-left-container {\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: space-between;\n align-items: center;\n height: 32px;\n line-height: 32px;\n}\n.igv-navbar .igv-navbar-left-container .igv-logo {\n width: 34px;\n height: 32px;\n margin-right: 8px;\n}\n.igv-navbar .igv-navbar-left-container .igv-current-genome {\n height: 32px;\n margin-left: 4px;\n margin-right: 4px;\n user-select: none;\n line-height: 32px;\n vertical-align: middle;\n text-align: center;\n}\n.igv-navbar .igv-navbar-left-container .igv-navbar-genomic-location {\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: space-between;\n align-items: center;\n height: 100%;\n}\n.igv-navbar .igv-navbar-left-container .igv-navbar-genomic-location .igv-chromosome-select-widget-container {\n display: flex;\n flex-flow: column;\n flex-wrap: nowrap;\n justify-content: space-around;\n align-items: center;\n height: 100%;\n width: 125px;\n margin-right: 4px;\n}\n.igv-navbar .igv-navbar-left-container .igv-navbar-genomic-location .igv-chromosome-select-widget-container select {\n display: block;\n cursor: pointer;\n width: 100px;\n height: 75%;\n outline: none;\n font-size: 12px;\n font-family: "Open Sans", sans-serif;\n font-weight: 400;\n}\n.igv-navbar .igv-navbar-left-container .igv-navbar-genomic-location .igv-locus-size-group {\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: space-between;\n align-items: center;\n margin-left: 8px;\n height: 22px;\n}\n.igv-navbar .igv-navbar-left-container .igv-navbar-genomic-location .igv-locus-size-group .igv-search-container {\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: center;\n width: 240px;\n height: 22px;\n line-height: 22px;\n}\n.igv-navbar .igv-navbar-left-container .igv-navbar-genomic-location .igv-locus-size-group .igv-search-container input.igv-search-input {\n cursor: text;\n width: 85%;\n height: 22px;\n line-height: 22px;\n font-size: 12px;\n font-family: "Open Sans", sans-serif;\n font-weight: 400;\n text-align: left;\n padding-left: 8px;\n margin-right: 8px;\n outline: none;\n border-style: solid;\n border-radius: 3px;\n border-width: thin;\n border-color: #bfbfbf;\n background-color: white;\n}\n.igv-navbar .igv-navbar-left-container .igv-navbar-genomic-location .igv-locus-size-group .igv-search-container .igv-search-icon-container {\n cursor: pointer;\n height: 16px;\n width: 16px;\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: center;\n align-items: center;\n}\n.igv-navbar .igv-navbar-left-container .igv-navbar-genomic-location .igv-locus-size-group .igv-windowsize-panel-container {\n margin-left: 4px;\n user-select: none;\n}\n.igv-navbar .igv-navbar-right-container {\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: space-between;\n align-items: center;\n}\n.igv-navbar .igv-navbar-right-container .igv-navbar-toggle-button-container {\n position: relative;\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: flex-end;\n align-items: center;\n}\n.igv-navbar .igv-navbar-right-container .igv-navbar-toggle-button-container-hidden {\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: center;\n height: 100%;\n}\n.igv-navbar .igv-navbar-right-container .igv-zoom-widget {\n color: #737373;\n font-size: 18px;\n margin-left: 8px;\n user-select: none;\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: flex-end;\n align-items: center;\n}\n.igv-navbar .igv-navbar-right-container .igv-zoom-widget div {\n cursor: pointer;\n margin-left: unset;\n margin-right: unset;\n}\n.igv-navbar .igv-navbar-right-container .igv-zoom-widget div:first-child {\n height: 20px;\n width: 20px;\n margin-left: unset;\n margin-right: 4px;\n}\n.igv-navbar .igv-navbar-right-container .igv-zoom-widget div:last-child {\n height: 20px;\n width: 20px;\n margin-left: 4px;\n margin-right: unset;\n}\n.igv-navbar .igv-navbar-right-container .igv-zoom-widget div:nth-child(even) {\n display: block;\n height: fit-content;\n}\n.igv-navbar .igv-navbar-right-container .igv-zoom-widget input {\n display: block;\n width: 125px;\n}\n.igv-navbar .igv-navbar-right-container .igv-zoom-widget svg {\n display: block;\n}\n.igv-navbar .igv-navbar-right-container .igv-zoom-widget-900 {\n color: #737373;\n font-size: 18px;\n height: 32px;\n line-height: 32px;\n margin-left: 8px;\n user-select: none;\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: flex-end;\n align-items: center;\n}\n.igv-navbar .igv-navbar-right-container .igv-zoom-widget-900 div {\n cursor: pointer;\n margin-left: unset;\n margin-right: unset;\n}\n.igv-navbar .igv-navbar-right-container .igv-zoom-widget-900 div:first-child {\n height: 20px;\n width: 20px;\n margin-left: unset;\n margin-right: 4px;\n}\n.igv-navbar .igv-navbar-right-container .igv-zoom-widget-900 div:last-child {\n height: 20px;\n width: 20px;\n margin-left: 4px;\n margin-right: unset;\n}\n.igv-navbar .igv-navbar-right-container .igv-zoom-widget-900 div:nth-child(even) {\n width: 0;\n height: 0;\n display: none;\n}\n.igv-navbar .igv-navbar-right-container .igv-zoom-widget-900 input {\n width: 0;\n height: 0;\n display: none;\n}\n.igv-navbar .igv-navbar-right-container .igv-zoom-widget-900 svg {\n display: block;\n}\n.igv-navbar .igv-navbar-right-container .igv-zoom-widget-hidden {\n display: none;\n}\n\n.igv-navbar-button {\n display: block;\n box-sizing: unset;\n padding-left: 6px;\n padding-right: 6px;\n height: 18px;\n text-transform: capitalize;\n user-select: none;\n line-height: 18px;\n text-align: center;\n vertical-align: middle;\n font-family: "Open Sans", sans-serif;\n font-size: 11px;\n font-weight: 200;\n color: #737373;\n background-color: #f3f3f3;\n border-color: #737373;\n border-style: solid;\n border-width: thin;\n border-radius: 6px;\n}\n\n.igv-navbar-button:hover {\n cursor: pointer;\n}\n\n.igv-navbar-button-clicked {\n color: white;\n background-color: #737373;\n}\n\n.igv-navbar-icon-button {\n cursor: pointer;\n position: relative;\n width: 24px;\n height: 24px;\n margin-left: 4px;\n margin-right: 4px;\n border: none;\n background-size: contain;\n background-repeat: no-repeat;\n background-position: center;\n}\n.igv-navbar-icon-button > div:first-child {\n z-index: 512;\n position: absolute;\n top: 36px;\n left: -18px;\n width: 24px;\n height: 24px;\n border: none;\n background-size: contain;\n background-repeat: no-repeat;\n background-position: center;\n}\n.igv-navbar-icon-button > div:last-child {\n z-index: 512;\n position: absolute;\n top: 36px;\n left: 18px;\n width: 24px;\n height: 24px;\n border: none;\n background-size: contain;\n background-repeat: no-repeat;\n background-position: center;\n}\n\n.igv-navbar-text-button {\n cursor: pointer;\n position: relative;\n margin-left: 2px;\n margin-right: 2px;\n border: none;\n display: flex;\n justify-content: center;\n align-items: center;\n}\n.igv-navbar-text-button > div:nth-child(2) {\n z-index: 512;\n position: absolute;\n top: 36px;\n left: 0;\n width: 38px;\n height: 18px;\n border: none;\n background-size: contain;\n background-repeat: no-repeat;\n background-position: center;\n}\n.igv-navbar-text-button > div:nth-child(3) {\n z-index: 512;\n position: absolute;\n top: 36px;\n left: 42px;\n width: 38px;\n height: 18px;\n border: none;\n background-size: contain;\n background-repeat: no-repeat;\n background-position: center;\n}\n\n#igv-text-button-label {\n text-anchor: middle;\n dominant-baseline: middle;\n}\n\n.igv-navbar-text-button-svg-inactive rect {\n stroke: #737373;\n fill: white;\n}\n.igv-navbar-text-button-svg-inactive text {\n fill: #737373;\n}\n.igv-navbar-text-button-svg-inactive tspan {\n dominant-baseline: middle;\n}\n\n.igv-navbar-text-button-svg-hover rect {\n stroke: #737373;\n fill: #737373;\n}\n.igv-navbar-text-button-svg-hover text {\n fill: white;\n}\n.igv-navbar-text-button-svg-hover tspan {\n dominant-baseline: middle;\n}\n\n#igv-save-svg-group rect {\n stroke: #737373;\n fill: white;\n}\n#igv-save-svg-group text {\n fill: #737373;\n}\n\n#igv-save-svg-group:hover rect {\n stroke: #737373;\n fill: #737373;\n}\n#igv-save-svg-group:hover text {\n fill: white;\n}\n\n#igv-save-png-group rect {\n stroke: #737373;\n fill: white;\n}\n#igv-save-png-group text {\n fill: #737373;\n}\n\n#igv-save-png-group:hover rect {\n stroke: #737373;\n fill: #737373;\n}\n#igv-save-png-group:hover text {\n fill: white;\n}\n\n.igv-zoom-in-notice-container {\n z-index: 256;\n position: absolute;\n top: 8px;\n left: 50%;\n transform: translate(-50%, 0%);\n display: flex;\n flex-direction: row;\n flex-wrap: nowrap;\n justify-content: center;\n align-items: center;\n background-color: white;\n}\n.igv-zoom-in-notice-container > div {\n padding-left: 4px;\n padding-right: 4px;\n padding-top: 2px;\n padding-bottom: 2px;\n width: 100%;\n height: 100%;\n font-family: "Open Sans", sans-serif;\n font-size: 14px;\n font-weight: 400;\n color: #3f3f3f;\n}\n\n.igv-zoom-in-notice {\n position: absolute;\n top: 10px;\n left: 50%;\n}\n.igv-zoom-in-notice div {\n position: relative;\n left: -50%;\n font-family: "Open Sans", sans-serif;\n font-size: medium;\n font-weight: 400;\n color: #3f3f3f;\n background-color: rgba(255, 255, 255, 0.51);\n z-index: 64;\n}\n\n.igv-container-spinner {\n position: absolute;\n top: 90%;\n left: 50%;\n transform: translate(-50%, -50%);\n z-index: 1024;\n width: 24px;\n height: 24px;\n pointer-events: none;\n color: #737373;\n}\n\n.igv-multi-locus-close-button {\n position: absolute;\n top: 2px;\n right: 0;\n padding-left: 2px;\n padding-right: 2px;\n width: 12px;\n height: 12px;\n color: #666666;\n background-color: white;\n z-index: 1000;\n}\n.igv-multi-locus-close-button > svg {\n vertical-align: top;\n}\n\n.igv-multi-locus-close-button:hover {\n cursor: pointer;\n color: #434343;\n}\n\n.igv-multi-locus-ruler-label {\n z-index: 64;\n position: absolute;\n top: 2px;\n left: 0;\n width: 100%;\n height: 12px;\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: center;\n align-items: center;\n}\n.igv-multi-locus-ruler-label > div {\n font-family: "Open Sans", sans-serif;\n font-size: 12px;\n color: rgb(16, 16, 16);\n background-color: white;\n}\n.igv-multi-locus-ruler-label > div {\n cursor: pointer;\n}\n\n.igv-multi-locus-ruler-label-square-dot {\n z-index: 64;\n position: absolute;\n left: 50%;\n top: 5%;\n transform: translate(-50%, 0%);\n background-color: white;\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: center;\n}\n.igv-multi-locus-ruler-label-square-dot > div:first-child {\n width: 14px;\n height: 14px;\n}\n.igv-multi-locus-ruler-label-square-dot > div:last-child {\n margin-left: 16px;\n font-family: "Open Sans", sans-serif;\n font-size: 14px;\n font-weight: 400;\n color: rgb(16, 16, 16);\n}\n\n.igv-ruler-sweeper {\n display: none;\n pointer-events: none;\n position: absolute;\n top: 26px;\n bottom: 0;\n left: 0;\n width: 0;\n z-index: 99999;\n background-color: rgba(68, 134, 247, 0.25);\n}\n\n.igv-ruler-tooltip {\n pointer-events: none;\n z-index: 128;\n position: absolute;\n top: 0;\n left: 0;\n width: 1px;\n height: 32px;\n background-color: transparent;\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: center;\n}\n.igv-ruler-tooltip > div {\n pointer-events: none;\n width: 128px;\n height: auto;\n padding: 1px;\n color: #373737;\n font-size: 10px;\n font-family: "Open Sans", sans-serif;\n font-weight: 400;\n background-color: white;\n border-style: solid;\n border-width: thin;\n border-color: #373737;\n}\n\n.igv-track-label {\n position: absolute;\n left: 8px;\n top: 8px;\n width: auto;\n height: auto;\n max-width: 50%;\n padding-left: 4px;\n padding-right: 4px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n font-family: "Open Sans", sans-serif;\n font-size: small;\n font-weight: 400;\n text-align: center;\n user-select: none;\n -moz-user-select: none;\n -webkit-user-select: none;\n border-color: #444;\n border-radius: 2px;\n border-style: solid;\n border-width: thin;\n background-color: white;\n z-index: 128;\n cursor: pointer;\n}\n\n.igv-track-label:hover,\n.igv-track-label:focus,\n.igv-track-label:active {\n background-color: #e8e8e8;\n}\n\n.igv-track-label-popup-shim {\n padding-left: 8px;\n padding-right: 8px;\n padding-top: 4px;\n}\n\n.igv-center-line {\n display: none;\n pointer-events: none;\n position: absolute;\n top: 0;\n bottom: 0;\n left: 50%;\n transform: translateX(-50%);\n z-index: 8;\n user-select: none;\n -moz-user-select: none;\n -webkit-user-select: none;\n border-left-style: dashed;\n border-left-width: thin;\n border-right-style: dashed;\n border-right-width: thin;\n}\n\n.igv-center-line-wide {\n background-color: rgba(0, 0, 0, 0);\n border-left-color: rgba(127, 127, 127, 0.51);\n border-right-color: rgba(127, 127, 127, 0.51);\n}\n\n.igv-center-line-thin {\n background-color: rgba(0, 0, 0, 0);\n border-left-color: rgba(127, 127, 127, 0.51);\n border-right-color: rgba(0, 0, 0, 0);\n}\n\n.igv-cursor-guide-horizontal {\n display: none;\n pointer-events: none;\n user-select: none;\n -moz-user-select: none;\n -webkit-user-select: none;\n position: absolute;\n left: 0;\n right: 0;\n top: 50%;\n height: 1px;\n z-index: 32;\n margin-left: 50px;\n margin-right: 54px;\n border-top-style: dotted;\n border-top-width: thin;\n border-top-color: rgba(127, 127, 127, 0.76);\n}\n\n.igv-cursor-guide-vertical {\n pointer-events: none;\n user-select: none;\n -moz-user-select: none;\n -webkit-user-select: none;\n position: absolute;\n top: 0;\n bottom: 0;\n left: 50%;\n width: 1px;\n z-index: 32;\n border-left-style: dotted;\n border-left-width: thin;\n border-left-color: rgba(127, 127, 127, 0.76);\n display: none;\n}\n\n.igv-user-feedback {\n position: fixed;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n width: 512px;\n height: 360px;\n z-index: 2048;\n background-color: white;\n border-color: #a2a2a2;\n border-style: solid;\n border-width: thin;\n font-family: "Open Sans", sans-serif;\n font-size: medium;\n font-weight: 400;\n color: #444;\n display: flex;\n flex-direction: column;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: center;\n}\n.igv-user-feedback div:first-child {\n position: relative;\n height: 24px;\n width: 100%;\n background-color: white;\n border-bottom-color: #a2a2a2;\n border-bottom-style: solid;\n border-bottom-width: thin;\n}\n.igv-user-feedback div:first-child div {\n position: absolute;\n top: 2px;\n width: 16px;\n height: 16px;\n background-color: transparent;\n}\n.igv-user-feedback div:first-child div:first-child {\n left: 8px;\n}\n.igv-user-feedback div:first-child div:last-child {\n cursor: pointer;\n right: 8px;\n}\n.igv-user-feedback div:last-child {\n width: 100%;\n height: calc(100% - 24px);\n border-width: 0;\n}\n.igv-user-feedback div:last-child div {\n width: auto;\n height: auto;\n margin: 8px;\n}\n\n.igv-generic-dialog-container {\n position: fixed;\n top: 20%;\n left: 75%;\n transform: translateX(-50%);\n width: 300px;\n height: 200px;\n border-color: #7F7F7F;\n border-radius: 4px;\n border-style: solid;\n border-width: thin;\n font-family: "Open Sans", sans-serif;\n font-size: medium;\n font-weight: 400;\n z-index: 2048;\n background-color: white;\n display: flex;\n flex-flow: column;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: center;\n}\n.igv-generic-dialog-container .igv-generic-dialog-header {\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: flex-end;\n align-items: center;\n width: 100%;\n height: 24px;\n cursor: move;\n border-top-left-radius: 4px;\n border-top-right-radius: 4px;\n border-bottom-color: #7F7F7F;\n border-bottom-style: solid;\n border-bottom-width: thin;\n background-color: #eee;\n}\n.igv-generic-dialog-container .igv-generic-dialog-header div {\n margin-right: 4px;\n margin-bottom: 2px;\n height: 12px;\n width: 12px;\n color: #7F7F7F;\n}\n.igv-generic-dialog-container .igv-generic-dialog-header div:hover {\n cursor: pointer;\n color: #444;\n}\n.igv-generic-dialog-container .igv-generic-dialog-one-liner {\n color: #373737;\n width: 95%;\n height: 24px;\n line-height: 24px;\n text-align: left;\n margin-top: 8px;\n padding-left: 8px;\n overflow-wrap: break-word;\n background-color: white;\n}\n.igv-generic-dialog-container .igv-generic-dialog-label-input {\n margin-top: 8px;\n width: 95%;\n height: 24px;\n color: #373737;\n line-height: 24px;\n padding-left: 8px;\n background-color: white;\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: center;\n}\n.igv-generic-dialog-container .igv-generic-dialog-label-input div {\n width: 30%;\n height: 100%;\n font-size: 16px;\n text-align: right;\n padding-right: 8px;\n background-color: white;\n}\n.igv-generic-dialog-container .igv-generic-dialog-label-input input {\n display: block;\n height: 100%;\n width: 100%;\n padding-left: 4px;\n font-family: "Open Sans", sans-serif;\n font-weight: 400;\n color: #373737;\n text-align: left;\n outline: none;\n border-style: solid;\n border-width: thin;\n border-color: #7F7F7F;\n background-color: white;\n}\n.igv-generic-dialog-container .igv-generic-dialog-label-input input {\n width: 50%;\n font-size: 16px;\n}\n.igv-generic-dialog-container .igv-generic-dialog-input {\n margin-top: 8px;\n width: calc(100% - 16px);\n height: 24px;\n color: #373737;\n line-height: 24px;\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: space-around;\n align-items: center;\n}\n.igv-generic-dialog-container .igv-generic-dialog-input input {\n display: block;\n height: 100%;\n width: 100%;\n padding-left: 4px;\n font-family: "Open Sans", sans-serif;\n font-weight: 400;\n color: #373737;\n text-align: left;\n outline: none;\n border-style: solid;\n border-width: thin;\n border-color: #7F7F7F;\n background-color: white;\n}\n.igv-generic-dialog-container .igv-generic-dialog-input input {\n font-size: 16px;\n}\n.igv-generic-dialog-container .igv-generic-dialog-ok-cancel {\n width: 100%;\n height: 28px;\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: space-around;\n align-items: center;\n}\n.igv-generic-dialog-container .igv-generic-dialog-ok-cancel div {\n margin-top: 32px;\n color: white;\n font-family: "Open Sans", sans-serif;\n font-size: 14px;\n font-weight: 400;\n width: 75px;\n height: 28px;\n line-height: 28px;\n text-align: center;\n border-color: transparent;\n border-style: solid;\n border-width: thin;\n border-radius: 2px;\n}\n.igv-generic-dialog-container .igv-generic-dialog-ok-cancel div:first-child {\n margin-left: 32px;\n margin-right: 0;\n background-color: #5ea4e0;\n}\n.igv-generic-dialog-container .igv-generic-dialog-ok-cancel div:last-child {\n margin-left: 0;\n margin-right: 32px;\n background-color: #c4c4c4;\n}\n.igv-generic-dialog-container .igv-generic-dialog-ok-cancel div:first-child:hover {\n cursor: pointer;\n background-color: #3b5c7f;\n}\n.igv-generic-dialog-container .igv-generic-dialog-ok-cancel div:last-child:hover {\n cursor: pointer;\n background-color: #7f7f7f;\n}\n.igv-generic-dialog-container .igv-generic-dialog-ok {\n width: 100%;\n height: 36px;\n margin-top: 32px;\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: space-around;\n align-items: center;\n}\n.igv-generic-dialog-container .igv-generic-dialog-ok div {\n width: 98px;\n height: 36px;\n line-height: 36px;\n text-align: center;\n color: white;\n font-family: "Open Sans", sans-serif;\n font-size: medium;\n font-weight: 400;\n border-color: white;\n border-style: solid;\n border-width: thin;\n border-radius: 4px;\n background-color: #2B81AF;\n}\n.igv-generic-dialog-container .igv-generic-dialog-ok div:hover {\n cursor: pointer;\n background-color: #25597f;\n}\n\n.igv-generic-container {\n position: fixed;\n top: 20%;\n left: 75%;\n transform: translateX(-50%);\n z-index: 2048;\n background-color: white;\n cursor: pointer;\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n justify-content: flex-start;\n align-items: center;\n}\n.igv-generic-container > div:nth-child(1) {\n cursor: move;\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: flex-end;\n align-items: center;\n height: 24px;\n width: 100%;\n background-color: #dddddd;\n}\n.igv-generic-container > div:nth-child(1) i {\n display: block;\n color: #5f5f5f;\n cursor: pointer;\n width: 14px;\n height: 14px;\n margin-right: 8px;\n margin-bottom: 4px;\n}\n\n.igv-menu-popup {\n position: absolute;\n top: 0;\n left: 0;\n width: max-content;\n max-width: 400px;\n z-index: 512;\n cursor: pointer;\n font-family: "Open Sans", sans-serif;\n font-size: small;\n font-weight: 400;\n color: #4b4b4b;\n background: white;\n border-radius: 4px;\n border-color: #7F7F7F;\n border-style: solid;\n border-width: thin;\n display: flex;\n flex-flow: column;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: flex-end;\n text-align: left;\n}\n.igv-menu-popup > div:not(:first-child) {\n width: 100%;\n}\n.igv-menu-popup > div:not(:first-child) > div {\n background: white;\n}\n.igv-menu-popup > div:not(:first-child) > div.context-menu {\n padding-left: 4px;\n padding-right: 4px;\n}\n.igv-menu-popup > div:not(:first-child) > div:last-child {\n border-bottom-left-radius: 4px;\n border-bottom-right-radius: 4px;\n border-bottom-color: transparent;\n border-bottom-style: solid;\n border-bottom-width: thin;\n}\n.igv-menu-popup > div:not(:first-child) > div:hover {\n background: #efefef;\n}\n\n.igv-menu-popup-shim {\n padding-left: 8px;\n padding-right: 8px;\n padding-bottom: 1px;\n padding-top: 1px;\n}\n\n.igv-menu-popup-header {\n position: relative;\n width: 100%;\n height: 24px;\n cursor: move;\n border-top-color: transparent;\n border-top-left-radius: 4px;\n border-top-right-radius: 4px;\n border-bottom-color: #7F7F7F;\n border-bottom-style: solid;\n border-bottom-width: thin;\n background-color: #eee;\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: flex-end;\n align-items: center;\n}\n.igv-menu-popup-header div {\n margin-right: 4px;\n height: 12px;\n width: 12px;\n color: #7F7F7F;\n}\n.igv-menu-popup-header div:hover {\n cursor: pointer;\n color: #444;\n}\n\n.igv-menu-popup-check-container {\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: center;\n width: 100%;\n height: 20px;\n margin-right: 4px;\n background-color: transparent;\n}\n.igv-menu-popup-check-container div {\n padding-top: 2px;\n padding-left: 8px;\n}\n.igv-menu-popup-check-container div:first-child {\n position: relative;\n width: 12px;\n height: 12px;\n}\n.igv-menu-popup-check-container div:first-child svg {\n position: absolute;\n width: 12px;\n height: 12px;\n}\n\n.igv-user-feedback {\n position: fixed;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n width: 512px;\n height: 360px;\n z-index: 2048;\n background-color: white;\n border-color: #a2a2a2;\n border-style: solid;\n border-width: thin;\n font-family: "Open Sans", sans-serif;\n font-size: medium;\n font-weight: 400;\n color: #444;\n display: flex;\n flex-direction: column;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: center;\n}\n.igv-user-feedback div:first-child {\n position: relative;\n height: 24px;\n width: 100%;\n background-color: white;\n border-bottom-color: #a2a2a2;\n border-bottom-style: solid;\n border-bottom-width: thin;\n}\n.igv-user-feedback div:first-child div {\n position: absolute;\n top: 2px;\n width: 16px;\n height: 16px;\n background-color: transparent;\n}\n.igv-user-feedback div:first-child div:first-child {\n left: 8px;\n}\n.igv-user-feedback div:first-child div:last-child {\n cursor: pointer;\n right: 8px;\n}\n.igv-user-feedback div:last-child {\n width: 100%;\n height: calc(100% - 24px);\n border-width: 0;\n}\n.igv-user-feedback div:last-child div {\n width: auto;\n height: auto;\n margin: 8px;\n}\n\n.igv-loading-spinner-container {\n z-index: 1024;\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n width: 32px;\n height: 32px;\n display: flex;\n flex-direction: row;\n flex-wrap: nowrap;\n justify-content: center;\n align-items: center;\n}\n.igv-loading-spinner-container > div {\n box-sizing: border-box;\n width: 100%;\n height: 100%;\n border-radius: 50%;\n border: 4px solid rgba(128, 128, 128, 0.5);\n border-top-color: rgb(255, 255, 255);\n animation: spin 1s ease-in-out infinite;\n -webkit-animation: spin 1s ease-in-out infinite;\n}\n\n@keyframes spin {\n to {\n -webkit-transform: rotate(360deg);\n transform: rotate(360deg);\n }\n}\n@-webkit-keyframes spin {\n to {\n -webkit-transform: rotate(360deg);\n transform: rotate(360deg);\n }\n}\n.igv-roi-menu {\n position: absolute;\n z-index: 512;\n font-family: "Open Sans", sans-serif;\n font-size: small;\n font-weight: 400;\n color: #4b4b4b;\n background-color: white;\n width: 192px;\n border-radius: 4px;\n border-color: #7F7F7F;\n border-style: solid;\n border-width: thin;\n display: flex;\n flex-direction: column;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: stretch;\n}\n.igv-roi-menu > div:first-child {\n height: 24px;\n border-top-color: transparent;\n border-top-left-radius: 4px;\n border-top-right-radius: 4px;\n border-bottom-color: #7F7F7F;\n border-bottom-style: solid;\n border-bottom-width: thin;\n background-color: #eee;\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: flex-end;\n align-items: center;\n}\n.igv-roi-menu > div:first-child > div {\n margin-right: 4px;\n height: 12px;\n width: 12px;\n color: #7F7F7F;\n}\n.igv-roi-menu > div:first-child > div:hover {\n cursor: pointer;\n color: #444;\n}\n.igv-roi-menu > div:last-child {\n background-color: white;\n border-bottom-left-radius: 4px;\n border-bottom-right-radius: 4px;\n border-bottom-color: transparent;\n border-bottom-style: solid;\n border-bottom-width: 0;\n display: flex;\n flex-direction: column;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: stretch;\n text-align: start;\n vertical-align: middle;\n}\n.igv-roi-menu > div:last-child > div {\n height: 24px;\n padding-left: 4px;\n border-bottom-style: solid;\n border-bottom-width: thin;\n border-bottom-color: #7f7f7f;\n}\n.igv-roi-menu > div:last-child > div:not(:first-child):hover {\n cursor: pointer;\n background-color: rgba(127, 127, 127, 0.1);\n}\n.igv-roi-menu > div:last-child div:first-child {\n font-style: italic;\n text-align: center;\n padding-right: 4px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n.igv-roi-menu > div:last-child > div:last-child {\n border-bottom-width: 0;\n border-bottom-color: transparent;\n}\n\n.igv-roi-placeholder {\n font-style: normal;\n color: rgba(75, 75, 75, 0.6);\n}\n\n.igv-roi-table {\n position: absolute;\n z-index: 1024;\n display: flex;\n flex-flow: column;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: stretch;\n resize: both;\n overflow: hidden;\n width: min-content;\n max-width: 1600px;\n border-color: #7f7f7f;\n border-radius: 4px;\n border-style: solid;\n border-width: thin;\n font-family: "Open Sans", sans-serif;\n font-size: 12px;\n font-weight: 400;\n background-color: white;\n cursor: default;\n}\n.igv-roi-table > div {\n height: 24px;\n font-size: 14px;\n text-align: start;\n vertical-align: middle;\n line-height: 24px;\n}\n.igv-roi-table > div:first-child {\n border-color: transparent;\n border-top-left-radius: 4px;\n border-top-right-radius: 4px;\n border-top-width: 0;\n border-bottom-color: #7f7f7f;\n border-bottom-style: solid;\n border-bottom-width: thin;\n background-color: #eee;\n cursor: move;\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: space-between;\n align-items: center;\n}\n.igv-roi-table > div:first-child > div:first-child {\n text-align: center;\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n margin-left: 4px;\n margin-right: 4px;\n width: calc(100% - 4px - 12px);\n}\n.igv-roi-table > div:first-child > div:last-child {\n margin-right: 4px;\n margin-bottom: 2px;\n height: 12px;\n width: 12px;\n color: #7f7f7f;\n}\n.igv-roi-table > div:first-child > div:last-child > svg {\n display: block;\n}\n.igv-roi-table > div:first-child > div:last-child:hover {\n cursor: pointer;\n color: #444;\n}\n.igv-roi-table > .igv-roi-table-description {\n padding: 4px;\n margin-left: 4px;\n word-break: break-all;\n overflow-y: auto;\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n background-color: transparent;\n}\n.igv-roi-table > .igv-roi-table-goto-explainer {\n margin-top: 5px;\n margin-left: 4px;\n color: #7F7F7F;\n font-style: italic;\n height: 24px;\n border-top: solid lightgray;\n background-color: transparent;\n}\n.igv-roi-table > .igv-roi-table-column-titles {\n height: 24px;\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: stretch;\n align-items: stretch;\n padding-right: 16px;\n background-color: white;\n border-top-color: #7f7f7f;\n border-top-style: solid;\n border-top-width: thin;\n border-bottom-color: #7f7f7f;\n border-bottom-style: solid;\n border-bottom-width: thin;\n}\n.igv-roi-table > .igv-roi-table-column-titles > div {\n font-size: 14px;\n vertical-align: middle;\n line-height: 24px;\n text-align: left;\n margin-left: 4px;\n height: 24px;\n overflow: hidden;\n text-overflow: ellipsis;\n border-right-color: #7f7f7f;\n border-right-style: solid;\n border-right-width: thin;\n}\n.igv-roi-table > .igv-roi-table-column-titles > div:last-child {\n border-right: unset;\n}\n.igv-roi-table > .igv-roi-table-row-container {\n display: flex;\n flex-flow: column;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: stretch;\n overflow: auto;\n height: 360px;\n flex: 1 1 auto;\n background-color: transparent;\n}\n.igv-roi-table > .igv-roi-table-row-container > .igv-roi-table-row {\n height: 24px;\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: stretch;\n align-items: stretch;\n}\n.igv-roi-table > .igv-roi-table-row-container > .igv-roi-table-row > div {\n font-size: 14px;\n vertical-align: middle;\n line-height: 24px;\n text-align: left;\n margin-left: 4px;\n height: 24px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n border-right-color: transparent;\n border-right-style: solid;\n border-right-width: thin;\n}\n.igv-roi-table > .igv-roi-table-row-container > .igv-roi-table-row > div:last-child {\n border-right: unset;\n}\n.igv-roi-table > .igv-roi-table-row-container > .igv-roi-table-row-hover {\n background-color: rgba(0, 0, 0, 0.04);\n}\n.igv-roi-table > div:last-child {\n min-height: 32px;\n height: 32px;\n line-height: 32px;\n border-top-color: #7f7f7f;\n border-top-style: solid;\n border-top-width: thin;\n border-bottom-color: transparent;\n border-bottom-left-radius: 4px;\n border-bottom-right-radius: 4px;\n border-bottom-width: 0;\n background-color: #eee;\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: space-around;\n align-items: center;\n}\n\n.igv-roi-table-row-selected {\n background-color: rgba(0, 0, 0, 0.125);\n}\n\n.igv-roi-table-button {\n cursor: pointer;\n height: 20px;\n user-select: none;\n line-height: 20px;\n text-align: center;\n vertical-align: middle;\n font-family: "Open Sans", sans-serif;\n font-size: 13px;\n font-weight: 400;\n color: black;\n padding-left: 6px;\n padding-right: 6px;\n background-color: rgb(239, 239, 239);\n border-color: black;\n border-style: solid;\n border-width: thin;\n border-radius: 3px;\n}\n\n.igv-roi-table-button:hover {\n font-weight: 400;\n background-color: rgba(0, 0, 0, 0.13);\n}\n\n.igv-roi-region {\n z-index: 64;\n position: absolute;\n top: 0;\n bottom: 0;\n pointer-events: none;\n overflow: visible;\n display: flex;\n flex-direction: column;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: stretch;\n}\n.igv-roi-region > div {\n position: relative;\n width: 100%;\n height: 8px;\n pointer-events: auto;\n}\n\n.igv-roi-menu-row {\n height: 24px;\n padding-left: 8px;\n font-size: small;\n text-align: start;\n vertical-align: middle;\n line-height: 24px;\n background-color: white;\n}\n\n.igv-roi-menu-row-edit-description {\n width: -webkit-fill-available;\n font-size: small;\n text-align: start;\n vertical-align: middle;\n background-color: white;\n padding-left: 4px;\n padding-right: 4px;\n padding-bottom: 4px;\n display: flex;\n flex-direction: column;\n flex-wrap: nowrap;\n justify-content: stretch;\n align-items: stretch;\n}\n.igv-roi-menu-row-edit-description > label {\n margin-left: 2px;\n margin-bottom: 0;\n display: block;\n width: -webkit-fill-available;\n}\n.igv-roi-menu-row-edit-description > input {\n display: block;\n margin-left: 2px;\n margin-right: 2px;\n margin-bottom: 1px;\n width: -webkit-fill-available;\n}\n\n.picker_wrapper.no_alpha .picker_alpha {\n display: none;\n}\n\n.picker_wrapper.no_editor .picker_editor {\n position: absolute;\n z-index: -1;\n opacity: 0;\n}\n\n.picker_wrapper.no_cancel .picker_cancel {\n display: none;\n}\n\n.layout_default.picker_wrapper {\n display: flex;\n flex-flow: row wrap;\n justify-content: space-between;\n align-items: stretch;\n font-size: 10px;\n width: 25em;\n padding: 0.5em;\n}\n\n.layout_default.picker_wrapper input, .layout_default.picker_wrapper button {\n font-size: 1rem;\n}\n\n.layout_default.picker_wrapper > * {\n margin: 0.5em;\n}\n\n.layout_default.picker_wrapper::before {\n content: "";\n display: block;\n width: 100%;\n height: 0;\n order: 1;\n}\n\n.layout_default .picker_slider, .layout_default .picker_selector {\n padding: 1em;\n}\n\n.layout_default .picker_hue {\n width: 100%;\n}\n\n.layout_default .picker_sl {\n flex: 1 1 auto;\n}\n\n.layout_default .picker_sl::before {\n content: "";\n display: block;\n padding-bottom: 100%;\n}\n\n.layout_default .picker_editor {\n order: 1;\n width: 6.5rem;\n}\n\n.layout_default .picker_editor input {\n width: 100%;\n height: 100%;\n}\n\n.layout_default .picker_sample {\n order: 1;\n flex: 1 1 auto;\n}\n\n.layout_default .picker_done, .layout_default .picker_cancel {\n order: 1;\n}\n\n.picker_wrapper {\n box-sizing: border-box;\n background: #f2f2f2;\n box-shadow: 0 0 0 1px silver;\n cursor: default;\n font-family: sans-serif;\n color: #444;\n pointer-events: auto;\n}\n\n.picker_wrapper:focus {\n outline: none;\n}\n\n.picker_wrapper button, .picker_wrapper input {\n box-sizing: border-box;\n border: none;\n box-shadow: 0 0 0 1px silver;\n outline: none;\n}\n\n.picker_wrapper button:focus, .picker_wrapper button:active, .picker_wrapper input:focus, .picker_wrapper input:active {\n box-shadow: 0 0 2px 1px #1e90ff;\n}\n\n.picker_wrapper button {\n padding: 0.4em 0.6em;\n cursor: pointer;\n background-color: #f5f5f5;\n background-image: linear-gradient(0deg, gainsboro, transparent);\n}\n\n.picker_wrapper button:active {\n background-image: linear-gradient(0deg, transparent, gainsboro);\n}\n\n.picker_wrapper button:hover {\n background-color: #fff;\n}\n\n.picker_selector {\n position: absolute;\n z-index: 1;\n display: block;\n -webkit-transform: translate(-50%, -50%);\n transform: translate(-50%, -50%);\n border: 2px solid #fff;\n border-radius: 100%;\n box-shadow: 0 0 3px 1px #67b9ff;\n background: currentColor;\n cursor: pointer;\n}\n\n.picker_slider .picker_selector {\n border-radius: 2px;\n}\n\n.picker_hue {\n position: relative;\n background-image: linear-gradient(90deg, red, yellow, lime, cyan, blue, magenta, red);\n box-shadow: 0 0 0 1px silver;\n}\n\n.picker_sl {\n position: relative;\n box-shadow: 0 0 0 1px silver;\n background-image: linear-gradient(180deg, white, rgba(255, 255, 255, 0) 50%), linear-gradient(0deg, black, rgba(0, 0, 0, 0) 50%), linear-gradient(90deg, #808080, rgba(128, 128, 128, 0));\n}\n\n.picker_alpha, .picker_sample {\n position: relative;\n background: linear-gradient(45deg, lightgrey 25%, transparent 25%, transparent 75%, lightgrey 75%) 0 0/2em 2em, linear-gradient(45deg, lightgrey 25%, white 25%, white 75%, lightgrey 75%) 1em 1em/2em 2em;\n box-shadow: 0 0 0 1px silver;\n}\n\n.picker_alpha .picker_selector, .picker_sample .picker_selector {\n background: none;\n}\n\n.picker_editor input {\n font-family: monospace;\n padding: 0.2em 0.4em;\n}\n\n.picker_sample::before {\n content: "";\n position: absolute;\n display: block;\n width: 100%;\n height: 100%;\n background: currentColor;\n}\n\n.picker_arrow {\n position: absolute;\n z-index: -1;\n}\n\n.picker_wrapper.popup {\n position: absolute;\n z-index: 2;\n margin: 1.5em;\n}\n\n.picker_wrapper.popup, .picker_wrapper.popup .picker_arrow::before, .picker_wrapper.popup .picker_arrow::after {\n background: #f2f2f2;\n box-shadow: 0 0 10px 1px rgba(0, 0, 0, 0.4);\n}\n\n.picker_wrapper.popup .picker_arrow {\n width: 3em;\n height: 3em;\n margin: 0;\n}\n\n.picker_wrapper.popup .picker_arrow::before, .picker_wrapper.popup .picker_arrow::after {\n content: "";\n display: block;\n position: absolute;\n top: 0;\n left: 0;\n z-index: -99;\n}\n\n.picker_wrapper.popup .picker_arrow::before {\n width: 100%;\n height: 100%;\n -webkit-transform: skew(45deg);\n transform: skew(45deg);\n -webkit-transform-origin: 0 100%;\n transform-origin: 0 100%;\n}\n\n.picker_wrapper.popup .picker_arrow::after {\n width: 150%;\n height: 150%;\n box-shadow: none;\n}\n\n.popup.popup_top {\n bottom: 100%;\n left: 0;\n}\n\n.popup.popup_top .picker_arrow {\n bottom: 0;\n left: 0;\n -webkit-transform: rotate(-90deg);\n transform: rotate(-90deg);\n}\n\n.popup.popup_bottom {\n top: 100%;\n left: 0;\n}\n\n.popup.popup_bottom .picker_arrow {\n top: 0;\n left: 0;\n -webkit-transform: rotate(90deg) scale(1, -1);\n transform: rotate(90deg) scale(1, -1);\n}\n\n.popup.popup_left {\n top: 0;\n right: 100%;\n}\n\n.popup.popup_left .picker_arrow {\n top: 0;\n right: 0;\n -webkit-transform: scale(-1, 1);\n transform: scale(-1, 1);\n}\n\n.popup.popup_right {\n top: 0;\n left: 100%;\n}\n\n.popup.popup_right .picker_arrow {\n top: 0;\n left: 0;\n}\n\n.igv-container {\n position: relative;\n display: flex;\n flex-direction: column;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: flex-start;\n padding-top: 4px;\n user-select: none;\n -webkit-user-select: none;\n -ms-user-select: none;\n min-height: 160px;\n}\n\n.igv-viewport {\n position: relative;\n margin-top: 5px;\n line-height: 1;\n overflow-x: hidden;\n overflow-y: hidden;\n}\n\n.igv-viewport-content {\n position: relative;\n width: 100%;\n}\n.igv-viewport-content > canvas {\n position: relative;\n display: block;\n}\n\n.igv-column-container {\n position: relative;\n display: flex;\n flex-direction: row;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: stretch;\n width: 100%;\n}\n\n.igv-column-shim {\n width: 1px;\n margin-left: 2px;\n margin-right: 2px;\n background-color: #545453;\n}\n\n.igv-axis-column {\n position: relative;\n display: flex;\n flex-direction: column;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: flex-start;\n box-sizing: border-box;\n height: 100%;\n width: 50px;\n}\n.igv-axis-column > div {\n position: relative;\n margin-top: 5px;\n width: 100%;\n}\n.igv-axis-column > div > div {\n z-index: 512;\n position: absolute;\n top: 8px;\n left: 8px;\n width: fit-content;\n height: fit-content;\n background-color: transparent;\n display: grid;\n align-items: start;\n justify-items: center;\n}\n.igv-axis-column > div > div > input {\n display: block;\n margin: unset;\n cursor: pointer;\n}\n\n.igv-column {\n position: relative;\n position: relative;\n display: flex;\n flex-direction: column;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: flex-start;\n box-sizing: border-box;\n height: 100%;\n}\n\n.igv-sample-info-column {\n position: relative;\n display: flex;\n flex-direction: column;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: flex-start;\n box-sizing: border-box;\n height: 100%;\n}\n\n.igv-sample-name-column {\n position: relative;\n display: flex;\n flex-direction: column;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: flex-start;\n box-sizing: border-box;\n height: 100%;\n}\n\n.igv-scrollbar-column {\n position: relative;\n display: flex;\n flex-direction: column;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: flex-start;\n box-sizing: border-box;\n height: 100%;\n width: 14px;\n}\n.igv-scrollbar-column > div {\n position: relative;\n margin-top: 5px;\n width: 14px;\n}\n.igv-scrollbar-column > div > div {\n cursor: pointer;\n position: absolute;\n top: 0;\n left: 2px;\n width: 8px;\n border-width: 1px;\n border-style: solid;\n border-color: #c4c4c4;\n border-top-left-radius: 4px;\n border-top-right-radius: 4px;\n border-bottom-left-radius: 4px;\n border-bottom-right-radius: 4px;\n}\n.igv-scrollbar-column > div > div:hover {\n background-color: #c4c4c4;\n}\n\n.igv-track-drag-column {\n position: relative;\n display: flex;\n flex-direction: column;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: flex-start;\n box-sizing: border-box;\n height: 100%;\n width: 12px;\n background-color: white;\n}\n.igv-track-drag-column > .igv-track-drag-handle {\n z-index: 512;\n position: relative;\n cursor: pointer;\n margin-top: 5px;\n width: 100%;\n border-style: solid;\n border-width: 0;\n border-top-right-radius: 6px;\n border-bottom-right-radius: 6px;\n}\n.igv-track-drag-column .igv-track-drag-handle-color {\n background-color: #c4c4c4;\n}\n.igv-track-drag-column .igv-track-drag-handle-hover-color {\n background-color: #787878;\n}\n.igv-track-drag-column .igv-track-drag-handle-selected-color {\n background-color: #0963fa;\n}\n.igv-track-drag-column > .igv-track-drag-shim {\n position: relative;\n margin-top: 5px;\n width: 100%;\n border-style: solid;\n border-width: 0;\n}\n\n.igv-gear-menu-column {\n position: relative;\n display: flex;\n flex-direction: column;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: flex-start;\n box-sizing: border-box;\n height: 100%;\n width: 28px;\n}\n.igv-gear-menu-column > div {\n display: flex;\n flex-direction: column;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: center;\n margin-top: 5px;\n width: 100%;\n background: white;\n}\n.igv-gear-menu-column > div > div {\n position: relative;\n margin-top: 4px;\n width: 16px;\n height: 16px;\n color: #7F7F7F;\n}\n.igv-gear-menu-column > div > div:hover {\n cursor: pointer;\n color: #444;\n}\n\n.igv-vertical-center {\n margin: 0 !important;\n top: 50% !important;\n -ms-transform: translateY(-50%) !important;\n transform: translateY(-50%) !important;\n}\n\n/*# sourceMappingURL=igv.css.map */\n'),n.adoptedStyleSheets=[e]}if(this.root=t({class:"igv-container"}),n.appendChild(this.root),this.alert=new Os(this.root),this.columnContainer=t({class:"igv-column-container"}),this.root.appendChild(this.columnContainer),this.menuPopup=new pd(this.columnContainer),this.menuUtils=new or(this),this.initialize(e),this.trackViews=[],this.constants={dragThreshold:3,scrollThreshold:5,defaultColor:"rgb(0,0,150)",doubleClickDelay:e.doubleClickDelay||500},this.eventHandlers={},e.listeners)for(let t of Object.keys(e.listeners))this.on(t,e.listeners[t]);this.on("trackremoved",(()=>{0===this.findTracks((e=>"function"==typeof e.getSamples)).length&&(this.sampleInfoControl.setButtonVisibility(!1),this.sampleNameViewportWidth=void 0,this.showSampleNames=!1,this.sampleNameControl.setState(this.showSampleNames),this.sampleNameControl.hide(),this.layoutChange())})),this.on("didchangecolumnlayout",(()=>{if(zh.length>0){const e=zh.length;for(let t=0;t<e;t++)zh[t].dispose();zh.length=0}})),this.addEventHandlers(),this.sampleInfo=new rd(this),this.createStandardControls(e),this.roiManager=new mv(this),this.previousTrackColors=[]}get doShowROITable(){return this.roiManager.roiTableIsVisible()}initialize(e){this.flanking=e.flanking,this.crossDomainProxy=e.crossDomainProxy,this.formats=e.formats,this.trackDefaults=e.trackDefaults,this.nucleotideColors=e.nucleotideColors||Bo;for(let e of Object.keys(this.nucleotideColors))this.nucleotideColors[e.toLowerCase()]=this.nucleotideColors[e];this.doShowTrackLabels=e.showTrackLabels,this.doShowCenterLine=e.showCenterGuide,this.doShowCursorGuide=e.showCursorGuide,this.showSampleNames=e.showSampleNames,this.sampleNameViewportWidth=void 0,e.sampleNameViewportWidth&&(this.sampleNameViewportWidth=e.sampleNameViewportWidth),e.search&&(this.searchConfig={type:"json",url:e.search.url,coords:void 0===e.search.coords?1:e.search.coords,chromosomeField:e.search.chromosomeField||"chromosome",startField:e.search.startField||"start",endField:e.search.endField||"end",geneField:e.search.geneField||"gene",snpField:e.search.snpField||"snp",resultsField:e.search.resultsField})}createStandardControls(e){this.setTrackLabelVisibility(e.showTrackLabels),this.navbar=new av(e,this),this.columnContainer.parentNode.insertBefore(this.navbar.navigation,this.columnContainer),!1===e.showControls&&this.navbar.hide(),this.cursorGuide=new Mv(this.columnContainer,this),this.inputDialog=new vs(this.root),this.inputDialog.container.id=`igv-input-dialog-${o()}`,this.dataRangeDialog=new ur(this,this.root),this.dataRangeDialog.container.id=`igv-data-range-dialog-${o()}`,this.genericColorPicker=new Ls({parent:this.root,width:180}),this.genericColorPicker.container.id=`igv-track-color-picker-${o()}`,this.sliderDialog=new Rv(this.root),this.sliderDialog.container.id=`igv-slider-dialog-${o()}`}getSampleNameViewportWidth(){return void 0===this.sampleNameViewportWidth||!1===this.showSampleNames?0:this.sampleNameViewportWidth}getSampleInfoViewportWidth(){return this.getSampleInfoColumnWidth()}isMultiLocusMode(){return this.referenceFrameList&&this.referenceFrameList.length>1}isMultiLocusWholeGenomeView(){if(void 0===this.referenceFrameList||1===this.referenceFrameList.length)return!1;for(let e of this.referenceFrameList)if("all"===e.chr.toLowerCase())return!0;return!1}currentLoci(){const e=e=>`${e.chr}:${e.start+1}-${e.end}`;return void 0===this.referenceFrameList||0===this.referenceFrameList.length?"":1===this.referenceFrameList.length?e(this.referenceFrameList[0]):this.referenceFrameList.map((t=>e(t)))}toSVG(){const{x:e,y:t,width:i,height:n}=this.columnContainer.getBoundingClientRect(),r=new _h({width:i,height:n,backdropColor:"white",multiLocusGap:0,viewbox:{x:0,y:0,width:i,height:n}}),s={deltaX:0,deltaY:-t};for(let e of this.trackViews)e.renderSVGContext(r,s);return s.deltaX=e,this.roiManager.renderSVGContext(this.columnContainer,r,s),r.getSerializedSvg(!0)}saveSVGtoFile(e,t){let i=this.toSVG();if(t){const e=document.createElement("svg");e.innerHTML=i,t.appendChild(e)}const n=e||"igvjs.svg",r=URL.createObjectURL(new Blob([i],{type:"application/octet-stream"}));x(n,r),URL.revokeObjectURL(r)}savePNGtoFile(e){const t=this.toSVG(),i=new Blob([t],{type:"image/svg+xml"}),n=URL.createObjectURL(i),r=document.createElement("img");r.addEventListener("load",(()=>{const t=this.columnContainer.getBoundingClientRect(),i=window.devicePixelRatio,s=t.width*i,o=t.height*i,a=document.createElement("canvas");a.width=s,a.height=o;const c=a.getContext("2d");c.scale(i,i),c.drawImage(r,0,0);const l=a.toDataURL("image/png");x(e=e||"igvjs.png",l),URL.revokeObjectURL(n)})),r.src=n}async loadSession(e){let t;return this.sampleInfo.initialize(),this.roiSets=[],t=e.url||e.file?await Bv.loadSessionFile(e):e,this.loadSessionObject(t)}static async loadSessionFile(e){const t=e.url||e.file;let i;if(e.url&&b(e.url)&&(e.url.startsWith("blob:")||e.url.startsWith("data:"))){const t=Bv.uncompressSession(e.url);i=JSON.parse(t)}else{let n=e.filename;if(n||(n=e.url?await Ks(e.url):e.file.name),n.endsWith(".xml")){const e=Mh.KNOWN_GENOMES,n=await Mn.loadString(t);i=new VF(n,e)}else if(n.endsWith("hub.txt")){i={reference:(await kh.loadHub(t,e)).getGenomeConfig()}}else{if(!n.endsWith(".json"))throw Error("Unrecognized session file format:"+n);i=await Mn.loadJson(t)}}return Ov(i)}async loadSessionObject(e){this.cleanHouseForSession(),this.config=e,e.browsers&&(e=await async function(e){const t=e.browsers[0],i={},n=new jd({url:t.url});await n.readHeaderAndFooter(),i.sampleNameViewportWidth=20,i.genome="hg38";const r=t.state.split(","),s=n.bpResolutions[Number.parseInt(r[2])],o=Number.parseInt(r[0]),a=Math.floor(Number.parseFloat(r[3])*s),c=a+Math.floor(1700*s);return i.locus=`${n.chromosomes[o].name}:${a}-${c}`,i.tracks=(t.tracks||[]).filter((e=>!("refgene"===e.format||"cellType"===e.name))),i.tracks.push({type:"shoebox",url:t.url,name:t.name,colorScale:t.colorScale,_hicFile:n}),i}(e)),this.navbar.sampleInfoControl.setButtonVisibility(!1),this.showSampleNames=e.showSampleNames||!1,this.navbar.sampleNameControl.setState(!0===this.showSampleNames),e.sampleNameViewportWidth&&(this.sampleNameViewportWidth=e.sampleNameViewportWidth),Zs(this.columnContainer,"igv-axis-column"),Zs(this.columnContainer,"igv-sample-info-column"),Zs(this.columnContainer,"igv-sample-name-column"),Zs(this.columnContainer,"igv-scrollbar-column"),Zs(this.columnContainer,"igv-track-drag-column"),Zs(this.columnContainer,"igv-gear-menu-column");const t=e.reference||e.genome;if(!t)return void console.warn("No genome or reference object specified");const i=b(t)?await Mh.expandReference(this.alert,t):t;if(await this.loadReference(i,i.locus||e.locus),this.centerLineList=this.createCenterLineList(this.columnContainer),!1!==e.showIdeogram){const e=new MF(this),t=new kd(this,this.columnContainer,e);this.trackViews.push(t)}if(!1!==e.showRuler){const e=new ld(this),t=new kd(this,this.columnContainer,e);this.trackViews.push(t)}e.qtlSelections&&(this.qtlSelections=Ev.fromJSON(e.qtlSelections)),void 0!==e.showROIOverlays&&(this.roiManager.showOverlays=e.showROIOverlays),this.roiManager.clearROIs(),e.roi?this.roiManager.loadROI(e.roi):await this.roiManager.reset();const n=[];if(e.sampleinfo)for(const t of e.sampleinfo)t.file?n.push(t.file):this.loadSampleInfo(t);const r=i.tracks||[],s=e.tracks?r.concat(e.tracks):r;0===s.filter((e=>"sequence"===e.type&&!e.url&&!e.fastaURL)).length&&s.push({type:"sequence",order:ah,removable:!1});const o=s.filter((e=>void 0!==e.file)).map((({file:e})=>e)),a=s.filter((e=>void 0!==e.indexFile)).map((({indexFile:e})=>e));a.length>0&&o.push(...a),n.length>0&&o.push(...n),o.length>0&&alert(`Local files cannot be loaded automatically.\nThis session contains references to these local files:\n${o.map((e=>` ${e}`)).join("\n")}`);const c=s.filter((e=>void 0===e.file));let l=1;for(let e of c)void 0===e.order&&(e.order=l++);await this.loadTrackList(c);for(let e of this.trackViews.filter((e=>"ruler"===e.track.type||"ideogram"===e.track.type)))await e.updateViews();return this.trackViews.some((e=>e.track.selected))&&this.navbar.setEnableTrackSelection(!0),this.updateUIWithReferenceFrameList(),this.updateLocusSearchWidget(),s}cleanHouseForSession(){for(let e of this.trackViews)e.removeDOMFromColumnContainer();this.columnContainer.querySelectorAll(".igv-axis-column, .igv-column-shim, .igv-column, .igv-sample-info-column, .igv-sample-name-column, .igv-scrollbar-column, .igv-track-drag-column, .igv-gear-menu-column").forEach((e=>e.remove())),this.trackViews=[],this.circularView&&this.circularView.clearChords()}async loadReference(e,t){let i;this.removeAllTracks(),this.roiManager.clearROIs(),this.navbar.setEnableTrackSelection(!1),i=e.gbkURL?await Bl(e.gbkURL):await Sv.createGenome(e,this);const n=void 0===this.genome||this.genome.id!==i.id;this.genome=i,this.navbar.updateGenome(i);let r=t||i.initialLocus;Array.isArray(r)&&(r=r.join(" "));if(!await this.search(r,!0))throw new Error(`Cannot set initial locus ${r}`);if(n){let t;if(e.hubURL){t=(await kh.loadHub(e.hubURL)).getGroupedTrackConfigurations()}this.fireEvent("genomechange",[{genome:i,trackConfigurations:t}]),this.circularView&&this.circularView.setAssembly({name:this.genome.id,id:this.genome.id,chromosomes:$f(this.genome)})}}async loadGenome(e){let t;e.genarkAccession&&(e.url=xh(e.genarkAccession)),e.url&&(b(e.url)&&e.url.endsWith("/hub.txt")?(e.hubURL=e.url,delete e.url):"gbk"===function(e){let t;if(e instanceof File)t=e.name;else{if("string"!=typeof e)throw new Error("Input must be a File object or a URL string");t=e}const i=t.split(".").pop();return i.split("?")[0]}(e.url)&&(e.gbkURL=e.url,delete e.url));if(e.hubURL||e.url&&b(e.url)&&e.url.endsWith("/hub.txt")){t=(await kh.loadHub(e.hubURL||e.url,e)).getGenomeConfig()}else t=b(e)||!(e.url||e.fastaURL||e.twoBitURL||e.gbkURL)?await Mh.expandReference(this.alert,e):e;let i;await this.loadReference(t),i=t.gbkURL||"gbk"===t.format?[{name:"Annotations",format:"gbk",url:t.gbkURL}]:t.tracks||[];return 0===i.filter((e=>"sequence"===e.type)).length&&i.push({type:"sequence",order:ah}),await this.loadTrackList(i),await this.updateViews(),this.genome}async loadTrackHub(e){const t=Ov((await kh.loadHub(e.url,e)).getGenomeConfig());return this.loadGenome(t)}updateUIWithReferenceFrameList(){const e=this.referenceFrameList;this.isMultiLocusWholeGenomeView()||Mh.isWholeGenomeView(e[0].chr),this.navbar.navbarDidResize(),Hv(this.trackViews,this.doShowTrackLabels),this.doShowCenterLine&&Mh.isWholeGenomeView(e[0].chr)&&this.navbar.centerLineButton.boundMouseClickHandler(),this.doShowCursorGuide&&Mh.isWholeGenomeView(e[0].chr)&&this.navbar.cursorGuideButton.boundMouseClickHandler(),this.setCenterLineAndCenterLineButtonVisibility(Mh.isWholeGenomeView(e[0].chr))}setCenterLineAndCenterLineButtonVisibility(e){e?this.navbar.centerLineButton.setVisibility(!1):this.navbar.centerLineButton.setVisibility(this.config.showCenterGuideButton);for(let t of this.centerLineList)e?this.setCenterLineVisibility(!e):this.setCenterLineVisibility(this.doShowCenterLine)}setTrackLabelVisibility(e){Hv(this.trackViews,e)}setROITableVisibility(e){!0===e?this.roiManager.presentTable():this.roiManager.dismissTable()}setCursorGuideVisibility(e){e?this.cursorGuide.show():this.cursorGuide.hide()}setCustomCursorGuideMouseHandler(e){this.cursorGuide.customMouseHandler=e}setCenterLineVisibility(e){for(let t of this.centerLineList)!0===e?(t.show(),t.repaint()):t.hide()}async loadTrackList(e){let t=0;for(let i of e)void 0===i.order&&(i.order=t++);const i=[];for(let t of e)i.push(this._loadTrack(t));const n=await Promise.all(i);return this.trackViews.filter((function(e){return e.track.autoscaleGroup})).length>0&&this.updateViews(),n}async loadTrack(e){e.sync=!1!==e.sync;const t=this._loadTrack(e);return t&&e.autoscaleGroup&&(await t,this.updateViews()),t}async _loadTrack(e){b(e)&&(e=JSON.parse(e));try{if(e.hidden){const t=Hl(e,this.genome);return void await t.getFeatures({chr:"1",start:0,end:Number.MAX_SAFE_INTEGER})}const t=await this.createTrack(e);if("sampleinfo"===e.type)return void this.layoutChange();if(void 0===t)return;return this.addTrack(e,t)}catch(t){let i=t.message||t.error||t.toString();const n={401:"Access unauthorized",403:"Access forbidden",404:"Not found"};n.hasOwnProperty(i)&&(i=n[i]),i=`${i} : ${_(e.url)?e.url.name:e.url}`;const r=new Error(i);throw console.error(r),r}}async addTrack(e,t){void 0===t.order&&(t.order=this.trackViews.length);const i=new kd(this,this.columnContainer,t);if(this.trackViews.push(i),Hv(this.trackViews,this.doShowTrackLabels),"function"==typeof t.postInit)try{i.startSpinner(),await t.postInit()}finally{i.stopSpinner()}return t.autoscaleGroup||(e.sync?await i.updateViews():i.updateViews()),"function"==typeof t.hasSamples&&t.hasSamples()&&(this.sampleInfo.hasAttributes()&&this.sampleInfoControl.setButtonVisibility(!0),!1!==this.config.showSampleNameButton&&this.sampleNameControl.show()),this.reorderTracks(),this.fireEvent("trackorderchanged",[this.getTrackOrder()]),t.trackView.enableTrackSelection(this.navbar.getEnableTrackSelection()),t}async loadROI(e){return this.roiManager.loadROI(e,this.genome)}clearROIs(){this.roiManager.clearROIs()}async getUserDefinedROIs(){if(this.roiManager){const e=this.roiManager.getUserDefinedROISet();if(void 0===e)return[];const t=await e.getAllFeatures(),i=[];for(let e of Object.values(t))i.push(...e);return i}return[]}getRulerTrackView(){const e=this.trackViews.filter((({track:e})=>"ruler"===e.id));return e.length>0?e[0]:void 0}async createTrack(e){let t=await async function(e){return"function"==typeof e?e():e}
|
|
35
|
-
/*! pako 2.1.0 https://github.com/nodeca/pako @license (MIT AND Zlib) */(e.url||e.fastaURL);if(b(t)&&(t=t.trim()),t)if(e.format)e.format=e.format.toLowerCase();else if(e.fastaURL)e.format="fasta";else if(e.sourceType)"htsget"===e.sourceType&&await Dc.inferFormat(e);else{const t=await wf(e);t&&(e.format=t)}e.type&&qs(e);let i=e.type?e.type.toLowerCase():void 0;if(!i){if(!e.format)throw Error(`Unrecognized track: ${JSON.stringify(e)}`);if("hic"===e.format){const t=new jd(e);if(await t.readHeaderAndFooter(),!t.chromosomeIndexMap.celltype)throw Error("'.hic' files not supported");i="shoebox",e._hicFile=t}else if(i=Vs(e.format),"bedtype"===i){const t=Hl(e,this.genome);e._featureSource=t;const n=await t.trackType();i=n||"annotation"}e.type=i}if(this.trackDefaults&&i){const t=this.trackDefaults[i];if(t)for(let i in t)t.hasOwnProperty(i)&&void 0===e[i]&&(e[i]=t[i])}const n=function(e,t,i){let n;switch(e){case"annotation":case"genes":case"fusionjuncspan":case"snp":n="feature";break;case"seg":case"maf":case"mut":n="seg";break;case"junctions":case"splicejunctions":n="junction";break;default:n=e}return OF.has(n)?OF.get(n)(t,i):void 0}(i,e,this);if(void 0!==n)return e.roi&&e.roi.length>0&&(n.roiSets=e.roi.map((e=>new yv(e,this.genome)))),n;this.alert.present(new Error(`Error creating track. Could not determine track type for file: ${e.url||e}`),void 0)}reorderTracks(){this.trackViews.sort((function(e,t){const i=e=>"ideogram"===e.track.id?1:"ruler"===e.track.id?2:3,n=i(e),r=i(t);if(n===r){return(e.track.order||0)-(t.track.order||0)}return n-r}));for(let{axis:e,viewports:t,sampleInfoViewport:i,sampleNameViewport:n,outerScroll:r,dragHandle:s,gearContainer:o}of this.trackViews){e.remove();for(let{viewportElement:e}of t)e.parentNode.removeChild(e);i.viewport.remove(),n.viewport.remove(),r.remove(),s.remove(),o.remove()}const e=this.columnContainer.querySelectorAll(".igv-column");for(let{axis:t,viewports:i,sampleInfoViewport:n,sampleNameViewport:r,outerScroll:s,dragHandle:o,gearContainer:a}of this.trackViews){this.columnContainer.querySelector(".igv-axis-column").appendChild(t);for(let t=0;t<e.length;t++){const{viewportElement:n}=i[t];e[t].appendChild(n)}this.columnContainer.querySelector(".igv-sample-info-column").appendChild(n.viewport),this.columnContainer.querySelector(".igv-sample-name-column").appendChild(r.viewport),this.columnContainer.querySelector(".igv-scrollbar-column").appendChild(s),this.columnContainer.querySelector(".igv-track-drag-column").appendChild(o),this.columnContainer.querySelector(".igv-gear-menu-column").appendChild(a)}}getTrackOrder(){return this.trackViews.filter((e=>e.track&&e.track.name)).map((e=>e.track.name))}getSelectedTrackViews(){return this.trackViews.filter((e=>!0===e.track.selected))}removeTrackByName(e){const t=this.trackViews.slice();for(let i of t)e===i.track.name&&this.removeTrack(i.track)}removeTrack(e){for(let t of this.trackViews)if(e===t.track){this._removeTrack(t.track);break}}_removeTrack(e){e.disposed||(this.trackViews.splice(this.trackViews.indexOf(e.trackView),1),this.fireEvent("trackremoved",[e]),this.fireEvent("trackorderchanged",[this.getTrackOrder()]),e.trackView&&e.trackView.dispose())}removeAllTracks(){const e=this.trackViews;this.trackViews=[];for(let t of e)"ruler"!==t.track.id&&"ideogram"!==t.track.id?(this.fireEvent("trackremoved",[t.track]),t.dispose()):this.trackViews.push(t)}get ideogramTrackView(){return this.trackViews[0]}get rulerTrackView(){return this.trackViews[1]}findTracks(e,t){let i="function"==typeof e?t=>e(t.track):i=>t===i.track[e];return this.trackViews.filter(i).map((e=>e.track))}get tracks(){return this.trackViews.map((e=>e.track)).filter((e=>void 0!==e))}setTrackHeight(e){this.trackHeight=e,this.trackViews.forEach((function(t){t.setTrackHeight(e)}))}async visibilityChange(){this.layoutChange()}async layoutChange(){if(this.referenceFrameList.find((e=>e.bpPerPixel<0))){const e=this.calculateViewportWidth(this.referenceFrameList.length);for(let t of this.referenceFrameList)t.bpPerPixel=(t.end-t.start)/e}this.referenceFrameList&&this.navbar.navbarDidResize(),Dv.call(this),this.roiManager.updateROIRegionPositions(),await this.updateViews()}async updateViews(){const e=this.trackViews;this.updateLocusSearchWidget();for(let e of this.referenceFrameList)e.bpPerPixel<=10&&await this.genome.getSequence(e.chr,e.start,e.start+1);for(let e of this.centerLineList)e.repaint();if(this.dragObject)for(let t of e)await t.updateViews();else{const t={},i=[];for(const n of e)if(n.track.autoscaleGroup){const e=n.track.autoscaleGroup;t[e]||(t[e]=[]),t[e].push(n)}else i.push(n);if(Object.entries(t).length>0)for(const[e,i]of Object.entries(t)){const e=await Promise.all(i.map((e=>e.getInViewFeatures()))),t=Gs(e.flat());for(const e of i)e.track.dataRange=Object.assign({},t),e.track.autoscale=!1;await Promise.all(i.map((e=>e.updateViews())))}await Promise.all(i.map((e=>e.updateViews())))}}repaintViews(){for(let e of this.trackViews)e.repaintViews()}updateLocusSearchWidget(){if(!this.referenceFrameList)return;const e=this.referenceFrameList,t=this.calculateViewportWidth(this.referenceFrameList.length);for(let i of e)i.end=i.start+i.bpPerPixel*t;const i=1===e.length?this.referenceFrameList[0].chr:"",n=this.referenceFrameList.map((e=>e.getLocusString())).join(" ");this.navbar.updateLocus(n,i),this.fireEvent("locuschange",[this.referenceFrameList])}calculateViewportWidth(e){let{width:t}=this.columnContainer.getBoundingClientRect();return t-=50+this.getSampleInfoViewportWidth()+this.getSampleNameViewportWidth()+14+12+28,t-=5*(e-1),Math.floor(t/e)}minimumBases(){return this.config.minimumBases}zoomIn(){this.zoomWithScaleFactor(.5)}zoomOut(){this.zoomWithScaleFactor(2)}async zoomWithScaleFactor(e,t,i){if(!this.referenceFrameList)return;const n=this.calculateViewportWidth(this.referenceFrameList.length);let r=i?[i]:this.referenceFrameList;for(let i of r)i.zoomWithScaleFactor(this,e,n,t)}async addMultiLocusPanel(e,t,i,n){if(!this.referenceFrameList)return;const r=this.calculateViewportWidth(1+this.referenceFrameList.length),s=this.calculateViewportWidth(this.referenceFrameList.length)/this.calculateViewportWidth(1+this.referenceFrameList.length);for(let e of this.referenceFrameList)e.bpPerPixel*=s;const o=(i-t)/r,a=new QF(this.genome,e,t,i,o),c=n?this.referenceFrameList.indexOf(n):this.referenceFrameList.length-1,l=1+c,{viewportElement:h}=this.trackViews[0].viewports[c],d=lv(h.parentElement);if(this.fireEvent("didchangecolumnlayout"),l===this.referenceFrameList.length){this.referenceFrameList.push(a);for(let e of this.trackViews){const t=ed(e,d,a);e.viewports.push(t)}}else{this.referenceFrameList.splice(l,0,a);for(let e of this.trackViews){const t=ed(e,d,a);e.viewports.splice(l,0,t)}}this.centerLineList=this.createCenterLineList(this.columnContainer),Dv.call(this),await this.updateViews(!0)}createCenterLineList(e){const t=e.querySelectorAll(".igv-center-line");for(let e=0;e<t.length;e++)t[e].remove();const i=[],n=e.querySelectorAll(".igv-column");for(let e=0;e<n.length;e++)i.push(new dv(this,this.referenceFrameList[e],n[e]));return i}async removeMultiLocusPanel(e){const t=this.referenceFrameList.indexOf(e),{viewportElement:i}=this.trackViews[0].viewports[t];cv(t,i.parentElement),this.fireEvent("didchangecolumnlayout");for(let{viewports:e}of this.trackViews)e[t].dispose(),e.splice(t,1);if(this.referenceFrameList.splice(t,1),1===this.referenceFrameList.length&&this.getRulerTrackView())for(let e of this.getRulerTrackView().viewports)e.dismissLocusLabel();const n=this.calculateViewportWidth(1+this.referenceFrameList.length)/this.calculateViewportWidth(this.referenceFrameList.length);await this.rescaleForMultiLocus(n)}async gotoMultilocusPanel(e){const t=this.referenceFrameList.indexOf(e);this.columnContainer.querySelectorAll(".igv-column").forEach(((e,i)=>{i===t||e.remove()})),this.columnContainer.querySelectorAll(".igv-column-shim").forEach((e=>e.remove()));for(let e of this.trackViews){const i=e.viewports[t];e.viewports.filter(((e,i)=>i!==t)).forEach((e=>e.dispose())),e.viewports=[i]}const i=this.calculateViewportWidth(1);e.bpPerPixel=(e.end-e.start)/i,this.referenceFrameList=[e],this.trackViews.forEach((({viewports:e})=>e.forEach((e=>e.setWidth(i))))),this.centerLineList=this.createCenterLineList(this.columnContainer),this.updateUIWithReferenceFrameList(),await this.updateViews(!0)}async rescaleForMultiLocus(e){const t=this.calculateViewportWidth(this.referenceFrameList.length);for(let t of this.referenceFrameList)t.bpPerPixel*=e;for(let{viewports:e}of this.trackViews)for(let i of e)i.setWidth(t);this.centerLineList=this.createCenterLineList(this.columnContainer),this.updateUIWithReferenceFrameList(),await this.updateViews()}async goto(e,t,i){await this.search(e+":"+t+"-"+i)}async doSearch(e,t){const i=await this.search(e,t);return i||this.alert.present(new Error(`Unrecognized locus: <b> ${e} </b>`)),i}async search(e,t){const i=await async function(e,t){if(void 0===t||""===t.trim())return;const i=t.split(" ");let n=[];const r=async t=>{if("all"===t.trim().toLowerCase()||"*"===t)return e.genome.wholeGenomeView?{chr:"all",start:0,end:e.genome.getChromosome("all").bpLength}:void 0;let i,n;if(t.includes(":")&&(i=yF(t,e.isSoftclipped()),i&&(n=await e.genome.loadChromosome(i.chr))),!n){i=void 0;const r=await vF(e,t);r&&(i={chr:r.chr,start:r.start,end:r.end,name:(r.name||t).toUpperCase()}),i||(n=await e.genome.loadChromosome(t),n&&(i={chr:n.name}))}return i&&(n=n||await e.genome.loadChromosome(i.chr),i.chr=n.name,void 0===i.start&&void 0===i.end&&(i.start=0,i.end=n.bpLength)),i};for(let e of i){const t=await r(e);t&&n.push(t)}if(0===n.length){const e=await r(t.replaceAll(" ","+"));e&&n.push(e)}return 0===n.length?void 0:n}(this,e);if(i&&i.length>0){this.referenceFrameList=function(e,t,i,n,r,s){return e.map((e=>{const o=Object.assign({},e);if(i&&o.name&&(o.start=Math.max(0,o.start-i),o.end+=i),!s){const e=t.getChromosome(o.chr);Ws(e.bpLength,o,n)}return new QF(t,o.chr,o.start,o.end,(o.end-o.start)/r)}))}(i,this.genome,this.flanking,this.minimumBases(),this.calculateViewportWidth(i.length),this.isSoftclipped());for(let e of this.trackViews)e.removeViewportsFromColumnContainer();this.columnContainer.querySelectorAll(".igv-column-shim, .igv-column").forEach((e=>e.remove())),hv(this.columnContainer.querySelector(".igv-sample-info-column"),this.referenceFrameList.length),this.fireEvent("didchangecolumnlayout");for(let e of this.trackViews)e.createViewports(this,this.columnContainer,this.referenceFrameList);return this.centerLineList=this.createCenterLineList(this.columnContainer),this.updateUIWithReferenceFrameList(),t||await this.updateViews(),!0}return!1}async loadSampleInfo(e){await this.sampleInfo.loadSampleInfoFile(e.url);for(const{sampleInfoViewport:e}of this.trackViews)e.setWidth(this.getSampleInfoColumnWidth());this.findTracks((e=>"function"==typeof e.getSamples)).length>0&&(this.sampleInfoControl.performClickWithState(this,!0),this.sampleInfoControl.setButtonVisibility(!0));for(const{sampleInfoViewport:e}of this.trackViews)e.repaint()}getSampleInfoColumnWidth(){if(this.sampleInfo.attributeCount){const e=this.findTracks((e=>"function"==typeof e.getSamples)).length>0,t=this.sampleInfo.hasAttributes(),i=this.sampleInfoControl.showSampleInfo;return e&&t&&i?this.sampleInfo.attributeCount*ad+8:0}return 0}on(e,t){this.eventHandlers[e]||(this.eventHandlers[e]=[]),this.eventHandlers[e].push(t)}un(e,t){this.off(e,t)}off(e,t){if(e)if(t){const i=this.eventHandlers[e];if(i&&0!==i.length){const n=i.indexOf(t);-1!==n&&this.eventHandlers[e].splice(n,1)}else console.warn("No handlers to remove for event: "+e)}else this.eventHandlers[e]=[];else this.eventHandlers={}}fireEvent(e,t,i){const n=this.eventHandlers[e];if(void 0===n||0===n.length)return;const r=i||window;return n.map((function(e){return e.apply(r,t)}))[0]}dispose(){this.removeEventHandlers();for(let e of this.trackViews)e.dispose();this.roiManager&&this.roiManager.dispose()}toJSON(){const e={version:"3.2.0"};if(void 0!==this.showSampleNames&&(e.showSampleNames=this.showSampleNames),this.sampleNameViewportWidth&&(e.sampleNameViewportWidth=this.sampleNameViewportWidth),e.reference=this.genome.toJSON(),e.reference.fastaURL instanceof File)throw new Error(`Error. Sessions cannot include local file references ${e.reference.fastaURL.name}.`);if(e.reference.indexURL instanceof File)throw new Error(`Error. Sessions cannot include local file references ${e.reference.indexURL.name}.`);const t=[];let i=this.trackViews[0];for(let{referenceFrame:e}of i.viewports){const i=e.getLocusString();t.push(i)}e.locus=1===t.length?t[0]:t;const n=this.roiManager.toJSON();n&&(e.roi=n,this.roiManager.showOverlays||(e.showROIOverlays=!1)),this.qtlSelections.isEmpty()||(e.qtlSelections=this.qtlSelections.toJSON());const r=[],s=[];for(const{track:e}of this.trackViews)try{let t;"function"==typeof e.getState?t=Pa.localFileInspection(e.getState()):e.config&&(t=Pa.localFileInspection(e.config)),t&&(t.browser&&delete t.browser,t.order=e.order,r.push(t))}catch(t){const i=`Track: ${e.name}: ${t}`;console.error(i),s.push(i)}if(s.length>0){let e=1,t="Errors encountered saving session: </br>";for(let i of s)t+=` (${e++}) ${i.toString()} <br/>`;throw Error(t)}e.tracks=r;const o=[];for(const e of r)for(const t of Object.keys(e))"file"!==t&&"indexFile"!==t||o.push(e[t]);const a=[];if(this.sampleInfo.sampleInfoFiles.length>0){const t=this.sampleInfo.toJSON();t.length>0&&(e.sampleinfo=t);for(const e of this.sampleInfo.sampleInfoFiles){const t=Pa.localFileInspection({url:e});t.file&&a.push(t.file)}a.length>0&&o.push(...a)}return o.length>0&&alert(`This session includes reference(s) to local file(s):\n${o.map((e=>` ${e}`)).join("\n")}\nLocal files cannot be loaded automatically when a saved session is restored.`),e}compressedSession(){return function(e){const t=new Uint8Array(e.length);for(var i=0;i<e.length;i++)t[i]=e.charCodeAt(i);const n=new $i(t),r=String.fromCharCode.apply(null,n);return btoa(r).replace(/\+/g,".").replace(/\//g,"_").replace(/=/g,"-")}(JSON.stringify(this.toJSON()))}sessionURL(){const e=window.location.href.slice(),t=e.indexOf("?");return(t>0?e.substring(0,t):e)+"?sessionURL=blob:"+this.compressedSession()}mouseDownOnViewport(e,t){var i;i=s(e),this.vpMouseDown={viewport:t,lastMouseX:i.x,mouseDownX:i.x,lastMouseY:i.y,mouseDownY:i.y,referenceFrame:t.referenceFrame}}cancelTrackPan(){const e=this.dragObject;this.dragObject=void 0,this.isScrolling=!1,this.vpMouseDown=void 0,e&&e.viewport.referenceFrame.start!==e.start&&(this.updateViews(),this.fireEvent("trackdragend",[e.viewport]))}isTrackPanning(){return this.dragObject}isSoftclipped(){return void 0!==this.trackViews.find((e=>!0===e.track.showSoftClips))}startTrackDrag(e){this.dragTrack=e}updateTrackDrag(e){if(e&&this.dragTrack){const t=this.dragTrack,i=this.trackViews.indexOf(e),n=this.trackViews.indexOf(t),r=this.trackViews;r[i]=t,r[n]=e;const s=this.trackViews[i].track.order;this.trackViews[n].track.order=s;const o=r.length;let a=s;if(i<n)for(let e=i+1;e<o;e++){const t=r[e].track;if(!(t.order<=a))break;t.order=Math.min(Number.MAX_SAFE_INTEGER,a+1),a=t.order}else for(let e=i-1;e>0;e--){const t=r[e].track;if(!(t.order>=a))break;t.order=Math.max(-Number.MAX_SAFE_INTEGER,a-1),a=t.order}this.reorderTracks()}}endTrackDrag(){this.dragTrack?(this.dragTrack=void 0,this.fireEvent("trackorderchanged",[this.getTrackOrder()])):this.dragTrack=void 0}addEventHandlers(){this.addWindowResizeHandler(),this.addRootMouseUpHandler(),this.addRootMouseLeaveHandler(),this.addColumnContainerEventHandlers(),this.addKeyboardHandler()}removeEventHandlers(){this.removeWindowResizeHandler(),this.removeRootMouseUpHandler(),this.removeRootMouseLeaveHandler(),this.removeColumnContainerEventHandlers(),this.removeKeyboardHandler()}addWindowResizeHandler(){this.boundWindowResizeHandler=Dv.bind(this),window.addEventListener("resize",this.boundWindowResizeHandler)}removeWindowResizeHandler(){window.removeEventListener("resize",this.boundWindowResizeHandler)}addRootMouseUpHandler(){this.boundRootMouseUpHandler=zv.bind(this),this.root.addEventListener("mouseup",this.boundRootMouseUpHandler)}removeRootMouseUpHandler(){this.root.removeEventListener("mouseup",this.boundRootMouseUpHandler)}addRootMouseLeaveHandler(){this.boundRootMouseLeaveHandler=zv.bind(this),this.root.addEventListener("mouseleave",this.boundRootMouseLeaveHandler)}removeRootMouseLeaveHandler(){this.root.removeEventListener("mouseleave",this.boundRootMouseLeaveHandler)}addColumnContainerEventHandlers(){this.boundColumnContainerMouseMoveHandler=Tv.bind(this),this.boundColumnContainerTouchMoveHandler=Tv.bind(this),this.boundColumnContainerMouseLeaveHandler=zv.bind(this),this.boundColumnContainerMouseUpHandler=zv.bind(this),this.boundColumnContainerTouchEndHandler=zv.bind(this),this.columnContainer.addEventListener("mousemove",this.boundColumnContainerMouseMoveHandler),this.columnContainer.addEventListener("touchmove",this.boundColumnContainerTouchMoveHandler),this.columnContainer.addEventListener("mouseleave",this.boundColumnContainerMouseLeaveHandler),this.columnContainer.addEventListener("mouseup",this.boundColumnContainerMouseUpHandler),this.columnContainer.addEventListener("touchend",this.boundColumnContainerTouchEndHandler)}removeColumnContainerEventHandlers(){this.columnContainer.removeEventListener("mousemove",this.boundColumnContainerMouseMoveHandler),this.columnContainer.removeEventListener("touchmove",this.boundColumnContainerTouchMoveHandler),this.columnContainer.removeEventListener("mouseleave",this.boundColumnContainerMouseLeaveHandler),this.columnContainer.removeEventListener("mouseup",this.boundColumnContainerMouseUpHandler),this.columnContainer.removeEventListener("touchend",this.boundColumnContainerTouchEndHandler)}addKeyboardHandler(){this.keyUpHandler=Lv.bind(this),document.addEventListener("keyup",this.keyUpHandler)}removeKeyboardHandler(){console.log("Remove handler"),document.addEventListener("keyup",this.keyUpHandler)}static uncompressSession(e){let t;if(e.indexOf("/gzip;base64")>0){t=on(e);let i="";for(let e of t)i+=String.fromCharCode(e);return i}return function(e){e=e.replace(/\./g,"+").replace(/_/g,"/").replace(/-/g,"=");const t=atob(e),i=[];for(let e=0;e<t.length;e++)i.push(t.charCodeAt(e));const n=Yi(i);let r="";for(let e of n)r+=String.fromCharCode(e);return r}(e.substring(5))}createCircularView(e,t){var i;return t=!0===t,this.circularView=(i=this,new Vf(e,{onChordClick:(e,t,n)=>{const r=e.data,s=r.mate;function o(e){e.chr=i.genome.getChromosomeName(e.refName);let t=!1;for(let n of i.referenceFrameList){const i=Ff.fromLocusString(n.getLocusString());if(i.contains(e)){t=!0;break}if(i.overlaps(e)){n.extend(e),t=!0;break}}if(!t){const t=2e3,n=(e.start+e.end)/2;i.addMultiLocusPanel(e.chr,n-t,n+t)}}o(r),o(s)}})),this.circularViewControl=new uv(this.navbar.toggleButtonContainer,this),this.circularView.setAssembly({name:this.genome.id,id:this.genome.id,chromosomes:$f(this.genome)}),this.circularViewVisible=t,this.circularView}get circularViewVisible(){return void 0!==this.circularView&&this.circularView.visible}set circularViewVisible(e){this.circularView&&(this.circularView.visible=e,this.circularViewControl.setState(e))}get sampleInfoControl(){return this.navbar.sampleInfoControl}get overlayTrackButton(){return this.navbar.overlayTrackButton}get roiTableControl(){return this.navbar.roiTableControl}get sampleInfoControl(){return this.navbar.sampleInfoControl}get sampleNameControl(){return this.navbar.sampleNameControl}}async function Dv(){if(!this.referenceFrameList)return;const e=this.calculateViewportWidth(this.referenceFrameList.length);for(let t of this.referenceFrameList){const i=this.referenceFrameList.indexOf(t),{chr:n,genome:r}=t,{bpLength:s}=r.getChromosome(t.chr),o=t.toBP(e);Mh.isWholeGenomeView(n)||o>s?t.bpPerPixel=s/e:t.end=t.start+t.toBP(e);for(let{viewports:t}of this.trackViews)t[i].setWidth(e)}this.updateUIWithReferenceFrameList(),await this.updateViews(!0)}function Tv(e){e.preventDefault();const{x:t,y:i}=s(e);if(this.vpMouseDown){const{viewport:e,referenceFrame:n}=this.vpMouseDown,r=Math.abs(t-this.vpMouseDown.mouseDownX)>Math.abs(i-this.vpMouseDown.mouseDownY);if(!this.dragObject&&!this.isScrolling)if(r)this.vpMouseDown.mouseDownX&&Math.abs(t-this.vpMouseDown.mouseDownX)>this.constants.dragThreshold&&(this.dragObject={viewport:e,start:n.start});else if(this.vpMouseDown.mouseDownY&&Math.abs(i-this.vpMouseDown.mouseDownY)>this.constants.scrollThreshold){this.isScrolling=!0;const t=e.viewportElement.clientHeight,i=e.trackView.maxViewportContentHeight();this.vpMouseDown.r=t/i}if(this.dragObject){const i=!this.isSoftclipped();let r=this.vpMouseDown.lastMouseX-t;n.shiftPixels(r,e.viewportElement.clientWidth,i)&&this.updateViews(),this.fireEvent("trackdrag")}if(this.isScrolling){const t=this.vpMouseDown.r*(this.vpMouseDown.lastMouseY-i);e.trackView.moveScroller(t)}this.vpMouseDown.lastMouseX=t,this.vpMouseDown.lastMouseY=i}}function zv(e){this.cancelTrackPan(),this.endTrackDrag()}async function Lv(e){if(this.referenceFrameList&&!(this.referenceFrameList.length>1)&&("KeyF"===e.code||"KeyB"===e.code)){const t=this.getSelectedTrackViews();if(t.length>0){const i=t[0].track;if("function"==typeof i.nextFeatureAfter){const t=this.referenceFrameList[0],n=t.viewport?t.viewport.getWidth():this.calculateViewportWidth(this.referenceFrameList.length),r="all"===t.chr.toLowerCase(),s=i.visibilityWindow;if(r||s&&s>0&&t.bpPerPixel*n>s)return;const o="KeyF"===e.code,a=t.chr,c=t.center,l=await i.nextFeatureAfter(a,c,o);if(l){const i=await this.genome.getChromosomeName(l.chr);if(a===i){const i=(l.start+l.end)/2;if(e.shiftKey){const e=this.config.minimumBases||40,r=Math.max(e,1.1*(l.end-l.start));t.start=Math.max(0,i-r/2),t.end=i+r/2,t.bpPerPixel=(t.end-t.start)/n}else t.shift(i-c);this.updateViews()}else{t.chr=i;const r=(l.start+l.end)/2;if(e.shiftKey){const e=this.config.minimumBases||40,i=Math.max(e,1.1*(l.end-l.start));t.start=Math.max(0,r-i/2),t.end=t.start+i,t.bpPerPixel=(t.end-t.start)/n}else t.start=r-n*t.bpPerPixel/2,t.end=t.start+n*t.bpPerPixel;this.updateViews()}}}}}}function Hv(e,t){for(let{viewports:i}of e)for(let e of i)e.trackLabelElement&&(0===i.indexOf(e)&&!0===t?e.trackLabelElement.style.display="block":e.trackLabelElement.style.display="none")}let Pv=[];function Ov(e){return void 0===e.minimumBases&&(e.minimumBases=40),void 0===e.showIdeogram&&(e.showIdeogram=!0),null==e.showCytobandNames&&(e.showCytobandNames=!1),void 0===e.showCircularView&&(e.showCircularView=!1),void 0===e.showCircularViewButton&&(e.showCircularViewButton=!1),void 0===e.showTrackLabelButton&&(e.showTrackLabelButton=!0),void 0===e.showTrackLabels&&(e.showTrackLabels=!0),void 0===e.showCursorTrackingGuideButton&&(e.showCursorTrackingGuideButton=!0),void 0===e.showCursorGuide&&(e.showCursorGuide=e.showCursorTrackingGuide||!1),void 0===e.showCenterGuideButton&&(e.showCenterGuideButton=!0),void 0===e.showCenterGuide&&(e.showCenterGuide=!1),void 0===e.showSampleNames&&(e.showSampleNames=!1),void 0===e.showSVGButton&&(e.showSVGButton=!0),void 0===e.showControls&&(e.showControls=!0),void 0===e.showNavigation&&(e.showNavigation=!0),void 0===e.showRuler&&(e.showRuler=!0),void 0===e.flanking&&(e.flanking=1e3),void 0===e.pairsSupported&&(e.pairsSupported=!0),e.tracks||(e.tracks=[]),e}const Vv=Mn.setApiKey;const qv=Mn.oauth;var Qv={AlertDialog:Ps,TrackUtils:Qs,IGVGraphics:fr,MenuUtils:or,DataRangeDialog:ur,createTrack:async function(e,t){return await Bv.prototype.createTrack.call(t,e)},createBrowser:async function(e,t){void 0===t&&(t={}),Mh.KNOWN_GENOMES||await Mh.initializeGenomes(t),Ov(t),t.queryParametersSupported&&function(e){var t,i,n,r,s,o,a,c,l;let h,d,u;if(a=window.location.href,s={},t=a.indexOf("?"),i=a.lastIndexOf("#"),t>=0)for(i<0&&(i=a.length),n=t+1;n<i;)(r=a.indexOf("&",n))<0&&(r=i),2===(o=a.substring(n,r).split("=",2)).length?(c=o[0],l=decodeURIComponent(o[1]),"file"===c?h=l.split(","):"index"===c?d=l.split(","):"name"===c?u=l.split(","):"genome"===c?!l.startsWith("https://")&&!l.startsWith("http://")||l.endsWith(".json")?(e[c]=l,e.reference=void 0):e.reference={fastaURL:l,indexURL:l+".fai"}:("reference"===c&&(e.genome=void 0),e[c]=l),n=r+1):n++;if(h){e.tracks||(e.tracks=[]);for(let t=0;t<h.length;t++){if(h[t].endsWith(".xml")||h[t].endsWith(".json")){e.sessionURL=h[t];break}const i={url:h[t]};d&&d.length>t&&(i.indexURL=d[t]),u&&u.length>t&&(i.name=u[t]),e.tracks.push(i)}}}(t),t.apiKey&&Mn.setApiKey(t.apiKey),t.oauthToken&&Mn.setOauthToken(t.oauthToken),t.clientId&&!Cn()&&await async function(e){if(!google.accounts.oauth2.initTokenClient)throw new Error("Google accounts token client not loaded (https://accounts.google.com/gsi/client)");if(Cn())throw new Error("Google client is already initialized");const t={client_id:e.client_id||e.clientId,scope:e.scope||"https://www.googleapis.com/auth/userinfo.profile",state:e.state||"igv",error:e=>{throw new Error(e.type)},hint:e.hint,hosted_domain:e.hosted_domain},i=google.accounts.oauth2.initTokenClient(t);google.igv={tokenClient:i,apiKey:e.apiKey}}({client_id:t.clientId,apiKey:t.apiKey,scope:"https://www.googleapis.com/auth/userinfo.profile"});const i=new Bv(t,e);Pv.push(i);const n=t.sessionURL||t.session||t.hubURL;return n?await i.loadSession({url:n}):await i.loadSessionObject(t),i.navbar.navbarDidResize(),i},removeBrowser:function(e){e.dispose(),e.root.remove(),Pv=Pv.filter((t=>t!==e))},removeAllBrowsers:function(){for(let e of Pv)e.dispose(),e.root.remove();Pv=[]},visibilityChange:async function(){for(let e of Pv)await e.visibilityChange()},setGoogleOauthToken:function(e){return Mn.setOauthToken(e)},setOauthToken:function(e,t){return Mn.setOauthToken(e,t)},oauth:qv,version:UF,setApiKey:Vv,TrackBase:Pa,registerTrackClass:function(e,t){OF.set(e,((e,i)=>new t(e,i)))},registerTrackCreatorFunction:function(e,t){OF.set(e,t)},registerFileFormats:function(e,t){Ea[e]={fields:t}},loadSessionFile:Bv.loadSessionFile};export{Qv as default};
|
|
34
|
+
/*! pako 2.0.4 https://github.com/nodeca/pako @license (MIT AND Zlib) */(await this.value,await this.shape)}async getValue(e){const t=await this.dtype;return("string"==typeof t||t instanceof String)&&t.startsWith("S")?(await e).map((e=>{let t=e.indexOf("\0");return t>=0?e.substring(0,t):e})):e}};function _w(e){return e.replace(/\/(\/)+/g,"/")}async function xw(e){var t;e.url&&("function"==typeof(t=e.url).slice&&"function"==typeof t.arrayBuffer)&&(e.file=e.url,e.url=void 0);const i=void 0!==e.url;let n=e.reader?e.reader:function(e){if(e.url)return new vp(e);if(e.path)return new NodeLocalFile(e);if(e.file)return new Cp(e.file);throw Error("One of 'url', 'path (node only)', or 'file (browser only)' must be specified")}(e);const r=e.fetchSize||2e3,s=e.maxSize||2e5;i&&(n=new yp({file:n,fetchSize:r,maxSize:s}));const o=new kw(n),a=await async function(e){let t;if(e.indexReader)t=e.indexReader;else{if(e.index)return e.index;e.indexURL?t=new vp({url:e.indexURL}):e.indexPath?t=new NodeLocalFile({path:e.indexPath}):e.indexFile&&(t=new Cp({file:e.indexFile}))}if(t){const e=await t.read(),i=(new TextDecoder).decode(e);return JSON.parse(i)}return}(e),c=e.indexOffset,l=function(e){if(e.url)return Iw(e.url);if(e.path)return Iw(e.path);if(e.file)return e.file.name}(e),h=new Aw(o,l,{index:a,indexOffset:c});return await h.ready,h}class kw{constructor(e){this.fileReader=e}async slice(e,t){return this.fileReader.read(e,t-e)}}function Iw(e){const t=e.lastIndexOf("/");return t>0?e.substring(t+1):e}class Sw{constructor(e,t){this.chrom=e,this.signal_bin_size=t;this.signals={raw_RD:`his_rd_p_${this.chrom}_${this.signal_bin_size}`,gc_RD:`his_rd_p_${this.chrom}_${this.signal_bin_size}_GC`,gc_partition:`his_rd_p_${this.chrom}_${this.signal_bin_size}_partition_GC_merge`,baf:`snp_likelihood_${this.chrom}_${this.signal_bin_size}_mask`,baf_i1:`snp_i1_${this.chrom}_${this.signal_bin_size}_mask`,Mosaic_segments:`his_rd_p_${this.chrom}_${this.signal_bin_size}_partition_GC_mosaic_segments_2d`,Mosaic_calls:`his_rd_p_${this.chrom}_${this.signal_bin_size}_partition_GC_mosaic_call_2d`}}}class Ew{constructor(e,t=1e5){this.h5_file=e,this.bin_size=t,this.h5_obj=void 0,this.pytorKeys=[],this.availableBins=[]}async fetch(){return this.h5_obj||(this.h5_obj=await xw({url:this.h5_file,fetchSize:1e6,maxSize:2e8})),this.h5_obj}async get_keys(){return(await this.fetch()).keys}async get_rd_signal(e=this.bin_size,t=void 0){const i=await this.fetch();this.pytorKeys=i.keys;const n=new Nw(this.pytorKeys);this.availableBins=n.getAllBins(),this.availableBins.includes(e)||(e=this.availableBins.at(-1));const r=await this.getChromosomes(t);let s=await this.rd_stat(e);const o=await this.getWigFeatures(r,e,s);return this.setCallers(o),{[e]:o}}async getWigFeatures(e,t,i){const n={RD_Raw:[],RD_Raw_gc_coor:[],ReadDepth:[],"2D":[],BAF1:[],BAF2:[]};for(const r of e){const e=new Sw(r,t);n.RD_Raw.push(...await this.get_chr_signal(r,t,e.signals.raw_RD,i)),n.RD_Raw_gc_coor.push(...await this.get_chr_signal(r,t,e.signals.gc_RD,i)),n.ReadDepth.push(...await this.get_chr_signal(r,t,e.signals.gc_partition,i)),n["2D"].push(...await this.rd_call_combined(r,t,i,e));const[s,o]=await this.getBafSignals(r,t,e.signals.baf_i1);n.BAF1.push(...s),n.BAF2.push(...o)}return n}async getChromosomes(e){const t=await this.h5_obj.get("rd_chromosomes"),i=await t.value;if(e){let t=new Set(e);return i.filter((e=>t.has(e)))}return i}setCallers(e){this.callers=[],e.ReadDepth.length&&this.callers.push("ReadDepth"),e["2D"].length&&this.callers.push("2D")}decode_segments(e){let t=[],i=[];for(let n of e)4294967295==n?(t.push(i),i=[]):i.push(n);return t}async rd_call_combined(e,t,i,n){let r,s=[],o=n.signals.Mosaic_segments;if(this.pytorKeys.includes(o)){const e=await this.h5_obj.get(o);let t=await e.value;r=this.decode_segments(t)}let a=n.signals.Mosaic_calls;if(this.pytorKeys.includes(a)){const n=await this.h5_obj.get(a);let o=await n.to_array();r.forEach(((n,r)=>{n.forEach(((n,a)=>{s.push({chr:e,start:n*t,end:(n+1)*t,value:o[0][r]/i[4]*2})}))}))}return s}async rd_stat(e){let t,i=`rd_stat_${e}_auto`;if(this.pytorKeys.includes(i)){const e=await this.h5_obj.get(i);t=await e.value}return t}async get_chr_signal(e,t,i,n){let r=[];if(this.pytorKeys.includes(i)){const s=await this.h5_obj.get(i);(await s.value).forEach(((i,s)=>{r.push({chr:e,start:s*t,end:(s+1)*t,value:i/n[4]*2})}))}return r}async getBafSignals(e,t,i,n=-1){const r=[],s=[];if(this.pytorKeys.includes(i)){const o=await this.h5_obj.get(i);(await o.to_array()).forEach(((i,o)=>{isNaN(i)||(r.push({chr:e,start:o*t,end:(o+1)*t,value:n*(.5-i)}),.5!==i&&s.push({chr:e,start:o*t,end:(o+1)*t,value:n*(.5+i)}))}))}return[r,s]}}class Nw{constructor(e){this.signals=e}getAllBins(){const e=this.getRdBins(),t=this.getSnpBins();return[...new Set([...e,...t])].sort(((e,t)=>e-t))}getRdBins(){return this.extractBins(/^his_rd_p_(.*)_(\d+)$/)}getSnpBins(){return this.extractBins(/^snp_likelihood_(.*)_(\d+)_mask$/)}extractBins(e){return[...new Set(this.signals.map((t=>t.match(e))).filter((e=>null!==e)).map((e=>Number(e[2]))))]}}function Mw(e){if(e.length<4)return e;let t,i,n,r,s,o;return t=e.slice().sort(((e,t)=>e-t)),t.length/4%1==0?(i=.5*(t[t.length/4]+t[t.length/4+1]),n=.5*(t[t.length*(3/4)]+t[t.length*(3/4)+1])):(i=t[Math.floor(t.length/4+1)],n=t[Math.ceil(t.length*(3/4)+1)]),r=n-i,s=n+1.5*r,o=i-1.5*r,t.filter((e=>e>=o&&e<=s))}function Rw(e){let t=Mw(e);const i=t.length,n=t.reduce(((e,t)=>e+t))/i,r=Math.sqrt(t.map((e=>Math.pow(e-n,2))).reduce(((e,t)=>e+t))/i);return[n,r]}var Bw={range_function:function(e,t,i){return Array(Math.ceil((t-e)/i)).fill(e).map(((e,t)=>e+t*i))},getDistParams:Rw,linspace:function(e,t,i){if(void 0===i&&(i=Math.max(Math.round(t-e)+1,1)),i<2)return 1===i?[e]:[];var n=Array(i);for(let r=--i;r>=0;r--)n[r]=(r*t+(i-r)*e)/i;return n},GetFit:class{constructor(e){this.allBins=e}getValues(){return Object.values(this.allBins).reduce(((e,t)=>e.concat(t.filter((e=>e.binScore>0)).map((e=>e.binScore)))),[])}getMean(e){return e.reduce((function(e,t){return e+t}))/e.length}fit_data(){return Rw(this.getValues())}histogram(e,t){const i=t[1]-t[0],n=[];e.forEach(((e,r)=>{t.forEach(((t,r)=>{if(n[t]||(n[t]={count:0}),t<=e&&e<t+i)return n[t].count++,!1}))}));const r=[];return n.forEach(((e,t)=>{r.push(e.count)})),r}},filterOutliers:Mw};function Dw(e,t){return isNaN(e)||isNaN(t)||t<=0?NaN:0===e?.5:.5+.5*(Tw(.5*t,.5,1)-Tw(.5*t,.5,t/(t+e*e)))*Math.sign(e)}function Tw(e,t,i){if(0==i)return 0;if(1==i)return 1;{let n=Pw(e+t)-Pw(e)-Pw(t)+e*Math.log(i)+t*Math.log(1-i);return i<(e+1)/(e+t+2)?Math.exp(n)*zw(e,t,i)/e:1-Math.exp(n)*zw(t,e,1-i)/t}}function zw(e,t,i,n=1e3){let r=1,s=1,o=1,a=e+t,c=e+1,l=e-1,h=1-a*i/c;for(let d=0;d<=n;d++){let n=parseFloat(d+1),u=n+n,f=n*(t-n)*i/((l+u)*(e+u)),p=r+f*s,g=h+f*o;f=-(e+n)*(a+n)*i/((c+u)*(e+u));let m=g+f*h,w=r;if(s=p/m,o=g/m,r=(p+f*r)/m,h=1,Math.abs(r-w)<3e-7*Math.abs(r))return r}}function Lw(e){if(0==e||1==e)return 1;return e*Lw(e-1)}function Hw(e){let t;var i=[75122.633153,80916.6278952,36308.2951477,8687.24529705,1168.92649479,83.8676043424,2.50662827511],n=0,r=1;if(0==e)t=1e99;else if(e%1==0)t=Lw(e-1);else{for(let t=0;t<i.length;t++)n+=i[t]*Math.pow(e,t),r*=e+t;t=n*Math.pow(e+5.5,e+.5)*Math.exp(-(e+5.5))/r}return t}function Pw(e){return Math.log(Hw(e))}var Ow={TdistributionCDF:Dw,gamma:Hw,t_test_1_sample:function(e,t,i,n){0==i&&(i=1);var r=(e-t)/i*Math.sqrt(n);return 1-Dw(Math.abs(r),n-1)},t_test_2_samples:function(e,t,i,n,r,s){0==t&&(t=1),0==r&&(r=1);var o=(e-n)/Math.sqrt(t**2/i+r**2/s),a=(t**2/i+r**2/s)**2*(i-1)*(s-1)/(t**4*(s-1)/i**2+r**4*(i-1)/s**2);return 1-Dw(Math.abs(o),parseInt(a+.5))}};const Vw=Object.prototype.toString;function qw(e){return Vw.call(e).endsWith("Array]")}function Qw(e,t,i,n){let r=0;const s=i(t);for(let t=0;t<e.x.length;t++)r+=Math.pow(e.y[t]-s(e.x[t]),2)/n[t];return r}function Uw(e){if(e.__esModule)return e;var t=Object.defineProperty({},"__esModule",{value:!0});return Object.keys(e).forEach((function(i){var n=Object.getOwnPropertyDescriptor(e,i);Object.defineProperty(t,i,n.get?n:{enumerable:!0,get:function(){return e[i]}})})),t}var jw={};const Gw=Object.prototype.toString;var Ww=Uw(Object.freeze({__proto__:null,isAnyArray:function(e){const t=Gw.call(e);return t.endsWith("Array]")&&!t.includes("Big")}}));const $w=Object.prototype.toString;function Kw(e){const t=$w.call(e);return t.endsWith("Array]")&&!t.includes("Big")}const Yw=Object.prototype.toString;function Xw(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!function(e){const t=Yw.call(e);return t.endsWith("Array]")&&!t.includes("Big")}(e))throw new TypeError("input must be an array");if(0===e.length)throw new TypeError("input must not be empty");var i=t.fromIndex,n=void 0===i?0:i,r=t.toIndex,s=void 0===r?e.length:r;if(n<0||n>=e.length||!Number.isInteger(n))throw new Error("fromIndex must be a positive integer smaller than length");if(s<=n||s>e.length||!Number.isInteger(s))throw new Error("toIndex must be an integer greater than fromIndex and at most equal to length");for(var o=e[n],a=n+1;a<s;a++)e[a]>o&&(o=e[a]);return o}const Zw=Object.prototype.toString;function Jw(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!function(e){const t=Zw.call(e);return t.endsWith("Array]")&&!t.includes("Big")}(e))throw new TypeError("input must be an array");if(0===e.length)throw new TypeError("input must not be empty");var i=t.fromIndex,n=void 0===i?0:i,r=t.toIndex,s=void 0===r?e.length:r;if(n<0||n>=e.length||!Number.isInteger(n))throw new Error("fromIndex must be a positive integer smaller than length");if(s<=n||s>e.length||!Number.isInteger(s))throw new Error("toIndex must be an integer greater than fromIndex and at most equal to length");for(var o=e[n],a=n+1;a<s;a++)e[a]<o&&(o=e[a]);return o}var eb=Object.freeze({__proto__:null,default:function(e){var t,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!Kw(e))throw new TypeError("input must be an array");if(0===e.length)throw new TypeError("input must not be empty");if(void 0!==i.output){if(!Kw(i.output))throw new TypeError("output option must be an array if specified");t=i.output}else t=new Array(e.length);var n=Jw(e),r=Xw(e);if(n===r)throw new RangeError("minimum and maximum input values are equal. Cannot rescale a constant array");var s=i.min,o=void 0===s?i.autoMinMax?n:0:s,a=i.max,c=void 0===a?i.autoMinMax?r:1:a;if(o>=c)throw new RangeError("min option must be smaller than max option");for(var l=(c-o)/(r-n),h=0;h<e.length;h++)t[h]=(e[h]-n)*l+o;return t}}),tb=Uw(eb);Object.defineProperty(jw,"__esModule",{value:!0});var ib=Ww,nb=tb;const rb=" ".repeat(2),sb=" ".repeat(4);function ob(e,t={}){const{maxRows:i=15,maxColumns:n=10,maxNumSize:r=8,padMinus:s="auto"}=t;return`${e.constructor.name} {\n${rb}[\n${sb}${function(e,t,i,n,r){const{rows:s,columns:o}=e,a=Math.min(s,t),c=Math.min(o,i),l=[];if("auto"===r){r=!1;e:for(let t=0;t<a;t++)for(let i=0;i<c;i++)if(e.get(t,i)<0){r=!0;break e}}for(let t=0;t<a;t++){let i=[];for(let s=0;s<c;s++)i.push(ab(e.get(t,s),n,r));l.push(`${i.join(" ")}`)}c!==o&&(l[l.length-1]+=` ... ${o-i} more columns`);a!==s&&l.push(`... ${s-t} more rows`);return l.join(`\n${sb}`)}(e,i,n,r,s)}\n${rb}]\n${rb}rows: ${e.rows}\n${rb}columns: ${e.columns}\n}`}function ab(e,t,i){return(e>=0&&i?` ${cb(e,t-1)}`:cb(e,t)).padEnd(t)}function cb(e,t){let i=e.toString();if(i.length<=t)return i;let n=e.toFixed(t);if(n.length>t&&(n=e.toFixed(Math.max(0,t-(n.length-t)))),n.length<=t&&!n.startsWith("0.000")&&!n.startsWith("-0.000"))return n;let r=e.toExponential(t);return r.length>t&&(r=e.toExponential(Math.max(0,t-(r.length-t)))),r.slice(0)}function lb(e,t,i){let n=i?e.rows:e.rows-1;if(t<0||t>n)throw new RangeError("Row index out of range")}function hb(e,t,i){let n=i?e.columns:e.columns-1;if(t<0||t>n)throw new RangeError("Column index out of range")}function db(e,t){if(t.to1DArray&&(t=t.to1DArray()),t.length!==e.columns)throw new RangeError("vector size must be the same as the number of columns");return t}function ub(e,t){if(t.to1DArray&&(t=t.to1DArray()),t.length!==e.rows)throw new RangeError("vector size must be the same as the number of rows");return t}function fb(e,t){if(!ib.isAnyArray(t))throw new TypeError("row indices must be an array");for(let i=0;i<t.length;i++)if(t[i]<0||t[i]>=e.rows)throw new RangeError("row indices are out of range")}function pb(e,t){if(!ib.isAnyArray(t))throw new TypeError("column indices must be an array");for(let i=0;i<t.length;i++)if(t[i]<0||t[i]>=e.columns)throw new RangeError("column indices are out of range")}function gb(e,t,i,n,r){if(5!==arguments.length)throw new RangeError("expected 4 arguments");if(wb("startRow",t),wb("endRow",i),wb("startColumn",n),wb("endColumn",r),t>i||n>r||t<0||t>=e.rows||i<0||i>=e.rows||n<0||n>=e.columns||r<0||r>=e.columns)throw new RangeError("Submatrix indices are out of range")}function mb(e,t=0){let i=[];for(let n=0;n<e;n++)i.push(t);return i}function wb(e,t){if("number"!=typeof t)throw new TypeError(`${e} must be a number`)}function bb(e){if(e.isEmpty())throw new Error("Empty matrix has no elements to index")}class Fb{static from1DArray(e,t,i){if(e*t!==i.length)throw new RangeError("data length does not match given dimensions");let n=new yb(e,t);for(let r=0;r<e;r++)for(let e=0;e<t;e++)n.set(r,e,i[r*t+e]);return n}static rowVector(e){let t=new yb(1,e.length);for(let i=0;i<e.length;i++)t.set(0,i,e[i]);return t}static columnVector(e){let t=new yb(e.length,1);for(let i=0;i<e.length;i++)t.set(i,0,e[i]);return t}static zeros(e,t){return new yb(e,t)}static ones(e,t){return new yb(e,t).fill(1)}static rand(e,t,i={}){if("object"!=typeof i)throw new TypeError("options must be an object");const{random:n=Math.random}=i;let r=new yb(e,t);for(let i=0;i<e;i++)for(let e=0;e<t;e++)r.set(i,e,n());return r}static randInt(e,t,i={}){if("object"!=typeof i)throw new TypeError("options must be an object");const{min:n=0,max:r=1e3,random:s=Math.random}=i;if(!Number.isInteger(n))throw new TypeError("min must be an integer");if(!Number.isInteger(r))throw new TypeError("max must be an integer");if(n>=r)throw new RangeError("min must be smaller than max");let o=r-n,a=new yb(e,t);for(let i=0;i<e;i++)for(let e=0;e<t;e++){let t=n+Math.round(s()*o);a.set(i,e,t)}return a}static eye(e,t,i){void 0===t&&(t=e),void 0===i&&(i=1);let n=Math.min(e,t),r=this.zeros(e,t);for(let e=0;e<n;e++)r.set(e,e,i);return r}static diag(e,t,i){let n=e.length;void 0===t&&(t=n),void 0===i&&(i=t);let r=Math.min(n,t,i),s=this.zeros(t,i);for(let t=0;t<r;t++)s.set(t,t,e[t]);return s}static min(e,t){e=this.checkMatrix(e),t=this.checkMatrix(t);let i=e.rows,n=e.columns,r=new yb(i,n);for(let s=0;s<i;s++)for(let i=0;i<n;i++)r.set(s,i,Math.min(e.get(s,i),t.get(s,i)));return r}static max(e,t){e=this.checkMatrix(e),t=this.checkMatrix(t);let i=e.rows,n=e.columns,r=new this(i,n);for(let s=0;s<i;s++)for(let i=0;i<n;i++)r.set(s,i,Math.max(e.get(s,i),t.get(s,i)));return r}static checkMatrix(e){return Fb.isMatrix(e)?e:new yb(e)}static isMatrix(e){return null!=e&&"Matrix"===e.klass}get size(){return this.rows*this.columns}apply(e){if("function"!=typeof e)throw new TypeError("callback must be a function");for(let t=0;t<this.rows;t++)for(let i=0;i<this.columns;i++)e.call(this,t,i);return this}to1DArray(){let e=[];for(let t=0;t<this.rows;t++)for(let i=0;i<this.columns;i++)e.push(this.get(t,i));return e}to2DArray(){let e=[];for(let t=0;t<this.rows;t++){e.push([]);for(let i=0;i<this.columns;i++)e[t].push(this.get(t,i))}return e}toJSON(){return this.to2DArray()}isRowVector(){return 1===this.rows}isColumnVector(){return 1===this.columns}isVector(){return 1===this.rows||1===this.columns}isSquare(){return this.rows===this.columns}isEmpty(){return 0===this.rows||0===this.columns}isSymmetric(){if(this.isSquare()){for(let e=0;e<this.rows;e++)for(let t=0;t<=e;t++)if(this.get(e,t)!==this.get(t,e))return!1;return!0}return!1}isDistance(){if(!this.isSymmetric())return!1;for(let e=0;e<this.rows;e++)if(0!==this.get(e,e))return!1;return!0}isEchelonForm(){let e=0,t=0,i=-1,n=!0,r=!1;for(;e<this.rows&&n;){for(t=0,r=!1;t<this.columns&&!1===r;)0===this.get(e,t)?t++:1===this.get(e,t)&&t>i?(r=!0,i=t):(n=!1,r=!0);e++}return n}isReducedEchelonForm(){let e=0,t=0,i=-1,n=!0,r=!1;for(;e<this.rows&&n;){for(t=0,r=!1;t<this.columns&&!1===r;)0===this.get(e,t)?t++:1===this.get(e,t)&&t>i?(r=!0,i=t):(n=!1,r=!0);for(let i=t+1;i<this.rows;i++)0!==this.get(e,i)&&(n=!1);e++}return n}echelonForm(){let e=this.clone(),t=0,i=0;for(;t<e.rows&&i<e.columns;){let n=t;for(let r=t;r<e.rows;r++)e.get(r,i)>e.get(n,i)&&(n=r);if(0===e.get(n,i))i++;else{e.swapRows(t,n);let r=e.get(t,i);for(let n=i;n<e.columns;n++)e.set(t,n,e.get(t,n)/r);for(let n=t+1;n<e.rows;n++){let r=e.get(n,i)/e.get(t,i);e.set(n,i,0);for(let s=i+1;s<e.columns;s++)e.set(n,s,e.get(n,s)-e.get(t,s)*r)}t++,i++}}return e}reducedEchelonForm(){let e=this.echelonForm(),t=e.columns,i=e.rows,n=i-1;for(;n>=0;)if(0===e.maxRow(n))n--;else{let r=0,s=!1;for(;r<i&&!1===s;)1===e.get(n,r)?s=!0:r++;for(let i=0;i<n;i++){let s=e.get(i,r);for(let o=r;o<t;o++){let t=e.get(i,o)-s*e.get(n,o);e.set(i,o,t)}}n--}return e}set(){throw new Error("set method is unimplemented")}get(){throw new Error("get method is unimplemented")}repeat(e={}){if("object"!=typeof e)throw new TypeError("options must be an object");const{rows:t=1,columns:i=1}=e;if(!Number.isInteger(t)||t<=0)throw new TypeError("rows must be a positive integer");if(!Number.isInteger(i)||i<=0)throw new TypeError("columns must be a positive integer");let n=new yb(this.rows*t,this.columns*i);for(let e=0;e<t;e++)for(let t=0;t<i;t++)n.setSubMatrix(this,this.rows*e,this.columns*t);return n}fill(e){for(let t=0;t<this.rows;t++)for(let i=0;i<this.columns;i++)this.set(t,i,e);return this}neg(){return this.mulS(-1)}getRow(e){lb(this,e);let t=[];for(let i=0;i<this.columns;i++)t.push(this.get(e,i));return t}getRowVector(e){return yb.rowVector(this.getRow(e))}setRow(e,t){lb(this,e),t=db(this,t);for(let i=0;i<this.columns;i++)this.set(e,i,t[i]);return this}swapRows(e,t){lb(this,e),lb(this,t);for(let i=0;i<this.columns;i++){let n=this.get(e,i);this.set(e,i,this.get(t,i)),this.set(t,i,n)}return this}getColumn(e){hb(this,e);let t=[];for(let i=0;i<this.rows;i++)t.push(this.get(i,e));return t}getColumnVector(e){return yb.columnVector(this.getColumn(e))}setColumn(e,t){hb(this,e),t=ub(this,t);for(let i=0;i<this.rows;i++)this.set(i,e,t[i]);return this}swapColumns(e,t){hb(this,e),hb(this,t);for(let i=0;i<this.rows;i++){let n=this.get(i,e);this.set(i,e,this.get(i,t)),this.set(i,t,n)}return this}addRowVector(e){e=db(this,e);for(let t=0;t<this.rows;t++)for(let i=0;i<this.columns;i++)this.set(t,i,this.get(t,i)+e[i]);return this}subRowVector(e){e=db(this,e);for(let t=0;t<this.rows;t++)for(let i=0;i<this.columns;i++)this.set(t,i,this.get(t,i)-e[i]);return this}mulRowVector(e){e=db(this,e);for(let t=0;t<this.rows;t++)for(let i=0;i<this.columns;i++)this.set(t,i,this.get(t,i)*e[i]);return this}divRowVector(e){e=db(this,e);for(let t=0;t<this.rows;t++)for(let i=0;i<this.columns;i++)this.set(t,i,this.get(t,i)/e[i]);return this}addColumnVector(e){e=ub(this,e);for(let t=0;t<this.rows;t++)for(let i=0;i<this.columns;i++)this.set(t,i,this.get(t,i)+e[t]);return this}subColumnVector(e){e=ub(this,e);for(let t=0;t<this.rows;t++)for(let i=0;i<this.columns;i++)this.set(t,i,this.get(t,i)-e[t]);return this}mulColumnVector(e){e=ub(this,e);for(let t=0;t<this.rows;t++)for(let i=0;i<this.columns;i++)this.set(t,i,this.get(t,i)*e[t]);return this}divColumnVector(e){e=ub(this,e);for(let t=0;t<this.rows;t++)for(let i=0;i<this.columns;i++)this.set(t,i,this.get(t,i)/e[t]);return this}mulRow(e,t){lb(this,e);for(let i=0;i<this.columns;i++)this.set(e,i,this.get(e,i)*t);return this}mulColumn(e,t){hb(this,e);for(let i=0;i<this.rows;i++)this.set(i,e,this.get(i,e)*t);return this}max(e){if(this.isEmpty())return NaN;switch(e){case"row":{const e=new Array(this.rows).fill(Number.NEGATIVE_INFINITY);for(let t=0;t<this.rows;t++)for(let i=0;i<this.columns;i++)this.get(t,i)>e[t]&&(e[t]=this.get(t,i));return e}case"column":{const e=new Array(this.columns).fill(Number.NEGATIVE_INFINITY);for(let t=0;t<this.rows;t++)for(let i=0;i<this.columns;i++)this.get(t,i)>e[i]&&(e[i]=this.get(t,i));return e}case void 0:{let e=this.get(0,0);for(let t=0;t<this.rows;t++)for(let i=0;i<this.columns;i++)this.get(t,i)>e&&(e=this.get(t,i));return e}default:throw new Error(`invalid option: ${e}`)}}maxIndex(){bb(this);let e=this.get(0,0),t=[0,0];for(let i=0;i<this.rows;i++)for(let n=0;n<this.columns;n++)this.get(i,n)>e&&(e=this.get(i,n),t[0]=i,t[1]=n);return t}min(e){if(this.isEmpty())return NaN;switch(e){case"row":{const e=new Array(this.rows).fill(Number.POSITIVE_INFINITY);for(let t=0;t<this.rows;t++)for(let i=0;i<this.columns;i++)this.get(t,i)<e[t]&&(e[t]=this.get(t,i));return e}case"column":{const e=new Array(this.columns).fill(Number.POSITIVE_INFINITY);for(let t=0;t<this.rows;t++)for(let i=0;i<this.columns;i++)this.get(t,i)<e[i]&&(e[i]=this.get(t,i));return e}case void 0:{let e=this.get(0,0);for(let t=0;t<this.rows;t++)for(let i=0;i<this.columns;i++)this.get(t,i)<e&&(e=this.get(t,i));return e}default:throw new Error(`invalid option: ${e}`)}}minIndex(){bb(this);let e=this.get(0,0),t=[0,0];for(let i=0;i<this.rows;i++)for(let n=0;n<this.columns;n++)this.get(i,n)<e&&(e=this.get(i,n),t[0]=i,t[1]=n);return t}maxRow(e){if(lb(this,e),this.isEmpty())return NaN;let t=this.get(e,0);for(let i=1;i<this.columns;i++)this.get(e,i)>t&&(t=this.get(e,i));return t}maxRowIndex(e){lb(this,e),bb(this);let t=this.get(e,0),i=[e,0];for(let n=1;n<this.columns;n++)this.get(e,n)>t&&(t=this.get(e,n),i[1]=n);return i}minRow(e){if(lb(this,e),this.isEmpty())return NaN;let t=this.get(e,0);for(let i=1;i<this.columns;i++)this.get(e,i)<t&&(t=this.get(e,i));return t}minRowIndex(e){lb(this,e),bb(this);let t=this.get(e,0),i=[e,0];for(let n=1;n<this.columns;n++)this.get(e,n)<t&&(t=this.get(e,n),i[1]=n);return i}maxColumn(e){if(hb(this,e),this.isEmpty())return NaN;let t=this.get(0,e);for(let i=1;i<this.rows;i++)this.get(i,e)>t&&(t=this.get(i,e));return t}maxColumnIndex(e){hb(this,e),bb(this);let t=this.get(0,e),i=[0,e];for(let n=1;n<this.rows;n++)this.get(n,e)>t&&(t=this.get(n,e),i[0]=n);return i}minColumn(e){if(hb(this,e),this.isEmpty())return NaN;let t=this.get(0,e);for(let i=1;i<this.rows;i++)this.get(i,e)<t&&(t=this.get(i,e));return t}minColumnIndex(e){hb(this,e),bb(this);let t=this.get(0,e),i=[0,e];for(let n=1;n<this.rows;n++)this.get(n,e)<t&&(t=this.get(n,e),i[0]=n);return i}diag(){let e=Math.min(this.rows,this.columns),t=[];for(let i=0;i<e;i++)t.push(this.get(i,i));return t}norm(e="frobenius"){switch(e){case"max":return this.max();case"frobenius":return Math.sqrt(this.dot(this));default:throw new RangeError(`unknown norm type: ${e}`)}}cumulativeSum(){let e=0;for(let t=0;t<this.rows;t++)for(let i=0;i<this.columns;i++)e+=this.get(t,i),this.set(t,i,e);return this}dot(e){Fb.isMatrix(e)&&(e=e.to1DArray());let t=this.to1DArray();if(t.length!==e.length)throw new RangeError("vectors do not have the same size");let i=0;for(let n=0;n<t.length;n++)i+=t[n]*e[n];return i}mmul(e){e=yb.checkMatrix(e);let t=this.rows,i=this.columns,n=e.columns,r=new yb(t,n),s=new Float64Array(i);for(let o=0;o<n;o++){for(let t=0;t<i;t++)s[t]=e.get(t,o);for(let e=0;e<t;e++){let t=0;for(let n=0;n<i;n++)t+=this.get(e,n)*s[n];r.set(e,o,t)}}return r}mpow(e){if(!this.isSquare())throw new RangeError("Matrix must be square");if(!Number.isInteger(e)||e<0)throw new RangeError("Exponent must be a non-negative integer");let t=yb.eye(this.rows),i=this;for(let n=e;n>1;n/=2)1&n&&(t=t.mmul(i)),i=i.mmul(i);return t}strassen2x2(e){e=yb.checkMatrix(e);let t=new yb(2,2);const i=this.get(0,0),n=e.get(0,0),r=this.get(0,1),s=e.get(0,1),o=this.get(1,0),a=e.get(1,0),c=this.get(1,1),l=e.get(1,1),h=(i+c)*(n+l),d=(o+c)*n,u=i*(s-l),f=c*(a-n),p=(i+r)*l,g=h+f-p+(r-c)*(a+l),m=u+p,w=d+f,b=h-d+u+(o-i)*(n+s);return t.set(0,0,g),t.set(0,1,m),t.set(1,0,w),t.set(1,1,b),t}strassen3x3(e){e=yb.checkMatrix(e);let t=new yb(3,3);const i=this.get(0,0),n=this.get(0,1),r=this.get(0,2),s=this.get(1,0),o=this.get(1,1),a=this.get(1,2),c=this.get(2,0),l=this.get(2,1),h=this.get(2,2),d=e.get(0,0),u=e.get(0,1),f=e.get(0,2),p=e.get(1,0),g=e.get(1,1),m=e.get(1,2),w=e.get(2,0),b=e.get(2,1),F=e.get(2,2),v=(i-s)*(-u+g),y=(-i+s+o)*(d-u+g),A=(s+o)*(-d+u),C=i*d,_=(-i+c+l)*(d-f+m),x=(-i+c)*(f-m),k=(c+l)*(-d+f),I=(-r+l+h)*(g+w-b),S=(r-h)*(g-b),E=r*w,N=(l+h)*(-w+b),M=(-r+o+a)*(m+w-F),R=(r-a)*(m-F),B=(o+a)*(-w+F),D=C+E+n*p,T=(i+n+r-s-o-l-h)*g+y+A+C+I+E+N,z=C+_+k+(i+n+r-o-a-c-l)*m+E+M+B,L=v+o*(-d+u+p-g-m-w+F)+y+C+E+M+R,H=v+y+A+C+a*b,P=E+M+R+B+s*f,O=C+_+x+l*(-d+f+p-g-m-w+b)+I+S+E,V=I+S+E+N+c*u,q=C+_+x+k+h*F;return t.set(0,0,D),t.set(0,1,T),t.set(0,2,z),t.set(1,0,L),t.set(1,1,H),t.set(1,2,P),t.set(2,0,O),t.set(2,1,V),t.set(2,2,q),t}mmulStrassen(e){e=yb.checkMatrix(e);let t=this.clone(),i=t.rows,n=t.columns,r=e.rows,s=e.columns;function o(e,t,i){let n=e.rows,r=e.columns;if(n===t&&r===i)return e;{let n=Fb.zeros(t,i);return n=n.setSubMatrix(e,0,0),n}}n!==r&&console.warn(`Multiplying ${i} x ${n} and ${r} x ${s} matrix: dimensions do not match.`);let a=Math.max(i,r),c=Math.max(n,s);return t=o(t,a,c),function e(t,i,n,r){if(n<=512||r<=512)return t.mmul(i);n%2==1&&r%2==1?(t=o(t,n+1,r+1),i=o(i,n+1,r+1)):n%2==1?(t=o(t,n+1,r),i=o(i,n+1,r)):r%2==1&&(t=o(t,n,r+1),i=o(i,n,r+1));let s=parseInt(t.rows/2,10),a=parseInt(t.columns/2,10),c=t.subMatrix(0,s-1,0,a-1),l=i.subMatrix(0,s-1,0,a-1),h=t.subMatrix(0,s-1,a,t.columns-1),d=i.subMatrix(0,s-1,a,i.columns-1),u=t.subMatrix(s,t.rows-1,0,a-1),f=i.subMatrix(s,i.rows-1,0,a-1),p=t.subMatrix(s,t.rows-1,a,t.columns-1),g=i.subMatrix(s,i.rows-1,a,i.columns-1),m=e(Fb.add(c,p),Fb.add(l,g),s,a),w=e(Fb.add(u,p),l,s,a),b=e(c,Fb.sub(d,g),s,a),F=e(p,Fb.sub(f,l),s,a),v=e(Fb.add(c,h),g,s,a),y=e(Fb.sub(u,c),Fb.add(l,d),s,a),A=e(Fb.sub(h,p),Fb.add(f,g),s,a),C=Fb.add(m,F);C.sub(v),C.add(A);let _=Fb.add(b,v),x=Fb.add(w,F),k=Fb.sub(m,w);k.add(b),k.add(y);let I=Fb.zeros(2*C.rows,2*C.columns);return I=I.setSubMatrix(C,0,0),I=I.setSubMatrix(_,C.rows,0),I=I.setSubMatrix(x,0,C.columns),I=I.setSubMatrix(k,C.rows,C.columns),I.subMatrix(0,n-1,0,r-1)}(t,e=o(e,a,c),a,c)}scaleRows(e={}){if("object"!=typeof e)throw new TypeError("options must be an object");const{min:t=0,max:i=1}=e;if(!Number.isFinite(t))throw new TypeError("min must be a number");if(!Number.isFinite(i))throw new TypeError("max must be a number");if(t>=i)throw new RangeError("min must be smaller than max");let n=new yb(this.rows,this.columns);for(let e=0;e<this.rows;e++){const r=this.getRow(e);r.length>0&&nb(r,{min:t,max:i,output:r}),n.setRow(e,r)}return n}scaleColumns(e={}){if("object"!=typeof e)throw new TypeError("options must be an object");const{min:t=0,max:i=1}=e;if(!Number.isFinite(t))throw new TypeError("min must be a number");if(!Number.isFinite(i))throw new TypeError("max must be a number");if(t>=i)throw new RangeError("min must be smaller than max");let n=new yb(this.rows,this.columns);for(let e=0;e<this.columns;e++){const r=this.getColumn(e);r.length&&nb(r,{min:t,max:i,output:r}),n.setColumn(e,r)}return n}flipRows(){const e=Math.ceil(this.columns/2);for(let t=0;t<this.rows;t++)for(let i=0;i<e;i++){let e=this.get(t,i),n=this.get(t,this.columns-1-i);this.set(t,i,n),this.set(t,this.columns-1-i,e)}return this}flipColumns(){const e=Math.ceil(this.rows/2);for(let t=0;t<this.columns;t++)for(let i=0;i<e;i++){let e=this.get(i,t),n=this.get(this.rows-1-i,t);this.set(i,t,n),this.set(this.rows-1-i,t,e)}return this}kroneckerProduct(e){e=yb.checkMatrix(e);let t=this.rows,i=this.columns,n=e.rows,r=e.columns,s=new yb(t*n,i*r);for(let o=0;o<t;o++)for(let t=0;t<i;t++)for(let i=0;i<n;i++)for(let a=0;a<r;a++)s.set(n*o+i,r*t+a,this.get(o,t)*e.get(i,a));return s}kroneckerSum(e){if(e=yb.checkMatrix(e),!this.isSquare()||!e.isSquare())throw new Error("Kronecker Sum needs two Square Matrices");let t=this.rows,i=e.rows,n=this.kroneckerProduct(yb.eye(i,i)),r=yb.eye(t,t).kroneckerProduct(e);return n.add(r)}transpose(){let e=new yb(this.columns,this.rows);for(let t=0;t<this.rows;t++)for(let i=0;i<this.columns;i++)e.set(i,t,this.get(t,i));return e}sortRows(e=vb){for(let t=0;t<this.rows;t++)this.setRow(t,this.getRow(t).sort(e));return this}sortColumns(e=vb){for(let t=0;t<this.columns;t++)this.setColumn(t,this.getColumn(t).sort(e));return this}subMatrix(e,t,i,n){gb(this,e,t,i,n);let r=new yb(t-e+1,n-i+1);for(let s=e;s<=t;s++)for(let t=i;t<=n;t++)r.set(s-e,t-i,this.get(s,t));return r}subMatrixRow(e,t,i){if(void 0===t&&(t=0),void 0===i&&(i=this.columns-1),t>i||t<0||t>=this.columns||i<0||i>=this.columns)throw new RangeError("Argument out of range");let n=new yb(e.length,i-t+1);for(let r=0;r<e.length;r++)for(let s=t;s<=i;s++){if(e[r]<0||e[r]>=this.rows)throw new RangeError(`Row index out of range: ${e[r]}`);n.set(r,s-t,this.get(e[r],s))}return n}subMatrixColumn(e,t,i){if(void 0===t&&(t=0),void 0===i&&(i=this.rows-1),t>i||t<0||t>=this.rows||i<0||i>=this.rows)throw new RangeError("Argument out of range");let n=new yb(i-t+1,e.length);for(let r=0;r<e.length;r++)for(let s=t;s<=i;s++){if(e[r]<0||e[r]>=this.columns)throw new RangeError(`Column index out of range: ${e[r]}`);n.set(s-t,r,this.get(s,e[r]))}return n}setSubMatrix(e,t,i){if((e=yb.checkMatrix(e)).isEmpty())return this;gb(this,t,t+e.rows-1,i,i+e.columns-1);for(let n=0;n<e.rows;n++)for(let r=0;r<e.columns;r++)this.set(t+n,i+r,e.get(n,r));return this}selection(e,t){fb(this,e),pb(this,t);let i=new yb(e.length,t.length);for(let n=0;n<e.length;n++){let r=e[n];for(let e=0;e<t.length;e++){let s=t[e];i.set(n,e,this.get(r,s))}}return i}trace(){let e=Math.min(this.rows,this.columns),t=0;for(let i=0;i<e;i++)t+=this.get(i,i);return t}clone(){return this.constructor.copy(this,new yb(this.rows,this.columns))}static copy(e,t){for(const[i,n,r]of e.entries())t.set(i,n,r);return t}sum(e){switch(e){case"row":return function(e){let t=mb(e.rows);for(let i=0;i<e.rows;++i)for(let n=0;n<e.columns;++n)t[i]+=e.get(i,n);return t}(this);case"column":return function(e){let t=mb(e.columns);for(let i=0;i<e.rows;++i)for(let n=0;n<e.columns;++n)t[n]+=e.get(i,n);return t}(this);case void 0:return function(e){let t=0;for(let i=0;i<e.rows;i++)for(let n=0;n<e.columns;n++)t+=e.get(i,n);return t}(this);default:throw new Error(`invalid option: ${e}`)}}product(e){switch(e){case"row":return function(e){let t=mb(e.rows,1);for(let i=0;i<e.rows;++i)for(let n=0;n<e.columns;++n)t[i]*=e.get(i,n);return t}(this);case"column":return function(e){let t=mb(e.columns,1);for(let i=0;i<e.rows;++i)for(let n=0;n<e.columns;++n)t[n]*=e.get(i,n);return t}(this);case void 0:return function(e){let t=1;for(let i=0;i<e.rows;i++)for(let n=0;n<e.columns;n++)t*=e.get(i,n);return t}(this);default:throw new Error(`invalid option: ${e}`)}}mean(e){const t=this.sum(e);switch(e){case"row":for(let e=0;e<this.rows;e++)t[e]/=this.columns;return t;case"column":for(let e=0;e<this.columns;e++)t[e]/=this.rows;return t;case void 0:return t/this.size;default:throw new Error(`invalid option: ${e}`)}}variance(e,t={}){if("object"==typeof e&&(t=e,e=void 0),"object"!=typeof t)throw new TypeError("options must be an object");const{unbiased:i=!0,mean:n=this.mean(e)}=t;if("boolean"!=typeof i)throw new TypeError("unbiased must be a boolean");switch(e){case"row":if(!ib.isAnyArray(n))throw new TypeError("mean must be an array");return function(e,t,i){const n=e.rows,r=e.columns,s=[];for(let o=0;o<n;o++){let n=0,a=0,c=0;for(let t=0;t<r;t++)c=e.get(o,t)-i[o],n+=c,a+=c*c;t?s.push((a-n*n/r)/(r-1)):s.push((a-n*n/r)/r)}return s}(this,i,n);case"column":if(!ib.isAnyArray(n))throw new TypeError("mean must be an array");return function(e,t,i){const n=e.rows,r=e.columns,s=[];for(let o=0;o<r;o++){let r=0,a=0,c=0;for(let t=0;t<n;t++)c=e.get(t,o)-i[o],r+=c,a+=c*c;t?s.push((a-r*r/n)/(n-1)):s.push((a-r*r/n)/n)}return s}(this,i,n);case void 0:if("number"!=typeof n)throw new TypeError("mean must be a number");return function(e,t,i){const n=e.rows,r=e.columns,s=n*r;let o=0,a=0,c=0;for(let t=0;t<n;t++)for(let n=0;n<r;n++)c=e.get(t,n)-i,o+=c,a+=c*c;return t?(a-o*o/s)/(s-1):(a-o*o/s)/s}(this,i,n);default:throw new Error(`invalid option: ${e}`)}}standardDeviation(e,t){"object"==typeof e&&(t=e,e=void 0);const i=this.variance(e,t);if(void 0===e)return Math.sqrt(i);for(let e=0;e<i.length;e++)i[e]=Math.sqrt(i[e]);return i}center(e,t={}){if("object"==typeof e&&(t=e,e=void 0),"object"!=typeof t)throw new TypeError("options must be an object");const{center:i=this.mean(e)}=t;switch(e){case"row":if(!ib.isAnyArray(i))throw new TypeError("center must be an array");return function(e,t){for(let i=0;i<e.rows;i++)for(let n=0;n<e.columns;n++)e.set(i,n,e.get(i,n)-t[i])}(this,i),this;case"column":if(!ib.isAnyArray(i))throw new TypeError("center must be an array");return function(e,t){for(let i=0;i<e.rows;i++)for(let n=0;n<e.columns;n++)e.set(i,n,e.get(i,n)-t[n])}(this,i),this;case void 0:if("number"!=typeof i)throw new TypeError("center must be a number");return function(e,t){for(let i=0;i<e.rows;i++)for(let n=0;n<e.columns;n++)e.set(i,n,e.get(i,n)-t)}(this,i),this;default:throw new Error(`invalid option: ${e}`)}}scale(e,t={}){if("object"==typeof e&&(t=e,e=void 0),"object"!=typeof t)throw new TypeError("options must be an object");let i=t.scale;switch(e){case"row":if(void 0===i)i=function(e){const t=[];for(let i=0;i<e.rows;i++){let n=0;for(let t=0;t<e.columns;t++)n+=e.get(i,t)**2/(e.columns-1);t.push(Math.sqrt(n))}return t}(this);else if(!ib.isAnyArray(i))throw new TypeError("scale must be an array");return function(e,t){for(let i=0;i<e.rows;i++)for(let n=0;n<e.columns;n++)e.set(i,n,e.get(i,n)/t[i])}(this,i),this;case"column":if(void 0===i)i=function(e){const t=[];for(let i=0;i<e.columns;i++){let n=0;for(let t=0;t<e.rows;t++)n+=e.get(t,i)**2/(e.rows-1);t.push(Math.sqrt(n))}return t}(this);else if(!ib.isAnyArray(i))throw new TypeError("scale must be an array");return function(e,t){for(let i=0;i<e.rows;i++)for(let n=0;n<e.columns;n++)e.set(i,n,e.get(i,n)/t[n])}(this,i),this;case void 0:if(void 0===i)i=function(e){const t=e.size-1;let i=0;for(let n=0;n<e.columns;n++)for(let r=0;r<e.rows;r++)i+=e.get(r,n)**2/t;return Math.sqrt(i)}(this);else if("number"!=typeof i)throw new TypeError("scale must be a number");return function(e,t){for(let i=0;i<e.rows;i++)for(let n=0;n<e.columns;n++)e.set(i,n,e.get(i,n)/t)}(this,i),this;default:throw new Error(`invalid option: ${e}`)}}toString(e){return ob(this,e)}[Symbol.iterator](){return this.entries()}*entries(){for(let e=0;e<this.rows;e++)for(let t=0;t<this.columns;t++)yield[e,t,this.get(e,t)]}*values(){for(let e=0;e<this.rows;e++)for(let t=0;t<this.columns;t++)yield this.get(e,t)}}function vb(e,t){return e-t}Fb.prototype.klass="Matrix","undefined"!=typeof Symbol&&(Fb.prototype[Symbol.for("nodejs.util.inspect.custom")]=function(){return ob(this)}),Fb.random=Fb.rand,Fb.randomInt=Fb.randInt,Fb.diagonal=Fb.diag,Fb.prototype.diagonal=Fb.prototype.diag,Fb.identity=Fb.eye,Fb.prototype.negate=Fb.prototype.neg,Fb.prototype.tensorProduct=Fb.prototype.kroneckerProduct;class yb extends Fb{data;#k(e,t){if(this.data=[],!(Number.isInteger(t)&&t>=0))throw new TypeError("nColumns must be a positive integer");for(let i=0;i<e;i++)this.data.push(new Float64Array(t));this.rows=e,this.columns=t}constructor(e,t){if(super(),yb.isMatrix(e))this.#k(e.rows,e.columns),yb.copy(e,this);else if(Number.isInteger(e)&&e>=0)this.#k(e,t);else{if(!ib.isAnyArray(e))throw new TypeError("First argument must be a positive number or an array");{const i=e;if("number"!=typeof(t=(e=i.length)?i[0].length:0))throw new TypeError("Data must be a 2D array with at least one element");this.data=[];for(let n=0;n<e;n++){if(i[n].length!==t)throw new RangeError("Inconsistent array dimensions");if(!i[n].every((e=>"number"==typeof e)))throw new TypeError("Input data contains non-numeric values");this.data.push(Float64Array.from(i[n]))}this.rows=e,this.columns=t}}}set(e,t,i){return this.data[e][t]=i,this}get(e,t){return this.data[e][t]}removeRow(e){return lb(this,e),this.data.splice(e,1),this.rows-=1,this}addRow(e,t){return void 0===t&&(t=e,e=this.rows),lb(this,e,!0),t=Float64Array.from(db(this,t)),this.data.splice(e,0,t),this.rows+=1,this}removeColumn(e){hb(this,e);for(let t=0;t<this.rows;t++){const i=new Float64Array(this.columns-1);for(let n=0;n<e;n++)i[n]=this.data[t][n];for(let n=e+1;n<this.columns;n++)i[n-1]=this.data[t][n];this.data[t]=i}return this.columns-=1,this}addColumn(e,t){void 0===t&&(t=e,e=this.columns),hb(this,e,!0),t=ub(this,t);for(let i=0;i<this.rows;i++){const n=new Float64Array(this.columns+1);let r=0;for(;r<e;r++)n[r]=this.data[i][r];for(n[r++]=t[i];r<this.columns+1;r++)n[r]=this.data[i][r-1];this.data[i]=n}return this.columns+=1,this}}!function(e,t){e.prototype.add=function(e){return"number"==typeof e?this.addS(e):this.addM(e)},e.prototype.addS=function(e){for(let t=0;t<this.rows;t++)for(let i=0;i<this.columns;i++)this.set(t,i,this.get(t,i)+e);return this},e.prototype.addM=function(e){if(e=t.checkMatrix(e),this.rows!==e.rows||this.columns!==e.columns)throw new RangeError("Matrices dimensions must be equal");for(let t=0;t<this.rows;t++)for(let i=0;i<this.columns;i++)this.set(t,i,this.get(t,i)+e.get(t,i));return this},e.add=function(e,i){return new t(e).add(i)},e.prototype.sub=function(e){return"number"==typeof e?this.subS(e):this.subM(e)},e.prototype.subS=function(e){for(let t=0;t<this.rows;t++)for(let i=0;i<this.columns;i++)this.set(t,i,this.get(t,i)-e);return this},e.prototype.subM=function(e){if(e=t.checkMatrix(e),this.rows!==e.rows||this.columns!==e.columns)throw new RangeError("Matrices dimensions must be equal");for(let t=0;t<this.rows;t++)for(let i=0;i<this.columns;i++)this.set(t,i,this.get(t,i)-e.get(t,i));return this},e.sub=function(e,i){return new t(e).sub(i)},e.prototype.subtract=e.prototype.sub,e.prototype.subtractS=e.prototype.subS,e.prototype.subtractM=e.prototype.subM,e.subtract=e.sub,e.prototype.mul=function(e){return"number"==typeof e?this.mulS(e):this.mulM(e)},e.prototype.mulS=function(e){for(let t=0;t<this.rows;t++)for(let i=0;i<this.columns;i++)this.set(t,i,this.get(t,i)*e);return this},e.prototype.mulM=function(e){if(e=t.checkMatrix(e),this.rows!==e.rows||this.columns!==e.columns)throw new RangeError("Matrices dimensions must be equal");for(let t=0;t<this.rows;t++)for(let i=0;i<this.columns;i++)this.set(t,i,this.get(t,i)*e.get(t,i));return this},e.mul=function(e,i){return new t(e).mul(i)},e.prototype.multiply=e.prototype.mul,e.prototype.multiplyS=e.prototype.mulS,e.prototype.multiplyM=e.prototype.mulM,e.multiply=e.mul,e.prototype.div=function(e){return"number"==typeof e?this.divS(e):this.divM(e)},e.prototype.divS=function(e){for(let t=0;t<this.rows;t++)for(let i=0;i<this.columns;i++)this.set(t,i,this.get(t,i)/e);return this},e.prototype.divM=function(e){if(e=t.checkMatrix(e),this.rows!==e.rows||this.columns!==e.columns)throw new RangeError("Matrices dimensions must be equal");for(let t=0;t<this.rows;t++)for(let i=0;i<this.columns;i++)this.set(t,i,this.get(t,i)/e.get(t,i));return this},e.div=function(e,i){return new t(e).div(i)},e.prototype.divide=e.prototype.div,e.prototype.divideS=e.prototype.divS,e.prototype.divideM=e.prototype.divM,e.divide=e.div,e.prototype.mod=function(e){return"number"==typeof e?this.modS(e):this.modM(e)},e.prototype.modS=function(e){for(let t=0;t<this.rows;t++)for(let i=0;i<this.columns;i++)this.set(t,i,this.get(t,i)%e);return this},e.prototype.modM=function(e){if(e=t.checkMatrix(e),this.rows!==e.rows||this.columns!==e.columns)throw new RangeError("Matrices dimensions must be equal");for(let t=0;t<this.rows;t++)for(let i=0;i<this.columns;i++)this.set(t,i,this.get(t,i)%e.get(t,i));return this},e.mod=function(e,i){return new t(e).mod(i)},e.prototype.modulus=e.prototype.mod,e.prototype.modulusS=e.prototype.modS,e.prototype.modulusM=e.prototype.modM,e.modulus=e.mod,e.prototype.and=function(e){return"number"==typeof e?this.andS(e):this.andM(e)},e.prototype.andS=function(e){for(let t=0;t<this.rows;t++)for(let i=0;i<this.columns;i++)this.set(t,i,this.get(t,i)&e);return this},e.prototype.andM=function(e){if(e=t.checkMatrix(e),this.rows!==e.rows||this.columns!==e.columns)throw new RangeError("Matrices dimensions must be equal");for(let t=0;t<this.rows;t++)for(let i=0;i<this.columns;i++)this.set(t,i,this.get(t,i)&e.get(t,i));return this},e.and=function(e,i){return new t(e).and(i)},e.prototype.or=function(e){return"number"==typeof e?this.orS(e):this.orM(e)},e.prototype.orS=function(e){for(let t=0;t<this.rows;t++)for(let i=0;i<this.columns;i++)this.set(t,i,this.get(t,i)|e);return this},e.prototype.orM=function(e){if(e=t.checkMatrix(e),this.rows!==e.rows||this.columns!==e.columns)throw new RangeError("Matrices dimensions must be equal");for(let t=0;t<this.rows;t++)for(let i=0;i<this.columns;i++)this.set(t,i,this.get(t,i)|e.get(t,i));return this},e.or=function(e,i){return new t(e).or(i)},e.prototype.xor=function(e){return"number"==typeof e?this.xorS(e):this.xorM(e)},e.prototype.xorS=function(e){for(let t=0;t<this.rows;t++)for(let i=0;i<this.columns;i++)this.set(t,i,this.get(t,i)^e);return this},e.prototype.xorM=function(e){if(e=t.checkMatrix(e),this.rows!==e.rows||this.columns!==e.columns)throw new RangeError("Matrices dimensions must be equal");for(let t=0;t<this.rows;t++)for(let i=0;i<this.columns;i++)this.set(t,i,this.get(t,i)^e.get(t,i));return this},e.xor=function(e,i){return new t(e).xor(i)},e.prototype.leftShift=function(e){return"number"==typeof e?this.leftShiftS(e):this.leftShiftM(e)},e.prototype.leftShiftS=function(e){for(let t=0;t<this.rows;t++)for(let i=0;i<this.columns;i++)this.set(t,i,this.get(t,i)<<e);return this},e.prototype.leftShiftM=function(e){if(e=t.checkMatrix(e),this.rows!==e.rows||this.columns!==e.columns)throw new RangeError("Matrices dimensions must be equal");for(let t=0;t<this.rows;t++)for(let i=0;i<this.columns;i++)this.set(t,i,this.get(t,i)<<e.get(t,i));return this},e.leftShift=function(e,i){return new t(e).leftShift(i)},e.prototype.signPropagatingRightShift=function(e){return"number"==typeof e?this.signPropagatingRightShiftS(e):this.signPropagatingRightShiftM(e)},e.prototype.signPropagatingRightShiftS=function(e){for(let t=0;t<this.rows;t++)for(let i=0;i<this.columns;i++)this.set(t,i,this.get(t,i)>>e);return this},e.prototype.signPropagatingRightShiftM=function(e){if(e=t.checkMatrix(e),this.rows!==e.rows||this.columns!==e.columns)throw new RangeError("Matrices dimensions must be equal");for(let t=0;t<this.rows;t++)for(let i=0;i<this.columns;i++)this.set(t,i,this.get(t,i)>>e.get(t,i));return this},e.signPropagatingRightShift=function(e,i){return new t(e).signPropagatingRightShift(i)},e.prototype.rightShift=function(e){return"number"==typeof e?this.rightShiftS(e):this.rightShiftM(e)},e.prototype.rightShiftS=function(e){for(let t=0;t<this.rows;t++)for(let i=0;i<this.columns;i++)this.set(t,i,this.get(t,i)>>>e);return this},e.prototype.rightShiftM=function(e){if(e=t.checkMatrix(e),this.rows!==e.rows||this.columns!==e.columns)throw new RangeError("Matrices dimensions must be equal");for(let t=0;t<this.rows;t++)for(let i=0;i<this.columns;i++)this.set(t,i,this.get(t,i)>>>e.get(t,i));return this},e.rightShift=function(e,i){return new t(e).rightShift(i)},e.prototype.zeroFillRightShift=e.prototype.rightShift,e.prototype.zeroFillRightShiftS=e.prototype.rightShiftS,e.prototype.zeroFillRightShiftM=e.prototype.rightShiftM,e.zeroFillRightShift=e.rightShift,e.prototype.not=function(){for(let e=0;e<this.rows;e++)for(let t=0;t<this.columns;t++)this.set(e,t,~this.get(e,t));return this},e.not=function(e){return new t(e).not()},e.prototype.abs=function(){for(let e=0;e<this.rows;e++)for(let t=0;t<this.columns;t++)this.set(e,t,Math.abs(this.get(e,t)));return this},e.abs=function(e){return new t(e).abs()},e.prototype.acos=function(){for(let e=0;e<this.rows;e++)for(let t=0;t<this.columns;t++)this.set(e,t,Math.acos(this.get(e,t)));return this},e.acos=function(e){return new t(e).acos()},e.prototype.acosh=function(){for(let e=0;e<this.rows;e++)for(let t=0;t<this.columns;t++)this.set(e,t,Math.acosh(this.get(e,t)));return this},e.acosh=function(e){return new t(e).acosh()},e.prototype.asin=function(){for(let e=0;e<this.rows;e++)for(let t=0;t<this.columns;t++)this.set(e,t,Math.asin(this.get(e,t)));return this},e.asin=function(e){return new t(e).asin()},e.prototype.asinh=function(){for(let e=0;e<this.rows;e++)for(let t=0;t<this.columns;t++)this.set(e,t,Math.asinh(this.get(e,t)));return this},e.asinh=function(e){return new t(e).asinh()},e.prototype.atan=function(){for(let e=0;e<this.rows;e++)for(let t=0;t<this.columns;t++)this.set(e,t,Math.atan(this.get(e,t)));return this},e.atan=function(e){return new t(e).atan()},e.prototype.atanh=function(){for(let e=0;e<this.rows;e++)for(let t=0;t<this.columns;t++)this.set(e,t,Math.atanh(this.get(e,t)));return this},e.atanh=function(e){return new t(e).atanh()},e.prototype.cbrt=function(){for(let e=0;e<this.rows;e++)for(let t=0;t<this.columns;t++)this.set(e,t,Math.cbrt(this.get(e,t)));return this},e.cbrt=function(e){return new t(e).cbrt()},e.prototype.ceil=function(){for(let e=0;e<this.rows;e++)for(let t=0;t<this.columns;t++)this.set(e,t,Math.ceil(this.get(e,t)));return this},e.ceil=function(e){return new t(e).ceil()},e.prototype.clz32=function(){for(let e=0;e<this.rows;e++)for(let t=0;t<this.columns;t++)this.set(e,t,Math.clz32(this.get(e,t)));return this},e.clz32=function(e){return new t(e).clz32()},e.prototype.cos=function(){for(let e=0;e<this.rows;e++)for(let t=0;t<this.columns;t++)this.set(e,t,Math.cos(this.get(e,t)));return this},e.cos=function(e){return new t(e).cos()},e.prototype.cosh=function(){for(let e=0;e<this.rows;e++)for(let t=0;t<this.columns;t++)this.set(e,t,Math.cosh(this.get(e,t)));return this},e.cosh=function(e){return new t(e).cosh()},e.prototype.exp=function(){for(let e=0;e<this.rows;e++)for(let t=0;t<this.columns;t++)this.set(e,t,Math.exp(this.get(e,t)));return this},e.exp=function(e){return new t(e).exp()},e.prototype.expm1=function(){for(let e=0;e<this.rows;e++)for(let t=0;t<this.columns;t++)this.set(e,t,Math.expm1(this.get(e,t)));return this},e.expm1=function(e){return new t(e).expm1()},e.prototype.floor=function(){for(let e=0;e<this.rows;e++)for(let t=0;t<this.columns;t++)this.set(e,t,Math.floor(this.get(e,t)));return this},e.floor=function(e){return new t(e).floor()},e.prototype.fround=function(){for(let e=0;e<this.rows;e++)for(let t=0;t<this.columns;t++)this.set(e,t,Math.fround(this.get(e,t)));return this},e.fround=function(e){return new t(e).fround()},e.prototype.log=function(){for(let e=0;e<this.rows;e++)for(let t=0;t<this.columns;t++)this.set(e,t,Math.log(this.get(e,t)));return this},e.log=function(e){return new t(e).log()},e.prototype.log1p=function(){for(let e=0;e<this.rows;e++)for(let t=0;t<this.columns;t++)this.set(e,t,Math.log1p(this.get(e,t)));return this},e.log1p=function(e){return new t(e).log1p()},e.prototype.log10=function(){for(let e=0;e<this.rows;e++)for(let t=0;t<this.columns;t++)this.set(e,t,Math.log10(this.get(e,t)));return this},e.log10=function(e){return new t(e).log10()},e.prototype.log2=function(){for(let e=0;e<this.rows;e++)for(let t=0;t<this.columns;t++)this.set(e,t,Math.log2(this.get(e,t)));return this},e.log2=function(e){return new t(e).log2()},e.prototype.round=function(){for(let e=0;e<this.rows;e++)for(let t=0;t<this.columns;t++)this.set(e,t,Math.round(this.get(e,t)));return this},e.round=function(e){return new t(e).round()},e.prototype.sign=function(){for(let e=0;e<this.rows;e++)for(let t=0;t<this.columns;t++)this.set(e,t,Math.sign(this.get(e,t)));return this},e.sign=function(e){return new t(e).sign()},e.prototype.sin=function(){for(let e=0;e<this.rows;e++)for(let t=0;t<this.columns;t++)this.set(e,t,Math.sin(this.get(e,t)));return this},e.sin=function(e){return new t(e).sin()},e.prototype.sinh=function(){for(let e=0;e<this.rows;e++)for(let t=0;t<this.columns;t++)this.set(e,t,Math.sinh(this.get(e,t)));return this},e.sinh=function(e){return new t(e).sinh()},e.prototype.sqrt=function(){for(let e=0;e<this.rows;e++)for(let t=0;t<this.columns;t++)this.set(e,t,Math.sqrt(this.get(e,t)));return this},e.sqrt=function(e){return new t(e).sqrt()},e.prototype.tan=function(){for(let e=0;e<this.rows;e++)for(let t=0;t<this.columns;t++)this.set(e,t,Math.tan(this.get(e,t)));return this},e.tan=function(e){return new t(e).tan()},e.prototype.tanh=function(){for(let e=0;e<this.rows;e++)for(let t=0;t<this.columns;t++)this.set(e,t,Math.tanh(this.get(e,t)));return this},e.tanh=function(e){return new t(e).tanh()},e.prototype.trunc=function(){for(let e=0;e<this.rows;e++)for(let t=0;t<this.columns;t++)this.set(e,t,Math.trunc(this.get(e,t)));return this},e.trunc=function(e){return new t(e).trunc()},e.pow=function(e,i){return new t(e).pow(i)},e.prototype.pow=function(e){return"number"==typeof e?this.powS(e):this.powM(e)},e.prototype.powS=function(e){for(let t=0;t<this.rows;t++)for(let i=0;i<this.columns;i++)this.set(t,i,this.get(t,i)**e);return this},e.prototype.powM=function(e){if(e=t.checkMatrix(e),this.rows!==e.rows||this.columns!==e.columns)throw new RangeError("Matrices dimensions must be equal");for(let t=0;t<this.rows;t++)for(let i=0;i<this.columns;i++)this.set(t,i,this.get(t,i)**e.get(t,i));return this}}(Fb,yb);class Ab extends Fb{#I;get size(){return this.#I.size}get rows(){return this.#I.rows}get columns(){return this.#I.columns}get diagonalSize(){return this.rows}static isSymmetricMatrix(e){return yb.isMatrix(e)&&"SymmetricMatrix"===e.klassType}static zeros(e){return new this(e)}static ones(e){return new this(e).fill(1)}constructor(e){if(super(),yb.isMatrix(e)){if(!e.isSymmetric())throw new TypeError("not symmetric data");this.#I=yb.copy(e,new yb(e.rows,e.rows))}else if(Number.isInteger(e)&&e>=0)this.#I=new yb(e,e);else if(this.#I=new yb(e),!this.isSymmetric())throw new TypeError("not symmetric data")}clone(){const e=new Ab(this.diagonalSize);for(const[t,i,n]of this.upperRightEntries())e.set(t,i,n);return e}toMatrix(){return new yb(this)}get(e,t){return this.#I.get(e,t)}set(e,t,i){return this.#I.set(e,t,i),this.#I.set(t,e,i),this}removeCross(e){return this.#I.removeRow(e),this.#I.removeColumn(e),this}addCross(e,t){void 0===t&&(t=e,e=this.diagonalSize);const i=t.slice();return i.splice(e,1),this.#I.addRow(e,i),this.#I.addColumn(e,t),this}applyMask(e){if(e.length!==this.diagonalSize)throw new RangeError("Mask size do not match with matrix size");const t=[];for(const[i,n]of e.entries())n||t.push(i);t.reverse();for(const e of t)this.removeCross(e);return this}toCompact(){const{diagonalSize:e}=this,t=new Array(e*(e+1)/2);for(let i=0,n=0,r=0;r<t.length;r++)t[r]=this.get(n,i),++i>=e&&(i=++n);return t}static fromCompact(e){const t=e.length,i=(Math.sqrt(8*t+1)-1)/2;if(!Number.isInteger(i))throw new TypeError(`This array is not a compact representation of a Symmetric Matrix, ${JSON.stringify(e)}`);const n=new Ab(i);for(let r=0,s=0,o=0;o<t;o++)n.set(r,s,e[o]),++r>=i&&(r=++s);return n}*upperRightEntries(){for(let e=0,t=0;e<this.diagonalSize;void 0){const i=this.get(e,t);yield[e,t,i],++t>=this.diagonalSize&&(t=++e)}}*upperRightValues(){for(let e=0,t=0;e<this.diagonalSize;void 0){const i=this.get(e,t);yield i,++t>=this.diagonalSize&&(t=++e)}}}Ab.prototype.klassType="SymmetricMatrix";class Cb extends Ab{static isDistanceMatrix(e){return Ab.isSymmetricMatrix(e)&&"DistanceMatrix"===e.klassSubType}constructor(e){if(super(e),!this.isDistance())throw new TypeError("Provided arguments do no produce a distance matrix")}set(e,t,i){return e===t&&(i=0),super.set(e,t,i)}addCross(e,t){return void 0===t&&(t=e,e=this.diagonalSize),(t=t.slice())[e]=0,super.addCross(e,t)}toSymmetricMatrix(){return new Ab(this)}clone(){const e=new Cb(this.diagonalSize);for(const[t,i,n]of this.upperRightEntries())t!==i&&e.set(t,i,n);return e}toCompact(){const{diagonalSize:e}=this,t=new Array((e-1)*e/2);for(let i=1,n=0,r=0;r<t.length;r++)t[r]=this.get(n,i),++i>=e&&(i=1+ ++n);return t}static fromCompact(e){const t=e.length;if(0===t)return new this(0);const i=(Math.sqrt(8*t+1)+1)/2;if(!Number.isInteger(i))throw new TypeError(`This array is not a compact representation of a DistanceMatrix, ${JSON.stringify(e)}`);const n=new this(i);for(let r=1,s=0,o=0;o<t;o++)n.set(r,s,e[o]),++r>=i&&(r=1+ ++s);return n}}Cb.prototype.klassSubType="DistanceMatrix";class _b extends Fb{constructor(e,t,i){super(),this.matrix=e,this.rows=t,this.columns=i}}class xb extends _b{constructor(e,t,i){fb(e,t),pb(e,i),super(e,t.length,i.length),this.rowIndices=t,this.columnIndices=i}set(e,t,i){return this.matrix.set(this.rowIndices[e],this.columnIndices[t],i),this}get(e,t){return this.matrix.get(this.rowIndices[e],this.columnIndices[t])}}class kb extends Fb{constructor(e,t={}){const{rows:i=1}=t;if(e.length%i!=0)throw new Error("the data length is not divisible by the number of rows");super(),this.rows=i,this.columns=e.length/i,this.data=e}set(e,t,i){let n=this._calculateIndex(e,t);return this.data[n]=i,this}get(e,t){let i=this._calculateIndex(e,t);return this.data[i]}_calculateIndex(e,t){return e*this.columns+t}}class Ib extends Fb{constructor(e){super(),this.data=e,this.rows=e.length,this.columns=e[0].length}set(e,t,i){return this.data[e][t]=i,this}get(e,t){return this.data[e][t]}}class Sb{constructor(e){let t,i,n,r,s,o,a,c,l,h=(e=Ib.checkMatrix(e)).clone(),d=h.rows,u=h.columns,f=new Float64Array(d),p=1;for(t=0;t<d;t++)f[t]=t;for(c=new Float64Array(d),i=0;i<u;i++){for(t=0;t<d;t++)c[t]=h.get(t,i);for(t=0;t<d;t++){for(l=Math.min(t,i),s=0,n=0;n<l;n++)s+=h.get(t,n)*c[n];c[t]-=s,h.set(t,i,c[t])}for(r=i,t=i+1;t<d;t++)Math.abs(c[t])>Math.abs(c[r])&&(r=t);if(r!==i){for(n=0;n<u;n++)o=h.get(r,n),h.set(r,n,h.get(i,n)),h.set(i,n,o);a=f[r],f[r]=f[i],f[i]=a,p=-p}if(i<d&&0!==h.get(i,i))for(t=i+1;t<d;t++)h.set(t,i,h.get(t,i)/h.get(i,i))}this.LU=h,this.pivotVector=f,this.pivotSign=p}isSingular(){let e=this.LU,t=e.columns;for(let i=0;i<t;i++)if(0===e.get(i,i))return!0;return!1}solve(e){e=yb.checkMatrix(e);let t=this.LU;if(t.rows!==e.rows)throw new Error("Invalid matrix dimensions");if(this.isSingular())throw new Error("LU matrix is singular");let i,n,r,s=e.columns,o=e.subMatrixRow(this.pivotVector,0,s-1),a=t.columns;for(r=0;r<a;r++)for(i=r+1;i<a;i++)for(n=0;n<s;n++)o.set(i,n,o.get(i,n)-o.get(r,n)*t.get(i,r));for(r=a-1;r>=0;r--){for(n=0;n<s;n++)o.set(r,n,o.get(r,n)/t.get(r,r));for(i=0;i<r;i++)for(n=0;n<s;n++)o.set(i,n,o.get(i,n)-o.get(r,n)*t.get(i,r))}return o}get determinant(){let e=this.LU;if(!e.isSquare())throw new Error("Matrix must be square");let t=this.pivotSign,i=e.columns;for(let n=0;n<i;n++)t*=e.get(n,n);return t}get lowerTriangularMatrix(){let e=this.LU,t=e.rows,i=e.columns,n=new yb(t,i);for(let r=0;r<t;r++)for(let t=0;t<i;t++)r>t?n.set(r,t,e.get(r,t)):r===t?n.set(r,t,1):n.set(r,t,0);return n}get upperTriangularMatrix(){let e=this.LU,t=e.rows,i=e.columns,n=new yb(t,i);for(let r=0;r<t;r++)for(let t=0;t<i;t++)r<=t?n.set(r,t,e.get(r,t)):n.set(r,t,0);return n}get pivotPermutationVector(){return Array.from(this.pivotVector)}}function Eb(e,t){let i=0;return Math.abs(e)>Math.abs(t)?(i=t/e,Math.abs(e)*Math.sqrt(1+i*i)):0!==t?(i=e/t,Math.abs(t)*Math.sqrt(1+i*i)):0}class Nb{constructor(e){let t,i,n,r,s=(e=Ib.checkMatrix(e)).clone(),o=e.rows,a=e.columns,c=new Float64Array(a);for(n=0;n<a;n++){let e=0;for(t=n;t<o;t++)e=Eb(e,s.get(t,n));if(0!==e){for(s.get(n,n)<0&&(e=-e),t=n;t<o;t++)s.set(t,n,s.get(t,n)/e);for(s.set(n,n,s.get(n,n)+1),i=n+1;i<a;i++){for(r=0,t=n;t<o;t++)r+=s.get(t,n)*s.get(t,i);for(r=-r/s.get(n,n),t=n;t<o;t++)s.set(t,i,s.get(t,i)+r*s.get(t,n))}}c[n]=-e}this.QR=s,this.Rdiag=c}solve(e){e=yb.checkMatrix(e);let t=this.QR,i=t.rows;if(e.rows!==i)throw new Error("Matrix row dimensions must agree");if(!this.isFullRank())throw new Error("Matrix is rank deficient");let n,r,s,o,a=e.columns,c=e.clone(),l=t.columns;for(s=0;s<l;s++)for(r=0;r<a;r++){for(o=0,n=s;n<i;n++)o+=t.get(n,s)*c.get(n,r);for(o=-o/t.get(s,s),n=s;n<i;n++)c.set(n,r,c.get(n,r)+o*t.get(n,s))}for(s=l-1;s>=0;s--){for(r=0;r<a;r++)c.set(s,r,c.get(s,r)/this.Rdiag[s]);for(n=0;n<s;n++)for(r=0;r<a;r++)c.set(n,r,c.get(n,r)-c.get(s,r)*t.get(n,s))}return c.subMatrix(0,l-1,0,a-1)}isFullRank(){let e=this.QR.columns;for(let t=0;t<e;t++)if(0===this.Rdiag[t])return!1;return!0}get upperTriangularMatrix(){let e,t,i=this.QR,n=i.columns,r=new yb(n,n);for(e=0;e<n;e++)for(t=0;t<n;t++)e<t?r.set(e,t,i.get(e,t)):e===t?r.set(e,t,this.Rdiag[e]):r.set(e,t,0);return r}get orthogonalMatrix(){let e,t,i,n,r=this.QR,s=r.rows,o=r.columns,a=new yb(s,o);for(i=o-1;i>=0;i--){for(e=0;e<s;e++)a.set(e,i,0);for(a.set(i,i,1),t=i;t<o;t++)if(0!==r.get(i,i)){for(n=0,e=i;e<s;e++)n+=r.get(e,i)*a.get(e,t);for(n=-n/r.get(i,i),e=i;e<s;e++)a.set(e,t,a.get(e,t)+n*r.get(e,i))}}return a}}class Mb{constructor(e,t={}){if((e=Ib.checkMatrix(e)).isEmpty())throw new Error("Matrix must be non-empty");let i=e.rows,n=e.columns;const{computeLeftSingularVectors:r=!0,computeRightSingularVectors:s=!0,autoTranspose:o=!1}=t;let a,c=Boolean(r),l=Boolean(s),h=!1;if(i<n)if(o){a=e.transpose(),i=a.rows,n=a.columns,h=!0;let t=c;c=l,l=t}else a=e.clone(),console.warn("Computing SVD on a matrix with more columns than rows. Consider enabling autoTranspose");else a=e.clone();let d=Math.min(i,n),u=Math.min(i+1,n),f=new Float64Array(u),p=new yb(i,d),g=new yb(n,n),m=new Float64Array(n),w=new Float64Array(i),b=new Float64Array(u);for(let e=0;e<u;e++)b[e]=e;let F=Math.min(i-1,n),v=Math.max(0,Math.min(n-2,i)),y=Math.max(F,v);for(let e=0;e<y;e++){if(e<F){f[e]=0;for(let t=e;t<i;t++)f[e]=Eb(f[e],a.get(t,e));if(0!==f[e]){a.get(e,e)<0&&(f[e]=-f[e]);for(let t=e;t<i;t++)a.set(t,e,a.get(t,e)/f[e]);a.set(e,e,a.get(e,e)+1)}f[e]=-f[e]}for(let t=e+1;t<n;t++){if(e<F&&0!==f[e]){let n=0;for(let r=e;r<i;r++)n+=a.get(r,e)*a.get(r,t);n=-n/a.get(e,e);for(let r=e;r<i;r++)a.set(r,t,a.get(r,t)+n*a.get(r,e))}m[t]=a.get(e,t)}if(c&&e<F)for(let t=e;t<i;t++)p.set(t,e,a.get(t,e));if(e<v){m[e]=0;for(let t=e+1;t<n;t++)m[e]=Eb(m[e],m[t]);if(0!==m[e]){m[e+1]<0&&(m[e]=0-m[e]);for(let t=e+1;t<n;t++)m[t]/=m[e];m[e+1]+=1}if(m[e]=-m[e],e+1<i&&0!==m[e]){for(let t=e+1;t<i;t++)w[t]=0;for(let t=e+1;t<i;t++)for(let i=e+1;i<n;i++)w[t]+=m[i]*a.get(t,i);for(let t=e+1;t<n;t++){let n=-m[t]/m[e+1];for(let r=e+1;r<i;r++)a.set(r,t,a.get(r,t)+n*w[r])}}if(l)for(let t=e+1;t<n;t++)g.set(t,e,m[t])}}let A=Math.min(n,i+1);if(F<n&&(f[F]=a.get(F,F)),i<A&&(f[A-1]=0),v+1<A&&(m[v]=a.get(v,A-1)),m[A-1]=0,c){for(let e=F;e<d;e++){for(let t=0;t<i;t++)p.set(t,e,0);p.set(e,e,1)}for(let e=F-1;e>=0;e--)if(0!==f[e]){for(let t=e+1;t<d;t++){let n=0;for(let r=e;r<i;r++)n+=p.get(r,e)*p.get(r,t);n=-n/p.get(e,e);for(let r=e;r<i;r++)p.set(r,t,p.get(r,t)+n*p.get(r,e))}for(let t=e;t<i;t++)p.set(t,e,-p.get(t,e));p.set(e,e,1+p.get(e,e));for(let t=0;t<e-1;t++)p.set(t,e,0)}else{for(let t=0;t<i;t++)p.set(t,e,0);p.set(e,e,1)}}if(l)for(let e=n-1;e>=0;e--){if(e<v&&0!==m[e])for(let t=e+1;t<n;t++){let i=0;for(let r=e+1;r<n;r++)i+=g.get(r,e)*g.get(r,t);i=-i/g.get(e+1,e);for(let r=e+1;r<n;r++)g.set(r,t,g.get(r,t)+i*g.get(r,e))}for(let t=0;t<n;t++)g.set(t,e,0);g.set(e,e,1)}let C=A-1,_=Number.EPSILON;for(;A>0;){let e,t;for(e=A-2;e>=-1&&-1!==e;e--){const t=Number.MIN_VALUE+_*Math.abs(f[e]+Math.abs(f[e+1]));if(Math.abs(m[e])<=t||Number.isNaN(m[e])){m[e]=0;break}}if(e===A-2)t=4;else{let i;for(i=A-1;i>=e&&i!==e;i--){let t=(i!==A?Math.abs(m[i]):0)+(i!==e+1?Math.abs(m[i-1]):0);if(Math.abs(f[i])<=_*t){f[i]=0;break}}i===e?t=3:i===A-1?t=1:(t=2,e=i)}switch(e++,t){case 1:{let t=m[A-2];m[A-2]=0;for(let i=A-2;i>=e;i--){let r=Eb(f[i],t),s=f[i]/r,o=t/r;if(f[i]=r,i!==e&&(t=-o*m[i-1],m[i-1]=s*m[i-1]),l)for(let e=0;e<n;e++)r=s*g.get(e,i)+o*g.get(e,A-1),g.set(e,A-1,-o*g.get(e,i)+s*g.get(e,A-1)),g.set(e,i,r)}break}case 2:{let t=m[e-1];m[e-1]=0;for(let n=e;n<A;n++){let r=Eb(f[n],t),s=f[n]/r,o=t/r;if(f[n]=r,t=-o*m[n],m[n]=s*m[n],c)for(let t=0;t<i;t++)r=s*p.get(t,n)+o*p.get(t,e-1),p.set(t,e-1,-o*p.get(t,n)+s*p.get(t,e-1)),p.set(t,n,r)}break}case 3:{const t=Math.max(Math.abs(f[A-1]),Math.abs(f[A-2]),Math.abs(m[A-2]),Math.abs(f[e]),Math.abs(m[e])),r=f[A-1]/t,s=f[A-2]/t,o=m[A-2]/t,a=f[e]/t,h=m[e]/t,d=((s+r)*(s-r)+o*o)/2,u=r*o*(r*o);let w=0;0===d&&0===u||(w=d<0?0-Math.sqrt(d*d+u):Math.sqrt(d*d+u),w=u/(d+w));let b=(a+r)*(a-r)+w,F=a*h;for(let t=e;t<A-1;t++){let r=Eb(b,F);0===r&&(r=Number.MIN_VALUE);let s=b/r,o=F/r;if(t!==e&&(m[t-1]=r),b=s*f[t]+o*m[t],m[t]=s*m[t]-o*f[t],F=o*f[t+1],f[t+1]=s*f[t+1],l)for(let e=0;e<n;e++)r=s*g.get(e,t)+o*g.get(e,t+1),g.set(e,t+1,-o*g.get(e,t)+s*g.get(e,t+1)),g.set(e,t,r);if(r=Eb(b,F),0===r&&(r=Number.MIN_VALUE),s=b/r,o=F/r,f[t]=r,b=s*m[t]+o*f[t+1],f[t+1]=-o*m[t]+s*f[t+1],F=o*m[t+1],m[t+1]=s*m[t+1],c&&t<i-1)for(let e=0;e<i;e++)r=s*p.get(e,t)+o*p.get(e,t+1),p.set(e,t+1,-o*p.get(e,t)+s*p.get(e,t+1)),p.set(e,t,r)}m[A-2]=b;break}case 4:if(f[e]<=0&&(f[e]=f[e]<0?-f[e]:0,l))for(let t=0;t<=C;t++)g.set(t,e,-g.get(t,e));for(;e<C&&!(f[e]>=f[e+1]);){let t=f[e];if(f[e]=f[e+1],f[e+1]=t,l&&e<n-1)for(let i=0;i<n;i++)t=g.get(i,e+1),g.set(i,e+1,g.get(i,e)),g.set(i,e,t);if(c&&e<i-1)for(let n=0;n<i;n++)t=p.get(n,e+1),p.set(n,e+1,p.get(n,e)),p.set(n,e,t);e++}A--}}if(h){let e=g;g=p,p=e}this.m=i,this.n=n,this.s=f,this.U=p,this.V=g}solve(e){let t=e,i=this.threshold,n=this.s.length,r=yb.zeros(n,n);for(let e=0;e<n;e++)Math.abs(this.s[e])<=i?r.set(e,e,0):r.set(e,e,1/this.s[e]);let s=this.U,o=this.rightSingularVectors,a=o.mmul(r),c=o.rows,l=s.rows,h=yb.zeros(c,l);for(let e=0;e<c;e++)for(let t=0;t<l;t++){let i=0;for(let r=0;r<n;r++)i+=a.get(e,r)*s.get(t,r);h.set(e,t,i)}return h.mmul(t)}solveForDiagonal(e){return this.solve(yb.diag(e))}inverse(){let e=this.V,t=this.threshold,i=e.rows,n=e.columns,r=new yb(i,this.s.length);for(let s=0;s<i;s++)for(let i=0;i<n;i++)Math.abs(this.s[i])>t&&r.set(s,i,e.get(s,i)/this.s[i]);let s=this.U,o=s.rows,a=s.columns,c=new yb(i,o);for(let e=0;e<i;e++)for(let t=0;t<o;t++){let i=0;for(let n=0;n<a;n++)i+=r.get(e,n)*s.get(t,n);c.set(e,t,i)}return c}get condition(){return this.s[0]/this.s[Math.min(this.m,this.n)-1]}get norm2(){return this.s[0]}get rank(){let e=Math.max(this.m,this.n)*this.s[0]*Number.EPSILON,t=0,i=this.s;for(let n=0,r=i.length;n<r;n++)i[n]>e&&t++;return t}get diagonal(){return Array.from(this.s)}get threshold(){return Number.EPSILON/2*Math.max(this.m,this.n)*this.s[0]}get leftSingularVectors(){return this.U}get rightSingularVectors(){return this.V}get diagonalMatrix(){return yb.diag(this.s)}}function Rb(e,t,i=!1){return e=Ib.checkMatrix(e),t=Ib.checkMatrix(t),i?new Mb(e).solve(t):e.isSquare()?new Sb(e).solve(t):new Nb(e).solve(t)}function Bb(e,t){let i=[];for(let n=0;n<e;n++)n!==t&&i.push(n);return i}function Db(e,t,i,n=1e-9,r=1e-9){if(e>r)return new Array(t.rows+1).fill(0);{let e=t.addRow(i,[0]);for(let t=0;t<e.rows;t++)Math.abs(e.get(t,0))<n&&e.set(t,0,0);return e.to1DArray()}}class Tb{constructor(e,t={}){const{assumeSymmetric:i=!1}=t;if(!(e=Ib.checkMatrix(e)).isSquare())throw new Error("Matrix is not a square matrix");if(e.isEmpty())throw new Error("Matrix must be non-empty");let n,r,s=e.columns,o=new yb(s,s),a=new Float64Array(s),c=new Float64Array(s),l=e,h=!1;if(h=!!i||e.isSymmetric(),h){for(n=0;n<s;n++)for(r=0;r<s;r++)o.set(n,r,l.get(n,r));!function(e,t,i,n){let r,s,o,a,c,l,h,d;for(c=0;c<e;c++)i[c]=n.get(e-1,c);for(a=e-1;a>0;a--){for(d=0,o=0,l=0;l<a;l++)d+=Math.abs(i[l]);if(0===d)for(t[a]=i[a-1],c=0;c<a;c++)i[c]=n.get(a-1,c),n.set(a,c,0),n.set(c,a,0);else{for(l=0;l<a;l++)i[l]/=d,o+=i[l]*i[l];for(r=i[a-1],s=Math.sqrt(o),r>0&&(s=-s),t[a]=d*s,o-=r*s,i[a-1]=r-s,c=0;c<a;c++)t[c]=0;for(c=0;c<a;c++){for(r=i[c],n.set(c,a,r),s=t[c]+n.get(c,c)*r,l=c+1;l<=a-1;l++)s+=n.get(l,c)*i[l],t[l]+=n.get(l,c)*r;t[c]=s}for(r=0,c=0;c<a;c++)t[c]/=o,r+=t[c]*i[c];for(h=r/(o+o),c=0;c<a;c++)t[c]-=h*i[c];for(c=0;c<a;c++){for(r=i[c],s=t[c],l=c;l<=a-1;l++)n.set(l,c,n.get(l,c)-(r*t[l]+s*i[l]));i[c]=n.get(a-1,c),n.set(a,c,0)}}i[a]=o}for(a=0;a<e-1;a++){if(n.set(e-1,a,n.get(a,a)),n.set(a,a,1),o=i[a+1],0!==o){for(l=0;l<=a;l++)i[l]=n.get(l,a+1)/o;for(c=0;c<=a;c++){for(s=0,l=0;l<=a;l++)s+=n.get(l,a+1)*n.get(l,c);for(l=0;l<=a;l++)n.set(l,c,n.get(l,c)-s*i[l])}}for(l=0;l<=a;l++)n.set(l,a+1,0)}for(c=0;c<e;c++)i[c]=n.get(e-1,c),n.set(e-1,c,0);n.set(e-1,e-1,1),t[0]=0}(s,c,a,o),function(e,t,i,n){let r,s,o,a,c,l,h,d,u,f,p,g,m,w,b,F;for(o=1;o<e;o++)t[o-1]=t[o];t[e-1]=0;let v=0,y=0,A=Number.EPSILON;for(l=0;l<e;l++){for(y=Math.max(y,Math.abs(i[l])+Math.abs(t[l])),h=l;h<e&&!(Math.abs(t[h])<=A*y);)h++;if(h>l)do{for(r=i[l],d=(i[l+1]-r)/(2*t[l]),u=Eb(d,1),d<0&&(u=-u),i[l]=t[l]/(d+u),i[l+1]=t[l]*(d+u),f=i[l+1],s=r-i[l],o=l+2;o<e;o++)i[o]-=s;for(v+=s,d=i[h],p=1,g=p,m=p,w=t[l+1],b=0,F=0,o=h-1;o>=l;o--)for(m=g,g=p,F=b,r=p*t[o],s=p*d,u=Eb(d,t[o]),t[o+1]=b*u,b=t[o]/u,p=d/u,d=p*i[o]-b*r,i[o+1]=s+b*(p*r+b*i[o]),c=0;c<e;c++)s=n.get(c,o+1),n.set(c,o+1,b*n.get(c,o)+p*s),n.set(c,o,p*n.get(c,o)-b*s);d=-b*F*m*w*t[l]/f,t[l]=b*d,i[l]=p*d}while(Math.abs(t[l])>A*y);i[l]=i[l]+v,t[l]=0}for(o=0;o<e-1;o++){for(c=o,d=i[o],a=o+1;a<e;a++)i[a]<d&&(c=a,d=i[a]);if(c!==o)for(i[c]=i[o],i[o]=d,a=0;a<e;a++)d=n.get(a,o),n.set(a,o,n.get(a,c)),n.set(a,c,d)}}(s,c,a,o)}else{let e=new yb(s,s),t=new Float64Array(s);for(r=0;r<s;r++)for(n=0;n<s;n++)e.set(n,r,l.get(n,r));!function(e,t,i,n){let r,s,o,a,c,l,h,d=0,u=e-1;for(l=d+1;l<=u-1;l++){for(h=0,a=l;a<=u;a++)h+=Math.abs(t.get(a,l-1));if(0!==h){for(o=0,a=u;a>=l;a--)i[a]=t.get(a,l-1)/h,o+=i[a]*i[a];for(s=Math.sqrt(o),i[l]>0&&(s=-s),o-=i[l]*s,i[l]=i[l]-s,c=l;c<e;c++){for(r=0,a=u;a>=l;a--)r+=i[a]*t.get(a,c);for(r/=o,a=l;a<=u;a++)t.set(a,c,t.get(a,c)-r*i[a])}for(a=0;a<=u;a++){for(r=0,c=u;c>=l;c--)r+=i[c]*t.get(a,c);for(r/=o,c=l;c<=u;c++)t.set(a,c,t.get(a,c)-r*i[c])}i[l]=h*i[l],t.set(l,l-1,h*s)}}for(a=0;a<e;a++)for(c=0;c<e;c++)n.set(a,c,a===c?1:0);for(l=u-1;l>=d+1;l--)if(0!==t.get(l,l-1)){for(a=l+1;a<=u;a++)i[a]=t.get(a,l-1);for(c=l;c<=u;c++){for(s=0,a=l;a<=u;a++)s+=i[a]*n.get(a,c);for(s=s/i[l]/t.get(l,l-1),a=l;a<=u;a++)n.set(a,c,n.get(a,c)+s*i[a])}}}(s,e,t,o),function(e,t,i,n,r){let s,o,a,c,l,h,d,u,f,p,g,m,w,b,F,v=e-1,y=0,A=e-1,C=Number.EPSILON,_=0,x=0,k=0,I=0,S=0,E=0,N=0,M=0;for(s=0;s<e;s++)for((s<y||s>A)&&(i[s]=r.get(s,s),t[s]=0),o=Math.max(s-1,0);o<e;o++)x+=Math.abs(r.get(s,o));for(;v>=y;){for(c=v;c>y&&(E=Math.abs(r.get(c-1,c-1))+Math.abs(r.get(c,c)),0===E&&(E=x),!(Math.abs(r.get(c,c-1))<C*E));)c--;if(c===v)r.set(v,v,r.get(v,v)+_),i[v]=r.get(v,v),t[v]=0,v--,M=0;else if(c===v-1){if(d=r.get(v,v-1)*r.get(v-1,v),k=(r.get(v-1,v-1)-r.get(v,v))/2,I=k*k+d,N=Math.sqrt(Math.abs(I)),r.set(v,v,r.get(v,v)+_),r.set(v-1,v-1,r.get(v-1,v-1)+_),u=r.get(v,v),I>=0){for(N=k>=0?k+N:k-N,i[v-1]=u+N,i[v]=i[v-1],0!==N&&(i[v]=u-d/N),t[v-1]=0,t[v]=0,u=r.get(v,v-1),E=Math.abs(u)+Math.abs(N),k=u/E,I=N/E,S=Math.sqrt(k*k+I*I),k/=S,I/=S,o=v-1;o<e;o++)N=r.get(v-1,o),r.set(v-1,o,I*N+k*r.get(v,o)),r.set(v,o,I*r.get(v,o)-k*N);for(s=0;s<=v;s++)N=r.get(s,v-1),r.set(s,v-1,I*N+k*r.get(s,v)),r.set(s,v,I*r.get(s,v)-k*N);for(s=y;s<=A;s++)N=n.get(s,v-1),n.set(s,v-1,I*N+k*n.get(s,v)),n.set(s,v,I*n.get(s,v)-k*N)}else i[v-1]=u+k,i[v]=u+k,t[v-1]=N,t[v]=-N;v-=2,M=0}else{if(u=r.get(v,v),f=0,d=0,c<v&&(f=r.get(v-1,v-1),d=r.get(v,v-1)*r.get(v-1,v)),10===M){for(_+=u,s=y;s<=v;s++)r.set(s,s,r.get(s,s)-u);E=Math.abs(r.get(v,v-1))+Math.abs(r.get(v-1,v-2)),u=f=.75*E,d=-.4375*E*E}if(30===M&&(E=(f-u)/2,E=E*E+d,E>0)){for(E=Math.sqrt(E),f<u&&(E=-E),E=u-d/((f-u)/2+E),s=y;s<=v;s++)r.set(s,s,r.get(s,s)-E);_+=E,u=f=d=.964}for(M+=1,l=v-2;l>=c&&(N=r.get(l,l),S=u-N,E=f-N,k=(S*E-d)/r.get(l+1,l)+r.get(l,l+1),I=r.get(l+1,l+1)-N-S-E,S=r.get(l+2,l+1),E=Math.abs(k)+Math.abs(I)+Math.abs(S),k/=E,I/=E,S/=E,l!==c)&&!(Math.abs(r.get(l,l-1))*(Math.abs(I)+Math.abs(S))<C*(Math.abs(k)*(Math.abs(r.get(l-1,l-1))+Math.abs(N)+Math.abs(r.get(l+1,l+1)))));)l--;for(s=l+2;s<=v;s++)r.set(s,s-2,0),s>l+2&&r.set(s,s-3,0);for(a=l;a<=v-1&&(b=a!==v-1,a!==l&&(k=r.get(a,a-1),I=r.get(a+1,a-1),S=b?r.get(a+2,a-1):0,u=Math.abs(k)+Math.abs(I)+Math.abs(S),0!==u&&(k/=u,I/=u,S/=u)),0!==u);a++)if(E=Math.sqrt(k*k+I*I+S*S),k<0&&(E=-E),0!==E){for(a!==l?r.set(a,a-1,-E*u):c!==l&&r.set(a,a-1,-r.get(a,a-1)),k+=E,u=k/E,f=I/E,N=S/E,I/=k,S/=k,o=a;o<e;o++)k=r.get(a,o)+I*r.get(a+1,o),b&&(k+=S*r.get(a+2,o),r.set(a+2,o,r.get(a+2,o)-k*N)),r.set(a,o,r.get(a,o)-k*u),r.set(a+1,o,r.get(a+1,o)-k*f);for(s=0;s<=Math.min(v,a+3);s++)k=u*r.get(s,a)+f*r.get(s,a+1),b&&(k+=N*r.get(s,a+2),r.set(s,a+2,r.get(s,a+2)-k*S)),r.set(s,a,r.get(s,a)-k),r.set(s,a+1,r.get(s,a+1)-k*I);for(s=y;s<=A;s++)k=u*n.get(s,a)+f*n.get(s,a+1),b&&(k+=N*n.get(s,a+2),n.set(s,a+2,n.get(s,a+2)-k*S)),n.set(s,a,n.get(s,a)-k),n.set(s,a+1,n.get(s,a+1)-k*I)}}}if(0===x)return;for(v=e-1;v>=0;v--)if(k=i[v],I=t[v],0===I)for(c=v,r.set(v,v,1),s=v-1;s>=0;s--){for(d=r.get(s,s)-k,S=0,o=c;o<=v;o++)S+=r.get(s,o)*r.get(o,v);if(t[s]<0)N=d,E=S;else if(c=s,0===t[s]?r.set(s,v,0!==d?-S/d:-S/(C*x)):(u=r.get(s,s+1),f=r.get(s+1,s),I=(i[s]-k)*(i[s]-k)+t[s]*t[s],h=(u*E-N*S)/I,r.set(s,v,h),r.set(s+1,v,Math.abs(u)>Math.abs(N)?(-S-d*h)/u:(-E-f*h)/N)),h=Math.abs(r.get(s,v)),C*h*h>1)for(o=s;o<=v;o++)r.set(o,v,r.get(o,v)/h)}else if(I<0)for(c=v-1,Math.abs(r.get(v,v-1))>Math.abs(r.get(v-1,v))?(r.set(v-1,v-1,I/r.get(v,v-1)),r.set(v-1,v,-(r.get(v,v)-k)/r.get(v,v-1))):(F=zb(0,-r.get(v-1,v),r.get(v-1,v-1)-k,I),r.set(v-1,v-1,F[0]),r.set(v-1,v,F[1])),r.set(v,v-1,0),r.set(v,v,1),s=v-2;s>=0;s--){for(p=0,g=0,o=c;o<=v;o++)p+=r.get(s,o)*r.get(o,v-1),g+=r.get(s,o)*r.get(o,v);if(d=r.get(s,s)-k,t[s]<0)N=d,S=p,E=g;else if(c=s,0===t[s]?(F=zb(-p,-g,d,I),r.set(s,v-1,F[0]),r.set(s,v,F[1])):(u=r.get(s,s+1),f=r.get(s+1,s),m=(i[s]-k)*(i[s]-k)+t[s]*t[s]-I*I,w=2*(i[s]-k)*I,0===m&&0===w&&(m=C*x*(Math.abs(d)+Math.abs(I)+Math.abs(u)+Math.abs(f)+Math.abs(N))),F=zb(u*S-N*p+I*g,u*E-N*g-I*p,m,w),r.set(s,v-1,F[0]),r.set(s,v,F[1]),Math.abs(u)>Math.abs(N)+Math.abs(I)?(r.set(s+1,v-1,(-p-d*r.get(s,v-1)+I*r.get(s,v))/u),r.set(s+1,v,(-g-d*r.get(s,v)-I*r.get(s,v-1))/u)):(F=zb(-S-f*r.get(s,v-1),-E-f*r.get(s,v),N,I),r.set(s+1,v-1,F[0]),r.set(s+1,v,F[1]))),h=Math.max(Math.abs(r.get(s,v-1)),Math.abs(r.get(s,v))),C*h*h>1)for(o=s;o<=v;o++)r.set(o,v-1,r.get(o,v-1)/h),r.set(o,v,r.get(o,v)/h)}for(s=0;s<e;s++)if(s<y||s>A)for(o=s;o<e;o++)n.set(s,o,r.get(s,o));for(o=e-1;o>=y;o--)for(s=y;s<=A;s++){for(N=0,a=y;a<=Math.min(o,A);a++)N+=n.get(s,a)*r.get(a,o);n.set(s,o,N)}}(s,c,a,o,e)}this.n=s,this.e=c,this.d=a,this.V=o}get realEigenvalues(){return Array.from(this.d)}get imaginaryEigenvalues(){return Array.from(this.e)}get eigenvectorMatrix(){return this.V}get diagonalMatrix(){let e,t,i=this.n,n=this.e,r=this.d,s=new yb(i,i);for(e=0;e<i;e++){for(t=0;t<i;t++)s.set(e,t,0);s.set(e,e,r[e]),n[e]>0?s.set(e,e+1,n[e]):n[e]<0&&s.set(e,e-1,n[e])}return s}}function zb(e,t,i,n){let r,s;return Math.abs(i)>Math.abs(n)?(r=n/i,s=i+r*n,[(e+r*t)/s,(t-r*e)/s]):(r=i/n,s=n+r*i,[(r*e+t)/s,(r*t-e)/s])}class Lb{constructor(e){if(!(e=Ib.checkMatrix(e)).isSymmetric())throw new Error("Matrix is not symmetric");let t,i,n,r=e,s=r.rows,o=new yb(s,s),a=!0;for(i=0;i<s;i++){let e=0;for(n=0;n<i;n++){let s=0;for(t=0;t<n;t++)s+=o.get(n,t)*o.get(i,t);s=(r.get(i,n)-s)/o.get(n,n),o.set(i,n,s),e+=s*s}for(e=r.get(i,i)-e,a&&=e>0,o.set(i,i,Math.sqrt(Math.max(e,0))),n=i+1;n<s;n++)o.set(i,n,0)}this.L=o,this.positiveDefinite=a}isPositiveDefinite(){return this.positiveDefinite}solve(e){e=Ib.checkMatrix(e);let t=this.L,i=t.rows;if(e.rows!==i)throw new Error("Matrix dimensions do not match");if(!1===this.isPositiveDefinite())throw new Error("Matrix is not positive definite");let n,r,s,o=e.columns,a=e.clone();for(s=0;s<i;s++)for(r=0;r<o;r++){for(n=0;n<s;n++)a.set(s,r,a.get(s,r)-a.get(n,r)*t.get(s,n));a.set(s,r,a.get(s,r)/t.get(s,s))}for(s=i-1;s>=0;s--)for(r=0;r<o;r++){for(n=s+1;n<i;n++)a.set(s,r,a.get(s,r)-a.get(n,r)*t.get(n,s));a.set(s,r,a.get(s,r)/t.get(s,s))}return a}get lowerTriangularMatrix(){return this.L}}class Hb{constructor(e,t={}){e=Ib.checkMatrix(e);let{Y:i}=t;const{scaleScores:n=!1,maxIterations:r=1e3,terminationCriteria:s=1e-10}=t;let o;if(i){if(i=ib.isAnyArray(i)&&"number"==typeof i[0]?yb.columnVector(i):Ib.checkMatrix(i),i.rows!==e.rows)throw new Error("Y should have the same number of rows as X");o=i.getColumnVector(0)}else o=e.getColumnVector(0);let a,c,l,h,d=1;for(let t=0;t<r&&d>s;t++)l=e.transpose().mmul(o).div(o.transpose().mmul(o).get(0,0)),l=l.div(l.norm()),a=e.mmul(l).div(l.transpose().mmul(l).get(0,0)),t>0&&(d=a.clone().sub(h).pow(2).sum()),h=a.clone(),i?(c=i.transpose().mmul(a).div(a.transpose().mmul(a).get(0,0)),c=c.div(c.norm()),o=i.mmul(c).div(c.transpose().mmul(c).get(0,0))):o=a;if(i){let t=e.transpose().mmul(a).div(a.transpose().mmul(a).get(0,0));t=t.div(t.norm());let n=e.clone().sub(a.clone().mmul(t.transpose())),r=o.transpose().mmul(a).div(a.transpose().mmul(a).get(0,0)),s=i.clone().sub(a.clone().mulS(r.get(0,0)).mmul(c.transpose()));this.t=a,this.p=t.transpose(),this.w=l.transpose(),this.q=c,this.u=o,this.s=a.transpose().mmul(a),this.xResidual=n,this.yResidual=s,this.betas=r}else this.w=l.transpose(),this.s=a.transpose().mmul(a).sqrt(),this.t=n?a.clone().div(this.s.get(0,0)):a,this.xResidual=e.sub(a.mmul(l.transpose()))}}jw.AbstractMatrix=Fb,jw.CHO=Lb,jw.CholeskyDecomposition=Lb,jw.DistanceMatrix=Cb,jw.EVD=Tb,jw.EigenvalueDecomposition=Tb,jw.LU=Sb,jw.LuDecomposition=Sb;var Pb=jw.Matrix=yb;jw.MatrixColumnSelectionView=class extends _b{constructor(e,t){pb(e,t),super(e,e.rows,t.length),this.columnIndices=t}set(e,t,i){return this.matrix.set(e,this.columnIndices[t],i),this}get(e,t){return this.matrix.get(e,this.columnIndices[t])}},jw.MatrixColumnView=class extends _b{constructor(e,t){hb(e,t),super(e,e.rows,1),this.column=t}set(e,t,i){return this.matrix.set(e,this.column,i),this}get(e){return this.matrix.get(e,this.column)}},jw.MatrixFlipColumnView=class extends _b{constructor(e){super(e,e.rows,e.columns)}set(e,t,i){return this.matrix.set(e,this.columns-t-1,i),this}get(e,t){return this.matrix.get(e,this.columns-t-1)}},jw.MatrixFlipRowView=class extends _b{constructor(e){super(e,e.rows,e.columns)}set(e,t,i){return this.matrix.set(this.rows-e-1,t,i),this}get(e,t){return this.matrix.get(this.rows-e-1,t)}},jw.MatrixRowSelectionView=class extends _b{constructor(e,t){fb(e,t),super(e,t.length,e.columns),this.rowIndices=t}set(e,t,i){return this.matrix.set(this.rowIndices[e],t,i),this}get(e,t){return this.matrix.get(this.rowIndices[e],t)}},jw.MatrixRowView=class extends _b{constructor(e,t){lb(e,t),super(e,1,e.columns),this.row=t}set(e,t,i){return this.matrix.set(this.row,t,i),this}get(e,t){return this.matrix.get(this.row,t)}},jw.MatrixSelectionView=xb,jw.MatrixSubView=class extends _b{constructor(e,t,i,n,r){gb(e,t,i,n,r),super(e,i-t+1,r-n+1),this.startRow=t,this.startColumn=n}set(e,t,i){return this.matrix.set(this.startRow+e,this.startColumn+t,i),this}get(e,t){return this.matrix.get(this.startRow+e,this.startColumn+t)}},jw.MatrixTransposeView=class extends _b{constructor(e){super(e,e.columns,e.rows)}set(e,t,i){return this.matrix.set(t,e,i),this}get(e,t){return this.matrix.get(t,e)}},jw.NIPALS=Hb,jw.Nipals=Hb,jw.QR=Nb,jw.QrDecomposition=Nb,jw.SVD=Mb,jw.SingularValueDecomposition=Mb,jw.SymmetricMatrix=Ab,jw.WrapperMatrix1D=kb,jw.WrapperMatrix2D=Ib,jw.correlation=function(e,t=e,i={}){e=new yb(e);let n=!1;if("object"!=typeof t||yb.isMatrix(t)||ib.isAnyArray(t)?t=new yb(t):(i=t,t=e,n=!0),e.rows!==t.rows)throw new TypeError("Both matrices must have the same number of rows");const{center:r=!0,scale:s=!0}=i;r&&(e.center("column"),n||t.center("column")),s&&(e.scale("column"),n||t.scale("column"));const o=e.standardDeviation("column",{unbiased:!0}),a=n?o:t.standardDeviation("column",{unbiased:!0}),c=e.transpose().mmul(t);for(let t=0;t<c.rows;t++)for(let i=0;i<c.columns;i++)c.set(t,i,c.get(t,i)*(1/(o[t]*a[i]))*(1/(e.rows-1)));return c},jw.covariance=function(e,t=e,i={}){e=new yb(e);let n=!1;if("object"!=typeof t||yb.isMatrix(t)||ib.isAnyArray(t)?t=new yb(t):(i=t,t=e,n=!0),e.rows!==t.rows)throw new TypeError("Both matrices must have the same number of rows");const{center:r=!0}=i;r&&(e=e.center("column"),n||(t=t.center("column")));const s=e.transpose().mmul(t);for(let t=0;t<s.rows;t++)for(let i=0;i<s.columns;i++)s.set(t,i,s.get(t,i)*(1/(e.rows-1)));return s};var Ob=jw.default=yb;jw.determinant=function e(t){if((t=yb.checkMatrix(t)).isSquare()){if(0===t.columns)return 1;let i,n,r,s;if(2===t.columns)return i=t.get(0,0),n=t.get(0,1),r=t.get(1,0),s=t.get(1,1),i*s-n*r;if(3===t.columns){let s,o,a;return s=new xb(t,[1,2],[1,2]),o=new xb(t,[1,2],[0,2]),a=new xb(t,[1,2],[0,1]),i=t.get(0,0),n=t.get(0,1),r=t.get(0,2),i*e(s)-n*e(o)+r*e(a)}return new Sb(t).determinant}throw Error("determinant can only be calculated for a square matrix")};var Vb=jw.inverse=function(e,t=!1){return e=Ib.checkMatrix(e),t?new Mb(e).inverse():Rb(e,yb.eye(e.rows))};jw.linearDependencies=function(e,t={}){const{thresholdValue:i=1e-9,thresholdError:n=1e-9}=t;let r=(e=yb.checkMatrix(e)).rows,s=new yb(r,r);for(let t=0;t<r;t++){let o=yb.columnVector(e.getRow(t)),a=e.subMatrixRow(Bb(r,t)).transpose(),c=new Mb(a).solve(o),l=yb.sub(o,a.mmul(c)).abs().max();s.setRow(t,Db(l,c,t,i,n))}return s},jw.pseudoInverse=function(e,t=Number.EPSILON){if((e=yb.checkMatrix(e)).isEmpty())return e.transpose();let i=new Mb(e,{autoTranspose:!0}),n=i.leftSingularVectors,r=i.rightSingularVectors,s=i.diagonal;for(let e=0;e<s.length;e++)Math.abs(s[e])>t?s[e]=1/s[e]:s[e]=0;return r.mmul(yb.diag(s).mmul(n.transpose()))},jw.solve=Rb,jw.wrap=function(e,t){if(ib.isAnyArray(e))return e[0]&&ib.isAnyArray(e[0])?new Ib(e):new kb(e,t);throw new Error("the argument is not an array")};const qb=Pb;Ob.Matrix&&Ob.Matrix;const Qb=Vb;function Ub(e,t,i,n,r,s,o){let a=i,c=qb.eye(t.length,t.length,a);const l=r(t);let h=new Float64Array(e.x.length);for(let t=0;t<e.x.length;t++)h[t]=l(e.x[t]);let d=function(e,t,i,n,r,s){const o=i.length,a=e.x.length;let c=qb.zeros(o,a),l=0;for(let h=0;h<o;h++){if(0===n[h])continue;let o=n[h],d=i.slice();d[h]+=o;let u=r(d);if(s){d=i.slice(),d[h]-=o,o*=2;let t=r(d);for(let i=0;i<a;i++)c.set(l,i,(t(e.x[i])-u(e.x[i]))/o)}else for(let i=0;i<a;i++)c.set(l,i,(t[i]-u(e.x[i]))/o);l++}return c}(e,h,t,n,r,s),u=function(e,t){const i=e.x.length;let n=new qb(i,1);for(let r=0;r<i;r++)n.set(r,0,e.y[r]-t[r]);return n}(e,h),f=Qb(c.add(d.mmul(d.transpose().scale("row",{scale:o})))),p=d.mmul(u.scale("row",{scale:o}));return{perturbations:f.mmul(p),jacobianWeigthResidualError:p}}function jb(e,t,i={}){let{checkTimeout:n,minValues:r,maxValues:s,parameters:o,weightSquare:a,damping:c,dampingStepUp:l,dampingStepDown:h,maxIterations:d,errorTolerance:u,centralDifference:f,gradientDifference:p,improvementThreshold:g}=function(e,t,i){let{timeout:n,minValues:r,maxValues:s,initialValues:o,weights:a=1,damping:c=.01,dampingStepUp:l=11,dampingStepDown:h=9,maxIterations:d=100,errorTolerance:u=1e-7,centralDifference:f=!1,gradientDifference:p=.1,improvementThreshold:g=.001}=i;if(c<=0)throw new Error("The damping option must be a positive number");if(!e.x||!e.y)throw new Error("The data parameter must have x and y elements");if(!qw(e.x)||e.x.length<2||!qw(e.y)||e.y.length<2)throw new Error("The data parameter elements must be an array with more than 2 points");if(e.x.length!==e.y.length)throw new Error("The data parameter elements must have the same size");let m,w,b=o||new Array(t.length).fill(1),F=e.y.length,v=b.length;if(s=s||new Array(v).fill(Number.MAX_SAFE_INTEGER),r=r||new Array(v).fill(Number.MIN_SAFE_INTEGER),s.length!==r.length)throw new Error("minValues and maxValues must be the same size");if(!qw(b))throw new Error("initialValues must be an array");if("number"==typeof p)p=new Array(b.length).fill(p);else{if(!qw(p))throw new Error("gradientDifference should be a number or array with length equal to the number of parameters");p.length!==v&&(p=new Array(v).fill(p[0]))}if("number"==typeof a){let e=1/a**2;m=()=>e}else{if(!qw(a))throw new Error("weights should be a number or array with length equal to the number of data points");if(a.length<e.x.length){let e=1/a[0]**2;m=()=>e}else m=e=>1/a[e]**2}if(void 0!==n){if("number"!=typeof n)throw new Error("timeout should be a number");let e=Date.now()+1e3*n;w=()=>Date.now()>e}else w=()=>!1;let y=new Array(e.x.length);for(let e=0;e<F;e++)y[e]=m(e);return{checkTimeout:w,minValues:r,maxValues:s,parameters:b,weightSquare:y,damping:c,dampingStepUp:l,dampingStepDown:h,maxIterations:d,errorTolerance:u,centralDifference:f,gradientDifference:p,improvementThreshold:g}}(e,t,i),m=Qw(e,o,t,a),w=m<=u,b=0;for(;b<d&&!w;b++){let d=m,{perturbations:b,jacobianWeigthResidualError:F}=Ub(e,o,c,p,t,f,a);for(let e=0;e<o.length;e++)o[e]=Math.min(Math.max(r[e],o[e]-b.get(e,0)),s[e]);if(m=Qw(e,o,t,a),isNaN(m))break;if((d-m)/b.transpose().mmul(b.mulS(c).add(F)).get(0,0)>g?c=Math.max(c/h,1e-7):(m=d,c=Math.min(c*l,1e7)),n())throw new Error(`The execution time is over to ${i.timeout} seconds`);w=m<=u}return{parameterValues:o,parameterError:m,iterations:b}}class Gb{constructor(e){this.binScores=e}get_histogram(){let e=Math.max(...this.binScores),t=Math.floor(e/1e3),i=this.range(0,Math.floor(e/t)*t+t,t);const{counts:n,bins:r}=this.histogram(this.binScores,i);return{counts:n,bins:r}}range(e,t,i){const n=[];for(let r=e;r<t;r+=i)n.push(r);return n}histogram(e,t){const i=Array(t.length).fill(0);return e.forEach((e=>{for(let n=0;n<t.length-1;n++)if(e>=t[n]&&e<t[n+1]){i[n]++;break}})),{counts:i,bins:t}}normal_distribution([e,t,i]){return n=>e*Math.exp(-Math.pow(n-t,2)/(2*Math.pow(i,2)))/(Math.sqrt(2*Math.PI)*i)}get_initial_model_values(e,t){const i=t.slice(1,-1).reduce(((e,t)=>e+t),0);if(0===i)return console.debug("Problem with fit: all data points have zero value. Return zeros instead fit parameters!"),null;const n=(e[1]-e[0])*i,r=e.reduce(((e,i,n)=>e+i*t[n]),0)/i,s=e.reduce(((e,i,n)=>e+t[n]*Math.pow(i-r,2)),0),o=Math.sqrt(s/i);return[n,r,o]}normal_fit(e,t){const i={initialValues:this.get_initial_model_values(e,t),maxIterations:100};return jb({x:e,y:t},this.normal_distribution,i)}}class Wb{constructor(e,t){this.binSize=e,this.refGenome=t,this.gcBin=this.getGCbinSize()}getGCbinSize(){for(let e of[1e5,1e4])if(this.binSize%e==0)return e;return!1}async getBinGC(){const e={};if(!this.gcBin)return e;const t="https://storage.googleapis.com/cnvpytor_data/gcInfoData/GCinfo.json";try{const i=(await Mn.loadJson(t,{timeout:5e3})).find((e=>e.id===this.refGenome));if(!i)return console.warn("GC data not found for ",this.refGenome),e;const n=i.Bins.find((e=>e.BinSize===this.gcBin));if(!n)return console.warn("GC data not found for ",this.refGenome," Bin : ",this.gcBin),e;let r=`${t.split("/").slice(0,-1).join("/")}${n.fileURL}`;(await Mn.load(r,{})).split("\n").forEach((t=>{if(""!==t.trim()){const[i,n,r,s,o]=t.split("\t");e[i]||(e[i]=[]),e[i].push({start:+n,gcContent:+r,gcCount:+s,atCount:+o})}}))}catch(e){console.error(e),console.warn("Errors loading GC correction data.")}return e}}class $b extends Wb{constructor(e,t,i){super(t,i),this.wigFeatures=e,this.binSize=t,this.refGenome=i}async apply_gcCorrection(){if(!this.wigFeatures)return console.error("BinScore data is not available."),null;const e=Object.values(this.wigFeatures).reduce(((e,t)=>e.concat(t.filter((e=>e.binScore>0)).map((e=>e.binScore)))),[]);let t=new Gb(e);const{counts:i,bins:n}=t.get_histogram();let r=t.normal_fit(n,i);this.globalMean=r.parameterValues[1],this.globalStd=r.parameterValues[2],this.gcData=await this.getBinGC(),this.gcFlag=Object.keys(this.gcData).length>0,this.binScoreField=this.gcFlag?"gcCorrectedBinScore":"binScore",this.getGcCorrectionSignal(this.globalMean)}getGcCorrectionSignal(e){let t=this.getGcCorrection(e);Object.keys(this.wigFeatures).forEach((e=>{this.wigFeatures[e].forEach((e=>{e.binScore?e.gcCorrectedBinScore=Math.round(t[e.gc]*e.binScore):e.gcCorrectedBinScore=null}))}))}getGcCorrection(e){const t={};if(this.gcFlag){let i=this.getGCbinSize();const n={};let r=parseInt(this.binSize/i);for(let e in this.wigFeatures)for(let t=0;t<this.wigFeatures[e].length;t++){let i={AT:0,GC:0};for(let n=t*r;n<t*r+r;n++)this.gcData[e][n]&&(i.GC+=this.gcData[e][n].gcCount,i.AT+=this.gcData[e][n].atCount);let s=Math.round(100*i.GC/(i.GC+i.AT));this.wigFeatures[e][t].gc=s,n[s]||(n[s]=[]),this.wigFeatures[e][t].binScore&&n[s].push(this.wigFeatures[e][t].binScore)}Object.keys(n).forEach((i=>{let r,s=n[i];if(s.length<4)r=s.reduce(((e,t)=>e+t),0)/s.length;else{let e=new Gb(n[i]);const{counts:t,bins:s}=e.get_histogram();r=e.normal_fit(s,t).parameterValues[1]}t[i]=e/r}))}return t}formatDataStructure(e,t=1){const i=[];for(const[r,s]of Object.entries(this.wigFeatures))for(let r of s){var n={...r};1!=t&&(n.value=r[e]/t*2),i.push(n)}return i}formatDataStructure_BAF(e,t=-1){const i=[],n=[];for(const[r,s]of Object.entries(this.wigFeatures))s.forEach((r=>{var s={...r},o={...r};let a=r[e];.5!=a&&(o.value=t*(1-a),n.push(o)),s.value=t*a,i.push(s)}));return[i,n]}}function Kb(e){return e.reduce((function(e,t){return e>t?e:t}))}function Yb(e,t,i,n){return t*Math.exp(-1*(e-i)**2/(2*n**2))/Math.sqrt(2*Math.PI)/n}function Xb(e,t,i,n){return Math.exp(-1*(e-i)**2/(t**2+n**2))}function Zb(e,t){let i;try{i=e.reduce(((e,i,n)=>e+Math.min(i,t[n])))}catch{return console.log("Failed to find likelihood overlap: ",e,t),0}return i}function Jb(e,t,i,n){return 0==t&&0==n?{nl:.5*(e+i),ne:0}:{nl:(e*n*n+i*t*t)/(t*t+n*n),ne:Math.sqrt(t*t*n*n/(t*t+n*n))}}function eF(e,t){let i=parseInt(t*(e.length-1)),n=t*(e.length-1)-i;return i<e.length-1?e[i]*(1-n)+e[i+1]*n:e[i]}function tF(e){const t=e.length,i=Math.max(...e);let n=e.indexOf(i);n>Math.floor(t/2)&&(n=t-1-n);const r=(t/2-n)/(t+1),s=Math.floor((t/2+n)/2),o=t-1-s;let a=e.slice(s,o+1).reduce(((e,t)=>e+t),0)/e.reduce(((e,t)=>e+t),0);return n===Math.floor(t/2)&&(a=1),{mean:r,p:a}}var iF={CombinedCaller:class extends $b{constructor(e,t,i){super(e,t,i)}async call_2d(e=null,t=null,i="both",n=.1,r=0,s=10,o=0){await this.apply_gcCorrection();let a=this.gcFlag?"gcCorrectedBinScore":"binScore",c=null==e?.05*this.binSize/3e9:e,l=null==t?parseInt(this.binSize/1e4):t,h=[],d=[],u=[],f=[],p=[],g=[];for(const[e,t]of Object.entries(this.wigFeatures)){let e=[],i=[],s=[];t.forEach(((t,n)=>{t.hets_count>4&&t.dp_count>l&&t[a]&&(e.push([n]),i.push(t[a]),s.push(t.likelihood_score),delete t.likelihood_score)}));let o=[];for(let e=1;e<i.length;e++)o.push(Math.abs(i[e]-i[e-1]));let g=[0];for(let e=1;e<o.length;e++)g.push(Math.min(o[e-1],o[e]));g.push(0);let m=i.map(((e,t)=>Math.sqrt(Math.sqrt(e)**2+this.globalStd**2+Math.pow(g[t]/2,2)))),w=[];for(let t=0;t<e.length-1;t++){let n=0;try{n=Zb(s[t],s[t+1])}catch{console.log("Overlap failed: ",t,s[t],e[t+1],s[t+1])}let r=Xb(i[t],m[t],i[t+1],m[t+1]);w.push(r*n)}for(;w.length>0;){w=w.filter((e=>"number"==typeof e));let t=Kb(w);if(isNaN(t)&&console.log("NaN value",w),t<c)break;let n,r,o=w.indexOf(t),a=Jb(i[o],m[o],i[o+1],m[o+1]);try{n=s[o].map(((e,t)=>e*s[o+1][t])),r=n.reduce(((e,t)=>e+t))}catch{console.log(s),console.log("max_overlap:",t,o,w.length),console.log("likelihood: ",o,s[o],s[o+1]),console.log("nlh: ",r)}if(i[o]=a.nl,m[o]=a.ne,s[o]=n.map((function(e){return e/r})),e[o].push(...e[o+1]),i.splice(o+1,1),m.splice(o+1,1),e.splice(o+1,1),s.splice(o+1,1),w.splice(o,1),o<w.length){let e=Xb(i[o],m[o],i[o+1],m[o+1])*Zb(s[o],s[o+1]);w[o]=e}if(o>0){let e=Xb(i[o-1],m[o-1],i[o],m[o])*Zb(s[o-1],s[o]);w[o-1]=e}}let b=-1;for(;;){w=[];for(let t=0;t<i.length;t++)for(let r=t;r<i.length;r++)e[r][0]-e[t].at(-1)<n*(e[t].length+e[r].length)&&w.push(Xb(i[t],m[t],i[r],m[r])*Zb(s[t],s[r]));if(0==w.length)break;let t=Kb(w);if(t<c)break;let r=0,o=1;for(;r<e.length-1;){let a=Xb(i[r],m[r],i[o],m[o])*Zb(s[r],s[o]);if(e[o][0]-e[r].at(-1)<n*(e[r].length+e[o].length)&&a==t){let t=Jb(i[r],m[r],i[r+1],m[r+1]);i[r]=t.nl,m[r]=t.ne;let n=s[r].map(((e,t)=>e*s[r+1][t])),a=n.reduce(((e,t)=>e+t));s[r]=n.map((function(e){return e/a})),e[r].push(...e[r+1]),e[r]=e[r].sort(((e,t)=>e-t)),i.splice(o,1),m.splice(o,1),e.splice(o,1),s.splice(o,1),o>=e.length&&(r+=1,o=r+1)}else o+=1,o>=e.length&&(r+=1,o=r+1)}if(b==e.length)break;b=e.length}e.forEach(((e,n)=>{let o=tF(s[n]);e.length>1&&(e.forEach(((e,s)=>{d.push(t[e]),o.mean<=r&&h.push(t[e]),t[e].segment_score=i[n]})),u.push(i[n]),f.push(m[n]),p.push(s[n]))}))}let m=parseInt(1e3*(1-o));0==m&&(m=1);let w=Bw.linspace(o,1,m),b={},F={};for(let e=10;e>-1;e--)for(let t=0;t<e/2+1;t++){let n,r,s=e-t,o=w.map(((t,i)=>1-t+t*e/2)),a=e/2;e>0?(n=.5-t/(t+s),r=w.map(((e,i)=>.5-(1-e+e*t)/(2-2*e+(t+s)*e)))):(n=0,r=w.map(((e,t)=>0*e)));for(let i=0;i<u.length;i++){let c=Yb(a*this.globalMean,1,u[i],f[i])*eF(p[i],.5+n);i in F?F[i].push([e,t,s,c,1]):F[i]=[e,t,s,c,1];let l=0,h=0,d=0;o.forEach(((e,t)=>{if(!isNaN(r[t])){let n=Yb(e*this.globalMean,1,u[i],f[i])*eF(p[i],.5+r[t]);l+=n,n>h&&(h=n,d=w[t])}})),i in b?b[i].push([e,t,s,l/w.length,d]):b[i]=[e,t,s,l/w.length,d]}for(let e=0;e<u.length;e++)if("germline"==i)b[e].sort(((e,t)=>e[3]-t[3]));else if(b[e].sort(((e,t)=>e[3]-t[3])),"both"==i&&(F[e].sort(((e,t)=>e[3]-t[3])),F[e][0][3]>b[e][0][3])){let t=b[e].filter((t=>t[0]!=F[e][0][0]&&t[1]<=F[e][0][1]));b[e]=[F[e][0]].push(...t)}for(let e=0;e<u.length;e++)b[e][0][0],b[e][0][0],u[e],this.globalMean,Ow.t_test_1_sample(this.globalMean,u[e],f[e],g[e])}var v=this.formatDataStructure(this.wigFeatures,"binScore",this.globalMean);let y=[];return this.gcFlag&&(y=this.formatDataStructure(this.wigFeatures,"gcCorrectedBinScore",this.globalMean)),{binScore:v,gcCorrectedBinScore:y,segmentScore:this.formatDataStructure(this.wigFeatures,"segment_score",this.globalMean)}}formatDataStructure(e,t,i=1){const n=[];for(const[r,s]of Object.entries(e))s.forEach((e=>{var r={...e};1!=i&&(r.value=e[t]/i*2),n.push(r)}));return n}}};const nF=2871e6;function rF(e){for(var t=1,i=1,n=1*e,r=1;r<50;r++)t*=r,n+=(i*=-1)*Math.pow(e,2*r+1)/(t*(2*r+1));return 2*n/Math.sqrt(3.14159265358979)}function sF(e,t,i,n,r){var s=new cF(i.slice(n,r));return 0==s.std&&(s.std=t>0?t*s.mean/e:1),lF(e,s.mean,s.std,r-n)/(r-n)}function oF(e,t,i,n,r){var s=new cF(i.slice(n,r));if(s.mean<e){var o=(s.max-s.mean)/(t*Math.sqrt(2));return Math.pow(.5*(1+rF(o)),r-n)}o=(s.min-s.mean)/(t*Math.sqrt(2));return Math.pow(.5*(1-rF(o)),r-n)}function aF(e,t,i,n,r,s,o=1e3){for(var a=sF(e,t,i,n,r),c=0,l=!1;a>s&!l&c<o;){l=!0,c+=1;var[h,d,u,f]=[1e10,1e10,1e10,1e10];if(n>0&&(h=sF(e,t,i,n-1,r)),r-n>2)var d=sF(e,t,i,n+1,r),u=sF(e,t,i,n,r-1);if(r<i.length)var f=sF(e,t,i,n,r+1);Math.min[f]<a&&(l=!1,h==Math.min[f]&&(n-=1,a=h),elif(d==Math.min[f]),n+=1,a=d,elif(u==Math.min[f]),r-=1,a=u,elif(f==Math.min[f]),r+=1,a=f)}return a<=s?r:0}class cF{constructor(e){this.data=e,this.mean=e.reduce(((e,t)=>e+t))/e.length,this.std=Math.sqrt(e.reduce(((e,t)=>(t-this.mean)**2))/e.length)}}function lF(e,t,i,n){0==i&&(i=1);var r=(e-t)/i*Math.sqrt(n);return 1-Ow.TdistributionCDF(Math.abs(r),n-1)}function hF(e,t,i,n,r,s){0==t&&(t=1),0==r&&(r=1);var o=(e-n)/Math.sqrt(t**2/i+r**2/s),a=(t**2/i+r**2/s)**2*(i-1)*(s-1)/(t**4*(s-1)/i**2+r**4*(i-1)/s**2);return 1-Ow.TdistributionCDF(Math.abs(o),parseInt(a+.5))}var dF={Partition:class{constructor(e,t,i){this.rd=e,this.mean=t,this.std=i,this.bin_bands=[2,3,4,5,6,7,8,10,12,14,16,20,24,28,32,40,48,56,64,80,96,112,128]}get_rd_signal_bandwidth(e){var t=[];return e.forEach(((e,i)=>{var n=0;n=e>this.mean/4?this.mean/(this.std**2*e):4/this.std**2,t.push(n)})),t}meanShiftCaller(e,t=3){var i={};return Object.entries(this.rd).forEach((([e,n])=>{var r=new Array(n.length).fill(!1),s=new Array(n.length);for(let e=0;e<n.length;e++)r[e]||(s[e]=n[e]);this.bin_bands.forEach(((e,i)=>{var o=r.map(((e,t)=>!e)),a=[];Object.entries(n).forEach((([e,t])=>{a.push(t.binScore)}));var c=[0],l=0;for(let e=0;e<r.length;e++)r[e]?l>0&&(c.push(c[c.length-1]+l-1),l=0):l+=1;c.shift();for(let i=0;i<t;i++){var h=this.get_rd_signal_bandwidth(a),d=new Array(a.length).fill(0);for(let t=0;t<a.length;t++)for(let i=t-3*e;i<=t+3*e+1;i++)if(!(i<0||i>=a.length||Math.abs(t-i)>=a.length)){var u=(i-t)*Math.exp(-.5*(i-t)**2/e**2)*Math.exp(-.5*(a[t]-a[i])**2*h[t]);d[t]+=u}for(var f=new Array,p=0;p<d.length-1;p++)d[p]<0&d[p+1]>=0&&f.push(p);f.push(d.length-1),f=f.concat(c).sort(((e,t)=>e-t)),f=Array.from(new Set(f));var g=0;for(p=0;p<f.length;p++){var m=a.slice(g,f[p]+1),w=m.reduce(((e,t)=>e+t))/m.length;a.fill(w,g,f[p]+1),g=f[p]+1}}p=0;for(var b=0;p<s.length;p++)o[p]&&(s[p]=a[b],b++);for(f=new Array,p=0;p<s.length-1;p++){Math.abs(s[p+1]-s[p])>.01&&f.push(p+1)}f.unshift(0),f.push(s.length),r=new Array(this.rd.length).fill(!1);for(p=1;p<f.length;p++){var F=[f[p-1],f[p]],v=[f[p-1],f[p-1]];if(!(p>1))continue;v[0]=f[p-2];var y=[f[p],f[p]];if(!(p<f.length-1))continue;y[1]=f[p+1];var A=F[1]-F[0],C=v[1]-v[0],_=y[1]-y[0];if(A<=1)continue;var x=new cF(s.slice(F[0],F[1]));if(_<=15||C<=15||A<=15){var k=1.8*Math.sqrt(s[v[0]]/this.mean)*this.std;if(Math.abs(s[v[0]]-s[F[0]])<k)continue;if(k=1.8*Math.sqrt(s[y[0]]/this.mean)*this.std,Math.abs(s[y[0]]-s[F[0]])<k)continue}else{var I=s.slice(v[0],v[1]),S=new cF(I),E=s.slice(y[0],y[1]),N=new cF(E);if(hF(x.mean,x.std,x.data.length,S.mean,S.std,S.data.length)>.01/nF*bin_size*(A+C))continue;if(hF(x.mean,x.std,x.data.length,N.mean,N.std,N.data.length)>.01/nF*bin_size*(A+_))continue}if(lF(this.mean,x.mean,x.std,x.data.length)>.05)continue;let e=a.slice(F[0],F[1]);var M=new cF(e);r.fill(!0,F[0],F[1]),s.fill(M.mean,F[0],F[1])}})),i[e]=s})),i}call_mean_shift(e=3){for(var t=new Array(this.rd.length).fill(!1),i=new Array(this.rd.length),n=0;n<this.rd.length;n++)t[n]||(i[n]=this.rd[n]);return this.bin_bands.forEach(((n,r)=>{var s=t.map(((e,t)=>!e)),o=[];s.forEach(((e,t)=>{e&&o.push(this.rd[t])}));for(var a=[0],c=0,l=0;l<t.length;l++)t[l]?c>0&&(a.push(a[a.length-1]+c-1),c=0):c+=1;a.shift();for(var h=0;h<e;h++){var d=this.get_rd_signal_bandwidth(o),u=new Array(o.length).fill(0);for(l=0;l<o.length;l++)for(var f=l-3*n;f<=l+3*n+1;f++)if(!(f<0||f>=o.length||Math.abs(l-f)>=o.length)){var p=(f-l)*Math.exp(-.5*(f-l)**2/n**2)*Math.exp(-.5*(o[l]-o[f])**2*d[l]);u[l]+=p}var g=new Array;for(l=0;l<u.length-1;l++)u[l]<0&u[l+1]>=0&&g.push(l);g.push(u.length-1),g=g.concat(a).sort(((e,t)=>e-t)),g=Array.from(new Set(g));var m=0;for(l=0;l<g.length;l++){var w=o.slice(m,g[l]+1),b=w.reduce(((e,t)=>e+t))/w.length;o.fill(b,m,g[l]+1),m=g[l]+1}}for(l=0,f=0;l<i.length;l++)s[l]&&(i[l]=o[f],f++);for(g=new Array,l=0;l<i.length-1;l++){Math.abs(i[l+1]-i[l])>.01&&g.push(l+1)}g.unshift(0),g.push(i.length),t=new Array(this.rd.length).fill(!1);for(l=1;l<g.length;l++){var F=[g[l-1],g[l]],v=[g[l-1],g[l-1]];if(l>1){v[0]=g[l-2];var y=[g[l],g[l]];if(l<g.length-1){y[1]=g[l+1];var A=F[1]-F[0],C=v[1]-v[0],_=y[1]-y[0];if(!(A<=1)){var x=new cF(i.slice(F[0],F[1]));if(_<=15||C<=15||A<=15){var k=1.8*Math.sqrt(i[v[0]]/this.mean)*this.std;if(Math.abs(i[v[0]]-i[F[0]])<k)continue;if(k=1.8*Math.sqrt(i[y[0]]/this.mean)*this.std,Math.abs(i[y[0]]-i[F[0]])<k)continue}else{var I=i.slice(v[0],v[1]),S=new cF(I),E=i.slice(y[0],y[1]),N=new cF(E);if(hF(x.mean,x.std,x.data.length,S.mean,S.std,S.data.length)>3.483106931382794e-9*(A+C))continue;if(hF(x.mean,x.std,x.data.length,N.mean,N.std,N.data.length)>3.483106931382794e-9*(A+_))continue}if(!(lF(this.mean,x.mean,x.std,x.data.length)>.05)){var M=new cF(this.rd.slice(F[0],F[1]));t.fill(!0,F[0],F[1]),i.fill(M.mean,F[0],F[1])}}}}}})),i}cnv_calling(e=1e5){var t=.25*this.mean,i=this.mean-t,n=this.mean+t,r=2971e6,s=this.meanShiftCaller(e),o={},a=[];return Object.entries(s).forEach((([c,l])=>{for(var h=!1;!h;){h=!0;var d=new Array(1).fill(0);for(let e=0;e<l.length-1;e++){Math.abs(l[e+1]-l[e])>.01&&d.push(e+1)}d.push(l.length);for(let e=0;e<d.length-2;e++){var u=Math.abs(l[d[e]]-l[d[e+1]]);if(u<t){var f=u+1,p=u+1;if(e>0&&(f=Math.abs(l[d[e]]-l[d[e-1]])),e<d.length-3&&(p=Math.abs(s[d[e+1]]-l[d[e+2]])),u<f&&u<p){h=!1;var g=new cF(l.slice(d[e],d[e+2]));l.fill(g.mean,d[e],d[e+2]),d.splice(e+1,e+1)}}}}var m=[];Object.entries(this.rd[c]).forEach((([e,t])=>{m.push(t.binScore)}));for(var w,b=new Array(l.length).fill(""),F=0,v=.05*e/r;F<l.length;){for(var y=F,A=F;F<l.length&l[F]<i;)F+=1;if((_=F)>A+1){var C=aF(this.mean,this.std,m,A,_,v);if(C){var _=C;b.fill("D",A,_)}}for(A=F;F<l.length&l[F]>n;)F+=1;(_=F)>A+1&&(C=aF(this.mean,this.std,m,A,_,v))&&(_=C,b.fill("A",A,_)),F==y&&(F+=1)}for(F=0;F<l.length;){for(;F<l.length&""!=b[F];)F+=1;for(A=F;F<l.length&l[F]<i;)F+=1;(_=F)>A+1&&(oF(this.mean,this.std,m,A,_)<1682935038707506e-26&&b.fill(["d"]*(_-A),A,_),F-=1),F+=1}(F=0)<l.length&&(w=b[F]),A=0;for(var x=[...m];F<l.length;){for(;b[F]==w&&!((F+=1)>=b.length););if(F>A){var k=new cF(x.slice(A,F));x.fill(k.mean,A,F)}F<l.length&&(w=b[F]),A=F}for(o[c]=x,F=0;F<l.length;){if(""==(w=b[F])){F+=1;continue}for(A=F;F<l.length&w==b[F];)F+=1;let t,i=new cF(x.slice(A,F)).mean/this.mean;t="D"==w?"deletion":"duplication";let n={chr:c,start:e*A+1,end:e*F,size:e*(F-A+1),value:2*i,event_type:t};a.push(n)}})),[o,a]}},MeanShiftCaller:class extends $b{constructor(e,t,i){super(e,t,i),this.binBands=[2,3,4,5,6,7,8,10,12,14,16,20,24,28,32,40,48,56,64,80,96,112,128]}async callMeanshift(e=3){await this.apply_gcCorrection();let t=this.partition();Object.entries(this.wigFeatures).forEach((([e,i])=>{i.forEach(((i,n)=>{t[e]&&(i.partitionLevel=parseInt(t[e][n]))}))}));return{binScore:this.formatDataStructure("binScore",this.globalMean),gcCorrectedBinScore:this.formatDataStructure("gcCorrectedBinScore",this.globalMean),segmentsCNV:this.formatDataStructure("partitionLevel",this.globalMean)}}getRDSignalBandWidth(e){const t=this.globalMean/4,i=4/this.globalStd**2;return e.map((e=>e>t?this.globalMean/(this.globalStd**2*e):i))}partition(e=3){let t={};Object.keys(this.wigFeatures).sort(((e,t)=>e.localeCompare(t,void 0,{numeric:!0}))).forEach((e=>{t[e]=this.wigFeatures[e]}));let i=this.gcFlag?"gcCorrectedBinScore":"binScore";var n={};for(const[o,a]of Object.entries(t)){var r=new Array(a.length).fill(!1),s=a.map(((e,t)=>r[t]?void 0:e[i]));this.binBands.forEach(((t,i)=>{var n=r.map(((e,t)=>!e)),o=s.filter(((e,t)=>!r[t])),a=[0],c=0;r.forEach((e=>{e?c>0&&(a.push(a[a.length-1]+c-1),c=0):e||c++})),a.shift();for(let i=0;i<e;i++){var l=this.getRDSignalBandWidth(o),h=new Array(o.length).fill(0);for(let e=0;e<o.length;e++){const i=Math.max(0,e-3*t),n=Math.min(o.length-1,e+3*t+1);for(let r=i;r<=n;r++){var d=(r-e)*Math.exp(-.5*(r-e)**2/t**2)*Math.exp(-.5*(o[e]-o[r])**2*l[e]);h[e]+=d}}for(var u=new Array,f=0;f<h.length-1;f++)h[f]<0&h[f+1]>=0&&u.push(f);u.push(h.length-1),u=u.concat(a).sort(((e,t)=>e-t)),u=Array.from(new Set(u));var p=0;for(f=0;f<u.length;f++){var g=o.slice(p,u[f]+1),m=g.reduce(((e,t)=>e+t))/g.length;o.fill(m,p,u[f]+1),p=u[f]+1}}f=0;for(var w=0;f<s.length;f++)n[f]&&(s[f]=o[w],w++);for(u=new Array,f=0;f<s.length-1;f++){Math.abs(s[f+1]-s[f])>.01&&u.push(f+1)}u.unshift(0),u.push(s.length),r=new Array(this.wigFeatures.length).fill(!1);for(f=1;f<u.length;f++){var b=[u[f-1],u[f]],F=[u[f-1],u[f-1]];if(!(f>1))continue;F[0]=u[f-2];var v=[u[f],u[f]];if(!(f<u.length-1))continue;v[1]=u[f+1];var y=b[1]-b[0],A=F[1]-F[0],C=v[1]-v[0];if(y<=1)continue;var _=new cF(s.slice(b[0],b[1]));if(C<=15||A<=15||y<=15){var x=1.8*Math.sqrt(s[F[0]]/this.globalMean)*this.globalStd;if(Math.abs(s[F[0]]-s[b[0]])<x)continue;if(x=1.8*Math.sqrt(s[v[0]]/this.globalMean)*this.globalStd,Math.abs(s[v[0]]-s[b[0]])<x)continue}else{var k=s.slice(F[0],F[1]),I=new cF(k),S=s.slice(v[0],v[1]),E=new cF(S);if(hF(_.mean,_.std,_.data.length,I.mean,I.std,I.data.length)>.01/nF*this.binSize*(y+A))continue;if(hF(_.mean,_.std,_.data.length,E.mean,E.std,E.data.length)>.01/nF*this.binSize*(y+C))continue}if(lF(this.globalMean,_.mean,_.std,_.data.length)>.05)continue;let e=o.slice(b[0],b[1]);var N=new cF(e);r.fill(!0,b[0],b[1]),s.fill(N.mean,b[0],b[1])}})),n[o]=s}return n}cnvCalling(e){var t=.25*this.globalMean,i=this.globalMean-t,n=this.globalMean+t,r=2971e6,s={},o=[];return Object.entries(e).forEach((([a,c])=>{for(var l=!1;!l;){l=!0;var h=new Array(1).fill(0);for(let e=0;e<c.length-1;e++){Math.abs(c[e+1]-c[e])>.01&&h.push(e+1)}h.push(c.length);for(let i=0;i<h.length-2;i++){var d=Math.abs(c[h[i]]-c[h[i+1]]);if(d<t){var u=d+1,f=d+1;if(i>0&&(u=Math.abs(c[h[i]]-c[h[i-1]])),i<h.length-3&&(f=Math.abs(e[h[i+1]]-c[h[i+2]])),d<u&&d<f){l=!1;var p=new cF(c.slice(h[i],h[i+2]));c.fill(p.mean,h[i],h[i+2]),h.splice(i+1,i+1)}}}}var g=[];Object.entries(this.wigFeatures[a]).forEach((([e,t])=>{g.push(t.binScore)}));for(var m,w=new Array(c.length).fill(""),b=0,F=.05*this.binSize/r;b<c.length;){for(var v=b,y=b;b<c.length&c[b]<i;)b+=1;if((C=b)>y+1){var A=aF(this.globalMean,this.std,g,y,C,F);if(A){var C=A;w.fill("D",y,C)}}for(y=b;b<c.length&c[b]>n;)b+=1;(C=b)>y+1&&(A=aF(this.globalMean,this.std,g,y,C,F))&&(C=A,w.fill("A",y,C)),b==v&&(b+=1)}for(b=0;b<c.length;){for(;b<c.length&""!=w[b];)b+=1;for(y=b;b<c.length&c[b]<i;)b+=1;(C=b)>y+1&&(oF(this.globalMean,this.std,g,y,C)<1682935038707506e-26&&w.fill(["d"]*(C-y),y,C),b-=1),b+=1}(b=0)<c.length&&(m=w[b]),y=0;for(var _=[...g];b<c.length;){for(;w[b]==m&&!((b+=1)>=w.length););if(b>y){var x=new cF(_.slice(y,b));_.fill(x.mean,y,b)}b<c.length&&(m=w[b]),y=b}for(s[a]=_,b=0;b<c.length;){if(""==(m=w[b])){b+=1;continue}for(y=b;b<c.length&m==w[b];)b+=1;let e,t=new cF(_.slice(y,b)).mean/this.globalMean;e="D"==m?"deletion":"duplication";let i={chr:a,start:this.binSize*y+1,end:this.binSize*b,size:this.binSize*(b-y+1),value:2*t,event_type:e};o.push(i)}})),[s,o]}}};class uF{constructor(e,t,i){this.allVariants=e,this.rowBinSize=1e4,this.binSize=t,this.binFactor=parseInt(t/this.rowBinSize),this.refGenome=i}async read_rd_baf(e="ReadDepth"){var t={};for(let e=this.allVariants.length-1;e>=0;e--){var i;let n=this.allVariants[e];this.allVariants.splice(e,1);let r=n.chr;i=Math.max(Math.floor(n.start/this.rowBinSize),0),t[r]||(t[r]=[]),t[r][i]||(t[r][i]={chr:r,start:i*this.rowBinSize,end:(i+1)*this.rowBinSize,dp_sum_score:0,dp_count:0,hets_count:0,hets:[]});const s=Object.values(n.calls);if(1!==s.length)throw Error(`Unexpected number of genotypes: ${s.length}. CNVPytor expects 1 and only 1 genotype`);const o=s[0],a=o.info.DP;a&&(t[r][i].dp_sum_score+=Number.parseInt(a),t[r][i].dp_count++);let c=o.info.AD.split(","),l=o.genotype;if(0==l[0]&&1==l[1]||1==l[0]&&0==l[1]){t[r][i].hets_count++;let e=parseInt(c[0]),n=parseInt(c[1]);t[r][i].hets.push({ref:e,alt:n})}}this.chromosomes=Object.keys(t);let n="ReadDepth"==e;var r,s=this.adjust_bin_size(t,n);if("ReadDepth"==e){let e=new dF.MeanShiftCaller(s,this.binSize,this.refGenome),t=await e.callMeanshift();r=[t.binScore,t.gcCorrectedBinScore,t.segmentsCNV];var o=e.formatDataStructure_BAF("max_likelihood",-1)}else if("2D"==e){let e=new iF.CombinedCaller(s,this.binSize,this.refGenome),t=await e.call_2d();r=[t.binScore,t.gcCorrectedBinScore,t.segmentScore];o=e.formatDataStructure_BAF("max_likelihood",-1)}return[r,o]}format_BAF_likelihood(e){const t=[];for(const[n,r]of Object.entries(e))for(let e of r){var i={...e};.5!=e.value&&(i.value=1-e.value,t.push(i))}return t}get_max_min_score(e){if(e.likelihood_score.length>0){const t=Math.max(...e.likelihood_score),i=e.likelihood_score.indexOf(t);e.value=Math.max(i/100,1-i/100),e.min_score=Math.min(i/100,1-i/100)}else e.score=0;return e}adjust_bin_size(e,t=!1){var i={};const n=this.binSize/150;for(let o of this.chromosomes){i[o]||(i[o]=[]);for(let a=0;a<e[o].length/this.binFactor;a++){const c=a;i[o][a]||(i[o][a]={chr:o,start:c*this.binSize,end:(c+1)*this.binSize,dp_count:0,hets_count:0,binScore:null,likelihood_score:[],dp_sum_score:0});for(var r=a*this.binFactor;r<this.binFactor*a+this.binFactor;r++)if(e[o][r]&&(i[o][a].dp_sum_score+=e[o][r].dp_sum_score,i[o][a].dp_count+=e[o][r].dp_count,i[o][a].hets_count+=e[o][r].hets_count,0!=e[o][r].hets.length))for(let t of e[o][r].hets)if(0==i[o][a].likelihood_score.length)i[o][a].likelihood_score=Bw.linspace(0,1,100).map(((e,i)=>fF(t.ref,t.alt,e)));else{var s=0;i[o][a].likelihood_score=Bw.linspace(0,1,100).map(((e,n)=>{var r=i[o][a].likelihood_score[n]*fF(t.ref,t.alt,e);return s+=r,r})),i[o][a].likelihood_score=Bw.linspace(0,1,100).map(((e,t)=>i[o][a].likelihood_score[t]/s))}i[o][a].dp_count>0&&(i[o][a].binScore=i[o][a].dp_sum_score/i[o][a].dp_count*n);const l=this.get_max_min_score(i[o][a]);i[o][a].max_likelihood=l.value,t&&delete i[o][a].likelihood_score}}return i}}function fF(e,t,i,n=!0){return Math.pow(i,e)*Math.pow(1-i,t)+Math.pow(i,t)*Math.pow(1-i,e)}class pF extends Pa{static DEFAULT_TRACK_HEIGHT=250;constructor(e,t){super(e,t)}init(e){this.featureType="numeric",this.type="cnvpytor",e.max||(this.defaultScale=!0,this.autoscale=!1),e.height||(e.height=pF.DEFAULT_TRACK_HEIGHT),this.type="cnvpytor",this.graphType=e.graphType||"points",this.bin_size=e.bin_size||1e5,this.signal_name=e.signal_name||"rd_snp",this.cnv_caller=e.cnv_caller||"2D",this.colors=e.colors||["gray","black","green","blue"],this.hasChroms={},super.init(e)}get supportsWholeGenome(){return!0}get_signals(){let e=[];return"rd_snp"==this.signal_name?e=["RD_Raw","RD_Raw_gc_coor",this.cnv_caller,"BAF1","BAF2"]:"rd"==this.signal_name?e=["RD_Raw","RD_Raw_gc_coor",this.cnv_caller]:"snp"==this.signal_name?e=["BAF1","BAF2"]:"cnh"==this.signal_name&&(e=[this.cnv_caller]),e}get_signal_colors(){return[{singal_name:"RD_Raw",color:this.colors[0]},{singal_name:"RD_Raw_gc_coor",color:this.colors[1]},{singal_name:"ReadDepth",color:this.colors[2]},{singal_name:"2D",color:this.colors[2]},{singal_name:"BAF1",color:this.colors[3]},{singal_name:"BAF2",color:this.colors[3]}]}async postInit(){if("vcf"==this.config.format){let e;this.featureSource?e=Object.values(this.featureSource.getAllFeatures()).flat():(this.featureSource=this.featureSource||Hl(this.config,this.browser.genome),this.header=await this.getHeader(),e=this.featureSource.reader.features);const t=this.browser.config.genome,i=new uF(e,this.bin_size,t);let n,r,s;this.wigFeatures_obj={},this.wigFeatures_obj[this.bin_size]={},"2D"==this.cnv_caller?(s=await i.read_rd_baf("2D"),n=s[0],r=s[1],this.wigFeatures_obj[this.bin_size]["2D"]=n[2],this.available_callers=["2D"]):(s=await i.read_rd_baf(),n=s[0],r=s[1],this.wigFeatures_obj[this.bin_size].ReadDepth=n[2],this.available_callers=["ReadDepth"]),this.wigFeatures_obj[this.bin_size].RD_Raw=n[0],this.wigFeatures_obj[this.bin_size].RD_Raw_gc_coor=n[1],this.wigFeatures_obj[this.bin_size].BAF1=r[0],this.wigFeatures_obj[this.bin_size].BAF2=r[1],this.available_bins=[this.bin_size],this.set_available_callers()}else{this.cnvpytor_obj=new Ew(this.config.url,this.bin_size);let e=[...new Set(this.browser.referenceFrameList.map((e=>e.chr)))],t=this.getAliasChromsList(e);this.wigFeatures_obj=await this.cnvpytor_obj.get_rd_signal(this.bin_size,t),this.update_hasChroms(this.wigFeatures_obj,e),this.available_bins=this.cnvpytor_obj.availableBins,this.available_bins.includes(this.bin_size)||(this.bin_size=this.available_bins.at(-1)),this.available_callers=this.cnvpytor_obj.callers,this.set_available_callers()}this.tracks=[];const e=[];this.signals=this.get_signals(),this.signal_colors=this.get_signal_colors();for(let t in this.wigFeatures_obj)for(const[i,n]of Object.entries(this.wigFeatures_obj[t]))if(this.signals.includes(i)){let t={type:"wig",isMergedTrack:!0};t.features=n,t.name=i,t.color=this.signal_colors.filter((e=>e.singal_name===i)).map((e=>e.color));const r=await this.browser.createTrack(t);r?(r.autoscale=!1,this.tracks.push(r)):console.warn("Could not create track "+t),"function"==typeof r.postInit&&e.push(r.postInit())}this.flipAxis=!!this.config.flipAxis&&this.config.flipAxis,this.logScale=!!this.config.logScale&&this.config.logScale,this.autoscale=this.config.autoscale,this.autoscale||(this.dataRange={min:this.config.min||0,max:this.config.max});for(let e of this.tracks)e.autoscale=!1,e.dataRange=this.dataRange;return Promise.all(e)}getAliasChromsList(e){let t=e.map((e=>{let t=this.browser.genome.chromAlias.aliasRecordCache.get(e);return Object.values(t)}));return t=t.flat(),t}set_available_callers(){this.available_callers.includes(this.cnv_caller)||(this.available_callers.length>0?this.cnv_caller=this.available_callers[0]:this.cnv_caller=null)}async getHeader(){if(!this.header){if("function"==typeof this.featureSource.getHeader){const e=await this.featureSource.getHeader();e&&(this.callSets=e.callSets||[]),this.header=e}this.sampleKeys=this.callSets?this.callSets.map((e=>e.sample)):[],this.sampleNames=this.sampleKeys}return this.header}get height(){return this._height}set height(e){if(this._height=e,this.tracks)for(let t of this.tracks)t.height=e,t.config.height=e}menuItemList(){let e=[];void 0!==this.flipAxis&&e.push({label:"Flip y-axis",click:function(){this.flipAxis=!this.flipAxis,this.trackView.repaintViews()}}),e=e.concat(this.numericDataMenuItems()),e.push("<hr/>"),e.push("Bin Sizes");for(let t of this.available_bins)e.push({element:Ta(t,t===this.bin_size),click:async function(){this.bin_size=t,this.trackView.startSpinner(),await this.recreate_tracks(t),this.clearCachedFeatures(),this.trackView.updateViews(),this.trackView.repaintViews()}});e.push("<hr/>"),e.push("Signal Type");let t={rd_snp:"RD and BAF Likelihood",rd:"RD Signal",snp:"BAF Likelihood"};for(let i in t)e.push({element:Ta(t[i],i===this.signal_name),click:async function(){this.signal_name=i,await this.recreate_tracks(this.bin_size),this.clearCachedFeatures(),this.trackView.updateViews(),this.trackView.repaintViews()}});e.push("<hr/>"),e.push("CNV caller");for(let t of this.available_callers)e.push({element:Ta(t,t===this.cnv_caller),click:async function(){this.cnv_caller=t,this.trackView.startSpinner(),await this.recreate_tracks(this.bin_size),this.clearCachedFeatures(),this.trackView.updateViews(),this.trackView.repaintViews()}});if(this.variantState){e.push("<hr/>");for(let t of this.available_callers)e.push({label:"Convert to variant track",click:()=>{this.convertToVariant()}})}return e}async recreate_tracks(e){this.tracks=[];const t=[];if(!(e in this.wigFeatures_obj))if(Object.keys(this.hasChroms).length>0){let t=[...new Set(this.browser.referenceFrameList.map((e=>e.chr)))];"all"==t[0]&&(t=this.browser.genome.chromosomeNames),this.wigFeatures_obj={...this.wigFeatures_obj,...await this.cnvpytor_obj.get_rd_signal(e,t)},this.update_hasChroms(this.wigFeatures_obj,t)}else this.wigFeatures_obj={...this.wigFeatures_obj,...await this.cnvpytor_obj.get_rd_signal(e)};this.signals=this.get_signals(),this.signal_colors=this.get_signal_colors();for(const[i,n]of Object.entries(this.wigFeatures_obj[e]))if(this.signals.includes(i)){let e={type:"wig",isMergedTrack:!0};e.features=n,e.name=i,e.color=this.signal_colors.filter((e=>e.singal_name===i)).map((e=>e.color));const r=await this.browser.createTrack(e);r?(r.autoscale=!1,this.tracks.push(r)):console.warn("Could not create track "+e),"function"==typeof r.postInit&&t.push(r.postInit())}this.flipAxis=!!this.config.flipAxis&&this.config.flipAxis,this.logScale=!!this.config.logScale&&this.config.logScale,this.autoscale=this.config.autoscale,this.autoscale||(this.dataRange={min:this.config.min||0,max:this.config.max});for(let e of this.tracks)e.autoscale=!1,e.dataRange=this.dataRange;return Promise.all(t)}update_hasChroms(e,t){for(let i in e)this.hasChroms[i]||(this.hasChroms[i]=new Set),t.forEach((e=>this.hasChroms[i].add(e)));return this.hasChroms}async getFeatures(e,t,i,n){if(Object.keys(this.hasChroms).length>0&&0!=this.hasChroms[this.bin_size].size){let e=[...new Set(this.browser.referenceFrameList.map((e=>e.chr)))];"all"==e[0]&&(e=this.browser.genome.chromosomeNames);let t=e.filter((e=>!this.hasChroms[this.bin_size].has(e)));if(0!=t.length){let e=this.getAliasChromsList(t),i=await this.cnvpytor_obj.get_rd_signal(this.bin_size,e);this.update_hasChroms(i,t);for(let e in i)for(const[t,n]of Object.entries(i[e]))await this.wigFeatures_obj[e][t].push(...n);for(let e of this.tracks)await e.featureSource.updateFeatures(this.wigFeatures_obj[this.bin_size][e.name])}}if(this.tracks){const r=this.tracks.map((r=>r.getFeatures(e,t,i,n)));return Promise.all(r)}}getScaleFactor(e,t,i,n){return n?i/(Math.log10(t+1)-(e<=0?0:Math.log10(e+1))):i/(t-e)}computeYPixelValue(e,t){return(this.flipAxis?e-this.dataRange.min:this.dataRange.max-e)*t}computeYPixelValueInLogScale(e,t){let i=this.dataRange.max,n=this.dataRange.min;return i<=0?0:(n<=-1&&(n=0),n=n<=0?0:Math.log10(n+1),i=Math.log10(i+1),e=Math.log10(e+1),(this.flipAxis?e-n:i-e)*t)}draw(e){const t=e.features;if(!t)return;if(this.defaultScale&&("rd_snp"==this.signal_name?this.dataRange={min:this.config.min||this.dataRange.min||-1,max:this.config.max||this.dataRange.max||5}:"rd"==this.signal_name?this.dataRange={min:this.config.min||this.dataRange.min||0,max:this.config.max||this.dataRange.max||5}:"snp"==this.signal_name&&(this.dataRange={min:this.config.min||this.dataRange.min||-1,max:this.config.max||this.dataRange.max||0})),this.autoscale&&(this.dataRange=function(e,t){let i=0,n=-Number.MAX_VALUE;for(let e of t)for(let t of e)void 0===t.value||Number.isNaN(t.value)||(i=Math.min(i,t.value),n=Math.max(n,t.value));return{min:i,max:n}}(e.referenceFrame.chr,t)),this.tracks)for(let i=0,n=this.tracks.length;i<n;i++){const n=Object.assign({},e);n.features=t[i],this.tracks[i].dataRange=this.dataRange,this.tracks[i].flipAxis=this.flipAxis,this.tracks[i].logScale=this.logScale,this.graphType&&(this.tracks[i].graphType=this.graphType),this.tracks[i].draw(n)}const i=this.getScaleFactor(this.dataRange.min,this.dataRange.max,e.pixelHeight,this.logScale),n=e=>this.logScale?this.computeYPixelValueInLogScale(e,i):this.computeYPixelValue(e,i);if(this.config.hasOwnProperty("guideLines"))for(let t of this.config.guideLines)if(t.hasOwnProperty("color")&&t.hasOwnProperty("y")&&t.hasOwnProperty("dotted")){let i=n(t.y),r={strokeStyle:t.color,strokeWidth:1};t.dotted?fr.dashedLine(e.context,0,i,e.pixelWidth,i,5,r):fr.strokeLine(e.context,0,i,e.pixelWidth,i,r)}let r=n(2);fr.dashedLine(e.context,0,r,e.pixelWidth,r,5,{strokeStyle:"lightgray",strokeWidth:.5})}paintAxis(e,t,i){var n,r,s,o,a,c,l,h={font:"normal 10px Arial",textAlign:"right",strokeStyle:"black"};if(void 0===this.dataRange||void 0===this.dataRange.max||void 0===this.dataRange.min)return;let d=void 0!==this.flipAxis&&this.flipAxis;function u(e){return e<0?Math.abs(e):0===e?"0":Math.abs(e)>=10||e%1==0?e.toFixed():Math.abs(e)>=1?e.toFixed(1):e.toFixed(2)}fr.fillRect(e,0,0,t,i,{fillStyle:"rgb(255, 255, 255)"}),n=(l=.95*t)-8,a={x:r=l,y:s=o=.01*i},fr.strokeLine(e,n,s,r,o,h),fr.fillText(e,u(d?this.dataRange.min:this.dataRange.max),n+4,s+12,h),c={x:r,y:s=o=.99*i},fr.strokeLine(e,n,s,r,o,h),fr.fillText(e,u(d?this.dataRange.max:this.dataRange.min),n+4,s-4,h),fr.strokeLine(e,a.x,a.y,c.x,c.y,h);const f=this.getScaleFactor(this.dataRange.min,this.dataRange.max,i,this.logScale),p=e=>this.logScale?this.computeYPixelValueInLogScale(e,f):this.computeYPixelValue(e,f),g=Math.ceil((this.dataRange.max-this.dataRange.min)/10);for(let t=Math.ceil(this.dataRange.min+1);t<Math.round(this.dataRange.max-.4);t+=g){const i=p(t);fr.strokeLine(e,45,i,50,i,h),fr.fillText(e,u(d?this.dataRange.max-t:t),44,i+4,h)}}popupData(e,t){const i=t||e.viewport.cachedFeatures;if(i&&i.length===this.tracks.length){const t=[];for(let n=0;n<this.tracks.length;n++){n>0&&t.push("<hr/>"),t.push(`<div style=background-color:rgb(245,245,245);border-bottom-style:dashed;border-bottom-width:1px;padding-bottom:5px;padding-top:10px;font-weight:bold;font-size:larger >${this.tracks[n].name}</div>`);const r=this.tracks[n].popupData(e,i[n]);t.push(...r)}return t}}async convertToVariant(){this.variantState&&(Object.setPrototypeOf(this,wF.prototype),this.init(this.variantState),await this.postInit(),this.trackView.clearCachedFeatures(),this.variantState.trackHeight&&this.trackView.setTrackHeight(this.variantState.trackHeight),this.trackView.checkContentHeight(),this.trackView.updateViews(),delete this.variantState)}}const gF=b,mF=10;class wF extends Pa{static defaultColor="rgb(0,0,150)";static defaults={displayMode:"EXPANDED",sortDirection:"ASC",showGenotypes:!0,expandedVariantHeight:10,squishedVariantHeight:2,squishedCallHeight:1,expandedCallHeight:10,expandedVGap:2,squishedVGap:1,expandedGroupGap:10,squishedGroupGap:5,featureHeight:14,noGenotypeColor:"rgb(200,180,180)",noCallColor:"rgb(225, 225, 225)",nonRefColor:"rgb(200, 200, 215)",mixedColor:"rgb(200, 220, 200)",homrefColor:"rgb(200, 200, 200)",homvarColor:"rgb(17,248,254)",hetvarColor:"rgb(34,12,253)",refColor:"rgb(0,0,220)",altColor:"rgb(255,0,0)",visibilityWindow:void 0,labelDisplayMode:void 0,type:"variant"};_sortDirections=new Map;constructor(e,t){super(e,t)}init(e){if(super.init(e),e.variantHeight&&(this.expandedVariantHeight=e.variantHeight),this.featureSource=Hl(e,this.browser.genome),this.colorTables=new Map,e.colorTable){const t=e.colorBy||"*";this.colorTables.set(t,new Yn(e.colorTable))}if(this.strokecolor=e.strokecolor,this._context_hook=e.context_hook,e.color&&(this.colorBy=void 0),this.nVariantRows=1,e.samples)for(let t of e.samples)this.sampleKeys=e.samples;e.sort&&(this.initialSort=e.sort),this._colorByItems=new Map([["none","None"]])}async postInit(){if(this.header=await this.getHeader(),this.header.INFO){const e=new Set(Object.keys(this.header.INFO));this.config.colorBy?this.colorBy=this.config.colorBy:!this.config.color&&e.has("AF")&&(this.colorBy="AF"),e.has("AF")&&this._colorByItems.set("AF","Allele frequency"),e.has("VT")&&this._colorByItems.set("VT","Variant Type"),e.has("SVTYPE")&&this._colorByItems.set("SVTYPE","SV Type")}if(this.config.colorBy&&!this._colorByItems.has(this.config.colorBy)&&this._colorByItems.set(this.config.colorBy,this.config.colorBy),!this.disposed){if(this.header&&!this.sampleKeys&&(this.sampleKeys=this.header.sampleNameMap?Array.from(this.header.sampleNameMap.keys()):[]),void 0===this.visibilityWindow&&!1!==this.config.indexed){const e=_(this.config.url)?this.config.url.name:this.config.url;gF(e)&&e.toLowerCase().includes("gnomad")?this.visibilityWindow=1e3:"function"==typeof this.featureSource.defaultVisibilityWindow?this.visibilityWindow=await this.featureSource.defaultVisibilityWindow():this.visibilityWindow=1e6}return this._initialColor=this.color||this.constructor.defaultColor,this._initialAltColor=this.altColor||this.constructor.defaultColor,this}}get supportsWholeGenome(){return!this.config.indexURL||!0===this.config.supportsWholeGenome}get color(){return this._color||wF.defaultColor}set color(e){this._color=e,e&&(this.colorBy=void 0)}async getHeader(){return this.header||"function"==typeof this.featureSource.getHeader&&(this.header=await this.featureSource.getHeader()),this.header}getSampleCount(){return this.sampleKeys?this.sampleKeys.length:0}async getFeatures(e,t,i,n){void 0===this.header&&(this.header=await this.getHeader());const r=await this.featureSource.getFeatures({chr:e,start:t,end:i,bpPerPixel:n,visibilityWindow:this.visibilityWindow});if(this.initialSort){const e=this.initialSort;if(void 0===e.option||"GENOTYPE"===e.option.toUpperCase())this.sortSamplesByGenotype(e,r);else if("ATTRIBUTE"===e.option.toUpperCase()&&e.attribute){const t="ASC"===e.direction?1:-1;this.sortByAttribute(e.attribute,t)}this.initialSort=void 0}return r}hasSamples(){return this.getSampleCount()>0}getSamples(){const e="SQUISHED"===this.displayMode?this.squishedVGap:this.expandedVGap,t="COLLAPSED"===this.displayMode?1:this.nVariantRows,i="SQUISHED"===this.displayMode?this.squishedVariantHeight:this.expandedVariantHeight,n=t*(("SQUISHED"===this.displayMode?this.squishedCallHeight:this.expandedCallHeight)+e),r=mF+t*(i+e);return{names:this.sampleKeys,yOffset:r,height:n}}computePixelHeight(e){if(!e||0===e.length)return mF;const t="COLLAPSED"===this.displayMode?1:this.nVariantRows,i="SQUISHED"===this.displayMode?this.squishedVGap:this.expandedVGap,n="SQUISHED"===this.displayMode?this.squishedVariantHeight:this.expandedVariantHeight,r="SQUISHED"===this.displayMode?this.squishedCallHeight:this.expandedCallHeight,s=!1===this.showGenotypes?0:this.getSampleCount()*t;return mF+t*(n+i)+i+(s+1)*(r+i)}variantRowCount(e){this.nVariantRows=e}draw({context:e,pixelWidth:t,pixelHeight:i,bpPerPixel:n,bpStart:r,pixelTop:s,features:o}){fr.fillRect(e,0,s,t,i,{fillStyle:"rgb(255, 255, 255)"});const a="SQUISHED"===this.displayMode?this.squishedVGap:this.expandedVGap,c="COLLAPSED"===this.displayMode?1:this.nVariantRows,l="SQUISHED"===this.displayMode?this.squishedVariantHeight:this.expandedVariantHeight;this.variantBandHeight=mF+c*(l+a);let h=this.sampleColumns;const d=this.hasSamples();if(h&&d&&!1!==this.showGenotypes&&fr.strokeLine(e,0,this.variantBandHeight,t,this.variantBandHeight,{strokeStyle:"rgb(224,224,224) "}),o){const i="SQUISHED"===this.displayMode?this.squishedCallHeight:this.expandedCallHeight,s="SQUISHED"===this.displayMode?this.squishedVGap:this.expandedVGap,a=r+t*n+1;for(let t of o){if(this._filter&&!this._filter(t))continue;if(t.end<r)continue;if(t.start>a)break;const o="SQUISHED"===this.displayMode?this.squishedVariantHeight:this.expandedVariantHeight,c=mF+("COLLAPSED"===this.displayMode?0:t.row*(o+s)),l=o;let h=(t.start-r)/n,u=(t.end-r)/n,f=Math.max(1,u-h);f<3?(f=3,h-=1):f>5&&(h+=1,f-=2);const p=t._f||t;let g;try{g=p.alleleFreq()}catch(e){console.log(e)}if("AF"===this.colorBy&&g){const t=Math.min(1,g)*l,i=l-t;e.fillStyle=p.isFiltered()?this.refColorFiltered:this.refColor,e.fillRect(h,c,f,i),e.fillStyle=p.isFiltered()?this.altColorFiltered:this.altColor,e.fillRect(h,c+i,f,t)}else e.fillStyle=this.getColorForFeature(p),e.fillRect(h,c,f,l);let m=this.getVariantStrokecolor(p);if(m&&(e.strokeStyle=m,e.strokeRect(h,c,f,l)),this.callContextHook(p,e,h,c,f,l),d&&!1!==this.showGenotypes){const t="COLLAPSED"===this.displayMode?1:this.nVariantRows;this.sampleYOffset=this.variantBandHeight+s,this.sampleHeight=t*(i+s);let n=0;for(let t of this.sampleKeys){const r=this.header.sampleNameMap.get(t),o=p.calls[r];if(o){const t="COLLAPSED"===this.displayMode?0:p.row,r=this.sampleYOffset+n*this.sampleHeight+t*(i+s);let a=!0,c=!0,l=!1;if(o.genotype)for(let e of o.genotype){if("."===e){l=!0;break}0!==e&&(c=!1),0===e&&(a=!1)}o.genotype?e.fillStyle=l?this.noCallColor:c?this.homrefColor:a?this.homvarColor:this.hetvarColor:e.fillStyle=this.noGenotypeColor,e.fillRect(h,r,f,i)}n++}}}}else console.log("No feature list")}get refColorFiltered(){return this._refColorFiltered||(this._refColorFiltered=un.addAlpha(this.refColor,.2)),this._refColorFiltered}get altColorFiltered(){return this._altColorFiltered||(this._altColorFiltered=un.addAlpha(this.altColor,.2)),this._altColorFiltered}getColorForFeature(e){const t=e._f||e;let i;if(this.colorBy&&"none"!==this.colorBy){const e=t.getAttributeValue(this.colorBy);i=void 0!==e?this.getVariantColorTable(this.colorBy).getColor(e):"gray"}else i=this.color?"function"==typeof this.color?this.color(e):this.color:"NONVARIANT"===t.type?this.nonRefColor:"MIXED"===t.type?this.mixedColor:this.color;return t.isFiltered()&&(i=un.addAlpha(i,.2)),i}getVariantStrokecolor(e){const t=e._f||e;let i;return i=this.strokecolor?"function"==typeof this.strokecolor?this.strokecolor(t):this.strokecolor:void 0,i}callContextHook(e,t,i,n,r,s){if(this._context_hook&&"function"==typeof this._context_hook){const o=e._f||e;t.save(),this._context_hook(o,t,i,n,r,s),t.restore()}}clickedFeatures(e){let t=super.clickedFeatures(e);const i="EXPANDED"===this.displayMode?this.expandedVGap:this.squishedVGap,n=i+("SQUISHED"===this.displayMode?this.squishedCallHeight:this.expandedCallHeight),r=e.y;if(r<=this.variantBandHeight){const e="SQUISHED"===this.displayMode?this.squishedVariantHeight:this.expandedVariantHeight,n=Math.floor((r-mF)/(e+i));"COLLAPSED"!==this.displayMode&&(t=t.filter((e=>e.row===n)))}else if(this.sampleKeys){const e=r-this.variantBandHeight,i=Math.floor(e/this.sampleHeight);if(i>=0&&i<this.sampleKeys.length){const r=Math.floor((e-i*this.sampleHeight)/n),s="COLLAPSED"===this.displayMode?t:t.filter((e=>e.row===r)),o=this.sampleKeys[i],a=this.header.sampleNameMap.get(o);t=s.map((e=>{const t=e.calls[a];return t.genotypeString=function(e,t){if(e.genotype){let i="";if("."===t.alternateBases)i="No Call";else{const n=t.alternateBases.split(",");for(let r of e.genotype)if(i.length>0&&(i+=" | "),"."===r)i+=".";else if(0===r)i+=t.referenceBases;else{i+=n[r-1].replace("<","<")}}return i}}(t,e),t}))}}return t}popupData(e,t){void 0===t&&(t=this.clickedFeatures(e));const i=e.genomicLocation,n=this.browser.genome.id;let r=[];for(let e of t){const t=e._f||e;if(r.length>0&&r.push({html:'<hr style="border-top-width:2px ;border-color: #c9c3ba" />'}),"function"==typeof t.popupData){const e=t.popupData(i,n);Array.prototype.push.apply(r,e)}}return r}menuItemList(){const t=[];if(this.header.INFO&&this.header.INFO){const i=this._colorByItems;t.push("<hr/>");const n=e('<div class="igv-track-menu-category igv-track-menu-border-top">');n.textContent="Color by:",t.push({name:void 0,element:n,click:void 0,init:void 0});for(let e of i.keys()){const n=this.colorBy===e;t.push(this.colorByCB({key:e,label:i.get(e)},n))}t.push(this.colorByCB({key:"info",label:"Info field..."}))}if(!0===Xd(this.browser.sampleInfo,this.sampleKeys)){t.push("<hr/>"),t.push("Sort by attribute:");for(const e of this.browser.sampleInfo.attributeNames)if(this.sampleKeys.some((t=>{const i=this.browser.sampleInfo.getAttributes(t);return i&&i[e]}))){const i=document.createElement("div");i.innerHTML=` ${e.split(rd.emptySpaceReplacement).join(" ")}`;const n=()=>{const t=this._sortDirections.get(e)||1;this.sortByAttribute(e,t),this.config.sort={option:"ATTRIBUTE",attribute:e,direction:t>0?"ASC":"DESC"},this._sortDirections.set(e,-1*t)};t.push({element:i,click:n})}}t.push("<hr/>"),this.getSampleCount()>0&&(t.push({element:e('<div class="igv-track-menu-border-top">')}),t.push({element:Ta("Show Genotypes",this.showGenotypes),click:function(){this.showGenotypes=!this.showGenotypes,this.trackView.checkContentHeight(),this.trackView.repaintViews(),this.browser.sampleNameControl.performClickWithState(this.browser,this.showGenotypes),this.browser.sampleInfoControl.performClickWithState(this.browser,this.showGenotypes)}})),t.push({element:e('<div class="igv-track-menu-border-top">')});for(let e of["COLLAPSED","SQUISHED","EXPANDED"]){t.push({element:Ta({COLLAPSED:"Collapse",SQUISHED:"Squish",EXPANDED:"Expand"}[e],e===this.displayMode),click:function(){this.displayMode=e,this.trackView.checkContentHeight(),this.trackView.repaintViews()}})}return this.browser.circularView&&(t.push("<hr>"),t.push({label:"Add SVs to circular view",click:function(){for(let e of this.trackView.viewports)this.sendChordsForViewport(e)}})),this.canCovertToPytor()&&(t.push("<hr>"),t.push({label:"Convert to CNVpytor track",click:function(){this.convertToPytor()}})),t}contextMenuItemList(e){const t=[];if(this.hasSamples()&&this.showGenotypes){const i=e.viewport.referenceFrame,n=e.genomicLocation,r=i.toBP(2.5),s=this._sortDirections.get("genotype")||1;this._sortDirections.set("genotype",-1*s),t.push({label:"Sort by genotype",click:t=>{const i={direction:s,option:"genotype",chr:e.viewport.referenceFrame.chr,start:Math.floor(n-r),end:Math.ceil(n+r)},o=e.viewport.cachedFeatures;this.sortSamplesByGenotype(i,o),this.config.sort=i}}),t.push("<hr/>")}if(this.browser.circularView){const i=e.viewport;t.push({label:"Add SVs to Circular View",click:()=>{this.sendChordsForViewport(i)}}),t.push("<hr/>")}return t}async sortSamplesByGenotype({chr:e,position:t,start:i,end:n,direction:r},s){if(void 0===i&&(i=t-1),void 0===n&&(n=t),s||(s=await this.featureSource.getFeatures({chr:e,start:i,end:n})),!s)return;const o=new Map,a="ASC"===r?1:-1;for(let e of s)if(!(e.end<i)){if(e.start>n)break;for(let t of e.calls){const e=t.sample,i=t.zygosityScore();o.set(e,o.has(e)?o.get(e)+i:i)}}this.sampleKeys.sort((function(e,t){let i=o.get(e)||0,n=o.get(t)||0;return a*(i-n)})),this.trackView.repaintViews()}sortByAttribute(e,t){this.config.sort={option:"ATTRIBUTE",attribute:e,direction:1===t?"ASC":"DESC"},this.sampleKeys=this.browser.sampleInfo.getSortedSampleKeysByAttribute(this.sampleKeys,e,t),this.trackView.repaintViews()}sendChordsForViewport(e){const t=e.referenceFrame;let i;if("all"===t.chr){const e=this.featureSource.getAllFeatures(),t=Object.keys(e).map((t=>e[t]));i=[].concat(...t)}else i=this.featureSource.featureCache.queryFeatures(t.chr,t.start,t.end);Kf(i.filter((e=>{const t=e._f||e;return t.info&&t.info.CHR2&&t.info.END&&(t.info.CHR2!==t.chr||Math.abs(Number.parseInt(t.info.END)-t.pos)>1e6)})).map((e=>{const t=e._f||e,i=Number.parseInt(t.info.END),n=i-100,r=i+100;return{uniqueId:`${t.chr}:${t.start}-${t.end}_${t.info.CHR2}:${t.info.END}`,refName:Wf(t.chr),start:t.start,end:t.end,mate:{refName:Wf(t.info.CHR2),start:n,end:r}}})),this,t,.5)}colorByCB(e,t){const i=Ta(e.label,t);if("info"!==e.key){function n(){const t="none"===e.key?void 0:e.key;this.colorBy=t,this.config.colorBy=t,this.trackView.repaintViews()}return{name:void 0,element:i,click:n,init:void 0}}{function r(e){this.browser.inputDialog.present({label:"Info field",value:"",callback:e=>{e?(this.colorBy=e,this._colorByItems.set(e,e)):this.colorBy=void 0,this.trackView.repaintViews()}},e)}return{name:void 0,element:i,dialog:r,init:void 0}}}getState(){const e=super.getState();return this.color&&"function"!=typeof this.color&&(e.color=this.color),e}getVariantColorTable(e){if(this.colorTables.has(e))return this.colorTables.get(e);if(this.colorTables.has("*"))return this.colorTables.get("*");{let t;if("SVTYPE"===e)t=bF;else t=new Kn("Set1");return this.colorTables.set(e,t),t}}paintAxis(){}canCovertToPytor(){return!this.config.indexURL&&(!!this.header&&(1===Object.keys(this.sampleKeys).length&&this.header.FORMAT&&this.header.FORMAT.AD&&this.header.FORMAT.DP))}async convertToPytor(){this.variantState={...this.config,...this.getState()},this.variantState.trackHeight=this.height,this.trackView.startSpinner(),setTimeout((async()=>{try{const e=Object.assign({},this.config);Object.setPrototypeOf(this,pF.prototype),this.init(e),await this.postInit(),this.trackView.clearCachedFeatures(),this.trackView.setTrackHeight(this.config.height||pF.DEFAULT_TRACK_HEIGHT),this.trackView.checkContentHeight(),this.trackView.updateViews()}finally{this.trackView.stopSpinner()}}),100)}getFilterableAttributes(){return this.header.INFO}_repackCachedFeatures(){for(let e of this.trackView.viewports)if(e.cachedFeatures){const t=this.config.maxRows||Number.MAX_SAFE_INTEGER;Ha(e.cachedFeatures,t,this._filter)}}}const bF=new Yn({DEL:"#ff2101",INS:"#001888",DUP:"#028401",INV:"#008688",CNV:"#8931ff",BND:"#891100","*":"#002eff"}),FF={timeout:5e3,type:"plain",url:"https://igv.org/genomes/locus.php?genome=$GENOME$&name=$FEATURE$",coords:0};async function vF(e,t){const i=e.searchConfig||FF;let n;t=t.toUpperCase();const r=e.tracks.filter((e=>e.searchable));for(let e of r){const i=await e.search(t);if(i)return i}if(e.config&&!1!==e.config.search)try{return n=await async function(e,t,i){let n=i.url.replace("$FEATURE$",t.toUpperCase());n.indexOf("$GENOME$")>-1&&(n=n.replace("$GENOME$",e.genome.id?e.genome.id:"hg19"));const r=i.timeout?{timeout:i.timeout}:void 0,s=await Mn.loadString(n,r);return function(e,t,i){let n;n="plain"===i.type?function(e,t){const i=[],n=v(t);for(let t of n){const n=t.split("\t");if(n.length>=3){const t=n[1].split(":"),r=t[1].split("-");i.push({chromosome:e.genome.getChromosomeName(t[0].trim()),start:parseInt(r[0].replace(/,/g,"")),end:parseInt(r[1].replace(/,/g,"")),name:n[0].toUpperCase()})}}return i}(e,t):JSON.parse(t);i.resultsField&&(n=n[i.resultsField]);if(n&&0!==n.length){const e=i.chromosomeField||"chromosome",t=i.startField||"start",r=i.endField||"end",s=i.coords||1;let o;o=Array.isArray(n)?n[0]:n,o.hasOwnProperty(e)&&o.hasOwnProperty(t)||console.error("Search service results must include chromosome and start fields: "+o);const a=o[e];let c=o[t]-s,l=o[r];void 0===l&&(l=c+1);const h={chr:a,start:c,end:l};if(!o.type||o.type,i.geneField&&i.snpField){const e=o[i.geneField]||o[i.snpField];e&&(h.name=e.toUpperCase())}return h}return}(e,s,i)}(e,t,i),n}catch(e){console.log("Search service not available "+e)}}function yF(e,t=!1){const i=e.split("\t");if(i.length>2)try{const e=i[0],t=parseInt(i[1].replace(/,/g,""),10)-1,n=parseInt(i[2].replace(/,/g,""),10);if(!isNaN(t)&&!isNaN(n))return{chr:e,start:t,end:n}}catch(e){}const n=e.split(":"),r={chr:n[0]};if(n.length>1){let e,i=n[1].split("-");if(i.length>2){if(!n[1].startsWith("-"))return;{const e=n[1].indexOf("-",1);if(e>0){i=[n[1].substring(0,e),n[1].substring(e+1)]}}}if(e=i[0].replace(/,/g,""),isNaN(e))return;if(r.start=parseInt(e,10)-1,r.end=r.start+1,1===i.length&&(r.start-=20,r.end+=20),2===i.length){if(e=i[1].replace(/,/g,""),isNaN(e))return;if(r.end=parseInt(e,10),r.start<0&&!t){const e=-extent.start;r.start+=e,r.end+=e}}}return r}class AF extends Pa{constructor(e,t){super(e,t)}init(e){super.init(e),this.type="qtl",this.name=e.name;const t=e.minLogP||e.min,i=e.maxLogP||e.max;this.dataRange={min:void 0!==t?t:3.5,max:i||25},this.autoscale=!i||e.autoscale,this.autoscalePercentile=void 0===e.autoscalePercentile?98:e.autoscalePercentile,this.background=e.background,this.divider=e.divider||"rgb(225,225,225)",this.dotSize=e.dotSize||2,this.height=e.height||100,this.disableButtons=e.disableButtons,this.featureSource=Hl(e,this.browser.genome)}paintAxis(e,t,i){const n=(this.dataRange.max-this.dataRange.min)/i,r={font:"normal 10px Arial",textAlign:"right",strokeStyle:"black"};fr.fillRect(e,0,0,t,i,{fillStyle:"rgb(255, 255, 255)"});const s=Math.ceil(10*(this.dataRange.max-this.dataRange.min)/i);for(let o=4;o<=this.dataRange.max;o+=s){const s=.85*t,a=s-5,c=s,l=i-(o-this.dataRange.min)/n;fr.strokeLine(e,a,l,c,l,r),l>8&&fr.fillText(e,o,a-1,l+2,r)}r.textAlign="center",fr.fillText(e,"-log10(pvalue)",t/4,i/2,r,{rotate:{angle:-90}})}async getFeatures(e,t,i){const n=this.visibilityWindow;return await this.featureSource.getFeatures({chr:e,start:t,end:i,visibilityWindow:n})}draw(e){const{context:t,referenceFrame:i,pixelWidth:n,pixelHeight:r}=e;this.background&&fr.fillRect(t,0,0,n,r,{fillStyle:this.background}),fr.strokeLine(t,0,r-1,n,r-1,{strokeStyle:this.divider}),i.feature&&i.feature.match(/RS[0-9]+/);const s=i=>{const s=i?2*this.dotSize:this.dotSize,o=e.bpStart,a=(this.dataRange.max-this.dataRange.min)/r;for(let d of e.features){const u=(d.start-o+.5)/e.bpPerPixel;if(u<0)continue;if(u>n)break;const f=d.phenotype;let p;if(this.browser.qtlSelections.qtl?(l=this.browser.qtlSelections.qtl,h=d,p=l.chr===h.chr&&l.start===h.start&&l.pValue===h.pValue):p=this.browser.qtlSelections.snps.size>0?this.browser.qtlSelections.hasSnp(d.snp)&&this.browser.qtlSelections.hasPhenotype(f):this.browser.qtlSelections.hasPhenotype(f),!i||p){var c=-Math.log(d.pValue)/Math.LN10;if(c>=this.dataRange.min){let e;c>this.dataRange.max?(c=this.dataRange.max,e=!0):e=!1;const n=Math.max(0+s,r-Math.round((c-this.dataRange.min)/a));let o;d.px=u,d.py=n,d.radius=s,i&&p?(o=this.browser.qtlSelections.colorForGene(f),fr.setProperties(t,{fillStyle:o,strokeStyle:"black"})):(o=e?"rgb(150, 150, 150)":"rgb(180, 180, 180)",fr.setProperties(t,{fillStyle:o,strokeStyle:o})),fr.fillCircle(t,u,n,s),fr.strokeCircle(t,u,n,s)}}}var l,h};s(!1),s(!0)}popupData(e,t){if(void 0===t&&(t=e.viewport.cachedFeatures),!t||0===t.length)return[];const i=this.name,n=[];for(let r of this._clickedFeatures(e,t))n.length>0&&n.push("<hr/>"),"function"==typeof r.popupData?n.push(...r.popupData(e)):n.push({name:"snp id",value:r.snp},{name:"gene id",value:r.gencodeId},{name:"gene name",value:r.geneSymbol},{name:"p value",value:r.pValue},{name:"tissue",value:i});return n}_clickedFeatures(e,t){const i=(e,t)=>Math.sqrt((e.px-t.canvasX)*(e.px-t.canvasX)+(e.py-t.canvasY)*(e.py-t.canvasY)),n=t.filter((t=>i(t,e)<6));if(n.length>1){n.sort(((t,n)=>i(t,e)-i(n,e)));const t=i(n[0],e);return n.filter((n=>i(n,e)<=t))}return n}contextMenuItemList(e){const t=[],i=e.viewport.cachedFeatures;if(i){const n=this._clickedFeatures(e,i);n.length>0&&(t.push({label:"Highlight associated features",click:async()=>{this.browser.qtlSelections.clear();for(let e of n)this.browser.qtlSelections.qtl=e,this.browser.qtlSelections.addPhenotype(e.phenotype);this.browser.repaintViews()}}),t.push("<hr>"))}return t}menuItemList(){const e=[];return e.push(...this.numericDataMenuItems()),e.push("<hr/>"),e.push({label:"Search for...",dialog:function(e){this.browser.inputDialog.present({label:"Search for snp or phenotype",value:"",callback:async e=>{if(e){e=e.trim().toUpperCase();const t=t=>((t.phenotype&&t.phenotype.toUpperCase())===e||t.snp&&t.snp.toUpperCase()===e)&&-Math.log(t.pValue)/Math.LN10>this.dataRange.min;let i,n,r,s=await this.featureSource.findFeatures(t);if(0==s.length){await this.browser.search(e)&&(s=await this.featureSource.findFeatures(t))}if(s.length>0){this.browser.qtlSelections.clear();const t=new Set;i=s[0].chr,n=s[0].start,r=s[0].end;for(let o of s)o.snp&&o.snp.toUpperCase()===e&&this.browser.qtlSelections.addSnp(o.snp),this.browser.qtlSelections.addPhenotype(o.phenotype),t.add(o.phenotype),o.chr===i&&(n=Math.min(n,o.start),r=Math.max(r,o.end));const o=this.browser.genome.getChromosomeName(i);for(let e of t){const t=await vF(this.browser,e);t&&o===this.browser.genome.getChromosomeName(t.chr)&&(n=Math.min(n,t.start),r=Math.max(r,t.end))}const a=Math.floor(.1*(r-n));n=Math.max(0,n-a),r+=a,await this.browser.search(`${i}:${n}-${r}`)}}}},e)}}),e}doAutoscale(e){let t=this.config.max||25;if(e.length>0){const i=e.map((e=>-Math.log(e.pValue)/Math.LN10));i.sort(((e,t)=>e-t));t=i[Math.floor(i.length*(this.autoscalePercentile/100))]}return this.dataRange.max=Math.max(t,10),this.dataRange}}const CF={X:"rgb(204, 153, 0)",Y:"rgb(153, 204, 0)",Un:"darkGray)",1:"rgb(80, 80, 255)",2:"rgb(206, 61, 50)","2a":"rgb(210, 65, 55)","2b":"rgb(215, 70, 60)",3:"rgb(116, 155, 88)",4:"rgb(240, 230, 133)",5:"rgb(70, 105, 131)",6:"rgb(186, 99, 56)",7:"rgb(93, 177, 221)",8:"rgb(128, 34, 104)",9:"rgb(107, 215, 107)",10:"rgb(213, 149, 167)",11:"rgb(146, 72, 34)",12:"rgb(131, 123, 141)",13:"rgb(199, 81, 39)",14:"rgb(213, 143, 92)",15:"rgb(122, 101, 165)",16:"rgb(228, 175, 105)",17:"rgb(59, 27, 83)",18:"rgb(205, 222, 183)",19:"rgb(97, 42, 121)",20:"rgb(174, 31, 99)",21:"rgb(231, 199, 111)",22:"rgb(90, 101, 94)",23:"rgb(204, 153, 0)",24:"rgb(153, 204, 0)",25:"rgb(51, 204, 0)",26:"rgb(0, 204, 51)",27:"rgb(0, 204, 153)",28:"rgb(0, 153, 204)",29:"rgb(10, 71, 255)",30:"rgb(71, 117, 255)",31:"rgb(255, 194, 10)",32:"rgb(255, 209, 71)",33:"rgb(153, 0, 51)",34:"rgb(153, 26, 0)",35:"rgb(153, 102, 0)",36:"rgb(128, 153, 0)",37:"rgb(51, 153, 0)",38:"rgb(0, 153, 26)",39:"rgb(0, 153, 102)",40:"rgb(0, 128, 153)",41:"rgb(0, 51, 153)",42:"rgb(26, 0, 153)",43:"rgb(102, 0, 153)",44:"rgb(153, 0, 128)",45:"rgb(214, 0, 71)",46:"rgb(255, 20, 99)",47:"rgb(0, 214, 143)",48:"rgb(20, 255, 177)"};for(let iy of Object.keys(CF)){CF["chr"+iy]=CF[iy]}for(let ny=1;ny<=48;ny++){if(10===ny)continue;const ry=_F(ny);CF[ry]=CF[ny.toString()]}function _F(e){if(!+e)return!1;for(var t=String(+e).split(""),i=["","C","CC","CCC","CD","D","DC","DCC","DCCC","CM","","X","XX","XXX","XL","L","LX","LXX","LXXX","XC","","I","II","III","IV","V","VI","VII","VIII","IX"],n="",r=3;r--;)n=(i[+t.pop()+10*r]||"")+n;return Array(+t.join("")+1).join("M")+n}class xF extends Pa{constructor(e,t){super(e,t)}init(e){super.init(e),this.useChrColors=void 0===e.useChrColors||e.useChrColors,this.trait=e.trait,this.posteriorProbability=e.posteriorProbability,this.valueProperty="bed"===e.format?"score":"value",this.height=e.height||100,this.autoscale=e.autoscale,this.autoscalePercentile=void 0===e.autoscalePercentile?98:e.autoscalePercentile,this.background=e.background,this.divider=e.divider||"rgb(225,225,225)",this.dotSize=e.dotSize||3,this.popoverWindow=void 0===e.popoverWindow?1e8:e.popoverWindow,this.useChrColors?this.colorScale=new Yn(e.colorTable||CF):e.color?this.colorScale=new wl(e.color):this.colorScale=new pl(e.colorScale||{thresholds:[5e-8,5e-4,.5],colors:["rgb(255,50,50)","rgb(251,100,100)","rgb(251,170,170)","rgb(227,238,249)"]}),this.featureSource=Hl(e,this.browser.genome)}async postInit(){if("function"!=typeof this.featureSource.getHeader||(this.header=await this.featureSource.getHeader(),!this.disposed))return this.header&&this.setTrackProperties(this.header),this.autoscale||(this.posteriorProbability?this.dataRange={min:void 0===this.config.min?0:this.config.min,max:void 0===this.config.max?1:this.config.max}:this.dataRange={min:void 0===this.config.min?0:this.config.min,max:void 0===this.config.max?25:this.config.max}),this._initialColor=this.color||this.constructor.defaultColor,this._initialAltColor=this.altColor||this.constructor.defaultColor,this}get supportsWholeGenome(){return!0}async getFeatures(e,t,i){const n=this.visibilityWindow;return this.featureSource.getFeatures({chr:e,start:t,end:i,visibilityWindow:n})}draw(e){const t=e.features,i=e.context,n=e.pixelWidth,r=e.pixelHeight;if(this.background&&fr.fillRect(i,0,0,n,r,{fillStyle:this.background}),fr.strokeLine(i,0,r-1,n,r-1,{strokeStyle:this.divider}),t){const s=e.bpPerPixel,o=e.bpStart,a=o+n*s+1;for(let e of t){const t=e.start;if(t<o)continue;if(t>a)break;let n;if(this.posteriorProbability)n=e[this.valueProperty];else{const t=e[this.valueProperty];if(!t)continue;n=-Math.log10(t)}const c=this.useChrColors?e._f?e._f.chr:e.chr:n,l=this.colorScale.getColor(c),h=(this.dataRange.max-this.dataRange.min)/r,d=Math.round((t-o)/s),u=Math.max(this.dotSize,r-Math.round((n-this.dataRange.min)/h));l&&fr.setProperties(i,{fillStyle:l,strokeStyle:"black"}),fr.fillCircle(i,d,u,this.dotSize),e.px=d,e.py=u}}}paintAxis(e,t,i){fr.fillRect(e,0,0,t,i,{fillStyle:"rgb(255, 255, 255)"});var n={font:"normal 10px Arial",textAlign:"right",strokeStyle:"black"};const r=(this.dataRange.max-this.dataRange.min)/i;if(this.posteriorProbability){const t=.1;for(let s=this.dataRange.min;s<this.dataRange.max;s+=t){const t=i-Math.round((s-this.dataRange.min)/r);fr.strokeLine(e,45,t-2,50,t-2,n),fr.fillText(e,s.toFixed(1),44,t+2,n)}}else{const t=Math.ceil(10*(this.dataRange.max-this.dataRange.min)/i);for(let s=this.dataRange.min;s<this.dataRange.max;s+=t){const t=i-Math.round((s-this.dataRange.min)/r);fr.strokeLine(e,45,t,50,t,n),fr.fillText(e,Math.floor(s),44,t+4,n)}}n.textAlign="center",this.posteriorProbability?fr.fillText(e,"PPA",t/2,i/2,n,{rotate:{angle:-90}}):fr.fillText(e,"-log10(pvalue)",t/2,i/2,n,{rotate:{angle:-90}})}popupData(e,t){void 0===t&&(t=e.viewport.cachedFeatures);let i=[];const n=e.viewport.trackView.track;if(t){let r=0;for(let s of t){const t=Math.abs(e.canvasX-s.px),o=Math.abs(e.canvasY-s.py);if(t<this.dotSize&&o<this.dotSize){if(r>0&&i.push("<HR/>"),5==r){i.push("...");break}if(s=s._f||s,"function"==typeof s.popupData)i=i.concat(s.popupData());else{const e=s[this.valueProperty],t=s.chr,r=F(s.start+1);i.push({name:"chromosome",value:t}),i.push({name:"position",value:r}),i.push({name:"name",value:s.name}),n.posteriorProbability?i.push({name:"posterior probability",value:e}):i.push({name:"pValue",value:e})}r++}}}return i}menuItemList(){return this.numericDataMenuItems()}doAutoscale(e){if(e.length>0){const t=this.valueProperty,i=this.posteriorProbability,n=e.map((function(e){const n=e[t];return{value:i?n:-Math.log(n)/Math.LN10}}));this.dataRange=Gs(n)}else this.posteriorProbability?this.dataRange={min:this.config.min||0,max:this.config.max||1}:this.dataRange={min:this.config.max||25,max:this.config.min||0};return this.dataRange}}class kF extends Pa{constructor(e,t){super(e,t)}init(e){super.init(e),this.autoscale=e.autoscale||void 0===e.max,this.dataRange={min:e.min||0,max:e.max},this.windowFunction=e.windowFunction||"mean",this.paintAxis=hl,this.graphType=e.graphType||"bar",e._featureSource?(this.featureSource=e._featureSource,delete e._featureSource):this.featureSource=Hl(this.config,this.browser.genome),this.visibilityWindow=-1,this.featureSource.visibilityWindow=this.visibilityWindow}async postInit(){if("function"==typeof this.featureSource.getHeader){if(this.header=await this.featureSource.getHeader(),this.disposed)return;if(this.sampleKeys=this.header.columnNames.slice(3),this.setTrackProperties(this.header),this.header.hasOwnProperty("clickToHighlight")){let e=this.header.clickToHighlight;this.config.clickToHighlight=e,this.config.samplesClickedToHighlight={}}if(this.header.hasOwnProperty("onlyHandleClicksForHighlightedSamples")&&(this.config.onlyHandleClicksForHighlightedSamples=!0),this.header.hasOwnProperty("highlight")){this.config.highlightSamples={};let e=this.header.highlight;Array.isArray(e)||(e=[e]);for(let t of e){const e=t.split(";");2===e.length&&(this.config.highlightSamples[e[0]]=e[1])}}}this._initialColor=this.color||this.constructor.defaultColor,this._initialAltColor=this.altColor||this.constructor.defaultColor}menuItemList(){return this.numericDataMenuItems()}async getFeatures(e,t,i){const n=await this.featureSource.getFeatures({chr:e,start:0,end:Number.MAX_SAFE_INTEGER,visibilityWindow:this.visibilityWindow});let r,s;for(let e=1;e<n.length-1;e++)if(void 0===r&&n[e].end>t&&(r=e-1),void 0===s&&n[e].start>i){s=e+1;break}return void 0===r&&(r=0),void 0===s&&(s=n.length),n.slice(r,s)}draw(e){const{features:t,context:i,bpPerPixel:n,bpStart:r,pixelWidth:s,pixelHeight:o}=e,a=e=>(this.dataRange.max-e)/(this.dataRange.max-this.dataRange.min)*o,c=function(e){let t=Math.floor((e-r)/n);return isNaN(t)&&console.warn("isNaN(x). feature start "+F(e)+" bp start "+F(r)),t};if(t&&t.length>0&&(void 0===this.dataRange.min&&(this.dataRange.min=0),this.dataRange.max>this.dataRange.min)){const e=this.config.highlightSamples,n=this.config.onlyHandleClicksForHighlightedSamples,r=this.config.clickToHighlight;let s=-1,o={},l=[],h=[];this.clickDetectorCache={};for(let d of t){const t=c(d.start),u=c(d.end),f=s>=0?c(s):t;if(!isNaN(t)&&!isNaN(u)){this.clickDetectorCache[t]=[],this.clickDetectorCache[u]=[];for(let s=0;s<d.values.length;s++){const c=this.sampleKeys[s],p=d.values[s],g=a(p);if(t-f>=1){const s=o[c],h=a(s),d=e&&e[c];d?l.push([f,h,t,g,d]):r&&c in this.config.samplesClickedToHighlight?l.push([f,h,t,g,this.config.samplesClickedToHighlight[c]]):fr.strokeLine(i,f,h,t,g,{strokeStyle:"#D9D9D9"}),n&&!(c in e)||this.clickDetectorCache[t].push([f,h,t,g,c,d||"gray"])}if(u-t>=1){const s=e&&e[c];s?h.push([t,g,u,g,s]):r&&c in this.config.samplesClickedToHighlight?h.push([t,g,u,g,this.config.samplesClickedToHighlight[c]]):fr.strokeLine(i,t,g,u,g,{strokeStyle:"gray"}),n&&!(c in e)||this.clickDetectorCache[u].push([t,g,u,g,c,s||"gray"])}o[c]=p}s=d.end}}for(let e of l)fr.strokeLine(i,e[0],e[1],e[2],e[3],{strokeStyle:e[4],lineWidth:1.3});for(let e of h)fr.strokeLine(i,e[0],e[1],e[2],e[3],{strokeStyle:e[4],lineWidth:2})}(e=>{if(this.config.hasOwnProperty("guideLines"))for(let t of this.config.guideLines)if(t.hasOwnProperty("color")&&t.hasOwnProperty("y")&&t.hasOwnProperty("dotted")){let i=a(t.y),n={strokeStyle:t.color,strokeWidth:2};t.dotted?fr.dashedLine(e.context,0,i,e.pixelWidth,i,5,n):fr.strokeLine(e.context,0,i,e.pixelWidth,i,n)}})(e)}doAutoscale(e){let t,i;return e.length>0?(t=Number.MAX_VALUE,i=-Number.MAX_VALUE,e.forEach((function(e){t=Math.min(t,...e.values),i=Math.max(i,...e.values)})),t-=.01,i+=.01):(t=0,i=100),{min:t,max:i}}clickedFeatures(e){const t=e.canvasX,i=e.canvasY;let n=null;for(n of Object.keys(this.clickDetectorCache))if(n=parseInt(n),n>=t)break;if(n){let e=Number.MAX_VALUE,o=[];const a=this.clickDetectorCache[n];for(let n of a){const r=n[0],s=n[2];if(t<r||t>s)return[];const a=n[1],c=n[3];if(i<Math.min(a,c)-10||i>Math.max(a,c)+10)continue;const l=IF(t,i,r,a,s,c);l<e&&(o=[{name:n[4],color:n[5]}],e=l)}if(e<5){if(this.config.clickToHighlight){if(o[0].name in this.config.samplesClickedToHighlight)delete this.config.samplesClickedToHighlight[o[0].name];else if("any"===this.config.clickToHighlight){var r=["red","darkblue","green","teal","olivedrab","orange","maroon","purple","blue","gold"],s=r[Math.floor(Math.random()*(r.length+1))];this.config.samplesClickedToHighlight[o[0].name]=s}else this.config.samplesClickedToHighlight[o[0].name]=this.config.clickToHighlight;this.trackView.repaintViews()}return o}}return[]}popupData(e,t){void 0===t&&(t=this.clickedFeatures(e));const i=[];return t.forEach((function(e){for(let t of Object.keys(e))Us(e[t])&&i.push({name:t,value:e[t]})})),i}get supportsWholeGenome(){return!1}}function IF(e,t,i,n,r,s){const o=r-i,a=s-n,c=Math.abs(o*(n-t)-(i-e)*a),l=Math.sqrt(o*o+a*a);return l>0?c/l:0}class SF extends Pa{static defaults={height:300,theta:Math.PI/2,arcOrientation:"UP"};constructor(e,t){super(e,t),!1===e.arcOrientation?this.arcOrientation="DOWN":!0===e.arcOrientation?this.arcOrientation="UP":e.arcOrientation?this.arcOrientation=e.arcOrientation.toUpperCase():this.arcOrientation="UP","bp"===e.format?this.featureSource=new NF(e,t.genome):this.featureSource=new Sl(e,t.genome)}async getFeatures(e,t,i){const n=this.visibilityWindow;return this.featureSource.getFeatures({chr:e,start:t,end:i,visibilityWindow:n})}draw(e){const t=e.context,i=Math.PI/2,n=e.pixelWidth,r=e.pixelHeight;e.viewportWidth;const s=e.bpPerPixel,o=e.bpStart,a=s,c="UP"===this.arcOrientation;fr.fillRect(t,0,e.pixelTop,n,r,{fillStyle:"rgb(255, 255, 255)"});const l=e.features;if(l){EF(l,1);for(let e of l)if(e.startLeft){let n=Math.round((e.startLeft-o)/a),r=Math.round((e.startRight-o)/a),s=Math.round((e.endLeft-o)/a),l=Math.round((e.endRight-o)/a);t.fillStyle=e.color,t.strokeStyle=e.color,t.beginPath();let h=(n+l)/2,d=(l-n)/2,u=this.height,f=Math.PI+(Math.PI/2-i),p=2*Math.PI-(Math.PI/2-i);c?(t.arc(h,u,d,f,p),t.lineTo(s,u)):(u=0,t.arc(h,u,d,p,f),t.lineTo(l,u));const g=(r+s)/2,m=(s-r)/2,w=u;c?(t.arc(g,w,m,p,f,!0),t.lineTo(n,w)):(t.arc(g,w,m,f,p,!0),t.lineTo(s,w)),t.stroke(),t.fill(),e.drawState={x1:h,y1:u,r1:d,x2:g,y2:w,r2:m,sa:f,ea:p}}else{let n=Math.round((e.start-o)/a),r=Math.round((e.end-o)/a);t.strokeStyle=e.color,t.beginPath();let s=(n+r)/2,l=(r-n)/2,h=this.height,d=Math.PI+(Math.PI/2-i),u=2*Math.PI-(Math.PI/2-i);c?t.arc(s,h,l,d,u):(h=0,t.arc(s,h,l,u,d)),t.stroke(),e.drawState={x1:s,y1:h,r1:l,sa:d,ea:u}}}}clickedFeatures(e){const t=super.clickedFeatures(e),i=[];EF(t,-1);for(let n of t){const t=n.drawState,r=e.canvasX-t.x1,s=e.canvasY-t.y1,o=Math.sqrt(r*r+s*s),a=t.r1+3;let c,l;if(void 0===t.x2)c=o,l=t.r1-3;else{const i=e.canvasX-t.x2,n=e.canvasY-t.y2;c=Math.sqrt(i*i+n*n),l=t.r2-3}if(o<a&&c>l){i.push(n);break}}return i}popupData(e,t){if(void 0===t&&(t=this.clickedFeatures(e)),t&&t.length>0)return this.extractPopupData(t[0],this.getGenomeId())}menuItemList(){return[{name:"Toggle arc direction",click:function(){this.arcOrientation="UP"===this.arcOrientation?"DOWN":"UP",this.trackView.repaintViews()}}]}}function EF(e,t){e.sort((function(e,i){const n=void 0===e.score?-Number.MAX_VALUE:e.score,r=void 0===i.score?-Number.MAX_VALUE:i.score;return(void 0===t?1:t)*(n-r)}))}class NF{constructor(e,t){this.config=e,this.genome=t}async getFeatures({chr:e,start:t,end:i,bpPerPixel:n,visibilityWindow:r}){const s=this.genome;if(this.featureCache)return this.featureCache.queryFeatures(e,t,i);{const n=js(this.config),r=await Mn.loadByteArray(this.config.url,n);return this.featureCache=new On(function(e){if(!e)return null;const t=wc(e);let i,n=!0;const r=[],s=[],o=[];for(;void 0!==(i=t.nextLine());){const e=i.split("\t");if(n&&i.startsWith("color:")){const t="rgb("+e[1]+","+e[2]+","+e[3]+")";r.push(t),e.length>4&&s.push(e[4])}else{n=!1;const t=e[0],i=Number.parseInt(e[1])-1,c=Number.parseInt(e[2])-1,l=Number.parseInt(e[3]),h=Number.parseInt(e[4]);var a=Number.parseInt(e[5]);const d=r[a];let u;u=i<=h?{chr:t,startLeft:Math.min(i,c),startRight:Math.max(i,c),endLeft:Math.min(l,h),endRight:Math.max(l,h),color:d,score:a}:{chr:t,startLeft:Math.min(l,h),startRight:Math.max(l,h),endLeft:Math.min(i,c),endRight:Math.max(i,c),color:d,score:a},u.start=u.startLeft,u.end=u.endRight,s.length>a&&(u.description=s[a]),o.push(u)}}return o}(r),s),this.featureCache.queryFeatures(e,t,i)}}}class MF{constructor(e){this.browser=e,this.type="ideogram",this.id="ideogram",this.height=e.config.showCytobandNames?20:16,this.order=Number.MIN_SAFE_INTEGER,this.disableButtons=!0,this.ignoreTrackMenu=!0,this.showCytobandNames=e.config.showCytobandNames}computePixelHeight(e){return this.height}draw({context:e,referenceFrame:t,pixelWidth:i,pixelHeight:n,features:r}){const s=t.chr,o=t.genome.getChromosome(s);if(void 0===o||i<=0||n<=0||"all"===s.toLowerCase())return;!function({ctx:e,chr:t,referenceFrame:i,genome:n,width:r,height:s,stainColors:o,features:a,showCytobandNames:c}){const l=1,h=.5*l,d=0;if(void 0===n)return;fr.fillRect(e,0,0,r,s,{fillStyle:un.greyScale(255)});const u=a;if(u){const t=d+s/2,i=[],n=[];if(0===u.length)return;const a=r/u[u.length-1].end;e.beginPath(),fr.roundRect(e,h,h+d,r-2*h,s-2*h,(s-2*h)/2,0,1),e.clip();for(let r=0;r<u.length;r++){const h=u[r],f=a*h.start,p=a*h.end;if("c"===h.type)"p"===h.name.charAt(0)?(i[0]=f,n[0]=s+d,i[1]=f,n[1]=d,i[2]=p,n[2]=t):(i[0]=p,n[0]=s+d,i[1]=p,n[1]=d,i[2]=f,n[2]=t),e.fillStyle="rgb(150, 0, 0)",e.strokeStyle="rgb(150, 0, 0)",fr.polygon(e,i,n,1,0);else{const t=BF(o,h);e.fillStyle=t.color,fr.fillRect(e,f,l+d,p-f,s-2*l),c&&RF(e,h.name,f,p,d,s,t.shade)}}}e.strokeStyle=un.greyScale(41),fr.roundRect(e,h,h+d,r-2*h,s-2*h,(s-2*h)/2,0,1)}({ctx:e,features:r,chr:s,referenceFrame:t,genome:t.genome,width:i,height:n,stainColors:[],showCytobandNames:this.showCytobandNames});const a=Math.round(t.bpPerPixel*i),c=t.start;let l=o.bpLength;const h=t.genome.getCytobands(s);if(h&&h.length>0&&h[h.length-1].end&&(l=Math.max(l,h[h.length-1].end),o.bpLength=l),a<l){const t=a/l,r=c/l;let s=Math.floor(r*i),o=Math.floor(t*i);s=Math.max(0,s),s=Math.min(i-o,s),e.save(),e.strokeStyle="red",e.lineWidth=o<2?1:2;const h=s+e.lineWidth/2;o=o<2?1:o-e.lineWidth;const d=e.lineWidth/2,u=n-e.lineWidth;e.strokeRect(h,d,o,u),e.restore()}}dispose(){this.trackView=void 0}}function RF(e,t,i,n,r,s,o){const a=s-4,c=n-i;let l=a-4;do{e.font=`${l}px sans-serif`;if(e.measureText(t).width<=c)break;l-=1}while(l>4);e.save(),e.beginPath(),e.rect(i,2+r,c,a),e.clip();const h=i+c/2,d=2+r+a/2+1;let u;u=null!==o?.2126*o+.7152*o+.0722*o:39.764;const f=u<128?"white":"black";fr.fillText(e,t,h,d,{fillStyle:f,textAlign:"center",textBaseline:"middle",font:`${l}px sans-serif`}),e.restore()}function BF(e,t){if("c"===t.type)return{color:"rgb(150, 10, 10)",shade:null};{let n=t.stain,r=230;"p"===t.type&&(r=Math.floor(230-n/100*230));var i=e[r];return i||(i="rgb("+r+","+r+","+r+")",e[r]=i),{color:i,shade:r}}}let DF=new Kn("Dark2");["GT/AG","CT/AC","GC/AG","CT/GC","AT/AC","GT/AT","non-canonical"].forEach((e=>{DF.getColor(e)}));class TF extends Pa{static defaults={margin:10,colorByNumReadsThreshold:5,height:100};constructor(e,t){super(e,t)}init(e){super.init(e),this.type=e.type||"junctions",e._featureSource?(this.featureSource=e._featureSource,delete e._featureSource):this.featureSource=e.featureSource?e.featureSource:Hl(e,this.browser.genome)}async postInit(){if("function"!=typeof this.featureSource.getHeader||(this.header=await this.featureSource.getHeader(),!this.disposed))return this.header&&this.setTrackProperties(this.header),void 0===this.visibilityWindow&&"function"==typeof this.featureSource.defaultVisibilityWindow&&(this.visibilityWindow=await this.featureSource.defaultVisibilityWindow()),this._initialColor=this.color||this.constructor.defaultColor,this._initialAltColor=this.altColor||this.constructor.defaultColor,this}get supportsWholeGenome(){return!1}async getFeatures(e,t,i,n){const r=this.visibilityWindow;return this.featureSource.getFeatures({chr:e,start:t,end:i,bpPerPixel:n,visibilityWindow:r})}computePixelHeight(e){return this.height}draw(e){const t=e.features,i=e.context,n=e.bpPerPixel,r=e.bpStart,s=e.pixelWidth,o=e.pixelHeight,a=r+s*n+1;if(this.isMergedTrack||fr.fillRect(i,0,e.pixelTop,s,o,{fillStyle:"rgb(255, 255, 255)"}),t){const s={};s.referenceFrame=e.viewport.referenceFrame,s.referenceFrameStart=s.referenceFrame.start,s.referenceFrameEnd=s.referenceFrameStart+s.referenceFrame.toBP(e.viewport.getWidth()),s.featureZoomOutTracker={};for(let e of t)if(!(e.end<r)){if(e.start>a)break;this.renderJunction(e,r,n,o,i,s)}}else console.log("No feature list")}renderJunction(e,t,i,n,r,s){e.isVisible=!1;const o=Math.round((e.start-t)/i),a=Math.round((e.end-t)/i),c=(o+a)/2;if(a-o<=3){if(c in s.featureZoomOutTracker)return;s.featureZoomOutTracker[c]=!0}if(this.config.hideAnnotatedJunctions&&"true"===e.attributes.annotated_junction)return;if(this.config.hideUnannotatedJunctions&&"false"===e.attributes.annotated_junction)return;if(this.config.hideMotifs&&this.config.hideMotifs.includes(e.attributes.motif))return;if(this.config.hideStrand===e.strand)return;if(this.config.minJunctionEndsVisible){let t=0;if(e.start>=s.referenceFrameStart&&e.start<=s.referenceFrameEnd&&(t+=1),e.end>=s.referenceFrameStart&&e.end<=s.referenceFrameEnd&&(t+=1),t<this.config.minJunctionEndsVisible)return}let l,h,d,u;if(e.attributes.uniquely_mapped){if(l=parseInt(e.attributes.uniquely_mapped),l<this.config.minUniquelyMappedReads)return;if(h=parseInt(e.attributes.multi_mapped),d=l+h,d<this.config.minTotalReads)return;if(d>0&&h/d>this.config.maxFractionMultiMappedReads)return;if(e.attributes.maximum_spliced_alignment_overhang&&parseInt(e.attributes.maximum_spliced_alignment_overhang)<this.config.minSplicedAlignmentOverhang)return}if(e.attributes.num_samples_with_this_junction){if(u=parseInt(e.attributes.num_samples_with_this_junction),this.config.minSamplesWithThisJunction&&u<this.config.minSamplesWithThisJunction)return;if(this.config.maxSamplesWithThisJunction&&u>this.config.maxSamplesWithThisJunction)return;if(e.attributes.num_samples_total&&(e.attributes.percent_samples_with_this_junction=100*u/Number(e.attributes.num_samples_total),this.config.minPercentSamplesWithThisJunction&&(e.attributes.percent_samples_with_this_junction<this.config.minPercentSamplesWithThisJunction||e.attributes.percent_samples_with_this_junction>this.config.maxPercentSamplesWithThisJunction)))return}const f=this.margin,p=n,g=f+.5*p;let m=f;const w=f+p-10,b=(o+c)/2,F=(c+a)/2;let v,y,A=1;e.attributes.line_width?A=Number(e.attributes.line_width):(void 0===this.config.thicknessBasedOn||"numUniqueReads"===this.config.thicknessBasedOn?A=l:"numReads"===this.config.thicknessBasedOn?A=d:"numSamplesWithThisJunction"===this.config.thicknessBasedOn&&void 0!==u&&(A=u),A=1+Math.log(A+1)/Math.log(12)),void 0===this.config.bounceHeightBasedOn||"random"===this.config.bounceHeightBasedOn?v=(e.start+e.end)%7:"distance"===this.config.bounceHeightBasedOn?v=6*(e.end-e.start)/(s.referenceFrameEnd-s.referenceFrameStart):"thickness"===this.config.bounceHeightBasedOn&&(v=2*A),m+=p*Math.max(7-v,0)/10,y=e.attributes.color?e.attributes.color:void 0===this.config.colorBy||"numUniqueReads"===this.config.colorBy?l>this.config.colorByNumReadsThreshold?"blue":"#AAAAAA":"numReads"===this.config.colorBy?d>this.config.colorByNumReadsThreshold?"blue":"#AAAAAA":"isAnnotatedJunction"===this.config.colorBy?"true"===e.attributes.annotated_junction?"#b0b0ec":"orange":"strand"===this.config.colorBy?"+"===e.strand?"#b0b0ec":"#ecb0b0":"motif"===this.config.colorBy?DF.getColor(e.attributes.motif):"#AAAAAA";let C="";e.attributes.label?C=e.attributes.label.replace(/_/g," "):void 0===this.config.labelWith||"uniqueReadCount"===this.config.labelWith?C=l:"totalReadCount"===this.config.labelWith?C=d:"numSamplesWithThisJunction"===this.config.labelWith?void 0!==u&&(C=u):"percentSamplesWithThisJunction"===this.config.labelWith?void 0!==e.attributes.percent_samples_with_this_junction&&(C=e.attributes.percent_samples_with_this_junction.toFixed(0)+"%"):"motif"===this.config.labelWith&&void 0!==e.attributes.motif&&(C+=e.attributes.motif),"uniqueReadCount"===this.config.labelWithInParen?C+=" ("+l+")":"totalReadCount"===this.config.labelWithInParen?C+=" ("+d+")":"multiMappedReadCount"===this.config.labelWithInParen?h>0&&(C+=" (+"+h+")"):"numSamplesWithThisJunction"===this.config.labelWithInParen?void 0!==u&&(C+=" ("+u+")"):"percentSamplesWithThisJunction"===this.config.labelWithInParen?void 0!==e.attributes.percent_samples_with_this_junction&&(C+=" ("+e.attributes.percent_samples_with_this_junction.toFixed(0)+"%)"):"motif"===this.config.labelWithInParen&&void 0!==e.attributes.motif&&(C+=` ${e.attributes.motif}`),e.isVisible=!0,r.beginPath(),r.moveTo(o,w),r.bezierCurveTo(b,m,F,m,a,w),r.lineWidth=A,r.strokeStyle=y,r.stroke();const _=(e,t,i,n)=>{e.beginPath(),e.moveTo(t,i),e.lineTo(t-n/2,i-n),e.lineTo(t+n/2,i-n),e.lineTo(t,i),e.closePath(),e.fill()};if(e.attributes.left_shape||e.attributes.right_shape){r.fillStyle=y;const t=r.lineWidth>2?10:7;e.attributes.left_shape&&_(r,o,w,t),e.attributes.right_shape&&_(r,a,w,t)}r.fillText(C,c-r.measureText(C).width/2,(7*m+g)/8)}clickedFeatures(e){return super.clickedFeatures(e).filter((function(e){return e.isVisible&&e.attributes}))}popupData(e,t){void 0===t&&(t=this.clickedFeatures(e));const i=e.genomicLocation,n=[];for(let e of t){const t="function"==typeof e.popupData?e.popupData(i):this.extractPopupData(e._f||e,this.getGenomeId());t&&(n.length>0&&n.push("<hr/><hr/>"),Array.prototype.push.apply(n,t))}return n}dispose(){this.trackView=void 0}}const zF={min:0,max:3e3,color:"rgb(0,0,255)"};class LF{constructor(e){e=e||zF,this.max=e.max,this.min=e.min||0,this.cache=[],this.nbins=1e3,this.binsize=(this.max-this.min)/this.nbins,this.updateColor(e.color||"rgb(0,0,255)"),this.br=255,this.bg=255,this.bb=255}updateColor(e){const t=e.substring(4).replace(")","").split(",");3===t.length&&(this.r=Number.parseInt(t[0].trim()),this.g=Number.parseInt(t[1].trim()),this.b=Number.parseInt(t[2].trim())),this.cache=[]}setMinMax(e,t){this.min=e,this.max=t,this.cache=[],this.binsize=(this.max-this.min)/this.nbins}getColor(e){if(e<=this.min)return"white";if(e>=this.max)return`rgb(${this.r},${this.g},${this.b})`;const t=Math.floor((Math.min(this.max,e)-this.min)/this.binsize);if(void 0===this.cache[t]){const i=(e-this.min)/(this.max-this.min),n=1-i;this.cache[t]=`rgb(${Math.floor(i*this.r+n*this.br)},${Math.floor(i*this.g+n*this.bg)},${Math.floor(i*this.b+n*this.bb)})`}return this.cache[t]}toJson(){return{min:this.min,max:this.max,color:`rgb(${this.r},${this.g},${this.b})`}}static parse(e){const t=e.split(","),i={min:Number.parseFloat(t[0]),max:Number.parseFloat(t[1]),color:`${t[2]},${t[3]},${t[4]}`};return new LF(i)}}class HF extends Pa{static defaults={height:300,rowHeight:3,min:.5,max:3,scale:1,visibilityWindow:1e4,supportHiDPI:!1,startSize:4,stepSize:2};constructor(e,t){super(e,t)}init(e){super.init(e),this.type="shoebox",e.max&&(this.dataRange={min:e.min||0,max:e.max});const t=Object.assign({},this.config);t.format="shoebox",this.featureSource=Hl(t,this.browser.genome)}async postInit(){if("function"==typeof this.featureSource.getHeader&&(this.header=await this.featureSource.getHeader(),this.disposed))return;this.header&&(this.header.scale&&(this.header.scale=Number.parseFloat(this.header.scale)),this.setTrackProperties(this.header),this.rowCount=this.header.firstFeature?this.header.firstFeature.values.length:100);const e=this.dataRange.min,t=this.dataRange.max;this.colorScale=new LF({min:e,max:t,color:this.color}),this.scale||(this.scale=1),this._initialColor=this.color||this.constructor.defaultColor,this._initialAltColor=this.altColor||this.constructor.defaultColor}get color(){return this._color||"rgb(0,0,255)"}set color(e){this._color=e,this.colorScale&&this.colorScale.updateColor(e)}menuItemList(){const e=[];e.push("<hr/>");let t=document.createElement("div");t.textContent="Set row height";const i=this.browser;return e.push({element:t,dialog:function(e){const t={label:"Row Height",value:this.rowHeight,callback:()=>{const e=parseInt(this.browser.inputDialog.value,10);if(void 0!==e){i.sampleNameViewportWidth=void 0;const t=[];this.trackView.track.selected?t.push(...this.trackView.browser.getSelectedTrackViews().map((({track:e})=>e))):t.push(this);for(const i of t)i.rowHeight=e,i.rowHeight*i.rowCount<i.height&&i.trackView.setTrackHeight(i.rowHeight*i.rowCount,!0),i.trackView.checkContentHeight(),i.trackView.repaintViews()}}};this.browser.inputDialog.present(t,e)}}),e.push("<hr/>"),t=document.createElement("div"),t.textContent="Set data range",e.push({element:t,dialog:function(){this.trackView.track.selected?this.browser.dataRangeDialog.configure(this.trackView.browser.getSelectedTrackViews()):this.browser.dataRangeDialog.configure(this.trackView),this.browser.dataRangeDialog.present(this.browser.columnContainer)}}),e}setDataRange({min:e,max:t}){this.dataRange.min=e,this.dataRange.max=t,this.colorScale.setMinMax(e,t),this.trackView.repaintViews()}async getFeatures(e,t,i,n){const r=this.visibilityWindow;return await this.featureSource.getFeatures({chr:e,start:t,end:i,bpPerPixel:n,visibilityWindow:r})}draw({context:e,pixelTop:t,pixelWidth:i,pixelHeight:n,features:r,bpPerPixel:s,bpStart:o}){if(fr.fillRect(e,0,t,i,n,{fillStyle:"rgb(255, 255, 255)"}),r&&r.length>0){const a=this.rowHeight,c=t+n,l=o+i*s+1,h=a;for(let i of r){if(i.end<o||i.start>l)continue;const n=Math.floor((i.start-o)/s),r=Math.floor((i.end-o)/s),d=Math.max(1,r-n);for(let r=i.values.length-1;r>=0;r--){const s=i.values[r];if(s>=this.dataRange.min){const o=(i.values.length-1-r)*a;if(o+a<t||o>c)continue;const l=this.colorScale.getColor(s);e.fillStyle=l,e.fillRect(n,o,d,h)}}}}}paintAxis(e,t,i){var n={font:"normal 10px Arial",textAlign:"right",strokeStyle:"black"};const r=this.startSize+this.rowCount*this.stepSize,s=this.startSize,o=(r-s)/i;for(let t=50;t<=r;t+=50){const r=Math.max(10,i-Math.round((t-s)/o));fr.strokeLine(e,35,r,40,r,n),t>s&&fr.fillText(e,PF(t),30,r+4,n)}n.textAlign="center",n.font="normal 10px Arial",fr.fillText(e,"Footprint size (bp)",10,i/2,n,{rotate:{angle:-90}})}computePixelHeight(e){return e&&0!==e.length?e[0].values.length*this.rowHeight:0}clickedFeatures(e){const t=super.clickedFeatures(e),i=e.y;return t.filter((function(e){const t=e.pixelRect;return t&&i>=t.y&&i<=t.y+t.h}))}hoverText(e){const t=this.clickedFeatures(e);if(t&&t.length>0)return`${t[0].sample}: ${t[0].value}`}popupData(e,t){void 0===t&&(t=this.clickedFeatures(e));const i=[];for(let e of t){i.length>0&&(i.push("<hr/>"),i.push("<hr/>"));const t=e._f||e,n="function"==typeof t.popupData?t.popupData(this.type,this.browser.genome.id):this.extractPopupData(t);Array.prototype.push.apply(i,n)}return i}get supportsWholeGenome(){return!1}getState(){const e=super.getState();return e.colorScale=this.colorScale.toJson(),e}}function PF(e){return Number.isInteger(e)||e%1==0?e:Math.abs(e)>=10?e.toFixed():Math.abs(e)>=1?e.toFixed(1):Math.abs(e)>=.1?e.toFixed(2):e.toExponential(1)}const OF=new Map([["ideogram",(e,t)=>new MF(e,t)],["sequence",(e,t)=>new fh(e,t)],["feature",(e,t)=>new eh(e,t)],["seg",(e,t)=>new Zd(e,t)],["mut",(e,t)=>new Zd(e,t)],["maf",(e,t)=>new Zd(e,t)],["shoebox",(e,t)=>new HF(e,t)],["wig",(e,t)=>new xl(e,t)],["merged",(e,t)=>new bd(e,t)],["alignment",(e,t)=>new dp(e,t)],["interaction",(e,t)=>new fp(e,t)],["interact",(e,t)=>new fp(e,t)],["variant",(e,t)=>new wF(e,t)],["qtl",(e,t)=>new AF(e,t)],["eqtl",(e,t)=>new AF(e,t)],["gwas",(e,t)=>new xF(e,t)],["arc",(e,t)=>new SF(e,t)],["gcnv",(e,t)=>new kF(e,t)],["junction",(e,t)=>new TF(e,t)],["blat",(e,t)=>new sh(e,t)],["cnvpytor",(e,t)=>new pF(e,t)]]);class VF{constructor(e,t){const i=(new DOMParser).parseFromString(e,"text/xml");this.processRootNode(i,t);const n=i.getElementsByTagName("Resource"),r=i.getElementsByTagName("Track"),s=r&&r.length>0,o=[];this.tracks=o;const a=new Map;Array.from(n).forEach((function(e,t){var i={url:e.getAttribute("path"),indexURL:e.getAttribute("index"),order:t};a.set(i.url,i),s||o.push(i)})),s&&Array.from(r).forEach((function(e){const t=e.getElementsByTagName("Track");if(t&&t.length>0){const i={type:"merged",tracks:[]};qF(e,i),o.push(i),Array.from(t).forEach((function(e){e.processed=!0;const t=e.getAttribute("id"),n=a.get(t);n&&(i.tracks.push(n),qF(e,n),n.autoscale=!1,i.height=n.height)}))}else if(!e.processed){const t=e.getAttribute("id"),i=a.get(t);i&&(o.push(i),qF(e,i))}}))}processRootNode(e,t){const i=e.getElementsByTagName("Session");!i||i.length;const n=i.item(0),r=n.getAttribute("genome"),s=n.getAttribute("locus"),o=n.getAttribute("ucscID");t&&t.hasOwnProperty(r)?this.genome=r:(this.reference={fastaURL:r},o&&(this.reference.id=o)),s&&(this.locus=s)}}function qF(e,t){t.name=e.getAttribute("name");const i=e.getAttribute("color");i&&(t.color="rgb("+i+")");const n=e.getAttribute("altColor");i&&(t.altColor="rgb("+n+")");const r=e.getAttribute("height");r&&(t.height=parseInt(r));const s=e.getAttribute("autoScale");s&&(t.autoscale="true"===s);const o=e.getAttribute("autoscaleGroup");o&&(t.autoscaleGroup=o);const a=e.getAttribute("windowFunction");a&&(t.windowFunction=a);const c=e.getAttribute("visibilityWindow")||e.getAttribute("featureVisibilityWindow");c&&(t.visibilityWindow=c);const l=e.getAttribute("indexed");l&&(t.indexed="true"===l);const h=e.getAttribute("normalize");h&&(t.normalize="true"===h);const d=e.getElementsByTagName("DataRange");if(d.length>0){const e=d.item(0);t.min=Number(e.getAttribute("minimum")),t.max=Number(e.getAttribute("maximum")),t.logScale="LOG"===e.getAttribute("type")}}class QF{constructor(e,t,i,n,r){this.genome=e,this.chr=t,this.start=i,this.end=n,this.bpPerPixel=r,this.id=o()}get center(){return(this.start+this.end)/2}get locusSearchString(){return`${this.chr}:${this.start+1}-${this.end}`}extend(e){const t=Math.min(e.start,this.start),i=Math.max(e.end,this.end),n=(i-t)/(this.end-this.start);this.start=t,this.end=i,this.bpPerPixel*=n}calculateEnd(e){return this.start+this.bpPerPixel*e}calculateCenter(e){return this.start+this.bpPerPixel*e/2}calculateBPP(e,t){return(e-this.start)/t}set(e){this.chr=e.chr,this.start=e.start,this.bpPerPixel=e.bpPerPixel}toPixels(e){return e/this.bpPerPixel}toBP(e){return this.bpPerPixel*e}shift(e){this.start+=e,this.end+=e}shiftPixels(e,t,i){const n=this.start,r=e*this.bpPerPixel;return this.start+=r,i&&this.clampStart(t),this.end=this.start+t*this.bpPerPixel,n!==this.start}clampStart(e){const t=this.genome.getChromosome(this.chr).bpStart||0;if(this.start=Math.max(t,this.start),e){const{bpLength:t}=this.genome.getChromosome(this.chr),i=t-e*this.bpPerPixel;this.start>i&&(this.start=i)}}async zoomWithScaleFactor(e,t,i,n){const r=void 0===n?this.start+this.toBP(i/2):n,s=this.start,o=this.bpPerPixel,a=this.getChromosome().bpLength,c=t<1?e.minimumBases()/i:a/i;this.bpPerPixel=t<1?Math.max(this.bpPerPixel*t,c):Math.min(this.bpPerPixel*t,c);const l=this.bpPerPixel*i;this.start=r-.5*l,this.clampStart(i),this.end=this.start+l;(s!==this.start||o!==this.bpPerPixel)&&await e.updateViews(!0)}getChromosome(){return this.genome.getChromosome(this.chr)}getMultiLocusLabelBPLengthOnly(e){const t=" ",i=Math.floor(this.start)+1,n=Math.round(this.start+this.bpPerPixel*e);return`${t}${this.chr}${t}${Ys(n-i)}${t}`}getMultiLocusLabelLocusOnly(e){const t=" ",{chr:i,start:n,end:r}=this.getPresentationLocusComponents(e);return`${t}${i}:${n}-${r}${t}`}getMultiLocusLabel(e){const t=" ",{chr:i,start:n,end:r}=this.getPresentationLocusComponents(e),s=Math.floor(this.start)+1;return`${t}${i}:${n}-${r}${t}${t}(${Ys(Math.round(this.start+this.bpPerPixel*e)-s)})${t}`}getPresentationLocusComponents(e){if("all"===this.chr)return{chr:this.chr};{const t=F(Math.floor(this.start)+1),i=F(Math.round(this.start+this.bpPerPixel*e));return{chr:this.chr,start:t,end:i}}}getLocusString(){if("all"===this.chr)return"all";return`${this.genome.getChromosomeDisplayName(this.chr)}:${F(Math.floor(this.start)+1)}-${F(Math.round(this.end))}`}description(e){console.log(` ${e||""} referenceFrame - ${this.chr} bpp ${this.bpPerPixel.toFixed(3)} start ${F(Math.round(this.start))} end ${F(Math.round(this.end))} `)}overlaps(e){return this.chr===e.chr&&this.end>=e.start&&e.end>=this.start}}function UF(){return"3.2.1"}const jF="Maximum sequence count exceeded";class GF{constructor(e,i){this.container=t({class:"igv-chromosome-select-widget-container"}),i.appendChild(this.container),this.select=document.createElement("select"),this.select.setAttribute("name","chromosome-select-widget"),this.container.appendChild(this.select),this.select.addEventListener("change",(()=>{this.select.blur(),""!==this.select.value&&jF!==this.select.value&&e.search(this.select.value)})),this.showAllChromosomes=!1!==e.config.showAllChromosomes,this.genome=e.genome}show(){this.container.style.display="flex"}hide(){this.container.style.display="none"}setValue(e){this.select.value=this.genome.getChromosomeDisplayName(e)}update(e){this.genome=e;const t=e.wgChromosomeNames.map((t=>e.getChromosomeDisplayName(t)))||[];if(this.showAllChromosomes&&e.chromosomeNames.length>1){const i=new Set(t);let n=0;for(let r of e.chromosomeNames){if(1e3==++n){t.push(jF);break}i.has(r)||(r=e.getChromosomeDisplayName(r),t.push(r))}}this.select.innerHTML="",e.showWholeGenomeView()&&t.unshift("all");for(let i of t){const t=document.createElement("option");t.setAttribute("value",i),t.innerText=e.getChromosomeDisplayName(i),this.select.appendChild(t)}}}class WF{constructor(e,i){this.container=t({class:"igv-windowsize-panel-container"}),e.appendChild(this.container),i.on("locuschange",(e=>{this.updatePanel(e)})),this.browser=i}show(){this.container.style.display="block"}hide(){this.container.style.display="none"}updatePanel(e){const t=this.browser.calculateViewportWidth(this.browser.referenceFrameList.length);this.container.innerText=1===e.length?Ys(Math.round(t*e[0].bpPerPixel)):""}}class $F extends md{constructor(e,t,i,n){super(e,t,"Select Tracks",wd,'<svg width="625px" height="625px" viewBox="0 0 625 625" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">\n <title>multi select</title>\n <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">\n <g id="multi-select">\n <rect id="backdrop-copy-3" stroke="#737373" stroke-width="12" fill="#FFFFFF" x="6" y="6" width="613" height="613" rx="135"></rect>\n <g id="row-copy-3" transform="translate(81, 427)" fill="#737373">\n <rect id="Rectangle" x="134" y="0" width="329" height="70"></rect>\n <rect id="Rectangle-Copy-16" stroke="#737373" stroke-width="12" x="6" y="6" width="58" height="58"></rect>\n </g>\n <g id="row-copy-2" transform="translate(82, 277)">\n <rect id="Rectangle" fill-opacity="0.33" fill="#CFCECE" x="133" y="0" width="329" height="70"></rect>\n <rect id="Rectangle-Copy-16" stroke-opacity="0.32659528" stroke="#CFCECE" stroke-width="12" x="6" y="6" width="58" height="58"></rect>\n </g>\n <g id="row-copy" transform="translate(81, 119)" fill="#737373">\n <rect id="Rectangle" x="134" y="0" width="329" height="70"></rect>\n <rect id="Rectangle-Copy-17" stroke="#737373" stroke-width="12" x="6" y="6" width="58" height="58"></rect>\n </g>\n </g>\n </g>\n</svg>','<svg width="625px" height="625px" viewBox="0 0 625 625" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">\n <title>multi select hover</title>\n <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">\n <g id="multi-select-hover">\n <rect id="backdrop-copy-4" stroke="#737373" stroke-width="12" fill="#737373" x="6" y="6" width="613" height="613" rx="135"></rect>\n <g id="row-copy-3" transform="translate(81, 427)" fill="#FFFFFF">\n <rect id="Rectangle" x="134" y="0" width="329" height="70"></rect>\n <rect id="Rectangle-Copy-16" stroke="#FFFFFF" stroke-width="12" x="6" y="6" width="58" height="58"></rect>\n </g>\n <g id="row-copy-2" transform="translate(82, 277)">\n <rect id="Rectangle" fill-opacity="0.33" fill="#CFCECE" x="133" y="0" width="329" height="70"></rect>\n <rect id="Rectangle-Copy-16" stroke-opacity="0.33" stroke="#CFCECE" stroke-width="12" x="6" y="6" width="58" height="58"></rect>\n </g>\n <g id="row-copy" transform="translate(81, 119)" fill="#FFFFFF">\n <rect id="Rectangle" x="134" y="0" width="329" height="70"></rect>\n <rect id="Rectangle-Copy-17" stroke="#FFFFFF" stroke-width="12" x="6" y="6" width="58" height="58"></rect>\n </g>\n </g>\n </g>\n</svg>',!1),this.navbar=i,this.enableMultiTrackSelection=!1,this.button.addEventListener("mouseenter",(e=>{!1===n&&this.setState(!0)})),this.button.addEventListener("mouseleave",(e=>{!1===n&&this.setState(!1)}));this.boundMouseClickHandler=(()=>{this.setMultiTrackSelection(!this.enableMultiTrackSelection)}).bind(this),this.button.addEventListener("click",this.boundMouseClickHandler)}setMultiTrackSelection(e){this.enableMultiTrackSelection=e,this.setState(this.enableMultiTrackSelection),!1===this.enableMultiTrackSelection&&this.navbar.overlayTrackButton.setVisibility(!1);for(const t of this.browser.trackViews)t.enableTrackSelection(e)}}class KF extends md{constructor(e,t){super(e,t,"Crosshairs",wd,'<svg width="625px" height="625px" viewBox="0 0 625 625" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">\n <title>cursor</title>\n <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">\n <g id="cursor" stroke="#737373">\n <rect id="Rectangle-Copy-3" stroke-width="12" fill="#FFFFFF" x="6" y="6" width="613" height="613" rx="135"></rect>\n <g id="Group" transform="translate(5, 9)" stroke-width="24">\n <line x1="0.5" y1="212.5" x2="614.5" y2="212.5" id="Line"></line>\n <line x1="-115.5" y1="303.5" x2="490.5" y2="303.5" id="Line-Copy" transform="translate(187.5, 303.5) scale(-1, 1) rotate(90) translate(-187.5, -303.5)"></line>\n </g>\n <circle id="Oval" stroke-width="24" cx="191.5" cy="221.5" r="88.5"></circle>\n </g>\n </g>\n</svg>','<svg width="625px" height="625px" viewBox="0 0 625 625" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">\n <title>cursor hover</title>\n <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">\n <g id="cursor-hover">\n <rect id="Rectangle-Copy-5" stroke="#737373" stroke-width="12" fill="#737373" x="6" y="6" width="613" height="613" rx="135"></rect>\n <g id="Group-Copy-2" transform="translate(5, 9)" stroke="#FFFFFF" stroke-width="24">\n <line x1="0.5" y1="212.5" x2="614.5" y2="212.5" id="Line"></line>\n <line x1="-115.5" y1="303.5" x2="490.5" y2="303.5" id="Line-Copy" transform="translate(187.5, 303.5) scale(-1, 1) rotate(90) translate(-187.5, -303.5)"></line>\n </g>\n <circle id="Oval" stroke="#FFFFFF" stroke-width="24" cx="191.5" cy="221.5" r="88.5"></circle>\n </g>\n </g>\n</svg>',t.doShowCursorGuide),this.button.addEventListener("mouseenter",(()=>{!1===t.doShowCursorGuide&&this.setState(!0)})),this.button.addEventListener("mouseleave",(()=>{!1===t.doShowCursorGuide&&this.setState(!1)}));this.boundMouseClickHandler=(()=>{t.doShowCursorGuide=!t.doShowCursorGuide,t.setCursorGuideVisibility(t.doShowCursorGuide),this.setState(t.doShowCursorGuide)}).bind(this),this.button.addEventListener("click",this.boundMouseClickHandler),this.setVisibility(t.config.showCursorTrackingGuideButton)}}class YF extends md{constructor(e,t){super(e,t,"Center Line",wd,'<svg width="625px" height="625px" viewBox="0 0 625 625" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">\n <title>centerline</title>\n <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">\n <g id="centerline" stroke="#737373">\n <rect id="Rectangle-Copy-2" stroke-width="12" fill="#FFFFFF" x="6" y="6" width="613" height="613" rx="135"></rect>\n <line x1="6.5" y1="312.5" x2="618.5" y2="312.5" id="Line-Copy" stroke-width="31" transform="translate(312.5, 312.5) scale(-1, 1) rotate(90) translate(-312.5, -312.5)"></line>\n </g>\n </g>\n</svg>','<svg width="625px" height="625px" viewBox="0 0 625 625" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">\n <title>centerline hover</title>\n <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">\n <g id="centerline-hover">\n <rect id="Rectangle-Copy-9" stroke="#737373" stroke-width="12" fill="#737373" x="6" y="6" width="613" height="613" rx="135"></rect>\n <line x1="6.5" y1="312.5" x2="618.5" y2="312.5" id="Line-Copy" stroke="#FFFFFF" stroke-width="31" transform="translate(312.5, 312.5) scale(-1, 1) rotate(90) translate(-312.5, -312.5)"></line>\n </g>\n </g>\n</svg>',t.config.showCenterGuide),this.button.addEventListener("mouseenter",(()=>{!1===t.doShowCenterLine&&this.setState(!0)})),this.button.addEventListener("mouseleave",(()=>{!1===t.doShowCenterLine&&this.setState(!1)}));this.boundMouseClickHandler=(()=>{t.doShowCenterLine=!t.doShowCenterLine,t.setCenterLineVisibility(t.doShowCenterLine),this.setState(t.doShowCenterLine)}).bind(this),this.button.addEventListener("click",this.boundMouseClickHandler),this.setVisibility(t.config.showCenterGuideButton)}}class XF extends md{constructor(e,t){super(e,t,"Track Labels",wd,'<svg width="625px" height="625px" viewBox="0 0 625 625" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">\n <title>track labels</title>\n <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">\n <g id="track-labels" fill="#FFFFFF" stroke="#737373">\n <rect id="Rectangle-Copy-27" stroke-width="12" x="6" y="6" width="613" height="613" rx="135"></rect>\n <g id="group" transform="translate(52.2778, 149.7248)" stroke-width="24">\n <path d="M448.444444,87.1189616 L448.444444,322.431462 L166.619398,322.431462 L19.2344421,204.775212 L166.619398,87.1189616 L448.444444,87.1189616 Z M244.028212,163.997434 C232.925565,163.997434 222.874656,168.493347 215.598982,175.760254 C208.318067,183.032394 203.815972,193.079106 203.815972,204.175675 C203.815972,215.272243 208.318067,225.318955 215.598982,232.591095 C222.874656,239.858002 232.925565,244.353915 244.028212,244.353915 C255.130858,244.353915 265.181767,239.858002 272.457442,232.591095 C279.738356,225.318955 284.240451,215.272243 284.240451,204.175675 C284.240451,193.079106 279.738356,183.032394 272.457442,175.760254 C265.181767,168.493347 255.130858,163.997434 244.028212,163.997434 Z" id="backdrop"></path>\n <path d="M495.232604,12 L495.232604,264.550423 L193.616935,264.550423 L35.4455183,138.275212 L193.616935,12 L495.232604,12 Z M168.133512,95.1660194 C156.441871,95.1660194 145.858581,99.8943121 138.197214,107.534302 C130.523695,115.18641 125.780417,125.758499 125.780417,137.434423 C125.780417,149.110347 130.523695,159.682435 138.197214,167.334543 C145.858581,174.974533 156.441871,179.702826 168.133512,179.702826 C179.825153,179.702826 190.408443,174.974533 198.06981,167.334543 C205.743329,159.682435 210.486607,149.110347 210.486607,137.434423 C210.486607,125.758499 205.743329,115.18641 198.06981,107.534302 C190.408443,99.8943121 179.825153,95.1660194 168.133512,95.1660194 Z" id="hero"></path>\n </g>\n </g>\n </g>\n</svg>','<svg width="625px" height="625px" viewBox="0 0 625 625" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">\n <title>track labels hover</title>\n <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">\n <g id="track-labels-hover" stroke="#737373">\n <rect id="Rectangle-Copy-29" stroke-width="12" fill="#737373" x="6" y="6" width="613" height="613" rx="135"></rect>\n <g id="group" transform="translate(52.2778, 149.7248)" fill="#FFFFFF" stroke-width="24">\n <path d="M448.444444,85.1189616 L448.444444,320.431462 L166.619398,320.431462 L19.2344421,202.775212 L166.619398,85.1189616 L448.444444,85.1189616 Z M244.028212,161.997434 C232.925565,161.997434 222.874656,166.493347 215.598982,173.760254 C208.318067,181.032394 203.815972,191.079106 203.815972,202.175675 C203.815972,213.272243 208.318067,223.318955 215.598982,230.591095 C222.874656,237.858002 232.925565,242.353915 244.028212,242.353915 C255.130858,242.353915 265.181767,237.858002 272.457442,230.591095 C279.738356,223.318955 284.240451,213.272243 284.240451,202.175675 C284.240451,191.079106 279.738356,181.032394 272.457442,173.760254 C265.181767,166.493347 255.130858,161.997434 244.028212,161.997434 Z" id="backdrop"></path>\n <path d="M495.232604,12 L495.232604,264.550423 L193.616935,264.550423 L35.4455183,138.275212 L193.616935,12 L495.232604,12 Z M168.133512,95.1660194 C156.441871,95.1660194 145.858581,99.8943121 138.197214,107.534302 C130.523695,115.18641 125.780417,125.758499 125.780417,137.434423 C125.780417,149.110347 130.523695,159.682435 138.197214,167.334543 C145.858581,174.974533 156.441871,179.702826 168.133512,179.702826 C179.825153,179.702826 190.408443,174.974533 198.06981,167.334543 C205.743329,159.682435 210.486607,149.110347 210.486607,137.434423 C210.486607,125.758499 205.743329,115.18641 198.06981,107.534302 C190.408443,99.8943121 179.825153,95.1660194 168.133512,95.1660194 Z" id="hero"></path>\n </g>\n </g>\n </g>\n</svg>',t.config.showTrackLabels),this.button.addEventListener("mouseenter",(()=>{!1===t.doShowTrackLabels&&this.setState(!0)})),this.button.addEventListener("mouseleave",(()=>{!1===t.doShowTrackLabels&&this.setState(!1)}));this.boundMouseClickHandler=(()=>{t.doShowTrackLabels=!t.doShowTrackLabels,t.setTrackLabelVisibility(t.doShowTrackLabels),this.setState(t.doShowTrackLabels)}).bind(this),this.button.addEventListener("click",this.boundMouseClickHandler),this.setVisibility(t.config.showTrackLabelButton)}}class ZF extends md{constructor(e,t){super(e,t,["ROI","Regions of Interest Table"],wd,'<svg width="625px" height="625px" viewBox="0 0 625 625" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">\n <title>roi</title>\n <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">\n <g id="roi">\n <rect id="Rectangle-Copy-23" stroke="#737373" stroke-width="12" fill="#FFFFFF" x="6" y="6" width="613" height="613" rx="135"></rect>\n <text id="ROI" font-family="HelveticaNeue-Bold, Helvetica Neue" font-size="258" font-weight="bold" fill="#737373">\n <tspan x="81.445" y="389">ROI</tspan>\n </text>\n </g>\n </g>\n</svg>','<svg width="625px" height="625px" viewBox="0 0 625 625" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">\n <title>roi hover</title>\n <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">\n <g id="roi-hover">\n <rect id="Rectangle-Copy-24" stroke="#737373" stroke-width="12" fill="#737373" x="6" y="6" width="613" height="613" rx="135"></rect>\n <text id="ROI" font-family="HelveticaNeue-Bold, Helvetica Neue" font-size="258" font-weight="bold" fill="#FFFFFF">\n <tspan x="81.445" y="389">ROI</tspan>\n </text>\n </g>\n </g>\n</svg>',!1),this.button.addEventListener("mouseenter",(()=>{!1===t.doShowROITable&&this.setState(!0)})),this.button.addEventListener("mouseleave",(()=>{!1===t.doShowROITable&&this.setState(!1)})),this.button.addEventListener("click",(()=>this.buttonHandler(!t.doShowROITable))),this.setVisibility(!1)}buttonHandler(e){this.setState(e),this.browser.setROITableVisibility(e)}}class JF extends md{constructor(e,t){super(e,t,"Sample Info",wd,'<svg width="625px" height="625px" viewBox="0 0 625 625" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">\n <title>sample info</title>\n <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">\n <g id="sample-info">\n <rect id="Rectangle-Copy-6" stroke="#737373" stroke-width="12" fill="#FFFFFF" x="6" y="6" width="613" height="613" rx="135"></rect>\n <g id="Group-2" transform="translate(8, 149)">\n <rect id="Rectangle" fill="#8DD3C7" x="0" y="0" width="102" height="102"></rect>\n <rect id="Rectangle-Copy" fill="#FBB4AE" x="102" y="0" width="102" height="102"></rect>\n <rect id="Rectangle-Copy-8" fill="#7FC97F" x="204" y="0" width="102" height="102"></rect>\n <rect id="Rectangle-Copy-7" fill="#ADE2CF" x="306" y="0" width="102" height="102"></rect>\n <rect id="Rectangle-Copy-7" fill="#E41A1C" x="408" y="0" width="102" height="102"></rect>\n <rect id="Rectangle-Copy-7" fill="#3F70AE" x="510" y="0" width="102" height="102"></rect>\n </g>\n <g id="Group-2-Copy" transform="translate(8, 251)">\n <rect id="Rectangle" fill="#E41A1C" x="0" y="0" width="102" height="102"></rect>\n <rect id="Rectangle-Copy" fill="#377EB8" x="102" y="0" width="102" height="102"></rect>\n <rect id="Rectangle-Copy-8" fill="#FDB46B" x="204" y="0" width="102" height="102"></rect>\n <rect id="Rectangle-Copy-7" fill="#BC80BD" x="306" y="0" width="102" height="102"></rect>\n <rect id="Rectangle-Copy-7" fill="#FFFFB3" x="408" y="0" width="102" height="102"></rect>\n <rect id="Rectangle-Copy-7" fill="#ADE2CF" x="510" y="0" width="102" height="102"></rect>\n </g>\n <g id="Group-2-Copy-2" transform="translate(314, 404) scale(-1, 1) translate(-314, -404)translate(8, 353)">\n <rect id="Rectangle" fill="#1B9E77" x="0" y="0" width="102" height="102"></rect>\n <rect id="Rectangle-Copy" fill="#377EB8" x="102" y="0" width="102" height="102"></rect>\n <rect id="Rectangle-Copy-8" fill="#FDB46B" x="204" y="0" width="102" height="102"></rect>\n <rect id="Rectangle-Copy-7" fill="#BAD1E9" x="306" y="0" width="102" height="102"></rect>\n <rect id="Rectangle-Copy-7" fill="#4DAF4A" x="408" y="0" width="102" height="102"></rect>\n <rect id="Rectangle-Copy-7" fill="#CBF03E" x="510" y="0" width="102" height="102"></rect>\n </g>\n <rect id="Rectangle-Copy-10" stroke="#737373" stroke-width="12" x="6" y="6" width="613" height="613" rx="135"></rect>\n </g>\n </g>\n</svg>','<svg width="625px" height="625px" viewBox="0 0 625 625" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">\n <title>sample info hover</title>\n <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">\n <g id="sample-info-hover">\n <rect id="Rectangle-Copy-14" stroke="#737373" stroke-width="12" fill="#737373" x="6" y="6" width="613" height="613" rx="135"></rect>\n <g id="row-2" transform="translate(314, 404) scale(-1, 1) translate(-314, -404)translate(8, 353)">\n <rect id="Rectangle" fill="#1B9E77" x="0" y="0" width="102" height="102"></rect>\n <rect id="Rectangle-Copy" fill="#377EB8" x="102" y="0" width="102" height="102"></rect>\n <rect id="Rectangle-Copy-8" fill="#FDB46B" x="204" y="0" width="102" height="102"></rect>\n <rect id="Rectangle-Copy-7" fill="#BAD1E9" x="306" y="0" width="102" height="102"></rect>\n <rect id="Rectangle-Copy-7" fill="#4DAF4A" x="408" y="0" width="102" height="102"></rect>\n <rect id="Rectangle-Copy-7" fill="#CBF03E" x="510" y="0" width="102" height="102"></rect>\n </g>\n <g id="row-1" transform="translate(8, 251)">\n <rect id="Rectangle" fill="#E41A1C" x="0" y="0" width="102" height="102"></rect>\n <rect id="Rectangle-Copy" fill="#377EB8" x="102" y="0" width="102" height="102"></rect>\n <rect id="Rectangle-Copy-8" fill="#FDB46B" x="204" y="0" width="102" height="102"></rect>\n <rect id="Rectangle-Copy-7" fill="#BC80BD" x="306" y="0" width="102" height="102"></rect>\n <rect id="Rectangle-Copy-7" fill="#FFFFB3" x="408" y="0" width="102" height="102"></rect>\n <rect id="Rectangle-Copy-7" fill="#ADE2CF" x="510" y="0" width="102" height="102"></rect>\n </g>\n <g id="row-0" transform="translate(8, 149)">\n <rect id="Rectangle" fill="#8DD3C7" x="0" y="0" width="102" height="102"></rect>\n <rect id="Rectangle-Copy" fill="#FBB4AE" x="102" y="0" width="102" height="102"></rect>\n <rect id="Rectangle-Copy-8" fill="#7FC97F" x="204" y="0" width="102" height="102"></rect>\n <rect id="Rectangle-Copy-7" fill="#ADE2CF" x="306" y="0" width="102" height="102"></rect>\n <rect id="Rectangle-Copy-7" fill="#E41A1C" x="408" y="0" width="102" height="102"></rect>\n <rect id="Rectangle-Copy-7" fill="#3F70AE" x="510" y="0" width="102" height="102"></rect>\n </g>\n <rect id="Rectangle-Copy-15" stroke="#737373" stroke-width="12" x="6" y="6" width="613" height="613" rx="135"></rect>\n <rect id="scrim" fill="#000000" style="mix-blend-mode: hue;" x="8" y="149" width="612" height="306"></rect>\n </g>\n </g>\n</svg>',!1),this.showSampleInfo=!1,this.button.addEventListener("mouseenter",(()=>{!1===this.showSampleInfo&&this.setState(!0)})),this.button.addEventListener("mouseleave",(()=>{!1===this.showSampleInfo&&this.setState(!1)})),this.button.addEventListener("click",(()=>{this.performClickWithState(t,void 0)}))}performClickWithState(e,t){this.showSampleInfo=void 0===t?!this.showSampleInfo:t;e.columnContainer.querySelector(".igv-sample-info-column").style.display=!1===this.showSampleInfo?"none":"flex",this.setState(this.showSampleInfo),e.layoutChange()}setButtonVisibility(e){this.showSampleInfo=e,this.setState(this.showSampleInfo),!0===this.showSampleInfo?this.show():this.hide()}}class ev extends md{constructor(e,t){super(e,t,"Sample Names",'<svg width="90px" height="20px" viewBox="0 0 90 20" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">\n <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">\n <g id="igv-navbar-button-group">\n <rect id="Rectangle" x="0.5" y="0.5" width="89" height="18" rx="6"></rect>\n <text id="igv-text-button-label" x="50%" y="50%" dy=".1em" font-family="Helvetica" font-size="12" font-weight="normal" letter-spacing="-0.372">\n <tspan id="igv-navbar-button-label"></tspan>\n </text>\n </g>\n </g>\n</svg>','<svg width="625px" height="625px" viewBox="0 0 625 625" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">\n <title>sample names</title>\n <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">\n <g id="sample-names" stroke="#737373">\n <rect id="Rectangle-Copy-13" stroke-width="12" fill="#FFFFFF" x="6" y="6" width="613" height="613" rx="135"></rect>\n <line x1="80" y1="465" x2="541" y2="464.5" id="Line-3-Copy-3" stroke-width="32"></line>\n <line x1="80" y1="312.5" x2="542" y2="313" id="Line-3" stroke-width="32"></line>\n <line x1="80" y1="158" x2="541" y2="158" id="Line-3-Copy" stroke-width="32"></line>\n </g>\n </g>\n</svg>','<svg width="625px" height="625px" viewBox="0 0 625 625" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">\n <title>sample names hover</title>\n <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">\n <g id="sample-names-hover">\n <rect id="Rectangle-Copy-18" stroke="#737373" stroke-width="12" fill="#737373" x="6" y="6" width="613" height="613" rx="135"></rect>\n <line x1="80" y1="465" x2="541" y2="464.5" id="Line-3-Copy-3" stroke="#FFFFFF" stroke-width="32" fill="#FFFFFF"></line>\n <line x1="80" y1="312.5" x2="542" y2="313" id="Line-3" stroke="#FFFFFF" stroke-width="32" fill="#FFFFFF"></line>\n <line x1="80" y1="158" x2="541" y2="158" id="Line-3-Copy" stroke="#FFFFFF" stroke-width="32" fill="#FFFFFF"></line>\n </g>\n </g>\n</svg>',t.config.showSampleNames),this.button.addEventListener("mouseenter",(()=>{!1===t.showSampleNames&&this.setState(!0)})),this.button.addEventListener("mouseleave",(()=>{!1===t.showSampleNames&&this.setState(!1)})),this.button.addEventListener("click",(()=>{this.performClickWithState(t,void 0)})),!0===t.config.showSampleNameButton?this.show():this.hide()}performClickWithState(e,t){e.showSampleNames=void 0===t?!e.showSampleNames:t;e.columnContainer.querySelector(".igv-sample-name-column").style.display=!1===e.showSampleNames?"none":"flex",this.setState(e.showSampleNames),e.layoutChange()}}class tv{constructor(e,i){this.parent=e,this.popover=t({class:"igv-ui-dropdown"}),e.appendChild(this.popover),this.popoverContent=t(),this.popover.appendChild(this.popoverContent),this.popover.style.display="none",this.shim=i}configure(e){if(0===e.length)return;const t=ro(e,this.popover);for(const{element:e}of t)this.popoverContent.appendChild(e)}present(e){this.popover.style.display="block";let{x:t,y:i}=a(e,this.parent);this.popover.style.left=`${t+this.shim.left}px`,this.popover.style.top=`${i+this.shim.top}px`}_present(e){this.popover.style.display="block";let{x:t,y:i,width:n}=a(e,this.parent);t+=this.shim.left,i+=this.shim.top,this.popover.style.top=`${i}px`;const{width:r}=this.popover.getBoundingClientRect(),s=t+r,o=s-n;this.popover.style.left=`${s>n?t-o:t}px`}dismiss(){this.popover.style.display="none"}}class iv extends md{constructor(e,t){super(e,t,"Save Image",wd,'<svg width="625px" height="625px" viewBox="0 0 625 625" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">\n <title>save image</title>\n <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">\n <g id="save-image">\n <rect id="border" stroke="#737373" stroke-width="12" fill="#FFFFFF" x="6" y="6" width="613" height="613" rx="135"></rect>\n <g id="frame" transform="translate(66, 66)" fill="#737373" fill-rule="nonzero">\n <path d="M54.75,493 C39.69375,493 26.8046875,487.639062 16.0828125,476.917187 C5.3609375,466.195312 0,453.30625 0,438.25 L0,274 L54.75,274 L54.75,438.25 L219,438.25 L219,493 L54.75,493 Z" id="Path"></path>\n <path d="M274,493 L274,438.25 L438.25,438.25 L438.25,274 L493,274 L493,438.25 C493,453.30625 487.639062,466.195312 476.917187,476.917187 C466.195312,487.639062 453.30625,493 438.25,493 L274,493 Z" id="Path"></path>\n <path d="M0,219 L0,54.75 C0,39.69375 5.3609375,26.8046875 16.0828125,16.0828125 C26.8046875,5.3609375 39.69375,0 54.75,0 L219,0 L219,54.75 L54.75,54.75 L54.75,219 L0,219 Z" id="Path"></path>\n <path d="M438.25,219 L438.25,54.75 L274,54.75 L274,0 L438.25,0 C453.30625,0 466.195312,5.3609375 476.917187,16.0828125 C487.639062,26.8046875 493,39.69375 493,54.75 L493,219 L438.25,219 Z" id="Path"></path>\n </g>\n <rect id="border-hold-out-matte" fill="#FFFFFF" x="91" y="90" width="444" height="444" rx="38"></rect>\n <g id="artwork" transform="translate(148, 176)" fill="#737373" fill-rule="nonzero">\n <polygon id="Path" points="0 273 82.25 163.4 143.9375 245.6 226.1875 136 329 273"></polygon>\n <path d="M260,82 C248.155556,82 238.361111,78.1277778 230.616667,70.3833333 C222.872222,62.6388889 219,52.8444444 219,41 C219,29.1555556 222.872222,19.3611111 230.616667,11.6166667 C238.361111,3.87222222 248.155556,0 260,0 C271.844444,0 281.638889,3.87222222 289.383333,11.6166667 C297.127778,19.3611111 301,29.1555556 301,41 C301,52.8444444 297.127778,62.6388889 289.383333,70.3833333 C281.638889,78.1277778 271.844444,82 260,82 Z" id="Path"></path>\n </g>\n </g>\n </g>\n</svg>','<svg width="625px" height="625px" viewBox="0 0 625 625" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">\n <title>save image</title>\n <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">\n <g id="save-image">\n <rect id="border" stroke="#737373" stroke-width="12" fill="#FFFFFF" x="6" y="6" width="613" height="613" rx="135"></rect>\n <g id="frame" transform="translate(66, 66)" fill="#737373" fill-rule="nonzero">\n <path d="M54.75,493 C39.69375,493 26.8046875,487.639062 16.0828125,476.917187 C5.3609375,466.195312 0,453.30625 0,438.25 L0,274 L54.75,274 L54.75,438.25 L219,438.25 L219,493 L54.75,493 Z" id="Path"></path>\n <path d="M274,493 L274,438.25 L438.25,438.25 L438.25,274 L493,274 L493,438.25 C493,453.30625 487.639062,466.195312 476.917187,476.917187 C466.195312,487.639062 453.30625,493 438.25,493 L274,493 Z" id="Path"></path>\n <path d="M0,219 L0,54.75 C0,39.69375 5.3609375,26.8046875 16.0828125,16.0828125 C26.8046875,5.3609375 39.69375,0 54.75,0 L219,0 L219,54.75 L54.75,54.75 L54.75,219 L0,219 Z" id="Path"></path>\n <path d="M438.25,219 L438.25,54.75 L274,54.75 L274,0 L438.25,0 C453.30625,0 466.195312,5.3609375 476.917187,16.0828125 C487.639062,26.8046875 493,39.69375 493,54.75 L493,219 L438.25,219 Z" id="Path"></path>\n </g>\n <rect id="border-hold-out-matte" fill="#FFFFFF" x="91" y="90" width="444" height="444" rx="38"></rect>\n <g id="artwork" transform="translate(148, 176)" fill="#737373" fill-rule="nonzero">\n <polygon id="Path" points="0 273 82.25 163.4 143.9375 245.6 226.1875 136 329 273"></polygon>\n <path d="M260,82 C248.155556,82 238.361111,78.1277778 230.616667,70.3833333 C222.872222,62.6388889 219,52.8444444 219,41 C219,29.1555556 222.872222,19.3611111 230.616667,11.6166667 C238.361111,3.87222222 248.155556,0 260,0 C271.844444,0 281.638889,3.87222222 289.383333,11.6166667 C297.127778,19.3611111 301,29.1555556 301,41 C301,52.8444444 297.127778,62.6388889 289.383333,70.3833333 C281.638889,78.1277778 271.844444,82 260,82 Z" id="Path"></path>\n </g>\n </g>\n </g>\n</svg>',!1),this.button.addEventListener("mouseenter",(()=>this.setState(!0))),this.button.addEventListener("mouseleave",(()=>{for(const e of this.button.querySelectorAll("div"))if("block"===e.style.display)return;this.setState(!1)})),this.dropdown=new tv(this.button.parentNode,{top:24,left:-88});const i=[{label:"Save as SVG",click:e=>{this.browser.saveSVGtoFile("igvjs.svg"),this.dropdown.dismiss()}},{label:"Save as PNG",click:e=>{this.browser.savePNGtoFile("igvjs.png"),this.dropdown.dismiss()}}];this.dropdown.configure(i),this.button.addEventListener("click",(e=>{let t;if(e.target===this.button)t=!0;else if(e.target.closest("svg")){e.target.closest("div")===this.button&&(t=!0)}!0===t&&("none"===this.dropdown.popover.style.display?this.dropdown.present(e):this.dropdown.dismiss())})),this.setVisibility(t.config.showSVGButton)}navbarResizeHandler(e){this.dropdown.dismiss(),super.navbarResizeHandler(e)}}const nv=function(e,i,n){const r=t({class:"igv-navbar-button"});e.appendChild(r),r.textContent=n.label,r.addEventListener("click",(()=>n.callback(i)))};let rv=23,sv=0;class ov{constructor(e,i,n){this.browser=i,this.zoomContainer=t({class:"igv-zoom-widget"}),n.appendChild(this.zoomContainer),this.zoomOutButton=t(),this.zoomContainer.appendChild(this.zoomOutButton),this.zoomOutButton.appendChild(l("minus-circle")),this.zoomOutButton.addEventListener("click",(()=>{i.zoomOut()}));const r=t();this.zoomContainer.appendChild(r),this.slider=document.createElement("input"),this.slider.type="range",this.slider.min="0",this.slider.max=`${rv}`,r.appendChild(this.slider),this.slider.addEventListener("change",(e=>{e.preventDefault(),e.stopPropagation();const t=i.referenceFrameList[0],{bpLength:n}=t.genome.getChromosome(t.chr),{end:r,start:s}=t,o=r-s,a=n/Math.pow(2,e.target.valueAsNumber);i.zoomWithScaleFactor(a/o)})),this.zoomInButton=t(),this.zoomContainer.appendChild(this.zoomInButton),this.zoomInButton.appendChild(l("plus-circle")),this.zoomInButton.addEventListener("click",(()=>{i.zoomIn()})),i.on("locuschange",(e=>{this.browser.isMultiLocusMode()?this.disable():(this.enable(),this.update(e))}))}update(e){if(this.slider){const t=e[0],{bpLength:i}=t.genome.getChromosome(t.chr),{start:n,end:r}=t;rv=Math.ceil(Math.log2(i/this.browser.minimumBases())),this.slider.max=`${rv}`;const s=i/(r-n);sv=Math.log2(s),this.slider.value=`${Math.round(sv)}`}}enable(){this.slider&&(this.slider.disabled=!1)}disable(){this.slider&&(this.slider.disabled=!0)}hide(){this.zoomContainer.style.display="none"}show(){this.zoomContainer.style.display="block"}hideSlider(){this.slider&&(this.slider.style.display="none")}showSlider(){this.slider&&(this.slider.style.display="block")}}class av{constructor(e,t){this.browser=t,this.config=e,this.currentClass="igv-navbar-text-button";const i=document.createElement("div");i.className="igv-navbar",this.navigation=i;const n=document.createElement("div");n.className="igv-navbar-left-container",i.appendChild(n),this.navbarLeftContainer=n;const r=document.createElement("div");r.className="igv-logo",n.appendChild(r);const s=function(){const e=document.createElementNS("http://www.w3.org/2000/svg","svg");e.setAttribute("width","690px"),e.setAttribute("height","324px"),e.setAttribute("viewBox","0 0 690 324"),e.setAttribute("version","1.1"),e.setAttribute("xmlns","http://www.w3.org/2000/svg"),e.setAttribute("xmlns:xlink","http://www.w3.org/1999/xlink");const t=document.createElementNS("http://www.w3.org/2000/svg","title");t.textContent="IGV",e.appendChild(t);const i=document.createElementNS("http://www.w3.org/2000/svg","g");i.setAttribute("id","Page-1"),i.setAttribute("stroke","none"),i.setAttribute("stroke-width","1"),i.setAttribute("fill","none"),i.setAttribute("fill-rule","evenodd"),e.appendChild(i);const n=document.createElementNS("http://www.w3.org/2000/svg","g");n.setAttribute("id","IGV"),n.setAttribute("fill","#666666"),i.appendChild(n);const r=document.createElementNS("http://www.w3.org/2000/svg","polygon");r.setAttribute("id","Path"),r.setAttribute("points","379.54574 8.00169252 455.581247 8.00169252 515.564813 188.87244 532.884012 253.529506 537.108207 253.529506 554.849825 188.87244 614.833392 8.00169252 689.60164 8.00169252 582.729511 320.722144 486.840288 320.722144"),n.appendChild(r);const s=document.createElementNS("http://www.w3.org/2000/svg","path");s.setAttribute("d","M261.482414,323.793286 C207.975678,323.793286 168.339046,310.552102 142.571329,284.069337 C116.803612,257.586572 103.919946,217.158702 103.919946,162.784513 C103.919946,108.410325 117.437235,67.8415913 144.472217,41.0770945 C171.507199,14.3125977 212.903894,0.930550071 268.663545,0.930550071 C283.025879,0.930550071 298.232828,1.84616386 314.284849,3.6774189 C330.33687,5.50867394 344.839793,7.97378798 357.794056,11.072835 L357.794056,68.968378 C339.48912,65.869331 323.578145,63.5450806 310.060654,61.9955571 C296.543163,60.4460336 284.574731,59.6712835 274.154998,59.6712835 C255.850062,59.6712835 240.502308,61.4320792 228.111274,64.9537236 C215.720241,68.4753679 205.793482,74.2507779 198.330701,82.2801269 C190.867919,90.309476 185.587729,100.87425 182.48997,113.974767 C179.392212,127.075284 177.843356,143.345037 177.843356,162.784513 C177.843356,181.942258 179.251407,198.000716 182.067551,210.960367 C184.883695,223.920018 189.671068,234.41436 196.429813,242.443709 C203.188559,250.473058 212.059279,256.178037 223.042241,259.558815 C234.025202,262.939594 247.683295,264.629958 264.01693,264.629958 C268.241146,264.629958 273.098922,264.489094 278.590403,264.207362 C284.081883,263.925631 289.643684,263.50304 295.275972,262.939577 L295.275972,159.826347 L361.595831,159.826347 L361.595831,308.579859 C344.698967,313.087564 327.239137,316.750019 309.215815,319.567334 C291.192494,322.38465 275.281519,323.793286 261.482414,323.793286 L261.482414,323.793286 L261.482414,323.793286 Z"),s.setAttribute("id","Path"),n.appendChild(s);const o=document.createElementNS("http://www.w3.org/2000/svg","polygon");return o.setAttribute("id","Path"),o.setAttribute("points","0.81355666 5.00169252 73.0472883 5.00169252 73.0472883 317.722144 0.81355666 317.722144"),n.appendChild(o),e}();s.style.width="34px",s.style.height="32px",r.appendChild(s),this.currentGenome=document.createElement("div"),this.currentGenome.className="igv-current-genome",n.appendChild(this.currentGenome),this.currentGenome.textContent="";const o=document.createElement("div");o.className="igv-navbar-genomic-location",n.appendChild(o),this.chromosomeSelectWidget=new GF(t,o),!1!==e.showChromosomeWidget?this.chromosomeSelectWidget.show():this.chromosomeSelectWidget.hide();const a=document.createElement("div");a.className="igv-locus-size-group",o.appendChild(a);const c=document.createElement("div");c.className="igv-search-container",a.appendChild(c),this.searchInput=document.createElement("input"),this.searchInput.className="igv-search-input",this.searchInput.type="text",this.searchInput.placeholder="Locus Search",c.appendChild(this.searchInput),this.searchInput.addEventListener("keyup",(e=>{e.stopImmediatePropagation()})),this.searchInput.addEventListener("change",(()=>{t.doSearch(this.searchInput.value)}));const h=document.createElement("div");h.className="igv-search-icon-container",c.appendChild(h);const d=l("search");h.appendChild(d),h.addEventListener("click",(()=>{t.doSearch(this.searchInput.value)})),this.windowSizePanel=new WF(a,t);const u=document.createElement("div");u.className="igv-navbar-right-container",i.appendChild(u),this.navbarRightContainer=u;const f=document.createElement("div");f.className="igv-navbar-toggle-button-container",u.appendChild(f),this.toggleButtonContainer=f,this.overlayTrackButton=new yd(f,t),this.overlayTrackButton.setVisibility(!1);const p=!1!==e.showMultiSelectButton;if(this.multiTrackSelectButton=new $F(f,t,this,p),this.cursorGuideButton=new KF(f,t),this.centerLineButton=new YF(f,t),this.trackLabelControl=new XF(f,t),this.roiTableControl=new ZF(f,t),this.sampleInfoControl=new JF(f,t),this.sampleNameControl=new ev(f,t),!0===e.showSVGButton&&(this.saveImageControl=new iv(f,t)),e.customButtons)for(let i of e.customButtons)new nv(f,t,i);this.zoomWidget=new ov(e,t,u),!1===e.showNavigation&&(this.navigation.style.display="none")}navbarDidResize(){const e=this.currentNavbarButtonClass();"igv-navbar-text-button"===e&&(this.textButtonContainerWidth=this.navbarRightContainer.getBoundingClientRect().width);const t=this.browser,i=t.isMultiLocusWholeGenomeView()||t.referenceFrameList&&Mh.isWholeGenomeView(t.referenceFrameList[0].chr);i?this.windowSizePanel.hide():this.windowSizePanel.show();const{x:n,width:r}=this.navbarLeftContainer.getBoundingClientRect(),s=n+r,{x:o}=this.navbarRightContainer.getBoundingClientRect();let a;if("igv-navbar-text-button"===e&&o-s<8)a="igv-navbar-icon-button";else if(this.textButtonContainerWidth&&"igv-navbar-icon-button"===e){this.navigation.offsetWidth-s-this.textButtonContainerWidth>8&&(a="igv-navbar-text-button")}let c;a&&e!==a&&(this.currentClass=a,this.browser.fireEvent("navbar-resize",[a])),c=i?"igv-zoom-widget-hidden":this.navigation.offsetWidth>860?"igv-zoom-widget":"igv-zoom-widget-900",this.zoomWidget.zoomContainer.className="",this.zoomWidget.zoomContainer.classList.add(c)}updateGenome(e){let t=e.id&&e.id.length<20?e.id:`${e.id.substring(0,8)}...${e.id.substring(e.id.length-8)}`;this.currentGenome.textContent=t,this.currentGenome.setAttribute("title",e.description);!1!==this.config.showChromosomeWidget&&!1!==e.showChromosomeWidget&&e.chromosomeNames&&e.chromosomeNames.length>1?(this.chromosomeSelectWidget.update(e),this.chromosomeSelectWidget.show()):this.chromosomeSelectWidget.hide()}updateLocus(e,t){this.searchInput&&(this.searchInput.value=e),this.chromosomeSelectWidget&&(this.chromosomeSelectWidget.select.value=t)}currentNavbarButtonClass(){return this.currentClass}setEnableTrackSelection(e){this.multiTrackSelectButton.setMultiTrackSelection(e)}getEnableTrackSelection(){return this.multiTrackSelectButton.enableMultiTrackSelection}hide(){this.navigation.style.display="none"}show(){this.navigation.style.display="flex"}}const cv=(e,t)=>{const i=0===e?t.nextElementSibling:t.previousElementSibling;t.remove(),i.remove()},lv=e=>{const i=t({class:"igv-column-shim"});eo(i,e);const n=t({class:"igv-column"});return eo(n,i),n},hv=(e,i)=>{for(let n=0;n<i;n++){const r=t({class:"igv-column"});if(Js(r,e),i>1&&n>0){Js(t({class:"igv-column-shim"}),r)}}};class dv{constructor(e,i,n){this.browser=e,this.referenceFrame=i,this.column=n,this.container=t({class:"igv-center-line"}),n.appendChild(this.container),e.doShowCenterLine?this.show():this.hide()}repaint(){if(this.referenceFrame){if(1/this.referenceFrame.bpPerPixel>1){const e=Math.floor(this.referenceFrame.toPixels(1));this.container.style.width=`${e}px`,this.container.classList.remove("igv-center-line-thin"),this.container.classList.add("igv-center-line-wide")}else this.container.style.width="1px",this.container.classList.remove("igv-center-line-wide"),this.container.classList.add("igv-center-line-thin")}}show(){this.isVisible=!0,this.container.style.display="block",this.repaint()}hide(){this.isVisible=!1,this.container.style.display="none"}resize(){this.repaint()}}const uv=function(e,i){this.button=t({class:"igv-navbar-button"}),e.appendChild(this.button),this.button.textContent="circular view",this.button.addEventListener("click",(()=>{i.circularViewVisible=!i.circularViewVisible})),this.browser=i,this.setVisibility(i.config.showCircularViewButton),this.setState(i.circularViewVisible)};uv.prototype.setVisibility=function(e){!0===e?this.show():this.hide()},uv.prototype.setState=function(e){!0===e?this.button.classList.add("igv-navbar-button-clicked"):this.button.classList.remove("igv-navbar-button-clicked")},uv.prototype.show=function(){this.button.style.display="block",this.setState(this.browser.circularViewVisible)},uv.prototype.hide=function(){this.button.style.display="none"};class fv{constructor(e,i){this.browser=e,this.container=t({class:"igv-roi-menu"}),i.appendChild(this.container);const n=t();this.container.appendChild(n),u(n,(()=>this.container.style.display="none")),this.body=t(),this.container.appendChild(this.body),this.container.style.display="none"}async present(e,t,i,n,r,s){const o=this.menuItems(e,t,i,n,r,s);this.browser.menuPopup.presentTrackContextMenu(i,o)}menuItems(e,t,i,n,r,s){const o=e.name?[`<b>${e.name}</b><br/>`]:[];return"name"in t&&o.push(`<b>ROI Set: ${t.name}</b>`),o.length>0&&o.push("<hr/>"),t.isUserDefined&&o.push({label:"Set description ...",click:()=>{const t={label:"Description",value:e.name||"",callback:()=>{const t=this.browser.inputDialog.value||"";e.name=t.trim(),this.browser.roiManager.repaintTable()}};this.browser.inputDialog.present(t,i)}}),to()&&e.end-e.start<1e6&&o.push({label:"Copy reference sequence",click:async()=>{this.container.style.display="none";let t=await this.browser.genome.getSequence(e.chr,e.start,e.end);t||(t="Unknown sequence");try{await navigator.clipboard.writeText(t)}catch(e){console.error(e),this.browser.alert.present(`error copying sequence to clipboard ${e}`)}}}),e.end-e.start<=25e3&&o.push({label:"BLAT reference sequence",click:async()=>{this.container.style.display="none";const{chr:t,start:i,end:n}=e;let r=await this.browser.genome.getSequence(t,i,n);if(r){const e=`blat: ${t}:${i+1}-${n}`,s=`blat: ${t}:${i+1}-${n}`;oh({sequence:r,browser:this.browser,name:e,title:s})}}}),t.isUserDefined&&o.push("<hr/>",{label:"Delete",click:async()=>{t.removeFeature(e);const i=await t.getAllFeatures();0===Object.keys(i).length&&n.deleteUserDefinedROISet(),n.deleteRegionWithKey(s.dataset.region,r),n.repaintTable()}}),o}dispose(){this.container.innerHTML=""}}class pv extends th{constructor(e){const t={browser:e,parent:e.columnContainer,headerTitle:"Regions of Interest",dismissHandler:()=>e.roiTableControl.buttonHandler(!1),gotoButtonHandler:pv.gotoButtonHandler};t.columnFormat=pv.getColumnFormatConfiguration(!0),super(Object.assign({width:"640px"},t))}tableRowDOM(e){const i=t({class:"igv-roi-table-row"}),{setName:n,feature:r}=e;i.dataset.region=bv(r.chr,r.start,r.end);let s=[r.chr,F(r.start),F(r.end),r.name||"",n];4===this.columnFormat.length&&(s=s.slice(0,4));for(let e=0;e<s.length;e++){const n=t();i.appendChild(n),n.style.width=this.columnFormat[e].width,n.innerText=s[e]}return this.tableRowDOMHelper(i),i}renderTable(e){if(Array.from(this.tableRowContainer.querySelectorAll(".igv-roi-table-row")).forEach((e=>e.remove())),e.length>0){const t=e.sort(((e,t)=>e.feature.chr.localeCompare(t.feature.chr)||e.feature.start-t.feature.start||e.feature.end-t.feature.end));for(let e of t){const t=this.tableRowDOM(e);this.tableRowContainer.appendChild(t)}}}set footerDOM(e){super.footerDOM=e,this.gotoButton.textContent="Go to selected region(s)";const i=t({class:"igv-roi-table-button"});this._footerDOM.appendChild(i),i.id="igv-roi-hide-show-button",i.textContent="Copy Sequence",i.title="One region only of max size 1 mb",this.copySequenceButton=i,gv(this.copySequenceButton,!1),this.boundCopySequenceButtonHandler=async function(e){e.preventDefault(),e.stopPropagation();const t=this.tableDOM.querySelectorAll(".igv-roi-table-row-selected");if(t.length>0){const e=[];for(let i of t){const{locus:t}=vv(i.dataset.region);e.push(t)}for(let e of this.tableDOM.querySelectorAll(".igv-roi-table-row"))e.classList.remove("igv-roi-table-row-selected");if(this.setTableRowSelectionState(!1),e.length>0){const{chr:t,start:i,end:n}=yF(e[0],this.browser.isSoftclipped()),r=await this.browser.genome.getSequence(t,i,n);await navigator.clipboard.writeText(r)}}}.bind(this),this.copySequenceButton.addEventListener("click",this.boundCopySequenceButtonHandler);const n=t({class:"igv-roi-table-button"});this._footerDOM.appendChild(n),n.id="igv-roi-hide-show-button",n.textContent="Hide Overlays",this.toggleROIButton=n,this.boundToggleDisplayButtonHandler=function(e){e.preventDefault(),e.stopPropagation(),this.roiManager.toggleROIs()}.bind(this),this.toggleROIButton.addEventListener("click",this.boundToggleDisplayButtonHandler)}get roiManager(){return this.browser.roiManager}setTableRowSelectionState(e){super.setTableRowSelectionState(e);const t=this.tableDOM.querySelectorAll(".igv-roi-table-row-selected");if(t.length>0&&t.length<2){const{locus:e}=vv(t[0].dataset.region),{chr:i,start:n,end:r}=yF(e,this.browser.isSoftclipped());gv(this.copySequenceButton,r-n<1e6)}else gv(this.copySequenceButton,!1)}dispose(){document.removeEventListener("click",this.boundGotoButtonHandler),document.removeEventListener("click",this.boundCopySequenceButtonHandler),document.removeEventListener("click",this.boundToggleDisplayButtonHandler),this.browser.roiTableControl.buttonHandler(!1),super.dispose()}static getColumnFormatConfiguration(e){return!0===e?[{label:"Chr",width:"20%"},{label:"Start",width:"15%"},{label:"End",width:"15%"},{label:"Description",width:"30%"},{label:"ROI Set",width:"20%"}]:[{label:"Chr",width:"25%"},{label:"Start",width:"20%"},{label:"End",width:"20%"},{label:"Description",width:"35%"}]}static gotoButtonHandler(e){e.stopPropagation();const t=this.tableDOM.querySelectorAll(".igv-roi-table-row-selected"),i=[];for(let e of t){const{locus:t}=vv(e.dataset.region);i.push(t)}for(let e of this.tableDOM.querySelectorAll(".igv-roi-table-row"))e.classList.remove("igv-roi-table-row-selected");this.setTableRowSelectionState(!1),i.length>0&&this.browser.search(i.join(" "))}}function gv(e,t){e.style.pointerEvents=t?"auto":"none",e.style.color=Wn(t?"licorice":"silver"),e.style.borderColor=Wn(t?"licorice":"silver")}class mv{constructor(e){this.browser=e,this.roiMenu=new fv(e,e.columnContainer),this.roiTable=new pv(e,e.columnContainer),this.top=0,this.roiSets=[],this.showOverlays=!0,this.boundLocusChangeHandler=wv.bind(this),e.on("locuschange",this.boundLocusChangeHandler)}async reset(){this.roiSets.length>0&&this.browser.roiTableControl.setVisibility(!0);const e=this.roiSets.map((e=>this.renderROISet({browser:this.browser,pixelTop:this.top,roiSet:e})));e.length>0&&await Promise.all(e);const t=await this.getTableRecords();this.roiTable.renderTable(t),this.roiSets.length>0&&this.setOverlayVisibility(this.showOverlays)}setOverlayVisibility(e){const t=this.browser.columnContainer.querySelectorAll(".igv-roi-region");for(let i=0;i<t.length;i++){const n=t[i];n.style.backgroundColor=e?n.dataset.color:"rgba(0, 0, 0, 0)"}this.roiTable.toggleROIButton.textContent=!1===e?"Show Overlays":"Hide Overlays"}async loadROI(e,t){const i=Array.isArray(e)?e:[e];i.length>0&&!1===i[0].isVisible&&(this.showOverlays=!1);for(let e of i)!e.name&&e.url&&(e.name=await Ks(e.url)),e.url&&!e.format&&(e.format=await wf(e)),this.roiSets.push(new qh(e,t));await this.reset()}clearROIs(){this.roiTable.clearTable();const e=this.browser.columnContainer.querySelectorAll(".igv-roi-region");for(let t of e)t.remove();for(let e of this.roiSets)e.dispose();this.roiSets=[]}async getTableRecords(){const e=[];for(let t of this.roiSets){const i=t.name||"",n=await t.getAllFeatures();for(let t of Object.keys(n))for(let r of n[t])e.push({setName:i,feature:r})}return e}presentTable(){this.roiTable.present()}async repaintTable(){const e=await this.getTableRecords();this.roiTable.renderTable(e)}dismissTable(){this.roiTable.dismiss()}roiTableIsVisible(){return this.roiTable.isVisible()}async updateUserDefinedROISet(e){let t=await this.getUserDefinedROISet();void 0===t&&(t=this.initializeUserDefinedROISet()),t.addFeature(e),this.setROITableButtonVisibility(!0),await this.renderROISet({browser:this.browser,pixelTop:this.top,roiSet:t});const i=await this.getTableRecords();this.roiTable.renderTable(i)}setROITableButtonVisibility(e){this.browser.roiTableControl.setVisibility(e)}toggleROIs(){this.showOverlays=!this.showOverlays,this.setOverlayVisibility(this.showOverlays)}async renderAllROISets(){for(let e of this.roiSets)await this.renderROISet({browser:this.browser,pixelTop:this.top,roiSet:e})}async renderROISet({browser:e,pixelTop:t,roiSet:i}){const n=e.columnContainer.querySelectorAll(".igv-column");for(let r=0;r<n.length;r++){let{chr:s,start:o,end:a,bpPerPixel:c}=e.referenceFrameList[r];const l=n[r].querySelectorAll(".igv-roi-region");for(let e of l){const t=e.dataset.region,{chr:i,start:n,end:r}=vv(t);(i!==s||r<o||n>a)&&e.remove()}const h=await i.getFeatures(s,o,a);if(h)for(let l of h){const h=bv(s,l.start,l.end),{x:d,width:u}=Qh(Math.max(o,l.start),Math.min(a,l.end),o,c),f=n[r].querySelector(Fv(h));if(f)f.style.left=`${d}px`,f.style.width=`${u}px`;else{const s=this.createRegionElement(e.columnContainer,t,d,u,i,h,l);n[r].appendChild(s)}}}}createRegionElement(e,i,n,r,s,o,c){const l=t({class:"igv-roi-region"});l.style.top=`${i}px`,l.style.left=`${n}px`,l.style.width=`${r}px`;const h=`${this.getROIRegionTopMargin()}px`;l.style.marginTop=h,l.dataset.color=s.color,l.dataset.region=o,this.showOverlays?l.style.backgroundColor=s.color:l.style.backgroundColor="rgba(0, 0, 0, 0)";const d=t();return l.appendChild(d),d.style.backgroundColor=s.headerColor,d.addEventListener("click",(t=>{t.preventDefault(),t.stopPropagation(),a(t,e),this.roiMenu.present(c,s,t,this,e,l)})),l}updateROIRegionPositions(){const e=`${this.getROIRegionTopMargin()}px`,t=this.browser.columnContainer.querySelectorAll(".igv-column");for(let i=0;i<t.length;i++){const n=t[i].querySelectorAll(".igv-roi-region");for(let t=0;t<n.length;t++)n[t].style.marginTop=e}}getROIRegionTopMargin(){const e=this.browser.findTracks((e=>new Set(["ideogram","ruler"]).has(e.type))),[t,i]=e.map((e=>e.trackView.viewports[0].viewportElement)).map((e=>function(e){const t=window.getComputedStyle(e),i=parseInt(t.marginTop),n=parseInt(t.marginBottom),{top:r,bottom:s,height:o}=e.getBoundingClientRect();return{top:Math.floor(r)-i,bottom:Math.floor(s)+n,height:Math.floor(o)+i+n}}(e)));return(t?t.height:0)+(i?i.height:0)+-.5}renderSVGContext(e,t,{deltaX:i,deltaY:n}){for(const r of e.querySelectorAll(".igv-roi-region")){const{x:e,y:s,width:o,height:a}=r.getBoundingClientRect();t.fillStyle=r.style.backgroundColor,t.fillRect(e-i,s+n,o,a);const c=r.querySelector("div"),{x:l,y:h,width:d,height:u}=c.getBoundingClientRect();t.fillStyle=c.style.backgroundColor,t.fillRect(l-i,h+n,d,u)}}getUserDefinedROISet(){return this.roiSets.find((e=>!0===e.isUserDefined))}deleteUserDefinedROISet(){this.roiSets=this.roiSets.filter((e=>!0!==e.isUserDefined))}initializeUserDefinedROISet(){const e=new qh({name:"user defined",isUserDefined:!0,features:[]},this.browser.genome);return this.roiSets.push(e),e}async deleteRegionWithKey(e,t){t.querySelectorAll(Fv(e)).forEach((e=>e.remove()));0===(await this.getTableRecords()).length&&(this.browser.roiTableControl.buttonHandler(!1),this.setROITableButtonVisibility(!1))}toJSON(){return this.roiSets.map((e=>e.toJSON()))}dispose(){this.browser.off("locuschange",this.boundLocusChangeHandler);const e=this.browser.columnContainer.querySelectorAll(".igv-roi-region");for(let t of e)t.remove();this.roiMenu&&this.roiMenu.dispose(),this.roiTable&&this.roiTable.dispose();for(let e of this.roiSets)e.dispose();for(let e of Object.keys(this))this[e]=void 0}}function wv(){this.renderAllROISets()}function bv(e,t,i){return`${e}-${t}-${i}`}function Fv(e){return`[data-region="${e}"]`}function vv(e){let t=e.split("-"),i=parseInt(t.pop()),n=parseInt(t.pop()),r=t.join("-");return{chr:r,start:n,end:i,locus:`${r}:${n}-${i}`,bedRecord:`${r}\t${n}\t${i}`}}class yv{constructor(e,t){this.name=e.name,this.featureSource=e.featureSource||Hl(e,t),this.color=e.color||Oh}async getFeatures(e,t,i){return this.featureSource.getFeatures({chr:e,start:t,end:i})}draw(e){const{context:t,bpPerPixel:i,bpStart:n,pixelTop:r,pixelHeight:s,pixelWidth:o,features:a}=e;if(!a)return;const c=n+o*i+1;for(let{start:e,end:o}of a){if(o<n)continue;if(e>c)break;const{x:a,width:l}=Qh(e,o,n,i);fr.fillRect(t,a,r,l,s,{fillStyle:this.color})}}}class Av{aliasRecordCache=new Map;constructor(e,t){this.genomeID=e,this.update(e,t)}async preload(){}getChromosomeName(e){return this.aliasRecordCache.has(e)?this.aliasRecordCache.get(e).chr:e}getChromosomeAlias(e,t){const i=this.aliasRecordCache.get(e);return i&&i[t]||e}update(e,t){if(t){const i=[];for(let n of t){if(this.aliasRecordCache.has(n))continue;const t={chr:n};if(i.push(t),n.startsWith("gi|")){const e=Av.getNCBIName(n);t["ncbi-gi-versioned"]=e;const i=e.lastIndexOf(".");if(i>0){const e=e.substring(0,i);t["ncbi-gi"]=e}}else if("chrM"===n?t.ncbi="MT":"MT"===n?t.ucsc="chrM":n.toLowerCase().startsWith("chr")&&Number.isInteger(Number(n.substring(3)))?t.ncbi=n.substring(3):Number.isInteger(Number(n))&&(t.ucsc="chr"+n),e.startsWith("hg")||e.startsWith("GRCh")||"1kg_ref"===e||"b37"===e)switch(n){case"23":t.ucsc="chrX",t.assembly="X";break;case"24":t.ucsc="chrY",t.assembly="Y";break;case"chrX":t.ncbi="23",t.assembly="X";break;case"chrY":t.ncbi="24",t.assembly="Y";break;case"X":t.ucsc="chrX",t.ncbi="23";break;case"Y":t.ucsc="chrY",t.ncbi="24"}else if(e.startsWith("mm")||e.startsWith("GRCm")||e.startsWith("rheMac"))switch(n){case"21":t.ucsc="chrX",t.assembly="X";break;case"22":t.ucsc="chrY",t.assembly="Y";break;case"chrX":t.ncbi="21",t.assembly="X";break;case"chrY":t.ncbi="22",t.assembly="Y";break;case"X":t.ucsc="chrX",t.ncbi="21";break;case"Y":t.ucsc="chrY",t.ncbi="22"}}for(let e of i){Av.addCaseAliases(e);for(let t of Object.values(e))this.aliasRecordCache.set(t,e)}}}search(e){return this.aliasRecordCache.get(e)}static getNCBIName(e){const t=e.split("\\|");return t[t.length-1]}static addCaseAliases(e){const t=e.chr.toUpperCase(),i=e.chr.toLowerCase(),n=e.chr.charAt(0).toUpperCase()+e.chr.slice(1);e.chr!==t&&(e._uppercase=t),e.chr!==i&&(e._lowercase=i),e.chr!==n&&(e._cap=n)}}class Cv{aliasRecordCache=new Map;constructor(e,t,i){(t=t||{}).url=e,this.reader=new el(t,i)}async preload(e){await this.reader.preload();for(let t of e)await this.search(t)}getChromosomeName(e){return this.aliasRecordCache.has(e)?this.aliasRecordCache.get(e).chr:e}getChromosomeAlias(e,t){const i=this.aliasRecordCache.get(e);return i&&i[t]||e}async search(e){if(!this.aliasRecordCache.has(e)){const t=await this.reader.search(e);if(t){Av.addCaseAliases(t);for(let e of Object.keys(t))"start"!==e&&"end"!==e&&this.aliasRecordCache.set(t[e],t)}}return this.aliasRecordCache.get(e)}async getChromosomeNames(){return await this.reader.loadHeader(),Array.from(this.reader.chrNames)}}class _v{aliasRecordCache=new Map;constructor(e,t,i){this.aliasURL=e,this.config=t,this.genome=i}async preload(){return this.loadAliases()}getChromosomeName(e){return this.aliasRecordCache.has(e)?this.aliasRecordCache.get(e).chr:e}getChromosomeAlias(e,t){const i=this.aliasRecordCache.get(e);return i&&i[t]||e}async loadAliases(){const e=await Mn.loadString(this.aliasURL,js(this.config)),t=v(e),i=t[0];i.startsWith("#")&&(this.headings=i.substring(1).split("\t").map((e=>e.trim())),this.altNameSets=this.headings.slice(1));const n=this.genome.chromosomeNames?new Set(this.genome.chromosomeNames):new Set;for(let e of t)if(!e.startsWith("#")&&e.length>0){const t=e.split("\t");let i=t.find((e=>n.has(e)));i||(i=t[0]);const r={chr:i};Av.addCaseAliases(r);for(let e=0;e<t.length;e++){r[this.headings?this.headings[e]:e]=t[e]}for(let e of Object.values(r))this.aliasRecordCache.set(e,r)}}async search(e){return 0===this.aliasRecordCache.size&&await this.loadAliases(),this.aliasRecordCache.get(e)}}class xv{constructor(e,t,i,n){this.start=e,this.end=t,this.name=i,this.stain=0,"acen"===n?this.type="c":(this.type=n.charAt(1),"p"===this.type&&(this.stain=parseInt(n.substring(4))))}}class kv{cytobandMap=new Map;constructor(e,t,i){(t=t||{}).url=e,this.source=new cl(t,i)}async getCytobands(e){if(this.cytobandMap.has(e))return this.cytobandMap.get(e);{let t=await this.#S(e);return t||(t=[]),this.cytobandMap.set(e,t),t}}async#S(e){return(await this.source.getFeatures({chr:e})).map((e=>new xv(e.start,e.end,e.name,e.gieStain)))}}class Iv{cytobands=new Map;constructor(e,t){this.url=e,this.config=t}async getCytobands(e){return 0===this.cytobands.size&&await this.#E(),this.cytobands.get(e)}async#E(){let e,t;if(Xs(this.url)){const t=on(this.url);e="";const i=t.length;for(let n=0;n<i;n++)e+=String.fromCharCode(t[n])}else e=await Mn.loadString(this.url,js(this.config));let i=[];const n=v(e);for(let e of n){const n=e.split("\t"),r=n[0];if(t||(t=r),r!==t&&(this.cytobands.set(t,i),i=[],t=r),5===n.length){const e=parseInt(n[1]),t=parseInt(n[2]),r=n[3],s=n[4];i.push(new xv(e,t,r,s))}}}async getChromosomeNames(){return 0===this.cytobands.size&&await this.#E(),Array.from(this.cytobands.keys())}async getChromosomes(){0===this.cytobands.size&&await this.#E();const e=[];let t=0;for(let[i,n]of this.cytobands.entries())e.push(new ho(i,t++,n[n.length-1].end));return e}}class Sv{#N;#M=new Map;static async createGenome(e,t){const i=new Sv(e,t);return await i.init(),i}constructor(e,t){this.config=e,this.browser=t,this.id=e.id||function(e){return void 0!==e.id?e.id:e.fastaURL&&b(e.fastaURL)&&!e.fastaURL.startsWith("data:")?e.fastaURL:e.fastaURL&&e.fastaURL.name?e.fastaURL.name:""}(e),this.name=e.name,this.nameSet=e.nameSet}async init(){const e=this.config;if(this.sequence=await Ro(e,this.browser),e.chromSizesURL?this.chromosomes=await async function(e){const t=new Map;let i;if(Xs(e)){let t=on(e);i="";for(let e of t)i+=String.fromCharCode(e)}else i=await Mn.load(e,{});const n=yo(i);let r=0;for(let e of n){const i=e.split("\t");if(i.length>1){const e=Number.parseInt(i[1]);t.set(i[0],new ho(i[0],r++,e))}}return t}(e.chromSizesURL):this.chromosomes=this.sequence.chromosomes||new Map,this.chromosomes.size>0&&(this.chromosomeNames=Array.from(this.chromosomes.keys())),e.chromAliasBbURL?(this.chromAlias=new Cv(e.chromAliasBbURL,Object.assign({},e),this),this.chromosomeNames||(this.chromosomeNames=await this.chromAlias.getChromosomeNames())):e.aliasURL?this.chromAlias=new _v(e.aliasURL,Object.assign({},e),this):this.chromosomeNames&&(this.chromAlias=new Av(this.id,this.chromosomeNames)),e.cytobandBbURL?this.cytobandSource=new kv(e.cytobandBbURL,Object.assign({},e),this):e.cytobandURL&&(this.cytobandSource=new Iv(e.cytobandURL,Object.assign({},e))),this.chromosomeNames||"function"!=typeof this.cytobandSource.getChromosomeNames||(this.chromosomeNames=await this.cytobandSource.getChromosomeNames()),0===this.chromosomes.size&&"function"==typeof this.cytobandSource.getChromosomes){const e=await this.cytobandSource.getChromosomes();for(let t of e)this.chromosomes.set(e.name,e)}if(!1!==e.wholeGenomeView&&this.chromosomes.size>0&&(e.chromosomeOrder?Array.isArray(e.chromosomeOrder)?this.#N=e.chromosomeOrder:this.#N=e.chromosomeOrder.split(",").map((e=>e.trim())):this.#N=function(e){const t=[];let i,n=1;for(let r of e.values()){if(i){if(r.bpLength<i/100)continue;i=((n-1)*i+r.bpLength)/n,t.push(r.name)}else i=r.bpLength,t.push(r.name);n++}return t}(this.chromosomes),await this.chromAlias.preload(this.#N)),this.wholeGenomeView=!1!==e.wholeGenomeView&&this.#N&&this.chromosomes.size>1,this.wholeGenomeView){const e=this.#N.reduce(((e,t)=>e+this.chromosomes.get(t).bpLength),0);this.chromosomes.set("all",new ho("all",0,e))}}get description(){return this.config.description||`${this.id}\n${this.name}`}get infoURL(){return this.config.infoURL}showWholeGenomeView(){return this.wholeGenomeView}toJSON(){return Object.assign({},this.config,{tracks:void 0})}get initialLocus(){return this.config.locus?this.config.locus:this.getHomeChromosomeName()}getHomeChromosomeName(){return this.showWholeGenomeView()&&this.chromosomes.has("all")?"all":this.chromosomeNames[0]}getChromosomeName(e){return this.chromAlias?this.chromAlias.getChromosomeName(e,this.chromosomes.keys()):e}getChromosomeDisplayName(e){return this.nameSet&&this.chromAlias&&this.chromAlias.getChromosomeAlias(e,this.nameSet)||e}getChromosome(e){return this.chromAlias&&(e=this.chromAlias.getChromosomeName(e)),this.chromosomes.get(e)}async loadChromosome(e){const t=await this.getAliasRecord(e);if(t&&(e=t.chr),!this.chromosomes.has(e)){let t;const i=await this.sequence.getSequenceRecord(e);i&&(t=new ho(e,0,i.bpLength)),this.chromosomes.set(e,t)}return this.chromosomes.get(e)}async getAliasRecord(e){if(this.#M.has(e))return this.#M.get(e);if(this.chromAlias){let t=await this.chromAlias.search(e);if(t||e===e.toLowerCase()||(t=await this.chromAlias.search(e.toLowerCase())),t){const e=t.chr.toUpperCase(),i=t.chr.toLowerCase(),n=t.chr.charAt(0).toUpperCase()+t.chr.slice(1);t.chr!==e&&(t._uppercase=e),t.chr!==i&&(t._lowercase=i),t.chr!==n&&(t._cap=n)}return this.#M.set(e,t),t}}async getCytobands(e){if(this.cytobandSource){const t=this.getChromosomeName(e);return await this.cytobandSource.getCytobands(t)}}getChromosomes(){return this.chromosomes}get wgChromosomeNames(){return this.#N?this.#N.slice():void 0}get showChromosomeWidget(){return this.config.showChromosomeWidget}getGenomeCoordinate(e,t){var i=this.getCumulativeOffset(e);if(void 0!==i)return i+t}getChromosomeCoordinate(e){let t;void 0===this.cumulativeOffsets&&(this.cumulativeOffsets=computeCumulativeOffsets.call(this));let i=0;for(let n of this.#N){const r=this.cumulativeOffsets[n];if(r>e){return{chr:t,position:e-i}}t=n,i=r}return{chr:this.#N[this.#N.length-1],position:0}}getCumulativeOffset(e){void 0===this.cumulativeOffsets&&(this.cumulativeOffsets=function(){let e={},t=0;for(let i of this.#N){e[i]=Math.floor(t);t+=this.getChromosome(i).bpLength}return e}.call(this));const t=this.getChromosomeName(e);return this.cumulativeOffsets[t]}getGenomeLength(){if(!this.bpLength){let e=0;for(let t of this.#N){e+=this.chromosomes.get(t).bpLength}this.bpLength=e}return this.bpLength}async getSequence(e,t,i){return e=this.getChromosomeName(e),this.sequence.getSequence(e,t,i)}getSequenceInterval(e,t,i){return"function"==typeof this.sequence.getSequenceInterval?this.sequence.getSequenceInterval(e,t,i):void 0}}class Ev{constructor(){this.clear()}clear(){this.phenotypeColors=new Map,this.snps=new Set,this.qtl=null}isEmpty(){return 0===this.phenotypeColors.size&&0===this.snps.size&&null===this.qtl}addSnp(e){e=e.toUpperCase(),this.snps.add(e)}addPhenotype(e){e=e.toUpperCase();const t=this.phenotypeColors.size;if(!this.phenotypeColors.has(e.toUpperCase())){const i=t<Nv.length?Nv[t]:un.randomRGB(0,255);this.phenotypeColors.set(e.toUpperCase(),i)}}hasSnp(e){return e&&this.snps.has(e.toUpperCase())}hasPhenotype(e){return e&&this.phenotypeColors.has(e.toUpperCase())}hasQTL(e){return this.qtls.has(e)}colorForGene(e){return e?this.phenotypeColors.get(e.toUpperCase()):"black"}toJSON(){const e={};return this.phenotypeColors.size>0&&(e.phenotypes=Array.from(this.phenotypeColors.keys())),this.snps.size>0&&(e.snps=Array.from(this.snps)),this.qtl&&(e.qtl=this.qtl),e}static fromJSON(e){const t=new Ev;if(e.phenotypes)for(let i of e.phenotypes)t.addPhenotype(i);if(e.snps)for(let i of e.snps)t.addSnp(i);return e.qtl&&(t.qtl=e.qtl),t}}const Nv=[];Nv.push("rgb(228,26,28)"),Nv.push("rgb(55,126,184)"),Nv.push("rgb(77,175,74)"),Nv.push("rgb(166,86,40)"),Nv.push("rgb(152,78,163)"),Nv.push("rgb(255,127,0)"),Nv.push("rgb(247,129,191)"),Nv.push("rgb(255,255,51)"),Nv.push("rgb(102,194,165)"),Nv.push("rgb(252,141,98)"),Nv.push("rgb(141, 160, 203)"),Nv.push("rgb(231, 138, 195)"),Nv.push("rgb(166, 216, 84)"),Nv.push("rgb(255, 217, 47)"),Nv.push("rgb(229, 196, 148)"),Nv.push("rgb( 141, 211, 199)"),Nv.push("rgb(255, 255, 179)"),Nv.push("rgb(190, 186, 218)"),Nv.push("rgb(251, 128, 114)"),Nv.push("rgb(128, 177, 211)"),Nv.push("rgb(253, 180, 98)"),Nv.push("rgb(179, 222, 105)"),Nv.push("rgb(252, 205, 229)"),Nv.push("rgb(188, 128, 189)"),Nv.push("rgb(204, 235, 197)"),Nv.push("rgb(255, 237, 111)");class Mv{constructor(e,i){this.browser=i,this.columnContainer=e,this.horizontalGuide=t({class:"igv-cursor-guide-horizontal"}),e.appendChild(this.horizontalGuide),this.verticalGuide=t({class:"igv-cursor-guide-vertical"}),e.appendChild(this.verticalGuide),this.addMouseHandler(i),this.setVisibility(i.config.showCursorGuide)}addMouseHandler(e){this.boundMouseMoveHandler=function(t){t.target.tagName;const{x:i,y:n}=a(t,this.columnContainer);if(this.horizontalGuide.style.top=`${n}px`,"CANVAS"===t.target.tagName){const n=function(e,t){for(;e.parentElement;){if(e.parentElement.classList.contains(t))return e.parentElement;e=e.parentElement}return}(t.target,"igv-viewport");if(n&&e.getRulerTrackView()){this.verticalGuide.style.left=`${i}px`;const r=e.root.querySelectorAll(".igv-column");let s;const o=n.parentElement;for(let e=0;e<r.length;e++)void 0===s&&o===r[e]&&(s=e);if(void 0!==s){const i=e.getRulerTrackView().viewports[s].mouseMove(t);if(i){const{start:e,bp:t,end:n}=i,r=(t-e)/(n-e);this.customMouseHandler&&this.customMouseHandler({start:e,bp:t,end:n,interpolant:r})}}}}}.bind(this),this.columnContainer.addEventListener("mousemove",this.boundMouseMoveHandler)}removeMouseHandler(){this.columnContainer.removeEventListener("mousemove",this.boundMouseMoveHandler)}setVisibility(e){!0===e?this.show():this.hide()}show(){this.verticalGuide.style.display="block",this.horizontalGuide.style.display="block"}hide(){if(this.verticalGuide.style.display="none",this.horizontalGuide.style.display="none",this.browser.getRulerTrackView())for(let e of this.browser.getRulerTrackView().viewports)e.tooltip.style.display="none"}}class Rv{constructor(e){this.parent=e,this.container=t({class:"igv-ui-generic-dialog-container"}),e.appendChild(this.container);const i=t({class:"igv-ui-generic-dialog-header"});this.container.appendChild(i),this.label=t({class:"igv-ui-generic-dialog-one-liner"}),this.container.appendChild(this.label),this.label.textContent="Unlabeled",this.input_container=t({class:"igv-ui-generic-dialog-input"}),this.container.appendChild(this.input_container);let r='<input type="range" id="igv-slider-dialog-input" name="igv-slider-dialog-input" />';this._input=document.createRange().createContextualFragment(r).firstChild,this.input_container.appendChild(this._input),r='<output id="igv-slider-dialog-output" name="igv-slider-dialog-output" for="igv-slider-dialog-input"></output>',this._output=document.createRange().createContextualFragment(r).firstChild,this.input_container.appendChild(this._output);const s=t({class:"igv-ui-generic-dialog-ok-cancel"});this.container.appendChild(s),this.ok=t(),s.appendChild(this.ok),this.ok.textContent="OK",this.cancel=t(),s.appendChild(this.cancel),this.cancel.textContent="Cancel",n(this.container),this._input.addEventListener("input",(()=>{const e=parseFloat(this._input.value)/this._scaleFactor;this.callback(e),this._output.value=`${e.toFixed(this._precision)}`}),!1),this.ok.addEventListener("click",(()=>{if("function"==typeof this.callback){const e=parseFloat(this._input.value)/this._scaleFactor;this.callback(e),this.callback=void 0}this._input.value=void 0,n(this.container)}));const o=()=>{this._input.value=void 0,n(this.container)};this.cancel.addEventListener("click",o),u(i,o),p(this.container,i)}get value(){return Fs.sanitize(this._input.value)}present(e,t){this.label.textContent=e.label,this._scaleFactor=e.scaleFactor,this._precision=e.precision||2;const[i,n,s]=[e.min,e.max,e.value].map((e=>Math.floor(this._scaleFactor*e).toString()));this._input.min=i,this._input.max=n,this._input.value=s;const o=parseFloat(s)/this._scaleFactor;this._output.value=`${o.toFixed(this._precision)}`,this.callback=e.callback||e.click,r(this.container),this.clampLocation(t.clientX,t.clientY)}clampLocation(e,t){const{width:i,height:n}=this.container.getBoundingClientRect(),r=window.innerHeight,s=window.innerWidth,o=Math.min(r-n,t),a=Math.min(s-i,e);this.container.style.left=`${a}px`,this.container.style.top=`${o}px`}}class Bv{qtlSelections=new Ev;constructor(e,i){this.config=e,this.guid=o(),this.namespace=".browser_"+this.guid,this.parent=i;let n=i.shadowRoot;if(!n){n=i.attachShadow({mode:"open"});const e=new CSSStyleSheet;e.replaceSync('.igv-ui-dropdown {\n cursor: default;\n position: absolute;\n top: 0;\n left: 0;\n z-index: 2048;\n border-color: #7F7F7F;\n border-style: solid;\n border-width: 1px;\n font-family: "Open Sans", sans-serif;\n font-size: small;\n font-weight: 400;\n background-color: white;\n}\n.igv-ui-dropdown > div {\n overflow-y: auto;\n overflow-x: hidden;\n background-color: white;\n}\n.igv-ui-dropdown > div > div {\n padding: 4px;\n width: 100%;\n overflow-x: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n border-bottom-color: #7F7F7F;\n border-bottom-style: solid;\n border-bottom-width: 1px;\n background-color: white;\n}\n.igv-ui-dropdown > div > div:last-child {\n border-bottom-color: transparent;\n border-bottom-width: 0;\n}\n.igv-ui-dropdown > div > div:hover {\n cursor: pointer;\n background-color: rgba(0, 0, 0, 0.04);\n}\n\n.igv-ui-popover {\n cursor: default;\n position: absolute;\n z-index: 2048;\n border-color: #7F7F7F;\n border-radius: 4px;\n border-style: solid;\n border-width: 1px;\n font-family: "Open Sans", sans-serif;\n font-size: small;\n background-color: white;\n}\n.igv-ui-popover > div:first-child {\n display: flex;\n flex-direction: row;\n flex-wrap: nowrap;\n justify-content: space-between;\n align-items: center;\n width: 100%;\n height: 24px;\n cursor: move;\n border-top-width: 0;\n border-top-left-radius: 4px;\n border-top-right-radius: 4px;\n border-bottom-color: #7F7F7F;\n border-bottom-style: solid;\n border-bottom-width: thin;\n background-color: #eee;\n}\n.igv-ui-popover > div:first-child > div:first-child {\n margin-left: 4px;\n}\n.igv-ui-popover > div:first-child > div:last-child {\n margin-right: 4px;\n height: 12px;\n width: 12px;\n color: #7F7F7F;\n}\n.igv-ui-popover > div:first-child > div:last-child:hover {\n cursor: pointer;\n color: #444;\n}\n.igv-ui-popover > div:last-child {\n user-select: text;\n overflow-y: auto;\n overflow-x: hidden;\n max-height: 400px;\n max-width: 800px;\n background-color: white;\n border-bottom-width: 0;\n border-bottom-left-radius: 4px;\n border-bottom-right-radius: 4px;\n}\n.igv-ui-popover > div:last-child > div {\n margin-left: 4px;\n margin-right: 4px;\n min-width: 220px;\n overflow-x: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.igv-ui-popover > div:last-child > div > span {\n font-weight: bolder;\n}\n.igv-ui-popover > div:last-child hr {\n width: 100%;\n}\n\n.igv-ui-alert-dialog-container {\n position: fixed;\n top: 20%;\n left: 50%;\n transform: translateX(-50%);\n z-index: 2048;\n box-sizing: content-box;\n width: 400px;\n height: 200px;\n border-color: #7F7F7F;\n border-radius: 4px;\n border-style: solid;\n border-width: thin;\n outline: none;\n font-family: "Open Sans", sans-serif;\n font-size: 15px;\n font-weight: 400;\n background-color: white;\n display: flex;\n flex-flow: column;\n flex-wrap: nowrap;\n justify-content: space-between;\n align-items: center;\n}\n.igv-ui-alert-dialog-container > div:first-child {\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: center;\n width: 100%;\n height: 24px;\n cursor: move;\n border-top-left-radius: 4px;\n border-top-right-radius: 4px;\n border-bottom-color: #7F7F7F;\n border-bottom-style: solid;\n border-bottom-width: thin;\n background-color: #eee;\n}\n.igv-ui-alert-dialog-container > div:first-child div:first-child {\n padding-left: 8px;\n}\n.igv-ui-alert-dialog-container .igv-ui-alert-dialog-body {\n -webkit-user-select: text;\n -moz-user-select: text;\n -ms-user-select: text;\n user-select: text;\n color: #373737;\n width: 100%;\n height: calc(100% - 24px - 64px);\n overflow-y: scroll;\n}\n.igv-ui-alert-dialog-container .igv-ui-alert-dialog-body .igv-ui-alert-dialog-body-copy {\n margin: 16px;\n width: auto;\n height: auto;\n overflow-wrap: break-word;\n word-break: break-word;\n background-color: white;\n border: unset;\n}\n.igv-ui-alert-dialog-container > div:last-child {\n width: 100%;\n margin-bottom: 10px;\n background-color: white;\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: center;\n align-items: center;\n}\n.igv-ui-alert-dialog-container > div:last-child div {\n margin: unset;\n width: 40px;\n height: 30px;\n line-height: 30px;\n text-align: center;\n color: white;\n font-family: "Open Sans", sans-serif;\n font-size: small;\n font-weight: 400;\n border-color: #2B81AF;\n border-style: solid;\n border-width: thin;\n border-radius: 4px;\n background-color: #2B81AF;\n}\n.igv-ui-alert-dialog-container > div:last-child div:hover {\n cursor: pointer;\n border-color: #25597f;\n background-color: #25597f;\n}\n\n.igv-ui-generic-dialog-container {\n box-sizing: content-box;\n position: fixed;\n top: 20%;\n left: 75%;\n transform: translateX(-50%);\n z-index: 2048;\n background-color: white;\n cursor: pointer;\n width: 300px;\n height: fit-content;\n padding-bottom: 16px;\n border-color: #7F7F7F;\n border-radius: 4px;\n border-style: solid;\n border-width: thin;\n font-family: "Open Sans", sans-serif;\n font-size: medium;\n font-weight: 400;\n display: flex;\n flex-flow: column;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: center;\n}\n.igv-ui-generic-dialog-container .igv-ui-generic-dialog-header {\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: flex-end;\n align-items: center;\n width: 100%;\n height: 24px;\n cursor: move;\n border-top-left-radius: 4px;\n border-top-right-radius: 4px;\n border-bottom-color: #7F7F7F;\n border-bottom-style: solid;\n border-bottom-width: thin;\n background-color: #eee;\n}\n.igv-ui-generic-dialog-container .igv-ui-generic-dialog-header div {\n margin-right: 4px;\n margin-bottom: 2px;\n height: 12px;\n width: 12px;\n color: #7F7F7F;\n}\n.igv-ui-generic-dialog-container .igv-ui-generic-dialog-header div:hover {\n cursor: pointer;\n color: #444;\n}\n.igv-ui-generic-dialog-container .igv-ui-generic-dialog-one-liner {\n color: #373737;\n width: 95%;\n line-height: 24px;\n text-align: left;\n margin-top: 8px;\n padding-left: 8px;\n overflow-wrap: break-word;\n background-color: white;\n}\n.igv-ui-generic-dialog-container .igv-ui-generic-dialog-label-input {\n margin-top: 8px;\n width: 95%;\n height: 24px;\n color: #373737;\n line-height: 24px;\n padding-left: 8px;\n background-color: white;\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: center;\n}\n.igv-ui-generic-dialog-container .igv-ui-generic-dialog-label-input > div {\n width: fit-content;\n height: 100%;\n font-size: 16px;\n text-align: right;\n padding-right: 8px;\n background-color: white;\n}\n.igv-ui-generic-dialog-container .igv-ui-generic-dialog-label-input input {\n display: block;\n height: 100%;\n width: 100%;\n padding-left: 4px;\n font-family: "Open Sans", sans-serif;\n font-weight: 400;\n color: #373737;\n text-align: left;\n outline: none;\n border-style: solid;\n border-width: thin;\n border-color: #7F7F7F;\n background-color: white;\n}\n.igv-ui-generic-dialog-container .igv-ui-generic-dialog-label-input input {\n width: 50%;\n font-size: 16px;\n}\n.igv-ui-generic-dialog-container .igv-ui-generic-dialog-input {\n margin-top: 8px;\n width: calc(100% - 16px);\n height: 24px;\n color: #373737;\n line-height: 24px;\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: space-around;\n align-items: center;\n}\n.igv-ui-generic-dialog-container .igv-ui-generic-dialog-input input {\n display: block;\n height: 100%;\n width: 100%;\n padding-left: 4px;\n font-family: "Open Sans", sans-serif;\n font-weight: 400;\n color: #373737;\n text-align: left;\n outline: none;\n border-style: solid;\n border-width: thin;\n border-color: #7F7F7F;\n background-color: white;\n}\n.igv-ui-generic-dialog-container .igv-ui-generic-dialog-input input {\n font-size: 16px;\n}\n.igv-ui-generic-dialog-container .igv-ui-generic-dialog-input input[type=range] {\n width: 70%;\n -webkit-appearance: none;\n background: linear-gradient(90deg, white, black);\n outline: none;\n margin: 0;\n}\n.igv-ui-generic-dialog-container .igv-ui-generic-dialog-input output {\n display: block;\n height: 100%;\n width: 20%;\n font-size: 16px;\n}\n.igv-ui-generic-dialog-container .igv-ui-generic-dialog-ok-cancel {\n width: 100%;\n height: 28px;\n padding-top: 16px;\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: space-around;\n align-items: center;\n}\n.igv-ui-generic-dialog-container .igv-ui-generic-dialog-ok-cancel > div {\n color: white;\n font-family: "Open Sans", sans-serif;\n font-size: 14px;\n font-weight: 400;\n width: 75px;\n height: 28px;\n line-height: 28px;\n text-align: center;\n border-color: transparent;\n border-style: solid;\n border-width: thin;\n border-radius: 2px;\n}\n.igv-ui-generic-dialog-container .igv-ui-generic-dialog-ok-cancel > div:first-child {\n margin-left: 32px;\n margin-right: 0;\n background-color: #5ea4e0;\n}\n.igv-ui-generic-dialog-container .igv-ui-generic-dialog-ok-cancel > div:last-child {\n margin-left: 0;\n margin-right: 32px;\n background-color: #c4c4c4;\n}\n.igv-ui-generic-dialog-container .igv-ui-generic-dialog-ok-cancel > div:first-child:hover {\n cursor: pointer;\n background-color: #3b5c7f;\n}\n.igv-ui-generic-dialog-container .igv-ui-generic-dialog-ok-cancel > div:last-child:hover {\n cursor: pointer;\n background-color: #7f7f7f;\n}\n\n.igv-ui-generic-container {\n position: fixed;\n top: 20%;\n left: 75%;\n transform: translateX(-50%);\n width: 300px;\n height: 200px;\n z-index: 2048;\n background-color: white;\n cursor: pointer;\n box-sizing: content-box;\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n justify-content: flex-start;\n align-items: center;\n}\n.igv-ui-generic-container > div:first-child {\n cursor: move;\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: flex-end;\n align-items: center;\n height: 24px;\n width: 100%;\n background-color: #dddddd;\n}\n.igv-ui-generic-container > div:first-child > div {\n display: block;\n color: #5f5f5f;\n cursor: pointer;\n width: 14px;\n height: 14px;\n margin-right: 8px;\n margin-bottom: 4px;\n}\n\n.igv-ui-generic-container {\n position: fixed;\n top: 20%;\n left: 75%;\n transform: translateX(-50%);\n flex-direction: column;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: center;\n background-color: #eee;\n}\n.igv-ui-generic-container > div:nth-child(2) {\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n justify-content: flex-start;\n align-items: center;\n}\n.igv-ui-generic-container > div:nth-child(3) {\n box-sizing: border-box;\n position: relative;\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: center;\n padding: 0.5rem;\n font-family: "Open Sans", sans-serif;\n font-size: 1rem;\n font-weight: 400;\n width: 100%;\n border-top-style: solid;\n border-top-width: thin;\n border-top-color: #373737;\n}\n.igv-ui-generic-container > div:nth-child(4) {\n width: 100%;\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n justify-content: flex-start;\n align-items: center;\n}\n\n.igv-ui-color-swatch {\n position: relative;\n box-sizing: content-box;\n display: flex;\n flex-flow: row;\n flex-wrap: wrap;\n justify-content: center;\n align-items: center;\n margin: 2px;\n width: 32px;\n height: 32px;\n border-style: solid;\n border-width: 0;\n border-color: white;\n border-radius: 3px;\n}\n\n.igv-ui-color-swatch-shim {\n cursor: pointer;\n position: relative;\n box-sizing: content-box;\n display: flex;\n flex-flow: row;\n flex-wrap: wrap;\n justify-content: center;\n align-items: center;\n width: 32px;\n height: 32px;\n background-color: white;\n border-style: solid;\n border-width: thin;\n border-color: white;\n border-radius: 4px;\n}\n\n.igv-ui-dialog {\n z-index: 2048;\n position: fixed;\n width: fit-content;\n height: fit-content;\n display: flex;\n flex-flow: column;\n flex-wrap: nowrap;\n justify-content: flex-start;\n background-color: white;\n border-color: #7F7F7F;\n border-radius: 4px;\n border-style: solid;\n border-width: thin;\n font-family: "Open Sans", sans-serif;\n font-size: medium;\n font-weight: 400;\n}\n.igv-ui-dialog .igv-ui-dialog-header {\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: flex-end;\n align-items: center;\n width: 100%;\n height: 24px;\n cursor: move;\n border-top-left-radius: 4px;\n border-top-right-radius: 4px;\n border-bottom-color: #7F7F7F;\n border-bottom-style: solid;\n border-bottom-width: thin;\n background-color: #eee;\n}\n.igv-ui-dialog .igv-ui-dialog-header div {\n margin-right: 4px;\n margin-bottom: 2px;\n height: 12px;\n width: 12px;\n color: #7F7F7F;\n}\n.igv-ui-dialog .igv-ui-dialog-header div:hover {\n cursor: pointer;\n color: #444;\n}\n.igv-ui-dialog .igv-ui-dialog-one-liner {\n width: 95%;\n height: 24px;\n line-height: 24px;\n text-align: left;\n margin: 8px;\n overflow-wrap: break-word;\n background-color: white;\n font-weight: bold;\n}\n.igv-ui-dialog .igv-ui-dialog-ok-cancel {\n width: 100%;\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: space-around;\n align-items: center;\n}\n.igv-ui-dialog .igv-ui-dialog-ok-cancel div {\n margin: 16px;\n margin-top: 32px;\n color: white;\n font-family: "Open Sans", sans-serif;\n font-size: 14px;\n font-weight: 400;\n width: 75px;\n height: 28px;\n line-height: 28px;\n text-align: center;\n border-color: transparent;\n border-style: solid;\n border-width: thin;\n border-radius: 2px;\n}\n.igv-ui-dialog .igv-ui-dialog-ok-cancel div:first-child {\n background-color: #5ea4e0;\n}\n.igv-ui-dialog .igv-ui-dialog-ok-cancel div:last-child {\n background-color: #c4c4c4;\n}\n.igv-ui-dialog .igv-ui-dialog-ok-cancel div:first-child:hover {\n cursor: pointer;\n background-color: #3b5c7f;\n}\n.igv-ui-dialog .igv-ui-dialog-ok-cancel div:last-child:hover {\n cursor: pointer;\n background-color: #7f7f7f;\n}\n.igv-ui-dialog .igv-ui-dialog-ok {\n width: 100%;\n height: 36px;\n margin-top: 32px;\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: space-around;\n align-items: center;\n}\n.igv-ui-dialog .igv-ui-dialog-ok div {\n width: 98px;\n height: 36px;\n line-height: 36px;\n text-align: center;\n color: white;\n font-family: "Open Sans", sans-serif;\n font-size: medium;\n font-weight: 400;\n border-color: white;\n border-style: solid;\n border-width: thin;\n border-radius: 4px;\n background-color: #2B81AF;\n}\n.igv-ui-dialog .igv-ui-dialog-ok div:hover {\n cursor: pointer;\n background-color: #25597f;\n}\n\n.igv-ui-panel, .igv-ui-panel-row, .igv-ui-panel-column {\n z-index: 2048;\n background-color: white;\n font-family: "Open Sans", sans-serif;\n font-size: medium;\n font-weight: 400;\n display: flex;\n justify-content: flex-start;\n align-items: flex-start;\n}\n\n.igv-ui-panel-column {\n display: flex;\n flex-direction: column;\n}\n\n.igv-ui-panel-row {\n display: flex;\n flex-direction: row;\n}\n\n.igv-ui-textbox {\n background-color: white;\n font-family: "Open Sans", sans-serif;\n font-size: medium;\n font-weight: 400;\n display: flex;\n justify-content: flex-start;\n align-items: flex-start;\n}\n\n.igv-ui-table {\n background-color: white;\n}\n\n.igv-ui-table thead {\n position: sticky;\n top: 0;\n}\n\n.igv-ui-table th {\n text-align: left;\n}\n\n.igv-ui-table td {\n padding-right: 20px;\n}\n\n.igv-ui-table tr:hover {\n background-color: lightblue;\n}\n\n.igv-ui-center-fixed {\n left: 50%;\n top: 50%;\n transform: translate(-50%, -50%);\n}\n\n.igv-navbar {\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: space-between;\n align-items: center;\n box-sizing: border-box;\n width: 100%;\n color: #444;\n font-size: 12px;\n font-family: "Open Sans", sans-serif;\n font-weight: 400;\n line-height: 32px;\n padding-left: 8px;\n padding-right: 8px;\n margin-top: 2px;\n margin-bottom: 6px;\n height: 32px;\n border-style: solid;\n border-radius: 3px;\n border-width: thin;\n border-color: #bfbfbf;\n background-color: #f3f3f3;\n}\n.igv-navbar .igv-navbar-left-container {\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: space-between;\n align-items: center;\n height: 32px;\n line-height: 32px;\n}\n.igv-navbar .igv-navbar-left-container .igv-logo {\n width: 34px;\n height: 32px;\n margin-right: 8px;\n}\n.igv-navbar .igv-navbar-left-container .igv-current-genome {\n height: 32px;\n margin-left: 4px;\n margin-right: 4px;\n user-select: none;\n line-height: 32px;\n vertical-align: middle;\n text-align: center;\n}\n.igv-navbar .igv-navbar-left-container .igv-navbar-genomic-location {\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: space-between;\n align-items: center;\n height: 100%;\n}\n.igv-navbar .igv-navbar-left-container .igv-navbar-genomic-location .igv-chromosome-select-widget-container {\n display: flex;\n flex-flow: column;\n flex-wrap: nowrap;\n justify-content: space-around;\n align-items: center;\n height: 100%;\n width: 125px;\n margin-right: 4px;\n}\n.igv-navbar .igv-navbar-left-container .igv-navbar-genomic-location .igv-chromosome-select-widget-container select {\n display: block;\n cursor: pointer;\n width: 100px;\n height: 75%;\n outline: none;\n font-size: 12px;\n font-family: "Open Sans", sans-serif;\n font-weight: 400;\n}\n.igv-navbar .igv-navbar-left-container .igv-navbar-genomic-location .igv-locus-size-group {\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: space-between;\n align-items: center;\n margin-left: 8px;\n height: 22px;\n}\n.igv-navbar .igv-navbar-left-container .igv-navbar-genomic-location .igv-locus-size-group .igv-search-container {\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: center;\n width: 240px;\n height: 22px;\n line-height: 22px;\n}\n.igv-navbar .igv-navbar-left-container .igv-navbar-genomic-location .igv-locus-size-group .igv-search-container input.igv-search-input {\n cursor: text;\n width: 85%;\n height: 22px;\n line-height: 22px;\n font-size: 12px;\n font-family: "Open Sans", sans-serif;\n font-weight: 400;\n text-align: left;\n padding-left: 8px;\n margin-right: 8px;\n outline: none;\n border-style: solid;\n border-radius: 3px;\n border-width: thin;\n border-color: #bfbfbf;\n background-color: white;\n}\n.igv-navbar .igv-navbar-left-container .igv-navbar-genomic-location .igv-locus-size-group .igv-search-container .igv-search-icon-container {\n cursor: pointer;\n height: 16px;\n width: 16px;\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: center;\n align-items: center;\n}\n.igv-navbar .igv-navbar-left-container .igv-navbar-genomic-location .igv-locus-size-group .igv-windowsize-panel-container {\n margin-left: 4px;\n user-select: none;\n}\n.igv-navbar .igv-navbar-right-container {\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: space-between;\n align-items: center;\n}\n.igv-navbar .igv-navbar-right-container .igv-navbar-toggle-button-container {\n position: relative;\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: flex-end;\n align-items: center;\n}\n.igv-navbar .igv-navbar-right-container .igv-navbar-toggle-button-container-hidden {\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: center;\n height: 100%;\n}\n.igv-navbar .igv-navbar-right-container .igv-zoom-widget {\n color: #737373;\n font-size: 18px;\n margin-left: 8px;\n user-select: none;\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: flex-end;\n align-items: center;\n}\n.igv-navbar .igv-navbar-right-container .igv-zoom-widget div {\n cursor: pointer;\n margin-left: unset;\n margin-right: unset;\n}\n.igv-navbar .igv-navbar-right-container .igv-zoom-widget div:first-child {\n height: 20px;\n width: 20px;\n margin-left: unset;\n margin-right: 4px;\n}\n.igv-navbar .igv-navbar-right-container .igv-zoom-widget div:last-child {\n height: 20px;\n width: 20px;\n margin-left: 4px;\n margin-right: unset;\n}\n.igv-navbar .igv-navbar-right-container .igv-zoom-widget div:nth-child(even) {\n display: block;\n height: fit-content;\n}\n.igv-navbar .igv-navbar-right-container .igv-zoom-widget input {\n display: block;\n width: 125px;\n}\n.igv-navbar .igv-navbar-right-container .igv-zoom-widget svg {\n display: block;\n}\n.igv-navbar .igv-navbar-right-container .igv-zoom-widget-900 {\n color: #737373;\n font-size: 18px;\n height: 32px;\n line-height: 32px;\n margin-left: 8px;\n user-select: none;\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: flex-end;\n align-items: center;\n}\n.igv-navbar .igv-navbar-right-container .igv-zoom-widget-900 div {\n cursor: pointer;\n margin-left: unset;\n margin-right: unset;\n}\n.igv-navbar .igv-navbar-right-container .igv-zoom-widget-900 div:first-child {\n height: 20px;\n width: 20px;\n margin-left: unset;\n margin-right: 4px;\n}\n.igv-navbar .igv-navbar-right-container .igv-zoom-widget-900 div:last-child {\n height: 20px;\n width: 20px;\n margin-left: 4px;\n margin-right: unset;\n}\n.igv-navbar .igv-navbar-right-container .igv-zoom-widget-900 div:nth-child(even) {\n width: 0;\n height: 0;\n display: none;\n}\n.igv-navbar .igv-navbar-right-container .igv-zoom-widget-900 input {\n width: 0;\n height: 0;\n display: none;\n}\n.igv-navbar .igv-navbar-right-container .igv-zoom-widget-900 svg {\n display: block;\n}\n.igv-navbar .igv-navbar-right-container .igv-zoom-widget-hidden {\n display: none;\n}\n\n.igv-navbar-button {\n display: block;\n box-sizing: unset;\n padding-left: 6px;\n padding-right: 6px;\n height: 18px;\n text-transform: capitalize;\n user-select: none;\n line-height: 18px;\n text-align: center;\n vertical-align: middle;\n font-family: "Open Sans", sans-serif;\n font-size: 11px;\n font-weight: 200;\n color: #737373;\n background-color: #f3f3f3;\n border-color: #737373;\n border-style: solid;\n border-width: thin;\n border-radius: 6px;\n}\n\n.igv-navbar-button:hover {\n cursor: pointer;\n}\n\n.igv-navbar-button-clicked {\n color: white;\n background-color: #737373;\n}\n\n.igv-navbar-icon-button {\n cursor: pointer;\n position: relative;\n width: 24px;\n height: 24px;\n margin-left: 4px;\n margin-right: 4px;\n border: none;\n background-size: contain;\n background-repeat: no-repeat;\n background-position: center;\n}\n.igv-navbar-icon-button > div:first-child {\n z-index: 512;\n position: absolute;\n top: 36px;\n left: -18px;\n width: 24px;\n height: 24px;\n border: none;\n background-size: contain;\n background-repeat: no-repeat;\n background-position: center;\n}\n.igv-navbar-icon-button > div:last-child {\n z-index: 512;\n position: absolute;\n top: 36px;\n left: 18px;\n width: 24px;\n height: 24px;\n border: none;\n background-size: contain;\n background-repeat: no-repeat;\n background-position: center;\n}\n\n.igv-navbar-text-button {\n cursor: pointer;\n position: relative;\n margin-left: 2px;\n margin-right: 2px;\n border: none;\n display: flex;\n justify-content: center;\n align-items: center;\n}\n.igv-navbar-text-button > div:nth-child(2) {\n z-index: 512;\n position: absolute;\n top: 36px;\n left: 0;\n width: 38px;\n height: 18px;\n border: none;\n background-size: contain;\n background-repeat: no-repeat;\n background-position: center;\n}\n.igv-navbar-text-button > div:nth-child(3) {\n z-index: 512;\n position: absolute;\n top: 36px;\n left: 42px;\n width: 38px;\n height: 18px;\n border: none;\n background-size: contain;\n background-repeat: no-repeat;\n background-position: center;\n}\n\n#igv-text-button-label {\n text-anchor: middle;\n dominant-baseline: middle;\n}\n\n.igv-navbar-text-button-svg-inactive rect {\n stroke: #737373;\n fill: white;\n}\n.igv-navbar-text-button-svg-inactive text {\n fill: #737373;\n}\n.igv-navbar-text-button-svg-inactive tspan {\n dominant-baseline: middle;\n}\n\n.igv-navbar-text-button-svg-hover rect {\n stroke: #737373;\n fill: #737373;\n}\n.igv-navbar-text-button-svg-hover text {\n fill: white;\n}\n.igv-navbar-text-button-svg-hover tspan {\n dominant-baseline: middle;\n}\n\n#igv-save-svg-group rect {\n stroke: #737373;\n fill: white;\n}\n#igv-save-svg-group text {\n fill: #737373;\n}\n\n#igv-save-svg-group:hover rect {\n stroke: #737373;\n fill: #737373;\n}\n#igv-save-svg-group:hover text {\n fill: white;\n}\n\n#igv-save-png-group rect {\n stroke: #737373;\n fill: white;\n}\n#igv-save-png-group text {\n fill: #737373;\n}\n\n#igv-save-png-group:hover rect {\n stroke: #737373;\n fill: #737373;\n}\n#igv-save-png-group:hover text {\n fill: white;\n}\n\n.igv-zoom-in-notice-container {\n z-index: 256;\n position: absolute;\n top: 8px;\n left: 50%;\n transform: translate(-50%, 0%);\n display: flex;\n flex-direction: row;\n flex-wrap: nowrap;\n justify-content: center;\n align-items: center;\n background-color: white;\n}\n.igv-zoom-in-notice-container > div {\n padding-left: 4px;\n padding-right: 4px;\n padding-top: 2px;\n padding-bottom: 2px;\n width: 100%;\n height: 100%;\n font-family: "Open Sans", sans-serif;\n font-size: 14px;\n font-weight: 400;\n color: #3f3f3f;\n}\n\n.igv-zoom-in-notice {\n position: absolute;\n top: 10px;\n left: 50%;\n}\n.igv-zoom-in-notice div {\n position: relative;\n left: -50%;\n font-family: "Open Sans", sans-serif;\n font-size: medium;\n font-weight: 400;\n color: #3f3f3f;\n background-color: rgba(255, 255, 255, 0.51);\n z-index: 64;\n}\n\n.igv-container-spinner {\n position: absolute;\n top: 90%;\n left: 50%;\n transform: translate(-50%, -50%);\n z-index: 1024;\n width: 24px;\n height: 24px;\n pointer-events: none;\n color: #737373;\n}\n\n.igv-multi-locus-close-button {\n position: absolute;\n top: 2px;\n right: 0;\n padding-left: 2px;\n padding-right: 2px;\n width: 12px;\n height: 12px;\n color: #666666;\n background-color: white;\n z-index: 1000;\n}\n.igv-multi-locus-close-button > svg {\n vertical-align: top;\n}\n\n.igv-multi-locus-close-button:hover {\n cursor: pointer;\n color: #434343;\n}\n\n.igv-multi-locus-ruler-label {\n z-index: 64;\n position: absolute;\n top: 2px;\n left: 0;\n width: 100%;\n height: 12px;\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: center;\n align-items: center;\n}\n.igv-multi-locus-ruler-label > div {\n font-family: "Open Sans", sans-serif;\n font-size: 12px;\n color: rgb(16, 16, 16);\n background-color: white;\n}\n.igv-multi-locus-ruler-label > div {\n cursor: pointer;\n}\n\n.igv-multi-locus-ruler-label-square-dot {\n z-index: 64;\n position: absolute;\n left: 50%;\n top: 5%;\n transform: translate(-50%, 0%);\n background-color: white;\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: center;\n}\n.igv-multi-locus-ruler-label-square-dot > div:first-child {\n width: 14px;\n height: 14px;\n}\n.igv-multi-locus-ruler-label-square-dot > div:last-child {\n margin-left: 16px;\n font-family: "Open Sans", sans-serif;\n font-size: 14px;\n font-weight: 400;\n color: rgb(16, 16, 16);\n}\n\n.igv-ruler-sweeper {\n display: none;\n pointer-events: none;\n position: absolute;\n top: 26px;\n bottom: 0;\n left: 0;\n width: 0;\n z-index: 99999;\n background-color: rgba(68, 134, 247, 0.25);\n}\n\n.igv-ruler-tooltip {\n pointer-events: none;\n z-index: 128;\n position: absolute;\n top: 0;\n left: 0;\n width: 1px;\n height: 32px;\n background-color: transparent;\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: center;\n}\n.igv-ruler-tooltip > div {\n pointer-events: none;\n width: 128px;\n height: auto;\n padding: 1px;\n color: #373737;\n font-size: 10px;\n font-family: "Open Sans", sans-serif;\n font-weight: 400;\n background-color: white;\n border-style: solid;\n border-width: thin;\n border-color: #373737;\n}\n\n.igv-track-label {\n position: absolute;\n left: 8px;\n top: 8px;\n width: auto;\n height: auto;\n max-width: 50%;\n padding-left: 4px;\n padding-right: 4px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n font-family: "Open Sans", sans-serif;\n font-size: small;\n font-weight: 400;\n text-align: center;\n user-select: none;\n -moz-user-select: none;\n -webkit-user-select: none;\n border-color: #444;\n border-radius: 2px;\n border-style: solid;\n border-width: thin;\n background-color: white;\n z-index: 128;\n cursor: pointer;\n}\n\n.igv-track-label:hover,\n.igv-track-label:focus,\n.igv-track-label:active {\n background-color: #e8e8e8;\n}\n\n.igv-track-label-popup-shim {\n padding-left: 8px;\n padding-right: 8px;\n padding-top: 4px;\n}\n\n.igv-center-line {\n display: none;\n pointer-events: none;\n position: absolute;\n top: 0;\n bottom: 0;\n left: 50%;\n transform: translateX(-50%);\n z-index: 8;\n user-select: none;\n -moz-user-select: none;\n -webkit-user-select: none;\n border-left-style: dashed;\n border-left-width: thin;\n border-right-style: dashed;\n border-right-width: thin;\n}\n\n.igv-center-line-wide {\n background-color: rgba(0, 0, 0, 0);\n border-left-color: rgba(127, 127, 127, 0.51);\n border-right-color: rgba(127, 127, 127, 0.51);\n}\n\n.igv-center-line-thin {\n background-color: rgba(0, 0, 0, 0);\n border-left-color: rgba(127, 127, 127, 0.51);\n border-right-color: rgba(0, 0, 0, 0);\n}\n\n.igv-cursor-guide-horizontal {\n display: none;\n pointer-events: none;\n user-select: none;\n -moz-user-select: none;\n -webkit-user-select: none;\n position: absolute;\n left: 0;\n right: 0;\n top: 50%;\n height: 1px;\n z-index: 32;\n margin-left: 50px;\n margin-right: 54px;\n border-top-style: dotted;\n border-top-width: thin;\n border-top-color: rgba(127, 127, 127, 0.76);\n}\n\n.igv-cursor-guide-vertical {\n pointer-events: none;\n user-select: none;\n -moz-user-select: none;\n -webkit-user-select: none;\n position: absolute;\n top: 0;\n bottom: 0;\n left: 50%;\n width: 1px;\n z-index: 32;\n border-left-style: dotted;\n border-left-width: thin;\n border-left-color: rgba(127, 127, 127, 0.76);\n display: none;\n}\n\n.igv-user-feedback {\n position: fixed;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n width: 512px;\n height: 360px;\n z-index: 2048;\n background-color: white;\n border-color: #a2a2a2;\n border-style: solid;\n border-width: thin;\n font-family: "Open Sans", sans-serif;\n font-size: medium;\n font-weight: 400;\n color: #444;\n display: flex;\n flex-direction: column;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: center;\n}\n.igv-user-feedback div:first-child {\n position: relative;\n height: 24px;\n width: 100%;\n background-color: white;\n border-bottom-color: #a2a2a2;\n border-bottom-style: solid;\n border-bottom-width: thin;\n}\n.igv-user-feedback div:first-child div {\n position: absolute;\n top: 2px;\n width: 16px;\n height: 16px;\n background-color: transparent;\n}\n.igv-user-feedback div:first-child div:first-child {\n left: 8px;\n}\n.igv-user-feedback div:first-child div:last-child {\n cursor: pointer;\n right: 8px;\n}\n.igv-user-feedback div:last-child {\n width: 100%;\n height: calc(100% - 24px);\n border-width: 0;\n}\n.igv-user-feedback div:last-child div {\n width: auto;\n height: auto;\n margin: 8px;\n}\n\n.igv-generic-dialog-container {\n position: fixed;\n top: 20%;\n left: 75%;\n transform: translateX(-50%);\n width: 300px;\n height: 200px;\n border-color: #7F7F7F;\n border-radius: 4px;\n border-style: solid;\n border-width: thin;\n font-family: "Open Sans", sans-serif;\n font-size: medium;\n font-weight: 400;\n z-index: 2048;\n background-color: white;\n display: flex;\n flex-flow: column;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: center;\n}\n.igv-generic-dialog-container .igv-generic-dialog-header {\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: flex-end;\n align-items: center;\n width: 100%;\n height: 24px;\n cursor: move;\n border-top-left-radius: 4px;\n border-top-right-radius: 4px;\n border-bottom-color: #7F7F7F;\n border-bottom-style: solid;\n border-bottom-width: thin;\n background-color: #eee;\n}\n.igv-generic-dialog-container .igv-generic-dialog-header div {\n margin-right: 4px;\n margin-bottom: 2px;\n height: 12px;\n width: 12px;\n color: #7F7F7F;\n}\n.igv-generic-dialog-container .igv-generic-dialog-header div:hover {\n cursor: pointer;\n color: #444;\n}\n.igv-generic-dialog-container .igv-generic-dialog-one-liner {\n color: #373737;\n width: 95%;\n height: 24px;\n line-height: 24px;\n text-align: left;\n margin-top: 8px;\n padding-left: 8px;\n overflow-wrap: break-word;\n background-color: white;\n}\n.igv-generic-dialog-container .igv-generic-dialog-label-input {\n margin-top: 8px;\n width: 95%;\n height: 24px;\n color: #373737;\n line-height: 24px;\n padding-left: 8px;\n background-color: white;\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: center;\n}\n.igv-generic-dialog-container .igv-generic-dialog-label-input div {\n width: 30%;\n height: 100%;\n font-size: 16px;\n text-align: right;\n padding-right: 8px;\n background-color: white;\n}\n.igv-generic-dialog-container .igv-generic-dialog-label-input input {\n display: block;\n height: 100%;\n width: 100%;\n padding-left: 4px;\n font-family: "Open Sans", sans-serif;\n font-weight: 400;\n color: #373737;\n text-align: left;\n outline: none;\n border-style: solid;\n border-width: thin;\n border-color: #7F7F7F;\n background-color: white;\n}\n.igv-generic-dialog-container .igv-generic-dialog-label-input input {\n width: 50%;\n font-size: 16px;\n}\n.igv-generic-dialog-container .igv-generic-dialog-input {\n margin-top: 8px;\n width: calc(100% - 16px);\n height: 24px;\n color: #373737;\n line-height: 24px;\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: space-around;\n align-items: center;\n}\n.igv-generic-dialog-container .igv-generic-dialog-input input {\n display: block;\n height: 100%;\n width: 100%;\n padding-left: 4px;\n font-family: "Open Sans", sans-serif;\n font-weight: 400;\n color: #373737;\n text-align: left;\n outline: none;\n border-style: solid;\n border-width: thin;\n border-color: #7F7F7F;\n background-color: white;\n}\n.igv-generic-dialog-container .igv-generic-dialog-input input {\n font-size: 16px;\n}\n.igv-generic-dialog-container .igv-generic-dialog-ok-cancel {\n width: 100%;\n height: 28px;\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: space-around;\n align-items: center;\n}\n.igv-generic-dialog-container .igv-generic-dialog-ok-cancel div {\n margin-top: 32px;\n color: white;\n font-family: "Open Sans", sans-serif;\n font-size: 14px;\n font-weight: 400;\n width: 75px;\n height: 28px;\n line-height: 28px;\n text-align: center;\n border-color: transparent;\n border-style: solid;\n border-width: thin;\n border-radius: 2px;\n}\n.igv-generic-dialog-container .igv-generic-dialog-ok-cancel div:first-child {\n margin-left: 32px;\n margin-right: 0;\n background-color: #5ea4e0;\n}\n.igv-generic-dialog-container .igv-generic-dialog-ok-cancel div:last-child {\n margin-left: 0;\n margin-right: 32px;\n background-color: #c4c4c4;\n}\n.igv-generic-dialog-container .igv-generic-dialog-ok-cancel div:first-child:hover {\n cursor: pointer;\n background-color: #3b5c7f;\n}\n.igv-generic-dialog-container .igv-generic-dialog-ok-cancel div:last-child:hover {\n cursor: pointer;\n background-color: #7f7f7f;\n}\n.igv-generic-dialog-container .igv-generic-dialog-ok {\n width: 100%;\n height: 36px;\n margin-top: 32px;\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: space-around;\n align-items: center;\n}\n.igv-generic-dialog-container .igv-generic-dialog-ok div {\n width: 98px;\n height: 36px;\n line-height: 36px;\n text-align: center;\n color: white;\n font-family: "Open Sans", sans-serif;\n font-size: medium;\n font-weight: 400;\n border-color: white;\n border-style: solid;\n border-width: thin;\n border-radius: 4px;\n background-color: #2B81AF;\n}\n.igv-generic-dialog-container .igv-generic-dialog-ok div:hover {\n cursor: pointer;\n background-color: #25597f;\n}\n\n.igv-generic-container {\n position: fixed;\n top: 20%;\n left: 75%;\n transform: translateX(-50%);\n z-index: 2048;\n background-color: white;\n cursor: pointer;\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n justify-content: flex-start;\n align-items: center;\n}\n.igv-generic-container > div:nth-child(1) {\n cursor: move;\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: flex-end;\n align-items: center;\n height: 24px;\n width: 100%;\n background-color: #dddddd;\n}\n.igv-generic-container > div:nth-child(1) i {\n display: block;\n color: #5f5f5f;\n cursor: pointer;\n width: 14px;\n height: 14px;\n margin-right: 8px;\n margin-bottom: 4px;\n}\n\n.igv-menu-popup {\n position: absolute;\n top: 0;\n left: 0;\n width: max-content;\n max-width: 400px;\n z-index: 512;\n cursor: pointer;\n font-family: "Open Sans", sans-serif;\n font-size: small;\n font-weight: 400;\n color: #4b4b4b;\n background: white;\n border-radius: 4px;\n border-color: #7F7F7F;\n border-style: solid;\n border-width: thin;\n display: flex;\n flex-flow: column;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: flex-end;\n text-align: left;\n}\n.igv-menu-popup > div:not(:first-child) {\n width: 100%;\n}\n.igv-menu-popup > div:not(:first-child) > div {\n background: white;\n}\n.igv-menu-popup > div:not(:first-child) > div.context-menu {\n padding-left: 4px;\n padding-right: 4px;\n}\n.igv-menu-popup > div:not(:first-child) > div:last-child {\n border-bottom-left-radius: 4px;\n border-bottom-right-radius: 4px;\n border-bottom-color: transparent;\n border-bottom-style: solid;\n border-bottom-width: thin;\n}\n.igv-menu-popup > div:not(:first-child) > div:hover {\n background: #efefef;\n}\n\n.igv-menu-popup-shim {\n padding-left: 8px;\n padding-right: 8px;\n padding-bottom: 1px;\n padding-top: 1px;\n}\n\n.igv-menu-popup-header {\n position: relative;\n width: 100%;\n height: 24px;\n cursor: move;\n border-top-color: transparent;\n border-top-left-radius: 4px;\n border-top-right-radius: 4px;\n border-bottom-color: #7F7F7F;\n border-bottom-style: solid;\n border-bottom-width: thin;\n background-color: #eee;\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: flex-end;\n align-items: center;\n}\n.igv-menu-popup-header div {\n margin-right: 4px;\n height: 12px;\n width: 12px;\n color: #7F7F7F;\n}\n.igv-menu-popup-header div:hover {\n cursor: pointer;\n color: #444;\n}\n\n.igv-menu-popup-check-container {\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: center;\n width: 100%;\n height: 20px;\n margin-right: 4px;\n background-color: transparent;\n}\n.igv-menu-popup-check-container div {\n padding-top: 2px;\n padding-left: 8px;\n}\n.igv-menu-popup-check-container div:first-child {\n position: relative;\n width: 12px;\n height: 12px;\n}\n.igv-menu-popup-check-container div:first-child svg {\n position: absolute;\n width: 12px;\n height: 12px;\n}\n\n.igv-user-feedback {\n position: fixed;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n width: 512px;\n height: 360px;\n z-index: 2048;\n background-color: white;\n border-color: #a2a2a2;\n border-style: solid;\n border-width: thin;\n font-family: "Open Sans", sans-serif;\n font-size: medium;\n font-weight: 400;\n color: #444;\n display: flex;\n flex-direction: column;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: center;\n}\n.igv-user-feedback div:first-child {\n position: relative;\n height: 24px;\n width: 100%;\n background-color: white;\n border-bottom-color: #a2a2a2;\n border-bottom-style: solid;\n border-bottom-width: thin;\n}\n.igv-user-feedback div:first-child div {\n position: absolute;\n top: 2px;\n width: 16px;\n height: 16px;\n background-color: transparent;\n}\n.igv-user-feedback div:first-child div:first-child {\n left: 8px;\n}\n.igv-user-feedback div:first-child div:last-child {\n cursor: pointer;\n right: 8px;\n}\n.igv-user-feedback div:last-child {\n width: 100%;\n height: calc(100% - 24px);\n border-width: 0;\n}\n.igv-user-feedback div:last-child div {\n width: auto;\n height: auto;\n margin: 8px;\n}\n\n.igv-loading-spinner-container {\n z-index: 1024;\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n width: 32px;\n height: 32px;\n display: flex;\n flex-direction: row;\n flex-wrap: nowrap;\n justify-content: center;\n align-items: center;\n}\n.igv-loading-spinner-container > div {\n box-sizing: border-box;\n width: 100%;\n height: 100%;\n border-radius: 50%;\n border: 4px solid rgba(128, 128, 128, 0.5);\n border-top-color: rgb(255, 255, 255);\n animation: spin 1s ease-in-out infinite;\n -webkit-animation: spin 1s ease-in-out infinite;\n}\n\n@keyframes spin {\n to {\n -webkit-transform: rotate(360deg);\n transform: rotate(360deg);\n }\n}\n@-webkit-keyframes spin {\n to {\n -webkit-transform: rotate(360deg);\n transform: rotate(360deg);\n }\n}\n.igv-roi-menu {\n position: absolute;\n z-index: 512;\n font-family: "Open Sans", sans-serif;\n font-size: small;\n font-weight: 400;\n color: #4b4b4b;\n background-color: white;\n width: 192px;\n border-radius: 4px;\n border-color: #7F7F7F;\n border-style: solid;\n border-width: thin;\n display: flex;\n flex-direction: column;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: stretch;\n}\n.igv-roi-menu > div:first-child {\n height: 24px;\n border-top-color: transparent;\n border-top-left-radius: 4px;\n border-top-right-radius: 4px;\n border-bottom-color: #7F7F7F;\n border-bottom-style: solid;\n border-bottom-width: thin;\n background-color: #eee;\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: flex-end;\n align-items: center;\n}\n.igv-roi-menu > div:first-child > div {\n margin-right: 4px;\n height: 12px;\n width: 12px;\n color: #7F7F7F;\n}\n.igv-roi-menu > div:first-child > div:hover {\n cursor: pointer;\n color: #444;\n}\n.igv-roi-menu > div:last-child {\n background-color: white;\n border-bottom-left-radius: 4px;\n border-bottom-right-radius: 4px;\n border-bottom-color: transparent;\n border-bottom-style: solid;\n border-bottom-width: 0;\n display: flex;\n flex-direction: column;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: stretch;\n text-align: start;\n vertical-align: middle;\n}\n.igv-roi-menu > div:last-child > div {\n height: 24px;\n padding-left: 4px;\n border-bottom-style: solid;\n border-bottom-width: thin;\n border-bottom-color: #7f7f7f;\n}\n.igv-roi-menu > div:last-child > div:not(:first-child):hover {\n cursor: pointer;\n background-color: rgba(127, 127, 127, 0.1);\n}\n.igv-roi-menu > div:last-child div:first-child {\n font-style: italic;\n text-align: center;\n padding-right: 4px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n.igv-roi-menu > div:last-child > div:last-child {\n border-bottom-width: 0;\n border-bottom-color: transparent;\n}\n\n.igv-roi-placeholder {\n font-style: normal;\n color: rgba(75, 75, 75, 0.6);\n}\n\n.igv-roi-table {\n position: absolute;\n z-index: 1024;\n display: flex;\n flex-flow: column;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: stretch;\n resize: both;\n overflow: hidden;\n width: min-content;\n max-width: 1600px;\n border-color: #7f7f7f;\n border-radius: 4px;\n border-style: solid;\n border-width: thin;\n font-family: "Open Sans", sans-serif;\n font-size: 12px;\n font-weight: 400;\n background-color: white;\n cursor: default;\n}\n.igv-roi-table > div {\n height: 24px;\n font-size: 14px;\n text-align: start;\n vertical-align: middle;\n line-height: 24px;\n}\n.igv-roi-table > div:first-child {\n border-color: transparent;\n border-top-left-radius: 4px;\n border-top-right-radius: 4px;\n border-top-width: 0;\n border-bottom-color: #7f7f7f;\n border-bottom-style: solid;\n border-bottom-width: thin;\n background-color: #eee;\n cursor: move;\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: space-between;\n align-items: center;\n}\n.igv-roi-table > div:first-child > div:first-child {\n text-align: center;\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n margin-left: 4px;\n margin-right: 4px;\n width: calc(100% - 4px - 12px);\n}\n.igv-roi-table > div:first-child > div:last-child {\n margin-right: 4px;\n margin-bottom: 2px;\n height: 12px;\n width: 12px;\n color: #7f7f7f;\n}\n.igv-roi-table > div:first-child > div:last-child > svg {\n display: block;\n}\n.igv-roi-table > div:first-child > div:last-child:hover {\n cursor: pointer;\n color: #444;\n}\n.igv-roi-table > .igv-roi-table-description {\n padding: 4px;\n margin-left: 4px;\n word-break: break-all;\n overflow-y: auto;\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n background-color: transparent;\n}\n.igv-roi-table > .igv-roi-table-goto-explainer {\n margin-top: 5px;\n margin-left: 4px;\n color: #7F7F7F;\n font-style: italic;\n height: 24px;\n border-top: solid lightgray;\n background-color: transparent;\n}\n.igv-roi-table > .igv-roi-table-column-titles {\n height: 24px;\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: stretch;\n align-items: stretch;\n padding-right: 16px;\n background-color: white;\n border-top-color: #7f7f7f;\n border-top-style: solid;\n border-top-width: thin;\n border-bottom-color: #7f7f7f;\n border-bottom-style: solid;\n border-bottom-width: thin;\n}\n.igv-roi-table > .igv-roi-table-column-titles > div {\n font-size: 14px;\n vertical-align: middle;\n line-height: 24px;\n text-align: left;\n margin-left: 4px;\n height: 24px;\n overflow: hidden;\n text-overflow: ellipsis;\n border-right-color: #7f7f7f;\n border-right-style: solid;\n border-right-width: thin;\n}\n.igv-roi-table > .igv-roi-table-column-titles > div:last-child {\n border-right: unset;\n}\n.igv-roi-table > .igv-roi-table-row-container {\n display: flex;\n flex-flow: column;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: stretch;\n overflow: auto;\n height: 360px;\n flex: 1 1 auto;\n background-color: transparent;\n}\n.igv-roi-table > .igv-roi-table-row-container > .igv-roi-table-row {\n height: 24px;\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: stretch;\n align-items: stretch;\n}\n.igv-roi-table > .igv-roi-table-row-container > .igv-roi-table-row > div {\n font-size: 14px;\n vertical-align: middle;\n line-height: 24px;\n text-align: left;\n margin-left: 4px;\n height: 24px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n border-right-color: transparent;\n border-right-style: solid;\n border-right-width: thin;\n}\n.igv-roi-table > .igv-roi-table-row-container > .igv-roi-table-row > div:last-child {\n border-right: unset;\n}\n.igv-roi-table > .igv-roi-table-row-container > .igv-roi-table-row-hover {\n background-color: rgba(0, 0, 0, 0.04);\n}\n.igv-roi-table > div:last-child {\n min-height: 32px;\n height: 32px;\n line-height: 32px;\n border-top-color: #7f7f7f;\n border-top-style: solid;\n border-top-width: thin;\n border-bottom-color: transparent;\n border-bottom-left-radius: 4px;\n border-bottom-right-radius: 4px;\n border-bottom-width: 0;\n background-color: #eee;\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: space-around;\n align-items: center;\n}\n\n.igv-roi-table-row-selected {\n background-color: rgba(0, 0, 0, 0.125);\n}\n\n.igv-roi-table-button {\n cursor: pointer;\n height: 20px;\n user-select: none;\n line-height: 20px;\n text-align: center;\n vertical-align: middle;\n font-family: "Open Sans", sans-serif;\n font-size: 13px;\n font-weight: 400;\n color: black;\n padding-left: 6px;\n padding-right: 6px;\n background-color: rgb(239, 239, 239);\n border-color: black;\n border-style: solid;\n border-width: thin;\n border-radius: 3px;\n}\n\n.igv-roi-table-button:hover {\n font-weight: 400;\n background-color: rgba(0, 0, 0, 0.13);\n}\n\n.igv-roi-region {\n z-index: 64;\n position: absolute;\n top: 0;\n bottom: 0;\n pointer-events: none;\n overflow: visible;\n display: flex;\n flex-direction: column;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: stretch;\n}\n.igv-roi-region > div {\n position: relative;\n width: 100%;\n height: 8px;\n pointer-events: auto;\n}\n\n.igv-roi-menu-row {\n height: 24px;\n padding-left: 8px;\n font-size: small;\n text-align: start;\n vertical-align: middle;\n line-height: 24px;\n background-color: white;\n}\n\n.igv-roi-menu-row-edit-description {\n width: -webkit-fill-available;\n font-size: small;\n text-align: start;\n vertical-align: middle;\n background-color: white;\n padding-left: 4px;\n padding-right: 4px;\n padding-bottom: 4px;\n display: flex;\n flex-direction: column;\n flex-wrap: nowrap;\n justify-content: stretch;\n align-items: stretch;\n}\n.igv-roi-menu-row-edit-description > label {\n margin-left: 2px;\n margin-bottom: 0;\n display: block;\n width: -webkit-fill-available;\n}\n.igv-roi-menu-row-edit-description > input {\n display: block;\n margin-left: 2px;\n margin-right: 2px;\n margin-bottom: 1px;\n width: -webkit-fill-available;\n}\n\n.picker_wrapper.no_alpha .picker_alpha {\n display: none;\n}\n\n.picker_wrapper.no_editor .picker_editor {\n position: absolute;\n z-index: -1;\n opacity: 0;\n}\n\n.picker_wrapper.no_cancel .picker_cancel {\n display: none;\n}\n\n.layout_default.picker_wrapper {\n display: flex;\n flex-flow: row wrap;\n justify-content: space-between;\n align-items: stretch;\n font-size: 10px;\n width: 25em;\n padding: 0.5em;\n}\n\n.layout_default.picker_wrapper input, .layout_default.picker_wrapper button {\n font-size: 1rem;\n}\n\n.layout_default.picker_wrapper > * {\n margin: 0.5em;\n}\n\n.layout_default.picker_wrapper::before {\n content: "";\n display: block;\n width: 100%;\n height: 0;\n order: 1;\n}\n\n.layout_default .picker_slider, .layout_default .picker_selector {\n padding: 1em;\n}\n\n.layout_default .picker_hue {\n width: 100%;\n}\n\n.layout_default .picker_sl {\n flex: 1 1 auto;\n}\n\n.layout_default .picker_sl::before {\n content: "";\n display: block;\n padding-bottom: 100%;\n}\n\n.layout_default .picker_editor {\n order: 1;\n width: 6.5rem;\n}\n\n.layout_default .picker_editor input {\n width: 100%;\n height: 100%;\n}\n\n.layout_default .picker_sample {\n order: 1;\n flex: 1 1 auto;\n}\n\n.layout_default .picker_done, .layout_default .picker_cancel {\n order: 1;\n}\n\n.picker_wrapper {\n box-sizing: border-box;\n background: #f2f2f2;\n box-shadow: 0 0 0 1px silver;\n cursor: default;\n font-family: sans-serif;\n color: #444;\n pointer-events: auto;\n}\n\n.picker_wrapper:focus {\n outline: none;\n}\n\n.picker_wrapper button, .picker_wrapper input {\n box-sizing: border-box;\n border: none;\n box-shadow: 0 0 0 1px silver;\n outline: none;\n}\n\n.picker_wrapper button:focus, .picker_wrapper button:active, .picker_wrapper input:focus, .picker_wrapper input:active {\n box-shadow: 0 0 2px 1px #1e90ff;\n}\n\n.picker_wrapper button {\n padding: 0.4em 0.6em;\n cursor: pointer;\n background-color: #f5f5f5;\n background-image: linear-gradient(0deg, gainsboro, transparent);\n}\n\n.picker_wrapper button:active {\n background-image: linear-gradient(0deg, transparent, gainsboro);\n}\n\n.picker_wrapper button:hover {\n background-color: #fff;\n}\n\n.picker_selector {\n position: absolute;\n z-index: 1;\n display: block;\n -webkit-transform: translate(-50%, -50%);\n transform: translate(-50%, -50%);\n border: 2px solid #fff;\n border-radius: 100%;\n box-shadow: 0 0 3px 1px #67b9ff;\n background: currentColor;\n cursor: pointer;\n}\n\n.picker_slider .picker_selector {\n border-radius: 2px;\n}\n\n.picker_hue {\n position: relative;\n background-image: linear-gradient(90deg, red, yellow, lime, cyan, blue, magenta, red);\n box-shadow: 0 0 0 1px silver;\n}\n\n.picker_sl {\n position: relative;\n box-shadow: 0 0 0 1px silver;\n background-image: linear-gradient(180deg, white, rgba(255, 255, 255, 0) 50%), linear-gradient(0deg, black, rgba(0, 0, 0, 0) 50%), linear-gradient(90deg, #808080, rgba(128, 128, 128, 0));\n}\n\n.picker_alpha, .picker_sample {\n position: relative;\n background: linear-gradient(45deg, lightgrey 25%, transparent 25%, transparent 75%, lightgrey 75%) 0 0/2em 2em, linear-gradient(45deg, lightgrey 25%, white 25%, white 75%, lightgrey 75%) 1em 1em/2em 2em;\n box-shadow: 0 0 0 1px silver;\n}\n\n.picker_alpha .picker_selector, .picker_sample .picker_selector {\n background: none;\n}\n\n.picker_editor input {\n font-family: monospace;\n padding: 0.2em 0.4em;\n}\n\n.picker_sample::before {\n content: "";\n position: absolute;\n display: block;\n width: 100%;\n height: 100%;\n background: currentColor;\n}\n\n.picker_arrow {\n position: absolute;\n z-index: -1;\n}\n\n.picker_wrapper.popup {\n position: absolute;\n z-index: 2;\n margin: 1.5em;\n}\n\n.picker_wrapper.popup, .picker_wrapper.popup .picker_arrow::before, .picker_wrapper.popup .picker_arrow::after {\n background: #f2f2f2;\n box-shadow: 0 0 10px 1px rgba(0, 0, 0, 0.4);\n}\n\n.picker_wrapper.popup .picker_arrow {\n width: 3em;\n height: 3em;\n margin: 0;\n}\n\n.picker_wrapper.popup .picker_arrow::before, .picker_wrapper.popup .picker_arrow::after {\n content: "";\n display: block;\n position: absolute;\n top: 0;\n left: 0;\n z-index: -99;\n}\n\n.picker_wrapper.popup .picker_arrow::before {\n width: 100%;\n height: 100%;\n -webkit-transform: skew(45deg);\n transform: skew(45deg);\n -webkit-transform-origin: 0 100%;\n transform-origin: 0 100%;\n}\n\n.picker_wrapper.popup .picker_arrow::after {\n width: 150%;\n height: 150%;\n box-shadow: none;\n}\n\n.popup.popup_top {\n bottom: 100%;\n left: 0;\n}\n\n.popup.popup_top .picker_arrow {\n bottom: 0;\n left: 0;\n -webkit-transform: rotate(-90deg);\n transform: rotate(-90deg);\n}\n\n.popup.popup_bottom {\n top: 100%;\n left: 0;\n}\n\n.popup.popup_bottom .picker_arrow {\n top: 0;\n left: 0;\n -webkit-transform: rotate(90deg) scale(1, -1);\n transform: rotate(90deg) scale(1, -1);\n}\n\n.popup.popup_left {\n top: 0;\n right: 100%;\n}\n\n.popup.popup_left .picker_arrow {\n top: 0;\n right: 0;\n -webkit-transform: scale(-1, 1);\n transform: scale(-1, 1);\n}\n\n.popup.popup_right {\n top: 0;\n left: 100%;\n}\n\n.popup.popup_right .picker_arrow {\n top: 0;\n left: 0;\n}\n\n.igv-container {\n position: relative;\n display: flex;\n flex-direction: column;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: flex-start;\n padding-top: 4px;\n user-select: none;\n -webkit-user-select: none;\n -ms-user-select: none;\n min-height: 160px;\n}\n\n.igv-viewport {\n position: relative;\n margin-top: 5px;\n line-height: 1;\n overflow-x: hidden;\n overflow-y: hidden;\n}\n\n.igv-viewport-content {\n position: relative;\n width: 100%;\n}\n.igv-viewport-content > canvas {\n position: relative;\n display: block;\n}\n\n.igv-column-container {\n position: relative;\n display: flex;\n flex-direction: row;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: stretch;\n width: 100%;\n}\n\n.igv-column-shim {\n width: 1px;\n margin-left: 2px;\n margin-right: 2px;\n background-color: #545453;\n}\n\n.igv-axis-column {\n position: relative;\n display: flex;\n flex-direction: column;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: flex-start;\n box-sizing: border-box;\n height: 100%;\n width: 50px;\n}\n.igv-axis-column > div {\n position: relative;\n margin-top: 5px;\n width: 100%;\n}\n.igv-axis-column > div > div {\n z-index: 512;\n position: absolute;\n top: 8px;\n left: 8px;\n width: fit-content;\n height: fit-content;\n background-color: transparent;\n display: grid;\n align-items: start;\n justify-items: center;\n}\n.igv-axis-column > div > div > input {\n display: block;\n margin: unset;\n cursor: pointer;\n}\n\n.igv-column {\n position: relative;\n position: relative;\n display: flex;\n flex-direction: column;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: flex-start;\n box-sizing: border-box;\n height: 100%;\n}\n\n.igv-sample-info-column {\n position: relative;\n display: flex;\n flex-direction: column;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: flex-start;\n box-sizing: border-box;\n height: 100%;\n}\n\n.igv-sample-name-column {\n position: relative;\n display: flex;\n flex-direction: column;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: flex-start;\n box-sizing: border-box;\n height: 100%;\n}\n\n.igv-scrollbar-column {\n position: relative;\n display: flex;\n flex-direction: column;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: flex-start;\n box-sizing: border-box;\n height: 100%;\n width: 14px;\n}\n.igv-scrollbar-column > div {\n position: relative;\n margin-top: 5px;\n width: 14px;\n}\n.igv-scrollbar-column > div > div {\n cursor: pointer;\n position: absolute;\n top: 0;\n left: 2px;\n width: 8px;\n border-width: 1px;\n border-style: solid;\n border-color: #c4c4c4;\n border-top-left-radius: 4px;\n border-top-right-radius: 4px;\n border-bottom-left-radius: 4px;\n border-bottom-right-radius: 4px;\n}\n.igv-scrollbar-column > div > div:hover {\n background-color: #c4c4c4;\n}\n\n.igv-track-drag-column {\n position: relative;\n display: flex;\n flex-direction: column;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: flex-start;\n box-sizing: border-box;\n height: 100%;\n width: 12px;\n background-color: white;\n}\n.igv-track-drag-column > .igv-track-drag-handle {\n z-index: 512;\n position: relative;\n cursor: pointer;\n margin-top: 5px;\n width: 100%;\n border-style: solid;\n border-width: 0;\n border-top-right-radius: 6px;\n border-bottom-right-radius: 6px;\n}\n.igv-track-drag-column .igv-track-drag-handle-color {\n background-color: #c4c4c4;\n}\n.igv-track-drag-column .igv-track-drag-handle-hover-color {\n background-color: #787878;\n}\n.igv-track-drag-column .igv-track-drag-handle-selected-color {\n background-color: #0963fa;\n}\n.igv-track-drag-column > .igv-track-drag-shim {\n position: relative;\n margin-top: 5px;\n width: 100%;\n border-style: solid;\n border-width: 0;\n}\n\n.igv-gear-menu-column {\n position: relative;\n display: flex;\n flex-direction: column;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: flex-start;\n box-sizing: border-box;\n height: 100%;\n width: 28px;\n}\n.igv-gear-menu-column > div {\n display: flex;\n flex-direction: column;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: center;\n margin-top: 5px;\n width: 100%;\n background: white;\n}\n.igv-gear-menu-column > div > div {\n position: relative;\n margin-top: 4px;\n width: 16px;\n height: 16px;\n color: #7F7F7F;\n}\n.igv-gear-menu-column > div > div:hover {\n cursor: pointer;\n color: #444;\n}\n\n.igv-vertical-center {\n margin: 0 !important;\n top: 50% !important;\n -ms-transform: translateY(-50%) !important;\n transform: translateY(-50%) !important;\n}\n\n/*# sourceMappingURL=igv.css.map */\n'),n.adoptedStyleSheets=[e]}if(this.root=t({class:"igv-container"}),n.appendChild(this.root),this.alert=new Os(this.root),this.columnContainer=t({class:"igv-column-container"}),this.root.appendChild(this.columnContainer),this.menuPopup=new pd(this.columnContainer),this.menuUtils=new or(this),this.initialize(e),this.trackViews=[],this.constants={dragThreshold:3,scrollThreshold:5,defaultColor:"rgb(0,0,150)",doubleClickDelay:e.doubleClickDelay||500},this.eventHandlers={},e.listeners)for(let t of Object.keys(e.listeners))this.on(t,e.listeners[t]);this.on("trackremoved",(()=>{0===this.findTracks((e=>"function"==typeof e.getSamples)).length&&(this.sampleInfoControl.setButtonVisibility(!1),this.sampleNameViewportWidth=void 0,this.showSampleNames=!1,this.sampleNameControl.setState(this.showSampleNames),this.sampleNameControl.hide(),this.layoutChange())})),this.on("didchangecolumnlayout",(()=>{if(zh.length>0){const e=zh.length;for(let t=0;t<e;t++)zh[t].dispose();zh.length=0}})),this.addEventHandlers(),this.sampleInfo=new rd(this),this.createStandardControls(e),this.roiManager=new mv(this),this.previousTrackColors=[]}get doShowROITable(){return this.roiManager.roiTableIsVisible()}initialize(e){this.flanking=e.flanking,this.crossDomainProxy=e.crossDomainProxy,this.formats=e.formats,this.trackDefaults=e.trackDefaults,this.nucleotideColors=e.nucleotideColors||Bo;for(let e of Object.keys(this.nucleotideColors))this.nucleotideColors[e.toLowerCase()]=this.nucleotideColors[e];this.doShowTrackLabels=e.showTrackLabels,this.doShowCenterLine=e.showCenterGuide,this.doShowCursorGuide=e.showCursorGuide,this.showSampleNames=e.showSampleNames,this.sampleNameViewportWidth=void 0,e.sampleNameViewportWidth&&(this.sampleNameViewportWidth=e.sampleNameViewportWidth),e.search&&(this.searchConfig={type:"json",url:e.search.url,coords:void 0===e.search.coords?1:e.search.coords,chromosomeField:e.search.chromosomeField||"chromosome",startField:e.search.startField||"start",endField:e.search.endField||"end",geneField:e.search.geneField||"gene",snpField:e.search.snpField||"snp",resultsField:e.search.resultsField})}createStandardControls(e){this.setTrackLabelVisibility(e.showTrackLabels),this.navbar=new av(e,this),this.columnContainer.parentNode.insertBefore(this.navbar.navigation,this.columnContainer),!1===e.showControls&&this.navbar.hide(),this.cursorGuide=new Mv(this.columnContainer,this),this.inputDialog=new vs(this.root),this.inputDialog.container.id=`igv-input-dialog-${o()}`,this.dataRangeDialog=new ur(this,this.root),this.dataRangeDialog.container.id=`igv-data-range-dialog-${o()}`,this.genericColorPicker=new Ls({parent:this.root,width:180}),this.genericColorPicker.container.id=`igv-track-color-picker-${o()}`,this.sliderDialog=new Rv(this.root),this.sliderDialog.container.id=`igv-slider-dialog-${o()}`}getSampleNameViewportWidth(){return void 0===this.sampleNameViewportWidth||!1===this.showSampleNames?0:this.sampleNameViewportWidth}getSampleInfoViewportWidth(){return this.getSampleInfoColumnWidth()}isMultiLocusMode(){return this.referenceFrameList&&this.referenceFrameList.length>1}isMultiLocusWholeGenomeView(){if(void 0===this.referenceFrameList||1===this.referenceFrameList.length)return!1;for(let e of this.referenceFrameList)if("all"===e.chr.toLowerCase())return!0;return!1}currentLoci(){const e=e=>`${e.chr}:${e.start+1}-${e.end}`;return void 0===this.referenceFrameList||0===this.referenceFrameList.length?"":1===this.referenceFrameList.length?e(this.referenceFrameList[0]):this.referenceFrameList.map((t=>e(t)))}toSVG(){const{x:e,y:t,width:i,height:n}=this.columnContainer.getBoundingClientRect(),r=new _h({width:i,height:n,backdropColor:"white",multiLocusGap:0,viewbox:{x:0,y:0,width:i,height:n}}),s={deltaX:0,deltaY:-t};for(let e of this.trackViews)e.renderSVGContext(r,s);return s.deltaX=e,this.roiManager.renderSVGContext(this.columnContainer,r,s),r.getSerializedSvg(!0)}saveSVGtoFile(e,t){let i=this.toSVG();if(t){const e=document.createElement("svg");e.innerHTML=i,t.appendChild(e)}const n=e||"igvjs.svg",r=URL.createObjectURL(new Blob([i],{type:"application/octet-stream"}));x(n,r),URL.revokeObjectURL(r)}savePNGtoFile(e){const t=this.toSVG(),i=new Blob([t],{type:"image/svg+xml"}),n=URL.createObjectURL(i),r=document.createElement("img");r.addEventListener("load",(()=>{const t=this.columnContainer.getBoundingClientRect(),i=window.devicePixelRatio,s=t.width*i,o=t.height*i,a=document.createElement("canvas");a.width=s,a.height=o;const c=a.getContext("2d");c.scale(i,i),c.drawImage(r,0,0);const l=a.toDataURL("image/png");x(e=e||"igvjs.png",l),URL.revokeObjectURL(n)})),r.src=n}async loadSession(e){let t;return this.sampleInfo.initialize(),this.roiSets=[],t=e.url||e.file?await Bv.loadSessionFile(e):e,this.loadSessionObject(t)}static async loadSessionFile(e){const t=e.url||e.file;let i;if(e.url&&b(e.url)&&(e.url.startsWith("blob:")||e.url.startsWith("data:"))){const t=Bv.uncompressSession(e.url);i=JSON.parse(t)}else{let n=e.filename;if(n||(n=e.url?await Ks(e.url):e.file.name),n.endsWith(".xml")){const e=Mh.KNOWN_GENOMES,n=await Mn.loadString(t);i=new VF(n,e)}else if(n.endsWith("hub.txt")){i={reference:(await kh.loadHub(t,e)).getGenomeConfig()}}else{if(!n.endsWith(".json"))throw Error("Unrecognized session file format:"+n);i=await Mn.loadJson(t)}}return Ov(i)}async loadSessionObject(e){this.cleanHouseForSession(),this.config=e,e.browsers&&(e=await async function(e){const t=e.browsers[0],i={},n=new jd({url:t.url});await n.readHeaderAndFooter(),i.sampleNameViewportWidth=20,i.genome="hg38";const r=t.state.split(","),s=n.bpResolutions[Number.parseInt(r[2])],o=Number.parseInt(r[0]),a=Math.floor(Number.parseFloat(r[3])*s),c=a+Math.floor(1700*s);return i.locus=`${n.chromosomes[o].name}:${a}-${c}`,i.tracks=(t.tracks||[]).filter((e=>!("refgene"===e.format||"cellType"===e.name))),i.tracks.push({type:"shoebox",url:t.url,name:t.name,colorScale:t.colorScale,_hicFile:n}),i}(e)),this.navbar.sampleInfoControl.setButtonVisibility(!1),this.showSampleNames=e.showSampleNames||!1,this.navbar.sampleNameControl.setState(!0===this.showSampleNames),e.sampleNameViewportWidth&&(this.sampleNameViewportWidth=e.sampleNameViewportWidth),Zs(this.columnContainer,"igv-axis-column"),Zs(this.columnContainer,"igv-sample-info-column"),Zs(this.columnContainer,"igv-sample-name-column"),Zs(this.columnContainer,"igv-scrollbar-column"),Zs(this.columnContainer,"igv-track-drag-column"),Zs(this.columnContainer,"igv-gear-menu-column");const t=e.reference||e.genome;if(!t)return void console.warn("No genome or reference object specified");const i=b(t)?await Mh.expandReference(this.alert,t):t;if(await this.loadReference(i,i.locus||e.locus),this.centerLineList=this.createCenterLineList(this.columnContainer),!1!==e.showIdeogram){const e=new MF(this),t=new kd(this,this.columnContainer,e);this.trackViews.push(t)}if(!1!==e.showRuler){const e=new ld(this),t=new kd(this,this.columnContainer,e);this.trackViews.push(t)}e.qtlSelections&&(this.qtlSelections=Ev.fromJSON(e.qtlSelections)),void 0!==e.showROIOverlays&&(this.roiManager.showOverlays=e.showROIOverlays),this.roiManager.clearROIs(),e.roi?this.roiManager.loadROI(e.roi):await this.roiManager.reset();const n=[];if(e.sampleinfo)for(const t of e.sampleinfo)t.file?n.push(t.file):this.loadSampleInfo(t);const r=i.tracks||[],s=e.tracks?r.concat(e.tracks):r;0===s.filter((e=>"sequence"===e.type&&!e.url&&!e.fastaURL)).length&&s.push({type:"sequence",order:ah,removable:!1});const o=s.filter((e=>void 0!==e.file)).map((({file:e})=>e)),a=s.filter((e=>void 0!==e.indexFile)).map((({indexFile:e})=>e));a.length>0&&o.push(...a),n.length>0&&o.push(...n),o.length>0&&alert(`Local files cannot be loaded automatically.\nThis session contains references to these local files:\n${o.map((e=>` ${e}`)).join("\n")}`);const c=s.filter((e=>void 0===e.file));let l=1;for(let e of c)void 0===e.order&&(e.order=l++);await this.loadTrackList(c);for(let e of this.trackViews.filter((e=>"ruler"===e.track.type||"ideogram"===e.track.type)))await e.updateViews();return this.trackViews.some((e=>e.track.selected))&&this.navbar.setEnableTrackSelection(!0),this.updateUIWithReferenceFrameList(),this.updateLocusSearchWidget(),s}cleanHouseForSession(){for(let e of this.trackViews)e.removeDOMFromColumnContainer();this.columnContainer.querySelectorAll(".igv-axis-column, .igv-column-shim, .igv-column, .igv-sample-info-column, .igv-sample-name-column, .igv-scrollbar-column, .igv-track-drag-column, .igv-gear-menu-column").forEach((e=>e.remove())),this.trackViews=[],this.circularView&&this.circularView.clearChords()}async loadReference(e,t){let i;this.removeAllTracks(),this.roiManager.clearROIs(),this.navbar.setEnableTrackSelection(!1),i=e.gbkURL?await Bl(e.gbkURL):await Sv.createGenome(e,this);const n=void 0===this.genome||this.genome.id!==i.id;this.genome=i,this.navbar.updateGenome(i);let r=t||i.initialLocus;Array.isArray(r)&&(r=r.join(" "));if(!await this.search(r,!0))throw new Error(`Cannot set initial locus ${r}`);if(n){let t;if(e.hubURL){t=(await kh.loadHub(e.hubURL)).getGroupedTrackConfigurations()}this.fireEvent("genomechange",[{genome:i,trackConfigurations:t}]),this.circularView&&this.circularView.setAssembly({name:this.genome.id,id:this.genome.id,chromosomes:$f(this.genome)})}}async loadGenome(e){let t;e.genarkAccession&&(e.url=xh(e.genarkAccession)),e.url&&(b(e.url)&&e.url.endsWith("/hub.txt")?(e.hubURL=e.url,delete e.url):"gbk"===function(e){let t;if(e instanceof File)t=e.name;else{if("string"!=typeof e)throw new Error("Input must be a File object or a URL string");t=e}const i=t.split(".").pop();return i.split("?")[0]}(e.url)&&(e.gbkURL=e.url,delete e.url));if(e.hubURL||e.url&&b(e.url)&&e.url.endsWith("/hub.txt")){t=(await kh.loadHub(e.hubURL||e.url,e)).getGenomeConfig()}else t=b(e)||!(e.url||e.fastaURL||e.twoBitURL||e.gbkURL)?await Mh.expandReference(this.alert,e):e;let i;await this.loadReference(t),i=t.gbkURL||"gbk"===t.format?[{name:"Annotations",format:"gbk",url:t.gbkURL}]:t.tracks||[];return 0===i.filter((e=>"sequence"===e.type)).length&&i.push({type:"sequence",order:ah}),await this.loadTrackList(i),await this.updateViews(),this.genome}async loadTrackHub(e){const t=Ov((await kh.loadHub(e.url,e)).getGenomeConfig());return this.loadGenome(t)}updateUIWithReferenceFrameList(){const e=this.referenceFrameList;this.isMultiLocusWholeGenomeView()||Mh.isWholeGenomeView(e[0].chr),this.navbar.navbarDidResize(),Hv(this.trackViews,this.doShowTrackLabels),this.doShowCenterLine&&Mh.isWholeGenomeView(e[0].chr)&&this.navbar.centerLineButton.boundMouseClickHandler(),this.doShowCursorGuide&&Mh.isWholeGenomeView(e[0].chr)&&this.navbar.cursorGuideButton.boundMouseClickHandler(),this.setCenterLineAndCenterLineButtonVisibility(Mh.isWholeGenomeView(e[0].chr))}setCenterLineAndCenterLineButtonVisibility(e){e?this.navbar.centerLineButton.setVisibility(!1):this.navbar.centerLineButton.setVisibility(this.config.showCenterGuideButton);for(let t of this.centerLineList)e?this.setCenterLineVisibility(!e):this.setCenterLineVisibility(this.doShowCenterLine)}setTrackLabelVisibility(e){Hv(this.trackViews,e)}setROITableVisibility(e){!0===e?this.roiManager.presentTable():this.roiManager.dismissTable()}setCursorGuideVisibility(e){e?this.cursorGuide.show():this.cursorGuide.hide()}setCustomCursorGuideMouseHandler(e){this.cursorGuide.customMouseHandler=e}setCenterLineVisibility(e){for(let t of this.centerLineList)!0===e?(t.show(),t.repaint()):t.hide()}async loadTrackList(e){let t=0;for(let i of e)void 0===i.order&&(i.order=t++);const i=[];for(let t of e)i.push(this._loadTrack(t));const n=await Promise.all(i);return this.trackViews.filter((function(e){return e.track.autoscaleGroup})).length>0&&this.updateViews(),n}async loadTrack(e){e.sync=!1!==e.sync;const t=this._loadTrack(e);return t&&e.autoscaleGroup&&(await t,this.updateViews()),t}async _loadTrack(e){b(e)&&(e=JSON.parse(e));try{if(e.hidden){const t=Hl(e,this.genome);return void await t.getFeatures({chr:"1",start:0,end:Number.MAX_SAFE_INTEGER})}const t=await this.createTrack(e);if("sampleinfo"===e.type)return void this.layoutChange();if(void 0===t)return;return this.addTrack(e,t)}catch(t){let i=t.message||t.error||t.toString();const n={401:"Access unauthorized",403:"Access forbidden",404:"Not found"};n.hasOwnProperty(i)&&(i=n[i]),i=`${i} : ${_(e.url)?e.url.name:e.url}`;const r=new Error(i);throw console.error(r),r}}async addTrack(e,t){void 0===t.order&&(t.order=this.trackViews.length);const i=new kd(this,this.columnContainer,t);if(this.trackViews.push(i),Hv(this.trackViews,this.doShowTrackLabels),"function"==typeof t.postInit)try{i.startSpinner(),await t.postInit()}finally{i.stopSpinner()}return t.autoscaleGroup||(e.sync?await i.updateViews():i.updateViews()),"function"==typeof t.hasSamples&&t.hasSamples()&&(this.sampleInfo.hasAttributes()&&this.sampleInfoControl.setButtonVisibility(!0),!1!==this.config.showSampleNameButton&&this.sampleNameControl.show()),this.reorderTracks(),this.fireEvent("trackorderchanged",[this.getTrackOrder()]),t.trackView.enableTrackSelection(this.navbar.getEnableTrackSelection()),t}async loadROI(e){return this.roiManager.loadROI(e,this.genome)}clearROIs(){this.roiManager.clearROIs()}async getUserDefinedROIs(){if(this.roiManager){const e=this.roiManager.getUserDefinedROISet();if(void 0===e)return[];const t=await e.getAllFeatures(),i=[];for(let e of Object.values(t))i.push(...e);return i}return[]}getRulerTrackView(){const e=this.trackViews.filter((({track:e})=>"ruler"===e.id));return e.length>0?e[0]:void 0}async createTrack(e){let t=await async function(e){return"function"==typeof e?e():e}
|
|
35
|
+
/*! pako 2.1.0 https://github.com/nodeca/pako @license (MIT AND Zlib) */(e.url||e.fastaURL);if(b(t)&&(t=t.trim()),t)if(e.format)e.format=e.format.toLowerCase();else if(e.fastaURL)e.format="fasta";else if(e.sourceType)"htsget"===e.sourceType&&await Dc.inferFormat(e);else{const t=await wf(e);t&&(e.format=t)}e.type&&qs(e);let i=e.type?e.type.toLowerCase():void 0;if(!i){if(!e.format)throw Error(`Unrecognized track: ${JSON.stringify(e)}`);if("hic"===e.format){const t=new jd(e);if(await t.readHeaderAndFooter(),!t.chromosomeIndexMap.celltype)throw Error("'.hic' files not supported");i="shoebox",e._hicFile=t}else if(i=Vs(e.format),"bedtype"===i){const t=Hl(e,this.genome);e._featureSource=t;const n=await t.trackType();i=n||"annotation"}e.type=i}if(this.trackDefaults&&i){const t=this.trackDefaults[i];if(t)for(let i in t)t.hasOwnProperty(i)&&void 0===e[i]&&(e[i]=t[i])}const n=function(e,t,i){let n;switch(e){case"annotation":case"genes":case"fusionjuncspan":case"snp":n="feature";break;case"seg":case"maf":case"mut":n="seg";break;case"junctions":case"splicejunctions":n="junction";break;default:n=e}return OF.has(n)?OF.get(n)(t,i):void 0}(i,e,this);if(void 0!==n)return e.roi&&e.roi.length>0&&(n.roiSets=e.roi.map((e=>new yv(e,this.genome)))),n;this.alert.present(new Error(`Error creating track. Could not determine track type for file: ${e.url||e}`),void 0)}reorderTracks(){this.trackViews.sort((function(e,t){const i=e=>"ideogram"===e.track.id?1:"ruler"===e.track.id?2:3,n=i(e),r=i(t);if(n===r){return(e.track.order||0)-(t.track.order||0)}return n-r}));for(let{axis:e,viewports:t,sampleInfoViewport:i,sampleNameViewport:n,outerScroll:r,dragHandle:s,gearContainer:o}of this.trackViews){e.remove();for(let{viewportElement:e}of t)e.parentNode.removeChild(e);i.viewport.remove(),n.viewport.remove(),r.remove(),s.remove(),o.remove()}const e=this.columnContainer.querySelectorAll(".igv-column");for(let{axis:t,viewports:i,sampleInfoViewport:n,sampleNameViewport:r,outerScroll:s,dragHandle:o,gearContainer:a}of this.trackViews){this.columnContainer.querySelector(".igv-axis-column").appendChild(t);for(let t=0;t<e.length;t++){const{viewportElement:n}=i[t];e[t].appendChild(n)}this.columnContainer.querySelector(".igv-sample-info-column").appendChild(n.viewport),this.columnContainer.querySelector(".igv-sample-name-column").appendChild(r.viewport),this.columnContainer.querySelector(".igv-scrollbar-column").appendChild(s),this.columnContainer.querySelector(".igv-track-drag-column").appendChild(o),this.columnContainer.querySelector(".igv-gear-menu-column").appendChild(a)}}getTrackOrder(){return this.trackViews.filter((e=>e.track&&e.track.name)).map((e=>e.track.name))}getSelectedTrackViews(){return this.trackViews.filter((e=>!0===e.track.selected))}removeTrackByName(e){const t=this.trackViews.slice();for(let i of t)e===i.track.name&&this.removeTrack(i.track)}removeTrack(e){for(let t of this.trackViews)if(e===t.track){this._removeTrack(t.track);break}}_removeTrack(e){e.disposed||(this.trackViews.splice(this.trackViews.indexOf(e.trackView),1),this.fireEvent("trackremoved",[e]),this.fireEvent("trackorderchanged",[this.getTrackOrder()]),e.trackView&&e.trackView.dispose())}removeAllTracks(){const e=this.trackViews;this.trackViews=[];for(let t of e)"ruler"!==t.track.id&&"ideogram"!==t.track.id?(this.fireEvent("trackremoved",[t.track]),t.dispose()):this.trackViews.push(t)}get ideogramTrackView(){return this.trackViews[0]}get rulerTrackView(){return this.trackViews[1]}findTracks(e,t){let i="function"==typeof e?t=>e(t.track):i=>t===i.track[e];return this.trackViews.filter(i).map((e=>e.track))}get tracks(){return this.trackViews.map((e=>e.track)).filter((e=>void 0!==e))}setTrackHeight(e){this.trackHeight=e,this.trackViews.forEach((function(t){t.setTrackHeight(e)}))}async visibilityChange(){this.layoutChange()}async layoutChange(){if(this.referenceFrameList.find((e=>e.bpPerPixel<0))){const e=this.calculateViewportWidth(this.referenceFrameList.length);for(let t of this.referenceFrameList)t.bpPerPixel=(t.end-t.start)/e}this.referenceFrameList&&this.navbar.navbarDidResize(),Dv.call(this),this.roiManager.updateROIRegionPositions(),await this.updateViews()}async updateViews(){const e=this.trackViews;this.updateLocusSearchWidget();for(let e of this.referenceFrameList)e.bpPerPixel<=10&&await this.genome.getSequence(e.chr,e.start,e.start+1);for(let e of this.centerLineList)e.repaint();if(this.dragObject)for(let t of e)await t.updateViews();else{const t={},i=[];for(const n of e)if(n.track.autoscaleGroup){const e=n.track.autoscaleGroup;t[e]||(t[e]=[]),t[e].push(n)}else i.push(n);if(Object.entries(t).length>0)for(const[e,i]of Object.entries(t)){const e=await Promise.all(i.map((e=>e.getInViewFeatures()))),t=Gs(e.flat());for(const e of i)e.track.dataRange=Object.assign({},t),e.track.autoscale=!1;await Promise.all(i.map((e=>e.updateViews())))}await Promise.all(i.map((e=>e.updateViews())))}}repaintViews(){for(let e of this.trackViews)e.repaintViews()}updateLocusSearchWidget(){if(!this.referenceFrameList)return;const e=this.referenceFrameList,t=this.calculateViewportWidth(this.referenceFrameList.length);for(let i of e)i.end=i.start+i.bpPerPixel*t;const i=1===e.length?this.referenceFrameList[0].chr:"",n=this.referenceFrameList.map((e=>e.getLocusString())).join(" ");this.navbar.updateLocus(n,i),this.fireEvent("locuschange",[this.referenceFrameList])}calculateViewportWidth(e){let{width:t}=this.columnContainer.getBoundingClientRect();return t-=50+this.getSampleInfoViewportWidth()+this.getSampleNameViewportWidth()+14+12+28,t-=5*(e-1),Math.floor(t/e)}minimumBases(){return this.config.minimumBases}zoomIn(){this.zoomWithScaleFactor(.5)}zoomOut(){this.zoomWithScaleFactor(2)}async zoomWithScaleFactor(e,t,i){if(!this.referenceFrameList)return;const n=this.calculateViewportWidth(this.referenceFrameList.length);let r=i?[i]:this.referenceFrameList;for(let i of r)i.zoomWithScaleFactor(this,e,n,t)}async addMultiLocusPanel(e,t,i,n){if(!this.referenceFrameList)return;const r=this.calculateViewportWidth(1+this.referenceFrameList.length),s=this.calculateViewportWidth(this.referenceFrameList.length)/this.calculateViewportWidth(1+this.referenceFrameList.length);for(let e of this.referenceFrameList)e.bpPerPixel*=s;const o=(i-t)/r,a=new QF(this.genome,e,t,i,o),c=n?this.referenceFrameList.indexOf(n):this.referenceFrameList.length-1,l=1+c,{viewportElement:h}=this.trackViews[0].viewports[c],d=lv(h.parentElement);if(this.fireEvent("didchangecolumnlayout"),l===this.referenceFrameList.length){this.referenceFrameList.push(a);for(let e of this.trackViews){const t=ed(e,d,a);e.viewports.push(t)}}else{this.referenceFrameList.splice(l,0,a);for(let e of this.trackViews){const t=ed(e,d,a);e.viewports.splice(l,0,t)}}this.centerLineList=this.createCenterLineList(this.columnContainer),Dv.call(this),await this.updateViews(!0)}createCenterLineList(e){const t=e.querySelectorAll(".igv-center-line");for(let e=0;e<t.length;e++)t[e].remove();const i=[],n=e.querySelectorAll(".igv-column");for(let e=0;e<n.length;e++)i.push(new dv(this,this.referenceFrameList[e],n[e]));return i}async removeMultiLocusPanel(e){const t=this.referenceFrameList.indexOf(e),{viewportElement:i}=this.trackViews[0].viewports[t];cv(t,i.parentElement),this.fireEvent("didchangecolumnlayout");for(let{viewports:e}of this.trackViews)e[t].dispose(),e.splice(t,1);if(this.referenceFrameList.splice(t,1),1===this.referenceFrameList.length&&this.getRulerTrackView())for(let e of this.getRulerTrackView().viewports)e.dismissLocusLabel();const n=this.calculateViewportWidth(1+this.referenceFrameList.length)/this.calculateViewportWidth(this.referenceFrameList.length);await this.rescaleForMultiLocus(n)}async gotoMultilocusPanel(e){const t=this.referenceFrameList.indexOf(e);this.columnContainer.querySelectorAll(".igv-column").forEach(((e,i)=>{i===t||e.remove()})),this.columnContainer.querySelectorAll(".igv-column-shim").forEach((e=>e.remove()));for(let e of this.trackViews){const i=e.viewports[t];e.viewports.filter(((e,i)=>i!==t)).forEach((e=>e.dispose())),e.viewports=[i]}const i=this.calculateViewportWidth(1);e.bpPerPixel=(e.end-e.start)/i,this.referenceFrameList=[e],this.trackViews.forEach((({viewports:e})=>e.forEach((e=>e.setWidth(i))))),this.centerLineList=this.createCenterLineList(this.columnContainer),this.updateUIWithReferenceFrameList(),await this.updateViews(!0)}async rescaleForMultiLocus(e){const t=this.calculateViewportWidth(this.referenceFrameList.length);for(let t of this.referenceFrameList)t.bpPerPixel*=e;for(let{viewports:e}of this.trackViews)for(let i of e)i.setWidth(t);this.centerLineList=this.createCenterLineList(this.columnContainer),this.updateUIWithReferenceFrameList(),await this.updateViews()}async goto(e,t,i){await this.search(e+":"+t+"-"+i)}async doSearch(e,t){const i=await this.search(e,t);return i||this.alert.present(new Error(`Unrecognized locus: <b> ${e} </b>`)),i}async search(e,t){const i=await async function(e,t){if(void 0===t||""===t.trim())return;const i=t.split(" ");let n=[];const r=async t=>{if("all"===t.trim().toLowerCase()||"*"===t)return e.genome.wholeGenomeView?{chr:"all",start:0,end:e.genome.getChromosome("all").bpLength}:void 0;let i,n;if(t.includes(":")&&(i=yF(t,e.isSoftclipped()),i&&(n=await e.genome.loadChromosome(i.chr))),!n){i=void 0;const r=await vF(e,t);r&&(i={chr:r.chr,start:r.start,end:r.end,name:(r.name||t).toUpperCase()}),i||(n=await e.genome.loadChromosome(t),n&&(i={chr:n.name}))}return i&&(n=n||await e.genome.loadChromosome(i.chr),i.chr=n.name,void 0===i.start&&void 0===i.end&&(i.start=0,i.end=n.bpLength)),i};for(let e of i){const t=await r(e);t&&n.push(t)}if(0===n.length){const e=await r(t.replaceAll(" ","+"));e&&n.push(e)}return 0===n.length?void 0:n}(this,e);if(i&&i.length>0){this.referenceFrameList=function(e,t,i,n,r,s){return e.map((e=>{const o=Object.assign({},e);if(i&&o.name&&(o.start=Math.max(0,o.start-i),o.end+=i),!s){const e=t.getChromosome(o.chr);Ws(e.bpLength,o,n)}return new QF(t,o.chr,o.start,o.end,(o.end-o.start)/r)}))}(i,this.genome,this.flanking,this.minimumBases(),this.calculateViewportWidth(i.length),this.isSoftclipped());for(let e of this.trackViews)e.removeViewportsFromColumnContainer();this.columnContainer.querySelectorAll(".igv-column-shim, .igv-column").forEach((e=>e.remove())),hv(this.columnContainer.querySelector(".igv-sample-info-column"),this.referenceFrameList.length),this.fireEvent("didchangecolumnlayout");for(let e of this.trackViews)e.createViewports(this,this.columnContainer,this.referenceFrameList);return this.centerLineList=this.createCenterLineList(this.columnContainer),this.updateUIWithReferenceFrameList(),t||await this.updateViews(),!0}return!1}async loadSampleInfo(e){await this.sampleInfo.loadSampleInfoFile(e.url);for(const{sampleInfoViewport:e}of this.trackViews)e.setWidth(this.getSampleInfoColumnWidth());this.findTracks((e=>"function"==typeof e.getSamples)).length>0&&(this.sampleInfoControl.performClickWithState(this,!0),this.sampleInfoControl.setButtonVisibility(!0));for(const{sampleInfoViewport:e}of this.trackViews)e.repaint()}getSampleInfoColumnWidth(){if(this.sampleInfo.attributeCount){const e=this.findTracks((e=>"function"==typeof e.getSamples)).length>0,t=this.sampleInfo.hasAttributes(),i=this.sampleInfoControl.showSampleInfo;return e&&t&&i?this.sampleInfo.attributeCount*ad+8:0}return 0}on(e,t){this.eventHandlers[e]||(this.eventHandlers[e]=[]),this.eventHandlers[e].push(t)}un(e,t){this.off(e,t)}off(e,t){if(e)if(t){const i=this.eventHandlers[e];if(i&&0!==i.length){const n=i.indexOf(t);-1!==n&&this.eventHandlers[e].splice(n,1)}else console.warn("No handlers to remove for event: "+e)}else this.eventHandlers[e]=[];else this.eventHandlers={}}fireEvent(e,t,i){const n=this.eventHandlers[e];if(void 0===n||0===n.length)return;const r=i||window;return n.map((function(e){return e.apply(r,t)}))[0]}dispose(){this.removeEventHandlers();for(let e of this.trackViews)e.dispose();this.roiManager&&this.roiManager.dispose()}toJSON(){const e={version:"3.2.1"};if(void 0!==this.showSampleNames&&(e.showSampleNames=this.showSampleNames),this.sampleNameViewportWidth&&(e.sampleNameViewportWidth=this.sampleNameViewportWidth),e.reference=this.genome.toJSON(),e.reference.fastaURL instanceof File)throw new Error(`Error. Sessions cannot include local file references ${e.reference.fastaURL.name}.`);if(e.reference.indexURL instanceof File)throw new Error(`Error. Sessions cannot include local file references ${e.reference.indexURL.name}.`);const t=[];let i=this.trackViews[0];for(let{referenceFrame:e}of i.viewports){const i=e.getLocusString();t.push(i)}e.locus=1===t.length?t[0]:t;const n=this.roiManager.toJSON();n&&(e.roi=n,this.roiManager.showOverlays||(e.showROIOverlays=!1)),this.qtlSelections.isEmpty()||(e.qtlSelections=this.qtlSelections.toJSON());const r=[],s=[];for(const{track:e}of this.trackViews)try{let t;"function"==typeof e.getState?t=Pa.localFileInspection(e.getState()):e.config&&(t=Pa.localFileInspection(e.config)),t&&(t.browser&&delete t.browser,t.order=e.order,r.push(t))}catch(t){const i=`Track: ${e.name}: ${t}`;console.error(i),s.push(i)}if(s.length>0){let e=1,t="Errors encountered saving session: </br>";for(let i of s)t+=` (${e++}) ${i.toString()} <br/>`;throw Error(t)}e.tracks=r;const o=[];for(const e of r)for(const t of Object.keys(e))"file"!==t&&"indexFile"!==t||o.push(e[t]);const a=[];if(this.sampleInfo.sampleInfoFiles.length>0){const t=this.sampleInfo.toJSON();t.length>0&&(e.sampleinfo=t);for(const e of this.sampleInfo.sampleInfoFiles){const t=Pa.localFileInspection({url:e});t.file&&a.push(t.file)}a.length>0&&o.push(...a)}return o.length>0&&alert(`This session includes reference(s) to local file(s):\n${o.map((e=>` ${e}`)).join("\n")}\nLocal files cannot be loaded automatically when a saved session is restored.`),e}compressedSession(){return function(e){const t=new Uint8Array(e.length);for(var i=0;i<e.length;i++)t[i]=e.charCodeAt(i);const n=new $i(t),r=String.fromCharCode.apply(null,n);return btoa(r).replace(/\+/g,".").replace(/\//g,"_").replace(/=/g,"-")}(JSON.stringify(this.toJSON()))}sessionURL(){const e=window.location.href.slice(),t=e.indexOf("?");return(t>0?e.substring(0,t):e)+"?sessionURL=blob:"+this.compressedSession()}mouseDownOnViewport(e,t){var i;i=s(e),this.vpMouseDown={viewport:t,lastMouseX:i.x,mouseDownX:i.x,lastMouseY:i.y,mouseDownY:i.y,referenceFrame:t.referenceFrame}}cancelTrackPan(){const e=this.dragObject;this.dragObject=void 0,this.isScrolling=!1,this.vpMouseDown=void 0,e&&e.viewport.referenceFrame.start!==e.start&&(this.updateViews(),this.fireEvent("trackdragend",[e.viewport]))}isTrackPanning(){return this.dragObject}isSoftclipped(){return void 0!==this.trackViews.find((e=>!0===e.track.showSoftClips))}startTrackDrag(e){this.dragTrack=e}updateTrackDrag(e){if(e&&this.dragTrack){const t=this.dragTrack,i=this.trackViews.indexOf(e),n=this.trackViews.indexOf(t),r=this.trackViews;r[i]=t,r[n]=e;const s=this.trackViews[i].track.order;this.trackViews[n].track.order=s;const o=r.length;let a=s;if(i<n)for(let e=i+1;e<o;e++){const t=r[e].track;if(!(t.order<=a))break;t.order=Math.min(Number.MAX_SAFE_INTEGER,a+1),a=t.order}else for(let e=i-1;e>0;e--){const t=r[e].track;if(!(t.order>=a))break;t.order=Math.max(-Number.MAX_SAFE_INTEGER,a-1),a=t.order}this.reorderTracks()}}endTrackDrag(){this.dragTrack?(this.dragTrack=void 0,this.fireEvent("trackorderchanged",[this.getTrackOrder()])):this.dragTrack=void 0}addEventHandlers(){this.addWindowResizeHandler(),this.addRootMouseUpHandler(),this.addRootMouseLeaveHandler(),this.addColumnContainerEventHandlers(),this.addKeyboardHandler()}removeEventHandlers(){this.removeWindowResizeHandler(),this.removeRootMouseUpHandler(),this.removeRootMouseLeaveHandler(),this.removeColumnContainerEventHandlers(),this.removeKeyboardHandler()}addWindowResizeHandler(){this.boundWindowResizeHandler=Dv.bind(this),window.addEventListener("resize",this.boundWindowResizeHandler)}removeWindowResizeHandler(){window.removeEventListener("resize",this.boundWindowResizeHandler)}addRootMouseUpHandler(){this.boundRootMouseUpHandler=zv.bind(this),this.root.addEventListener("mouseup",this.boundRootMouseUpHandler)}removeRootMouseUpHandler(){this.root.removeEventListener("mouseup",this.boundRootMouseUpHandler)}addRootMouseLeaveHandler(){this.boundRootMouseLeaveHandler=zv.bind(this),this.root.addEventListener("mouseleave",this.boundRootMouseLeaveHandler)}removeRootMouseLeaveHandler(){this.root.removeEventListener("mouseleave",this.boundRootMouseLeaveHandler)}addColumnContainerEventHandlers(){this.boundColumnContainerMouseMoveHandler=Tv.bind(this),this.boundColumnContainerTouchMoveHandler=Tv.bind(this),this.boundColumnContainerMouseLeaveHandler=zv.bind(this),this.boundColumnContainerMouseUpHandler=zv.bind(this),this.boundColumnContainerTouchEndHandler=zv.bind(this),this.columnContainer.addEventListener("mousemove",this.boundColumnContainerMouseMoveHandler),this.columnContainer.addEventListener("touchmove",this.boundColumnContainerTouchMoveHandler),this.columnContainer.addEventListener("mouseleave",this.boundColumnContainerMouseLeaveHandler),this.columnContainer.addEventListener("mouseup",this.boundColumnContainerMouseUpHandler),this.columnContainer.addEventListener("touchend",this.boundColumnContainerTouchEndHandler)}removeColumnContainerEventHandlers(){this.columnContainer.removeEventListener("mousemove",this.boundColumnContainerMouseMoveHandler),this.columnContainer.removeEventListener("touchmove",this.boundColumnContainerTouchMoveHandler),this.columnContainer.removeEventListener("mouseleave",this.boundColumnContainerMouseLeaveHandler),this.columnContainer.removeEventListener("mouseup",this.boundColumnContainerMouseUpHandler),this.columnContainer.removeEventListener("touchend",this.boundColumnContainerTouchEndHandler)}addKeyboardHandler(){this.keyUpHandler=Lv.bind(this),document.addEventListener("keyup",this.keyUpHandler)}removeKeyboardHandler(){console.log("Remove handler"),document.addEventListener("keyup",this.keyUpHandler)}static uncompressSession(e){let t;if(e.indexOf("/gzip;base64")>0){t=on(e);let i="";for(let e of t)i+=String.fromCharCode(e);return i}return function(e){e=e.replace(/\./g,"+").replace(/_/g,"/").replace(/-/g,"=");const t=atob(e),i=[];for(let e=0;e<t.length;e++)i.push(t.charCodeAt(e));const n=Yi(i);let r="";for(let e of n)r+=String.fromCharCode(e);return r}(e.substring(5))}createCircularView(e,t){var i;return t=!0===t,this.circularView=(i=this,new Vf(e,{onChordClick:(e,t,n)=>{const r=e.data,s=r.mate;function o(e){e.chr=i.genome.getChromosomeName(e.refName);let t=!1;for(let n of i.referenceFrameList){const i=Ff.fromLocusString(n.getLocusString());if(i.contains(e)){t=!0;break}if(i.overlaps(e)){n.extend(e),t=!0;break}}if(!t){const t=2e3,n=(e.start+e.end)/2;i.addMultiLocusPanel(e.chr,n-t,n+t)}}o(r),o(s)}})),this.circularViewControl=new uv(this.navbar.toggleButtonContainer,this),this.circularView.setAssembly({name:this.genome.id,id:this.genome.id,chromosomes:$f(this.genome)}),this.circularViewVisible=t,this.circularView}get circularViewVisible(){return void 0!==this.circularView&&this.circularView.visible}set circularViewVisible(e){this.circularView&&(this.circularView.visible=e,this.circularViewControl.setState(e))}get sampleInfoControl(){return this.navbar.sampleInfoControl}get overlayTrackButton(){return this.navbar.overlayTrackButton}get roiTableControl(){return this.navbar.roiTableControl}get sampleInfoControl(){return this.navbar.sampleInfoControl}get sampleNameControl(){return this.navbar.sampleNameControl}}async function Dv(){if(!this.referenceFrameList)return;const e=this.calculateViewportWidth(this.referenceFrameList.length);for(let t of this.referenceFrameList){const i=this.referenceFrameList.indexOf(t),{chr:n,genome:r}=t,{bpLength:s}=r.getChromosome(t.chr),o=t.toBP(e);Mh.isWholeGenomeView(n)||o>s?t.bpPerPixel=s/e:t.end=t.start+t.toBP(e);for(let{viewports:t}of this.trackViews)t[i].setWidth(e)}this.updateUIWithReferenceFrameList(),await this.updateViews(!0)}function Tv(e){e.preventDefault();const{x:t,y:i}=s(e);if(this.vpMouseDown){const{viewport:e,referenceFrame:n}=this.vpMouseDown,r=Math.abs(t-this.vpMouseDown.mouseDownX)>Math.abs(i-this.vpMouseDown.mouseDownY);if(!this.dragObject&&!this.isScrolling)if(r)this.vpMouseDown.mouseDownX&&Math.abs(t-this.vpMouseDown.mouseDownX)>this.constants.dragThreshold&&(this.dragObject={viewport:e,start:n.start});else if(this.vpMouseDown.mouseDownY&&Math.abs(i-this.vpMouseDown.mouseDownY)>this.constants.scrollThreshold){this.isScrolling=!0;const t=e.viewportElement.clientHeight,i=e.trackView.maxViewportContentHeight();this.vpMouseDown.r=t/i}if(this.dragObject){const i=!this.isSoftclipped();let r=this.vpMouseDown.lastMouseX-t;n.shiftPixels(r,e.viewportElement.clientWidth,i)&&this.updateViews(),this.fireEvent("trackdrag")}if(this.isScrolling){const t=this.vpMouseDown.r*(this.vpMouseDown.lastMouseY-i);e.trackView.moveScroller(t)}this.vpMouseDown.lastMouseX=t,this.vpMouseDown.lastMouseY=i}}function zv(e){this.cancelTrackPan(),this.endTrackDrag()}async function Lv(e){if(this.referenceFrameList&&!(this.referenceFrameList.length>1)&&("KeyF"===e.code||"KeyB"===e.code)){const t=this.getSelectedTrackViews();if(t.length>0){const i=t[0].track;if("function"==typeof i.nextFeatureAfter){const t=this.referenceFrameList[0],n=t.viewport?t.viewport.getWidth():this.calculateViewportWidth(this.referenceFrameList.length),r="all"===t.chr.toLowerCase(),s=i.visibilityWindow;if(r||s&&s>0&&t.bpPerPixel*n>s)return;const o="KeyF"===e.code,a=t.chr,c=t.center,l=await i.nextFeatureAfter(a,c,o);if(l){const i=await this.genome.getChromosomeName(l.chr);if(a===i){const i=(l.start+l.end)/2;if(e.shiftKey){const e=this.config.minimumBases||40,r=Math.max(e,1.1*(l.end-l.start));t.start=Math.max(0,i-r/2),t.end=i+r/2,t.bpPerPixel=(t.end-t.start)/n}else t.shift(i-c);this.updateViews()}else{t.chr=i;const r=(l.start+l.end)/2;if(e.shiftKey){const e=this.config.minimumBases||40,i=Math.max(e,1.1*(l.end-l.start));t.start=Math.max(0,r-i/2),t.end=t.start+i,t.bpPerPixel=(t.end-t.start)/n}else t.start=r-n*t.bpPerPixel/2,t.end=t.start+n*t.bpPerPixel;this.updateViews()}}}}}}function Hv(e,t){for(let{viewports:i}of e)for(let e of i)e.trackLabelElement&&(0===i.indexOf(e)&&!0===t?e.trackLabelElement.style.display="block":e.trackLabelElement.style.display="none")}let Pv=[];function Ov(e){return void 0===e.minimumBases&&(e.minimumBases=40),void 0===e.showIdeogram&&(e.showIdeogram=!0),null==e.showCytobandNames&&(e.showCytobandNames=!1),void 0===e.showCircularView&&(e.showCircularView=!1),void 0===e.showCircularViewButton&&(e.showCircularViewButton=!1),void 0===e.showTrackLabelButton&&(e.showTrackLabelButton=!0),void 0===e.showTrackLabels&&(e.showTrackLabels=!0),void 0===e.showCursorTrackingGuideButton&&(e.showCursorTrackingGuideButton=!0),void 0===e.showCursorGuide&&(e.showCursorGuide=e.showCursorTrackingGuide||!1),void 0===e.showCenterGuideButton&&(e.showCenterGuideButton=!0),void 0===e.showCenterGuide&&(e.showCenterGuide=!1),void 0===e.showSampleNames&&(e.showSampleNames=!1),void 0===e.showSVGButton&&(e.showSVGButton=!0),void 0===e.showControls&&(e.showControls=!0),void 0===e.showNavigation&&(e.showNavigation=!0),void 0===e.showRuler&&(e.showRuler=!0),void 0===e.flanking&&(e.flanking=1e3),void 0===e.pairsSupported&&(e.pairsSupported=!0),e.tracks||(e.tracks=[]),e}const Vv=Mn.setApiKey;const qv=Mn.oauth;var Qv={AlertDialog:Ps,TrackUtils:Qs,IGVGraphics:fr,MenuUtils:or,DataRangeDialog:ur,createTrack:async function(e,t){return await Bv.prototype.createTrack.call(t,e)},createBrowser:async function(e,t){void 0===t&&(t={}),Mh.KNOWN_GENOMES||await Mh.initializeGenomes(t),Ov(t),t.queryParametersSupported&&function(e){var t,i,n,r,s,o,a,c,l;let h,d,u;if(a=window.location.href,s={},t=a.indexOf("?"),i=a.lastIndexOf("#"),t>=0)for(i<0&&(i=a.length),n=t+1;n<i;)(r=a.indexOf("&",n))<0&&(r=i),2===(o=a.substring(n,r).split("=",2)).length?(c=o[0],l=decodeURIComponent(o[1]),"file"===c?h=l.split(","):"index"===c?d=l.split(","):"name"===c?u=l.split(","):"genome"===c?!l.startsWith("https://")&&!l.startsWith("http://")||l.endsWith(".json")?(e[c]=l,e.reference=void 0):e.reference={fastaURL:l,indexURL:l+".fai"}:("reference"===c&&(e.genome=void 0),e[c]=l),n=r+1):n++;if(h){e.tracks||(e.tracks=[]);for(let t=0;t<h.length;t++){if(h[t].endsWith(".xml")||h[t].endsWith(".json")){e.sessionURL=h[t];break}const i={url:h[t]};d&&d.length>t&&(i.indexURL=d[t]),u&&u.length>t&&(i.name=u[t]),e.tracks.push(i)}}}(t),t.apiKey&&Mn.setApiKey(t.apiKey),t.oauthToken&&Mn.setOauthToken(t.oauthToken),t.clientId&&!Cn()&&await async function(e){if(!google.accounts.oauth2.initTokenClient)throw new Error("Google accounts token client not loaded (https://accounts.google.com/gsi/client)");if(Cn())throw new Error("Google client is already initialized");const t={client_id:e.client_id||e.clientId,scope:e.scope||"https://www.googleapis.com/auth/userinfo.profile",state:e.state||"igv",error:e=>{throw new Error(e.type)},hint:e.hint,hosted_domain:e.hosted_domain},i=google.accounts.oauth2.initTokenClient(t);google.igv={tokenClient:i,apiKey:e.apiKey}}({client_id:t.clientId,apiKey:t.apiKey,scope:"https://www.googleapis.com/auth/userinfo.profile"});const i=new Bv(t,e);Pv.push(i);const n=t.sessionURL||t.session||t.hubURL;return n?await i.loadSession({url:n}):await i.loadSessionObject(t),i.navbar.navbarDidResize(),i},removeBrowser:function(e){e.dispose(),e.root.remove(),Pv=Pv.filter((t=>t!==e))},removeAllBrowsers:function(){for(let e of Pv)e.dispose(),e.root.remove();Pv=[]},visibilityChange:async function(){for(let e of Pv)await e.visibilityChange()},setGoogleOauthToken:function(e){return Mn.setOauthToken(e)},setOauthToken:function(e,t){return Mn.setOauthToken(e,t)},oauth:qv,version:UF,setApiKey:Vv,TrackBase:Pa,registerTrackClass:function(e,t){OF.set(e,((e,i)=>new t(e,i)))},registerTrackCreatorFunction:function(e,t){OF.set(e,t)},registerFileFormats:function(e,t){Ea[e]={fields:t}},loadSessionFile:Bv.loadSessionFile};export{Qv as default};
|
|
36
36
|
//# sourceMappingURL=igv.esm.min.js.map
|