// ==UserScript==
// @name nHentai Helper
// @name:zh-CN nHentai 助手
// @name:zh-TW nHentai 助手
// @namespace https://github.com/Tsuk1ko
// @version 3.20.0
// @author Jindai Kirin
// @description Download nHentai manga as compression file easily, and add some useful features. Also support some mirror sites.
// @description:zh-CN 为 nHentai 增加压缩打包下载方式以及一些辅助功能,同时还支持一些镜像站
// @description:zh-TW 爲 nHentai 增加壓縮打包下載方式以及一些輔助功能,同時還支援一些鏡像站
// @license GPL-3.0
// @icon https://icon.horse/icon/nhentai.net
// @homepageURL https://github.com/Tsuk1ko/nhentai-helper
// @supportURL https://github.com/Tsuk1ko/nhentai-helper/issues
// @include /^https:\/\/([^/]*\.)?(nya|dog|cat|bug|qq|fox|ee|yy)hentai[0-9]*\./
// @match https://nhentai.net/*
// @match https://nhentai.xxx/*
// @match https://nhentai.to/*
// @match https://nhentai.website/*
// @require https://unpkg.com/[email protected]/dist/vue.global.prod.js
// @require data:application/javascript,window.Vue%3DVue%2Cwindow.Date.now%7C%7C(window.Date.now%3D()%3D%3Enew%20Date().getTime())%3B
// @require https://unpkg.com/[email protected]/dist/index.full.min.js
// @require https://unpkg.com/[email protected]/dist/jquery.min.js
// @resource element-plus-css https://unpkg.com/[email protected]/dist/index.css
// @connect nhentai.net
// @connect i.nhentai.net
// @connect i1.nhentai.net
// @connect i2.nhentai.net
// @connect i3.nhentai.net
// @connect i4.nhentai.net
// @connect i5.nhentai.net
// @connect i7.nhentai.net
// @connect *
// @grant GM_addStyle
// @grant GM_getResourceText
// @grant GM_getValue
// @grant GM_openInTab
// @grant GM_registerMenuCommand
// @grant GM_setClipboard
// @grant GM_setValue
// @grant GM_xmlhttpRequest
// @grant unsafeWindow
// @run-at document-end
// @noframes
// ==/UserScript==
(n=>{if(typeof GM_addStyle=="function"){GM_addStyle(n);return}const t=document.createElement("style");t.textContent=n,document.head.append(t)})(` .nhentai-helper-hidden {
display: none !important;
}
.nhentai-helper-btn:disabled {
cursor: wait;
}
.nhentai-helper-gallery > .nhentai-helper-btn {
position: absolute;
top: 0;
min-width: 42px;
opacity: .8;
}
.nhentai-helper-gallery:hover > .nhentai-helper-btn {
opacity: 1;
}
.nhentai-helper-gallery .nhentai-helper-btn {
position: absolute;
top: 0;
margin: 3px;
z-index: 2;
}
.nhentai-helper-gallery .download-zip-btn {
left: 0;
}
.nhentai-helper-gallery .ignore-btn {
display: none;
right: 0;
}
.nhentai-helper-gallery:hover .ignore-btn {
display: block;
}
.nhentai-helper-gallery.downloaded .caption {
color: #999;
}
#page-container {
position: relative;
}
@media screen and (max-width: 768px) {
#page-container {
padding-top: 40px;
}
}
#online-view-mode-btn {
position: absolute;
right: 0;
top: 0;
margin: 0;
}
.btn-noty-green {
background-color: #66bb6a !important;
}
.btn-noty-blue {
background-color: #42a5f5 !important;
}
.btn-noty:hover {
filter: brightness(1.15);
}
.noty_buttons {
padding-top: 0 !important;
}
.pages-input {
-webkit-appearance: none;
-moz-appearance: none;
appearance: none;
display: inline-block;
border-radius: 3px;
padding: 0 .1em 0 1em;
font-size: 1em;
width: 100%;
height: 40px;
border: 0;
vertical-align: top;
margin-top: 5px;
}
.noty_close_button {
display: none;
}
body.nhentai-helper-nhentai_xxx .reader_outer {
position: relative;
}
body.nhentai-helper-nhentai_xxx .g_buttons .download-zip-btn {
margin-left: 5px;
}
.noty_layout_mixin,
#noty_layout__top,
#noty_layout__topLeft,
#noty_layout__topCenter,
#noty_layout__topRight,
#noty_layout__bottom,
#noty_layout__bottomLeft,
#noty_layout__bottomCenter,
#noty_layout__bottomRight,
#noty_layout__center,
#noty_layout__centerLeft,
#noty_layout__centerRight {
position: fixed;
margin: 0;
padding: 0;
z-index: 9999999;
-webkit-transform: translateZ(0) scale(1, 1);
transform: translateZ(0) scale(1);
-webkit-backface-visibility: hidden;
backface-visibility: hidden;
-webkit-font-smoothing: subpixel-antialiased;
filter: blur(0);
-webkit-filter: blur(0);
max-width: 90%;
}
#noty_layout__top {
top: 0;
left: 5%;
width: 90%;
}
#noty_layout__topLeft {
top: 20px;
left: 20px;
width: 325px;
}
#noty_layout__topCenter {
top: 5%;
left: 50%;
width: 325px;
-webkit-transform: translate(-webkit-calc(-50% - .5px)) translateZ(0) scale(1, 1);
transform: translate(calc(-50% - .5px)) translateZ(0) scale(1);
}
#noty_layout__topRight {
top: 20px;
right: 20px;
width: 325px;
}
#noty_layout__bottom {
bottom: 0;
left: 5%;
width: 90%;
}
#noty_layout__bottomLeft {
bottom: 20px;
left: 20px;
width: 325px;
}
#noty_layout__bottomCenter {
bottom: 5%;
left: 50%;
width: 325px;
-webkit-transform: translate(-webkit-calc(-50% - .5px)) translateZ(0) scale(1, 1);
transform: translate(calc(-50% - .5px)) translateZ(0) scale(1);
}
#noty_layout__bottomRight {
bottom: 20px;
right: 20px;
width: 325px;
}
#noty_layout__center {
top: 50%;
left: 50%;
width: 325px;
-webkit-transform: translate(-webkit-calc(-50% - .5px), -webkit-calc(-50% - .5px)) translateZ(0) scale(1, 1);
transform: translate(calc(-50% - .5px), calc(-50% - .5px)) translateZ(0) scale(1);
}
#noty_layout__centerLeft {
top: 50%;
left: 20px;
width: 325px;
-webkit-transform: translate(0, -webkit-calc(-50% - .5px)) translateZ(0) scale(1, 1);
transform: translateY(calc(-50% - .5px)) translateZ(0) scale(1);
}
#noty_layout__centerRight {
top: 50%;
right: 20px;
width: 325px;
-webkit-transform: translate(0, -webkit-calc(-50% - .5px)) translateZ(0) scale(1, 1);
transform: translateY(calc(-50% - .5px)) translateZ(0) scale(1);
}
.noty_progressbar {
display: none;
}
.noty_has_timeout.noty_has_progressbar .noty_progressbar {
display: block;
position: absolute;
left: 0;
bottom: 0;
height: 3px;
width: 100%;
background-color: #646464;
opacity: .2;
filter: alpha(opacity=10);
}
.noty_bar {
-webkit-backface-visibility: hidden;
-webkit-transform: translate(0, 0) translateZ(0) scale(1, 1);
-ms-transform: translate(0, 0) scale(1, 1);
transform: translate(0) scale(1);
-webkit-font-smoothing: subpixel-antialiased;
overflow: hidden;
}
.noty_effects_open {
opacity: 0;
-webkit-transform: translate(50%);
-ms-transform: translate(50%);
transform: translate(50%);
-webkit-animation: noty_anim_in .5s cubic-bezier(.68, -.55, .265, 1.55);
animation: noty_anim_in .5s cubic-bezier(.68, -.55, .265, 1.55);
-webkit-animation-fill-mode: forwards;
animation-fill-mode: forwards;
}
.noty_effects_close {
-webkit-animation: noty_anim_out .5s cubic-bezier(.68, -.55, .265, 1.55);
animation: noty_anim_out .5s cubic-bezier(.68, -.55, .265, 1.55);
-webkit-animation-fill-mode: forwards;
animation-fill-mode: forwards;
}
.noty_fix_effects_height {
-webkit-animation: noty_anim_height 75ms ease-out;
animation: noty_anim_height 75ms ease-out;
}
.noty_close_with_click {
cursor: pointer;
}
.noty_close_button {
position: absolute;
top: 2px;
right: 2px;
font-weight: 700;
width: 20px;
height: 20px;
text-align: center;
line-height: 20px;
background-color: #0000000d;
border-radius: 2px;
cursor: pointer;
-webkit-transition: all .2s ease-out;
transition: all .2s ease-out;
}
.noty_close_button:hover {
background-color: #0000001a;
}
.noty_modal {
position: fixed;
width: 100%;
height: 100%;
background-color: #000;
z-index: 10000;
opacity: .3;
left: 0;
top: 0;
}
.noty_modal.noty_modal_open {
opacity: 0;
-webkit-animation: noty_modal_in .3s ease-out;
animation: noty_modal_in .3s ease-out;
}
.noty_modal.noty_modal_close {
-webkit-animation: noty_modal_out .3s ease-out;
animation: noty_modal_out .3s ease-out;
-webkit-animation-fill-mode: forwards;
animation-fill-mode: forwards;
}
@-webkit-keyframes noty_modal_in {
to {
opacity: .3;
}
}
@keyframes noty_modal_in {
to {
opacity: .3;
}
}
@-webkit-keyframes noty_modal_out {
to {
opacity: 0;
}
}
@keyframes noty_modal_out {
to {
opacity: 0;
}
}
@-webkit-keyframes noty_anim_in {
to {
-webkit-transform: translate(0);
transform: translate(0);
opacity: 1;
}
}
@keyframes noty_anim_in {
to {
-webkit-transform: translate(0);
transform: translate(0);
opacity: 1;
}
}
@-webkit-keyframes noty_anim_out {
to {
-webkit-transform: translate(50%);
transform: translate(50%);
opacity: 0;
}
}
@keyframes noty_anim_out {
to {
-webkit-transform: translate(50%);
transform: translate(50%);
opacity: 0;
}
}
@-webkit-keyframes noty_anim_height {
to {
height: 0;
}
}
@keyframes noty_anim_height {
to {
height: 0;
}
}
.noty_theme__relax.noty_bar {
margin: 4px 0;
overflow: hidden;
border-radius: 2px;
position: relative;
}
.noty_theme__relax.noty_bar .noty_body {
padding: 10px;
}
.noty_theme__relax.noty_bar .noty_buttons {
border-top: 1px solid #e7e7e7;
padding: 5px 10px;
}
.noty_theme__relax.noty_type__alert,
.noty_theme__relax.noty_type__notification {
background-color: #fff;
border: 1px solid #dedede;
color: #444;
}
.noty_theme__relax.noty_type__warning {
background-color: #ffeaa8;
border: 1px solid #FFC237;
color: #826200;
}
.noty_theme__relax.noty_type__warning .noty_buttons {
border-color: #dfaa30;
}
.noty_theme__relax.noty_type__error {
background-color: #ff8181;
border: 1px solid #e25353;
color: #fff;
}
.noty_theme__relax.noty_type__error .noty_buttons {
border-color: #8b0000;
}
.noty_theme__relax.noty_type__info,
.noty_theme__relax.noty_type__information {
background-color: #78c5e7;
border: 1px solid #3badd6;
color: #fff;
}
.noty_theme__relax.noty_type__info .noty_buttons,
.noty_theme__relax.noty_type__information .noty_buttons {
border-color: #0b90c4;
}
.noty_theme__relax.noty_type__success {
background-color: #bcf5bc;
border: 1px solid #7cdd77;
color: #006400;
}
.noty_theme__relax.noty_type__success .noty_buttons {
border-color: #50c24e;
}
.noty_theme__metroui.noty_bar {
margin: 4px 0;
overflow: hidden;
position: relative;
box-shadow: #0000004c 0 0 5px;
}
.noty_theme__metroui.noty_bar .noty_progressbar {
position: absolute;
left: 0;
bottom: 0;
height: 3px;
width: 100%;
background-color: #000;
opacity: .2;
filter: alpha(opacity=20);
}
.noty_theme__metroui.noty_bar .noty_body {
padding: 1.25em;
font-size: 14px;
}
.noty_theme__metroui.noty_bar .noty_buttons {
padding: 0 10px .5em;
}
.noty_theme__metroui.noty_type__alert,
.noty_theme__metroui.noty_type__notification {
background-color: #fff;
color: #1d1d1d;
}
.noty_theme__metroui.noty_type__warning {
background-color: #fa6800;
color: #fff;
}
.noty_theme__metroui.noty_type__error {
background-color: #ce352c;
color: #fff;
}
.noty_theme__metroui.noty_type__info,
.noty_theme__metroui.noty_type__information {
background-color: #1ba1e2;
color: #fff;
}
.noty_theme__metroui.noty_type__success {
background-color: #60a917;
color: #fff;
}
.noty_theme__mint.noty_bar {
margin: 4px 0;
overflow: hidden;
border-radius: 2px;
position: relative;
}
.noty_theme__mint.noty_bar .noty_body {
padding: 10px;
font-size: 14px;
}
.noty_theme__mint.noty_bar .noty_buttons {
padding: 10px;
}
.noty_theme__mint.noty_type__alert,
.noty_theme__mint.noty_type__notification {
background-color: #fff;
border-bottom: 1px solid #D1D1D1;
color: #2f2f2f;
}
.noty_theme__mint.noty_type__warning {
background-color: #ffae42;
border-bottom: 1px solid #E89F3C;
color: #fff;
}
.noty_theme__mint.noty_type__error {
background-color: #de636f;
border-bottom: 1px solid #CA5A65;
color: #fff;
}
.noty_theme__mint.noty_type__info,
.noty_theme__mint.noty_type__information {
background-color: #7f7eff;
border-bottom: 1px solid #7473E8;
color: #fff;
}
.noty_theme__mint.noty_type__success {
background-color: #afc765;
border-bottom: 1px solid #A0B55C;
color: #fff;
}
.noty_theme__sunset.noty_bar {
margin: 4px 0;
overflow: hidden;
border-radius: 2px;
position: relative;
}
.noty_theme__sunset.noty_bar .noty_body {
padding: 10px;
font-size: 14px;
text-shadow: 1px 1px 1px rgba(0, 0, 0, .1);
}
.noty_theme__sunset.noty_bar .noty_buttons {
padding: 10px;
}
.noty_theme__sunset.noty_type__alert,
.noty_theme__sunset.noty_type__notification {
background-color: #073b4c;
color: #fff;
}
.noty_theme__sunset.noty_type__alert .noty_progressbar,
.noty_theme__sunset.noty_type__notification .noty_progressbar {
background-color: #fff;
}
.noty_theme__sunset.noty_type__warning {
background-color: #ffd166;
color: #fff;
}
.noty_theme__sunset.noty_type__error {
background-color: #ef476f;
color: #fff;
}
.noty_theme__sunset.noty_type__error .noty_progressbar {
opacity: .4;
}
.noty_theme__sunset.noty_type__info,
.noty_theme__sunset.noty_type__information {
background-color: #118ab2;
color: #fff;
}
.noty_theme__sunset.noty_type__info .noty_progressbar,
.noty_theme__sunset.noty_type__information .noty_progressbar {
opacity: .6;
}
.noty_theme__sunset.noty_type__success {
background-color: #06d6a0;
color: #fff;
}
.noty_theme__bootstrap-v3.noty_bar {
margin: 4px 0;
overflow: hidden;
position: relative;
border: 1px solid transparent;
border-radius: 4px;
}
.noty_theme__bootstrap-v3.noty_bar .noty_body {
padding: 15px;
}
.noty_theme__bootstrap-v3.noty_bar .noty_buttons {
padding: 10px;
}
.noty_theme__bootstrap-v3.noty_bar .noty_close_button {
font-size: 21px;
font-weight: 700;
line-height: 1;
color: #000;
text-shadow: 0 1px 0 #fff;
filter: alpha(opacity=20);
opacity: .2;
background: transparent;
}
.noty_theme__bootstrap-v3.noty_bar .noty_close_button:hover {
background: transparent;
text-decoration: none;
cursor: pointer;
filter: alpha(opacity=50);
opacity: .5;
}
.noty_theme__bootstrap-v3.noty_type__alert,
.noty_theme__bootstrap-v3.noty_type__notification {
background-color: #fff;
color: inherit;
}
.noty_theme__bootstrap-v3.noty_type__warning {
background-color: #fcf8e3;
color: #8a6d3b;
border-color: #faebcc;
}
.noty_theme__bootstrap-v3.noty_type__error {
background-color: #f2dede;
color: #a94442;
border-color: #ebccd1;
}
.noty_theme__bootstrap-v3.noty_type__info,
.noty_theme__bootstrap-v3.noty_type__information {
background-color: #d9edf7;
color: #31708f;
border-color: #bce8f1;
}
.noty_theme__bootstrap-v3.noty_type__success {
background-color: #dff0d8;
color: #3c763d;
border-color: #d6e9c6;
}
.noty_theme__bootstrap-v4.noty_bar {
margin: 4px 0;
overflow: hidden;
position: relative;
border: 1px solid transparent;
border-radius: .25rem;
}
.noty_theme__bootstrap-v4.noty_bar .noty_body {
padding: .75rem 1.25rem;
}
.noty_theme__bootstrap-v4.noty_bar .noty_buttons {
padding: 10px;
}
.noty_theme__bootstrap-v4.noty_bar .noty_close_button {
font-size: 1.5rem;
font-weight: 700;
line-height: 1;
color: #000;
text-shadow: 0 1px 0 #fff;
filter: alpha(opacity=20);
opacity: .5;
background: transparent;
}
.noty_theme__bootstrap-v4.noty_bar .noty_close_button:hover {
background: transparent;
text-decoration: none;
cursor: pointer;
filter: alpha(opacity=50);
opacity: .75;
}
.noty_theme__bootstrap-v4.noty_type__alert,
.noty_theme__bootstrap-v4.noty_type__notification {
background-color: #fff;
color: inherit;
}
.noty_theme__bootstrap-v4.noty_type__warning {
background-color: #fcf8e3;
color: #8a6d3b;
border-color: #faebcc;
}
.noty_theme__bootstrap-v4.noty_type__error {
background-color: #f2dede;
color: #a94442;
border-color: #ebccd1;
}
.noty_theme__bootstrap-v4.noty_type__info,
.noty_theme__bootstrap-v4.noty_type__information {
background-color: #d9edf7;
color: #31708f;
border-color: #bce8f1;
}
.noty_theme__bootstrap-v4.noty_type__success {
background-color: #dff0d8;
color: #3c763d;
border-color: #d6e9c6;
}
.noty_theme__semanticui.noty_bar {
margin: 4px 0;
overflow: hidden;
position: relative;
border: 1px solid transparent;
font-size: 1em;
border-radius: .28571429rem;
box-shadow: 0 0 0 1px #22242638 inset, 0 0 0 0 transparent;
}
.noty_theme__semanticui.noty_bar .noty_body {
padding: 1em 1.5em;
line-height: 1.4285em;
}
.noty_theme__semanticui.noty_bar .noty_buttons {
padding: 10px;
}
.noty_theme__semanticui.noty_type__alert,
.noty_theme__semanticui.noty_type__notification {
background-color: #f8f8f9;
color: #000000de;
}
.noty_theme__semanticui.noty_type__warning {
background-color: #fffaf3;
color: #573a08;
box-shadow: 0 0 0 1px #c9ba9b inset, 0 0 0 0 transparent;
}
.noty_theme__semanticui.noty_type__error {
background-color: #fff6f6;
color: #9f3a38;
box-shadow: 0 0 0 1px #e0b4b4 inset, 0 0 0 0 transparent;
}
.noty_theme__semanticui.noty_type__info,
.noty_theme__semanticui.noty_type__information {
background-color: #f8ffff;
color: #276f86;
box-shadow: 0 0 0 1px #a9d5de inset, 0 0 0 0 transparent;
}
.noty_theme__semanticui.noty_type__success {
background-color: #fcfff5;
color: #2c662d;
box-shadow: 0 0 0 1px #a3c293 inset, 0 0 0 0 transparent;
}
.noty_theme__nest.noty_bar {
margin: 0 0 15px;
overflow: hidden;
border-radius: 2px;
position: relative;
box-shadow: #00000019 5px 4px 10px;
}
.noty_theme__nest.noty_bar .noty_body {
padding: 10px;
font-size: 14px;
text-shadow: 1px 1px 1px rgba(0, 0, 0, .1);
}
.noty_theme__nest.noty_bar .noty_buttons {
padding: 10px;
}
.noty_layout .noty_theme__nest.noty_bar {
z-index: 5;
}
.noty_layout .noty_theme__nest.noty_bar:nth-child(2) {
position: absolute;
top: 0;
margin-top: 4px;
margin-right: -4px;
margin-left: 4px;
z-index: 4;
width: 100%;
}
.noty_layout .noty_theme__nest.noty_bar:nth-child(3) {
position: absolute;
top: 0;
margin-top: 8px;
margin-right: -8px;
margin-left: 8px;
z-index: 3;
width: 100%;
}
.noty_layout .noty_theme__nest.noty_bar:nth-child(4) {
position: absolute;
top: 0;
margin-top: 12px;
margin-right: -12px;
margin-left: 12px;
z-index: 2;
width: 100%;
}
.noty_layout .noty_theme__nest.noty_bar:nth-child(5) {
position: absolute;
top: 0;
margin-top: 16px;
margin-right: -16px;
margin-left: 16px;
z-index: 1;
width: 100%;
}
.noty_layout .noty_theme__nest.noty_bar:nth-child(n+6) {
position: absolute;
top: 0;
margin-top: 20px;
margin-right: -20px;
margin-left: 20px;
z-index: -1;
width: 100%;
}
#noty_layout__bottomLeft .noty_theme__nest.noty_bar:nth-child(2),
#noty_layout__topLeft .noty_theme__nest.noty_bar:nth-child(2) {
margin-top: 4px;
margin-left: -4px;
margin-right: 4px;
}
#noty_layout__bottomLeft .noty_theme__nest.noty_bar:nth-child(3),
#noty_layout__topLeft .noty_theme__nest.noty_bar:nth-child(3) {
margin-top: 8px;
margin-left: -8px;
margin-right: 8px;
}
#noty_layout__bottomLeft .noty_theme__nest.noty_bar:nth-child(4),
#noty_layout__topLeft .noty_theme__nest.noty_bar:nth-child(4) {
margin-top: 12px;
margin-left: -12px;
margin-right: 12px;
}
#noty_layout__bottomLeft .noty_theme__nest.noty_bar:nth-child(5),
#noty_layout__topLeft .noty_theme__nest.noty_bar:nth-child(5) {
margin-top: 16px;
margin-left: -16px;
margin-right: 16px;
}
#noty_layout__bottomLeft .noty_theme__nest.noty_bar:nth-child(n+6),
#noty_layout__topLeft .noty_theme__nest.noty_bar:nth-child(n+6) {
margin-top: 20px;
margin-left: -20px;
margin-right: 20px;
}
.noty_theme__nest.noty_type__alert,
.noty_theme__nest.noty_type__notification {
background-color: #073b4c;
color: #fff;
}
.noty_theme__nest.noty_type__alert .noty_progressbar,
.noty_theme__nest.noty_type__notification .noty_progressbar {
background-color: #fff;
}
.noty_theme__nest.noty_type__warning {
background-color: #ffd166;
color: #fff;
}
.noty_theme__nest.noty_type__error {
background-color: #ef476f;
color: #fff;
}
.noty_theme__nest.noty_type__error .noty_progressbar {
opacity: .4;
}
.noty_theme__nest.noty_type__info,
.noty_theme__nest.noty_type__information {
background-color: #118ab2;
color: #fff;
}
.noty_theme__nest.noty_type__info .noty_progressbar,
.noty_theme__nest.noty_type__information .noty_progressbar {
opacity: .6;
}
.noty_theme__nest.noty_type__success {
background-color: #06d6a0;
color: #fff;
}
.noty_theme__light.noty_bar {
margin: 4px 0;
overflow: hidden;
border-radius: 2px;
position: relative;
}
.noty_theme__light.noty_bar .noty_body {
padding: 10px;
}
.noty_theme__light.noty_bar .noty_buttons {
border-top: 1px solid #e7e7e7;
padding: 5px 10px;
}
.noty_theme__light.noty_type__alert,
.noty_theme__light.noty_type__notification {
background-color: #fff;
border: 1px solid #dedede;
color: #444;
}
.noty_theme__light.noty_type__warning {
background-color: #ffeaa8;
border: 1px solid #FFC237;
color: #826200;
}
.noty_theme__light.noty_type__warning .noty_buttons {
border-color: #dfaa30;
}
.noty_theme__light.noty_type__error {
background-color: #ed7000;
border: 1px solid #e25353;
color: #fff;
}
.noty_theme__light.noty_type__error .noty_buttons {
border-color: #8b0000;
}
.noty_theme__light.noty_type__info,
.noty_theme__light.noty_type__information {
background-color: #78c5e7;
border: 1px solid #3badd6;
color: #fff;
}
.noty_theme__light.noty_type__info .noty_buttons,
.noty_theme__light.noty_type__information .noty_buttons {
border-color: #0b90c4;
}
.noty_theme__light.noty_type__success {
background-color: #57c880;
border: 1px solid #7cdd77;
color: #006400;
}
.noty_theme__light.noty_type__success .noty_buttons {
border-color: #50c24e;
}
.download-item[data-v-83b954f2] {
position: relative;
white-space: nowrap;
padding: 2px;
overflow: visible;
}
.download-item--can-cancel[data-v-83b954f2]:hover {
width: calc(100% - 30px);
}
.download-item__cancel[data-v-83b954f2] {
cursor: pointer;
position: absolute;
top: 0;
right: -30px;
color: #f44336;
font-size: 20px;
line-height: 30px;
width: 30px;
}
.download-item__title[data-v-83b954f2] {
overflow: hidden;
text-overflow: ellipsis;
text-align: left;
}
.download-item__progress[data-v-83b954f2] {
background-color: #0000ff80;
line-height: 10px;
}
.download-item--error .download-item__progress[data-v-83b954f2] {
background-color: #ff000080;
}
.download-item--compressing .download-item__progress[data-v-83b954f2] {
background-color: #00ff0080;
}
.download-item__progress-text[data-v-83b954f2] {
transform: scale(.8);
}
#download-panel[data-v-f37e74c3] {
overflow-x: hidden;
position: fixed;
top: 20vh;
right: 0;
width: calc(50vw - 620px);
max-width: 300px;
min-width: 150px;
max-height: 60vh;
background-color: #000000b3;
z-index: 100;
font-size: 12px;
overflow-y: scroll;
}
#download-panel[data-v-f37e74c3]::-webkit-scrollbar {
width: 6px;
background-color: #000000b3;
}
#download-panel[data-v-f37e74c3]::-webkit-scrollbar-thumb {
background-color: #fff9;
}
.nhentai-helper-setting-help-buttons[data-v-b1ccce6d] {
float: left;
position: absolute;
}
.inline-item[data-v-b1ccce6d] {
display: inline-block;
}
.inline-item[data-v-b1ccce6d]:not(:last-of-type) {
margin-right: 8px;
}
.inline-item__name[data-v-b1ccce6d] {
margin-right: 4px;
-webkit-user-select: none;
user-select: none;
}
.monospace[data-v-b1ccce6d] {
font-family: monospace;
}
span.monospace[data-v-b1ccce6d] {
-webkit-user-select: none;
user-select: none;
}
.code-type[data-v-b1ccce6d] {
color: var(--el-text-color-secondary);
}
#nhentai-helper-setting-dialog-outside {
width: 80%;
max-width: 800px;
}
#nhentai-helper-setting-dialog-outside .no-sl {
-webkit-user-select: none;
user-select: none;
}
#nhentai-helper-setting-dialog .asterisk-example:before {
content: "*";
color: var(--el-color-danger);
margin-right: 4px;
}
#nhentai-helper-setting-dialog label {
font-weight: unset;
}
#nhentai-helper-setting-dialog input:not([type=file]):not([type=checkbox]),
#nhentai-helper-setting-dialog textarea {
background: inherit;
color: var(--el-input-text-color, var(--el-text-color-regular));
}
#nhentai-helper-setting-dialog .el-input.is-disabled .el-input__inner {
color: var(--el-disabled-text-color);
}
#nhentai-helper-setting-dialog .el-slider__stop {
border: solid 1px var(--el-slider-runway-bg-color);
}
#nhentai-helper-setting-dialog .el-form-item:last-of-type {
margin-bottom: 0;
}
#nhentai-helper-setting-dialog .el-form-item.refresh-required > .el-form-item__label-wrap > .el-form-item__label:after {
content: "*";
color: var(--el-color-danger);
margin-left: 4px;
}
#nhentai-helper-setting-dialog .el-form-item__content .el-link.is-underline:hover:after {
bottom: 8px;
}
#nhentai-helper-setting-dialog .el-divider__text {
color: var(--el-text-color-secondary);
-webkit-user-select: none;
user-select: none;
}
#nhentai-helper-setting-dialog .m-l-16 {
margin-left: 16px;
}
#nhentai-helper-setting-dialog .m-b-32 {
margin-bottom: 32px;
}
#nhentai-helper-setting-dialog .el-form-item__label {
-webkit-user-select: none;
user-select: none;
}
#nhentai-helper-setting-dialog .el-table .el-input__prefix,
#nhentai-helper-setting-dialog .el-table .el-input__suffix {
line-height: 30px;
}
#nhentai-helper-setting-dialog .el-table__empty-block {
display: none;
}
#nhentai-helper-setting-dialog .el-link {
color: var(--el-link-text-color);
}
#nhentai-helper-setting-dialog .el-link:hover {
color: var(--el-link-hover-text-color);
}
#nhentai-helper-setting-dialog .el-collapse-item__header {
font-family: inherit;
}
.el-select-dropdown {
-webkit-user-select: none;
user-select: none;
}
.language-filter[data-v-e2153767] {
display: inline-flex;
align-items: center;
padding-left: 10px;
vertical-align: middle;
}
.filter-select[data-v-e2153767] {
width: 140px;
margin-right: -140px;
}
.filter-select[data-v-e2153767] .el-input__inner {
color: var(--el-input-text-color, var(--el-text-color-regular)) !important;
background: 0 0 !important;
}
@media screen and (max-width: 644px) {
.language-filter[data-v-e2153767] {
padding: 10px 0;
}
.filter-select[data-v-e2153767] {
margin-right: 0;
}
}
.bold[data-v-22c5eb74] {
font-weight: 700;
}
.info-label[data-v-22c5eb74] {
display: inline-block;
}
.lang-zh .info-label[data-v-22c5eb74] {
min-width: 30px;
}
.lang-en .info-label[data-v-22c5eb74] {
min-width: 80px;
}
.info-tag-wrapper[data-v-22c5eb74] {
display: flex;
}
.info-tag[data-v-22c5eb74] {
margin: 2px;
-webkit-user-select: none;
user-select: none;
}
.info-tag--pointer[data-v-22c5eb74] {
cursor: pointer;
}
.image-loading[data-v-22c5eb74] {
width: 100%;
height: 100%;
background-color: #0009;
}
.scroll-container[data-v-22c5eb74] {
min-height: 400px;
margin: 8px -8px 0;
overflow-y: auto;
}
.scroll-container[data-v-22c5eb74]::-webkit-scrollbar {
width: 6px;
}
.scroll-container[data-v-22c5eb74]::-webkit-scrollbar-thumb {
background-color: #0003;
border-radius: 10px;
transition: all .2s ease-in-out;
}
.scroll-container[data-v-22c5eb74]::-webkit-scrollbar-track {
border-radius: 10px;
}
.scroll-container-inner[data-v-22c5eb74] {
padding: 0 8px;
}
.gallery-mini-popover .el-descriptions__header {
align-items: flex-start !important;
}
.gallery-mini-popover .el-descriptions__extra {
height: 0;
white-space: nowrap;
}
.gallery-mini-popover .el-descriptions__title {
text-align: left !important;
}
.gallery-mini-popover .el-descriptions__cell {
display: flex;
padding-bottom: 0 !important;
}
.gallery-mini-popover .el-descriptions__label {
flex-grow: 0;
flex-shrink: 0;
}
.gallery-mini-popover .el-descriptions__content {
flex-grow: 1;
flex-shrink: 1;
}
.gallery-mini-popover .el-link {
color: var(--el-link-text-color) !important;
}
.gallery-mini-popover .el-link:hover {
color: var(--el-link-hover-text-color) !important;
}
.gallery-mini-popover .el-image {
width: 100%;
}
.popover-transition {
transition: var(--el-transition-all);
transition-duration: .2s;
} `);
(function ($, vue, elementPlus) {
'use strict';
var __defProp = Object.defineProperty;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __typeError = (msg) => {
throw TypeError(msg);
};
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
var __commonJS = (cb, mod) => function() {
return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
};
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key != "symbol" ? key + "" : key, value), __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj)), __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value), __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), member.set(obj, value), value);
var require_main_001 = __commonJS({
"main-xfhdUKOa.js"(exports, module) {
var _GM_getValue = typeof GM_getValue < "u" ? GM_getValue : void 0, _GM_openInTab = typeof GM_openInTab < "u" ? GM_openInTab : void 0, _GM_registerMenuCommand = typeof GM_registerMenuCommand < "u" ? GM_registerMenuCommand : void 0, _GM_setClipboard = typeof GM_setClipboard < "u" ? GM_setClipboard : void 0, _GM_setValue = typeof GM_setValue < "u" ? GM_setValue : void 0, _GM_xmlhttpRequest = typeof GM_xmlhttpRequest < "u" ? GM_xmlhttpRequest : void 0, _unsafeWindow = typeof unsafeWindow < "u" ? unsafeWindow : void 0, _monkeyWindow = window;
const defaultSelector = {
// list
menuLeft: "ul.menu.left",
gallery: ".gallery",
galleryHref: ".gallery a",
galleryList: "#content",
galleryCover: "a.cover",
galleryCaption: ".caption",
pjaxTrigger: ".pagination a, .sort a",
pjaxTarget: "#content",
pjaxRemoveParam: ".pagination a",
paginationPrevious: ".pagination .previous",
paginationNext: ".pagination .next",
// gallery
showAllImagesButton: "#show-all-images-button",
thumbnailContainer: "#thumbnail-container",
thumbnailContainerImage: "#thumbnail-container img",
thumbnailHref: "a.gallerythumb",
englishTitle: "#info h1",
japaneseTitle: "#info h2",
tag: (text) => `#tags .tag-container:contains(${text}) .tag`,
tagName: ".name",
tagCount: ".count",
pagesTag: "#tags .tag-container:contains(Pages) .name",
uploadDateTag: "#tags .tag-container:contains(Uploaded) time",
infoButtons: "#info > .buttons",
// view
mediaImage: "#image-container img",
pageContainer: "#page-container"
}, siteMap$1 = {
"nhentai.xxx": {
// list
menuLeft: "ul.hd_left",
gallery: ".gallery_item",
galleryHref: ".gallery_item a",
galleryList: ".main_wrap",
galleryCover: "a",
pjaxTrigger: ".pagination a, .sort_links a",
pjaxTarget: ".main_wrap",
paginationPrevious: ".pagination a:contains(Previous)",
paginationNext: ".pagination a:contains(Next)",
// gallery
showAllImagesButton: "#show_all",
thumbnailContainer: ".outer_thumbs",
thumbnailContainerImage: ".outer_thumbs img",
thumbnailHref: ".gt_th > a",
englishTitle: ".info h1",
japaneseTitle: ".info h2",
tag: (text) => `li.tags:contains(${text})`,
tagName: ".tag_name",
tagCount: ".tag_count",
pagesTag: ".tag_name.pages",
uploadDateTag: ".tags.uploaded",
infoButtons: ".info > .g_buttons",
// view
mediaImage: "#fimg",
pageContainer: ".reader_outer"
}
}, selector = { ...defaultSelector, ...siteMap$1[location.hostname] }, WORKER_THREAD_NUM = Math.max(navigator.hardwareConcurrency - 1, 1), { pathname, hostname } = location, IS_PAGE_MANGA_DETAIL = /^\/g\/[0-9]+\/?(\?.*)?$/.test(pathname), IS_PAGE_ONLINE_VIEW = /^\/g\/[0-9]+(\/list)?\/[0-9]+\/?(\?.*)?$/.test(pathname), IS_PAGE_MANGA_LIST = !IS_PAGE_MANGA_DETAIL && !IS_PAGE_ONLINE_VIEW && !!document.querySelector(selector.gallery), IS_NHENTAI = hostname === "nhentai.net", IS_NHENTAI_TO = hostname === "nhentai.to" || hostname === "nhentai.website", IS_NHENTAI_XXX = hostname === "nhentai.xxx", MEDIA_URL_TEMPLATE_MAY_CHANGE = IS_NHENTAI || IS_NHENTAI_XXX, MEDIA_URL_TEMPLATE_KEY = `media_url_template_${hostname}`, THUMB_MEDIA_URL_TEMPLATE_KEY = `thumb_media_url_template_${hostname}`, isNodeOrElement = typeof Node == "function" ? (val) => val instanceof Node : (val) => val && typeof val == "object" && typeof val.nodeType == "number" && typeof val.nodeName == "string";
if (IS_NHENTAI && (_GM_getValue("prevent_console_clear", false) || localStorage.getItem("NHENTAI_HELPER_DEBUG"))) {
const c = _unsafeWindow.console;
c._clear = c.clear, c.clear = () => {
}, c._log = c.log, c.log = (...args) => {
args.length === 1 && isNodeOrElement(args[0]) || c._log(...args);
};
}
const logger = {
devLog: () => {
},
log: (...args) => {
console.log("[nhentai-helper]", ...args);
},
warn: (...args) => {
console.warn("[nhentai-helper]", ...args);
},
error: (...args) => {
console.error("[nhentai-helper]", ...args);
}
};
(function($2) {
function fnPjax(selector2, container, options) {
return options = optionsFor(container, options), this.on("click.pjax", selector2, function(event) {
var opts = options;
opts.container || (opts = $2.extend({}, options), opts.container = $2(this).attr("data-pjax")), handleClick(event, opts);
});
}
function handleClick(event, container, options) {
options = optionsFor(container, options);
var link = event.currentTarget, $link = $2(link);
if (link.tagName.toUpperCase() !== "A")
throw "$.fn.pjax or $.pjax.click requires an anchor element";
if (!(event.which > 1 || event.metaKey || event.ctrlKey || event.shiftKey || event.altKey) && !(location.protocol !== link.protocol || location.hostname !== link.hostname) && !(link.href.indexOf("#") > -1 && stripHash(link) == stripHash(location)) && !event.isDefaultPrevented()) {
var defaults = {
url: link.href,
container: $link.attr("data-pjax"),
target: link
}, opts = $2.extend({}, defaults, options), clickEvent = $2.Event("pjax:click");
$link.trigger(clickEvent, [opts]), clickEvent.isDefaultPrevented() || (pjax(opts), event.preventDefault(), $link.trigger("pjax:clicked", [opts]));
}
}
function handleSubmit(event, container, options) {
options = optionsFor(container, options);
var form = event.currentTarget, $form = $2(form);
if (form.tagName.toUpperCase() !== "FORM")
throw "$.pjax.submit requires a form element";
var defaults = {
type: ($form.attr("method") || "GET").toUpperCase(),
url: $form.attr("action"),
container: $form.attr("data-pjax"),
target: form
};
if (defaults.type !== "GET" && window.FormData !== void 0)
defaults.data = new FormData(form), defaults.processData = false, defaults.contentType = false;
else {
if ($form.find(":file").length)
return;
defaults.data = $form.serializeArray();
}
pjax($2.extend({}, defaults, options)), event.preventDefault();
}
function pjax(options) {
options = $2.extend(true, {}, $2.ajaxSettings, pjax.defaults, options), $2.isFunction(options.url) && (options.url = options.url());
var hash = parseURL(options.url).hash, containerType = $2.type(options.container);
if (containerType !== "string")
throw "expected string value for 'container' option; got " + containerType;
var context = options.context = $2(options.container);
if (!context.length)
throw "the container selector '" + options.container + "' did not match anything";
options.data || (options.data = {}), $2.isArray(options.data) ? options.data.push({ name: "_pjax", value: options.container }) : options.data._pjax = options.container;
function fire(type, args, props) {
props || (props = {}), props.relatedTarget = options.target;
var event = $2.Event(type, props);
return context.trigger(event, args), !event.isDefaultPrevented();
}
var timeoutTimer;
options.beforeSend = function(xhr2, settings2) {
if (settings2.type !== "GET" && (settings2.timeout = 0), xhr2.setRequestHeader("X-PJAX", "true"), xhr2.setRequestHeader("X-PJAX-Container", options.container), !fire("pjax:beforeSend", [xhr2, settings2]))
return false;
settings2.timeout > 0 && (timeoutTimer = setTimeout(function() {
fire("pjax:timeout", [xhr2, options]) && xhr2.abort("timeout");
}, settings2.timeout), settings2.timeout = 0);
var url = parseURL(settings2.url);
hash && (url.hash = hash), options.requestUrl = stripInternalParams(url);
}, options.complete = function(xhr2, textStatus) {
timeoutTimer && clearTimeout(timeoutTimer), fire("pjax:complete", [xhr2, textStatus, options]), fire("pjax:end", [xhr2, options]);
}, options.error = function(xhr2, textStatus, errorThrown) {
var container = extractContainer("", xhr2, options), allowed = fire("pjax:error", [xhr2, textStatus, errorThrown, options]);
options.type == "GET" && textStatus !== "abort" && allowed && locationReplace(container.url);
}, options.success = function(data, status, xhr2) {
var previousState = pjax.state, currentVersion = typeof $2.pjax.defaults.version == "function" ? $2.pjax.defaults.version() : $2.pjax.defaults.version, latestVersion = xhr2.getResponseHeader("X-PJAX-Version"), container = extractContainer(data, xhr2, options), url = parseURL(container.url);
if (hash && (url.hash = hash, container.url = url.href), currentVersion && latestVersion && currentVersion !== latestVersion) {
locationReplace(container.url);
return;
}
if (!container.contents) {
locationReplace(container.url);
return;
}
pjax.state = {
id: options.id || uniqueId(),
url: container.url,
title: container.title,
container: options.container,
fragment: options.fragment,
timeout: options.timeout
}, (options.push || options.replace) && window.history.replaceState(pjax.state, container.title, container.url);
var blurFocus = $2.contains(context, document.activeElement);
if (blurFocus)
try {
document.activeElement.blur();
} catch {
}
container.title && (document.title = container.title), fire("pjax:beforeReplace", [container.contents, options], {
state: pjax.state,
previousState
}), context.html(container.contents);
var autofocusEl = context.find("input[autofocus], textarea[autofocus]").last()[0];
autofocusEl && document.activeElement !== autofocusEl && autofocusEl.focus(), executeScriptTags(container.scripts);
var scrollTo = options.scrollTo;
if (hash) {
var name = decodeURIComponent(hash.slice(1)), target = document.getElementById(name) || document.getElementsByName(name)[0];
target && (scrollTo = $2(target).offset().top);
}
typeof scrollTo == "number" && $2(window).scrollTop(scrollTo), fire("pjax:success", [data, status, xhr2, options]);
}, pjax.state || (pjax.state = {
id: uniqueId(),
url: window.location.href,
title: document.title,
container: options.container,
fragment: options.fragment,
timeout: options.timeout
}, window.history.replaceState(pjax.state, document.title)), abortXHR(pjax.xhr), pjax.options = options;
var xhr = pjax.xhr = $2.ajax(options);
return xhr.readyState > 0 && (options.push && !options.replace && (cachePush(pjax.state.id, [options.container, cloneContents(context)]), window.history.pushState(null, "", options.requestUrl)), fire("pjax:start", [xhr, options]), fire("pjax:send", [xhr, options])), pjax.xhr;
}
function pjaxReload(container, options) {
var defaults = {
url: window.location.href,
push: false,
replace: true,
scrollTo: false
};
return pjax($2.extend(defaults, optionsFor(container, options)));
}
function locationReplace(url) {
window.history.replaceState(null, "", pjax.state.url), window.location.replace(url);
}
var initialPop = true, initialURL = window.location.href, initialState = window.history.state;
initialState && initialState.container && (pjax.state = initialState), "state" in window.history && (initialPop = false);
function onPjaxPopstate(event) {
initialPop || abortXHR(pjax.xhr);
var previousState = pjax.state, state = event.state, direction;
if (state && state.container) {
if (initialPop && initialURL == state.url) return;
if (previousState) {
if (previousState.id === state.id) return;
direction = previousState.id < state.id ? "forward" : "back";
}
var cache2 = cacheMapping[state.id] || [], containerSelector = cache2[0] || state.container, container = $2(containerSelector), contents = cache2[1];
if (container.length) {
previousState && cachePop(direction, previousState.id, [containerSelector, cloneContents(container)]);
var popstateEvent = $2.Event("pjax:popstate", {
state,
direction
});
container.trigger(popstateEvent);
var options = {
id: state.id,
url: state.url,
container: containerSelector,
push: false,
fragment: state.fragment,
timeout: state.timeout,
scrollTo: false
};
if (contents) {
container.trigger("pjax:start", [null, options]), pjax.state = state, state.title && (document.title = state.title);
var beforeReplaceEvent = $2.Event("pjax:beforeReplace", {
state,
previousState
});
container.trigger(beforeReplaceEvent, [contents, options]), container.html(contents), container.trigger("pjax:end", [null, options]);
} else
pjax(options);
container[0].offsetHeight;
} else
locationReplace(location.href);
}
initialPop = false;
}
function fallbackPjax(options) {
var url = $2.isFunction(options.url) ? options.url() : options.url, method = options.type ? options.type.toUpperCase() : "GET", form = $2("<form>", {
method: method === "GET" ? "GET" : "POST",
action: url,
style: "display:none"
});
method !== "GET" && method !== "POST" && form.append($2("<input>", {
type: "hidden",
name: "_method",
value: method.toLowerCase()
}));
var data = options.data;
if (typeof data == "string")
$2.each(data.split("&"), function(index, value) {
var pair = value.split("=");
form.append($2("<input>", { type: "hidden", name: pair[0], value: pair[1] }));
});
else if ($2.isArray(data))
$2.each(data, function(index, value) {
form.append($2("<input>", { type: "hidden", name: value.name, value: value.value }));
});
else if (typeof data == "object") {
var key;
for (key in data)
form.append($2("<input>", { type: "hidden", name: key, value: data[key] }));
}
$2(document.body).append(form), form.submit();
}
function abortXHR(xhr) {
xhr && xhr.readyState < 4 && (xhr.onreadystatechange = $2.noop, xhr.abort());
}
function uniqueId() {
return (/* @__PURE__ */ new Date()).getTime();
}
function cloneContents(container) {
var cloned = container.clone();
return cloned.find("script").each(function() {
this.src || $2._data(this, "globalEval", false);
}), cloned.contents();
}
function stripInternalParams(url) {
return url.search = url.search.replace(/([?&])(_pjax|_)=[^&]*/g, "").replace(/^&/, ""), url.href.replace(/\?($|#)/, "$1");
}
function parseURL(url) {
var a = document.createElement("a");
return a.href = url, a;
}
function stripHash(location2) {
return location2.href.replace(/#.*/, "");
}
function optionsFor(container, options) {
return container && options ? (options = $2.extend({}, options), options.container = container, options) : $2.isPlainObject(container) ? container : { container };
}
function findAll(elems, selector2) {
return elems.filter(selector2).add(elems.find(selector2));
}
function parseHTML(html) {
return $2.parseHTML(html, document, true);
}
function extractContainer(data, xhr, options) {
var obj = {}, fullDocument = /<html/i.test(data), serverUrl = xhr.getResponseHeader("X-PJAX-URL");
obj.url = serverUrl ? stripInternalParams(parseURL(serverUrl)) : options.requestUrl;
var $head, $body;
if (fullDocument) {
$body = $2(parseHTML(data.match(/<body[^>]*>([\s\S.]*)<\/body>/i)[0]));
var head = data.match(/<head[^>]*>([\s\S.]*)<\/head>/i);
$head = head != null ? $2(parseHTML(head[0])) : $body;
} else
$head = $body = $2(parseHTML(data));
if ($body.length === 0)
return obj;
if (obj.title = findAll($head, "title").last().text(), options.fragment) {
var $fragment = $body;
options.fragment !== "body" && ($fragment = findAll($fragment, options.fragment).first()), $fragment.length && (obj.contents = options.fragment === "body" ? $fragment : $fragment.contents(), obj.title || (obj.title = $fragment.attr("title") || $fragment.data("title")));
} else fullDocument || (obj.contents = $body);
return obj.contents && (obj.contents = obj.contents.not(function() {
return $2(this).is("title");
}), obj.contents.find("title").remove(), obj.scripts = findAll(obj.contents, "script[src]").remove(), obj.contents = obj.contents.not(obj.scripts)), obj.title && (obj.title = $2.trim(obj.title)), obj;
}
function executeScriptTags(scripts) {
if (scripts) {
var existingScripts = $2("script[src]");
scripts.each(function() {
var src = this.src, matchedScripts = existingScripts.filter(function() {
return this.src === src;
});
if (!matchedScripts.length) {
var script = document.createElement("script"), type = $2(this).attr("type");
type && (script.type = type), script.src = $2(this).attr("src"), document.head.appendChild(script);
}
});
}
}
var cacheMapping = {}, cacheForwardStack = [], cacheBackStack = [];
function cachePush(id, value) {
cacheMapping[id] = value, cacheBackStack.push(id), trimCacheStack(cacheForwardStack, 0), trimCacheStack(cacheBackStack, pjax.defaults.maxCacheLength);
}
function cachePop(direction, id, value) {
var pushStack, popStack;
cacheMapping[id] = value, direction === "forward" ? (pushStack = cacheBackStack, popStack = cacheForwardStack) : (pushStack = cacheForwardStack, popStack = cacheBackStack), pushStack.push(id), id = popStack.pop(), id && delete cacheMapping[id], trimCacheStack(pushStack, pjax.defaults.maxCacheLength);
}
function trimCacheStack(stack, length) {
for (; stack.length > length; )
delete cacheMapping[stack.shift()];
}
function findVersion() {
return $2("meta").filter(function() {
var name = $2(this).attr("http-equiv");
return name && name.toUpperCase() === "X-PJAX-VERSION";
}).attr("content");
}
function enable() {
$2.fn.pjax = fnPjax, $2.pjax = pjax, $2.pjax.enable = $2.noop, $2.pjax.disable = disable, $2.pjax.click = handleClick, $2.pjax.submit = handleSubmit, $2.pjax.reload = pjaxReload, $2.pjax.defaults = {
timeout: 650,
push: true,
replace: false,
type: "GET",
dataType: "html",
scrollTo: 0,
maxCacheLength: 20,
version: findVersion
}, $2(window).on("popstate.pjax", onPjaxPopstate);
}
function disable() {
$2.fn.pjax = function() {
return this;
}, $2.pjax = fallbackPjax, $2.pjax.enable = enable, $2.pjax.disable = $2.noop, $2.pjax.click = $2.noop, $2.pjax.submit = $2.noop, $2.pjax.reload = function() {
window.location.reload();
}, $2(window).off("popstate.pjax", onPjaxPopstate);
}
$2.event.props && $2.inArray("state", $2.event.props) < 0 ? $2.event.props.push("state") : "state" in $2.Event.prototype || $2.event.addProp("state"), $2.support.pjax = window.history && window.history.pushState && window.history.replaceState && // pushState isn't reliable on iOS until 5.
!navigator.userAgent.match(/((iPod|iPhone|iPad).+\bOS\s+[1-4]\D|WebApps\/.+CFNetwork)/), $2.support.pjax ? enable() : disable();
})(jQuery);
const cssLoader = (e) => {
const t2 = GM_getResourceText(e);
return GM_addStyle(t2), t2;
};
cssLoader("element-plus-css");
var freeGlobal = typeof global == "object" && global && global.Object === Object && global, freeSelf = typeof self == "object" && self && self.Object === Object && self, root = freeGlobal || freeSelf || Function("return this")(), Symbol$1 = root.Symbol, objectProto$i = Object.prototype, hasOwnProperty$f = objectProto$i.hasOwnProperty, nativeObjectToString$2 = objectProto$i.toString, symToStringTag$1 = Symbol$1 ? Symbol$1.toStringTag : void 0;
function getRawTag(value) {
var isOwn = hasOwnProperty$f.call(value, symToStringTag$1), tag = value[symToStringTag$1];
try {
value[symToStringTag$1] = void 0;
var unmasked = !0;
} catch {
}
var result = nativeObjectToString$2.call(value);
return unmasked && (isOwn ? value[symToStringTag$1] = tag : delete value[symToStringTag$1]), result;
}
var objectProto$h = Object.prototype, nativeObjectToString$1 = objectProto$h.toString;
function objectToString$1(value) {
return nativeObjectToString$1.call(value);
}
var nullTag = "[object Null]", undefinedTag = "[object Undefined]", symToStringTag = Symbol$1 ? Symbol$1.toStringTag : void 0;
function baseGetTag(value) {
return value == null ? value === void 0 ? undefinedTag : nullTag : symToStringTag && symToStringTag in Object(value) ? getRawTag(value) : objectToString$1(value);
}
function isObjectLike(value) {
return value != null && typeof value == "object";
}
var symbolTag$1 = "[object Symbol]";
function isSymbol(value) {
return typeof value == "symbol" || isObjectLike(value) && baseGetTag(value) == symbolTag$1;
}
function arrayMap(array, iteratee) {
for (var index = -1, length = array == null ? 0 : array.length, result = Array(length); ++index < length; )
result[index] = iteratee(array[index], index, array);
return result;
}
var isArray$1 = Array.isArray, symbolProto$1 = Symbol$1 ? Symbol$1.prototype : void 0, symbolToString = symbolProto$1 ? symbolProto$1.toString : void 0;
function baseToString(value) {
if (typeof value == "string")
return value;
if (isArray$1(value))
return arrayMap(value, baseToString) + "";
if (isSymbol(value))
return symbolToString ? symbolToString.call(value) : "";
var result = value + "";
return result == "0" && 1 / value == -1 / 0 ? "-0" : result;
}
var reWhitespace = /\s/;
function trimmedEndIndex(string) {
for (var index = string.length; index-- && reWhitespace.test(string.charAt(index)); )
;
return index;
}
var reTrimStart = /^\s+/;
function baseTrim(string) {
return string && string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, "");
}
function isObject$4(value) {
var type = typeof value;
return value != null && (type == "object" || type == "function");
}
var NAN = NaN, reIsBadHex = /^[-+]0x[0-9a-f]+$/i, reIsBinary = /^0b[01]+$/i, reIsOctal = /^0o[0-7]+$/i, freeParseInt = parseInt;
function toNumber(value) {
if (typeof value == "number")
return value;
if (isSymbol(value))
return NAN;
if (isObject$4(value)) {
var other = typeof value.valueOf == "function" ? value.valueOf() : value;
value = isObject$4(other) ? other + "" : other;
}
if (typeof value != "string")
return value === 0 ? value : +value;
value = baseTrim(value);
var isBinary = reIsBinary.test(value);
return isBinary || reIsOctal.test(value) ? freeParseInt(value.slice(2), isBinary ? 2 : 8) : reIsBadHex.test(value) ? NAN : +value;
}
var INFINITY = 1 / 0, MAX_INTEGER = 17976931348623157e292;
function toFinite(value) {
if (!value)
return value === 0 ? value : 0;
if (value = toNumber(value), value === INFINITY || value === -1 / 0) {
var sign = value < 0 ? -1 : 1;
return sign * MAX_INTEGER;
}
return value === value ? value : 0;
}
function toInteger(value) {
var result = toFinite(value), remainder = result % 1;
return result === result ? remainder ? result - remainder : result : 0;
}
function identity(value) {
return value;
}
var asyncTag = "[object AsyncFunction]", funcTag$1 = "[object Function]", genTag = "[object GeneratorFunction]", proxyTag = "[object Proxy]";
function isFunction$2(value) {
if (!isObject$4(value))
return false;
var tag = baseGetTag(value);
return tag == funcTag$1 || tag == genTag || tag == asyncTag || tag == proxyTag;
}
var coreJsData = root["__core-js_shared__"], maskSrcKey = function() {
var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || "");
return uid ? "Symbol(src)_1." + uid : "";
}();
function isMasked(func) {
return !!maskSrcKey && maskSrcKey in func;
}
var funcProto$2 = Function.prototype, funcToString$2 = funcProto$2.toString;
function toSource(func) {
if (func != null) {
try {
return funcToString$2.call(func);
} catch {
}
try {
return func + "";
} catch {
}
}
return "";
}
var reRegExpChar = /[\\^$.*+?()[\]{}|]/g, reIsHostCtor = /^\[object .+?Constructor\]$/, funcProto$1 = Function.prototype, objectProto$g = Object.prototype, funcToString$1 = funcProto$1.toString, hasOwnProperty$e = objectProto$g.hasOwnProperty, reIsNative = RegExp(
"^" + funcToString$1.call(hasOwnProperty$e).replace(reRegExpChar, "\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, "$1.*?") + "$"
);
function baseIsNative(value) {
if (!isObject$4(value) || isMasked(value))
return false;
var pattern = isFunction$2(value) ? reIsNative : reIsHostCtor;
return pattern.test(toSource(value));
}
function getValue(object, key) {
return object == null ? void 0 : object[key];
}
function getNative(object, key) {
var value = getValue(object, key);
return baseIsNative(value) ? value : void 0;
}
var WeakMap$1 = getNative(root, "WeakMap");
function apply(func, thisArg, args) {
switch (args.length) {
case 0:
return func.call(thisArg);
case 1:
return func.call(thisArg, args[0]);
case 2:
return func.call(thisArg, args[0], args[1]);
case 3:
return func.call(thisArg, args[0], args[1], args[2]);
}
return func.apply(thisArg, args);
}
var HOT_COUNT = 800, HOT_SPAN = 16, nativeNow = Date.now;
function shortOut(func) {
var count = 0, lastCalled = 0;
return function() {
var stamp = nativeNow(), remaining = HOT_SPAN - (stamp - lastCalled);
if (lastCalled = stamp, remaining > 0) {
if (++count >= HOT_COUNT)
return arguments[0];
} else
count = 0;
return func.apply(void 0, arguments);
};
}
function constant(value) {
return function() {
return value;
};
}
var defineProperty = function() {
try {
var func = getNative(Object, "defineProperty");
return func({}, "", {}), func;
} catch {
}
}(), baseSetToString = defineProperty ? function(func, string) {
return defineProperty(func, "toString", {
configurable: true,
enumerable: false,
value: constant(string),
writable: true
});
} : identity, setToString = shortOut(baseSetToString);
function arrayEach(array, iteratee) {
for (var index = -1, length = array == null ? 0 : array.length; ++index < length && iteratee(array[index], index, array) !== false; )
;
return array;
}
function baseFindIndex(array, predicate, fromIndex, fromRight) {
for (var length = array.length, index = fromIndex + -1; ++index < length; )
if (predicate(array[index], index, array))
return index;
return -1;
}
function baseIsNaN(value) {
return value !== value;
}
function strictIndexOf(array, value, fromIndex) {
for (var index = fromIndex - 1, length = array.length; ++index < length; )
if (array[index] === value)
return index;
return -1;
}
function baseIndexOf(array, value, fromIndex) {
return value === value ? strictIndexOf(array, value, fromIndex) : baseFindIndex(array, baseIsNaN, fromIndex);
}
function arrayIncludes(array, value) {
var length = array == null ? 0 : array.length;
return !!length && baseIndexOf(array, value, 0) > -1;
}
var MAX_SAFE_INTEGER$1 = 9007199254740991, reIsUint = /^(?:0|[1-9]\d*)$/;
function isIndex(value, length) {
var type = typeof value;
return length = length ?? MAX_SAFE_INTEGER$1, !!length && (type == "number" || type != "symbol" && reIsUint.test(value)) && value > -1 && value % 1 == 0 && value < length;
}
function baseAssignValue(object, key, value) {
key == "__proto__" && defineProperty ? defineProperty(object, key, {
configurable: true,
enumerable: true,
value,
writable: true
}) : object[key] = value;
}
function eq(value, other) {
return value === other || value !== value && other !== other;
}
var objectProto$f = Object.prototype, hasOwnProperty$d = objectProto$f.hasOwnProperty;
function assignValue(object, key, value) {
var objValue = object[key];
(!(hasOwnProperty$d.call(object, key) && eq(objValue, value)) || value === void 0 && !(key in object)) && baseAssignValue(object, key, value);
}
function copyObject(source, props, object, customizer) {
var isNew = !object;
object || (object = {});
for (var index = -1, length = props.length; ++index < length; ) {
var key = props[index], newValue = customizer ? customizer(object[key], source[key], key, object, source) : void 0;
newValue === void 0 && (newValue = source[key]), isNew ? baseAssignValue(object, key, newValue) : assignValue(object, key, newValue);
}
return object;
}
var nativeMax = Math.max;
function overRest(func, start, transform2) {
return start = nativeMax(start === void 0 ? func.length - 1 : start, 0), function() {
for (var args = arguments, index = -1, length = nativeMax(args.length - start, 0), array = Array(length); ++index < length; )
array[index] = args[start + index];
index = -1;
for (var otherArgs = Array(start + 1); ++index < start; )
otherArgs[index] = args[index];
return otherArgs[start] = transform2(array), apply(func, this, otherArgs);
};
}
function baseRest(func, start) {
return setToString(overRest(func, start, identity), func + "");
}
var MAX_SAFE_INTEGER = 9007199254740991;
function isLength(value) {
return typeof value == "number" && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;
}
function isArrayLike(value) {
return value != null && isLength(value.length) && !isFunction$2(value);
}
function isIterateeCall(value, index, object) {
if (!isObject$4(object))
return false;
var type = typeof index;
return (type == "number" ? isArrayLike(object) && isIndex(index, object.length) : type == "string" && index in object) ? eq(object[index], value) : false;
}
function createAssigner(assigner) {
return baseRest(function(object, sources) {
var index = -1, length = sources.length, customizer = length > 1 ? sources[length - 1] : void 0, guard = length > 2 ? sources[2] : void 0;
for (customizer = assigner.length > 3 && typeof customizer == "function" ? (length--, customizer) : void 0, guard && isIterateeCall(sources[0], sources[1], guard) && (customizer = length < 3 ? void 0 : customizer, length = 1), object = Object(object); ++index < length; ) {
var source = sources[index];
source && assigner(object, source, index, customizer);
}
return object;
});
}
var objectProto$e = Object.prototype;
function isPrototype(value) {
var Ctor = value && value.constructor, proto = typeof Ctor == "function" && Ctor.prototype || objectProto$e;
return value === proto;
}
function baseTimes(n, iteratee) {
for (var index = -1, result = Array(n); ++index < n; )
result[index] = iteratee(index);
return result;
}
var argsTag$2 = "[object Arguments]";
function baseIsArguments(value) {
return isObjectLike(value) && baseGetTag(value) == argsTag$2;
}
var objectProto$d = Object.prototype, hasOwnProperty$c = objectProto$d.hasOwnProperty, propertyIsEnumerable$1 = objectProto$d.propertyIsEnumerable, isArguments = baseIsArguments(/* @__PURE__ */ function() {
return arguments;
}()) ? baseIsArguments : function(value) {
return isObjectLike(value) && hasOwnProperty$c.call(value, "callee") && !propertyIsEnumerable$1.call(value, "callee");
};
function stubFalse() {
return false;
}
var freeExports$1 = typeof exports == "object" && exports && !exports.nodeType && exports, freeModule$1 = freeExports$1 && typeof module == "object" && module && !module.nodeType && module, moduleExports$1 = freeModule$1 && freeModule$1.exports === freeExports$1, Buffer = moduleExports$1 ? root.Buffer : void 0, nativeIsBuffer = Buffer ? Buffer.isBuffer : void 0, isBuffer = nativeIsBuffer || stubFalse, argsTag$1 = "[object Arguments]", arrayTag$1 = "[object Array]", boolTag$1 = "[object Boolean]", dateTag$1 = "[object Date]", errorTag$2 = "[object Error]", funcTag = "[object Function]", mapTag$2 = "[object Map]", numberTag$1 = "[object Number]", objectTag$3 = "[object Object]", regexpTag$1 = "[object RegExp]", setTag$2 = "[object Set]", stringTag$1 = "[object String]", weakMapTag$1 = "[object WeakMap]", arrayBufferTag$1 = "[object ArrayBuffer]", dataViewTag$2 = "[object DataView]", float32Tag = "[object Float32Array]", float64Tag = "[object Float64Array]", int8Tag = "[object Int8Array]", int16Tag = "[object Int16Array]", int32Tag = "[object Int32Array]", uint8Tag = "[object Uint8Array]", uint8ClampedTag = "[object Uint8ClampedArray]", uint16Tag = "[object Uint16Array]", uint32Tag = "[object Uint32Array]", typedArrayTags = {};
typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = typedArrayTags[uint32Tag] = true;
typedArrayTags[argsTag$1] = typedArrayTags[arrayTag$1] = typedArrayTags[arrayBufferTag$1] = typedArrayTags[boolTag$1] = typedArrayTags[dataViewTag$2] = typedArrayTags[dateTag$1] = typedArrayTags[errorTag$2] = typedArrayTags[funcTag] = typedArrayTags[mapTag$2] = typedArrayTags[numberTag$1] = typedArrayTags[objectTag$3] = typedArrayTags[regexpTag$1] = typedArrayTags[setTag$2] = typedArrayTags[stringTag$1] = typedArrayTags[weakMapTag$1] = false;
function baseIsTypedArray(value) {
return isObjectLike(value) && isLength(value.length) && !!typedArrayTags[baseGetTag(value)];
}
function baseUnary(func) {
return function(value) {
return func(value);
};
}
var freeExports = typeof exports == "object" && exports && !exports.nodeType && exports, freeModule = freeExports && typeof module == "object" && module && !module.nodeType && module, moduleExports = freeModule && freeModule.exports === freeExports, freeProcess = moduleExports && freeGlobal.process, nodeUtil = function() {
try {
var types = freeModule && freeModule.require && freeModule.require("util").types;
return types || freeProcess && freeProcess.binding && freeProcess.binding("util");
} catch {
}
}(), nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray, isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray, objectProto$c = Object.prototype, hasOwnProperty$b = objectProto$c.hasOwnProperty;
function arrayLikeKeys(value, inherited) {
var isArr = isArray$1(value), isArg = !isArr && isArguments(value), isBuff = !isArr && !isArg && isBuffer(value), isType = !isArr && !isArg && !isBuff && isTypedArray(value), skipIndexes = isArr || isArg || isBuff || isType, result = skipIndexes ? baseTimes(value.length, String) : [], length = result.length;
for (var key in value)
(inherited || hasOwnProperty$b.call(value, key)) && !(skipIndexes && // Safari 9 has enumerable `arguments.length` in strict mode.
(key == "length" || // Node.js 0.10 has enumerable non-index properties on buffers.
isBuff && (key == "offset" || key == "parent") || // PhantomJS 2 has enumerable non-index properties on typed arrays.
isType && (key == "buffer" || key == "byteLength" || key == "byteOffset") || // Skip index properties.
isIndex(key, length))) && result.push(key);
return result;
}
function overArg(func, transform2) {
return function(arg) {
return func(transform2(arg));
};
}
var nativeKeys = overArg(Object.keys, Object), objectProto$b = Object.prototype, hasOwnProperty$a = objectProto$b.hasOwnProperty;
function baseKeys(object) {
if (!isPrototype(object))
return nativeKeys(object);
var result = [];
for (var key in Object(object))
hasOwnProperty$a.call(object, key) && key != "constructor" && result.push(key);
return result;
}
function keys(object) {
return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);
}
function nativeKeysIn(object) {
var result = [];
if (object != null)
for (var key in Object(object))
result.push(key);
return result;
}
var objectProto$a = Object.prototype, hasOwnProperty$9 = objectProto$a.hasOwnProperty;
function baseKeysIn(object) {
if (!isObject$4(object))
return nativeKeysIn(object);
var isProto = isPrototype(object), result = [];
for (var key in object)
key == "constructor" && (isProto || !hasOwnProperty$9.call(object, key)) || result.push(key);
return result;
}
function keysIn(object) {
return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);
}
var assignInWith = createAssigner(function(object, source, srcIndex, customizer) {
copyObject(source, keysIn(source), object, customizer);
}), reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, reIsPlainProp = /^\w*$/;
function isKey(value, object) {
if (isArray$1(value))
return false;
var type = typeof value;
return type == "number" || type == "symbol" || type == "boolean" || value == null || isSymbol(value) ? true : reIsPlainProp.test(value) || !reIsDeepProp.test(value) || object != null && value in Object(object);
}
var nativeCreate = getNative(Object, "create");
function hashClear() {
this.__data__ = nativeCreate ? nativeCreate(null) : {}, this.size = 0;
}
function hashDelete(key) {
var result = this.has(key) && delete this.__data__[key];
return this.size -= result ? 1 : 0, result;
}
var HASH_UNDEFINED$2 = "__lodash_hash_undefined__", objectProto$9 = Object.prototype, hasOwnProperty$8 = objectProto$9.hasOwnProperty;
function hashGet(key) {
var data = this.__data__;
if (nativeCreate) {
var result = data[key];
return result === HASH_UNDEFINED$2 ? void 0 : result;
}
return hasOwnProperty$8.call(data, key) ? data[key] : void 0;
}
var objectProto$8 = Object.prototype, hasOwnProperty$7 = objectProto$8.hasOwnProperty;
function hashHas(key) {
var data = this.__data__;
return nativeCreate ? data[key] !== void 0 : hasOwnProperty$7.call(data, key);
}
var HASH_UNDEFINED$1 = "__lodash_hash_undefined__";
function hashSet(key, value) {
var data = this.__data__;
return this.size += this.has(key) ? 0 : 1, data[key] = nativeCreate && value === void 0 ? HASH_UNDEFINED$1 : value, this;
}
function Hash(entries) {
var index = -1, length = entries == null ? 0 : entries.length;
for (this.clear(); ++index < length; ) {
var entry = entries[index];
this.set(entry[0], entry[1]);
}
}
Hash.prototype.clear = hashClear;
Hash.prototype.delete = hashDelete;
Hash.prototype.get = hashGet;
Hash.prototype.has = hashHas;
Hash.prototype.set = hashSet;
function listCacheClear() {
this.__data__ = [], this.size = 0;
}
function assocIndexOf(array, key) {
for (var length = array.length; length--; )
if (eq(array[length][0], key))
return length;
return -1;
}
var arrayProto = Array.prototype, splice = arrayProto.splice;
function listCacheDelete(key) {
var data = this.__data__, index = assocIndexOf(data, key);
if (index < 0)
return false;
var lastIndex = data.length - 1;
return index == lastIndex ? data.pop() : splice.call(data, index, 1), --this.size, true;
}
function listCacheGet(key) {
var data = this.__data__, index = assocIndexOf(data, key);
return index < 0 ? void 0 : data[index][1];
}
function listCacheHas(key) {
return assocIndexOf(this.__data__, key) > -1;
}
function listCacheSet(key, value) {
var data = this.__data__, index = assocIndexOf(data, key);
return index < 0 ? (++this.size, data.push([key, value])) : data[index][1] = value, this;
}
function ListCache(entries) {
var index = -1, length = entries == null ? 0 : entries.length;
for (this.clear(); ++index < length; ) {
var entry = entries[index];
this.set(entry[0], entry[1]);
}
}
ListCache.prototype.clear = listCacheClear;
ListCache.prototype.delete = listCacheDelete;
ListCache.prototype.get = listCacheGet;
ListCache.prototype.has = listCacheHas;
ListCache.prototype.set = listCacheSet;
var Map$1 = getNative(root, "Map");
function mapCacheClear() {
this.size = 0, this.__data__ = {
hash: new Hash(),
map: new (Map$1 || ListCache)(),
string: new Hash()
};
}
function isKeyable(value) {
var type = typeof value;
return type == "string" || type == "number" || type == "symbol" || type == "boolean" ? value !== "__proto__" : value === null;
}
function getMapData(map2, key) {
var data = map2.__data__;
return isKeyable(key) ? data[typeof key == "string" ? "string" : "hash"] : data.map;
}
function mapCacheDelete(key) {
var result = getMapData(this, key).delete(key);
return this.size -= result ? 1 : 0, result;
}
function mapCacheGet(key) {
return getMapData(this, key).get(key);
}
function mapCacheHas(key) {
return getMapData(this, key).has(key);
}
function mapCacheSet(key, value) {
var data = getMapData(this, key), size = data.size;
return data.set(key, value), this.size += data.size == size ? 0 : 1, this;
}
function MapCache(entries) {
var index = -1, length = entries == null ? 0 : entries.length;
for (this.clear(); ++index < length; ) {
var entry = entries[index];
this.set(entry[0], entry[1]);
}
}
MapCache.prototype.clear = mapCacheClear;
MapCache.prototype.delete = mapCacheDelete;
MapCache.prototype.get = mapCacheGet;
MapCache.prototype.has = mapCacheHas;
MapCache.prototype.set = mapCacheSet;
var FUNC_ERROR_TEXT$1 = "Expected a function";
function memoize(func, resolver) {
if (typeof func != "function" || resolver != null && typeof resolver != "function")
throw new TypeError(FUNC_ERROR_TEXT$1);
var memoized = function() {
var args = arguments, key = resolver ? resolver.apply(this, args) : args[0], cache2 = memoized.cache;
if (cache2.has(key))
return cache2.get(key);
var result = func.apply(this, args);
return memoized.cache = cache2.set(key, result) || cache2, result;
};
return memoized.cache = new (memoize.Cache || MapCache)(), memoized;
}
memoize.Cache = MapCache;
var MAX_MEMOIZE_SIZE = 500;
function memoizeCapped(func) {
var result = memoize(func, function(key) {
return cache2.size === MAX_MEMOIZE_SIZE && cache2.clear(), key;
}), cache2 = result.cache;
return result;
}
var rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g, reEscapeChar = /\\(\\)?/g, stringToPath = memoizeCapped(function(string) {
var result = [];
return string.charCodeAt(0) === 46 && result.push(""), string.replace(rePropName, function(match2, number, quote, subString) {
result.push(quote ? subString.replace(reEscapeChar, "$1") : number || match2);
}), result;
});
function toString$1(value) {
return value == null ? "" : baseToString(value);
}
function castPath(value, object) {
return isArray$1(value) ? value : isKey(value, object) ? [value] : stringToPath(toString$1(value));
}
function toKey(value) {
if (typeof value == "string" || isSymbol(value))
return value;
var result = value + "";
return result == "0" && 1 / value == -1 / 0 ? "-0" : result;
}
function baseGet(object, path) {
path = castPath(path, object);
for (var index = 0, length = path.length; object != null && index < length; )
object = object[toKey(path[index++])];
return index && index == length ? object : void 0;
}
function get(object, path, defaultValue) {
var result = object == null ? void 0 : baseGet(object, path);
return result === void 0 ? defaultValue : result;
}
function arrayPush(array, values2) {
for (var index = -1, length = values2.length, offset = array.length; ++index < length; )
array[offset + index] = values2[index];
return array;
}
var getPrototype = overArg(Object.getPrototypeOf, Object), objectTag$2 = "[object Object]", funcProto = Function.prototype, objectProto$7 = Object.prototype, funcToString = funcProto.toString, hasOwnProperty$6 = objectProto$7.hasOwnProperty, objectCtorString = funcToString.call(Object);
function isPlainObject$1(value) {
if (!isObjectLike(value) || baseGetTag(value) != objectTag$2)
return false;
var proto = getPrototype(value);
if (proto === null)
return true;
var Ctor = hasOwnProperty$6.call(proto, "constructor") && proto.constructor;
return typeof Ctor == "function" && Ctor instanceof Ctor && funcToString.call(Ctor) == objectCtorString;
}
var domExcTag = "[object DOMException]", errorTag$1 = "[object Error]";
function isError(value) {
if (!isObjectLike(value))
return false;
var tag = baseGetTag(value);
return tag == errorTag$1 || tag == domExcTag || typeof value.message == "string" && typeof value.name == "string" && !isPlainObject$1(value);
}
var attempt = baseRest(function(func, args) {
try {
return apply(func, void 0, args);
} catch (e) {
return isError(e) ? e : new Error(e);
}
}), FUNC_ERROR_TEXT = "Expected a function";
function before(n, func) {
var result;
if (typeof func != "function")
throw new TypeError(FUNC_ERROR_TEXT);
return n = toInteger(n), function() {
return --n > 0 && (result = func.apply(this, arguments)), n <= 1 && (func = void 0), result;
};
}
function basePropertyOf(object) {
return function(key) {
return object == null ? void 0 : object[key];
};
}
function castArray() {
if (!arguments.length)
return [];
var value = arguments[0];
return isArray$1(value) ? value : [value];
}
function stackClear() {
this.__data__ = new ListCache(), this.size = 0;
}
function stackDelete(key) {
var data = this.__data__, result = data.delete(key);
return this.size = data.size, result;
}
function stackGet(key) {
return this.__data__.get(key);
}
function stackHas(key) {
return this.__data__.has(key);
}
var LARGE_ARRAY_SIZE$1 = 200;
function stackSet(key, value) {
var data = this.__data__;
if (data instanceof ListCache) {
var pairs = data.__data__;
if (!Map$1 || pairs.length < LARGE_ARRAY_SIZE$1 - 1)
return pairs.push([key, value]), this.size = ++data.size, this;
data = this.__data__ = new MapCache(pairs);
}
return data.set(key, value), this.size = data.size, this;
}
function Stack(entries) {
var data = this.__data__ = new ListCache(entries);
this.size = data.size;
}
Stack.prototype.clear = stackClear;
Stack.prototype.delete = stackDelete;
Stack.prototype.get = stackGet;
Stack.prototype.has = stackHas;
Stack.prototype.set = stackSet;
function arrayFilter(array, predicate) {
for (var index = -1, length = array == null ? 0 : array.length, resIndex = 0, result = []; ++index < length; ) {
var value = array[index];
predicate(value, index, array) && (result[resIndex++] = value);
}
return result;
}
function stubArray() {
return [];
}
var objectProto$6 = Object.prototype, propertyIsEnumerable = objectProto$6.propertyIsEnumerable, nativeGetSymbols = Object.getOwnPropertySymbols, getSymbols = nativeGetSymbols ? function(object) {
return object == null ? [] : (object = Object(object), arrayFilter(nativeGetSymbols(object), function(symbol) {
return propertyIsEnumerable.call(object, symbol);
}));
} : stubArray;
function baseGetAllKeys(object, keysFunc, symbolsFunc) {
var result = keysFunc(object);
return isArray$1(object) ? result : arrayPush(result, symbolsFunc(object));
}
function getAllKeys(object) {
return baseGetAllKeys(object, keys, getSymbols);
}
var DataView = getNative(root, "DataView"), Promise$1 = getNative(root, "Promise"), Set$1 = getNative(root, "Set"), mapTag$1 = "[object Map]", objectTag$1 = "[object Object]", promiseTag = "[object Promise]", setTag$1 = "[object Set]", weakMapTag = "[object WeakMap]", dataViewTag$1 = "[object DataView]", dataViewCtorString = toSource(DataView), mapCtorString = toSource(Map$1), promiseCtorString = toSource(Promise$1), setCtorString = toSource(Set$1), weakMapCtorString = toSource(WeakMap$1), getTag = baseGetTag;
(DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag$1 || Map$1 && getTag(new Map$1()) != mapTag$1 || Promise$1 && getTag(Promise$1.resolve()) != promiseTag || Set$1 && getTag(new Set$1()) != setTag$1 || WeakMap$1 && getTag(new WeakMap$1()) != weakMapTag) && (getTag = function(value) {
var result = baseGetTag(value), Ctor = result == objectTag$1 ? value.constructor : void 0, ctorString = Ctor ? toSource(Ctor) : "";
if (ctorString)
switch (ctorString) {
case dataViewCtorString:
return dataViewTag$1;
case mapCtorString:
return mapTag$1;
case promiseCtorString:
return promiseTag;
case setCtorString:
return setTag$1;
case weakMapCtorString:
return weakMapTag;
}
return result;
});
var Uint8Array$1 = root.Uint8Array, HASH_UNDEFINED = "__lodash_hash_undefined__";
function setCacheAdd(value) {
return this.__data__.set(value, HASH_UNDEFINED), this;
}
function setCacheHas(value) {
return this.__data__.has(value);
}
function SetCache(values2) {
var index = -1, length = values2 == null ? 0 : values2.length;
for (this.__data__ = new MapCache(); ++index < length; )
this.add(values2[index]);
}
SetCache.prototype.add = SetCache.prototype.push = setCacheAdd;
SetCache.prototype.has = setCacheHas;
function arraySome(array, predicate) {
for (var index = -1, length = array == null ? 0 : array.length; ++index < length; )
if (predicate(array[index], index, array))
return true;
return false;
}
function cacheHas(cache2, key) {
return cache2.has(key);
}
var COMPARE_PARTIAL_FLAG$5 = 1, COMPARE_UNORDERED_FLAG$3 = 2;
function equalArrays(array, other, bitmask, customizer, equalFunc, stack) {
var isPartial = bitmask & COMPARE_PARTIAL_FLAG$5, arrLength = array.length, othLength = other.length;
if (arrLength != othLength && !(isPartial && othLength > arrLength))
return false;
var arrStacked = stack.get(array), othStacked = stack.get(other);
if (arrStacked && othStacked)
return arrStacked == other && othStacked == array;
var index = -1, result = true, seen = bitmask & COMPARE_UNORDERED_FLAG$3 ? new SetCache() : void 0;
for (stack.set(array, other), stack.set(other, array); ++index < arrLength; ) {
var arrValue = array[index], othValue = other[index];
if (customizer)
var compared = isPartial ? customizer(othValue, arrValue, index, other, array, stack) : customizer(arrValue, othValue, index, array, other, stack);
if (compared !== void 0) {
if (compared)
continue;
result = false;
break;
}
if (seen) {
if (!arraySome(other, function(othValue2, othIndex) {
if (!cacheHas(seen, othIndex) && (arrValue === othValue2 || equalFunc(arrValue, othValue2, bitmask, customizer, stack)))
return seen.push(othIndex);
})) {
result = false;
break;
}
} else if (!(arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {
result = false;
break;
}
}
return stack.delete(array), stack.delete(other), result;
}
function mapToArray(map2) {
var index = -1, result = Array(map2.size);
return map2.forEach(function(value, key) {
result[++index] = [key, value];
}), result;
}
function setToArray(set) {
var index = -1, result = Array(set.size);
return set.forEach(function(value) {
result[++index] = value;
}), result;
}
var COMPARE_PARTIAL_FLAG$4 = 1, COMPARE_UNORDERED_FLAG$2 = 2, boolTag = "[object Boolean]", dateTag = "[object Date]", errorTag = "[object Error]", mapTag = "[object Map]", numberTag = "[object Number]", regexpTag = "[object RegExp]", setTag = "[object Set]", stringTag = "[object String]", symbolTag = "[object Symbol]", arrayBufferTag = "[object ArrayBuffer]", dataViewTag = "[object DataView]", symbolProto = Symbol$1 ? Symbol$1.prototype : void 0, symbolValueOf = symbolProto ? symbolProto.valueOf : void 0;
function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {
switch (tag) {
case dataViewTag:
if (object.byteLength != other.byteLength || object.byteOffset != other.byteOffset)
return false;
object = object.buffer, other = other.buffer;
case arrayBufferTag:
return !(object.byteLength != other.byteLength || !equalFunc(new Uint8Array$1(object), new Uint8Array$1(other)));
case boolTag:
case dateTag:
case numberTag:
return eq(+object, +other);
case errorTag:
return object.name == other.name && object.message == other.message;
case regexpTag:
case stringTag:
return object == other + "";
case mapTag:
var convert = mapToArray;
case setTag:
var isPartial = bitmask & COMPARE_PARTIAL_FLAG$4;
if (convert || (convert = setToArray), object.size != other.size && !isPartial)
return false;
var stacked = stack.get(object);
if (stacked)
return stacked == other;
bitmask |= COMPARE_UNORDERED_FLAG$2, stack.set(object, other);
var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);
return stack.delete(object), result;
case symbolTag:
if (symbolValueOf)
return symbolValueOf.call(object) == symbolValueOf.call(other);
}
return false;
}
var COMPARE_PARTIAL_FLAG$3 = 1, objectProto$5 = Object.prototype, hasOwnProperty$5 = objectProto$5.hasOwnProperty;
function equalObjects(object, other, bitmask, customizer, equalFunc, stack) {
var isPartial = bitmask & COMPARE_PARTIAL_FLAG$3, objProps = getAllKeys(object), objLength = objProps.length, othProps = getAllKeys(other), othLength = othProps.length;
if (objLength != othLength && !isPartial)
return false;
for (var index = objLength; index--; ) {
var key = objProps[index];
if (!(isPartial ? key in other : hasOwnProperty$5.call(other, key)))
return false;
}
var objStacked = stack.get(object), othStacked = stack.get(other);
if (objStacked && othStacked)
return objStacked == other && othStacked == object;
var result = true;
stack.set(object, other), stack.set(other, object);
for (var skipCtor = isPartial; ++index < objLength; ) {
key = objProps[index];
var objValue = object[key], othValue = other[key];
if (customizer)
var compared = isPartial ? customizer(othValue, objValue, key, other, object, stack) : customizer(objValue, othValue, key, object, other, stack);
if (!(compared === void 0 ? objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack) : compared)) {
result = false;
break;
}
skipCtor || (skipCtor = key == "constructor");
}
if (result && !skipCtor) {
var objCtor = object.constructor, othCtor = other.constructor;
objCtor != othCtor && "constructor" in object && "constructor" in other && !(typeof objCtor == "function" && objCtor instanceof objCtor && typeof othCtor == "function" && othCtor instanceof othCtor) && (result = false);
}
return stack.delete(object), stack.delete(other), result;
}
var COMPARE_PARTIAL_FLAG$2 = 1, argsTag = "[object Arguments]", arrayTag = "[object Array]", objectTag = "[object Object]", objectProto$4 = Object.prototype, hasOwnProperty$4 = objectProto$4.hasOwnProperty;
function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {
var objIsArr = isArray$1(object), othIsArr = isArray$1(other), objTag = objIsArr ? arrayTag : getTag(object), othTag = othIsArr ? arrayTag : getTag(other);
objTag = objTag == argsTag ? objectTag : objTag, othTag = othTag == argsTag ? objectTag : othTag;
var objIsObj = objTag == objectTag, othIsObj = othTag == objectTag, isSameTag = objTag == othTag;
if (isSameTag && isBuffer(object)) {
if (!isBuffer(other))
return false;
objIsArr = true, objIsObj = false;
}
if (isSameTag && !objIsObj)
return stack || (stack = new Stack()), objIsArr || isTypedArray(object) ? equalArrays(object, other, bitmask, customizer, equalFunc, stack) : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);
if (!(bitmask & COMPARE_PARTIAL_FLAG$2)) {
var objIsWrapped = objIsObj && hasOwnProperty$4.call(object, "__wrapped__"), othIsWrapped = othIsObj && hasOwnProperty$4.call(other, "__wrapped__");
if (objIsWrapped || othIsWrapped) {
var objUnwrapped = objIsWrapped ? object.value() : object, othUnwrapped = othIsWrapped ? other.value() : other;
return stack || (stack = new Stack()), equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);
}
}
return isSameTag ? (stack || (stack = new Stack()), equalObjects(object, other, bitmask, customizer, equalFunc, stack)) : false;
}
function baseIsEqual(value, other, bitmask, customizer, stack) {
return value === other ? true : value == null || other == null || !isObjectLike(value) && !isObjectLike(other) ? value !== value && other !== other : baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);
}
var COMPARE_PARTIAL_FLAG$1 = 1, COMPARE_UNORDERED_FLAG$1 = 2;
function baseIsMatch(object, source, matchData, customizer) {
var index = matchData.length, length = index;
if (object == null)
return !length;
for (object = Object(object); index--; ) {
var data = matchData[index];
if (data[2] ? data[1] !== object[data[0]] : !(data[0] in object))
return false;
}
for (; ++index < length; ) {
data = matchData[index];
var key = data[0], objValue = object[key], srcValue = data[1];
if (data[2]) {
if (objValue === void 0 && !(key in object))
return false;
} else {
var stack = new Stack(), result;
if (!(result === void 0 ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG$1 | COMPARE_UNORDERED_FLAG$1, customizer, stack) : result))
return false;
}
}
return true;
}
function isStrictComparable(value) {
return value === value && !isObject$4(value);
}
function getMatchData(object) {
for (var result = keys(object), length = result.length; length--; ) {
var key = result[length], value = object[key];
result[length] = [key, value, isStrictComparable(value)];
}
return result;
}
function matchesStrictComparable(key, srcValue) {
return function(object) {
return object == null ? false : object[key] === srcValue && (srcValue !== void 0 || key in Object(object));
};
}
function baseMatches(source) {
var matchData = getMatchData(source);
return matchData.length == 1 && matchData[0][2] ? matchesStrictComparable(matchData[0][0], matchData[0][1]) : function(object) {
return object === source || baseIsMatch(object, source, matchData);
};
}
function baseHasIn(object, key) {
return object != null && key in Object(object);
}
function hasPath(object, path, hasFunc) {
path = castPath(path, object);
for (var index = -1, length = path.length, result = false; ++index < length; ) {
var key = toKey(path[index]);
if (!(result = object != null && hasFunc(object, key)))
break;
object = object[key];
}
return result || ++index != length ? result : (length = object == null ? 0 : object.length, !!length && isLength(length) && isIndex(key, length) && (isArray$1(object) || isArguments(object)));
}
function hasIn(object, path) {
return object != null && hasPath(object, path, baseHasIn);
}
var COMPARE_PARTIAL_FLAG = 1, COMPARE_UNORDERED_FLAG = 2;
function baseMatchesProperty(path, srcValue) {
return isKey(path) && isStrictComparable(srcValue) ? matchesStrictComparable(toKey(path), srcValue) : function(object) {
var objValue = get(object, path);
return objValue === void 0 && objValue === srcValue ? hasIn(object, path) : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);
};
}
function baseProperty(key) {
return function(object) {
return object == null ? void 0 : object[key];
};
}
function basePropertyDeep(path) {
return function(object) {
return baseGet(object, path);
};
}
function property(path) {
return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);
}
function baseIteratee(value) {
return typeof value == "function" ? value : value == null ? identity : typeof value == "object" ? isArray$1(value) ? baseMatchesProperty(value[0], value[1]) : baseMatches(value) : property(value);
}
function arrayAggregator(array, setter, iteratee, accumulator) {
for (var index = -1, length = array == null ? 0 : array.length; ++index < length; ) {
var value = array[index];
setter(accumulator, value, iteratee(value), array);
}
return accumulator;
}
function createBaseFor(fromRight) {
return function(object, iteratee, keysFunc) {
for (var index = -1, iterable = Object(object), props = keysFunc(object), length = props.length; length--; ) {
var key = props[++index];
if (iteratee(iterable[key], key, iterable) === false)
break;
}
return object;
};
}
var baseFor = createBaseFor();
function baseForOwn(object, iteratee) {
return object && baseFor(object, iteratee, keys);
}
function createBaseEach(eachFunc, fromRight) {
return function(collection, iteratee) {
if (collection == null)
return collection;
if (!isArrayLike(collection))
return eachFunc(collection, iteratee);
for (var length = collection.length, index = -1, iterable = Object(collection); ++index < length && iteratee(iterable[index], index, iterable) !== false; )
;
return collection;
};
}
var baseEach = createBaseEach(baseForOwn);
function baseAggregator(collection, setter, iteratee, accumulator) {
return baseEach(collection, function(value, key, collection2) {
setter(accumulator, value, iteratee(value), collection2);
}), accumulator;
}
function createAggregator(setter, initializer) {
return function(collection, iteratee) {
var func = isArray$1(collection) ? arrayAggregator : baseAggregator, accumulator = {};
return func(collection, setter, baseIteratee(iteratee), accumulator);
};
}
function isArrayLikeObject(value) {
return isObjectLike(value) && isArrayLike(value);
}
var LARGE_ARRAY_SIZE = 200;
function baseDifference(array, values2, iteratee, comparator) {
var index = -1, includes = arrayIncludes, isCommon = true, length = array.length, result = [], valuesLength = values2.length;
if (!length)
return result;
values2.length >= LARGE_ARRAY_SIZE && (includes = cacheHas, isCommon = false, values2 = new SetCache(values2));
outer:
for (; ++index < length; ) {
var value = array[index], computed2 = value;
if (value = value !== 0 ? value : 0, isCommon && computed2 === computed2) {
for (var valuesIndex = valuesLength; valuesIndex--; )
if (values2[valuesIndex] === computed2)
continue outer;
result.push(value);
} else includes(values2, computed2, comparator) || result.push(value);
}
return result;
}
function last(array) {
var length = array == null ? 0 : array.length;
return length ? array[length - 1] : void 0;
}
function castFunction(value) {
return typeof value == "function" ? value : identity;
}
function forEach(collection, iteratee) {
var func = isArray$1(collection) ? arrayEach : baseEach;
return func(collection, castFunction(iteratee));
}
var htmlEscapes = {
"&": "&",
"<": "<",
">": ">",
'"': """,
"'": "'"
}, escapeHtmlChar = basePropertyOf(htmlEscapes), reUnescapedHtml = /[&<>"']/g, reHasUnescapedHtml = RegExp(reUnescapedHtml.source);
function escape$1(string) {
return string = toString$1(string), string && reHasUnescapedHtml.test(string) ? string.replace(reUnescapedHtml, escapeHtmlChar) : string;
}
function baseFilter(collection, predicate) {
var result = [];
return baseEach(collection, function(value, index, collection2) {
predicate(value, index, collection2) && result.push(value);
}), result;
}
function filter(collection, predicate) {
var func = isArray$1(collection) ? arrayFilter : baseFilter;
return func(collection, baseIteratee(predicate));
}
function baseMap(collection, iteratee) {
var index = -1, result = isArrayLike(collection) ? Array(collection.length) : [];
return baseEach(collection, function(value, key, collection2) {
result[++index] = iteratee(value, key, collection2);
}), result;
}
function map(collection, iteratee) {
var func = isArray$1(collection) ? arrayMap : baseMap;
return func(collection, baseIteratee(iteratee));
}
var objectProto$3 = Object.prototype, hasOwnProperty$3 = objectProto$3.hasOwnProperty, groupBy = createAggregator(function(result, value, key) {
hasOwnProperty$3.call(result, key) ? result[key].push(value) : baseAssignValue(result, key, [value]);
});
function baseValues(object, props) {
return arrayMap(props, function(key) {
return object[key];
});
}
function values(object) {
return object == null ? [] : baseValues(object, keys(object));
}
var nativeMin = Math.min;
function baseIntersection(arrays, iteratee, comparator) {
for (var includes = arrayIncludes, length = arrays[0].length, othLength = arrays.length, othIndex = othLength, caches = Array(othLength), maxLength = 1 / 0, result = []; othIndex--; ) {
var array = arrays[othIndex];
maxLength = nativeMin(array.length, maxLength), caches[othIndex] = length >= 120 && array.length >= 120 ? new SetCache(othIndex && array) : void 0;
}
array = arrays[0];
var index = -1, seen = caches[0];
outer:
for (; ++index < length && result.length < maxLength; ) {
var value = array[index], computed2 = value;
if (value = value !== 0 ? value : 0, !(seen ? cacheHas(seen, computed2) : includes(result, computed2))) {
for (othIndex = othLength; --othIndex; ) {
var cache2 = caches[othIndex];
if (!(cache2 ? cacheHas(cache2, computed2) : includes(arrays[othIndex], computed2)))
continue outer;
}
seen && seen.push(computed2), result.push(value);
}
}
return result;
}
function castArrayLikeObject(value) {
return isArrayLikeObject(value) ? value : [];
}
var intersection = baseRest(function(arrays) {
var mapped = arrayMap(arrays, castArrayLikeObject);
return mapped.length && mapped[0] === arrays[0] ? baseIntersection(mapped) : [];
});
function baseInverter(object, setter, iteratee, accumulator) {
return baseForOwn(object, function(value, key, object2) {
setter(accumulator, iteratee(value), key, object2);
}), accumulator;
}
function createInverter(setter, toIteratee) {
return function(object, iteratee) {
return baseInverter(object, setter, toIteratee(iteratee), {});
};
}
var objectProto$2 = Object.prototype, nativeObjectToString = objectProto$2.toString, invert = createInverter(function(result, value, key) {
value != null && typeof value.toString != "function" && (value = nativeObjectToString.call(value)), result[value] = key;
}, constant(identity));
function isEqual(value, other) {
return baseIsEqual(value, other);
}
function isNil(value) {
return value == null;
}
function baseLt(value, other) {
return value < other;
}
function mapValues(object, iteratee) {
var result = {};
return iteratee = baseIteratee(iteratee), baseForOwn(object, function(value, key, object2) {
baseAssignValue(result, key, iteratee(value, key, object2));
}), result;
}
function baseExtremum(array, iteratee, comparator) {
for (var index = -1, length = array.length; ++index < length; ) {
var value = array[index], current = iteratee(value);
if (current != null && (computed2 === void 0 ? current === current && !isSymbol(current) : comparator(current, computed2)))
var computed2 = current, result = value;
}
return result;
}
function minBy(array, iteratee) {
return array && array.length ? baseExtremum(array, baseIteratee(iteratee), baseLt) : void 0;
}
function once(func) {
return before(2, func);
}
var nativeFloor = Math.floor, nativeRandom = Math.random;
function baseRandom(lower, upper) {
return lower + nativeFloor(nativeRandom() * (upper - lower + 1));
}
function arraySample(array) {
var length = array.length;
return length ? array[baseRandom(0, length - 1)] : void 0;
}
function baseSample(collection) {
return arraySample(values(collection));
}
function sample(collection) {
var func = isArray$1(collection) ? arraySample : baseSample;
return func(collection);
}
var objectProto$1 = Object.prototype, hasOwnProperty$2 = objectProto$1.hasOwnProperty;
function customDefaultsAssignIn(objValue, srcValue, key, object) {
return objValue === void 0 || eq(objValue, objectProto$1[key]) && !hasOwnProperty$2.call(object, key) ? srcValue : objValue;
}
var stringEscapes = {
"\\": "\\",
"'": "'",
"\n": "n",
"\r": "r",
"\u2028": "u2028",
"\u2029": "u2029"
};
function escapeStringChar(chr) {
return "\\" + stringEscapes[chr];
}
var reInterpolate = /<%=([\s\S]+?)%>/g, reEscape = /<%-([\s\S]+?)%>/g, reEvaluate = /<%([\s\S]+?)%>/g, templateSettings = {
/**
* Used to detect `data` property values to be HTML-escaped.
*
* @memberOf _.templateSettings
* @type {RegExp}
*/
escape: reEscape,
/**
* Used to detect code to be evaluated.
*
* @memberOf _.templateSettings
* @type {RegExp}
*/
evaluate: reEvaluate,
/**
* Used to detect `data` property values to inject.
*
* @memberOf _.templateSettings
* @type {RegExp}
*/
interpolate: reInterpolate,
/**
* Used to reference the data object in the template text.
*
* @memberOf _.templateSettings
* @type {string}
*/
variable: "",
/**
* Used to import variables into the compiled template.
*
* @memberOf _.templateSettings
* @type {Object}
*/
imports: {
/**
* A reference to the `lodash` function.
*
* @memberOf _.templateSettings.imports
* @type {Function}
*/
_: { escape: escape$1 }
}
}, INVALID_TEMPL_VAR_ERROR_TEXT = "Invalid `variable` option passed into `_.template`", reEmptyStringLeading = /\b__p \+= '';/g, reEmptyStringMiddle = /\b(__p \+=) '' \+/g, reEmptyStringTrailing = /(__e\(.*?\)|\b__t\)) \+\n'';/g, reForbiddenIdentifierChars = /[()=,{}\[\]\/\s]/, reEsTemplate = /\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g, reNoMatch = /($^)/, reUnescapedString = /['\n\r\u2028\u2029\\]/g, objectProto = Object.prototype, hasOwnProperty$1 = objectProto.hasOwnProperty;
function template(string, options, guard) {
var settings2 = templateSettings.imports._.templateSettings || templateSettings;
string = toString$1(string), options = assignInWith({}, options, settings2, customDefaultsAssignIn);
var imports = assignInWith({}, options.imports, settings2.imports, customDefaultsAssignIn), importsKeys = keys(imports), importsValues = baseValues(imports, importsKeys), isEscaping, isEvaluating, index = 0, interpolate = options.interpolate || reNoMatch, source = "__p += '", reDelimiters = RegExp(
(options.escape || reNoMatch).source + "|" + interpolate.source + "|" + (interpolate === reInterpolate ? reEsTemplate : reNoMatch).source + "|" + (options.evaluate || reNoMatch).source + "|$",
"g"
), sourceURL = hasOwnProperty$1.call(options, "sourceURL") ? "//# sourceURL=" + (options.sourceURL + "").replace(/\s/g, " ") + `
` : "";
string.replace(reDelimiters, function(match2, escapeValue, interpolateValue, esTemplateValue, evaluateValue, offset) {
return interpolateValue || (interpolateValue = esTemplateValue), source += string.slice(index, offset).replace(reUnescapedString, escapeStringChar), escapeValue && (isEscaping = true, source += `' +
__e(` + escapeValue + `) +
'`), evaluateValue && (isEvaluating = true, source += `';
` + evaluateValue + `;
__p += '`), interpolateValue && (source += `' +
((__t = (` + interpolateValue + `)) == null ? '' : __t) +
'`), index = offset + match2.length, match2;
}), source += `';
`;
var variable = hasOwnProperty$1.call(options, "variable") && options.variable;
if (!variable)
source = `with (obj) {
` + source + `
}
`;
else if (reForbiddenIdentifierChars.test(variable))
throw new Error(INVALID_TEMPL_VAR_ERROR_TEXT);
source = (isEvaluating ? source.replace(reEmptyStringLeading, "") : source).replace(reEmptyStringMiddle, "$1").replace(reEmptyStringTrailing, "$1;"), source = "function(" + (variable || "obj") + `) {
` + (variable ? "" : `obj || (obj = {});
`) + "var __t, __p = ''" + (isEscaping ? ", __e = _.escape" : "") + (isEvaluating ? `, __j = Array.prototype.join;
function print() { __p += __j.call(arguments, '') }
` : `;
`) + source + `return __p
}`;
var result = attempt(function() {
return Function(importsKeys, sourceURL + "return " + source).apply(void 0, importsValues);
});
if (result.source = source, isError(result))
throw result;
return result;
}
var without = baseRest(function(array, values2) {
return isArrayLikeObject(array) ? baseDifference(array, values2) : [];
}), commonjsGlobal = typeof globalThis < "u" ? globalThis : typeof window < "u" ? window : typeof global < "u" ? global : typeof self < "u" ? self : {};
function getDefaultExportFromCjs(x) {
return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, "default") ? x.default : x;
}
var eventemitter3 = { exports: {} }, hasRequiredEventemitter3;
function requireEventemitter3() {
return hasRequiredEventemitter3 || (hasRequiredEventemitter3 = 1, function(module2) {
var has = Object.prototype.hasOwnProperty, prefix = "~";
function Events() {
}
Object.create && (Events.prototype = /* @__PURE__ */ Object.create(null), new Events().__proto__ || (prefix = false));
function EE(fn, context, once2) {
this.fn = fn, this.context = context, this.once = once2 || false;
}
function addListener(emitter, event, fn, context, once2) {
if (typeof fn != "function")
throw new TypeError("The listener must be a function");
var listener = new EE(fn, context || emitter, once2), evt = prefix ? prefix + event : event;
return emitter._events[evt] ? emitter._events[evt].fn ? emitter._events[evt] = [emitter._events[evt], listener] : emitter._events[evt].push(listener) : (emitter._events[evt] = listener, emitter._eventsCount++), emitter;
}
function clearEvent(emitter, evt) {
--emitter._eventsCount === 0 ? emitter._events = new Events() : delete emitter._events[evt];
}
function EventEmitter2() {
this._events = new Events(), this._eventsCount = 0;
}
EventEmitter2.prototype.eventNames = function() {
var names = [], events, name;
if (this._eventsCount === 0) return names;
for (name in events = this._events)
has.call(events, name) && names.push(prefix ? name.slice(1) : name);
return Object.getOwnPropertySymbols ? names.concat(Object.getOwnPropertySymbols(events)) : names;
}, EventEmitter2.prototype.listeners = function(event) {
var evt = prefix ? prefix + event : event, handlers2 = this._events[evt];
if (!handlers2) return [];
if (handlers2.fn) return [handlers2.fn];
for (var i = 0, l = handlers2.length, ee = new Array(l); i < l; i++)
ee[i] = handlers2[i].fn;
return ee;
}, EventEmitter2.prototype.listenerCount = function(event) {
var evt = prefix ? prefix + event : event, listeners = this._events[evt];
return listeners ? listeners.fn ? 1 : listeners.length : 0;
}, EventEmitter2.prototype.emit = function(event, a1, a2, a3, a4, a5) {
var evt = prefix ? prefix + event : event;
if (!this._events[evt]) return false;
var listeners = this._events[evt], len = arguments.length, args, i;
if (listeners.fn) {
switch (listeners.once && this.removeListener(event, listeners.fn, void 0, true), len) {
case 1:
return listeners.fn.call(listeners.context), true;
case 2:
return listeners.fn.call(listeners.context, a1), true;
case 3:
return listeners.fn.call(listeners.context, a1, a2), true;
case 4:
return listeners.fn.call(listeners.context, a1, a2, a3), true;
case 5:
return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;
case 6:
return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;
}
for (i = 1, args = new Array(len - 1); i < len; i++)
args[i - 1] = arguments[i];
listeners.fn.apply(listeners.context, args);
} else {
var length = listeners.length, j;
for (i = 0; i < length; i++)
switch (listeners[i].once && this.removeListener(event, listeners[i].fn, void 0, true), len) {
case 1:
listeners[i].fn.call(listeners[i].context);
break;
case 2:
listeners[i].fn.call(listeners[i].context, a1);
break;
case 3:
listeners[i].fn.call(listeners[i].context, a1, a2);
break;
case 4:
listeners[i].fn.call(listeners[i].context, a1, a2, a3);
break;
default:
if (!args) for (j = 1, args = new Array(len - 1); j < len; j++)
args[j - 1] = arguments[j];
listeners[i].fn.apply(listeners[i].context, args);
}
}
return true;
}, EventEmitter2.prototype.on = function(event, fn, context) {
return addListener(this, event, fn, context, false);
}, EventEmitter2.prototype.once = function(event, fn, context) {
return addListener(this, event, fn, context, true);
}, EventEmitter2.prototype.removeListener = function(event, fn, context, once2) {
var evt = prefix ? prefix + event : event;
if (!this._events[evt]) return this;
if (!fn)
return clearEvent(this, evt), this;
var listeners = this._events[evt];
if (listeners.fn)
listeners.fn === fn && (!once2 || listeners.once) && (!context || listeners.context === context) && clearEvent(this, evt);
else {
for (var i = 0, events = [], length = listeners.length; i < length; i++)
(listeners[i].fn !== fn || once2 && !listeners[i].once || context && listeners[i].context !== context) && events.push(listeners[i]);
events.length ? this._events[evt] = events.length === 1 ? events[0] : events : clearEvent(this, evt);
}
return this;
}, EventEmitter2.prototype.removeAllListeners = function(event) {
var evt;
return event ? (evt = prefix ? prefix + event : event, this._events[evt] && clearEvent(this, evt)) : (this._events = new Events(), this._eventsCount = 0), this;
}, EventEmitter2.prototype.off = EventEmitter2.prototype.removeListener, EventEmitter2.prototype.addListener = EventEmitter2.prototype.on, EventEmitter2.prefixed = prefix, EventEmitter2.EventEmitter = EventEmitter2, module2.exports = EventEmitter2;
}(eventemitter3)), eventemitter3.exports;
}
var eventemitter3Exports = requireEventemitter3();
const EventEmitter = /* @__PURE__ */ getDefaultExportFromCjs(eventemitter3Exports), removeAt = (array, index) => array.splice(index, 1)[0];
class AsyncQueue {
constructor(thread = 1) {
__publicField(this, "queue", vue.reactive([]));
__publicField(this, "emitter", new EventEmitter());
__publicField(this, "canSingleStart", () => true);
__publicField(this, "singleRunning", false);
this.thread = thread;
}
get runningThreadNum() {
return this.queue.filter(({ running }) => running).length;
}
get length() {
return this.queue.length;
}
push(fn, info) {
this.queue.push({
id: crypto.randomUUID(),
running: false,
fn,
info
});
}
async start() {
if (this.thread <= 1) {
if (this.singleRunning || this.queue.length === 0) return;
this.singleRunning = true;
do {
if (!this.canSingleStart()) {
this.singleRunning = false;
return;
}
await this.queue[0].fn(), this.queue.shift();
} while (this.queue.length > 0);
this.singleRunning = false, this.emitter.emit("finish");
} else {
const running = this.runningThreadNum;
if (running >= this.thread || this.queue.length === running) return;
const idleItems = this.queue.filter(({ running: running2 }) => !running2);
for (let i = 0; i < Math.min(idleItems.length, this.thread - running); i++) {
const item = idleItems[i];
item.running = true, item.fn().then(async () => {
removeAt(
this.queue,
this.queue.findIndex(({ id }) => id === item.id)
), this.queue.length ? await this.start() : this.emitter.emit("finish");
}).catch(logger.error);
}
}
}
async skipFromError() {
this.queue.shift(), await this.restartFromError();
}
async restartFromError() {
this.singleRunning = false, await this.start();
}
}
var __spreadArray = function(to, from, pack) {
for (var i = 0, l = from.length, ar; i < l; i++)
(ar || !(i in from)) && (ar || (ar = Array.prototype.slice.call(from, 0, i)), ar[i] = from[i]);
return to.concat(ar || Array.prototype.slice.call(from));
}, BrowserInfo = (
/** @class */
/* @__PURE__ */ function() {
function BrowserInfo2(name, version, os) {
this.name = name, this.version = version, this.os = os, this.type = "browser";
}
return BrowserInfo2;
}()
), NodeInfo = (
/** @class */
/* @__PURE__ */ function() {
function NodeInfo2(version) {
this.version = version, this.type = "node", this.name = "node", this.os = process.platform;
}
return NodeInfo2;
}()
), SearchBotDeviceInfo = (
/** @class */
/* @__PURE__ */ function() {
function SearchBotDeviceInfo2(name, version, os, bot) {
this.name = name, this.version = version, this.os = os, this.bot = bot, this.type = "bot-device";
}
return SearchBotDeviceInfo2;
}()
), BotInfo = (
/** @class */
/* @__PURE__ */ function() {
function BotInfo2() {
this.type = "bot", this.bot = true, this.name = "bot", this.version = null, this.os = null;
}
return BotInfo2;
}()
), ReactNativeInfo = (
/** @class */
/* @__PURE__ */ function() {
function ReactNativeInfo2() {
this.type = "react-native", this.name = "react-native", this.version = null, this.os = null;
}
return ReactNativeInfo2;
}()
), SEARCHBOX_UA_REGEX = /alexa|bot|crawl(er|ing)|facebookexternalhit|feedburner|google web preview|nagios|postrank|pingdom|slurp|spider|yahoo!|yandex/, SEARCHBOT_OS_REGEX = /(nuhk|curl|Googlebot|Yammybot|Openbot|Slurp|MSNBot|Ask\ Jeeves\/Teoma|ia_archiver)/, REQUIRED_VERSION_PARTS = 3, userAgentRules = [
["aol", /AOLShield\/([0-9\._]+)/],
["edge", /Edge\/([0-9\._]+)/],
["edge-ios", /EdgiOS\/([0-9\._]+)/],
["yandexbrowser", /YaBrowser\/([0-9\._]+)/],
["kakaotalk", /KAKAOTALK\s([0-9\.]+)/],
["samsung", /SamsungBrowser\/([0-9\.]+)/],
["silk", /\bSilk\/([0-9._-]+)\b/],
["miui", /MiuiBrowser\/([0-9\.]+)$/],
["beaker", /BeakerBrowser\/([0-9\.]+)/],
["edge-chromium", /EdgA?\/([0-9\.]+)/],
[
"chromium-webview",
/(?!Chrom.*OPR)wv\).*Chrom(?:e|ium)\/([0-9\.]+)(:?\s|$)/
],
["chrome", /(?!Chrom.*OPR)Chrom(?:e|ium)\/([0-9\.]+)(:?\s|$)/],
["phantomjs", /PhantomJS\/([0-9\.]+)(:?\s|$)/],
["crios", /CriOS\/([0-9\.]+)(:?\s|$)/],
["firefox", /Firefox\/([0-9\.]+)(?:\s|$)/],
["fxios", /FxiOS\/([0-9\.]+)/],
["opera-mini", /Opera Mini.*Version\/([0-9\.]+)/],
["opera", /Opera\/([0-9\.]+)(?:\s|$)/],
["opera", /OPR\/([0-9\.]+)(:?\s|$)/],
["pie", /^Microsoft Pocket Internet Explorer\/(\d+\.\d+)$/],
["pie", /^Mozilla\/\d\.\d+\s\(compatible;\s(?:MSP?IE|MSInternet Explorer) (\d+\.\d+);.*Windows CE.*\)$/],
["netfront", /^Mozilla\/\d\.\d+.*NetFront\/(\d.\d)/],
["ie", /Trident\/7\.0.*rv\:([0-9\.]+).*\).*Gecko$/],
["ie", /MSIE\s([0-9\.]+);.*Trident\/[4-7].0/],
["ie", /MSIE\s(7\.0)/],
["bb10", /BB10;\sTouch.*Version\/([0-9\.]+)/],
["android", /Android\s([0-9\.]+)/],
["ios", /Version\/([0-9\._]+).*Mobile.*Safari.*/],
["safari", /Version\/([0-9\._]+).*Safari/],
["facebook", /FB[AS]V\/([0-9\.]+)/],
["instagram", /Instagram\s([0-9\.]+)/],
["ios-webview", /AppleWebKit\/([0-9\.]+).*Mobile/],
["ios-webview", /AppleWebKit\/([0-9\.]+).*Gecko\)$/],
["curl", /^curl\/([0-9\.]+)$/],
["searchbot", SEARCHBOX_UA_REGEX]
], operatingSystemRules = [
["iOS", /iP(hone|od|ad)/],
["Android OS", /Android/],
["BlackBerry OS", /BlackBerry|BB10/],
["Windows Mobile", /IEMobile/],
["Amazon OS", /Kindle/],
["Windows 3.11", /Win16/],
["Windows 95", /(Windows 95)|(Win95)|(Windows_95)/],
["Windows 98", /(Windows 98)|(Win98)/],
["Windows 2000", /(Windows NT 5.0)|(Windows 2000)/],
["Windows XP", /(Windows NT 5.1)|(Windows XP)/],
["Windows Server 2003", /(Windows NT 5.2)/],
["Windows Vista", /(Windows NT 6.0)/],
["Windows 7", /(Windows NT 6.1)/],
["Windows 8", /(Windows NT 6.2)/],
["Windows 8.1", /(Windows NT 6.3)/],
["Windows 10", /(Windows NT 10.0)/],
["Windows ME", /Windows ME/],
["Windows CE", /Windows CE|WinCE|Microsoft Pocket Internet Explorer/],
["Open BSD", /OpenBSD/],
["Sun OS", /SunOS/],
["Chrome OS", /CrOS/],
["Linux", /(Linux)|(X11)/],
["Mac OS", /(Mac_PowerPC)|(Macintosh)/],
["QNX", /QNX/],
["BeOS", /BeOS/],
["OS/2", /OS\/2/]
];
function detect(userAgent) {
return typeof document > "u" && typeof navigator < "u" && navigator.product === "ReactNative" ? new ReactNativeInfo() : typeof navigator < "u" ? parseUserAgent(navigator.userAgent) : getNodeVersion();
}
function matchUserAgent(ua) {
return ua !== "" && userAgentRules.reduce(function(matched, _a) {
var browser = _a[0], regex = _a[1];
if (matched)
return matched;
var uaMatch = regex.exec(ua);
return !!uaMatch && [browser, uaMatch];
}, false);
}
function parseUserAgent(ua) {
var matchedRule = matchUserAgent(ua);
if (!matchedRule)
return null;
var name = matchedRule[0], match2 = matchedRule[1];
if (name === "searchbot")
return new BotInfo();
var versionParts = match2[1] && match2[1].split(".").join("_").split("_").slice(0, 3);
versionParts ? versionParts.length < REQUIRED_VERSION_PARTS && (versionParts = __spreadArray(__spreadArray([], versionParts, true), createVersionParts(REQUIRED_VERSION_PARTS - versionParts.length))) : versionParts = [];
var version = versionParts.join("."), os = detectOS(ua), searchBotMatch = SEARCHBOT_OS_REGEX.exec(ua);
return searchBotMatch && searchBotMatch[1] ? new SearchBotDeviceInfo(name, version, os, searchBotMatch[1]) : new BrowserInfo(name, version, os);
}
function detectOS(ua) {
for (var ii = 0, count = operatingSystemRules.length; ii < count; ii++) {
var _a = operatingSystemRules[ii], os = _a[0], regex = _a[1], match2 = regex.exec(ua);
if (match2)
return os;
}
return null;
}
function getNodeVersion() {
var isNode = typeof process < "u" && process.version;
return isNode ? new NodeInfo(process.version.slice(1)) : null;
}
function createVersionParts(count) {
for (var output = [], ii = 0; ii < count; ii++)
output.push("0");
return output;
}
const supportLanguage = /* @__PURE__ */ new Set(["zh", "en"]), defaultLocale = (() => {
const languages = castArray(navigator.languages || navigator.language);
for (const language of languages) {
const lang = language.split("-")[0];
if (supportLanguage.has(lang)) return lang;
}
return "en";
})();
var ErrorAction = /* @__PURE__ */ ((ErrorAction2) => (ErrorAction2.GET_INFO = "getInfo", ErrorAction2.DOWNLOAD = "download", ErrorAction2))(ErrorAction || {}), MIME = /* @__PURE__ */ ((MIME2) => (MIME2.JPG = "image/jpeg", MIME2.PNG = "image/png", MIME2))(MIME || {});
const nHentaiDownloadHosts = [
"i.nhentai.net",
"i1.nhentai.net",
"i2.nhentai.net",
"i3.nhentai.net",
"i4.nhentai.net",
"i5.nhentai.net",
"i7.nhentai.net"
];
var NHentaiDownloadHostSpecial = /* @__PURE__ */ ((NHentaiDownloadHostSpecial2) => (NHentaiDownloadHostSpecial2.AUTO = "auto", NHentaiDownloadHostSpecial2.RANDOM = "random", NHentaiDownloadHostSpecial2.BALANCE = "balance", NHentaiDownloadHostSpecial2))(NHentaiDownloadHostSpecial || {});
const nHentaiDownloadHostSpecials = [
"auto",
"random",
"balance"
/* BALANCE */
], availableNHentaiDownloadHost = /* @__PURE__ */ new Set([
...nHentaiDownloadHostSpecials,
...nHentaiDownloadHosts
]), booleanValidator = (val) => typeof val == "boolean", stringValidator = (val) => typeof val == "string", createNumberValidator = (min, max) => (val) => typeof val == "number" && min <= val && val <= max, trimFormatter = (val) => val.trim(), availableMetaFiles = ["ComicInfoXml", "EzeInfoJson"], availableMetaFileTitleLanguage = /* @__PURE__ */ new Set(["english", "japanese"]), settingDefinitions = {
language: {
key: "language",
default: defaultLocale,
validator: (val) => supportLanguage.has(val)
},
threadNum: {
key: "thread_num",
default: 8,
validator: createNumberValidator(1, 32),
formatter: (val) => Math.floor(val)
},
openOnNewTab: {
key: "open_on_new_tab",
default: true,
validator: booleanValidator
},
customDownloadUrl: {
key: "custom_download_url",
default: "",
validator: stringValidator,
formatter: trimFormatter
},
compressionFilename: {
key: "cf_name",
default: "{{japanese}}.zip",
validator: stringValidator,
formatter: trimFormatter
},
filenameMaxArtistsNumber: {
key: "cf_name_max_artists_number",
default: 3,
validator: createNumberValidator(0, 1 / 0)
},
filenameArtistsSeparator: {
key: "cf_name_artists_separator",
default: ", ",
validator: stringValidator
},
compressionLevel: {
key: "c_lv",
default: 0,
validator: createNumberValidator(0, 9),
formatter: (val) => Math.floor(val)
},
compressionStreamFiles: {
key: "c_stream_files",
default: false,
validator: booleanValidator
},
streamDownload: {
key: "stream_download",
default: false,
validator: booleanValidator
},
seriesMode: {
key: "series_mode",
default: false,
validator: booleanValidator
},
filenameLength: {
key: "filename_length",
default: 0,
validator: (val) => val === "auto" || typeof val == "number" && val >= 0,
formatter: (val) => typeof val == "number" ? Math.floor(val) : val
},
autoCancelDownloadedManga: {
key: "auto_cancel_downloaded_doujin",
default: false,
validator: booleanValidator
},
autoRetryWhenErrorOccurs: {
key: "auto_retry_when_error_occurs",
default: false,
validator: booleanValidator
},
autoShowAll: {
key: "auto_show_all",
default: false,
validator: booleanValidator
},
showIgnoreButton: {
key: "show_ignore_button",
default: false,
validator: booleanValidator
},
preventConsoleClearing: {
key: "prevent_console_clear",
default: false,
validator: booleanValidator
},
judgeDownloadedByEnglish: {
key: "judge_downloaded_by_english",
default: false,
validator: booleanValidator
},
judgeDownloadedByJapanese: {
key: "judge_downloaded_by_japanese",
default: true,
validator: booleanValidator
},
judgeDownloadedByPretty: {
key: "judge_downloaded_by_pretty",
default: false,
validator: booleanValidator
},
nHentaiDownloadHost: {
key: "nHentai_media_host",
default: "auto",
validator: (val) => availableNHentaiDownloadHost.has(val)
},
addMetaFile: {
key: "add_meta_file",
default: () => [],
validator: (val) => Array.isArray(val),
formatter: (val) => intersection(val, availableMetaFiles)
},
metaFileTitleLanguage: {
key: "meta_file_title_language",
default: "english",
validator: (val) => availableMetaFileTitleLanguage.has(val)
},
titleReplacement: {
key: "title_replacement",
default: () => [],
validator: (val) => Array.isArray(val),
itemValidator: (item) => item && stringValidator(item.from) && stringValidator(item.to) && booleanValidator(item.regexp)
},
galleryContextmenuPreview: {
key: "gallery_contextmenu_preview",
default: false,
validator: booleanValidator
},
convertWebpTo: {
key: "convert_webp_to",
default: MIME.JPG,
validator: (val) => [MIME.JPG, MIME.PNG, ""].includes(val)
},
convertWebpQuality: {
key: "convert_webp_quality",
default: 85,
validator: (val) => 0 <= val && val <= 100
},
customFilenameFunction: {
key: "custom_title_function",
default: "",
validator: stringValidator
},
removeAdPage: {
key: "remove_ad_page",
default: false,
validator: booleanValidator
}
}, browserDetect = detect(), DISABLE_STREAM_DOWNLOAD = !!browserDetect && (browserDetect.name === "safari" || browserDetect.name === "firefox"), readSettings = () => mapValues(settingDefinitions, ({ key, default: defaultVal, validator, itemValidator }) => {
const realDefault = typeof defaultVal == "function" ? defaultVal() : defaultVal, val = _GM_getValue(key, realDefault);
if (!validator(val)) return realDefault;
if (Array.isArray(val) && itemValidator) {
const validItems = val.filter(itemValidator);
if (val.length !== validItems.length)
return realDefault;
}
return val;
}), initSettings = () => {
const settings2 = readSettings();
{
const key = "_flag_nHentai_media_host_reset_20241207";
if (!_GM_getValue(key, false)) {
const def = settingDefinitions.nHentaiDownloadHost;
settings2.nHentaiDownloadHost !== def.default && (settings2.nHentaiDownloadHost = def.default, _GM_setValue(def.key, def.default)), _GM_setValue(key, true);
}
}
return settings2;
}, writeableSettings = vue.reactive(initSettings()), settings = writeableSettings;
DISABLE_STREAM_DOWNLOAD && settings.streamDownload && (writeableSettings.streamDownload = false);
const startWatchSettings = once(() => {
const settingRefs = vue.toRefs(writeableSettings);
forEach(settingRefs, (ref2, key) => {
const cur = settingDefinitions[key];
let valChanged = false;
const saveValue = (val) => {
logger.log("update setting", cur.key, vue.toRaw(val)), _GM_setValue(cur.key, val);
};
vue.watch(
ref2,
(val) => {
if (valChanged) {
valChanged = false, saveValue(val);
return;
}
const applyChange = (newVal) => {
val = newVal, ref2.value = newVal, valChanged = true;
};
if (!cur.validator(val)) {
applyChange(typeof cur.default == "function" ? cur.default() : cur.default);
return;
}
if (Array.isArray(val) && cur.itemValidator) {
const validItems = val.filter(cur.itemValidator);
val.length !== validItems.length && applyChange(validItems);
}
if (cur.formatter) {
const formattedVal = cur.formatter(val);
(typeof formattedVal == "object" ? !isEqual(val, formattedVal) : val !== formattedVal) && applyChange(formattedVal);
}
valChanged || saveValue(val);
},
typeof ref2.value == "object" ? { deep: true } : void 0
);
});
}), validTitleReplacement = vue.computed(
() => settings.titleReplacement.filter((item) => item == null ? void 0 : item.from)
), customFilenameFunction = vue.computed(() => {
if (!settings.customFilenameFunction.trim()) return null;
try {
return new Function("filename", "gallery", settings.customFilenameFunction);
} catch {
return null;
}
}), dlQueue = new AsyncQueue(), zipQueue = new AsyncQueue(WORKER_THREAD_NUM);
dlQueue.canSingleStart = () => !(settings.seriesMode && zipQueue.length);
zipQueue.emitter.on("finish", () => {
settings.seriesMode && dlQueue.start().catch(logger.error);
});
const _hoisted_1$4 = ["title"], _hoisted_2$2 = { class: "download-item__title" }, _hoisted_3$2 = { class: "download-item__progress-text" }, _sfc_main$6 = /* @__PURE__ */ vue.defineComponent({
__name: "DownloadItem",
props: {
item: {},
index: {}
},
setup(__props) {
const props = __props, title = vue.computed(() => {
const { english: english2, japanese: japanese2, pretty } = props.item.gallery.title;
return japanese2 || english2 || pretty;
}), progressWidth = vue.computed(() => {
const {
gallery: { pages: pages2 },
done,
compressing,
compressingPercent
} = props.item, page = pages2.length;
return compressing ? compressingPercent : page && done ? (100 * done / page).toFixed(2) : 0;
}), canCancel = vue.computed(() => !props.item.compressing), cancel = () => {
var _a;
const { info } = props.index === 0 ? dlQueue.queue[0] : removeAt(dlQueue.queue, props.index);
(_a = info == null ? void 0 : info.cancel) == null || _a.call(info);
};
return (_ctx, _cache) => (vue.openBlock(), vue.createElementBlock("div", {
class: vue.normalizeClass(["download-item", {
"download-item--error": _ctx.item.error,
"download-item--compressing": _ctx.item.compressing && !_ctx.item.error,
"download-item--can-cancel": canCancel.value
}]),
title: title.value
}, [
canCancel.value ? (vue.openBlock(), vue.createElementBlock("div", {
key: 0,
class: "download-item__cancel",
onClick: cancel
}, _cache[0] || (_cache[0] = [
vue.createElementVNode("i", { class: "fa fa-times" }, null, -1)
]))) : vue.createCommentVNode("", true),
vue.createElementVNode("div", _hoisted_2$2, vue.toDisplayString(title.value), 1),
vue.createElementVNode("div", {
class: "download-item__progress",
style: vue.normalizeStyle({ width: `${progressWidth.value}%` })
}, [
vue.createElementVNode("div", _hoisted_3$2, vue.toDisplayString(progressWidth.value) + "%", 1)
], 4)
], 10, _hoisted_1$4));
}
}), _export_sfc = (sfc, props) => {
const target = sfc.__vccOpts || sfc;
for (const [key, val] of props)
target[key] = val;
return target;
}, DownloadItem = /* @__PURE__ */ _export_sfc(_sfc_main$6, [["__scopeId", "data-v-83b954f2"]]), _hoisted_1$3 = { id: "download-panel" }, _sfc_main$5 = /* @__PURE__ */ vue.defineComponent({
__name: "DownloadList",
props: {
zipList: {},
dlList: {}
},
setup(__props) {
return (_ctx, _cache) => (vue.openBlock(), vue.createElementBlock("div", _hoisted_1$3, [
(vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(_ctx.zipList, (item, index) => (vue.openBlock(), vue.createBlock(DownloadItem, {
key: index,
item,
index
}, null, 8, ["item", "index"]))), 128)),
(vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(_ctx.dlList, (item, index) => (vue.openBlock(), vue.createBlock(DownloadItem, {
key: index,
item,
index
}, null, 8, ["item", "index"]))), 128))
]));
}
}), DownloadList = /* @__PURE__ */ _export_sfc(_sfc_main$5, [["__scopeId", "data-v-f37e74c3"]]), _sfc_main$4 = /* @__PURE__ */ vue.defineComponent({
__name: "DownloadPanel",
setup(__props) {
const { title } = document, zipList = vue.computed(() => zipQueue.queue.map(({ info }) => info)), dlList = vue.computed(() => dlQueue.queue.map(({ info }) => info)), infoList = vue.computed(() => [...zipList.value, ...dlList.value]), error = vue.computed(() => {
var _a;
return !!((_a = dlList.value[0]) != null && _a.error);
}), titleWithStatus = vue.computed(() => error.value ? `[×] ${title}` : `[${infoList.value.length || "✓"}] ${title}`);
return vue.watch(infoList, (val) => {
sessionStorage.setItem("downloadQueue", JSON.stringify(val.map(({ gallery: gallery2 }) => gallery2)));
}), vue.watch(titleWithStatus, (val) => {
document.title = val;
}), (_ctx, _cache) => infoList.value.length ? (vue.openBlock(), vue.createBlock(DownloadList, {
key: 0,
"zip-list": zipList.value,
"dl-list": dlList.value
}, null, 8, ["zip-list", "dl-list"])) : vue.createCommentVNode("", true);
}
});
var close_bold_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ vue.defineComponent({
name: "CloseBold",
__name: "close-bold",
setup(__props) {
return (_ctx, _cache) => (vue.openBlock(), vue.createElementBlock("svg", {
xmlns: "http://www.w3.org/2000/svg",
viewBox: "0 0 1024 1024"
}, [
vue.createElementVNode("path", {
fill: "currentColor",
d: "M195.2 195.2a64 64 0 0 1 90.496 0L512 421.504 738.304 195.2a64 64 0 0 1 90.496 90.496L602.496 512 828.8 738.304a64 64 0 0 1-90.496 90.496L512 602.496 285.696 828.8a64 64 0 0 1-90.496-90.496L421.504 512 195.2 285.696a64 64 0 0 1 0-90.496z"
})
]));
}
}), close_bold_default = close_bold_vue_vue_type_script_setup_true_lang_default, delete_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ vue.defineComponent({
name: "Delete",
__name: "delete",
setup(__props) {
return (_ctx, _cache) => (vue.openBlock(), vue.createElementBlock("svg", {
xmlns: "http://www.w3.org/2000/svg",
viewBox: "0 0 1024 1024"
}, [
vue.createElementVNode("path", {
fill: "currentColor",
d: "M160 256H96a32 32 0 0 1 0-64h256V95.936a32 32 0 0 1 32-32h256a32 32 0 0 1 32 32V192h256a32 32 0 1 1 0 64h-64v672a32 32 0 0 1-32 32H192a32 32 0 0 1-32-32zm448-64v-64H416v64zM224 896h576V256H224zm192-128a32 32 0 0 1-32-32V416a32 32 0 0 1 64 0v320a32 32 0 0 1-32 32m192 0a32 32 0 0 1-32-32V416a32 32 0 0 1 64 0v320a32 32 0 0 1-32 32"
})
]));
}
}), delete_default = delete_vue_vue_type_script_setup_true_lang_default, download_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ vue.defineComponent({
name: "Download",
__name: "download",
setup(__props) {
return (_ctx, _cache) => (vue.openBlock(), vue.createElementBlock("svg", {
xmlns: "http://www.w3.org/2000/svg",
viewBox: "0 0 1024 1024"
}, [
vue.createElementVNode("path", {
fill: "currentColor",
d: "M160 832h704a32 32 0 1 1 0 64H160a32 32 0 1 1 0-64m384-253.696 236.288-236.352 45.248 45.248L508.8 704 192 387.2l45.248-45.248L480 584.704V128h64z"
})
]));
}
}), download_default = download_vue_vue_type_script_setup_true_lang_default, upload_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ vue.defineComponent({
name: "Upload",
__name: "upload",
setup(__props) {
return (_ctx, _cache) => (vue.openBlock(), vue.createElementBlock("svg", {
xmlns: "http://www.w3.org/2000/svg",
viewBox: "0 0 1024 1024"
}, [
vue.createElementVNode("path", {
fill: "currentColor",
d: "M160 832h704a32 32 0 1 1 0 64H160a32 32 0 1 1 0-64m384-578.304V704h-64V247.296L237.248 490.048 192 444.8 508.8 128l316.8 316.8-45.312 45.248z"
})
]));
}
}), upload_default = upload_vue_vue_type_script_setup_true_lang_default;
const inBrowser = typeof window < "u", makeSymbol = (name, shareable = false) => shareable ? Symbol.for(name) : Symbol(name), generateFormatCacheKey = (locale, key, source) => friendlyJSONstringify({ l: locale, k: key, s: source }), friendlyJSONstringify = (json) => JSON.stringify(json).replace(/\u2028/g, "\\u2028").replace(/\u2029/g, "\\u2029").replace(/\u0027/g, "\\u0027"), isNumber = (val) => typeof val == "number" && isFinite(val), isRegExp = (val) => toTypeString(val) === "[object RegExp]", isEmptyObject = (val) => isPlainObject(val) && Object.keys(val).length === 0, assign = Object.assign, _create$1 = Object.create, create$1 = (obj = null) => _create$1(obj);
let _globalThis$1;
const getGlobalThis$1 = () => _globalThis$1 || (_globalThis$1 = typeof globalThis < "u" ? globalThis : typeof self < "u" ? self : typeof window < "u" ? window : typeof global < "u" ? global : create$1());
function escapeHtml(rawText) {
return rawText.replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """).replace(/'/g, "'");
}
const hasOwnProperty = Object.prototype.hasOwnProperty;
function hasOwn(obj, key) {
return hasOwnProperty.call(obj, key);
}
const isArray = Array.isArray, isFunction$1 = (val) => typeof val == "function", isString = (val) => typeof val == "string", isBoolean = (val) => typeof val == "boolean", isObject$3 = (val) => val !== null && typeof val == "object", isPromise = (val) => isObject$3(val) && isFunction$1(val.then) && isFunction$1(val.catch), objectToString = Object.prototype.toString, toTypeString = (value) => objectToString.call(value), isPlainObject = (val) => toTypeString(val) === "[object Object]", toDisplayString = (val) => val == null ? "" : isArray(val) || isPlainObject(val) && val.toString === objectToString ? JSON.stringify(val, null, 2) : String(val);
function join(items, separator = "") {
return items.reduce((str, item, index) => index === 0 ? str + item : str + separator + item, "");
}
function warn(msg, err) {
typeof console < "u" && (console.warn("[intlify] " + msg), err && console.warn(err.stack));
}
const isNotObjectOrIsArray = (val) => !isObject$3(val) || isArray(val);
function deepCopy(src, des) {
if (isNotObjectOrIsArray(src) || isNotObjectOrIsArray(des))
throw new Error("Invalid value");
const stack = [{ src, des }];
for (; stack.length; ) {
const { src: src2, des: des2 } = stack.pop();
Object.keys(src2).forEach((key) => {
key !== "__proto__" && (isObject$3(src2[key]) && !isObject$3(des2[key]) && (des2[key] = Array.isArray(src2[key]) ? [] : create$1()), isNotObjectOrIsArray(des2[key]) || isNotObjectOrIsArray(src2[key]) ? des2[key] = src2[key] : stack.push({ src: src2[key], des: des2[key] }));
});
}
}
function createPosition(line, column, offset) {
return { line, column, offset };
}
function createLocation(start, end, source) {
return { start, end };
}
const CompileErrorCodes = {
// tokenizer error codes
EXPECTED_TOKEN: 1,
INVALID_TOKEN_IN_PLACEHOLDER: 2,
UNTERMINATED_SINGLE_QUOTE_IN_PLACEHOLDER: 3,
UNKNOWN_ESCAPE_SEQUENCE: 4,
INVALID_UNICODE_ESCAPE_SEQUENCE: 5,
UNBALANCED_CLOSING_BRACE: 6,
UNTERMINATED_CLOSING_BRACE: 7,
EMPTY_PLACEHOLDER: 8,
NOT_ALLOW_NEST_PLACEHOLDER: 9,
INVALID_LINKED_FORMAT: 10,
// parser error codes
MUST_HAVE_MESSAGES_IN_PLURAL: 11,
UNEXPECTED_EMPTY_LINKED_MODIFIER: 12,
UNEXPECTED_EMPTY_LINKED_KEY: 13,
UNEXPECTED_LEXICAL_ANALYSIS: 14
}, COMPILE_ERROR_CODES_EXTEND_POINT = 17;
function createCompileError(code, loc, options = {}) {
const { domain, messages, args } = options, msg = code, error = new SyntaxError(String(msg));
return error.code = code, loc && (error.location = loc), error.domain = domain, error;
}
function defaultOnError(error) {
throw error;
}
const CHAR_SP = " ", CHAR_CR = "\r", CHAR_LF = `
`, CHAR_LS = "\u2028", CHAR_PS = "\u2029";
function createScanner(str) {
const _buf = str;
let _index = 0, _line = 1, _column = 1, _peekOffset = 0;
const isCRLF = (index2) => _buf[index2] === CHAR_CR && _buf[index2 + 1] === CHAR_LF, isLF = (index2) => _buf[index2] === CHAR_LF, isPS = (index2) => _buf[index2] === CHAR_PS, isLS = (index2) => _buf[index2] === CHAR_LS, isLineEnd = (index2) => isCRLF(index2) || isLF(index2) || isPS(index2) || isLS(index2), index = () => _index, line = () => _line, column = () => _column, peekOffset = () => _peekOffset, charAt = (offset) => isCRLF(offset) || isPS(offset) || isLS(offset) ? CHAR_LF : _buf[offset], currentChar = () => charAt(_index), currentPeek = () => charAt(_index + _peekOffset);
function next() {
return _peekOffset = 0, isLineEnd(_index) && (_line++, _column = 0), isCRLF(_index) && _index++, _index++, _column++, _buf[_index];
}
function peek() {
return isCRLF(_index + _peekOffset) && _peekOffset++, _peekOffset++, _buf[_index + _peekOffset];
}
function reset() {
_index = 0, _line = 1, _column = 1, _peekOffset = 0;
}
function resetPeek(offset = 0) {
_peekOffset = offset;
}
function skipToPeek() {
const target = _index + _peekOffset;
for (; target !== _index; )
next();
_peekOffset = 0;
}
return {
index,
line,
column,
peekOffset,
charAt,
currentChar,
currentPeek,
next,
peek,
reset,
resetPeek,
skipToPeek
};
}
const EOF = void 0, LITERAL_DELIMITER = "'", ERROR_DOMAIN$3 = "tokenizer";
function createTokenizer(source, options = {}) {
const location2 = options.location !== false, _scnr = createScanner(source), currentOffset = () => _scnr.index(), currentPosition = () => createPosition(_scnr.line(), _scnr.column(), _scnr.index()), _initLoc = currentPosition(), _initOffset = currentOffset(), _context = {
currentType: 13,
offset: _initOffset,
startLoc: _initLoc,
endLoc: _initLoc,
lastType: 13,
lastOffset: _initOffset,
lastStartLoc: _initLoc,
lastEndLoc: _initLoc,
braceNest: 0,
inLinked: false,
text: ""
}, context = () => _context, { onError } = options;
function emitError(code, pos, offset, ...args) {
const ctx = context();
if (pos.column += offset, pos.offset += offset, onError) {
const loc = location2 ? createLocation(ctx.startLoc, pos) : null, err = createCompileError(code, loc, {
domain: ERROR_DOMAIN$3,
args
});
onError(err);
}
}
function getToken(context2, type, value) {
context2.endLoc = currentPosition(), context2.currentType = type;
const token = { type };
return location2 && (token.loc = createLocation(context2.startLoc, context2.endLoc)), value != null && (token.value = value), token;
}
const getEndToken = (context2) => getToken(
context2,
13
/* TokenTypes.EOF */
);
function eat(scnr, ch) {
return scnr.currentChar() === ch ? (scnr.next(), ch) : (emitError(CompileErrorCodes.EXPECTED_TOKEN, currentPosition(), 0, ch), "");
}
function peekSpaces(scnr) {
let buf = "";
for (; scnr.currentPeek() === CHAR_SP || scnr.currentPeek() === CHAR_LF; )
buf += scnr.currentPeek(), scnr.peek();
return buf;
}
function skipSpaces(scnr) {
const buf = peekSpaces(scnr);
return scnr.skipToPeek(), buf;
}
function isIdentifierStart(ch) {
if (ch === EOF)
return false;
const cc = ch.charCodeAt(0);
return cc >= 97 && cc <= 122 || // a-z
cc >= 65 && cc <= 90 || // A-Z
cc === 95;
}
function isNumberStart(ch) {
if (ch === EOF)
return false;
const cc = ch.charCodeAt(0);
return cc >= 48 && cc <= 57;
}
function isNamedIdentifierStart(scnr, context2) {
const { currentType } = context2;
if (currentType !== 2)
return false;
peekSpaces(scnr);
const ret = isIdentifierStart(scnr.currentPeek());
return scnr.resetPeek(), ret;
}
function isListIdentifierStart(scnr, context2) {
const { currentType } = context2;
if (currentType !== 2)
return false;
peekSpaces(scnr);
const ch = scnr.currentPeek() === "-" ? scnr.peek() : scnr.currentPeek(), ret = isNumberStart(ch);
return scnr.resetPeek(), ret;
}
function isLiteralStart(scnr, context2) {
const { currentType } = context2;
if (currentType !== 2)
return false;
peekSpaces(scnr);
const ret = scnr.currentPeek() === LITERAL_DELIMITER;
return scnr.resetPeek(), ret;
}
function isLinkedDotStart(scnr, context2) {
const { currentType } = context2;
if (currentType !== 7)
return false;
peekSpaces(scnr);
const ret = scnr.currentPeek() === ".";
return scnr.resetPeek(), ret;
}
function isLinkedModifierStart(scnr, context2) {
const { currentType } = context2;
if (currentType !== 8)
return false;
peekSpaces(scnr);
const ret = isIdentifierStart(scnr.currentPeek());
return scnr.resetPeek(), ret;
}
function isLinkedDelimiterStart(scnr, context2) {
const { currentType } = context2;
if (!(currentType === 7 || currentType === 11))
return false;
peekSpaces(scnr);
const ret = scnr.currentPeek() === ":";
return scnr.resetPeek(), ret;
}
function isLinkedReferStart(scnr, context2) {
const { currentType } = context2;
if (currentType !== 9)
return false;
const fn = () => {
const ch = scnr.currentPeek();
return ch === "{" ? isIdentifierStart(scnr.peek()) : ch === "@" || ch === "|" || ch === ":" || ch === "." || ch === CHAR_SP || !ch ? false : ch === CHAR_LF ? (scnr.peek(), fn()) : isTextStart(scnr, false);
}, ret = fn();
return scnr.resetPeek(), ret;
}
function isPluralStart(scnr) {
peekSpaces(scnr);
const ret = scnr.currentPeek() === "|";
return scnr.resetPeek(), ret;
}
function isTextStart(scnr, reset = true) {
const fn = (hasSpace = false, prev = "") => {
const ch = scnr.currentPeek();
return ch === "{" || ch === "@" || !ch ? hasSpace : ch === "|" ? !(prev === CHAR_SP || prev === CHAR_LF) : ch === CHAR_SP ? (scnr.peek(), fn(true, CHAR_SP)) : ch === CHAR_LF ? (scnr.peek(), fn(true, CHAR_LF)) : true;
}, ret = fn();
return reset && scnr.resetPeek(), ret;
}
function takeChar(scnr, fn) {
const ch = scnr.currentChar();
return ch === EOF ? EOF : fn(ch) ? (scnr.next(), ch) : null;
}
function isIdentifier(ch) {
const cc = ch.charCodeAt(0);
return cc >= 97 && cc <= 122 || // a-z
cc >= 65 && cc <= 90 || // A-Z
cc >= 48 && cc <= 57 || // 0-9
cc === 95 || // _
cc === 36;
}
function takeIdentifierChar(scnr) {
return takeChar(scnr, isIdentifier);
}
function isNamedIdentifier(ch) {
const cc = ch.charCodeAt(0);
return cc >= 97 && cc <= 122 || // a-z
cc >= 65 && cc <= 90 || // A-Z
cc >= 48 && cc <= 57 || // 0-9
cc === 95 || // _
cc === 36 || // $
cc === 45;
}
function takeNamedIdentifierChar(scnr) {
return takeChar(scnr, isNamedIdentifier);
}
function isDigit(ch) {
const cc = ch.charCodeAt(0);
return cc >= 48 && cc <= 57;
}
function takeDigit(scnr) {
return takeChar(scnr, isDigit);
}
function isHexDigit(ch) {
const cc = ch.charCodeAt(0);
return cc >= 48 && cc <= 57 || // 0-9
cc >= 65 && cc <= 70 || // A-F
cc >= 97 && cc <= 102;
}
function takeHexDigit(scnr) {
return takeChar(scnr, isHexDigit);
}
function getDigits(scnr) {
let ch = "", num = "";
for (; ch = takeDigit(scnr); )
num += ch;
return num;
}
function readText(scnr) {
let buf = "";
for (; ; ) {
const ch = scnr.currentChar();
if (ch === "{" || ch === "}" || ch === "@" || ch === "|" || !ch)
break;
if (ch === CHAR_SP || ch === CHAR_LF)
if (isTextStart(scnr))
buf += ch, scnr.next();
else {
if (isPluralStart(scnr))
break;
buf += ch, scnr.next();
}
else
buf += ch, scnr.next();
}
return buf;
}
function readNamedIdentifier(scnr) {
skipSpaces(scnr);
let ch = "", name = "";
for (; ch = takeNamedIdentifierChar(scnr); )
name += ch;
return scnr.currentChar() === EOF && emitError(CompileErrorCodes.UNTERMINATED_CLOSING_BRACE, currentPosition(), 0), name;
}
function readListIdentifier(scnr) {
skipSpaces(scnr);
let value = "";
return scnr.currentChar() === "-" ? (scnr.next(), value += `-${getDigits(scnr)}`) : value += getDigits(scnr), scnr.currentChar() === EOF && emitError(CompileErrorCodes.UNTERMINATED_CLOSING_BRACE, currentPosition(), 0), value;
}
function isLiteral2(ch) {
return ch !== LITERAL_DELIMITER && ch !== CHAR_LF;
}
function readLiteral(scnr) {
skipSpaces(scnr), eat(scnr, "'");
let ch = "", literal = "";
for (; ch = takeChar(scnr, isLiteral2); )
ch === "\\" ? literal += readEscapeSequence(scnr) : literal += ch;
const current = scnr.currentChar();
return current === CHAR_LF || current === EOF ? (emitError(CompileErrorCodes.UNTERMINATED_SINGLE_QUOTE_IN_PLACEHOLDER, currentPosition(), 0), current === CHAR_LF && (scnr.next(), eat(scnr, "'")), literal) : (eat(scnr, "'"), literal);
}
function readEscapeSequence(scnr) {
const ch = scnr.currentChar();
switch (ch) {
case "\\":
case "'":
return scnr.next(), `\\${ch}`;
case "u":
return readUnicodeEscapeSequence(scnr, ch, 4);
case "U":
return readUnicodeEscapeSequence(scnr, ch, 6);
default:
return emitError(CompileErrorCodes.UNKNOWN_ESCAPE_SEQUENCE, currentPosition(), 0, ch), "";
}
}
function readUnicodeEscapeSequence(scnr, unicode, digits) {
eat(scnr, unicode);
let sequence = "";
for (let i = 0; i < digits; i++) {
const ch = takeHexDigit(scnr);
if (!ch) {
emitError(CompileErrorCodes.INVALID_UNICODE_ESCAPE_SEQUENCE, currentPosition(), 0, `\\${unicode}${sequence}${scnr.currentChar()}`);
break;
}
sequence += ch;
}
return `\\${unicode}${sequence}`;
}
function isInvalidIdentifier(ch) {
return ch !== "{" && ch !== "}" && ch !== CHAR_SP && ch !== CHAR_LF;
}
function readInvalidIdentifier(scnr) {
skipSpaces(scnr);
let ch = "", identifiers = "";
for (; ch = takeChar(scnr, isInvalidIdentifier); )
identifiers += ch;
return identifiers;
}
function readLinkedModifier(scnr) {
let ch = "", name = "";
for (; ch = takeIdentifierChar(scnr); )
name += ch;
return name;
}
function readLinkedRefer(scnr) {
const fn = (buf) => {
const ch = scnr.currentChar();
return ch === "{" || ch === "@" || ch === "|" || ch === "(" || ch === ")" || !ch || ch === CHAR_SP ? buf : (buf += ch, scnr.next(), fn(buf));
};
return fn("");
}
function readPlural(scnr) {
skipSpaces(scnr);
const plural = eat(
scnr,
"|"
/* TokenChars.Pipe */
);
return skipSpaces(scnr), plural;
}
function readTokenInPlaceholder(scnr, context2) {
let token = null;
switch (scnr.currentChar()) {
case "{":
return context2.braceNest >= 1 && emitError(CompileErrorCodes.NOT_ALLOW_NEST_PLACEHOLDER, currentPosition(), 0), scnr.next(), token = getToken(
context2,
2,
"{"
/* TokenChars.BraceLeft */
), skipSpaces(scnr), context2.braceNest++, token;
case "}":
return context2.braceNest > 0 && context2.currentType === 2 && emitError(CompileErrorCodes.EMPTY_PLACEHOLDER, currentPosition(), 0), scnr.next(), token = getToken(
context2,
3,
"}"
/* TokenChars.BraceRight */
), context2.braceNest--, context2.braceNest > 0 && skipSpaces(scnr), context2.inLinked && context2.braceNest === 0 && (context2.inLinked = false), token;
case "@":
return context2.braceNest > 0 && emitError(CompileErrorCodes.UNTERMINATED_CLOSING_BRACE, currentPosition(), 0), token = readTokenInLinked(scnr, context2) || getEndToken(context2), context2.braceNest = 0, token;
default: {
let validNamedIdentifier = true, validListIdentifier = true, validLiteral = true;
if (isPluralStart(scnr))
return context2.braceNest > 0 && emitError(CompileErrorCodes.UNTERMINATED_CLOSING_BRACE, currentPosition(), 0), token = getToken(context2, 1, readPlural(scnr)), context2.braceNest = 0, context2.inLinked = false, token;
if (context2.braceNest > 0 && (context2.currentType === 4 || context2.currentType === 5 || context2.currentType === 6))
return emitError(CompileErrorCodes.UNTERMINATED_CLOSING_BRACE, currentPosition(), 0), context2.braceNest = 0, readToken(scnr, context2);
if (validNamedIdentifier = isNamedIdentifierStart(scnr, context2))
return token = getToken(context2, 4, readNamedIdentifier(scnr)), skipSpaces(scnr), token;
if (validListIdentifier = isListIdentifierStart(scnr, context2))
return token = getToken(context2, 5, readListIdentifier(scnr)), skipSpaces(scnr), token;
if (validLiteral = isLiteralStart(scnr, context2))
return token = getToken(context2, 6, readLiteral(scnr)), skipSpaces(scnr), token;
if (!validNamedIdentifier && !validListIdentifier && !validLiteral)
return token = getToken(context2, 12, readInvalidIdentifier(scnr)), emitError(CompileErrorCodes.INVALID_TOKEN_IN_PLACEHOLDER, currentPosition(), 0, token.value), skipSpaces(scnr), token;
break;
}
}
return token;
}
function readTokenInLinked(scnr, context2) {
const { currentType } = context2;
let token = null;
const ch = scnr.currentChar();
switch ((currentType === 7 || currentType === 8 || currentType === 11 || currentType === 9) && (ch === CHAR_LF || ch === CHAR_SP) && emitError(CompileErrorCodes.INVALID_LINKED_FORMAT, currentPosition(), 0), ch) {
case "@":
return scnr.next(), token = getToken(
context2,
7,
"@"
/* TokenChars.LinkedAlias */
), context2.inLinked = true, token;
case ".":
return skipSpaces(scnr), scnr.next(), getToken(
context2,
8,
"."
/* TokenChars.LinkedDot */
);
case ":":
return skipSpaces(scnr), scnr.next(), getToken(
context2,
9,
":"
/* TokenChars.LinkedDelimiter */
);
default:
return isPluralStart(scnr) ? (token = getToken(context2, 1, readPlural(scnr)), context2.braceNest = 0, context2.inLinked = false, token) : isLinkedDotStart(scnr, context2) || isLinkedDelimiterStart(scnr, context2) ? (skipSpaces(scnr), readTokenInLinked(scnr, context2)) : isLinkedModifierStart(scnr, context2) ? (skipSpaces(scnr), getToken(context2, 11, readLinkedModifier(scnr))) : isLinkedReferStart(scnr, context2) ? (skipSpaces(scnr), ch === "{" ? readTokenInPlaceholder(scnr, context2) || token : getToken(context2, 10, readLinkedRefer(scnr))) : (currentType === 7 && emitError(CompileErrorCodes.INVALID_LINKED_FORMAT, currentPosition(), 0), context2.braceNest = 0, context2.inLinked = false, readToken(scnr, context2));
}
}
function readToken(scnr, context2) {
let token = {
type: 13
/* TokenTypes.EOF */
};
if (context2.braceNest > 0)
return readTokenInPlaceholder(scnr, context2) || getEndToken(context2);
if (context2.inLinked)
return readTokenInLinked(scnr, context2) || getEndToken(context2);
switch (scnr.currentChar()) {
case "{":
return readTokenInPlaceholder(scnr, context2) || getEndToken(context2);
case "}":
return emitError(CompileErrorCodes.UNBALANCED_CLOSING_BRACE, currentPosition(), 0), scnr.next(), getToken(
context2,
3,
"}"
/* TokenChars.BraceRight */
);
case "@":
return readTokenInLinked(scnr, context2) || getEndToken(context2);
default: {
if (isPluralStart(scnr))
return token = getToken(context2, 1, readPlural(scnr)), context2.braceNest = 0, context2.inLinked = false, token;
if (isTextStart(scnr))
return getToken(context2, 0, readText(scnr));
break;
}
}
return token;
}
function nextToken() {
const { currentType, offset, startLoc, endLoc } = _context;
return _context.lastType = currentType, _context.lastOffset = offset, _context.lastStartLoc = startLoc, _context.lastEndLoc = endLoc, _context.offset = currentOffset(), _context.startLoc = currentPosition(), _scnr.currentChar() === EOF ? getToken(
_context,
13
/* TokenTypes.EOF */
) : readToken(_scnr, _context);
}
return {
nextToken,
currentOffset,
currentPosition,
context
};
}
const ERROR_DOMAIN$2 = "parser", KNOWN_ESCAPES = /(?:\\\\|\\'|\\u([0-9a-fA-F]{4})|\\U([0-9a-fA-F]{6}))/g;
function fromEscapeSequence(match2, codePoint4, codePoint6) {
switch (match2) {
case "\\\\":
return "\\";
// eslint-disable-next-line no-useless-escape
case "\\'":
return "'";
default: {
const codePoint = parseInt(codePoint4 || codePoint6, 16);
return codePoint <= 55295 || codePoint >= 57344 ? String.fromCodePoint(codePoint) : "�";
}
}
}
function createParser(options = {}) {
const location2 = options.location !== false, { onError } = options;
function emitError(tokenzer, code, start, offset, ...args) {
const end = tokenzer.currentPosition();
if (end.offset += offset, end.column += offset, onError) {
const loc = location2 ? createLocation(start, end) : null, err = createCompileError(code, loc, {
domain: ERROR_DOMAIN$2,
args
});
onError(err);
}
}
function startNode(type, offset, loc) {
const node = { type };
return location2 && (node.start = offset, node.end = offset, node.loc = { start: loc, end: loc }), node;
}
function endNode(node, offset, pos, type) {
location2 && (node.end = offset, node.loc && (node.loc.end = pos));
}
function parseText(tokenizer, value) {
const context = tokenizer.context(), node = startNode(3, context.offset, context.startLoc);
return node.value = value, endNode(node, tokenizer.currentOffset(), tokenizer.currentPosition()), node;
}
function parseList(tokenizer, index) {
const context = tokenizer.context(), { lastOffset: offset, lastStartLoc: loc } = context, node = startNode(5, offset, loc);
return node.index = parseInt(index, 10), tokenizer.nextToken(), endNode(node, tokenizer.currentOffset(), tokenizer.currentPosition()), node;
}
function parseNamed(tokenizer, key) {
const context = tokenizer.context(), { lastOffset: offset, lastStartLoc: loc } = context, node = startNode(4, offset, loc);
return node.key = key, tokenizer.nextToken(), endNode(node, tokenizer.currentOffset(), tokenizer.currentPosition()), node;
}
function parseLiteral(tokenizer, value) {
const context = tokenizer.context(), { lastOffset: offset, lastStartLoc: loc } = context, node = startNode(9, offset, loc);
return node.value = value.replace(KNOWN_ESCAPES, fromEscapeSequence), tokenizer.nextToken(), endNode(node, tokenizer.currentOffset(), tokenizer.currentPosition()), node;
}
function parseLinkedModifier(tokenizer) {
const token = tokenizer.nextToken(), context = tokenizer.context(), { lastOffset: offset, lastStartLoc: loc } = context, node = startNode(8, offset, loc);
return token.type !== 11 ? (emitError(tokenizer, CompileErrorCodes.UNEXPECTED_EMPTY_LINKED_MODIFIER, context.lastStartLoc, 0), node.value = "", endNode(node, offset, loc), {
nextConsumeToken: token,
node
}) : (token.value == null && emitError(tokenizer, CompileErrorCodes.UNEXPECTED_LEXICAL_ANALYSIS, context.lastStartLoc, 0, getTokenCaption(token)), node.value = token.value || "", endNode(node, tokenizer.currentOffset(), tokenizer.currentPosition()), {
node
});
}
function parseLinkedKey(tokenizer, value) {
const context = tokenizer.context(), node = startNode(7, context.offset, context.startLoc);
return node.value = value, endNode(node, tokenizer.currentOffset(), tokenizer.currentPosition()), node;
}
function parseLinked(tokenizer) {
const context = tokenizer.context(), linkedNode = startNode(6, context.offset, context.startLoc);
let token = tokenizer.nextToken();
if (token.type === 8) {
const parsed = parseLinkedModifier(tokenizer);
linkedNode.modifier = parsed.node, token = parsed.nextConsumeToken || tokenizer.nextToken();
}
switch (token.type !== 9 && emitError(tokenizer, CompileErrorCodes.UNEXPECTED_LEXICAL_ANALYSIS, context.lastStartLoc, 0, getTokenCaption(token)), token = tokenizer.nextToken(), token.type === 2 && (token = tokenizer.nextToken()), token.type) {
case 10:
token.value == null && emitError(tokenizer, CompileErrorCodes.UNEXPECTED_LEXICAL_ANALYSIS, context.lastStartLoc, 0, getTokenCaption(token)), linkedNode.key = parseLinkedKey(tokenizer, token.value || "");
break;
case 4:
token.value == null && emitError(tokenizer, CompileErrorCodes.UNEXPECTED_LEXICAL_ANALYSIS, context.lastStartLoc, 0, getTokenCaption(token)), linkedNode.key = parseNamed(tokenizer, token.value || "");
break;
case 5:
token.value == null && emitError(tokenizer, CompileErrorCodes.UNEXPECTED_LEXICAL_ANALYSIS, context.lastStartLoc, 0, getTokenCaption(token)), linkedNode.key = parseList(tokenizer, token.value || "");
break;
case 6:
token.value == null && emitError(tokenizer, CompileErrorCodes.UNEXPECTED_LEXICAL_ANALYSIS, context.lastStartLoc, 0, getTokenCaption(token)), linkedNode.key = parseLiteral(tokenizer, token.value || "");
break;
default: {
emitError(tokenizer, CompileErrorCodes.UNEXPECTED_EMPTY_LINKED_KEY, context.lastStartLoc, 0);
const nextContext = tokenizer.context(), emptyLinkedKeyNode = startNode(7, nextContext.offset, nextContext.startLoc);
return emptyLinkedKeyNode.value = "", endNode(emptyLinkedKeyNode, nextContext.offset, nextContext.startLoc), linkedNode.key = emptyLinkedKeyNode, endNode(linkedNode, nextContext.offset, nextContext.startLoc), {
nextConsumeToken: token,
node: linkedNode
};
}
}
return endNode(linkedNode, tokenizer.currentOffset(), tokenizer.currentPosition()), {
node: linkedNode
};
}
function parseMessage(tokenizer) {
const context = tokenizer.context(), startOffset = context.currentType === 1 ? tokenizer.currentOffset() : context.offset, startLoc = context.currentType === 1 ? context.endLoc : context.startLoc, node = startNode(2, startOffset, startLoc);
node.items = [];
let nextToken = null;
do {
const token = nextToken || tokenizer.nextToken();
switch (nextToken = null, token.type) {
case 0:
token.value == null && emitError(tokenizer, CompileErrorCodes.UNEXPECTED_LEXICAL_ANALYSIS, context.lastStartLoc, 0, getTokenCaption(token)), node.items.push(parseText(tokenizer, token.value || ""));
break;
case 5:
token.value == null && emitError(tokenizer, CompileErrorCodes.UNEXPECTED_LEXICAL_ANALYSIS, context.lastStartLoc, 0, getTokenCaption(token)), node.items.push(parseList(tokenizer, token.value || ""));
break;
case 4:
token.value == null && emitError(tokenizer, CompileErrorCodes.UNEXPECTED_LEXICAL_ANALYSIS, context.lastStartLoc, 0, getTokenCaption(token)), node.items.push(parseNamed(tokenizer, token.value || ""));
break;
case 6:
token.value == null && emitError(tokenizer, CompileErrorCodes.UNEXPECTED_LEXICAL_ANALYSIS, context.lastStartLoc, 0, getTokenCaption(token)), node.items.push(parseLiteral(tokenizer, token.value || ""));
break;
case 7: {
const parsed = parseLinked(tokenizer);
node.items.push(parsed.node), nextToken = parsed.nextConsumeToken || null;
break;
}
}
} while (context.currentType !== 13 && context.currentType !== 1);
const endOffset = context.currentType === 1 ? context.lastOffset : tokenizer.currentOffset(), endLoc = context.currentType === 1 ? context.lastEndLoc : tokenizer.currentPosition();
return endNode(node, endOffset, endLoc), node;
}
function parsePlural(tokenizer, offset, loc, msgNode) {
const context = tokenizer.context();
let hasEmptyMessage = msgNode.items.length === 0;
const node = startNode(1, offset, loc);
node.cases = [], node.cases.push(msgNode);
do {
const msg = parseMessage(tokenizer);
hasEmptyMessage || (hasEmptyMessage = msg.items.length === 0), node.cases.push(msg);
} while (context.currentType !== 13);
return hasEmptyMessage && emitError(tokenizer, CompileErrorCodes.MUST_HAVE_MESSAGES_IN_PLURAL, loc, 0), endNode(node, tokenizer.currentOffset(), tokenizer.currentPosition()), node;
}
function parseResource(tokenizer) {
const context = tokenizer.context(), { offset, startLoc } = context, msgNode = parseMessage(tokenizer);
return context.currentType === 13 ? msgNode : parsePlural(tokenizer, offset, startLoc, msgNode);
}
function parse2(source) {
const tokenizer = createTokenizer(source, assign({}, options)), context = tokenizer.context(), node = startNode(0, context.offset, context.startLoc);
return location2 && node.loc && (node.loc.source = source), node.body = parseResource(tokenizer), options.onCacheKey && (node.cacheKey = options.onCacheKey(source)), context.currentType !== 13 && emitError(tokenizer, CompileErrorCodes.UNEXPECTED_LEXICAL_ANALYSIS, context.lastStartLoc, 0, source[context.offset] || ""), endNode(node, tokenizer.currentOffset(), tokenizer.currentPosition()), node;
}
return { parse: parse2 };
}
function getTokenCaption(token) {
if (token.type === 13)
return "EOF";
const name = (token.value || "").replace(/\r?\n/gu, "\\n");
return name.length > 10 ? name.slice(0, 9) + "…" : name;
}
function createTransformer(ast, options = {}) {
const _context = {
ast,
helpers: /* @__PURE__ */ new Set()
};
return { context: () => _context, helper: (name) => (_context.helpers.add(name), name) };
}
function traverseNodes(nodes, transformer) {
for (let i = 0; i < nodes.length; i++)
traverseNode(nodes[i], transformer);
}
function traverseNode(node, transformer) {
switch (node.type) {
case 1:
traverseNodes(node.cases, transformer), transformer.helper(
"plural"
/* HelperNameMap.PLURAL */
);
break;
case 2:
traverseNodes(node.items, transformer);
break;
case 6: {
traverseNode(node.key, transformer), transformer.helper(
"linked"
/* HelperNameMap.LINKED */
), transformer.helper(
"type"
/* HelperNameMap.TYPE */
);
break;
}
case 5:
transformer.helper(
"interpolate"
/* HelperNameMap.INTERPOLATE */
), transformer.helper(
"list"
/* HelperNameMap.LIST */
);
break;
case 4:
transformer.helper(
"interpolate"
/* HelperNameMap.INTERPOLATE */
), transformer.helper(
"named"
/* HelperNameMap.NAMED */
);
break;
}
}
function transform(ast, options = {}) {
const transformer = createTransformer(ast);
transformer.helper(
"normalize"
/* HelperNameMap.NORMALIZE */
), ast.body && traverseNode(ast.body, transformer);
const context = transformer.context();
ast.helpers = Array.from(context.helpers);
}
function optimize(ast) {
const body = ast.body;
return body.type === 2 ? optimizeMessageNode(body) : body.cases.forEach((c) => optimizeMessageNode(c)), ast;
}
function optimizeMessageNode(message) {
if (message.items.length === 1) {
const item = message.items[0];
(item.type === 3 || item.type === 9) && (message.static = item.value, delete item.value);
} else {
const values2 = [];
for (let i = 0; i < message.items.length; i++) {
const item = message.items[i];
if (!(item.type === 3 || item.type === 9) || item.value == null)
break;
values2.push(item.value);
}
if (values2.length === message.items.length) {
message.static = join(values2);
for (let i = 0; i < message.items.length; i++) {
const item = message.items[i];
(item.type === 3 || item.type === 9) && delete item.value;
}
}
}
}
function minify(node) {
switch (node.t = node.type, node.type) {
case 0: {
const resource2 = node;
minify(resource2.body), resource2.b = resource2.body, delete resource2.body;
break;
}
case 1: {
const plural = node, cases = plural.cases;
for (let i = 0; i < cases.length; i++)
minify(cases[i]);
plural.c = cases, delete plural.cases;
break;
}
case 2: {
const message = node, items = message.items;
for (let i = 0; i < items.length; i++)
minify(items[i]);
message.i = items, delete message.items, message.static && (message.s = message.static, delete message.static);
break;
}
case 3:
case 9:
case 8:
case 7: {
const valueNode = node;
valueNode.value && (valueNode.v = valueNode.value, delete valueNode.value);
break;
}
case 6: {
const linked = node;
minify(linked.key), linked.k = linked.key, delete linked.key, linked.modifier && (minify(linked.modifier), linked.m = linked.modifier, delete linked.modifier);
break;
}
case 5: {
const list = node;
list.i = list.index, delete list.index;
break;
}
case 4: {
const named = node;
named.k = named.key, delete named.key;
break;
}
}
delete node.type;
}
function createCodeGenerator(ast, options) {
const { filename, breakLineCode, needIndent: _needIndent } = options, location2 = options.location !== false, _context = {
filename,
code: "",
column: 1,
line: 1,
offset: 0,
map: void 0,
breakLineCode,
needIndent: _needIndent,
indentLevel: 0
};
location2 && ast.loc && (_context.source = ast.loc.source);
const context = () => _context;
function push(code, node) {
_context.code += code;
}
function _newline(n, withBreakLine = true) {
const _breakLineCode = withBreakLine ? breakLineCode : "";
push(_needIndent ? _breakLineCode + " ".repeat(n) : _breakLineCode);
}
function indent(withNewLine = true) {
const level = ++_context.indentLevel;
withNewLine && _newline(level);
}
function deindent(withNewLine = true) {
const level = --_context.indentLevel;
withNewLine && _newline(level);
}
function newline() {
_newline(_context.indentLevel);
}
return {
context,
push,
indent,
deindent,
newline,
helper: (key) => `_${key}`,
needIndent: () => _context.needIndent
};
}
function generateLinkedNode(generator, node) {
const { helper } = generator;
generator.push(`${helper(
"linked"
/* HelperNameMap.LINKED */
)}(`), generateNode(generator, node.key), node.modifier ? (generator.push(", "), generateNode(generator, node.modifier), generator.push(", _type")) : generator.push(", undefined, _type"), generator.push(")");
}
function generateMessageNode(generator, node) {
const { helper, needIndent } = generator;
generator.push(`${helper(
"normalize"
/* HelperNameMap.NORMALIZE */
)}([`), generator.indent(needIndent());
const length = node.items.length;
for (let i = 0; i < length && (generateNode(generator, node.items[i]), i !== length - 1); i++)
generator.push(", ");
generator.deindent(needIndent()), generator.push("])");
}
function generatePluralNode(generator, node) {
const { helper, needIndent } = generator;
if (node.cases.length > 1) {
generator.push(`${helper(
"plural"
/* HelperNameMap.PLURAL */
)}([`), generator.indent(needIndent());
const length = node.cases.length;
for (let i = 0; i < length && (generateNode(generator, node.cases[i]), i !== length - 1); i++)
generator.push(", ");
generator.deindent(needIndent()), generator.push("])");
}
}
function generateResource(generator, node) {
node.body ? generateNode(generator, node.body) : generator.push("null");
}
function generateNode(generator, node) {
const { helper } = generator;
switch (node.type) {
case 0:
generateResource(generator, node);
break;
case 1:
generatePluralNode(generator, node);
break;
case 2:
generateMessageNode(generator, node);
break;
case 6:
generateLinkedNode(generator, node);
break;
case 8:
generator.push(JSON.stringify(node.value), node);
break;
case 7:
generator.push(JSON.stringify(node.value), node);
break;
case 5:
generator.push(`${helper(
"interpolate"
/* HelperNameMap.INTERPOLATE */
)}(${helper(
"list"
/* HelperNameMap.LIST */
)}(${node.index}))`, node);
break;
case 4:
generator.push(`${helper(
"interpolate"
/* HelperNameMap.INTERPOLATE */
)}(${helper(
"named"
/* HelperNameMap.NAMED */
)}(${JSON.stringify(node.key)}))`, node);
break;
case 9:
generator.push(JSON.stringify(node.value), node);
break;
case 3:
generator.push(JSON.stringify(node.value), node);
break;
}
}
const generate = (ast, options = {}) => {
const mode = isString(options.mode) ? options.mode : "normal", filename = isString(options.filename) ? options.filename : "message.intl";
options.sourceMap;
const breakLineCode = options.breakLineCode != null ? options.breakLineCode : mode === "arrow" ? ";" : `
`, needIndent = options.needIndent ? options.needIndent : mode !== "arrow", helpers = ast.helpers || [], generator = createCodeGenerator(ast, {
filename,
breakLineCode,
needIndent
});
generator.push(mode === "normal" ? "function __msg__ (ctx) {" : "(ctx) => {"), generator.indent(needIndent), helpers.length > 0 && (generator.push(`const { ${join(helpers.map((s) => `${s}: _${s}`), ", ")} } = ctx`), generator.newline()), generator.push("return "), generateNode(generator, ast), generator.deindent(needIndent), generator.push("}"), delete ast.helpers;
const { code, map: map2 } = generator.context();
return {
ast,
code,
map: map2 ? map2.toJSON() : void 0
// eslint-disable-line @typescript-eslint/no-explicit-any
};
};
function baseCompile$1(source, options = {}) {
const assignedOptions = assign({}, options), jit = !!assignedOptions.jit, enalbeMinify = !!assignedOptions.minify, enambeOptimize = assignedOptions.optimize == null ? true : assignedOptions.optimize, ast = createParser(assignedOptions).parse(source);
return jit ? (enambeOptimize && optimize(ast), enalbeMinify && minify(ast), { ast, code: "" }) : (transform(ast, assignedOptions), generate(ast, assignedOptions));
}
function initFeatureFlags$2() {
typeof __INTLIFY_PROD_DEVTOOLS__ != "boolean" && (getGlobalThis$1().__INTLIFY_PROD_DEVTOOLS__ = false);
}
function format(ast) {
return (ctx) => formatParts(ctx, ast);
}
function formatParts(ctx, ast) {
const body = resolveBody(ast);
if (body == null)
throw createUnhandleNodeError(
0
/* NodeTypes.Resource */
);
if (resolveType(body) === 1) {
const cases = resolveCases(body);
return ctx.plural(cases.reduce((messages, c) => [
...messages,
formatMessageParts(ctx, c)
], []));
} else
return formatMessageParts(ctx, body);
}
const PROPS_BODY = ["b", "body"];
function resolveBody(node) {
return resolveProps(node, PROPS_BODY);
}
const PROPS_CASES = ["c", "cases"];
function resolveCases(node) {
return resolveProps(node, PROPS_CASES, []);
}
function formatMessageParts(ctx, node) {
const static_ = resolveStatic(node);
if (static_ != null)
return ctx.type === "text" ? static_ : ctx.normalize([static_]);
{
const messages = resolveItems(node).reduce((acm, c) => [...acm, formatMessagePart(ctx, c)], []);
return ctx.normalize(messages);
}
}
const PROPS_STATIC = ["s", "static"];
function resolveStatic(node) {
return resolveProps(node, PROPS_STATIC);
}
const PROPS_ITEMS = ["i", "items"];
function resolveItems(node) {
return resolveProps(node, PROPS_ITEMS, []);
}
function formatMessagePart(ctx, node) {
const type = resolveType(node);
switch (type) {
case 3:
return resolveValue$1(node, type);
case 9:
return resolveValue$1(node, type);
case 4: {
const named = node;
if (hasOwn(named, "k") && named.k)
return ctx.interpolate(ctx.named(named.k));
if (hasOwn(named, "key") && named.key)
return ctx.interpolate(ctx.named(named.key));
throw createUnhandleNodeError(type);
}
case 5: {
const list = node;
if (hasOwn(list, "i") && isNumber(list.i))
return ctx.interpolate(ctx.list(list.i));
if (hasOwn(list, "index") && isNumber(list.index))
return ctx.interpolate(ctx.list(list.index));
throw createUnhandleNodeError(type);
}
case 6: {
const linked = node, modifier = resolveLinkedModifier(linked), key = resolveLinkedKey(linked);
return ctx.linked(formatMessagePart(ctx, key), modifier ? formatMessagePart(ctx, modifier) : void 0, ctx.type);
}
case 7:
return resolveValue$1(node, type);
case 8:
return resolveValue$1(node, type);
default:
throw new Error(`unhandled node on format message part: ${type}`);
}
}
const PROPS_TYPE = ["t", "type"];
function resolveType(node) {
return resolveProps(node, PROPS_TYPE);
}
const PROPS_VALUE = ["v", "value"];
function resolveValue$1(node, type) {
const resolved = resolveProps(node, PROPS_VALUE);
if (resolved)
return resolved;
throw createUnhandleNodeError(type);
}
const PROPS_MODIFIER = ["m", "modifier"];
function resolveLinkedModifier(node) {
return resolveProps(node, PROPS_MODIFIER);
}
const PROPS_KEY = ["k", "key"];
function resolveLinkedKey(node) {
const resolved = resolveProps(node, PROPS_KEY);
if (resolved)
return resolved;
throw createUnhandleNodeError(
6
/* NodeTypes.Linked */
);
}
function resolveProps(node, props, defaultValue) {
for (let i = 0; i < props.length; i++) {
const prop = props[i];
if (hasOwn(node, prop) && node[prop] != null)
return node[prop];
}
return defaultValue;
}
function createUnhandleNodeError(type) {
return new Error(`unhandled node type: ${type}`);
}
const defaultOnCacheKey = (message) => message;
let compileCache = create$1();
function isMessageAST(val) {
return isObject$3(val) && resolveType(val) === 0 && (hasOwn(val, "b") || hasOwn(val, "body"));
}
function baseCompile(message, options = {}) {
let detectError = false;
const onError = options.onError || defaultOnError;
return options.onError = (err) => {
detectError = true, onError(err);
}, { ...baseCompile$1(message, options), detectError };
}
// @__NO_SIDE_EFFECTS__
function compile(message, context) {
if (isString(message)) {
isBoolean(context.warnHtmlMessage) && context.warnHtmlMessage;
const cacheKey = (context.onCacheKey || defaultOnCacheKey)(message), cached = compileCache[cacheKey];
if (cached)
return cached;
const { ast, detectError } = baseCompile(message, {
...context,
location: false,
jit: true
}), msg = format(ast);
return detectError ? msg : compileCache[cacheKey] = msg;
} else {
const cacheKey = message.cacheKey;
if (cacheKey) {
const cached = compileCache[cacheKey];
return cached || (compileCache[cacheKey] = format(message));
} else
return format(message);
}
}
let devtools = null;
function setDevToolsHook(hook) {
devtools = hook;
}
function initI18nDevTools(i18n2, version, meta) {
devtools && devtools.emit("i18n:init", {
timestamp: Date.now(),
i18n: i18n2,
version,
meta
});
}
const translateDevTools = /* @__PURE__ */ createDevToolsHook("function:translate");
function createDevToolsHook(hook) {
return (payloads) => devtools && devtools.emit(hook, payloads);
}
const CoreErrorCodes = {
INVALID_ARGUMENT: COMPILE_ERROR_CODES_EXTEND_POINT,
NOT_SUPPORT_LOCALE_PROMISE_VALUE: 21,
NOT_SUPPORT_LOCALE_ASYNC_FUNCTION: 22,
NOT_SUPPORT_LOCALE_TYPE: 23
}, CORE_ERROR_CODES_EXTEND_POINT = 24;
function createCoreError(code) {
return createCompileError(code, null, void 0);
}
function getLocale(context, options) {
return options.locale != null ? resolveLocale(options.locale) : resolveLocale(context.locale);
}
let _resolveLocale;
function resolveLocale(locale) {
if (isString(locale))
return locale;
if (isFunction$1(locale)) {
if (locale.resolvedOnce && _resolveLocale != null)
return _resolveLocale;
if (locale.constructor.name === "Function") {
const resolve = locale();
if (isPromise(resolve))
throw createCoreError(CoreErrorCodes.NOT_SUPPORT_LOCALE_PROMISE_VALUE);
return _resolveLocale = resolve;
} else
throw createCoreError(CoreErrorCodes.NOT_SUPPORT_LOCALE_ASYNC_FUNCTION);
} else
throw createCoreError(CoreErrorCodes.NOT_SUPPORT_LOCALE_TYPE);
}
function fallbackWithSimple(ctx, fallback, start) {
return [.../* @__PURE__ */ new Set([
start,
...isArray(fallback) ? fallback : isObject$3(fallback) ? Object.keys(fallback) : isString(fallback) ? [fallback] : [start]
])];
}
function resolveWithKeyValue(obj, path) {
return isObject$3(obj) ? obj[path] : null;
}
const VERSION$1 = "11.0.1", NOT_REOSLVED = -1, DEFAULT_LOCALE = "en-US", capitalize = (str) => `${str.charAt(0).toLocaleUpperCase()}${str.substr(1)}`;
function getDefaultLinkedModifiers() {
return {
upper: (val, type) => type === "text" && isString(val) ? val.toUpperCase() : type === "vnode" && isObject$3(val) && "__v_isVNode" in val ? val.children.toUpperCase() : val,
lower: (val, type) => type === "text" && isString(val) ? val.toLowerCase() : type === "vnode" && isObject$3(val) && "__v_isVNode" in val ? val.children.toLowerCase() : val,
capitalize: (val, type) => type === "text" && isString(val) ? capitalize(val) : type === "vnode" && isObject$3(val) && "__v_isVNode" in val ? capitalize(val.children) : val
};
}
let _compiler;
function registerMessageCompiler(compiler) {
_compiler = compiler;
}
let _resolver;
function registerMessageResolver(resolver) {
_resolver = resolver;
}
let _fallbackContext = null;
const setFallbackContext = (context) => {
_fallbackContext = context;
}, getFallbackContext = () => _fallbackContext;
let _cid = 0;
function createCoreContext(options = {}) {
const onWarn = isFunction$1(options.onWarn) ? options.onWarn : warn, version = isString(options.version) ? options.version : VERSION$1, locale = isString(options.locale) || isFunction$1(options.locale) ? options.locale : DEFAULT_LOCALE, _locale = isFunction$1(locale) ? DEFAULT_LOCALE : locale, fallbackLocale = isArray(options.fallbackLocale) || isPlainObject(options.fallbackLocale) || isString(options.fallbackLocale) || options.fallbackLocale === false ? options.fallbackLocale : _locale, messages = isPlainObject(options.messages) ? options.messages : createResources(_locale), datetimeFormats = isPlainObject(options.datetimeFormats) ? options.datetimeFormats : createResources(_locale), numberFormats = isPlainObject(options.numberFormats) ? options.numberFormats : createResources(_locale), modifiers = assign(create$1(), options.modifiers, getDefaultLinkedModifiers()), pluralRules = options.pluralRules || create$1(), missing = isFunction$1(options.missing) ? options.missing : null, missingWarn = isBoolean(options.missingWarn) || isRegExp(options.missingWarn) ? options.missingWarn : true, fallbackWarn = isBoolean(options.fallbackWarn) || isRegExp(options.fallbackWarn) ? options.fallbackWarn : true, fallbackFormat = !!options.fallbackFormat, unresolving = !!options.unresolving, postTranslation = isFunction$1(options.postTranslation) ? options.postTranslation : null, processor = isPlainObject(options.processor) ? options.processor : null, warnHtmlMessage = isBoolean(options.warnHtmlMessage) ? options.warnHtmlMessage : true, escapeParameter = !!options.escapeParameter, messageCompiler = isFunction$1(options.messageCompiler) ? options.messageCompiler : _compiler, messageResolver = isFunction$1(options.messageResolver) ? options.messageResolver : _resolver || resolveWithKeyValue, localeFallbacker = isFunction$1(options.localeFallbacker) ? options.localeFallbacker : fallbackWithSimple, fallbackContext = isObject$3(options.fallbackContext) ? options.fallbackContext : void 0, internalOptions = options, __datetimeFormatters = isObject$3(internalOptions.__datetimeFormatters) ? internalOptions.__datetimeFormatters : /* @__PURE__ */ new Map(), __numberFormatters = isObject$3(internalOptions.__numberFormatters) ? internalOptions.__numberFormatters : /* @__PURE__ */ new Map(), __meta = isObject$3(internalOptions.__meta) ? internalOptions.__meta : {};
_cid++;
const context = {
version,
cid: _cid,
locale,
fallbackLocale,
messages,
modifiers,
pluralRules,
missing,
missingWarn,
fallbackWarn,
fallbackFormat,
unresolving,
postTranslation,
processor,
warnHtmlMessage,
escapeParameter,
messageCompiler,
messageResolver,
localeFallbacker,
fallbackContext,
onWarn,
__meta
};
return context.datetimeFormats = datetimeFormats, context.numberFormats = numberFormats, context.__datetimeFormatters = __datetimeFormatters, context.__numberFormatters = __numberFormatters, __INTLIFY_PROD_DEVTOOLS__ && initI18nDevTools(context, version, __meta), context;
}
const createResources = (locale) => ({ [locale]: create$1() });
function handleMissing(context, key, locale, missingWarn, type) {
const { missing, onWarn } = context;
if (missing !== null) {
const ret = missing(context, locale, key, type);
return isString(ret) ? ret : key;
} else
return key;
}
function updateFallbackLocale(ctx, locale, fallback) {
const context = ctx;
context.__localeChainCache = /* @__PURE__ */ new Map(), ctx.localeFallbacker(ctx, fallback, locale);
}
function isAlmostSameLocale(locale, compareLocale) {
return locale === compareLocale ? false : locale.split("-")[0] === compareLocale.split("-")[0];
}
function isImplicitFallback(targetLocale, locales) {
const index = locales.indexOf(targetLocale);
if (index === -1)
return false;
for (let i = index + 1; i < locales.length; i++)
if (isAlmostSameLocale(targetLocale, locales[i]))
return true;
return false;
}
const DEFAULT_MODIFIER = (str) => str, DEFAULT_MESSAGE = (ctx) => "", DEFAULT_MESSAGE_DATA_TYPE = "text", DEFAULT_NORMALIZE = (values2) => values2.length === 0 ? "" : join(values2), DEFAULT_INTERPOLATE = toDisplayString;
function pluralDefault(choice, choicesLength) {
return choice = Math.abs(choice), choicesLength === 2 ? choice ? choice > 1 ? 1 : 0 : 1 : choice ? Math.min(choice, 2) : 0;
}
function getPluralIndex(options) {
const index = isNumber(options.pluralIndex) ? options.pluralIndex : -1;
return options.named && (isNumber(options.named.count) || isNumber(options.named.n)) ? isNumber(options.named.count) ? options.named.count : isNumber(options.named.n) ? options.named.n : index : index;
}
function normalizeNamed(pluralIndex, props) {
props.count || (props.count = pluralIndex), props.n || (props.n = pluralIndex);
}
function createMessageContext(options = {}) {
const locale = options.locale, pluralIndex = getPluralIndex(options), pluralRule = isObject$3(options.pluralRules) && isString(locale) && isFunction$1(options.pluralRules[locale]) ? options.pluralRules[locale] : pluralDefault, orgPluralRule = isObject$3(options.pluralRules) && isString(locale) && isFunction$1(options.pluralRules[locale]) ? pluralDefault : void 0, plural = (messages) => messages[pluralRule(pluralIndex, messages.length, orgPluralRule)], _list = options.list || [], list = (index) => _list[index], _named = options.named || create$1();
isNumber(options.pluralIndex) && normalizeNamed(pluralIndex, _named);
const named = (key) => _named[key];
function message(key, useLinked) {
const msg = isFunction$1(options.messages) ? options.messages(key, !!useLinked) : isObject$3(options.messages) ? options.messages[key] : false;
return msg || (options.parent ? options.parent.message(key) : DEFAULT_MESSAGE);
}
const _modifier = (name) => options.modifiers ? options.modifiers[name] : DEFAULT_MODIFIER, normalize = isPlainObject(options.processor) && isFunction$1(options.processor.normalize) ? options.processor.normalize : DEFAULT_NORMALIZE, interpolate = isPlainObject(options.processor) && isFunction$1(options.processor.interpolate) ? options.processor.interpolate : DEFAULT_INTERPOLATE, type = isPlainObject(options.processor) && isString(options.processor.type) ? options.processor.type : DEFAULT_MESSAGE_DATA_TYPE, ctx = {
list,
named,
plural,
linked: (key, ...args) => {
const [arg1, arg2] = args;
let type2 = "text", modifier = "";
args.length === 1 ? isObject$3(arg1) ? (modifier = arg1.modifier || modifier, type2 = arg1.type || type2) : isString(arg1) && (modifier = arg1 || modifier) : args.length === 2 && (isString(arg1) && (modifier = arg1 || modifier), isString(arg2) && (type2 = arg2 || type2));
const ret = message(key, true)(ctx), msg = (
// The message in vnode resolved with linked are returned as an array by processor.nomalize
type2 === "vnode" && isArray(ret) && modifier ? ret[0] : ret
);
return modifier ? _modifier(modifier)(msg, type2) : msg;
},
message,
type,
interpolate,
normalize,
values: assign(create$1(), _list, _named)
};
return ctx;
}
const NOOP_MESSAGE_FUNCTION = () => "", isMessageFunction = (val) => isFunction$1(val);
function translate(context, ...args) {
const { fallbackFormat, postTranslation, unresolving, messageCompiler, fallbackLocale, messages } = context, [key, options] = parseTranslateArgs(...args), missingWarn = isBoolean(options.missingWarn) ? options.missingWarn : context.missingWarn, fallbackWarn = isBoolean(options.fallbackWarn) ? options.fallbackWarn : context.fallbackWarn, escapeParameter = isBoolean(options.escapeParameter) ? options.escapeParameter : context.escapeParameter, resolvedMessage = !!options.resolvedMessage, defaultMsgOrKey = isString(options.default) || isBoolean(options.default) ? isBoolean(options.default) ? messageCompiler ? key : () => key : options.default : fallbackFormat ? messageCompiler ? key : () => key : null, enableDefaultMsg = fallbackFormat || defaultMsgOrKey != null && (isString(defaultMsgOrKey) || isFunction$1(defaultMsgOrKey)), locale = getLocale(context, options);
escapeParameter && escapeParams(options);
let [formatScope, targetLocale, message] = resolvedMessage ? [
key,
locale,
messages[locale] || create$1()
] : resolveMessageFormat(context, key, locale, fallbackLocale, fallbackWarn, missingWarn), format2 = formatScope, cacheBaseKey = key;
if (!resolvedMessage && !(isString(format2) || isMessageAST(format2) || isMessageFunction(format2)) && enableDefaultMsg && (format2 = defaultMsgOrKey, cacheBaseKey = format2), !resolvedMessage && (!(isString(format2) || isMessageAST(format2) || isMessageFunction(format2)) || !isString(targetLocale)))
return unresolving ? NOT_REOSLVED : key;
let occurred = false;
const onError = () => {
occurred = true;
}, msg = isMessageFunction(format2) ? format2 : compileMessageFormat(context, key, targetLocale, format2, cacheBaseKey, onError);
if (occurred)
return format2;
const ctxOptions = getMessageContextOptions(context, targetLocale, message, options), msgContext = createMessageContext(ctxOptions), messaged = evaluateMessage(context, msg, msgContext), ret = postTranslation ? postTranslation(messaged, key) : messaged;
if (__INTLIFY_PROD_DEVTOOLS__) {
const payloads = {
timestamp: Date.now(),
key: isString(key) ? key : isMessageFunction(format2) ? format2.key : "",
locale: targetLocale || (isMessageFunction(format2) ? format2.locale : ""),
format: isString(format2) ? format2 : isMessageFunction(format2) ? format2.source : "",
message: ret
};
payloads.meta = assign({}, context.__meta, {}), translateDevTools(payloads);
}
return ret;
}
function escapeParams(options) {
isArray(options.list) ? options.list = options.list.map((item) => isString(item) ? escapeHtml(item) : item) : isObject$3(options.named) && Object.keys(options.named).forEach((key) => {
isString(options.named[key]) && (options.named[key] = escapeHtml(options.named[key]));
});
}
function resolveMessageFormat(context, key, locale, fallbackLocale, fallbackWarn, missingWarn) {
const { messages, onWarn, messageResolver: resolveValue2, localeFallbacker } = context, locales = localeFallbacker(context, fallbackLocale, locale);
let message = create$1(), targetLocale, format2 = null;
const type = "translate";
for (let i = 0; i < locales.length && (targetLocale = locales[i], message = messages[targetLocale] || create$1(), (format2 = resolveValue2(message, key)) === null && (format2 = message[key]), !(isString(format2) || isMessageAST(format2) || isMessageFunction(format2))); i++)
if (!isImplicitFallback(targetLocale, locales)) {
const missingRet = handleMissing(
context,
// eslint-disable-line @typescript-eslint/no-explicit-any
key,
targetLocale,
missingWarn,
type
);
missingRet !== key && (format2 = missingRet);
}
return [format2, targetLocale, message];
}
function compileMessageFormat(context, key, targetLocale, format2, cacheBaseKey, onError) {
const { messageCompiler, warnHtmlMessage } = context;
if (isMessageFunction(format2)) {
const msg2 = format2;
return msg2.locale = msg2.locale || targetLocale, msg2.key = msg2.key || key, msg2;
}
if (messageCompiler == null) {
const msg2 = () => format2;
return msg2.locale = targetLocale, msg2.key = key, msg2;
}
const msg = messageCompiler(format2, getCompileContext(context, targetLocale, cacheBaseKey, format2, warnHtmlMessage, onError));
return msg.locale = targetLocale, msg.key = key, msg.source = format2, msg;
}
function evaluateMessage(context, msg, msgCtx) {
return msg(msgCtx);
}
function parseTranslateArgs(...args) {
const [arg1, arg2, arg3] = args, options = create$1();
if (!isString(arg1) && !isNumber(arg1) && !isMessageFunction(arg1) && !isMessageAST(arg1))
throw createCoreError(CoreErrorCodes.INVALID_ARGUMENT);
const key = isNumber(arg1) ? String(arg1) : (arg1);
return isNumber(arg2) ? options.plural = arg2 : isString(arg2) ? options.default = arg2 : isPlainObject(arg2) && !isEmptyObject(arg2) ? options.named = arg2 : isArray(arg2) && (options.list = arg2), isNumber(arg3) ? options.plural = arg3 : isString(arg3) ? options.default = arg3 : isPlainObject(arg3) && assign(options, arg3), [key, options];
}
function getCompileContext(context, locale, key, source, warnHtmlMessage, onError) {
return {
locale,
key,
warnHtmlMessage,
onError: (err) => {
throw onError && onError(err), err;
},
onCacheKey: (source2) => generateFormatCacheKey(locale, key, source2)
};
}
function getMessageContextOptions(context, locale, message, options) {
const { modifiers, pluralRules, messageResolver: resolveValue2, fallbackLocale, fallbackWarn, missingWarn, fallbackContext } = context, ctxOptions = {
locale,
modifiers,
pluralRules,
messages: (key, useLinked) => {
let val = resolveValue2(message, key);
if (val == null && (fallbackContext || useLinked)) {
const [, , message2] = resolveMessageFormat(
fallbackContext || context,
// NOTE: if has fallbackContext, fallback to root, else if use linked, fallback to local context
key,
locale,
fallbackLocale,
fallbackWarn,
missingWarn
);
val = resolveValue2(message2, key);
}
if (isString(val) || isMessageAST(val)) {
let occurred = false;
const msg = compileMessageFormat(context, key, locale, val, key, () => {
occurred = true;
});
return occurred ? NOOP_MESSAGE_FUNCTION : msg;
} else return isMessageFunction(val) ? val : NOOP_MESSAGE_FUNCTION;
}
};
return context.processor && (ctxOptions.processor = context.processor), options.list && (ctxOptions.list = options.list), options.named && (ctxOptions.named = options.named), isNumber(options.plural) && (ctxOptions.pluralIndex = options.plural), ctxOptions;
}
initFeatureFlags$2();
const VERSION = "11.0.1";
function initFeatureFlags$1() {
typeof __INTLIFY_PROD_DEVTOOLS__ != "boolean" && (getGlobalThis$1().__INTLIFY_PROD_DEVTOOLS__ = false);
}
const I18nErrorCodes = {
// composer module errors
UNEXPECTED_RETURN_TYPE: CORE_ERROR_CODES_EXTEND_POINT,
// i18n module errors
MUST_BE_CALL_SETUP_TOP: 26,
NOT_INSTALLED: 27,
NOT_INSTALLED_WITH_PROVIDE: 31,
// unexpected error
UNEXPECTED_ERROR: 32
};
function createI18nError(code, ...args) {
return createCompileError(code, null, void 0);
}
const SetPluralRulesSymbol = makeSymbol("__setPluralRules"), DisposeSymbol = /* @__PURE__ */ makeSymbol("__dispose");
function handleFlatJson(obj) {
if (!isObject$3(obj))
return obj;
for (const key in obj)
if (hasOwn(obj, key))
if (!key.includes("."))
isObject$3(obj[key]) && handleFlatJson(obj[key]);
else {
const subKeys = key.split("."), lastIndex = subKeys.length - 1;
let currentObj = obj, hasStringValue = false;
for (let i = 0; i < lastIndex; i++) {
if (subKeys[i] in currentObj || (currentObj[subKeys[i]] = create$1()), !isObject$3(currentObj[subKeys[i]])) {
hasStringValue = true;
break;
}
currentObj = currentObj[subKeys[i]];
}
hasStringValue || (currentObj[subKeys[lastIndex]] = obj[key], delete obj[key]), isObject$3(currentObj[subKeys[lastIndex]]) && handleFlatJson(currentObj[subKeys[lastIndex]]);
}
return obj;
}
function getLocaleMessages(locale, options) {
const { messages, __i18n, messageResolver, flatJson } = options, ret = isPlainObject(messages) ? messages : isArray(__i18n) ? create$1() : { [locale]: create$1() };
if (isArray(__i18n) && __i18n.forEach((custom) => {
if ("locale" in custom && "resource" in custom) {
const { locale: locale2, resource: resource2 } = custom;
locale2 ? (ret[locale2] = ret[locale2] || create$1(), deepCopy(resource2, ret[locale2])) : deepCopy(resource2, ret);
} else
isString(custom) && deepCopy(JSON.parse(custom), ret);
}), messageResolver == null && flatJson)
for (const key in ret)
hasOwn(ret, key) && handleFlatJson(ret[key]);
return ret;
}
function getComponentOptions(instance) {
return instance.type;
}
function adjustI18nResources(gl, options, componentOptions) {
let messages = isObject$3(options.messages) ? options.messages : create$1();
"__i18nGlobal" in componentOptions && (messages = getLocaleMessages(gl.locale.value, {
messages,
__i18n: componentOptions.__i18nGlobal
}));
const locales = Object.keys(messages);
locales.length && locales.forEach((locale) => {
gl.mergeLocaleMessage(locale, messages[locale]);
});
}
let composerID = 0;
function defineCoreMissingHandler(missing) {
return (ctx, locale, key, type) => missing(locale, key, vue.getCurrentInstance() || void 0, type);
}
function createComposer(options = {}) {
const { __root, __injectWithOption } = options, _isGlobal = __root === void 0, flatJson = options.flatJson, _ref = inBrowser ? vue.ref : vue.shallowRef;
let _inheritLocale = isBoolean(options.inheritLocale) ? options.inheritLocale : true;
const _locale = _ref(
// prettier-ignore
__root && _inheritLocale ? __root.locale.value : isString(options.locale) ? options.locale : DEFAULT_LOCALE
), _fallbackLocale = _ref(
// prettier-ignore
__root && _inheritLocale ? __root.fallbackLocale.value : isString(options.fallbackLocale) || isArray(options.fallbackLocale) || isPlainObject(options.fallbackLocale) || options.fallbackLocale === false ? options.fallbackLocale : _locale.value
), _messages = _ref(getLocaleMessages(_locale.value, options));
let _missingWarn = __root ? __root.missingWarn : isBoolean(options.missingWarn) || isRegExp(options.missingWarn) ? options.missingWarn : true, _fallbackWarn = __root ? __root.fallbackWarn : isBoolean(options.fallbackWarn) || isRegExp(options.fallbackWarn) ? options.fallbackWarn : true, _fallbackRoot = __root ? __root.fallbackRoot : isBoolean(options.fallbackRoot) ? options.fallbackRoot : true, _fallbackFormat = !!options.fallbackFormat, _missing = isFunction$1(options.missing) ? options.missing : null, _runtimeMissing = isFunction$1(options.missing) ? defineCoreMissingHandler(options.missing) : null, _postTranslation = isFunction$1(options.postTranslation) ? options.postTranslation : null, _warnHtmlMessage = __root ? __root.warnHtmlMessage : isBoolean(options.warnHtmlMessage) ? options.warnHtmlMessage : true, _escapeParameter = !!options.escapeParameter;
const _modifiers = __root ? __root.modifiers : isPlainObject(options.modifiers) ? options.modifiers : {};
let _pluralRules = options.pluralRules || __root && __root.pluralRules, _context;
_context = (() => {
_isGlobal && setFallbackContext(null);
const ctxOptions = {
version: VERSION,
locale: _locale.value,
fallbackLocale: _fallbackLocale.value,
messages: _messages.value,
modifiers: _modifiers,
pluralRules: _pluralRules,
missing: _runtimeMissing === null ? void 0 : _runtimeMissing,
missingWarn: _missingWarn,
fallbackWarn: _fallbackWarn,
fallbackFormat: _fallbackFormat,
unresolving: true,
postTranslation: _postTranslation === null ? void 0 : _postTranslation,
warnHtmlMessage: _warnHtmlMessage,
escapeParameter: _escapeParameter,
messageResolver: options.messageResolver,
messageCompiler: options.messageCompiler,
__meta: { framework: "vue" }
}, ctx = createCoreContext(ctxOptions);
return _isGlobal && setFallbackContext(ctx), ctx;
})(), updateFallbackLocale(_context, _locale.value, _fallbackLocale.value);
function trackReactivityValues() {
return [_locale.value, _fallbackLocale.value, _messages.value];
}
const locale = vue.computed({
get: () => _locale.value,
set: (val) => {
_locale.value = val, _context.locale = _locale.value;
}
}), fallbackLocale = vue.computed({
get: () => _fallbackLocale.value,
set: (val) => {
_fallbackLocale.value = val, _context.fallbackLocale = _fallbackLocale.value, updateFallbackLocale(_context, _locale.value, val);
}
}), messages = vue.computed(() => _messages.value);
function getPostTranslationHandler() {
return isFunction$1(_postTranslation) ? _postTranslation : null;
}
function setPostTranslationHandler(handler) {
_postTranslation = handler, _context.postTranslation = handler;
}
function getMissingHandler() {
return _missing;
}
function setMissingHandler(handler) {
handler !== null && (_runtimeMissing = defineCoreMissingHandler(handler)), _missing = handler, _context.missing = _runtimeMissing;
}
const wrapWithDeps = (fn, argumentParser, warnType, fallbackSuccess, fallbackFail, successCondition) => {
trackReactivityValues();
let ret;
try {
__INTLIFY_PROD_DEVTOOLS__, _isGlobal || (_context.fallbackContext = __root ? getFallbackContext() : void 0), ret = fn(_context);
} finally {
__INTLIFY_PROD_DEVTOOLS__, _isGlobal || (_context.fallbackContext = void 0);
}
if (
// for not `te` (e.g `t`)
isNumber(ret) && ret === NOT_REOSLVED || warnType === "translate exists"
) {
const [key, arg2] = argumentParser();
return __root && _fallbackRoot ? fallbackSuccess(__root) : fallbackFail(key);
} else {
if (successCondition(ret))
return ret;
throw createI18nError(I18nErrorCodes.UNEXPECTED_RETURN_TYPE);
}
};
function t2(...args) {
return wrapWithDeps((context) => Reflect.apply(translate, null, [context, ...args]), () => parseTranslateArgs(...args), "translate", (root2) => Reflect.apply(root2.t, root2, [...args]), (key) => key, (val) => isString(val));
}
function setPluralRules(rules) {
_pluralRules = rules, _context.pluralRules = _pluralRules;
}
function getLocaleMessage(locale2) {
return _messages.value[locale2] || {};
}
function setLocaleMessage(locale2, message) {
if (flatJson) {
const _message = { [locale2]: message };
for (const key in _message)
hasOwn(_message, key) && handleFlatJson(_message[key]);
message = _message[locale2];
}
_messages.value[locale2] = message, _context.messages = _messages.value;
}
function mergeLocaleMessage(locale2, message) {
_messages.value[locale2] = _messages.value[locale2] || {};
const _message = { [locale2]: message };
if (flatJson)
for (const key in _message)
hasOwn(_message, key) && handleFlatJson(_message[key]);
message = _message[locale2], deepCopy(message, _messages.value[locale2]), _context.messages = _messages.value;
}
return composerID++, __root && inBrowser && (vue.watch(__root.locale, (val) => {
_inheritLocale && (_locale.value = val, _context.locale = val, updateFallbackLocale(_context, _locale.value, _fallbackLocale.value));
}), vue.watch(__root.fallbackLocale, (val) => {
_inheritLocale && (_fallbackLocale.value = val, _context.fallbackLocale = val, updateFallbackLocale(_context, _locale.value, _fallbackLocale.value));
})), {
id: composerID,
locale,
fallbackLocale,
get inheritLocale() {
return _inheritLocale;
},
set inheritLocale(val) {
_inheritLocale = val, val && __root && (_locale.value = __root.locale.value, _fallbackLocale.value = __root.fallbackLocale.value, updateFallbackLocale(_context, _locale.value, _fallbackLocale.value));
},
get availableLocales() {
return Object.keys(_messages.value).sort();
},
messages,
get modifiers() {
return _modifiers;
},
get pluralRules() {
return _pluralRules || {};
},
get isGlobal() {
return _isGlobal;
},
get missingWarn() {
return _missingWarn;
},
set missingWarn(val) {
_missingWarn = val, _context.missingWarn = _missingWarn;
},
get fallbackWarn() {
return _fallbackWarn;
},
set fallbackWarn(val) {
_fallbackWarn = val, _context.fallbackWarn = _fallbackWarn;
},
get fallbackRoot() {
return _fallbackRoot;
},
set fallbackRoot(val) {
_fallbackRoot = val;
},
get fallbackFormat() {
return _fallbackFormat;
},
set fallbackFormat(val) {
_fallbackFormat = val, _context.fallbackFormat = _fallbackFormat;
},
get warnHtmlMessage() {
return _warnHtmlMessage;
},
set warnHtmlMessage(val) {
_warnHtmlMessage = val, _context.warnHtmlMessage = val;
},
get escapeParameter() {
return _escapeParameter;
},
set escapeParameter(val) {
_escapeParameter = val, _context.escapeParameter = val;
},
t: t2,
getLocaleMessage,
setLocaleMessage,
mergeLocaleMessage,
getPostTranslationHandler,
setPostTranslationHandler,
getMissingHandler,
setMissingHandler,
[SetPluralRulesSymbol]: setPluralRules
};
}
const I18nInjectionKey = /* @__PURE__ */ makeSymbol("global-vue-i18n");
function createI18n(options = {}) {
const __globalInjection = isBoolean(options.globalInjection) ? options.globalInjection : true, __instances = /* @__PURE__ */ new Map(), [globalScope, __global] = createGlobal(options), symbol = /* @__PURE__ */ makeSymbol("");
function __getInstance(component) {
return __instances.get(component) || null;
}
function __setInstance(component, instance) {
__instances.set(component, instance);
}
function __deleteInstance(component) {
__instances.delete(component);
}
const i18n2 = {
// mode
get mode() {
return "composition";
},
// install plugin
async install(app, ...options2) {
if (app.__VUE_I18N_SYMBOL__ = symbol, app.provide(app.__VUE_I18N_SYMBOL__, i18n2), isPlainObject(options2[0])) {
const opts = options2[0];
i18n2.__composerExtend = opts.__composerExtend, i18n2.__vueI18nExtend = opts.__vueI18nExtend;
}
let globalReleaseHandler = null;
__globalInjection && (globalReleaseHandler = injectGlobalFields(app, i18n2.global));
const unmountApp = app.unmount;
app.unmount = () => {
globalReleaseHandler && globalReleaseHandler(), i18n2.dispose(), unmountApp();
};
},
// global accessor
get global() {
return __global;
},
dispose() {
globalScope.stop();
},
// @internal
__instances,
// @internal
__getInstance,
// @internal
__setInstance,
// @internal
__deleteInstance
};
return i18n2;
}
function useI18n(options = {}) {
const instance = vue.getCurrentInstance();
if (instance == null)
throw createI18nError(I18nErrorCodes.MUST_BE_CALL_SETUP_TOP);
if (!instance.isCE && instance.appContext.app != null && !instance.appContext.app.__VUE_I18N_SYMBOL__)
throw createI18nError(I18nErrorCodes.NOT_INSTALLED);
const i18n2 = getI18nInstance(instance), gl = getGlobalComposer(i18n2), componentOptions = getComponentOptions(instance), scope = getScope(options, componentOptions);
if (scope === "global")
return adjustI18nResources(gl, options, componentOptions), gl;
if (scope === "parent") {
let composer2 = getComposer(i18n2, instance, options.__useComponent);
return composer2 == null && (composer2 = gl), composer2;
}
const i18nInternal = i18n2;
let composer = i18nInternal.__getInstance(instance);
if (composer == null) {
const composerOptions = assign({}, options);
"__i18n" in componentOptions && (composerOptions.__i18n = componentOptions.__i18n), gl && (composerOptions.__root = gl), composer = createComposer(composerOptions), i18nInternal.__composerExtend && (composer[DisposeSymbol] = i18nInternal.__composerExtend(composer)), setupLifeCycle(i18nInternal, instance, composer), i18nInternal.__setInstance(instance, composer);
}
return composer;
}
function createGlobal(options, legacyMode) {
const scope = vue.effectScope(), obj = scope.run(() => createComposer(options));
if (obj == null)
throw createI18nError(I18nErrorCodes.UNEXPECTED_ERROR);
return [scope, obj];
}
function getI18nInstance(instance) {
const i18n2 = vue.inject(instance.isCE ? I18nInjectionKey : instance.appContext.app.__VUE_I18N_SYMBOL__);
if (!i18n2)
throw createI18nError(instance.isCE ? I18nErrorCodes.NOT_INSTALLED_WITH_PROVIDE : I18nErrorCodes.UNEXPECTED_ERROR);
return i18n2;
}
function getScope(options, componentOptions) {
return isEmptyObject(options) ? "__i18n" in componentOptions ? "local" : "global" : options.useScope ? options.useScope : "local";
}
function getGlobalComposer(i18n2) {
return i18n2.mode === "composition" ? i18n2.global : i18n2.global.__composer;
}
function getComposer(i18n2, target, useComponent = false) {
let composer = null;
const root2 = target.root;
let current = getParentComponentInstance(target, useComponent);
for (; current != null; ) {
const i18nInternal = i18n2;
if (i18n2.mode === "composition" && (composer = i18nInternal.__getInstance(current)), composer != null || root2 === current)
break;
current = current.parent;
}
return composer;
}
function getParentComponentInstance(target, useComponent = false) {
return target == null ? null : useComponent && target.vnode.ctx || target.parent;
}
function setupLifeCycle(i18n2, target, composer) {
vue.onMounted(() => {
}, target), vue.onUnmounted(() => {
const _composer = composer;
i18n2.__deleteInstance(target);
const dispose = _composer[DisposeSymbol];
dispose && (dispose(), delete _composer[DisposeSymbol]);
}, target);
}
const globalExportProps = [
"locale",
"fallbackLocale",
"availableLocales"
], globalExportMethods = ["t"];
function injectGlobalFields(app, composer) {
const i18n2 = /* @__PURE__ */ Object.create(null);
return globalExportProps.forEach((prop) => {
const desc = Object.getOwnPropertyDescriptor(composer, prop);
if (!desc)
throw createI18nError(I18nErrorCodes.UNEXPECTED_ERROR);
const wrap2 = vue.isRef(desc.value) ? {
get() {
return desc.value.value;
},
// eslint-disable-next-line @typescript-eslint/no-explicit-any
set(val) {
desc.value.value = val;
}
} : {
get() {
return desc.get && desc.get();
}
};
Object.defineProperty(i18n2, prop, wrap2);
}), app.config.globalProperties.$i18n = i18n2, globalExportMethods.forEach((method) => {
const desc = Object.getOwnPropertyDescriptor(composer, method);
if (!desc || !desc.value)
throw createI18nError(I18nErrorCodes.UNEXPECTED_ERROR);
Object.defineProperty(app.config.globalProperties, `$${method}`, desc);
}), () => {
delete app.config.globalProperties.$i18n, globalExportMethods.forEach((method) => {
delete app.config.globalProperties[`$${method}`];
});
};
}
initFeatureFlags$1();
registerMessageCompiler(compile);
if (__INTLIFY_PROD_DEVTOOLS__) {
const target = getGlobalThis$1();
target.__INTLIFY__ = true, setDevToolsHook(target.__INTLIFY_DEVTOOLS_GLOBAL_HOOK__);
}
const _sfc_main$3 = /* @__PURE__ */ vue.defineComponent({
__name: "ConfirmPopup",
emits: ["confirm"],
setup(__props, { emit: __emit }) {
const emit = __emit, { t: t2 } = useI18n();
return (_ctx, _cache) => (vue.openBlock(), vue.createBlock(vue.unref(elementPlus.ElPopconfirm), {
title: vue.unref(t2)("confirmPopup.title"),
"confirm-button-text": vue.unref(t2)("confirmPopup.yes"),
"cancel-button-text": vue.unref(t2)("confirmPopup.no"),
placement: "top",
onConfirm: _cache[0] || (_cache[0] = (...args) => emit("confirm", ...args))
}, {
reference: vue.withCtx(() => [
vue.renderSlot(_ctx.$slots, "default")
]),
_: 3
}, 8, ["title", "confirm-button-text", "cancel-button-text"]));
}
});
var FileSaver_min$1 = { exports: {} }, FileSaver_min = FileSaver_min$1.exports, hasRequiredFileSaver_min;
function requireFileSaver_min() {
return hasRequiredFileSaver_min || (hasRequiredFileSaver_min = 1, function(module2, exports2) {
(function(a, b) {
b();
})(FileSaver_min, function() {
function b(a2, b2) {
return typeof b2 > "u" ? b2 = { autoBom: false } : typeof b2 != "object" && (console.warn("Deprecated: Expected third argument to be a object"), b2 = { autoBom: !b2 }), b2.autoBom && /^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(a2.type) ? new Blob(["\uFEFF", a2], { type: a2.type }) : a2;
}
function c(a2, b2, c2) {
var d2 = new XMLHttpRequest();
d2.open("GET", a2), d2.responseType = "blob", d2.onload = function() {
g(d2.response, b2, c2);
}, d2.onerror = function() {
console.error("could not download file");
}, d2.send();
}
function d(a2) {
var b2 = new XMLHttpRequest();
b2.open("HEAD", a2, false);
try {
b2.send();
} catch {
}
return 200 <= b2.status && 299 >= b2.status;
}
function e(a2) {
try {
a2.dispatchEvent(new MouseEvent("click"));
} catch {
var b2 = document.createEvent("MouseEvents");
b2.initMouseEvent("click", true, true, window, 0, 0, 0, 80, 20, false, false, false, false, 0, null), a2.dispatchEvent(b2);
}
}
var f = typeof window == "object" && window.window === window ? window : typeof self == "object" && self.self === self ? self : typeof commonjsGlobal == "object" && commonjsGlobal.global === commonjsGlobal ? commonjsGlobal : void 0, a = f.navigator && /Macintosh/.test(navigator.userAgent) && /AppleWebKit/.test(navigator.userAgent) && !/Safari/.test(navigator.userAgent), g = f.saveAs || (typeof window != "object" || window !== f ? function() {
} : "download" in HTMLAnchorElement.prototype && !a ? function(b2, g2, h2) {
var i = f.URL || f.webkitURL, j = document.createElement("a");
g2 = g2 || b2.name || "download", j.download = g2, j.rel = "noopener", typeof b2 == "string" ? (j.href = b2, j.origin === location.origin ? e(j) : d(j.href) ? c(b2, g2, h2) : e(j, j.target = "_blank")) : (j.href = i.createObjectURL(b2), setTimeout(function() {
i.revokeObjectURL(j.href);
}, 4e4), setTimeout(function() {
e(j);
}, 0));
} : "msSaveOrOpenBlob" in navigator ? function(f2, g2, h2) {
if (g2 = g2 || f2.name || "download", typeof f2 != "string") navigator.msSaveOrOpenBlob(b(f2, h2), g2);
else if (d(f2)) c(f2, g2, h2);
else {
var i = document.createElement("a");
i.href = f2, i.target = "_blank", setTimeout(function() {
e(i);
});
}
} : function(b2, d2, e2, g2) {
if (g2 = g2 || open("", "_blank"), g2 && (g2.document.title = g2.document.body.innerText = "downloading..."), typeof b2 == "string") return c(b2, d2, e2);
var h2 = b2.type === "application/octet-stream", i = /constructor/i.test(f.HTMLElement) || f.safari, j = /CriOS\/[\d]+/.test(navigator.userAgent);
if ((j || h2 && i || a) && typeof FileReader < "u") {
var k = new FileReader();
k.onloadend = function() {
var a2 = k.result;
a2 = j ? a2 : a2.replace(/^data:[^;]*;/, "data:attachment/file;"), g2 ? g2.location.href = a2 : location = a2, g2 = null;
}, k.readAsDataURL(b2);
} else {
var l = f.URL || f.webkitURL, m = l.createObjectURL(b2);
g2 ? g2.location = m : location.href = m, g2 = null, setTimeout(function() {
l.revokeObjectURL(m);
}, 4e4);
}
});
f.saveAs = g.saveAs = g, module2.exports = g;
});
}(FileSaver_min$1)), FileSaver_min$1.exports;
}
var FileSaver_minExports = requireFileSaver_min();
function commonjsRequire(path) {
throw new Error('Could not dynamically require "' + path + '". Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.');
}
var localforage$1 = { exports: {} };
var hasRequiredLocalforage;
function requireLocalforage() {
return hasRequiredLocalforage || (hasRequiredLocalforage = 1, function(module2, exports2) {
(function(f) {
module2.exports = f();
})(function() {
return function e(t2, n, r) {
function s(o2, u) {
if (!n[o2]) {
if (!t2[o2]) {
var a = typeof commonjsRequire == "function" && commonjsRequire;
if (!u && a) return a(o2, true);
if (i) return i(o2, true);
var f = new Error("Cannot find module '" + o2 + "'");
throw f.code = "MODULE_NOT_FOUND", f;
}
var l = n[o2] = { exports: {} };
t2[o2][0].call(l.exports, function(e2) {
var n2 = t2[o2][1][e2];
return s(n2 || e2);
}, l, l.exports, e, t2, n, r);
}
return n[o2].exports;
}
for (var i = typeof commonjsRequire == "function" && commonjsRequire, o = 0; o < r.length; o++) s(r[o]);
return s;
}({ 1: [function(_dereq_, module3, exports3) {
(function(global2) {
var Mutation = global2.MutationObserver || global2.WebKitMutationObserver, scheduleDrain;
if (Mutation) {
var called = 0, observer = new Mutation(nextTick2), element = global2.document.createTextNode("");
observer.observe(element, {
characterData: true
}), scheduleDrain = function() {
element.data = called = ++called % 2;
};
} else if (!global2.setImmediate && typeof global2.MessageChannel < "u") {
var channel = new global2.MessageChannel();
channel.port1.onmessage = nextTick2, scheduleDrain = function() {
channel.port2.postMessage(0);
};
} else "document" in global2 && "onreadystatechange" in global2.document.createElement("script") ? scheduleDrain = function() {
var scriptEl = global2.document.createElement("script");
scriptEl.onreadystatechange = function() {
nextTick2(), scriptEl.onreadystatechange = null, scriptEl.parentNode.removeChild(scriptEl), scriptEl = null;
}, global2.document.documentElement.appendChild(scriptEl);
} : scheduleDrain = function() {
setTimeout(nextTick2, 0);
};
var draining, queue = [];
function nextTick2() {
draining = true;
for (var i, oldQueue, len = queue.length; len; ) {
for (oldQueue = queue, queue = [], i = -1; ++i < len; )
oldQueue[i]();
len = queue.length;
}
draining = false;
}
module3.exports = immediate;
function immediate(task) {
queue.push(task) === 1 && !draining && scheduleDrain();
}
}).call(this, typeof commonjsGlobal < "u" ? commonjsGlobal : typeof self < "u" ? self : typeof window < "u" ? window : {});
}, {}], 2: [function(_dereq_, module3, exports3) {
var immediate = _dereq_(1);
function INTERNAL() {
}
var handlers2 = {}, REJECTED = ["REJECTED"], FULFILLED = ["FULFILLED"], PENDING = ["PENDING"];
module3.exports = Promise2;
function Promise2(resolver) {
if (typeof resolver != "function")
throw new TypeError("resolver must be a function");
this.state = PENDING, this.queue = [], this.outcome = void 0, resolver !== INTERNAL && safelyResolveThenable(this, resolver);
}
Promise2.prototype.catch = function(onRejected) {
return this.then(null, onRejected);
}, Promise2.prototype.then = function(onFulfilled, onRejected) {
if (typeof onFulfilled != "function" && this.state === FULFILLED || typeof onRejected != "function" && this.state === REJECTED)
return this;
var promise = new this.constructor(INTERNAL);
if (this.state !== PENDING) {
var resolver = this.state === FULFILLED ? onFulfilled : onRejected;
unwrap(promise, resolver, this.outcome);
} else
this.queue.push(new QueueItem(promise, onFulfilled, onRejected));
return promise;
};
function QueueItem(promise, onFulfilled, onRejected) {
this.promise = promise, typeof onFulfilled == "function" && (this.onFulfilled = onFulfilled, this.callFulfilled = this.otherCallFulfilled), typeof onRejected == "function" && (this.onRejected = onRejected, this.callRejected = this.otherCallRejected);
}
QueueItem.prototype.callFulfilled = function(value) {
handlers2.resolve(this.promise, value);
}, QueueItem.prototype.otherCallFulfilled = function(value) {
unwrap(this.promise, this.onFulfilled, value);
}, QueueItem.prototype.callRejected = function(value) {
handlers2.reject(this.promise, value);
}, QueueItem.prototype.otherCallRejected = function(value) {
unwrap(this.promise, this.onRejected, value);
};
function unwrap(promise, func, value) {
immediate(function() {
var returnValue;
try {
returnValue = func(value);
} catch (e) {
return handlers2.reject(promise, e);
}
returnValue === promise ? handlers2.reject(promise, new TypeError("Cannot resolve promise with itself")) : handlers2.resolve(promise, returnValue);
});
}
handlers2.resolve = function(self2, value) {
var result = tryCatch(getThen, value);
if (result.status === "error")
return handlers2.reject(self2, result.value);
var thenable = result.value;
if (thenable)
safelyResolveThenable(self2, thenable);
else {
self2.state = FULFILLED, self2.outcome = value;
for (var i = -1, len = self2.queue.length; ++i < len; )
self2.queue[i].callFulfilled(value);
}
return self2;
}, handlers2.reject = function(self2, error) {
self2.state = REJECTED, self2.outcome = error;
for (var i = -1, len = self2.queue.length; ++i < len; )
self2.queue[i].callRejected(error);
return self2;
};
function getThen(obj) {
var then = obj && obj.then;
if (obj && (typeof obj == "object" || typeof obj == "function") && typeof then == "function")
return function() {
then.apply(obj, arguments);
};
}
function safelyResolveThenable(self2, thenable) {
var called = false;
function onError(value) {
called || (called = true, handlers2.reject(self2, value));
}
function onSuccess(value) {
called || (called = true, handlers2.resolve(self2, value));
}
function tryToUnwrap() {
thenable(onSuccess, onError);
}
var result = tryCatch(tryToUnwrap);
result.status === "error" && onError(result.value);
}
function tryCatch(func, value) {
var out = {};
try {
out.value = func(value), out.status = "success";
} catch (e) {
out.status = "error", out.value = e;
}
return out;
}
Promise2.resolve = resolve;
function resolve(value) {
return value instanceof this ? value : handlers2.resolve(new this(INTERNAL), value);
}
Promise2.reject = reject;
function reject(reason) {
var promise = new this(INTERNAL);
return handlers2.reject(promise, reason);
}
Promise2.all = all;
function all(iterable) {
var self2 = this;
if (Object.prototype.toString.call(iterable) !== "[object Array]")
return this.reject(new TypeError("must be an array"));
var len = iterable.length, called = false;
if (!len)
return this.resolve([]);
for (var values2 = new Array(len), resolved = 0, i = -1, promise = new this(INTERNAL); ++i < len; )
allResolver(iterable[i], i);
return promise;
function allResolver(value, i2) {
self2.resolve(value).then(resolveFromAll, function(error) {
called || (called = true, handlers2.reject(promise, error));
});
function resolveFromAll(outValue) {
values2[i2] = outValue, ++resolved === len && !called && (called = true, handlers2.resolve(promise, values2));
}
}
}
Promise2.race = race;
function race(iterable) {
var self2 = this;
if (Object.prototype.toString.call(iterable) !== "[object Array]")
return this.reject(new TypeError("must be an array"));
var len = iterable.length, called = false;
if (!len)
return this.resolve([]);
for (var i = -1, promise = new this(INTERNAL); ++i < len; )
resolver(iterable[i]);
return promise;
function resolver(value) {
self2.resolve(value).then(function(response) {
called || (called = true, handlers2.resolve(promise, response));
}, function(error) {
called || (called = true, handlers2.reject(promise, error));
});
}
}
}, { 1: 1 }], 3: [function(_dereq_, module3, exports3) {
(function(global2) {
typeof global2.Promise != "function" && (global2.Promise = _dereq_(2));
}).call(this, typeof commonjsGlobal < "u" ? commonjsGlobal : typeof self < "u" ? self : typeof window < "u" ? window : {});
}, { 2: 2 }], 4: [function(_dereq_, module3, exports3) {
var _typeof = typeof Symbol == "function" && typeof Symbol.iterator == "symbol" ? function(obj) {
return typeof obj;
} : function(obj) {
return obj && typeof Symbol == "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
};
function _classCallCheck(instance, Constructor) {
if (!(instance instanceof Constructor))
throw new TypeError("Cannot call a class as a function");
}
function getIDB() {
try {
if (typeof indexedDB < "u")
return indexedDB;
if (typeof webkitIndexedDB < "u")
return webkitIndexedDB;
if (typeof mozIndexedDB < "u")
return mozIndexedDB;
if (typeof OIndexedDB < "u")
return OIndexedDB;
if (typeof msIndexedDB < "u")
return msIndexedDB;
} catch {
return;
}
}
var idb = getIDB();
function isIndexedDBValid() {
try {
if (!idb || !idb.open)
return !1;
var isSafari = typeof openDatabase < "u" && /(Safari|iPhone|iPad|iPod)/.test(navigator.userAgent) && !/Chrome/.test(navigator.userAgent) && !/BlackBerry/.test(navigator.platform), hasFetch = typeof fetch == "function" && fetch.toString().indexOf("[native code") !== -1;
return (!isSafari || hasFetch) && typeof indexedDB < "u" && // some outdated implementations of IDB that appear on Samsung
// and HTC Android devices <4.4 are missing IDBKeyRange
// See: https://github.com/mozilla/localForage/issues/128
// See: https://github.com/mozilla/localForage/issues/272
typeof IDBKeyRange < "u";
} catch {
return false;
}
}
function createBlob(parts, properties) {
parts = parts || [], properties = properties || {};
try {
return new Blob(parts, properties);
} catch (e) {
if (e.name !== "TypeError")
throw e;
for (var Builder = typeof BlobBuilder < "u" ? BlobBuilder : typeof MSBlobBuilder < "u" ? MSBlobBuilder : typeof MozBlobBuilder < "u" ? MozBlobBuilder : WebKitBlobBuilder, builder = new Builder(), i = 0; i < parts.length; i += 1)
builder.append(parts[i]);
return builder.getBlob(properties.type);
}
}
typeof Promise > "u" && _dereq_(3);
var Promise$12 = Promise;
function executeCallback2(promise, callback) {
callback && promise.then(function(result) {
callback(null, result);
}, function(error) {
callback(error);
});
}
function executeTwoCallbacks(promise, callback, errorCallback) {
typeof callback == "function" && promise.then(callback), typeof errorCallback == "function" && promise.catch(errorCallback);
}
function normalizeKey(key2) {
return typeof key2 != "string" && (console.warn(key2 + " used as a key, but it is not a string."), key2 = String(key2)), key2;
}
function getCallback() {
if (arguments.length && typeof arguments[arguments.length - 1] == "function")
return arguments[arguments.length - 1];
}
var DETECT_BLOB_SUPPORT_STORE = "local-forage-detect-blob-support", supportsBlobs = void 0, dbContexts = {}, toString2 = Object.prototype.toString, READ_ONLY = "readonly", READ_WRITE = "readwrite";
function _binStringToArrayBuffer(bin) {
for (var length2 = bin.length, buf = new ArrayBuffer(length2), arr = new Uint8Array(buf), i = 0; i < length2; i++)
arr[i] = bin.charCodeAt(i);
return buf;
}
function _checkBlobSupportWithoutCaching(idb2) {
return new Promise$12(function(resolve) {
var txn = idb2.transaction(DETECT_BLOB_SUPPORT_STORE, READ_WRITE), blob2 = createBlob([""]);
txn.objectStore(DETECT_BLOB_SUPPORT_STORE).put(blob2, "key"), txn.onabort = function(e) {
e.preventDefault(), e.stopPropagation(), resolve(false);
}, txn.oncomplete = function() {
var matchedChrome = navigator.userAgent.match(/Chrome\/(\d+)/), matchedEdge = navigator.userAgent.match(/Edge\//);
resolve(matchedEdge || !matchedChrome || parseInt(matchedChrome[1], 10) >= 43);
};
}).catch(function() {
return false;
});
}
function _checkBlobSupport(idb2) {
return typeof supportsBlobs == "boolean" ? Promise$12.resolve(supportsBlobs) : _checkBlobSupportWithoutCaching(idb2).then(function(value) {
return supportsBlobs = value, supportsBlobs;
});
}
function _deferReadiness(dbInfo) {
var dbContext = dbContexts[dbInfo.name], deferredOperation = {};
deferredOperation.promise = new Promise$12(function(resolve, reject) {
deferredOperation.resolve = resolve, deferredOperation.reject = reject;
}), dbContext.deferredOperations.push(deferredOperation), dbContext.dbReady ? dbContext.dbReady = dbContext.dbReady.then(function() {
return deferredOperation.promise;
}) : dbContext.dbReady = deferredOperation.promise;
}
function _advanceReadiness(dbInfo) {
var dbContext = dbContexts[dbInfo.name], deferredOperation = dbContext.deferredOperations.pop();
if (deferredOperation)
return deferredOperation.resolve(), deferredOperation.promise;
}
function _rejectReadiness(dbInfo, err) {
var dbContext = dbContexts[dbInfo.name], deferredOperation = dbContext.deferredOperations.pop();
if (deferredOperation)
return deferredOperation.reject(err), deferredOperation.promise;
}
function _getConnection(dbInfo, upgradeNeeded) {
return new Promise$12(function(resolve, reject) {
if (dbContexts[dbInfo.name] = dbContexts[dbInfo.name] || createDbContext(), dbInfo.db)
if (upgradeNeeded)
_deferReadiness(dbInfo), dbInfo.db.close();
else
return resolve(dbInfo.db);
var dbArgs = [dbInfo.name];
upgradeNeeded && dbArgs.push(dbInfo.version);
var openreq = idb.open.apply(idb, dbArgs);
upgradeNeeded && (openreq.onupgradeneeded = function(e) {
var db = openreq.result;
try {
db.createObjectStore(dbInfo.storeName), e.oldVersion <= 1 && db.createObjectStore(DETECT_BLOB_SUPPORT_STORE);
} catch (ex) {
if (ex.name === "ConstraintError")
console.warn('The database "' + dbInfo.name + '" has been upgraded from version ' + e.oldVersion + " to version " + e.newVersion + ', but the storage "' + dbInfo.storeName + '" already exists.');
else
throw ex;
}
}), openreq.onerror = function(e) {
e.preventDefault(), reject(openreq.error);
}, openreq.onsuccess = function() {
var db = openreq.result;
db.onversionchange = function(e) {
e.target.close();
}, resolve(db), _advanceReadiness(dbInfo);
};
});
}
function _getOriginalConnection(dbInfo) {
return _getConnection(dbInfo, false);
}
function _getUpgradedConnection(dbInfo) {
return _getConnection(dbInfo, true);
}
function _isUpgradeNeeded(dbInfo, defaultVersion) {
if (!dbInfo.db)
return true;
var isNewStore = !dbInfo.db.objectStoreNames.contains(dbInfo.storeName), isDowngrade = dbInfo.version < dbInfo.db.version, isUpgrade = dbInfo.version > dbInfo.db.version;
if (isDowngrade && (dbInfo.version !== defaultVersion && console.warn('The database "' + dbInfo.name + `" can't be downgraded from version ` + dbInfo.db.version + " to version " + dbInfo.version + "."), dbInfo.version = dbInfo.db.version), isUpgrade || isNewStore) {
if (isNewStore) {
var incVersion = dbInfo.db.version + 1;
incVersion > dbInfo.version && (dbInfo.version = incVersion);
}
return true;
}
return false;
}
function _encodeBlob(blob2) {
return new Promise$12(function(resolve, reject) {
var reader = new FileReader();
reader.onerror = reject, reader.onloadend = function(e) {
var base64 = btoa(e.target.result || "");
resolve({
__local_forage_encoded_blob: true,
data: base64,
type: blob2.type
});
}, reader.readAsBinaryString(blob2);
});
}
function _decodeBlob(encodedBlob) {
var arrayBuff = _binStringToArrayBuffer(atob(encodedBlob.data));
return createBlob([arrayBuff], { type: encodedBlob.type });
}
function _isEncodedBlob(value) {
return value && value.__local_forage_encoded_blob;
}
function _fullyReady(callback) {
var self2 = this, promise = self2._initReady().then(function() {
var dbContext = dbContexts[self2._dbInfo.name];
if (dbContext && dbContext.dbReady)
return dbContext.dbReady;
});
return executeTwoCallbacks(promise, callback, callback), promise;
}
function _tryReconnect(dbInfo) {
_deferReadiness(dbInfo);
for (var dbContext = dbContexts[dbInfo.name], forages = dbContext.forages, i = 0; i < forages.length; i++) {
var forage = forages[i];
forage._dbInfo.db && (forage._dbInfo.db.close(), forage._dbInfo.db = null);
}
return dbInfo.db = null, _getOriginalConnection(dbInfo).then(function(db) {
return dbInfo.db = db, _isUpgradeNeeded(dbInfo) ? _getUpgradedConnection(dbInfo) : db;
}).then(function(db) {
dbInfo.db = dbContext.db = db;
for (var i2 = 0; i2 < forages.length; i2++)
forages[i2]._dbInfo.db = db;
}).catch(function(err) {
throw _rejectReadiness(dbInfo, err), err;
});
}
function createTransaction(dbInfo, mode, callback, retries) {
retries === void 0 && (retries = 1);
try {
var tx = dbInfo.db.transaction(dbInfo.storeName, mode);
callback(null, tx);
} catch (err) {
if (retries > 0 && (!dbInfo.db || err.name === "InvalidStateError" || err.name === "NotFoundError"))
return Promise$12.resolve().then(function() {
if (!dbInfo.db || err.name === "NotFoundError" && !dbInfo.db.objectStoreNames.contains(dbInfo.storeName) && dbInfo.version <= dbInfo.db.version)
return dbInfo.db && (dbInfo.version = dbInfo.db.version + 1), _getUpgradedConnection(dbInfo);
}).then(function() {
return _tryReconnect(dbInfo).then(function() {
createTransaction(dbInfo, mode, callback, retries - 1);
});
}).catch(callback);
callback(err);
}
}
function createDbContext() {
return {
// Running localForages sharing a database.
forages: [],
// Shared database.
db: null,
// Database readiness (promise).
dbReady: null,
// Deferred operations on the database.
deferredOperations: []
};
}
function _initStorage(options) {
var self2 = this, dbInfo = {
db: null
};
if (options)
for (var i in options)
dbInfo[i] = options[i];
var dbContext = dbContexts[dbInfo.name];
dbContext || (dbContext = createDbContext(), dbContexts[dbInfo.name] = dbContext), dbContext.forages.push(self2), self2._initReady || (self2._initReady = self2.ready, self2.ready = _fullyReady);
var initPromises = [];
function ignoreErrors() {
return Promise$12.resolve();
}
for (var j = 0; j < dbContext.forages.length; j++) {
var forage = dbContext.forages[j];
forage !== self2 && initPromises.push(forage._initReady().catch(ignoreErrors));
}
var forages = dbContext.forages.slice(0);
return Promise$12.all(initPromises).then(function() {
return dbInfo.db = dbContext.db, _getOriginalConnection(dbInfo);
}).then(function(db) {
return dbInfo.db = db, _isUpgradeNeeded(dbInfo, self2._defaultConfig.version) ? _getUpgradedConnection(dbInfo) : db;
}).then(function(db) {
dbInfo.db = dbContext.db = db, self2._dbInfo = dbInfo;
for (var k = 0; k < forages.length; k++) {
var forage2 = forages[k];
forage2 !== self2 && (forage2._dbInfo.db = dbInfo.db, forage2._dbInfo.version = dbInfo.version);
}
});
}
function getItem(key2, callback) {
var self2 = this;
key2 = normalizeKey(key2);
var promise = new Promise$12(function(resolve, reject) {
self2.ready().then(function() {
createTransaction(self2._dbInfo, READ_ONLY, function(err, transaction) {
if (err)
return reject(err);
try {
var store = transaction.objectStore(self2._dbInfo.storeName), req = store.get(key2);
req.onsuccess = function() {
var value = req.result;
value === void 0 && (value = null), _isEncodedBlob(value) && (value = _decodeBlob(value)), resolve(value);
}, req.onerror = function() {
reject(req.error);
};
} catch (e) {
reject(e);
}
});
}).catch(reject);
});
return executeCallback2(promise, callback), promise;
}
function iterate(iterator, callback) {
var self2 = this, promise = new Promise$12(function(resolve, reject) {
self2.ready().then(function() {
createTransaction(self2._dbInfo, READ_ONLY, function(err, transaction) {
if (err)
return reject(err);
try {
var store = transaction.objectStore(self2._dbInfo.storeName), req = store.openCursor(), iterationNumber = 1;
req.onsuccess = function() {
var cursor = req.result;
if (cursor) {
var value = cursor.value;
_isEncodedBlob(value) && (value = _decodeBlob(value));
var result = iterator(value, cursor.key, iterationNumber++);
result !== void 0 ? resolve(result) : cursor.continue();
} else
resolve();
}, req.onerror = function() {
reject(req.error);
};
} catch (e) {
reject(e);
}
});
}).catch(reject);
});
return executeCallback2(promise, callback), promise;
}
function setItem(key2, value, callback) {
var self2 = this;
key2 = normalizeKey(key2);
var promise = new Promise$12(function(resolve, reject) {
var dbInfo;
self2.ready().then(function() {
return dbInfo = self2._dbInfo, toString2.call(value) === "[object Blob]" ? _checkBlobSupport(dbInfo.db).then(function(blobSupport) {
return blobSupport ? value : _encodeBlob(value);
}) : value;
}).then(function(value2) {
createTransaction(self2._dbInfo, READ_WRITE, function(err, transaction) {
if (err)
return reject(err);
try {
var store = transaction.objectStore(self2._dbInfo.storeName);
value2 === null && (value2 = void 0);
var req = store.put(value2, key2);
transaction.oncomplete = function() {
value2 === void 0 && (value2 = null), resolve(value2);
}, transaction.onabort = transaction.onerror = function() {
var err2 = req.error ? req.error : req.transaction.error;
reject(err2);
};
} catch (e) {
reject(e);
}
});
}).catch(reject);
});
return executeCallback2(promise, callback), promise;
}
function removeItem(key2, callback) {
var self2 = this;
key2 = normalizeKey(key2);
var promise = new Promise$12(function(resolve, reject) {
self2.ready().then(function() {
createTransaction(self2._dbInfo, READ_WRITE, function(err, transaction) {
if (err)
return reject(err);
try {
var store = transaction.objectStore(self2._dbInfo.storeName), req = store.delete(key2);
transaction.oncomplete = function() {
resolve();
}, transaction.onerror = function() {
reject(req.error);
}, transaction.onabort = function() {
var err2 = req.error ? req.error : req.transaction.error;
reject(err2);
};
} catch (e) {
reject(e);
}
});
}).catch(reject);
});
return executeCallback2(promise, callback), promise;
}
function clear(callback) {
var self2 = this, promise = new Promise$12(function(resolve, reject) {
self2.ready().then(function() {
createTransaction(self2._dbInfo, READ_WRITE, function(err, transaction) {
if (err)
return reject(err);
try {
var store = transaction.objectStore(self2._dbInfo.storeName), req = store.clear();
transaction.oncomplete = function() {
resolve();
}, transaction.onabort = transaction.onerror = function() {
var err2 = req.error ? req.error : req.transaction.error;
reject(err2);
};
} catch (e) {
reject(e);
}
});
}).catch(reject);
});
return executeCallback2(promise, callback), promise;
}
function length(callback) {
var self2 = this, promise = new Promise$12(function(resolve, reject) {
self2.ready().then(function() {
createTransaction(self2._dbInfo, READ_ONLY, function(err, transaction) {
if (err)
return reject(err);
try {
var store = transaction.objectStore(self2._dbInfo.storeName), req = store.count();
req.onsuccess = function() {
resolve(req.result);
}, req.onerror = function() {
reject(req.error);
};
} catch (e) {
reject(e);
}
});
}).catch(reject);
});
return executeCallback2(promise, callback), promise;
}
function key(n, callback) {
var self2 = this, promise = new Promise$12(function(resolve, reject) {
if (n < 0) {
resolve(null);
return;
}
self2.ready().then(function() {
createTransaction(self2._dbInfo, READ_ONLY, function(err, transaction) {
if (err)
return reject(err);
try {
var store = transaction.objectStore(self2._dbInfo.storeName), advanced = !1, req = store.openKeyCursor();
req.onsuccess = function() {
var cursor = req.result;
if (!cursor) {
resolve(null);
return;
}
n === 0 || advanced ? resolve(cursor.key) : (advanced = !0, cursor.advance(n));
}, req.onerror = function() {
reject(req.error);
};
} catch (e) {
reject(e);
}
});
}).catch(reject);
});
return executeCallback2(promise, callback), promise;
}
function keys2(callback) {
var self2 = this, promise = new Promise$12(function(resolve, reject) {
self2.ready().then(function() {
createTransaction(self2._dbInfo, READ_ONLY, function(err, transaction) {
if (err)
return reject(err);
try {
var store = transaction.objectStore(self2._dbInfo.storeName), req = store.openKeyCursor(), keys3 = [];
req.onsuccess = function() {
var cursor = req.result;
if (!cursor) {
resolve(keys3);
return;
}
keys3.push(cursor.key), cursor.continue();
}, req.onerror = function() {
reject(req.error);
};
} catch (e) {
reject(e);
}
});
}).catch(reject);
});
return executeCallback2(promise, callback), promise;
}
function dropInstance(options, callback) {
callback = getCallback.apply(this, arguments);
var currentConfig = this.config();
options = typeof options != "function" && options || {}, options.name || (options.name = options.name || currentConfig.name, options.storeName = options.storeName || currentConfig.storeName);
var self2 = this, promise;
if (!options.name)
promise = Promise$12.reject("Invalid arguments");
else {
var isCurrentDb = options.name === currentConfig.name && self2._dbInfo.db, dbPromise = isCurrentDb ? Promise$12.resolve(self2._dbInfo.db) : _getOriginalConnection(options).then(function(db) {
var dbContext = dbContexts[options.name], forages = dbContext.forages;
dbContext.db = db;
for (var i = 0; i < forages.length; i++)
forages[i]._dbInfo.db = db;
return db;
});
options.storeName ? promise = dbPromise.then(function(db) {
if (db.objectStoreNames.contains(options.storeName)) {
var newVersion = db.version + 1;
_deferReadiness(options);
var dbContext = dbContexts[options.name], forages = dbContext.forages;
db.close();
for (var i = 0; i < forages.length; i++) {
var forage = forages[i];
forage._dbInfo.db = null, forage._dbInfo.version = newVersion;
}
var dropObjectPromise = new Promise$12(function(resolve, reject) {
var req = idb.open(options.name, newVersion);
req.onerror = function(err) {
var db2 = req.result;
db2.close(), reject(err);
}, req.onupgradeneeded = function() {
var db2 = req.result;
db2.deleteObjectStore(options.storeName);
}, req.onsuccess = function() {
var db2 = req.result;
db2.close(), resolve(db2);
};
});
return dropObjectPromise.then(function(db2) {
dbContext.db = db2;
for (var j = 0; j < forages.length; j++) {
var _forage2 = forages[j];
_forage2._dbInfo.db = db2, _advanceReadiness(_forage2._dbInfo);
}
}).catch(function(err) {
throw (_rejectReadiness(options, err) || Promise$12.resolve()).catch(function() {
}), err;
});
}
}) : promise = dbPromise.then(function(db) {
_deferReadiness(options);
var dbContext = dbContexts[options.name], forages = dbContext.forages;
db.close();
for (var i = 0; i < forages.length; i++) {
var forage = forages[i];
forage._dbInfo.db = null;
}
var dropDBPromise = new Promise$12(function(resolve, reject) {
var req = idb.deleteDatabase(options.name);
req.onerror = function() {
var db2 = req.result;
db2 && db2.close(), reject(req.error);
}, req.onblocked = function() {
console.warn('dropInstance blocked for database "' + options.name + '" until all open connections are closed');
}, req.onsuccess = function() {
var db2 = req.result;
db2 && db2.close(), resolve(db2);
};
});
return dropDBPromise.then(function(db2) {
dbContext.db = db2;
for (var i2 = 0; i2 < forages.length; i2++) {
var _forage = forages[i2];
_advanceReadiness(_forage._dbInfo);
}
}).catch(function(err) {
throw (_rejectReadiness(options, err) || Promise$12.resolve()).catch(function() {
}), err;
});
});
}
return executeCallback2(promise, callback), promise;
}
var asyncStorage = {
_driver: "asyncStorage",
_initStorage,
_support: isIndexedDBValid(),
iterate,
getItem,
setItem,
removeItem,
clear,
length,
key,
keys: keys2,
dropInstance
};
function isWebSQLValid() {
return typeof openDatabase == "function";
}
var BASE_CHARS = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/", BLOB_TYPE_PREFIX = "~~local_forage_type~", BLOB_TYPE_PREFIX_REGEX = /^~~local_forage_type~([^~]+)~/, SERIALIZED_MARKER = "__lfsc__:", SERIALIZED_MARKER_LENGTH = SERIALIZED_MARKER.length, TYPE_ARRAYBUFFER = "arbf", TYPE_BLOB = "blob", TYPE_INT8ARRAY = "si08", TYPE_UINT8ARRAY = "ui08", TYPE_UINT8CLAMPEDARRAY = "uic8", TYPE_INT16ARRAY = "si16", TYPE_INT32ARRAY = "si32", TYPE_UINT16ARRAY = "ur16", TYPE_UINT32ARRAY = "ui32", TYPE_FLOAT32ARRAY = "fl32", TYPE_FLOAT64ARRAY = "fl64", TYPE_SERIALIZED_MARKER_LENGTH = SERIALIZED_MARKER_LENGTH + TYPE_ARRAYBUFFER.length, toString$12 = Object.prototype.toString;
function stringToBuffer(serializedString) {
var bufferLength = serializedString.length * 0.75, len = serializedString.length, i, p = 0, encoded1, encoded2, encoded3, encoded4;
serializedString[serializedString.length - 1] === "=" && (bufferLength--, serializedString[serializedString.length - 2] === "=" && bufferLength--);
var buffer = new ArrayBuffer(bufferLength), bytes = new Uint8Array(buffer);
for (i = 0; i < len; i += 4)
encoded1 = BASE_CHARS.indexOf(serializedString[i]), encoded2 = BASE_CHARS.indexOf(serializedString[i + 1]), encoded3 = BASE_CHARS.indexOf(serializedString[i + 2]), encoded4 = BASE_CHARS.indexOf(serializedString[i + 3]), bytes[p++] = encoded1 << 2 | encoded2 >> 4, bytes[p++] = (encoded2 & 15) << 4 | encoded3 >> 2, bytes[p++] = (encoded3 & 3) << 6 | encoded4 & 63;
return buffer;
}
function bufferToString(buffer) {
var bytes = new Uint8Array(buffer), base64String = "", i;
for (i = 0; i < bytes.length; i += 3)
base64String += BASE_CHARS[bytes[i] >> 2], base64String += BASE_CHARS[(bytes[i] & 3) << 4 | bytes[i + 1] >> 4], base64String += BASE_CHARS[(bytes[i + 1] & 15) << 2 | bytes[i + 2] >> 6], base64String += BASE_CHARS[bytes[i + 2] & 63];
return bytes.length % 3 === 2 ? base64String = base64String.substring(0, base64String.length - 1) + "=" : bytes.length % 3 === 1 && (base64String = base64String.substring(0, base64String.length - 2) + "=="), base64String;
}
function serialize(value, callback) {
var valueType = "";
if (value && (valueType = toString$12.call(value)), value && (valueType === "[object ArrayBuffer]" || value.buffer && toString$12.call(value.buffer) === "[object ArrayBuffer]")) {
var buffer, marker = SERIALIZED_MARKER;
value instanceof ArrayBuffer ? (buffer = value, marker += TYPE_ARRAYBUFFER) : (buffer = value.buffer, valueType === "[object Int8Array]" ? marker += TYPE_INT8ARRAY : valueType === "[object Uint8Array]" ? marker += TYPE_UINT8ARRAY : valueType === "[object Uint8ClampedArray]" ? marker += TYPE_UINT8CLAMPEDARRAY : valueType === "[object Int16Array]" ? marker += TYPE_INT16ARRAY : valueType === "[object Uint16Array]" ? marker += TYPE_UINT16ARRAY : valueType === "[object Int32Array]" ? marker += TYPE_INT32ARRAY : valueType === "[object Uint32Array]" ? marker += TYPE_UINT32ARRAY : valueType === "[object Float32Array]" ? marker += TYPE_FLOAT32ARRAY : valueType === "[object Float64Array]" ? marker += TYPE_FLOAT64ARRAY : callback(new Error("Failed to get type for BinaryArray"))), callback(marker + bufferToString(buffer));
} else if (valueType === "[object Blob]") {
var fileReader = new FileReader();
fileReader.onload = function() {
var str = BLOB_TYPE_PREFIX + value.type + "~" + bufferToString(this.result);
callback(SERIALIZED_MARKER + TYPE_BLOB + str);
}, fileReader.readAsArrayBuffer(value);
} else
try {
callback(JSON.stringify(value));
} catch (e) {
console.error("Couldn't convert value into a JSON string: ", value), callback(null, e);
}
}
function deserialize(value) {
if (value.substring(0, SERIALIZED_MARKER_LENGTH) !== SERIALIZED_MARKER)
return JSON.parse(value);
var serializedString = value.substring(TYPE_SERIALIZED_MARKER_LENGTH), type = value.substring(SERIALIZED_MARKER_LENGTH, TYPE_SERIALIZED_MARKER_LENGTH), blobType;
if (type === TYPE_BLOB && BLOB_TYPE_PREFIX_REGEX.test(serializedString)) {
var matcher = serializedString.match(BLOB_TYPE_PREFIX_REGEX);
blobType = matcher[1], serializedString = serializedString.substring(matcher[0].length);
}
var buffer = stringToBuffer(serializedString);
switch (type) {
case TYPE_ARRAYBUFFER:
return buffer;
case TYPE_BLOB:
return createBlob([buffer], { type: blobType });
case TYPE_INT8ARRAY:
return new Int8Array(buffer);
case TYPE_UINT8ARRAY:
return new Uint8Array(buffer);
case TYPE_UINT8CLAMPEDARRAY:
return new Uint8ClampedArray(buffer);
case TYPE_INT16ARRAY:
return new Int16Array(buffer);
case TYPE_UINT16ARRAY:
return new Uint16Array(buffer);
case TYPE_INT32ARRAY:
return new Int32Array(buffer);
case TYPE_UINT32ARRAY:
return new Uint32Array(buffer);
case TYPE_FLOAT32ARRAY:
return new Float32Array(buffer);
case TYPE_FLOAT64ARRAY:
return new Float64Array(buffer);
default:
throw new Error("Unkown type: " + type);
}
}
var localforageSerializer = {
serialize,
deserialize,
stringToBuffer,
bufferToString
};
function createDbTable(t2, dbInfo, callback, errorCallback) {
t2.executeSql("CREATE TABLE IF NOT EXISTS " + dbInfo.storeName + " (id INTEGER PRIMARY KEY, key unique, value)", [], callback, errorCallback);
}
function _initStorage$1(options) {
var self2 = this, dbInfo = {
db: null
};
if (options)
for (var i in options)
dbInfo[i] = typeof options[i] != "string" ? options[i].toString() : options[i];
var dbInfoPromise = new Promise$12(function(resolve, reject) {
try {
dbInfo.db = openDatabase(dbInfo.name, String(dbInfo.version), dbInfo.description, dbInfo.size);
} catch (e) {
return reject(e);
}
dbInfo.db.transaction(function(t2) {
createDbTable(t2, dbInfo, function() {
self2._dbInfo = dbInfo, resolve();
}, function(t3, error) {
reject(error);
});
}, reject);
});
return dbInfo.serializer = localforageSerializer, dbInfoPromise;
}
function tryExecuteSql(t2, dbInfo, sqlStatement, args, callback, errorCallback) {
t2.executeSql(sqlStatement, args, callback, function(t3, error) {
error.code === error.SYNTAX_ERR ? t3.executeSql("SELECT name FROM sqlite_master WHERE type='table' AND name = ?", [dbInfo.storeName], function(t4, results) {
results.rows.length ? errorCallback(t4, error) : createDbTable(t4, dbInfo, function() {
t4.executeSql(sqlStatement, args, callback, errorCallback);
}, errorCallback);
}, errorCallback) : errorCallback(t3, error);
}, errorCallback);
}
function getItem$1(key2, callback) {
var self2 = this;
key2 = normalizeKey(key2);
var promise = new Promise$12(function(resolve, reject) {
self2.ready().then(function() {
var dbInfo = self2._dbInfo;
dbInfo.db.transaction(function(t2) {
tryExecuteSql(t2, dbInfo, "SELECT * FROM " + dbInfo.storeName + " WHERE key = ? LIMIT 1", [key2], function(t3, results) {
var result = results.rows.length ? results.rows.item(0).value : null;
result && (result = dbInfo.serializer.deserialize(result)), resolve(result);
}, function(t3, error) {
reject(error);
});
});
}).catch(reject);
});
return executeCallback2(promise, callback), promise;
}
function iterate$1(iterator, callback) {
var self2 = this, promise = new Promise$12(function(resolve, reject) {
self2.ready().then(function() {
var dbInfo = self2._dbInfo;
dbInfo.db.transaction(function(t2) {
tryExecuteSql(t2, dbInfo, "SELECT * FROM " + dbInfo.storeName, [], function(t3, results) {
for (var rows = results.rows, length2 = rows.length, i = 0; i < length2; i++) {
var item = rows.item(i), result = item.value;
if (result && (result = dbInfo.serializer.deserialize(result)), result = iterator(result, item.key, i + 1), result !== void 0) {
resolve(result);
return;
}
}
resolve();
}, function(t3, error) {
reject(error);
});
});
}).catch(reject);
});
return executeCallback2(promise, callback), promise;
}
function _setItem(key2, value, callback, retriesLeft) {
var self2 = this;
key2 = normalizeKey(key2);
var promise = new Promise$12(function(resolve, reject) {
self2.ready().then(function() {
value === void 0 && (value = null);
var originalValue = value, dbInfo = self2._dbInfo;
dbInfo.serializer.serialize(value, function(value2, error) {
error ? reject(error) : dbInfo.db.transaction(function(t2) {
tryExecuteSql(t2, dbInfo, "INSERT OR REPLACE INTO " + dbInfo.storeName + " (key, value) VALUES (?, ?)", [key2, value2], function() {
resolve(originalValue);
}, function(t3, error2) {
reject(error2);
});
}, function(sqlError) {
if (sqlError.code === sqlError.QUOTA_ERR) {
if (retriesLeft > 0) {
resolve(_setItem.apply(self2, [key2, originalValue, callback, retriesLeft - 1]));
return;
}
reject(sqlError);
}
});
});
}).catch(reject);
});
return executeCallback2(promise, callback), promise;
}
function setItem$1(key2, value, callback) {
return _setItem.apply(this, [key2, value, callback, 1]);
}
function removeItem$1(key2, callback) {
var self2 = this;
key2 = normalizeKey(key2);
var promise = new Promise$12(function(resolve, reject) {
self2.ready().then(function() {
var dbInfo = self2._dbInfo;
dbInfo.db.transaction(function(t2) {
tryExecuteSql(t2, dbInfo, "DELETE FROM " + dbInfo.storeName + " WHERE key = ?", [key2], function() {
resolve();
}, function(t3, error) {
reject(error);
});
});
}).catch(reject);
});
return executeCallback2(promise, callback), promise;
}
function clear$1(callback) {
var self2 = this, promise = new Promise$12(function(resolve, reject) {
self2.ready().then(function() {
var dbInfo = self2._dbInfo;
dbInfo.db.transaction(function(t2) {
tryExecuteSql(t2, dbInfo, "DELETE FROM " + dbInfo.storeName, [], function() {
resolve();
}, function(t3, error) {
reject(error);
});
});
}).catch(reject);
});
return executeCallback2(promise, callback), promise;
}
function length$1(callback) {
var self2 = this, promise = new Promise$12(function(resolve, reject) {
self2.ready().then(function() {
var dbInfo = self2._dbInfo;
dbInfo.db.transaction(function(t2) {
tryExecuteSql(t2, dbInfo, "SELECT COUNT(key) as c FROM " + dbInfo.storeName, [], function(t3, results) {
var result = results.rows.item(0).c;
resolve(result);
}, function(t3, error) {
reject(error);
});
});
}).catch(reject);
});
return executeCallback2(promise, callback), promise;
}
function key$1(n, callback) {
var self2 = this, promise = new Promise$12(function(resolve, reject) {
self2.ready().then(function() {
var dbInfo = self2._dbInfo;
dbInfo.db.transaction(function(t2) {
tryExecuteSql(t2, dbInfo, "SELECT key FROM " + dbInfo.storeName + " WHERE id = ? LIMIT 1", [n + 1], function(t3, results) {
var result = results.rows.length ? results.rows.item(0).key : null;
resolve(result);
}, function(t3, error) {
reject(error);
});
});
}).catch(reject);
});
return executeCallback2(promise, callback), promise;
}
function keys$1(callback) {
var self2 = this, promise = new Promise$12(function(resolve, reject) {
self2.ready().then(function() {
var dbInfo = self2._dbInfo;
dbInfo.db.transaction(function(t2) {
tryExecuteSql(t2, dbInfo, "SELECT key FROM " + dbInfo.storeName, [], function(t3, results) {
for (var keys3 = [], i = 0; i < results.rows.length; i++)
keys3.push(results.rows.item(i).key);
resolve(keys3);
}, function(t3, error) {
reject(error);
});
});
}).catch(reject);
});
return executeCallback2(promise, callback), promise;
}
function getAllStoreNames(db) {
return new Promise$12(function(resolve, reject) {
db.transaction(function(t2) {
t2.executeSql("SELECT name FROM sqlite_master WHERE type='table' AND name <> '__WebKitDatabaseInfoTable__'", [], function(t3, results) {
for (var storeNames = [], i = 0; i < results.rows.length; i++)
storeNames.push(results.rows.item(i).name);
resolve({
db,
storeNames
});
}, function(t3, error) {
reject(error);
});
}, function(sqlError) {
reject(sqlError);
});
});
}
function dropInstance$1(options, callback) {
callback = getCallback.apply(this, arguments);
var currentConfig = this.config();
options = typeof options != "function" && options || {}, options.name || (options.name = options.name || currentConfig.name, options.storeName = options.storeName || currentConfig.storeName);
var self2 = this, promise;
return options.name ? promise = new Promise$12(function(resolve) {
var db;
options.name === currentConfig.name ? db = self2._dbInfo.db : db = openDatabase(options.name, "", "", 0), options.storeName ? resolve({
db,
storeNames: [options.storeName]
}) : resolve(getAllStoreNames(db));
}).then(function(operationInfo) {
return new Promise$12(function(resolve, reject) {
operationInfo.db.transaction(function(t2) {
function dropTable(storeName) {
return new Promise$12(function(resolve2, reject2) {
t2.executeSql("DROP TABLE IF EXISTS " + storeName, [], function() {
resolve2();
}, function(t3, error) {
reject2(error);
});
});
}
for (var operations = [], i = 0, len = operationInfo.storeNames.length; i < len; i++)
operations.push(dropTable(operationInfo.storeNames[i]));
Promise$12.all(operations).then(function() {
resolve();
}).catch(function(e) {
reject(e);
});
}, function(sqlError) {
reject(sqlError);
});
});
}) : promise = Promise$12.reject("Invalid arguments"), executeCallback2(promise, callback), promise;
}
var webSQLStorage = {
_driver: "webSQLStorage",
_initStorage: _initStorage$1,
_support: isWebSQLValid(),
iterate: iterate$1,
getItem: getItem$1,
setItem: setItem$1,
removeItem: removeItem$1,
clear: clear$1,
length: length$1,
key: key$1,
keys: keys$1,
dropInstance: dropInstance$1
};
function isLocalStorageValid() {
try {
return typeof localStorage < "u" && "setItem" in localStorage && // in IE8 typeof localStorage.setItem === 'object'
!!localStorage.setItem;
} catch {
return false;
}
}
function _getKeyPrefix(options, defaultConfig) {
var keyPrefix = options.name + "/";
return options.storeName !== defaultConfig.storeName && (keyPrefix += options.storeName + "/"), keyPrefix;
}
function checkIfLocalStorageThrows() {
var localStorageTestKey = "_localforage_support_test";
try {
return localStorage.setItem(localStorageTestKey, !0), localStorage.removeItem(localStorageTestKey), !1;
} catch {
return true;
}
}
function _isLocalStorageUsable() {
return !checkIfLocalStorageThrows() || localStorage.length > 0;
}
function _initStorage$2(options) {
var self2 = this, dbInfo = {};
if (options)
for (var i in options)
dbInfo[i] = options[i];
return dbInfo.keyPrefix = _getKeyPrefix(options, self2._defaultConfig), _isLocalStorageUsable() ? (self2._dbInfo = dbInfo, dbInfo.serializer = localforageSerializer, Promise$12.resolve()) : Promise$12.reject();
}
function clear$2(callback) {
var self2 = this, promise = self2.ready().then(function() {
for (var keyPrefix = self2._dbInfo.keyPrefix, i = localStorage.length - 1; i >= 0; i--) {
var key2 = localStorage.key(i);
key2.indexOf(keyPrefix) === 0 && localStorage.removeItem(key2);
}
});
return executeCallback2(promise, callback), promise;
}
function getItem$2(key2, callback) {
var self2 = this;
key2 = normalizeKey(key2);
var promise = self2.ready().then(function() {
var dbInfo = self2._dbInfo, result = localStorage.getItem(dbInfo.keyPrefix + key2);
return result && (result = dbInfo.serializer.deserialize(result)), result;
});
return executeCallback2(promise, callback), promise;
}
function iterate$2(iterator, callback) {
var self2 = this, promise = self2.ready().then(function() {
for (var dbInfo = self2._dbInfo, keyPrefix = dbInfo.keyPrefix, keyPrefixLength = keyPrefix.length, length2 = localStorage.length, iterationNumber = 1, i = 0; i < length2; i++) {
var key2 = localStorage.key(i);
if (key2.indexOf(keyPrefix) === 0) {
var value = localStorage.getItem(key2);
if (value && (value = dbInfo.serializer.deserialize(value)), value = iterator(value, key2.substring(keyPrefixLength), iterationNumber++), value !== void 0)
return value;
}
}
});
return executeCallback2(promise, callback), promise;
}
function key$2(n, callback) {
var self2 = this, promise = self2.ready().then(function() {
var dbInfo = self2._dbInfo, result;
try {
result = localStorage.key(n);
} catch {
result = null;
}
return result && (result = result.substring(dbInfo.keyPrefix.length)), result;
});
return executeCallback2(promise, callback), promise;
}
function keys$2(callback) {
var self2 = this, promise = self2.ready().then(function() {
for (var dbInfo = self2._dbInfo, length2 = localStorage.length, keys3 = [], i = 0; i < length2; i++) {
var itemKey = localStorage.key(i);
itemKey.indexOf(dbInfo.keyPrefix) === 0 && keys3.push(itemKey.substring(dbInfo.keyPrefix.length));
}
return keys3;
});
return executeCallback2(promise, callback), promise;
}
function length$2(callback) {
var self2 = this, promise = self2.keys().then(function(keys3) {
return keys3.length;
});
return executeCallback2(promise, callback), promise;
}
function removeItem$2(key2, callback) {
var self2 = this;
key2 = normalizeKey(key2);
var promise = self2.ready().then(function() {
var dbInfo = self2._dbInfo;
localStorage.removeItem(dbInfo.keyPrefix + key2);
});
return executeCallback2(promise, callback), promise;
}
function setItem$2(key2, value, callback) {
var self2 = this;
key2 = normalizeKey(key2);
var promise = self2.ready().then(function() {
value === void 0 && (value = null);
var originalValue = value;
return new Promise$12(function(resolve, reject) {
var dbInfo = self2._dbInfo;
dbInfo.serializer.serialize(value, function(value2, error) {
if (error)
reject(error);
else
try {
localStorage.setItem(dbInfo.keyPrefix + key2, value2), resolve(originalValue);
} catch (e) {
(e.name === "QuotaExceededError" || e.name === "NS_ERROR_DOM_QUOTA_REACHED") && reject(e), reject(e);
}
});
});
});
return executeCallback2(promise, callback), promise;
}
function dropInstance$2(options, callback) {
if (callback = getCallback.apply(this, arguments), options = typeof options != "function" && options || {}, !options.name) {
var currentConfig = this.config();
options.name = options.name || currentConfig.name, options.storeName = options.storeName || currentConfig.storeName;
}
var self2 = this, promise;
return options.name ? promise = new Promise$12(function(resolve) {
options.storeName ? resolve(_getKeyPrefix(options, self2._defaultConfig)) : resolve(options.name + "/");
}).then(function(keyPrefix) {
for (var i = localStorage.length - 1; i >= 0; i--) {
var key2 = localStorage.key(i);
key2.indexOf(keyPrefix) === 0 && localStorage.removeItem(key2);
}
}) : promise = Promise$12.reject("Invalid arguments"), executeCallback2(promise, callback), promise;
}
var localStorageWrapper = {
_driver: "localStorageWrapper",
_initStorage: _initStorage$2,
_support: isLocalStorageValid(),
iterate: iterate$2,
getItem: getItem$2,
setItem: setItem$2,
removeItem: removeItem$2,
clear: clear$2,
length: length$2,
key: key$2,
keys: keys$2,
dropInstance: dropInstance$2
}, sameValue = function(x, y) {
return x === y || typeof x == "number" && typeof y == "number" && isNaN(x) && isNaN(y);
}, includes = function(array, searchElement) {
for (var len = array.length, i = 0; i < len; ) {
if (sameValue(array[i], searchElement))
return true;
i++;
}
return false;
}, isArray2 = Array.isArray || function(arg) {
return Object.prototype.toString.call(arg) === "[object Array]";
}, DefinedDrivers = {}, DriverSupport = {}, DefaultDrivers = {
INDEXEDDB: asyncStorage,
WEBSQL: webSQLStorage,
LOCALSTORAGE: localStorageWrapper
}, DefaultDriverOrder = [DefaultDrivers.INDEXEDDB._driver, DefaultDrivers.WEBSQL._driver, DefaultDrivers.LOCALSTORAGE._driver], OptionalDriverMethods = ["dropInstance"], LibraryMethods = ["clear", "getItem", "iterate", "key", "keys", "length", "removeItem", "setItem"].concat(OptionalDriverMethods), DefaultConfig = {
description: "",
driver: DefaultDriverOrder.slice(),
name: "localforage",
// Default DB size is _JUST UNDER_ 5MB, as it's the highest size
// we can use without a prompt.
size: 4980736,
storeName: "keyvaluepairs",
version: 1
};
function callWhenReady(localForageInstance, libraryMethod) {
localForageInstance[libraryMethod] = function() {
var _args = arguments;
return localForageInstance.ready().then(function() {
return localForageInstance[libraryMethod].apply(localForageInstance, _args);
});
};
}
function extend() {
for (var i = 1; i < arguments.length; i++) {
var arg = arguments[i];
if (arg)
for (var _key in arg)
arg.hasOwnProperty(_key) && (isArray2(arg[_key]) ? arguments[0][_key] = arg[_key].slice() : arguments[0][_key] = arg[_key]);
}
return arguments[0];
}
var LocalForage = function() {
function LocalForage2(options) {
_classCallCheck(this, LocalForage2);
for (var driverTypeKey in DefaultDrivers)
if (DefaultDrivers.hasOwnProperty(driverTypeKey)) {
var driver = DefaultDrivers[driverTypeKey], driverName = driver._driver;
this[driverTypeKey] = driverName, DefinedDrivers[driverName] || this.defineDriver(driver);
}
this._defaultConfig = extend({}, DefaultConfig), this._config = extend({}, this._defaultConfig, options), this._driverSet = null, this._initDriver = null, this._ready = false, this._dbInfo = null, this._wrapLibraryMethodsWithReady(), this.setDriver(this._config.driver).catch(function() {
});
}
return LocalForage2.prototype.config = function(options) {
if ((typeof options > "u" ? "undefined" : _typeof(options)) === "object") {
if (this._ready)
return new Error("Can't call config() after localforage has been used.");
for (var i in options) {
if (i === "storeName" && (options[i] = options[i].replace(/\W/g, "_")), i === "version" && typeof options[i] != "number")
return new Error("Database version must be a number.");
this._config[i] = options[i];
}
return "driver" in options && options.driver ? this.setDriver(this._config.driver) : true;
} else return typeof options == "string" ? this._config[options] : this._config;
}, LocalForage2.prototype.defineDriver = function(driverObject, callback, errorCallback) {
var promise = new Promise$12(function(resolve, reject) {
try {
var driverName = driverObject._driver, complianceError = new Error("Custom driver not compliant; see https://mozilla.github.io/localForage/#definedriver");
if (!driverObject._driver) {
reject(complianceError);
return;
}
for (var driverMethods = LibraryMethods.concat("_initStorage"), i = 0, len = driverMethods.length; i < len; i++) {
var driverMethodName = driverMethods[i], isRequired = !includes(OptionalDriverMethods, driverMethodName);
if ((isRequired || driverObject[driverMethodName]) && typeof driverObject[driverMethodName] != "function") {
reject(complianceError);
return;
}
}
var configureMissingMethods = function() {
for (var methodNotImplementedFactory = function(methodName) {
return function() {
var error = new Error("Method " + methodName + " is not implemented by the current driver"), promise2 = Promise$12.reject(error);
return executeCallback2(promise2, arguments[arguments.length - 1]), promise2;
};
}, _i = 0, _len = OptionalDriverMethods.length; _i < _len; _i++) {
var optionalDriverMethod = OptionalDriverMethods[_i];
driverObject[optionalDriverMethod] || (driverObject[optionalDriverMethod] = methodNotImplementedFactory(optionalDriverMethod));
}
};
configureMissingMethods();
var setDriverSupport = function(support) {
DefinedDrivers[driverName] && console.info("Redefining LocalForage driver: " + driverName), DefinedDrivers[driverName] = driverObject, DriverSupport[driverName] = support, resolve();
};
"_support" in driverObject ? driverObject._support && typeof driverObject._support == "function" ? driverObject._support().then(setDriverSupport, reject) : setDriverSupport(!!driverObject._support) : setDriverSupport(!0);
} catch (e) {
reject(e);
}
});
return executeTwoCallbacks(promise, callback, errorCallback), promise;
}, LocalForage2.prototype.driver = function() {
return this._driver || null;
}, LocalForage2.prototype.getDriver = function(driverName, callback, errorCallback) {
var getDriverPromise = DefinedDrivers[driverName] ? Promise$12.resolve(DefinedDrivers[driverName]) : Promise$12.reject(new Error("Driver not found."));
return executeTwoCallbacks(getDriverPromise, callback, errorCallback), getDriverPromise;
}, LocalForage2.prototype.getSerializer = function(callback) {
var serializerPromise = Promise$12.resolve(localforageSerializer);
return executeTwoCallbacks(serializerPromise, callback), serializerPromise;
}, LocalForage2.prototype.ready = function(callback) {
var self2 = this, promise = self2._driverSet.then(function() {
return self2._ready === null && (self2._ready = self2._initDriver()), self2._ready;
});
return executeTwoCallbacks(promise, callback, callback), promise;
}, LocalForage2.prototype.setDriver = function(drivers, callback, errorCallback) {
var self2 = this;
isArray2(drivers) || (drivers = [drivers]);
var supportedDrivers = this._getSupportedDrivers(drivers);
function setDriverToConfig() {
self2._config.driver = self2.driver();
}
function extendSelfWithDriver(driver) {
return self2._extend(driver), setDriverToConfig(), self2._ready = self2._initStorage(self2._config), self2._ready;
}
function initDriver(supportedDrivers2) {
return function() {
var currentDriverIndex = 0;
function driverPromiseLoop() {
for (; currentDriverIndex < supportedDrivers2.length; ) {
var driverName = supportedDrivers2[currentDriverIndex];
return currentDriverIndex++, self2._dbInfo = null, self2._ready = null, self2.getDriver(driverName).then(extendSelfWithDriver).catch(driverPromiseLoop);
}
setDriverToConfig();
var error = new Error("No available storage method found.");
return self2._driverSet = Promise$12.reject(error), self2._driverSet;
}
return driverPromiseLoop();
};
}
var oldDriverSetDone = this._driverSet !== null ? this._driverSet.catch(function() {
return Promise$12.resolve();
}) : Promise$12.resolve();
return this._driverSet = oldDriverSetDone.then(function() {
var driverName = supportedDrivers[0];
return self2._dbInfo = null, self2._ready = null, self2.getDriver(driverName).then(function(driver) {
self2._driver = driver._driver, setDriverToConfig(), self2._wrapLibraryMethodsWithReady(), self2._initDriver = initDriver(supportedDrivers);
});
}).catch(function() {
setDriverToConfig();
var error = new Error("No available storage method found.");
return self2._driverSet = Promise$12.reject(error), self2._driverSet;
}), executeTwoCallbacks(this._driverSet, callback, errorCallback), this._driverSet;
}, LocalForage2.prototype.supports = function(driverName) {
return !!DriverSupport[driverName];
}, LocalForage2.prototype._extend = function(libraryMethodsAndProperties) {
extend(this, libraryMethodsAndProperties);
}, LocalForage2.prototype._getSupportedDrivers = function(drivers) {
for (var supportedDrivers = [], i = 0, len = drivers.length; i < len; i++) {
var driverName = drivers[i];
this.supports(driverName) && supportedDrivers.push(driverName);
}
return supportedDrivers;
}, LocalForage2.prototype._wrapLibraryMethodsWithReady = function() {
for (var i = 0, len = LibraryMethods.length; i < len; i++)
callWhenReady(this, LibraryMethods[i]);
}, LocalForage2.prototype.createInstance = function(options) {
return new LocalForage2(options);
}, LocalForage2;
}(), localforage_js = new LocalForage();
module3.exports = localforage_js;
}, { 3: 3 }] }, {}, [4])(4);
});
}(localforage$1)), localforage$1.exports;
}
var localforageExports = requireLocalforage();
const localforage = /* @__PURE__ */ getDefaultExportFromCjs(localforageExports);
function getSerializerPromise(localForageInstance) {
return getSerializerPromise.result ? getSerializerPromise.result : !localForageInstance || typeof localForageInstance.getSerializer != "function" ? Promise.reject(new Error("localforage.getSerializer() was not available! localforage v1.4+ is required!")) : (getSerializerPromise.result = localForageInstance.getSerializer(), getSerializerPromise.result);
}
function executeCallback(promise, callback) {
callback && promise.then(function(result) {
callback(null, result);
}, function(error) {
callback(error);
});
}
function forEachItem(items, keyFn, valueFn, loopFn) {
function ensurePropGetterMethod(propFn, defaultPropName) {
var propName = propFn || defaultPropName;
return (!propFn || typeof propFn != "function") && typeof propName == "string" && (propFn = function(item2) {
return item2[propName];
}), propFn;
}
var result = [];
if (Object.prototype.toString.call(items) === "[object Array]") {
keyFn = ensurePropGetterMethod(keyFn, "key"), valueFn = ensurePropGetterMethod(valueFn, "value");
for (var i = 0, len = items.length; i < len; i++) {
var item = items[i];
result.push(loopFn(keyFn(item), valueFn(item)));
}
} else
for (var prop in items)
items.hasOwnProperty(prop) && result.push(loopFn(prop, items[prop]));
return result;
}
function setItemsIndexedDB(items, keyFn, valueFn, callback) {
var localforageInstance = this, promise = localforageInstance.ready().then(function() {
return new Promise(function(resolve, reject) {
var dbInfo = localforageInstance._dbInfo, transaction = dbInfo.db.transaction(dbInfo.storeName, "readwrite"), store = transaction.objectStore(dbInfo.storeName), lastError;
transaction.oncomplete = function() {
resolve(items);
}, transaction.onabort = transaction.onerror = function(event) {
reject(lastError || event.target);
};
function requestOnError(evt) {
var request = evt.target || this;
lastError = request.error || request.transaction.error, reject(lastError);
}
forEachItem(items, keyFn, valueFn, function(key, value) {
value === null && (value = void 0);
var request = store.put(value, key);
request.onerror = requestOnError;
});
});
});
return executeCallback(promise, callback), promise;
}
function setItemsWebsql(items, keyFn, valueFn, callback) {
var localforageInstance = this, promise = new Promise(function(resolve, reject) {
localforageInstance.ready().then(function() {
return getSerializerPromise(localforageInstance);
}).then(function(serializer) {
var dbInfo = localforageInstance._dbInfo;
dbInfo.db.transaction(
function(t2) {
var query = "INSERT OR REPLACE INTO " + dbInfo.storeName + " (key, value) VALUES (?, ?)", itemPromises = forEachItem(items, keyFn, valueFn, function(key, value) {
return new Promise(function(resolve2, reject2) {
serializer.serialize(value, function(value2, error) {
error ? reject2(error) : t2.executeSql(query, [key, value2], function() {
resolve2();
}, function(t3, error2) {
reject2(error2);
});
});
});
});
Promise.all(itemPromises).then(function() {
resolve(items);
}, reject);
},
function(sqlError) {
reject(sqlError);
}
/*, function() {
if (resolving) {
resolve(items);
}
}*/
);
}).catch(reject);
});
return executeCallback(promise, callback), promise;
}
function setItemsGeneric(items, keyFn, valueFn, callback) {
var localforageInstance = this, itemPromises = forEachItem(items, keyFn, valueFn, function(key, value) {
return localforageInstance.setItem(key, value);
}), promise = Promise.all(itemPromises);
return executeCallback(promise, callback), promise;
}
function localforageSetItems(items, keyFn, valueFn, callback) {
var localforageInstance = this, currentDriver = localforageInstance.driver();
return currentDriver === localforageInstance.INDEXEDDB ? setItemsIndexedDB.call(localforageInstance, items, keyFn, valueFn, callback) : currentDriver === localforageInstance.WEBSQL ? setItemsWebsql.call(localforageInstance, items, keyFn, valueFn, callback) : setItemsGeneric.call(localforageInstance, items, keyFn, valueFn, callback);
}
function extendPrototype(localforage$$1) {
var localforagePrototype = Object.getPrototypeOf(localforage$$1);
localforagePrototype && (localforagePrototype.setItems = localforageSetItems, localforagePrototype.setItems.indexedDB = function() {
return setItemsIndexedDB.apply(this, arguments);
}, localforagePrototype.setItems.websql = function() {
return setItemsWebsql.apply(this, arguments);
}, localforagePrototype.setItems.generic = function() {
return setItemsGeneric.apply(this, arguments);
});
}
extendPrototype(localforage);
var md5$1 = { exports: {} }, crypt = { exports: {} }, hasRequiredCrypt;
function requireCrypt() {
return hasRequiredCrypt || (hasRequiredCrypt = 1, function() {
var base64map = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/", crypt$1 = {
// Bit-wise rotation left
rotl: function(n, b) {
return n << b | n >>> 32 - b;
},
// Bit-wise rotation right
rotr: function(n, b) {
return n << 32 - b | n >>> b;
},
// Swap big-endian to little-endian and vice versa
endian: function(n) {
if (n.constructor == Number)
return crypt$1.rotl(n, 8) & 16711935 | crypt$1.rotl(n, 24) & 4278255360;
for (var i = 0; i < n.length; i++)
n[i] = crypt$1.endian(n[i]);
return n;
},
// Generate an array of any length of random bytes
randomBytes: function(n) {
for (var bytes = []; n > 0; n--)
bytes.push(Math.floor(Math.random() * 256));
return bytes;
},
// Convert a byte array to big-endian 32-bit words
bytesToWords: function(bytes) {
for (var words = [], i = 0, b = 0; i < bytes.length; i++, b += 8)
words[b >>> 5] |= bytes[i] << 24 - b % 32;
return words;
},
// Convert big-endian 32-bit words to a byte array
wordsToBytes: function(words) {
for (var bytes = [], b = 0; b < words.length * 32; b += 8)
bytes.push(words[b >>> 5] >>> 24 - b % 32 & 255);
return bytes;
},
// Convert a byte array to a hex string
bytesToHex: function(bytes) {
for (var hex = [], i = 0; i < bytes.length; i++)
hex.push((bytes[i] >>> 4).toString(16)), hex.push((bytes[i] & 15).toString(16));
return hex.join("");
},
// Convert a hex string to a byte array
hexToBytes: function(hex) {
for (var bytes = [], c = 0; c < hex.length; c += 2)
bytes.push(parseInt(hex.substr(c, 2), 16));
return bytes;
},
// Convert a byte array to a base-64 string
bytesToBase64: function(bytes) {
for (var base64 = [], i = 0; i < bytes.length; i += 3)
for (var triplet = bytes[i] << 16 | bytes[i + 1] << 8 | bytes[i + 2], j = 0; j < 4; j++)
i * 8 + j * 6 <= bytes.length * 8 ? base64.push(base64map.charAt(triplet >>> 6 * (3 - j) & 63)) : base64.push("=");
return base64.join("");
},
// Convert a base-64 string to a byte array
base64ToBytes: function(base64) {
base64 = base64.replace(/[^A-Z0-9+\/]/ig, "");
for (var bytes = [], i = 0, imod4 = 0; i < base64.length; imod4 = ++i % 4)
imod4 != 0 && bytes.push((base64map.indexOf(base64.charAt(i - 1)) & Math.pow(2, -2 * imod4 + 8) - 1) << imod4 * 2 | base64map.indexOf(base64.charAt(i)) >>> 6 - imod4 * 2);
return bytes;
}
};
crypt.exports = crypt$1;
}()), crypt.exports;
}
var charenc_1, hasRequiredCharenc;
function requireCharenc() {
if (hasRequiredCharenc) return charenc_1;
hasRequiredCharenc = 1;
var charenc = {
// UTF-8 encoding
utf8: {
// Convert a string to a byte array
stringToBytes: function(str) {
return charenc.bin.stringToBytes(unescape(encodeURIComponent(str)));
},
// Convert a byte array to a string
bytesToString: function(bytes) {
return decodeURIComponent(escape(charenc.bin.bytesToString(bytes)));
}
},
// Binary encoding
bin: {
// Convert a string to a byte array
stringToBytes: function(str) {
for (var bytes = [], i = 0; i < str.length; i++)
bytes.push(str.charCodeAt(i) & 255);
return bytes;
},
// Convert a byte array to a string
bytesToString: function(bytes) {
for (var str = [], i = 0; i < bytes.length; i++)
str.push(String.fromCharCode(bytes[i]));
return str.join("");
}
}
};
return charenc_1 = charenc, charenc_1;
}
var isBuffer_1, hasRequiredIsBuffer;
function requireIsBuffer() {
if (hasRequiredIsBuffer) return isBuffer_1;
hasRequiredIsBuffer = 1, isBuffer_1 = function(obj) {
return obj != null && (isBuffer2(obj) || isSlowBuffer(obj) || !!obj._isBuffer);
};
function isBuffer2(obj) {
return !!obj.constructor && typeof obj.constructor.isBuffer == "function" && obj.constructor.isBuffer(obj);
}
function isSlowBuffer(obj) {
return typeof obj.readFloatLE == "function" && typeof obj.slice == "function" && isBuffer2(obj.slice(0, 0));
}
return isBuffer_1;
}
var hasRequiredMd5;
function requireMd5() {
return hasRequiredMd5 || (hasRequiredMd5 = 1, function() {
var crypt2 = requireCrypt(), utf8 = requireCharenc().utf8, isBuffer2 = requireIsBuffer(), bin = requireCharenc().bin, md52 = function(message, options) {
message.constructor == String ? options && options.encoding === "binary" ? message = bin.stringToBytes(message) : message = utf8.stringToBytes(message) : isBuffer2(message) ? message = Array.prototype.slice.call(message, 0) : !Array.isArray(message) && message.constructor !== Uint8Array && (message = message.toString());
for (var m = crypt2.bytesToWords(message), l = message.length * 8, a = 1732584193, b = -271733879, c = -1732584194, d = 271733878, i = 0; i < m.length; i++)
m[i] = (m[i] << 8 | m[i] >>> 24) & 16711935 | (m[i] << 24 | m[i] >>> 8) & 4278255360;
m[l >>> 5] |= 128 << l % 32, m[(l + 64 >>> 9 << 4) + 14] = l;
for (var FF = md52._ff, GG = md52._gg, HH = md52._hh, II = md52._ii, i = 0; i < m.length; i += 16) {
var aa = a, bb = b, cc = c, dd = d;
a = FF(a, b, c, d, m[i + 0], 7, -680876936), d = FF(d, a, b, c, m[i + 1], 12, -389564586), c = FF(c, d, a, b, m[i + 2], 17, 606105819), b = FF(b, c, d, a, m[i + 3], 22, -1044525330), a = FF(a, b, c, d, m[i + 4], 7, -176418897), d = FF(d, a, b, c, m[i + 5], 12, 1200080426), c = FF(c, d, a, b, m[i + 6], 17, -1473231341), b = FF(b, c, d, a, m[i + 7], 22, -45705983), a = FF(a, b, c, d, m[i + 8], 7, 1770035416), d = FF(d, a, b, c, m[i + 9], 12, -1958414417), c = FF(c, d, a, b, m[i + 10], 17, -42063), b = FF(b, c, d, a, m[i + 11], 22, -1990404162), a = FF(a, b, c, d, m[i + 12], 7, 1804603682), d = FF(d, a, b, c, m[i + 13], 12, -40341101), c = FF(c, d, a, b, m[i + 14], 17, -1502002290), b = FF(b, c, d, a, m[i + 15], 22, 1236535329), a = GG(a, b, c, d, m[i + 1], 5, -165796510), d = GG(d, a, b, c, m[i + 6], 9, -1069501632), c = GG(c, d, a, b, m[i + 11], 14, 643717713), b = GG(b, c, d, a, m[i + 0], 20, -373897302), a = GG(a, b, c, d, m[i + 5], 5, -701558691), d = GG(d, a, b, c, m[i + 10], 9, 38016083), c = GG(c, d, a, b, m[i + 15], 14, -660478335), b = GG(b, c, d, a, m[i + 4], 20, -405537848), a = GG(a, b, c, d, m[i + 9], 5, 568446438), d = GG(d, a, b, c, m[i + 14], 9, -1019803690), c = GG(c, d, a, b, m[i + 3], 14, -187363961), b = GG(b, c, d, a, m[i + 8], 20, 1163531501), a = GG(a, b, c, d, m[i + 13], 5, -1444681467), d = GG(d, a, b, c, m[i + 2], 9, -51403784), c = GG(c, d, a, b, m[i + 7], 14, 1735328473), b = GG(b, c, d, a, m[i + 12], 20, -1926607734), a = HH(a, b, c, d, m[i + 5], 4, -378558), d = HH(d, a, b, c, m[i + 8], 11, -2022574463), c = HH(c, d, a, b, m[i + 11], 16, 1839030562), b = HH(b, c, d, a, m[i + 14], 23, -35309556), a = HH(a, b, c, d, m[i + 1], 4, -1530992060), d = HH(d, a, b, c, m[i + 4], 11, 1272893353), c = HH(c, d, a, b, m[i + 7], 16, -155497632), b = HH(b, c, d, a, m[i + 10], 23, -1094730640), a = HH(a, b, c, d, m[i + 13], 4, 681279174), d = HH(d, a, b, c, m[i + 0], 11, -358537222), c = HH(c, d, a, b, m[i + 3], 16, -722521979), b = HH(b, c, d, a, m[i + 6], 23, 76029189), a = HH(a, b, c, d, m[i + 9], 4, -640364487), d = HH(d, a, b, c, m[i + 12], 11, -421815835), c = HH(c, d, a, b, m[i + 15], 16, 530742520), b = HH(b, c, d, a, m[i + 2], 23, -995338651), a = II(a, b, c, d, m[i + 0], 6, -198630844), d = II(d, a, b, c, m[i + 7], 10, 1126891415), c = II(c, d, a, b, m[i + 14], 15, -1416354905), b = II(b, c, d, a, m[i + 5], 21, -57434055), a = II(a, b, c, d, m[i + 12], 6, 1700485571), d = II(d, a, b, c, m[i + 3], 10, -1894986606), c = II(c, d, a, b, m[i + 10], 15, -1051523), b = II(b, c, d, a, m[i + 1], 21, -2054922799), a = II(a, b, c, d, m[i + 8], 6, 1873313359), d = II(d, a, b, c, m[i + 15], 10, -30611744), c = II(c, d, a, b, m[i + 6], 15, -1560198380), b = II(b, c, d, a, m[i + 13], 21, 1309151649), a = II(a, b, c, d, m[i + 4], 6, -145523070), d = II(d, a, b, c, m[i + 11], 10, -1120210379), c = II(c, d, a, b, m[i + 2], 15, 718787259), b = II(b, c, d, a, m[i + 9], 21, -343485551), a = a + aa >>> 0, b = b + bb >>> 0, c = c + cc >>> 0, d = d + dd >>> 0;
}
return crypt2.endian([a, b, c, d]);
};
md52._ff = function(a, b, c, d, x, s, t2) {
var n = a + (b & c | ~b & d) + (x >>> 0) + t2;
return (n << s | n >>> 32 - s) + b;
}, md52._gg = function(a, b, c, d, x, s, t2) {
var n = a + (b & d | c & ~d) + (x >>> 0) + t2;
return (n << s | n >>> 32 - s) + b;
}, md52._hh = function(a, b, c, d, x, s, t2) {
var n = a + (b ^ c ^ d) + (x >>> 0) + t2;
return (n << s | n >>> 32 - s) + b;
}, md52._ii = function(a, b, c, d, x, s, t2) {
var n = a + (c ^ (b | ~d)) + (x >>> 0) + t2;
return (n << s | n >>> 32 - s) + b;
}, md52._blocksize = 16, md52._digestsize = 16, md5$1.exports = function(message, options) {
if (message == null)
throw new Error("Illegal argument " + message);
var digestbytes = crypt2.wordsToBytes(md52(message, options));
return options && options.asBytes ? digestbytes : options && options.asString ? bin.bytesToString(digestbytes) : crypt2.bytesToHex(digestbytes);
};
}()), md5$1.exports;
}
var md5Exports = requireMd5();
const md5 = /* @__PURE__ */ getDefaultExportFromCjs(md5Exports), dateTimeFormatter = new Intl.DateTimeFormat(void 0, {
year: "numeric",
month: "2-digit",
day: "2-digit",
hour: "2-digit",
minute: "2-digit",
second: "2-digit",
hour12: false
}), numberFormatter = new Intl.NumberFormat(), removeIllegalFilenameChars = (name) => name.replace(/[/\\:*?"<>|]/g, "");
const proxyMarker = Symbol("Comlink.proxy"), createEndpoint = Symbol("Comlink.endpoint"), releaseProxy = Symbol("Comlink.releaseProxy"), finalizer = Symbol("Comlink.finalizer"), throwMarker = Symbol("Comlink.thrown"), isObject$2 = (val) => typeof val == "object" && val !== null || typeof val == "function", proxyTransferHandler = {
canHandle: (val) => isObject$2(val) && val[proxyMarker],
serialize(obj) {
const { port1, port2 } = new MessageChannel();
return expose(obj, port1), [port2, [port2]];
},
deserialize(port) {
return port.start(), wrap(port);
}
}, throwTransferHandler = {
canHandle: (value) => isObject$2(value) && throwMarker in value,
serialize({ value }) {
let serialized;
return value instanceof Error ? serialized = {
isError: true,
value: {
message: value.message,
name: value.name,
stack: value.stack
}
} : serialized = { isError: false, value }, [serialized, []];
},
deserialize(serialized) {
throw serialized.isError ? Object.assign(new Error(serialized.value.message), serialized.value) : serialized.value;
}
}, transferHandlers = /* @__PURE__ */ new Map([
["proxy", proxyTransferHandler],
["throw", throwTransferHandler]
]);
function isAllowedOrigin(allowedOrigins, origin) {
for (const allowedOrigin of allowedOrigins)
if (origin === allowedOrigin || allowedOrigin === "*" || allowedOrigin instanceof RegExp && allowedOrigin.test(origin))
return true;
return false;
}
function expose(obj, ep = globalThis, allowedOrigins = ["*"]) {
ep.addEventListener("message", function callback(ev) {
if (!ev || !ev.data)
return;
if (!isAllowedOrigin(allowedOrigins, ev.origin)) {
console.warn(`Invalid origin '${ev.origin}' for comlink proxy`);
return;
}
const { id, type, path } = Object.assign({ path: [] }, ev.data), argumentList = (ev.data.argumentList || []).map(fromWireValue);
let returnValue;
try {
const parent = path.slice(0, -1).reduce((obj2, prop) => obj2[prop], obj), rawValue = path.reduce((obj2, prop) => obj2[prop], obj);
switch (type) {
case "GET":
returnValue = rawValue;
break;
case "SET":
parent[path.slice(-1)[0]] = fromWireValue(ev.data.value), returnValue = !0;
break;
case "APPLY":
returnValue = rawValue.apply(parent, argumentList);
break;
case "CONSTRUCT":
{
const value = new rawValue(...argumentList);
returnValue = proxy(value);
}
break;
case "ENDPOINT":
{
const { port1, port2 } = new MessageChannel();
expose(obj, port2), returnValue = transfer(port1, [port1]);
}
break;
case "RELEASE":
returnValue = void 0;
break;
default:
return;
}
} catch (value) {
returnValue = { value, [throwMarker]: 0 };
}
Promise.resolve(returnValue).catch((value) => ({ value, [throwMarker]: 0 })).then((returnValue2) => {
const [wireValue, transferables] = toWireValue(returnValue2);
ep.postMessage(Object.assign(Object.assign({}, wireValue), { id }), transferables), type === "RELEASE" && (ep.removeEventListener("message", callback), closeEndPoint(ep), finalizer in obj && typeof obj[finalizer] == "function" && obj[finalizer]());
}).catch((error) => {
const [wireValue, transferables] = toWireValue({
value: new TypeError("Unserializable return value"),
[throwMarker]: 0
});
ep.postMessage(Object.assign(Object.assign({}, wireValue), { id }), transferables);
});
}), ep.start && ep.start();
}
function isMessagePort(endpoint) {
return endpoint.constructor.name === "MessagePort";
}
function closeEndPoint(endpoint) {
isMessagePort(endpoint) && endpoint.close();
}
function wrap(ep, target) {
const pendingListeners = /* @__PURE__ */ new Map();
return ep.addEventListener("message", function(ev) {
const { data } = ev;
if (!data || !data.id)
return;
const resolver = pendingListeners.get(data.id);
if (resolver)
try {
resolver(data);
} finally {
pendingListeners.delete(data.id);
}
}), createProxy(ep, pendingListeners, [], target);
}
function throwIfProxyReleased(isReleased) {
if (isReleased)
throw new Error("Proxy has been released and is not useable");
}
function releaseEndpoint(ep) {
return requestResponseMessage(ep, /* @__PURE__ */ new Map(), {
type: "RELEASE"
}).then(() => {
closeEndPoint(ep);
});
}
const proxyCounter = /* @__PURE__ */ new WeakMap(), proxyFinalizers = "FinalizationRegistry" in globalThis && new FinalizationRegistry((ep) => {
const newCount = (proxyCounter.get(ep) || 0) - 1;
proxyCounter.set(ep, newCount), newCount === 0 && releaseEndpoint(ep);
});
function registerProxy(proxy2, ep) {
const newCount = (proxyCounter.get(ep) || 0) + 1;
proxyCounter.set(ep, newCount), proxyFinalizers && proxyFinalizers.register(proxy2, ep, proxy2);
}
function unregisterProxy(proxy2) {
proxyFinalizers && proxyFinalizers.unregister(proxy2);
}
function createProxy(ep, pendingListeners, path = [], target = function() {
}) {
let isProxyReleased = false;
const proxy2 = new Proxy(target, {
get(_target, prop) {
if (throwIfProxyReleased(isProxyReleased), prop === releaseProxy)
return () => {
unregisterProxy(proxy2), releaseEndpoint(ep), pendingListeners.clear(), isProxyReleased = true;
};
if (prop === "then") {
if (path.length === 0)
return { then: () => proxy2 };
const r = requestResponseMessage(ep, pendingListeners, {
type: "GET",
path: path.map((p) => p.toString())
}).then(fromWireValue);
return r.then.bind(r);
}
return createProxy(ep, pendingListeners, [...path, prop]);
},
set(_target, prop, rawValue) {
throwIfProxyReleased(isProxyReleased);
const [value, transferables] = toWireValue(rawValue);
return requestResponseMessage(ep, pendingListeners, {
type: "SET",
path: [...path, prop].map((p) => p.toString()),
value
}, transferables).then(fromWireValue);
},
apply(_target, _thisArg, rawArgumentList) {
throwIfProxyReleased(isProxyReleased);
const last2 = path[path.length - 1];
if (last2 === createEndpoint)
return requestResponseMessage(ep, pendingListeners, {
type: "ENDPOINT"
}).then(fromWireValue);
if (last2 === "bind")
return createProxy(ep, pendingListeners, path.slice(0, -1));
const [argumentList, transferables] = processArguments(rawArgumentList);
return requestResponseMessage(ep, pendingListeners, {
type: "APPLY",
path: path.map((p) => p.toString()),
argumentList
}, transferables).then(fromWireValue);
},
construct(_target, rawArgumentList) {
throwIfProxyReleased(isProxyReleased);
const [argumentList, transferables] = processArguments(rawArgumentList);
return requestResponseMessage(ep, pendingListeners, {
type: "CONSTRUCT",
path: path.map((p) => p.toString()),
argumentList
}, transferables).then(fromWireValue);
}
});
return registerProxy(proxy2, ep), proxy2;
}
function myFlat(arr) {
return Array.prototype.concat.apply([], arr);
}
function processArguments(argumentList) {
const processed = argumentList.map(toWireValue);
return [processed.map((v) => v[0]), myFlat(processed.map((v) => v[1]))];
}
const transferCache = /* @__PURE__ */ new WeakMap();
function transfer(obj, transfers) {
return transferCache.set(obj, transfers), obj;
}
function proxy(obj) {
return Object.assign(obj, { [proxyMarker]: true });
}
function toWireValue(value) {
for (const [name, handler] of transferHandlers)
if (handler.canHandle(value)) {
const [serializedValue, transferables] = handler.serialize(value);
return [
{
type: "HANDLER",
name,
value: serializedValue
},
transferables
];
}
return [
{
type: "RAW",
value
},
transferCache.get(value) || []
];
}
function fromWireValue(value) {
switch (value.type) {
case "HANDLER":
return transferHandlers.get(value.name).deserialize(value.value);
case "RAW":
return value.value;
}
}
function requestResponseMessage(ep, pendingListeners, msg, transfers) {
return new Promise((resolve) => {
const id = generateUUID();
pendingListeners.set(id, resolve), ep.start && ep.start(), ep.postMessage(Object.assign({ id }, msg), transfers);
});
}
function generateUUID() {
return new Array(4).fill(0).map(() => Math.floor(Math.random() * Number.MAX_SAFE_INTEGER).toString(16)).join("-");
}
const jsContent$1 = `var __defProp=Object.defineProperty,__defNormalProp=(de,fe,ke)=>fe in de?__defProp(de,fe,{enumerable:!0,configurable:!0,writable:!0,value:ke}):de[fe]=ke,__publicField=(de,fe,ke)=>__defNormalProp(de,typeof fe!="symbol"?fe+"":fe,ke);(function(){"use strict";var de=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function fe(R){return R&&R.__esModule&&Object.prototype.hasOwnProperty.call(R,"default")?R.default:R}function ke(R){throw new Error('Could not dynamically require "'+R+'". Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.')}var Fe={exports:{}},Ne;function Qe(){return Ne||(Ne=1,function(R,$){(function(o){R.exports=o()})(function(){return function o(l,d,c){function e(h,g){if(!d[h]){if(!l[h]){var w=typeof ke=="function"&&ke;if(!g&&w)return w(h,!0);if(t)return t(h,!0);var y=new Error("Cannot find module '"+h+"'");throw y.code="MODULE_NOT_FOUND",y}var s=d[h]={exports:{}};l[h][0].call(s.exports,function(b){var i=l[h][1][b];return e(i||b)},s,s.exports,o,l,d,c)}return d[h].exports}for(var t=typeof ke=="function"&&ke,a=0;a<c.length;a++)e(c[a]);return e}({1:[function(o,l,d){var c=o("./utils"),e=o("./support"),t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";d.encode=function(a){for(var h,g,w,y,s,b,i,m=[],u=0,p=a.length,B=p,P=c.getTypeOf(a)!=="string";u<a.length;)B=p-u,w=P?(h=a[u++],g=u<p?a[u++]:0,u<p?a[u++]:0):(h=a.charCodeAt(u++),g=u<p?a.charCodeAt(u++):0,u<p?a.charCodeAt(u++):0),y=h>>2,s=(3&h)<<4|g>>4,b=1<B?(15&g)<<2|w>>6:64,i=2<B?63&w:64,m.push(t.charAt(y)+t.charAt(s)+t.charAt(b)+t.charAt(i));return m.join("")},d.decode=function(a){var h,g,w,y,s,b,i=0,m=0,u="data:";if(a.substr(0,u.length)===u)throw new Error("Invalid base64 input, it looks like a data url.");var p,B=3*(a=a.replace(/[^A-Za-z0-9+/=]/g,"")).length/4;if(a.charAt(a.length-1)===t.charAt(64)&&B--,a.charAt(a.length-2)===t.charAt(64)&&B--,B%1!=0)throw new Error("Invalid base64 input, bad content length.");for(p=e.uint8array?new Uint8Array(0|B):new Array(0|B);i<a.length;)h=t.indexOf(a.charAt(i++))<<2|(y=t.indexOf(a.charAt(i++)))>>4,g=(15&y)<<4|(s=t.indexOf(a.charAt(i++)))>>2,w=(3&s)<<6|(b=t.indexOf(a.charAt(i++))),p[m++]=h,s!==64&&(p[m++]=g),b!==64&&(p[m++]=w);return p}},{"./support":30,"./utils":32}],2:[function(o,l,d){var c=o("./external"),e=o("./stream/DataWorker"),t=o("./stream/Crc32Probe"),a=o("./stream/DataLengthProbe");function h(g,w,y,s,b){this.compressedSize=g,this.uncompressedSize=w,this.crc32=y,this.compression=s,this.compressedContent=b}h.prototype={getContentWorker:function(){var g=new e(c.Promise.resolve(this.compressedContent)).pipe(this.compression.uncompressWorker()).pipe(new a("data_length")),w=this;return g.on("end",function(){if(this.streamInfo.data_length!==w.uncompressedSize)throw new Error("Bug : uncompressed data size mismatch")}),g},getCompressedWorker:function(){return new e(c.Promise.resolve(this.compressedContent)).withStreamInfo("compressedSize",this.compressedSize).withStreamInfo("uncompressedSize",this.uncompressedSize).withStreamInfo("crc32",this.crc32).withStreamInfo("compression",this.compression)}},h.createWorkerFrom=function(g,w,y){return g.pipe(new t).pipe(new a("uncompressedSize")).pipe(w.compressWorker(y)).pipe(new a("compressedSize")).withStreamInfo("compression",w)},l.exports=h},{"./external":6,"./stream/Crc32Probe":25,"./stream/DataLengthProbe":26,"./stream/DataWorker":27}],3:[function(o,l,d){var c=o("./stream/GenericWorker");d.STORE={magic:"\\0\\0",compressWorker:function(){return new c("STORE compression")},uncompressWorker:function(){return new c("STORE decompression")}},d.DEFLATE=o("./flate")},{"./flate":7,"./stream/GenericWorker":28}],4:[function(o,l,d){var c=o("./utils"),e=function(){for(var t,a=[],h=0;h<256;h++){t=h;for(var g=0;g<8;g++)t=1&t?3988292384^t>>>1:t>>>1;a[h]=t}return a}();l.exports=function(t,a){return t!==void 0&&t.length?c.getTypeOf(t)!=="string"?function(h,g,w,y){var s=e,b=y+w;h^=-1;for(var i=y;i<b;i++)h=h>>>8^s[255&(h^g[i])];return-1^h}(0|a,t,t.length,0):function(h,g,w,y){var s=e,b=y+w;h^=-1;for(var i=y;i<b;i++)h=h>>>8^s[255&(h^g.charCodeAt(i))];return-1^h}(0|a,t,t.length,0):0}},{"./utils":32}],5:[function(o,l,d){d.base64=!1,d.binary=!1,d.dir=!1,d.createFolders=!0,d.date=null,d.compression=null,d.compressionOptions=null,d.comment=null,d.unixPermissions=null,d.dosPermissions=null},{}],6:[function(o,l,d){var c=null;c=typeof Promise<"u"?Promise:o("lie"),l.exports={Promise:c}},{lie:37}],7:[function(o,l,d){var c=typeof Uint8Array<"u"&&typeof Uint16Array<"u"&&typeof Uint32Array<"u",e=o("pako"),t=o("./utils"),a=o("./stream/GenericWorker"),h=c?"uint8array":"array";function g(w,y){a.call(this,"FlateWorker/"+w),this._pako=null,this._pakoAction=w,this._pakoOptions=y,this.meta={}}d.magic="\\b\\0",t.inherits(g,a),g.prototype.processChunk=function(w){this.meta=w.meta,this._pako===null&&this._createPako(),this._pako.push(t.transformTo(h,w.data),!1)},g.prototype.flush=function(){a.prototype.flush.call(this),this._pako===null&&this._createPako(),this._pako.push([],!0)},g.prototype.cleanUp=function(){a.prototype.cleanUp.call(this),this._pako=null},g.prototype._createPako=function(){this._pako=new e[this._pakoAction]({raw:!0,level:this._pakoOptions.level||-1});var w=this;this._pako.onData=function(y){w.push({data:y,meta:w.meta})}},d.compressWorker=function(w){return new g("Deflate",w)},d.uncompressWorker=function(){return new g("Inflate",{})}},{"./stream/GenericWorker":28,"./utils":32,pako:38}],8:[function(o,l,d){function c(s,b){var i,m="";for(i=0;i<b;i++)m+=String.fromCharCode(255&s),s>>>=8;return m}function e(s,b,i,m,u,p){var B,P,C=s.file,L=s.compression,I=p!==h.utf8encode,D=t.transformTo("string",p(C.name)),O=t.transformTo("string",h.utf8encode(C.name)),j=C.comment,K=t.transformTo("string",p(j)),_=t.transformTo("string",h.utf8encode(j)),z=O.length!==C.name.length,n=_.length!==j.length,M="",J="",U="",ee=C.dir,W=C.date,Q={crc32:0,compressedSize:0,uncompressedSize:0};b&&!i||(Q.crc32=s.crc32,Q.compressedSize=s.compressedSize,Q.uncompressedSize=s.uncompressedSize);var E=0;b&&(E|=8),I||!z&&!n||(E|=2048);var S=0,Y=0;ee&&(S|=16),u==="UNIX"?(Y=798,S|=function(H,ae){var le=H;return H||(le=ae?16893:33204),(65535&le)<<16}(C.unixPermissions,ee)):(Y=20,S|=function(H){return 63&(H||0)}(C.dosPermissions)),B=W.getUTCHours(),B<<=6,B|=W.getUTCMinutes(),B<<=5,B|=W.getUTCSeconds()/2,P=W.getUTCFullYear()-1980,P<<=4,P|=W.getUTCMonth()+1,P<<=5,P|=W.getUTCDate(),z&&(J=c(1,1)+c(g(D),4)+O,M+="up"+c(J.length,2)+J),n&&(U=c(1,1)+c(g(K),4)+_,M+="uc"+c(U.length,2)+U);var G="";return G+=\`
\\0\`,G+=c(E,2),G+=L.magic,G+=c(B,2),G+=c(P,2),G+=c(Q.crc32,4),G+=c(Q.compressedSize,4),G+=c(Q.uncompressedSize,4),G+=c(D.length,2),G+=c(M.length,2),{fileRecord:w.LOCAL_FILE_HEADER+G+D+M,dirRecord:w.CENTRAL_FILE_HEADER+c(Y,2)+G+c(K.length,2)+"\\0\\0\\0\\0"+c(S,4)+c(m,4)+D+M+K}}var t=o("../utils"),a=o("../stream/GenericWorker"),h=o("../utf8"),g=o("../crc32"),w=o("../signature");function y(s,b,i,m){a.call(this,"ZipFileWorker"),this.bytesWritten=0,this.zipComment=b,this.zipPlatform=i,this.encodeFileName=m,this.streamFiles=s,this.accumulate=!1,this.contentBuffer=[],this.dirRecords=[],this.currentSourceOffset=0,this.entriesCount=0,this.currentFile=null,this._sources=[]}t.inherits(y,a),y.prototype.push=function(s){var b=s.meta.percent||0,i=this.entriesCount,m=this._sources.length;this.accumulate?this.contentBuffer.push(s):(this.bytesWritten+=s.data.length,a.prototype.push.call(this,{data:s.data,meta:{currentFile:this.currentFile,percent:i?(b+100*(i-m-1))/i:100}}))},y.prototype.openedSource=function(s){this.currentSourceOffset=this.bytesWritten,this.currentFile=s.file.name;var b=this.streamFiles&&!s.file.dir;if(b){var i=e(s,b,!1,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);this.push({data:i.fileRecord,meta:{percent:0}})}else this.accumulate=!0},y.prototype.closedSource=function(s){this.accumulate=!1;var b=this.streamFiles&&!s.file.dir,i=e(s,b,!0,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);if(this.dirRecords.push(i.dirRecord),b)this.push({data:function(m){return w.DATA_DESCRIPTOR+c(m.crc32,4)+c(m.compressedSize,4)+c(m.uncompressedSize,4)}(s),meta:{percent:100}});else for(this.push({data:i.fileRecord,meta:{percent:0}});this.contentBuffer.length;)this.push(this.contentBuffer.shift());this.currentFile=null},y.prototype.flush=function(){for(var s=this.bytesWritten,b=0;b<this.dirRecords.length;b++)this.push({data:this.dirRecords[b],meta:{percent:100}});var i=this.bytesWritten-s,m=function(u,p,B,P,C){var L=t.transformTo("string",C(P));return w.CENTRAL_DIRECTORY_END+"\\0\\0\\0\\0"+c(u,2)+c(u,2)+c(p,4)+c(B,4)+c(L.length,2)+L}(this.dirRecords.length,i,s,this.zipComment,this.encodeFileName);this.push({data:m,meta:{percent:100}})},y.prototype.prepareNextSource=function(){this.previous=this._sources.shift(),this.openedSource(this.previous.streamInfo),this.isPaused?this.previous.pause():this.previous.resume()},y.prototype.registerPrevious=function(s){this._sources.push(s);var b=this;return s.on("data",function(i){b.processChunk(i)}),s.on("end",function(){b.closedSource(b.previous.streamInfo),b._sources.length?b.prepareNextSource():b.end()}),s.on("error",function(i){b.error(i)}),this},y.prototype.resume=function(){return!!a.prototype.resume.call(this)&&(!this.previous&&this._sources.length?(this.prepareNextSource(),!0):this.previous||this._sources.length||this.generatedError?void 0:(this.end(),!0))},y.prototype.error=function(s){var b=this._sources;if(!a.prototype.error.call(this,s))return!1;for(var i=0;i<b.length;i++)try{b[i].error(s)}catch{}return!0},y.prototype.lock=function(){a.prototype.lock.call(this);for(var s=this._sources,b=0;b<s.length;b++)s[b].lock()},l.exports=y},{"../crc32":4,"../signature":23,"../stream/GenericWorker":28,"../utf8":31,"../utils":32}],9:[function(o,l,d){var c=o("../compressions"),e=o("./ZipFileWorker");d.generateWorker=function(t,a,h){var g=new e(a.streamFiles,h,a.platform,a.encodeFileName),w=0;try{t.forEach(function(y,s){w++;var b=function(p,B){var P=p||B,C=c[P];if(!C)throw new Error(P+" is not a valid compression method !");return C}(s.options.compression,a.compression),i=s.options.compressionOptions||a.compressionOptions||{},m=s.dir,u=s.date;s._compressWorker(b,i).withStreamInfo("file",{name:y,dir:m,date:u,comment:s.comment||"",unixPermissions:s.unixPermissions,dosPermissions:s.dosPermissions}).pipe(g)}),g.entriesCount=w}catch(y){g.error(y)}return g}},{"../compressions":3,"./ZipFileWorker":8}],10:[function(o,l,d){function c(){if(!(this instanceof c))return new c;if(arguments.length)throw new Error("The constructor with parameters has been removed in JSZip 3.0, please check the upgrade guide.");this.files=Object.create(null),this.comment=null,this.root="",this.clone=function(){var e=new c;for(var t in this)typeof this[t]!="function"&&(e[t]=this[t]);return e}}(c.prototype=o("./object")).loadAsync=o("./load"),c.support=o("./support"),c.defaults=o("./defaults"),c.version="3.10.1",c.loadAsync=function(e,t){return new c().loadAsync(e,t)},c.external=o("./external"),l.exports=c},{"./defaults":5,"./external":6,"./load":11,"./object":15,"./support":30}],11:[function(o,l,d){var c=o("./utils"),e=o("./external"),t=o("./utf8"),a=o("./zipEntries"),h=o("./stream/Crc32Probe"),g=o("./nodejsUtils");function w(y){return new e.Promise(function(s,b){var i=y.decompressed.getContentWorker().pipe(new h);i.on("error",function(m){b(m)}).on("end",function(){i.streamInfo.crc32!==y.decompressed.crc32?b(new Error("Corrupted zip : CRC32 mismatch")):s()}).resume()})}l.exports=function(y,s){var b=this;return s=c.extend(s||{},{base64:!1,checkCRC32:!1,optimizedBinaryString:!1,createFolders:!1,decodeFileName:t.utf8decode}),g.isNode&&g.isStream(y)?e.Promise.reject(new Error("JSZip can't accept a stream when loading a zip file.")):c.prepareContent("the loaded zip file",y,!0,s.optimizedBinaryString,s.base64).then(function(i){var m=new a(s);return m.load(i),m}).then(function(i){var m=[e.Promise.resolve(i)],u=i.files;if(s.checkCRC32)for(var p=0;p<u.length;p++)m.push(w(u[p]));return e.Promise.all(m)}).then(function(i){for(var m=i.shift(),u=m.files,p=0;p<u.length;p++){var B=u[p],P=B.fileNameStr,C=c.resolve(B.fileNameStr);b.file(C,B.decompressed,{binary:!0,optimizedBinaryString:!0,date:B.date,dir:B.dir,comment:B.fileCommentStr.length?B.fileCommentStr:null,unixPermissions:B.unixPermissions,dosPermissions:B.dosPermissions,createFolders:s.createFolders}),B.dir||(b.file(C).unsafeOriginalName=P)}return m.zipComment.length&&(b.comment=m.zipComment),b})}},{"./external":6,"./nodejsUtils":14,"./stream/Crc32Probe":25,"./utf8":31,"./utils":32,"./zipEntries":33}],12:[function(o,l,d){var c=o("../utils"),e=o("../stream/GenericWorker");function t(a,h){e.call(this,"Nodejs stream input adapter for "+a),this._upstreamEnded=!1,this._bindStream(h)}c.inherits(t,e),t.prototype._bindStream=function(a){var h=this;(this._stream=a).pause(),a.on("data",function(g){h.push({data:g,meta:{percent:0}})}).on("error",function(g){h.isPaused?this.generatedError=g:h.error(g)}).on("end",function(){h.isPaused?h._upstreamEnded=!0:h.end()})},t.prototype.pause=function(){return!!e.prototype.pause.call(this)&&(this._stream.pause(),!0)},t.prototype.resume=function(){return!!e.prototype.resume.call(this)&&(this._upstreamEnded?this.end():this._stream.resume(),!0)},l.exports=t},{"../stream/GenericWorker":28,"../utils":32}],13:[function(o,l,d){var c=o("readable-stream").Readable;function e(t,a,h){c.call(this,a),this._helper=t;var g=this;t.on("data",function(w,y){g.push(w)||g._helper.pause(),h&&h(y)}).on("error",function(w){g.emit("error",w)}).on("end",function(){g.push(null)})}o("../utils").inherits(e,c),e.prototype._read=function(){this._helper.resume()},l.exports=e},{"../utils":32,"readable-stream":16}],14:[function(o,l,d){l.exports={isNode:typeof Buffer<"u",newBufferFrom:function(c,e){if(Buffer.from&&Buffer.from!==Uint8Array.from)return Buffer.from(c,e);if(typeof c=="number")throw new Error('The "data" argument must not be a number');return new Buffer(c,e)},allocBuffer:function(c){if(Buffer.alloc)return Buffer.alloc(c);var e=new Buffer(c);return e.fill(0),e},isBuffer:function(c){return Buffer.isBuffer(c)},isStream:function(c){return c&&typeof c.on=="function"&&typeof c.pause=="function"&&typeof c.resume=="function"}}},{}],15:[function(o,l,d){function c(C,L,I){var D,O=t.getTypeOf(L),j=t.extend(I||{},g);j.date=j.date||new Date,j.compression!==null&&(j.compression=j.compression.toUpperCase()),typeof j.unixPermissions=="string"&&(j.unixPermissions=parseInt(j.unixPermissions,8)),j.unixPermissions&&16384&j.unixPermissions&&(j.dir=!0),j.dosPermissions&&16&j.dosPermissions&&(j.dir=!0),j.dir&&(C=u(C)),j.createFolders&&(D=m(C))&&p.call(this,D,!0);var K=O==="string"&&j.binary===!1&&j.base64===!1;I&&I.binary!==void 0||(j.binary=!K),(L instanceof w&&L.uncompressedSize===0||j.dir||!L||L.length===0)&&(j.base64=!1,j.binary=!0,L="",j.compression="STORE",O="string");var _=null;_=L instanceof w||L instanceof a?L:b.isNode&&b.isStream(L)?new i(C,L):t.prepareContent(C,L,j.binary,j.optimizedBinaryString,j.base64);var z=new y(C,_,j);this.files[C]=z}var e=o("./utf8"),t=o("./utils"),a=o("./stream/GenericWorker"),h=o("./stream/StreamHelper"),g=o("./defaults"),w=o("./compressedObject"),y=o("./zipObject"),s=o("./generate"),b=o("./nodejsUtils"),i=o("./nodejs/NodejsStreamInputAdapter"),m=function(C){C.slice(-1)==="/"&&(C=C.substring(0,C.length-1));var L=C.lastIndexOf("/");return 0<L?C.substring(0,L):""},u=function(C){return C.slice(-1)!=="/"&&(C+="/"),C},p=function(C,L){return L=L!==void 0?L:g.createFolders,C=u(C),this.files[C]||c.call(this,C,null,{dir:!0,createFolders:L}),this.files[C]};function B(C){return Object.prototype.toString.call(C)==="[object RegExp]"}var P={load:function(){throw new Error("This method has been removed in JSZip 3.0, please check the upgrade guide.")},forEach:function(C){var L,I,D;for(L in this.files)D=this.files[L],(I=L.slice(this.root.length,L.length))&&L.slice(0,this.root.length)===this.root&&C(I,D)},filter:function(C){var L=[];return this.forEach(function(I,D){C(I,D)&&L.push(D)}),L},file:function(C,L,I){if(arguments.length!==1)return C=this.root+C,c.call(this,C,L,I),this;if(B(C)){var D=C;return this.filter(function(j,K){return!K.dir&&D.test(j)})}var O=this.files[this.root+C];return O&&!O.dir?O:null},folder:function(C){if(!C)return this;if(B(C))return this.filter(function(O,j){return j.dir&&C.test(O)});var L=this.root+C,I=p.call(this,L),D=this.clone();return D.root=I.name,D},remove:function(C){C=this.root+C;var L=this.files[C];if(L||(C.slice(-1)!=="/"&&(C+="/"),L=this.files[C]),L&&!L.dir)delete this.files[C];else for(var I=this.filter(function(O,j){return j.name.slice(0,C.length)===C}),D=0;D<I.length;D++)delete this.files[I[D].name];return this},generate:function(){throw new Error("This method has been removed in JSZip 3.0, please check the upgrade guide.")},generateInternalStream:function(C){var L,I={};try{if((I=t.extend(C||{},{streamFiles:!1,compression:"STORE",compressionOptions:null,type:"",platform:"DOS",comment:null,mimeType:"application/zip",encodeFileName:e.utf8encode})).type=I.type.toLowerCase(),I.compression=I.compression.toUpperCase(),I.type==="binarystring"&&(I.type="string"),!I.type)throw new Error("No output type specified.");t.checkSupport(I.type),I.platform!=="darwin"&&I.platform!=="freebsd"&&I.platform!=="linux"&&I.platform!=="sunos"||(I.platform="UNIX"),I.platform==="win32"&&(I.platform="DOS");var D=I.comment||this.comment||"";L=s.generateWorker(this,I,D)}catch(O){(L=new a("error")).error(O)}return new h(L,I.type||"string",I.mimeType)},generateAsync:function(C,L){return this.generateInternalStream(C).accumulate(L)},generateNodeStream:function(C,L){return(C=C||{}).type||(C.type="nodebuffer"),this.generateInternalStream(C).toNodejsStream(L)}};l.exports=P},{"./compressedObject":2,"./defaults":5,"./generate":9,"./nodejs/NodejsStreamInputAdapter":12,"./nodejsUtils":14,"./stream/GenericWorker":28,"./stream/StreamHelper":29,"./utf8":31,"./utils":32,"./zipObject":35}],16:[function(o,l,d){l.exports=o("stream")},{stream:void 0}],17:[function(o,l,d){var c=o("./DataReader");function e(t){c.call(this,t);for(var a=0;a<this.data.length;a++)t[a]=255&t[a]}o("../utils").inherits(e,c),e.prototype.byteAt=function(t){return this.data[this.zero+t]},e.prototype.lastIndexOfSignature=function(t){for(var a=t.charCodeAt(0),h=t.charCodeAt(1),g=t.charCodeAt(2),w=t.charCodeAt(3),y=this.length-4;0<=y;--y)if(this.data[y]===a&&this.data[y+1]===h&&this.data[y+2]===g&&this.data[y+3]===w)return y-this.zero;return-1},e.prototype.readAndCheckSignature=function(t){var a=t.charCodeAt(0),h=t.charCodeAt(1),g=t.charCodeAt(2),w=t.charCodeAt(3),y=this.readData(4);return a===y[0]&&h===y[1]&&g===y[2]&&w===y[3]},e.prototype.readData=function(t){if(this.checkOffset(t),t===0)return[];var a=this.data.slice(this.zero+this.index,this.zero+this.index+t);return this.index+=t,a},l.exports=e},{"../utils":32,"./DataReader":18}],18:[function(o,l,d){var c=o("../utils");function e(t){this.data=t,this.length=t.length,this.index=0,this.zero=0}e.prototype={checkOffset:function(t){this.checkIndex(this.index+t)},checkIndex:function(t){if(this.length<this.zero+t||t<0)throw new Error("End of data reached (data length = "+this.length+", asked index = "+t+"). Corrupted zip ?")},setIndex:function(t){this.checkIndex(t),this.index=t},skip:function(t){this.setIndex(this.index+t)},byteAt:function(){},readInt:function(t){var a,h=0;for(this.checkOffset(t),a=this.index+t-1;a>=this.index;a--)h=(h<<8)+this.byteAt(a);return this.index+=t,h},readString:function(t){return c.transformTo("string",this.readData(t))},readData:function(){},lastIndexOfSignature:function(){},readAndCheckSignature:function(){},readDate:function(){var t=this.readInt(4);return new Date(Date.UTC(1980+(t>>25&127),(t>>21&15)-1,t>>16&31,t>>11&31,t>>5&63,(31&t)<<1))}},l.exports=e},{"../utils":32}],19:[function(o,l,d){var c=o("./Uint8ArrayReader");function e(t){c.call(this,t)}o("../utils").inherits(e,c),e.prototype.readData=function(t){this.checkOffset(t);var a=this.data.slice(this.zero+this.index,this.zero+this.index+t);return this.index+=t,a},l.exports=e},{"../utils":32,"./Uint8ArrayReader":21}],20:[function(o,l,d){var c=o("./DataReader");function e(t){c.call(this,t)}o("../utils").inherits(e,c),e.prototype.byteAt=function(t){return this.data.charCodeAt(this.zero+t)},e.prototype.lastIndexOfSignature=function(t){return this.data.lastIndexOf(t)-this.zero},e.prototype.readAndCheckSignature=function(t){return t===this.readData(4)},e.prototype.readData=function(t){this.checkOffset(t);var a=this.data.slice(this.zero+this.index,this.zero+this.index+t);return this.index+=t,a},l.exports=e},{"../utils":32,"./DataReader":18}],21:[function(o,l,d){var c=o("./ArrayReader");function e(t){c.call(this,t)}o("../utils").inherits(e,c),e.prototype.readData=function(t){if(this.checkOffset(t),t===0)return new Uint8Array(0);var a=this.data.subarray(this.zero+this.index,this.zero+this.index+t);return this.index+=t,a},l.exports=e},{"../utils":32,"./ArrayReader":17}],22:[function(o,l,d){var c=o("../utils"),e=o("../support"),t=o("./ArrayReader"),a=o("./StringReader"),h=o("./NodeBufferReader"),g=o("./Uint8ArrayReader");l.exports=function(w){var y=c.getTypeOf(w);return c.checkSupport(y),y!=="string"||e.uint8array?y==="nodebuffer"?new h(w):e.uint8array?new g(c.transformTo("uint8array",w)):new t(c.transformTo("array",w)):new a(w)}},{"../support":30,"../utils":32,"./ArrayReader":17,"./NodeBufferReader":19,"./StringReader":20,"./Uint8ArrayReader":21}],23:[function(o,l,d){d.LOCAL_FILE_HEADER="PK",d.CENTRAL_FILE_HEADER="PK",d.CENTRAL_DIRECTORY_END="PK",d.ZIP64_CENTRAL_DIRECTORY_LOCATOR="PK\\x07",d.ZIP64_CENTRAL_DIRECTORY_END="PK",d.DATA_DESCRIPTOR="PK\\x07\\b"},{}],24:[function(o,l,d){var c=o("./GenericWorker"),e=o("../utils");function t(a){c.call(this,"ConvertWorker to "+a),this.destType=a}e.inherits(t,c),t.prototype.processChunk=function(a){this.push({data:e.transformTo(this.destType,a.data),meta:a.meta})},l.exports=t},{"../utils":32,"./GenericWorker":28}],25:[function(o,l,d){var c=o("./GenericWorker"),e=o("../crc32");function t(){c.call(this,"Crc32Probe"),this.withStreamInfo("crc32",0)}o("../utils").inherits(t,c),t.prototype.processChunk=function(a){this.streamInfo.crc32=e(a.data,this.streamInfo.crc32||0),this.push(a)},l.exports=t},{"../crc32":4,"../utils":32,"./GenericWorker":28}],26:[function(o,l,d){var c=o("../utils"),e=o("./GenericWorker");function t(a){e.call(this,"DataLengthProbe for "+a),this.propName=a,this.withStreamInfo(a,0)}c.inherits(t,e),t.prototype.processChunk=function(a){if(a){var h=this.streamInfo[this.propName]||0;this.streamInfo[this.propName]=h+a.data.length}e.prototype.processChunk.call(this,a)},l.exports=t},{"../utils":32,"./GenericWorker":28}],27:[function(o,l,d){var c=o("../utils"),e=o("./GenericWorker");function t(a){e.call(this,"DataWorker");var h=this;this.dataIsReady=!1,this.index=0,this.max=0,this.data=null,this.type="",this._tickScheduled=!1,a.then(function(g){h.dataIsReady=!0,h.data=g,h.max=g&&g.length||0,h.type=c.getTypeOf(g),h.isPaused||h._tickAndRepeat()},function(g){h.error(g)})}c.inherits(t,e),t.prototype.cleanUp=function(){e.prototype.cleanUp.call(this),this.data=null},t.prototype.resume=function(){return!!e.prototype.resume.call(this)&&(!this._tickScheduled&&this.dataIsReady&&(this._tickScheduled=!0,c.delay(this._tickAndRepeat,[],this)),!0)},t.prototype._tickAndRepeat=function(){this._tickScheduled=!1,this.isPaused||this.isFinished||(this._tick(),this.isFinished||(c.delay(this._tickAndRepeat,[],this),this._tickScheduled=!0))},t.prototype._tick=function(){if(this.isPaused||this.isFinished)return!1;var a=null,h=Math.min(this.max,this.index+16384);if(this.index>=this.max)return this.end();switch(this.type){case"string":a=this.data.substring(this.index,h);break;case"uint8array":a=this.data.subarray(this.index,h);break;case"array":case"nodebuffer":a=this.data.slice(this.index,h)}return this.index=h,this.push({data:a,meta:{percent:this.max?this.index/this.max*100:0}})},l.exports=t},{"../utils":32,"./GenericWorker":28}],28:[function(o,l,d){function c(e){this.name=e||"default",this.streamInfo={},this.generatedError=null,this.extraStreamInfo={},this.isPaused=!0,this.isFinished=!1,this.isLocked=!1,this._listeners={data:[],end:[],error:[]},this.previous=null}c.prototype={push:function(e){this.emit("data",e)},end:function(){if(this.isFinished)return!1;this.flush();try{this.emit("end"),this.cleanUp(),this.isFinished=!0}catch(e){this.emit("error",e)}return!0},error:function(e){return!this.isFinished&&(this.isPaused?this.generatedError=e:(this.isFinished=!0,this.emit("error",e),this.previous&&this.previous.error(e),this.cleanUp()),!0)},on:function(e,t){return this._listeners[e].push(t),this},cleanUp:function(){this.streamInfo=this.generatedError=this.extraStreamInfo=null,this._listeners=[]},emit:function(e,t){if(this._listeners[e])for(var a=0;a<this._listeners[e].length;a++)this._listeners[e][a].call(this,t)},pipe:function(e){return e.registerPrevious(this)},registerPrevious:function(e){if(this.isLocked)throw new Error("The stream '"+this+"' has already been used.");this.streamInfo=e.streamInfo,this.mergeStreamInfo(),this.previous=e;var t=this;return e.on("data",function(a){t.processChunk(a)}),e.on("end",function(){t.end()}),e.on("error",function(a){t.error(a)}),this},pause:function(){return!this.isPaused&&!this.isFinished&&(this.isPaused=!0,this.previous&&this.previous.pause(),!0)},resume:function(){if(!this.isPaused||this.isFinished)return!1;var e=this.isPaused=!1;return this.generatedError&&(this.error(this.generatedError),e=!0),this.previous&&this.previous.resume(),!e},flush:function(){},processChunk:function(e){this.push(e)},withStreamInfo:function(e,t){return this.extraStreamInfo[e]=t,this.mergeStreamInfo(),this},mergeStreamInfo:function(){for(var e in this.extraStreamInfo)Object.prototype.hasOwnProperty.call(this.extraStreamInfo,e)&&(this.streamInfo[e]=this.extraStreamInfo[e])},lock:function(){if(this.isLocked)throw new Error("The stream '"+this+"' has already been used.");this.isLocked=!0,this.previous&&this.previous.lock()},toString:function(){var e="Worker "+this.name;return this.previous?this.previous+" -> "+e:e}},l.exports=c},{}],29:[function(o,l,d){var c=o("../utils"),e=o("./ConvertWorker"),t=o("./GenericWorker"),a=o("../base64"),h=o("../support"),g=o("../external"),w=null;if(h.nodestream)try{w=o("../nodejs/NodejsStreamOutputAdapter")}catch{}function y(b,i){return new g.Promise(function(m,u){var p=[],B=b._internalType,P=b._outputType,C=b._mimeType;b.on("data",function(L,I){p.push(L),i&&i(I)}).on("error",function(L){p=[],u(L)}).on("end",function(){try{var L=function(I,D,O){switch(I){case"blob":return c.newBlob(c.transformTo("arraybuffer",D),O);case"base64":return a.encode(D);default:return c.transformTo(I,D)}}(P,function(I,D){var O,j=0,K=null,_=0;for(O=0;O<D.length;O++)_+=D[O].length;switch(I){case"string":return D.join("");case"array":return Array.prototype.concat.apply([],D);case"uint8array":for(K=new Uint8Array(_),O=0;O<D.length;O++)K.set(D[O],j),j+=D[O].length;return K;case"nodebuffer":return Buffer.concat(D);default:throw new Error("concat : unsupported type '"+I+"'")}}(B,p),C);m(L)}catch(I){u(I)}p=[]}).resume()})}function s(b,i,m){var u=i;switch(i){case"blob":case"arraybuffer":u="uint8array";break;case"base64":u="string"}try{this._internalType=u,this._outputType=i,this._mimeType=m,c.checkSupport(u),this._worker=b.pipe(new e(u)),b.lock()}catch(p){this._worker=new t("error"),this._worker.error(p)}}s.prototype={accumulate:function(b){return y(this,b)},on:function(b,i){var m=this;return b==="data"?this._worker.on(b,function(u){i.call(m,u.data,u.meta)}):this._worker.on(b,function(){c.delay(i,arguments,m)}),this},resume:function(){return c.delay(this._worker.resume,[],this._worker),this},pause:function(){return this._worker.pause(),this},toNodejsStream:function(b){if(c.checkSupport("nodestream"),this._outputType!=="nodebuffer")throw new Error(this._outputType+" is not supported by this method");return new w(this,{objectMode:this._outputType!=="nodebuffer"},b)}},l.exports=s},{"../base64":1,"../external":6,"../nodejs/NodejsStreamOutputAdapter":13,"../support":30,"../utils":32,"./ConvertWorker":24,"./GenericWorker":28}],30:[function(o,l,d){if(d.base64=!0,d.array=!0,d.string=!0,d.arraybuffer=typeof ArrayBuffer<"u"&&typeof Uint8Array<"u",d.nodebuffer=typeof Buffer<"u",d.uint8array=typeof Uint8Array<"u",typeof ArrayBuffer>"u")d.blob=!1;else{var c=new ArrayBuffer(0);try{d.blob=new Blob([c],{type:"application/zip"}).size===0}catch{try{var e=new(self.BlobBuilder||self.WebKitBlobBuilder||self.MozBlobBuilder||self.MSBlobBuilder);e.append(c),d.blob=e.getBlob("application/zip").size===0}catch{d.blob=!1}}}try{d.nodestream=!!o("readable-stream").Readable}catch{d.nodestream=!1}},{"readable-stream":16}],31:[function(o,l,d){for(var c=o("./utils"),e=o("./support"),t=o("./nodejsUtils"),a=o("./stream/GenericWorker"),h=new Array(256),g=0;g<256;g++)h[g]=252<=g?6:248<=g?5:240<=g?4:224<=g?3:192<=g?2:1;h[254]=h[254]=1;function w(){a.call(this,"utf-8 decode"),this.leftOver=null}function y(){a.call(this,"utf-8 encode")}d.utf8encode=function(s){return e.nodebuffer?t.newBufferFrom(s,"utf-8"):function(b){var i,m,u,p,B,P=b.length,C=0;for(p=0;p<P;p++)(64512&(m=b.charCodeAt(p)))==55296&&p+1<P&&(64512&(u=b.charCodeAt(p+1)))==56320&&(m=65536+(m-55296<<10)+(u-56320),p++),C+=m<128?1:m<2048?2:m<65536?3:4;for(i=e.uint8array?new Uint8Array(C):new Array(C),p=B=0;B<C;p++)(64512&(m=b.charCodeAt(p)))==55296&&p+1<P&&(64512&(u=b.charCodeAt(p+1)))==56320&&(m=65536+(m-55296<<10)+(u-56320),p++),m<128?i[B++]=m:(m<2048?i[B++]=192|m>>>6:(m<65536?i[B++]=224|m>>>12:(i[B++]=240|m>>>18,i[B++]=128|m>>>12&63),i[B++]=128|m>>>6&63),i[B++]=128|63&m);return i}(s)},d.utf8decode=function(s){return e.nodebuffer?c.transformTo("nodebuffer",s).toString("utf-8"):function(b){var i,m,u,p,B=b.length,P=new Array(2*B);for(i=m=0;i<B;)if((u=b[i++])<128)P[m++]=u;else if(4<(p=h[u]))P[m++]=65533,i+=p-1;else{for(u&=p===2?31:p===3?15:7;1<p&&i<B;)u=u<<6|63&b[i++],p--;1<p?P[m++]=65533:u<65536?P[m++]=u:(u-=65536,P[m++]=55296|u>>10&1023,P[m++]=56320|1023&u)}return P.length!==m&&(P.subarray?P=P.subarray(0,m):P.length=m),c.applyFromCharCode(P)}(s=c.transformTo(e.uint8array?"uint8array":"array",s))},c.inherits(w,a),w.prototype.processChunk=function(s){var b=c.transformTo(e.uint8array?"uint8array":"array",s.data);if(this.leftOver&&this.leftOver.length){if(e.uint8array){var i=b;(b=new Uint8Array(i.length+this.leftOver.length)).set(this.leftOver,0),b.set(i,this.leftOver.length)}else b=this.leftOver.concat(b);this.leftOver=null}var m=function(p,B){var P;for((B=B||p.length)>p.length&&(B=p.length),P=B-1;0<=P&&(192&p[P])==128;)P--;return P<0||P===0?B:P+h[p[P]]>B?P:B}(b),u=b;m!==b.length&&(e.uint8array?(u=b.subarray(0,m),this.leftOver=b.subarray(m,b.length)):(u=b.slice(0,m),this.leftOver=b.slice(m,b.length))),this.push({data:d.utf8decode(u),meta:s.meta})},w.prototype.flush=function(){this.leftOver&&this.leftOver.length&&(this.push({data:d.utf8decode(this.leftOver),meta:{}}),this.leftOver=null)},d.Utf8DecodeWorker=w,c.inherits(y,a),y.prototype.processChunk=function(s){this.push({data:d.utf8encode(s.data),meta:s.meta})},d.Utf8EncodeWorker=y},{"./nodejsUtils":14,"./stream/GenericWorker":28,"./support":30,"./utils":32}],32:[function(o,l,d){var c=o("./support"),e=o("./base64"),t=o("./nodejsUtils"),a=o("./external");function h(i){return i}function g(i,m){for(var u=0;u<i.length;++u)m[u]=255&i.charCodeAt(u);return m}o("setimmediate"),d.newBlob=function(i,m){d.checkSupport("blob");try{return new Blob([i],{type:m})}catch{try{var u=new(self.BlobBuilder||self.WebKitBlobBuilder||self.MozBlobBuilder||self.MSBlobBuilder);return u.append(i),u.getBlob(m)}catch{throw new Error("Bug : can't construct the Blob.")}}};var w={stringifyByChunk:function(i,m,u){var p=[],B=0,P=i.length;if(P<=u)return String.fromCharCode.apply(null,i);for(;B<P;)m==="array"||m==="nodebuffer"?p.push(String.fromCharCode.apply(null,i.slice(B,Math.min(B+u,P)))):p.push(String.fromCharCode.apply(null,i.subarray(B,Math.min(B+u,P)))),B+=u;return p.join("")},stringifyByChar:function(i){for(var m="",u=0;u<i.length;u++)m+=String.fromCharCode(i[u]);return m},applyCanBeUsed:{uint8array:function(){try{return c.uint8array&&String.fromCharCode.apply(null,new Uint8Array(1)).length===1}catch{return!1}}(),nodebuffer:function(){try{return c.nodebuffer&&String.fromCharCode.apply(null,t.allocBuffer(1)).length===1}catch{return!1}}()}};function y(i){var m=65536,u=d.getTypeOf(i),p=!0;if(u==="uint8array"?p=w.applyCanBeUsed.uint8array:u==="nodebuffer"&&(p=w.applyCanBeUsed.nodebuffer),p)for(;1<m;)try{return w.stringifyByChunk(i,u,m)}catch{m=Math.floor(m/2)}return w.stringifyByChar(i)}function s(i,m){for(var u=0;u<i.length;u++)m[u]=i[u];return m}d.applyFromCharCode=y;var b={};b.string={string:h,array:function(i){return g(i,new Array(i.length))},arraybuffer:function(i){return b.string.uint8array(i).buffer},uint8array:function(i){return g(i,new Uint8Array(i.length))},nodebuffer:function(i){return g(i,t.allocBuffer(i.length))}},b.array={string:y,array:h,arraybuffer:function(i){return new Uint8Array(i).buffer},uint8array:function(i){return new Uint8Array(i)},nodebuffer:function(i){return t.newBufferFrom(i)}},b.arraybuffer={string:function(i){return y(new Uint8Array(i))},array:function(i){return s(new Uint8Array(i),new Array(i.byteLength))},arraybuffer:h,uint8array:function(i){return new Uint8Array(i)},nodebuffer:function(i){return t.newBufferFrom(new Uint8Array(i))}},b.uint8array={string:y,array:function(i){return s(i,new Array(i.length))},arraybuffer:function(i){return i.buffer},uint8array:h,nodebuffer:function(i){return t.newBufferFrom(i)}},b.nodebuffer={string:y,array:function(i){return s(i,new Array(i.length))},arraybuffer:function(i){return b.nodebuffer.uint8array(i).buffer},uint8array:function(i){return s(i,new Uint8Array(i.length))},nodebuffer:h},d.transformTo=function(i,m){if(m=m||"",!i)return m;d.checkSupport(i);var u=d.getTypeOf(m);return b[u][i](m)},d.resolve=function(i){for(var m=i.split("/"),u=[],p=0;p<m.length;p++){var B=m[p];B==="."||B===""&&p!==0&&p!==m.length-1||(B===".."?u.pop():u.push(B))}return u.join("/")},d.getTypeOf=function(i){return typeof i=="string"?"string":Object.prototype.toString.call(i)==="[object Array]"?"array":c.nodebuffer&&t.isBuffer(i)?"nodebuffer":c.uint8array&&i instanceof Uint8Array?"uint8array":c.arraybuffer&&i instanceof ArrayBuffer?"arraybuffer":void 0},d.checkSupport=function(i){if(!c[i.toLowerCase()])throw new Error(i+" is not supported by this platform")},d.MAX_VALUE_16BITS=65535,d.MAX_VALUE_32BITS=-1,d.pretty=function(i){var m,u,p="";for(u=0;u<(i||"").length;u++)p+="\\\\x"+((m=i.charCodeAt(u))<16?"0":"")+m.toString(16).toUpperCase();return p},d.delay=function(i,m,u){setImmediate(function(){i.apply(u||null,m||[])})},d.inherits=function(i,m){function u(){}u.prototype=m.prototype,i.prototype=new u},d.extend=function(){var i,m,u={};for(i=0;i<arguments.length;i++)for(m in arguments[i])Object.prototype.hasOwnProperty.call(arguments[i],m)&&u[m]===void 0&&(u[m]=arguments[i][m]);return u},d.prepareContent=function(i,m,u,p,B){return a.Promise.resolve(m).then(function(P){return c.blob&&(P instanceof Blob||["[object File]","[object Blob]"].indexOf(Object.prototype.toString.call(P))!==-1)&&typeof FileReader<"u"?new a.Promise(function(C,L){var I=new FileReader;I.onload=function(D){C(D.target.result)},I.onerror=function(D){L(D.target.error)},I.readAsArrayBuffer(P)}):P}).then(function(P){var C=d.getTypeOf(P);return C?(C==="arraybuffer"?P=d.transformTo("uint8array",P):C==="string"&&(B?P=e.decode(P):u&&p!==!0&&(P=function(L){return g(L,c.uint8array?new Uint8Array(L.length):new Array(L.length))}(P))),P):a.Promise.reject(new Error("Can't read the data of '"+i+"'. Is it in a supported JavaScript type (String, Blob, ArrayBuffer, etc) ?"))})}},{"./base64":1,"./external":6,"./nodejsUtils":14,"./support":30,setimmediate:54}],33:[function(o,l,d){var c=o("./reader/readerFor"),e=o("./utils"),t=o("./signature"),a=o("./zipEntry"),h=o("./support");function g(w){this.files=[],this.loadOptions=w}g.prototype={checkSignature:function(w){if(!this.reader.readAndCheckSignature(w)){this.reader.index-=4;var y=this.reader.readString(4);throw new Error("Corrupted zip or bug: unexpected signature ("+e.pretty(y)+", expected "+e.pretty(w)+")")}},isSignature:function(w,y){var s=this.reader.index;this.reader.setIndex(w);var b=this.reader.readString(4)===y;return this.reader.setIndex(s),b},readBlockEndOfCentral:function(){this.diskNumber=this.reader.readInt(2),this.diskWithCentralDirStart=this.reader.readInt(2),this.centralDirRecordsOnThisDisk=this.reader.readInt(2),this.centralDirRecords=this.reader.readInt(2),this.centralDirSize=this.reader.readInt(4),this.centralDirOffset=this.reader.readInt(4),this.zipCommentLength=this.reader.readInt(2);var w=this.reader.readData(this.zipCommentLength),y=h.uint8array?"uint8array":"array",s=e.transformTo(y,w);this.zipComment=this.loadOptions.decodeFileName(s)},readBlockZip64EndOfCentral:function(){this.zip64EndOfCentralSize=this.reader.readInt(8),this.reader.skip(4),this.diskNumber=this.reader.readInt(4),this.diskWithCentralDirStart=this.reader.readInt(4),this.centralDirRecordsOnThisDisk=this.reader.readInt(8),this.centralDirRecords=this.reader.readInt(8),this.centralDirSize=this.reader.readInt(8),this.centralDirOffset=this.reader.readInt(8),this.zip64ExtensibleData={};for(var w,y,s,b=this.zip64EndOfCentralSize-44;0<b;)w=this.reader.readInt(2),y=this.reader.readInt(4),s=this.reader.readData(y),this.zip64ExtensibleData[w]={id:w,length:y,value:s}},readBlockZip64EndOfCentralLocator:function(){if(this.diskWithZip64CentralDirStart=this.reader.readInt(4),this.relativeOffsetEndOfZip64CentralDir=this.reader.readInt(8),this.disksCount=this.reader.readInt(4),1<this.disksCount)throw new Error("Multi-volumes zip are not supported")},readLocalFiles:function(){var w,y;for(w=0;w<this.files.length;w++)y=this.files[w],this.reader.setIndex(y.localHeaderOffset),this.checkSignature(t.LOCAL_FILE_HEADER),y.readLocalPart(this.reader),y.handleUTF8(),y.processAttributes()},readCentralDir:function(){var w;for(this.reader.setIndex(this.centralDirOffset);this.reader.readAndCheckSignature(t.CENTRAL_FILE_HEADER);)(w=new a({zip64:this.zip64},this.loadOptions)).readCentralPart(this.reader),this.files.push(w);if(this.centralDirRecords!==this.files.length&&this.centralDirRecords!==0&&this.files.length===0)throw new Error("Corrupted zip or bug: expected "+this.centralDirRecords+" records in central dir, got "+this.files.length)},readEndOfCentral:function(){var w=this.reader.lastIndexOfSignature(t.CENTRAL_DIRECTORY_END);if(w<0)throw this.isSignature(0,t.LOCAL_FILE_HEADER)?new Error("Corrupted zip: can't find end of central directory"):new Error("Can't find end of central directory : is this a zip file ? If it is, see https://stuk.github.io/jszip/documentation/howto/read_zip.html");this.reader.setIndex(w);var y=w;if(this.checkSignature(t.CENTRAL_DIRECTORY_END),this.readBlockEndOfCentral(),this.diskNumber===e.MAX_VALUE_16BITS||this.diskWithCentralDirStart===e.MAX_VALUE_16BITS||this.centralDirRecordsOnThisDisk===e.MAX_VALUE_16BITS||this.centralDirRecords===e.MAX_VALUE_16BITS||this.centralDirSize===e.MAX_VALUE_32BITS||this.centralDirOffset===e.MAX_VALUE_32BITS){if(this.zip64=!0,(w=this.reader.lastIndexOfSignature(t.ZIP64_CENTRAL_DIRECTORY_LOCATOR))<0)throw new Error("Corrupted zip: can't find the ZIP64 end of central directory locator");if(this.reader.setIndex(w),this.checkSignature(t.ZIP64_CENTRAL_DIRECTORY_LOCATOR),this.readBlockZip64EndOfCentralLocator(),!this.isSignature(this.relativeOffsetEndOfZip64CentralDir,t.ZIP64_CENTRAL_DIRECTORY_END)&&(this.relativeOffsetEndOfZip64CentralDir=this.reader.lastIndexOfSignature(t.ZIP64_CENTRAL_DIRECTORY_END),this.relativeOffsetEndOfZip64CentralDir<0))throw new Error("Corrupted zip: can't find the ZIP64 end of central directory");this.reader.setIndex(this.relativeOffsetEndOfZip64CentralDir),this.checkSignature(t.ZIP64_CENTRAL_DIRECTORY_END),this.readBlockZip64EndOfCentral()}var s=this.centralDirOffset+this.centralDirSize;this.zip64&&(s+=20,s+=12+this.zip64EndOfCentralSize);var b=y-s;if(0<b)this.isSignature(y,t.CENTRAL_FILE_HEADER)||(this.reader.zero=b);else if(b<0)throw new Error("Corrupted zip: missing "+Math.abs(b)+" bytes.")},prepareReader:function(w){this.reader=c(w)},load:function(w){this.prepareReader(w),this.readEndOfCentral(),this.readCentralDir(),this.readLocalFiles()}},l.exports=g},{"./reader/readerFor":22,"./signature":23,"./support":30,"./utils":32,"./zipEntry":34}],34:[function(o,l,d){var c=o("./reader/readerFor"),e=o("./utils"),t=o("./compressedObject"),a=o("./crc32"),h=o("./utf8"),g=o("./compressions"),w=o("./support");function y(s,b){this.options=s,this.loadOptions=b}y.prototype={isEncrypted:function(){return(1&this.bitFlag)==1},useUTF8:function(){return(2048&this.bitFlag)==2048},readLocalPart:function(s){var b,i;if(s.skip(22),this.fileNameLength=s.readInt(2),i=s.readInt(2),this.fileName=s.readData(this.fileNameLength),s.skip(i),this.compressedSize===-1||this.uncompressedSize===-1)throw new Error("Bug or corrupted zip : didn't get enough information from the central directory (compressedSize === -1 || uncompressedSize === -1)");if((b=function(m){for(var u in g)if(Object.prototype.hasOwnProperty.call(g,u)&&g[u].magic===m)return g[u];return null}(this.compressionMethod))===null)throw new Error("Corrupted zip : compression "+e.pretty(this.compressionMethod)+" unknown (inner file : "+e.transformTo("string",this.fileName)+")");this.decompressed=new t(this.compressedSize,this.uncompressedSize,this.crc32,b,s.readData(this.compressedSize))},readCentralPart:function(s){this.versionMadeBy=s.readInt(2),s.skip(2),this.bitFlag=s.readInt(2),this.compressionMethod=s.readString(2),this.date=s.readDate(),this.crc32=s.readInt(4),this.compressedSize=s.readInt(4),this.uncompressedSize=s.readInt(4);var b=s.readInt(2);if(this.extraFieldsLength=s.readInt(2),this.fileCommentLength=s.readInt(2),this.diskNumberStart=s.readInt(2),this.internalFileAttributes=s.readInt(2),this.externalFileAttributes=s.readInt(4),this.localHeaderOffset=s.readInt(4),this.isEncrypted())throw new Error("Encrypted zip are not supported");s.skip(b),this.readExtraFields(s),this.parseZIP64ExtraField(s),this.fileComment=s.readData(this.fileCommentLength)},processAttributes:function(){this.unixPermissions=null,this.dosPermissions=null;var s=this.versionMadeBy>>8;this.dir=!!(16&this.externalFileAttributes),s==0&&(this.dosPermissions=63&this.externalFileAttributes),s==3&&(this.unixPermissions=this.externalFileAttributes>>16&65535),this.dir||this.fileNameStr.slice(-1)!=="/"||(this.dir=!0)},parseZIP64ExtraField:function(){if(this.extraFields[1]){var s=c(this.extraFields[1].value);this.uncompressedSize===e.MAX_VALUE_32BITS&&(this.uncompressedSize=s.readInt(8)),this.compressedSize===e.MAX_VALUE_32BITS&&(this.compressedSize=s.readInt(8)),this.localHeaderOffset===e.MAX_VALUE_32BITS&&(this.localHeaderOffset=s.readInt(8)),this.diskNumberStart===e.MAX_VALUE_32BITS&&(this.diskNumberStart=s.readInt(4))}},readExtraFields:function(s){var b,i,m,u=s.index+this.extraFieldsLength;for(this.extraFields||(this.extraFields={});s.index+4<u;)b=s.readInt(2),i=s.readInt(2),m=s.readData(i),this.extraFields[b]={id:b,length:i,value:m};s.setIndex(u)},handleUTF8:function(){var s=w.uint8array?"uint8array":"array";if(this.useUTF8())this.fileNameStr=h.utf8decode(this.fileName),this.fileCommentStr=h.utf8decode(this.fileComment);else{var b=this.findExtraFieldUnicodePath();if(b!==null)this.fileNameStr=b;else{var i=e.transformTo(s,this.fileName);this.fileNameStr=this.loadOptions.decodeFileName(i)}var m=this.findExtraFieldUnicodeComment();if(m!==null)this.fileCommentStr=m;else{var u=e.transformTo(s,this.fileComment);this.fileCommentStr=this.loadOptions.decodeFileName(u)}}},findExtraFieldUnicodePath:function(){var s=this.extraFields[28789];if(s){var b=c(s.value);return b.readInt(1)!==1||a(this.fileName)!==b.readInt(4)?null:h.utf8decode(b.readData(s.length-5))}return null},findExtraFieldUnicodeComment:function(){var s=this.extraFields[25461];if(s){var b=c(s.value);return b.readInt(1)!==1||a(this.fileComment)!==b.readInt(4)?null:h.utf8decode(b.readData(s.length-5))}return null}},l.exports=y},{"./compressedObject":2,"./compressions":3,"./crc32":4,"./reader/readerFor":22,"./support":30,"./utf8":31,"./utils":32}],35:[function(o,l,d){function c(b,i,m){this.name=b,this.dir=m.dir,this.date=m.date,this.comment=m.comment,this.unixPermissions=m.unixPermissions,this.dosPermissions=m.dosPermissions,this._data=i,this._dataBinary=m.binary,this.options={compression:m.compression,compressionOptions:m.compressionOptions}}var e=o("./stream/StreamHelper"),t=o("./stream/DataWorker"),a=o("./utf8"),h=o("./compressedObject"),g=o("./stream/GenericWorker");c.prototype={internalStream:function(b){var i=null,m="string";try{if(!b)throw new Error("No output type specified.");var u=(m=b.toLowerCase())==="string"||m==="text";m!=="binarystring"&&m!=="text"||(m="string"),i=this._decompressWorker();var p=!this._dataBinary;p&&!u&&(i=i.pipe(new a.Utf8EncodeWorker)),!p&&u&&(i=i.pipe(new a.Utf8DecodeWorker))}catch(B){(i=new g("error")).error(B)}return new e(i,m,"")},async:function(b,i){return this.internalStream(b).accumulate(i)},nodeStream:function(b,i){return this.internalStream(b||"nodebuffer").toNodejsStream(i)},_compressWorker:function(b,i){if(this._data instanceof h&&this._data.compression.magic===b.magic)return this._data.getCompressedWorker();var m=this._decompressWorker();return this._dataBinary||(m=m.pipe(new a.Utf8EncodeWorker)),h.createWorkerFrom(m,b,i)},_decompressWorker:function(){return this._data instanceof h?this._data.getContentWorker():this._data instanceof g?this._data:new t(this._data)}};for(var w=["asText","asBinary","asNodeBuffer","asUint8Array","asArrayBuffer"],y=function(){throw new Error("This method has been removed in JSZip 3.0, please check the upgrade guide.")},s=0;s<w.length;s++)c.prototype[w[s]]=y;l.exports=c},{"./compressedObject":2,"./stream/DataWorker":27,"./stream/GenericWorker":28,"./stream/StreamHelper":29,"./utf8":31}],36:[function(o,l,d){(function(c){var e,t,a=c.MutationObserver||c.WebKitMutationObserver;if(a){var h=0,g=new a(b),w=c.document.createTextNode("");g.observe(w,{characterData:!0}),e=function(){w.data=h=++h%2}}else if(c.setImmediate||c.MessageChannel===void 0)e="document"in c&&"onreadystatechange"in c.document.createElement("script")?function(){var i=c.document.createElement("script");i.onreadystatechange=function(){b(),i.onreadystatechange=null,i.parentNode.removeChild(i),i=null},c.document.documentElement.appendChild(i)}:function(){setTimeout(b,0)};else{var y=new c.MessageChannel;y.port1.onmessage=b,e=function(){y.port2.postMessage(0)}}var s=[];function b(){var i,m;t=!0;for(var u=s.length;u;){for(m=s,s=[],i=-1;++i<u;)m[i]();u=s.length}t=!1}l.exports=function(i){s.push(i)!==1||t||e()}}).call(this,typeof de<"u"?de:typeof self<"u"?self:typeof window<"u"?window:{})},{}],37:[function(o,l,d){var c=o("immediate");function e(){}var t={},a=["REJECTED"],h=["FULFILLED"],g=["PENDING"];function w(u){if(typeof u!="function")throw new TypeError("resolver must be a function");this.state=g,this.queue=[],this.outcome=void 0,u!==e&&i(this,u)}function y(u,p,B){this.promise=u,typeof p=="function"&&(this.onFulfilled=p,this.callFulfilled=this.otherCallFulfilled),typeof B=="function"&&(this.onRejected=B,this.callRejected=this.otherCallRejected)}function s(u,p,B){c(function(){var P;try{P=p(B)}catch(C){return t.reject(u,C)}P===u?t.reject(u,new TypeError("Cannot resolve promise with itself")):t.resolve(u,P)})}function b(u){var p=u&&u.then;if(u&&(typeof u=="object"||typeof u=="function")&&typeof p=="function")return function(){p.apply(u,arguments)}}function i(u,p){var B=!1;function P(I){B||(B=!0,t.reject(u,I))}function C(I){B||(B=!0,t.resolve(u,I))}var L=m(function(){p(C,P)});L.status==="error"&&P(L.value)}function m(u,p){var B={};try{B.value=u(p),B.status="success"}catch(P){B.status="error",B.value=P}return B}(l.exports=w).prototype.finally=function(u){if(typeof u!="function")return this;var p=this.constructor;return this.then(function(B){return p.resolve(u()).then(function(){return B})},function(B){return p.resolve(u()).then(function(){throw B})})},w.prototype.catch=function(u){return this.then(null,u)},w.prototype.then=function(u,p){if(typeof u!="function"&&this.state===h||typeof p!="function"&&this.state===a)return this;var B=new this.constructor(e);return this.state!==g?s(B,this.state===h?u:p,this.outcome):this.queue.push(new y(B,u,p)),B},y.prototype.callFulfilled=function(u){t.resolve(this.promise,u)},y.prototype.otherCallFulfilled=function(u){s(this.promise,this.onFulfilled,u)},y.prototype.callRejected=function(u){t.reject(this.promise,u)},y.prototype.otherCallRejected=function(u){s(this.promise,this.onRejected,u)},t.resolve=function(u,p){var B=m(b,p);if(B.status==="error")return t.reject(u,B.value);var P=B.value;if(P)i(u,P);else{u.state=h,u.outcome=p;for(var C=-1,L=u.queue.length;++C<L;)u.queue[C].callFulfilled(p)}return u},t.reject=function(u,p){u.state=a,u.outcome=p;for(var B=-1,P=u.queue.length;++B<P;)u.queue[B].callRejected(p);return u},w.resolve=function(u){return u instanceof this?u:t.resolve(new this(e),u)},w.reject=function(u){var p=new this(e);return t.reject(p,u)},w.all=function(u){var p=this;if(Object.prototype.toString.call(u)!=="[object Array]")return this.reject(new TypeError("must be an array"));var B=u.length,P=!1;if(!B)return this.resolve([]);for(var C=new Array(B),L=0,I=-1,D=new this(e);++I<B;)O(u[I],I);return D;function O(j,K){p.resolve(j).then(function(_){C[K]=_,++L!==B||P||(P=!0,t.resolve(D,C))},function(_){P||(P=!0,t.reject(D,_))})}},w.race=function(u){var p=this;if(Object.prototype.toString.call(u)!=="[object Array]")return this.reject(new TypeError("must be an array"));var B=u.length,P=!1;if(!B)return this.resolve([]);for(var C=-1,L=new this(e);++C<B;)I=u[C],p.resolve(I).then(function(D){P||(P=!0,t.resolve(L,D))},function(D){P||(P=!0,t.reject(L,D))});var I;return L}},{immediate:36}],38:[function(o,l,d){var c={};(0,o("./lib/utils/common").assign)(c,o("./lib/deflate"),o("./lib/inflate"),o("./lib/zlib/constants")),l.exports=c},{"./lib/deflate":39,"./lib/inflate":40,"./lib/utils/common":41,"./lib/zlib/constants":44}],39:[function(o,l,d){var c=o("./zlib/deflate"),e=o("./utils/common"),t=o("./utils/strings"),a=o("./zlib/messages"),h=o("./zlib/zstream"),g=Object.prototype.toString,w=0,y=-1,s=0,b=8;function i(u){if(!(this instanceof i))return new i(u);this.options=e.assign({level:y,method:b,chunkSize:16384,windowBits:15,memLevel:8,strategy:s,to:""},u||{});var p=this.options;p.raw&&0<p.windowBits?p.windowBits=-p.windowBits:p.gzip&&0<p.windowBits&&p.windowBits<16&&(p.windowBits+=16),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new h,this.strm.avail_out=0;var B=c.deflateInit2(this.strm,p.level,p.method,p.windowBits,p.memLevel,p.strategy);if(B!==w)throw new Error(a[B]);if(p.header&&c.deflateSetHeader(this.strm,p.header),p.dictionary){var P;if(P=typeof p.dictionary=="string"?t.string2buf(p.dictionary):g.call(p.dictionary)==="[object ArrayBuffer]"?new Uint8Array(p.dictionary):p.dictionary,(B=c.deflateSetDictionary(this.strm,P))!==w)throw new Error(a[B]);this._dict_set=!0}}function m(u,p){var B=new i(p);if(B.push(u,!0),B.err)throw B.msg||a[B.err];return B.result}i.prototype.push=function(u,p){var B,P,C=this.strm,L=this.options.chunkSize;if(this.ended)return!1;P=p===~~p?p:p===!0?4:0,typeof u=="string"?C.input=t.string2buf(u):g.call(u)==="[object ArrayBuffer]"?C.input=new Uint8Array(u):C.input=u,C.next_in=0,C.avail_in=C.input.length;do{if(C.avail_out===0&&(C.output=new e.Buf8(L),C.next_out=0,C.avail_out=L),(B=c.deflate(C,P))!==1&&B!==w)return this.onEnd(B),!(this.ended=!0);C.avail_out!==0&&(C.avail_in!==0||P!==4&&P!==2)||(this.options.to==="string"?this.onData(t.buf2binstring(e.shrinkBuf(C.output,C.next_out))):this.onData(e.shrinkBuf(C.output,C.next_out)))}while((0<C.avail_in||C.avail_out===0)&&B!==1);return P===4?(B=c.deflateEnd(this.strm),this.onEnd(B),this.ended=!0,B===w):P!==2||(this.onEnd(w),!(C.avail_out=0))},i.prototype.onData=function(u){this.chunks.push(u)},i.prototype.onEnd=function(u){u===w&&(this.options.to==="string"?this.result=this.chunks.join(""):this.result=e.flattenChunks(this.chunks)),this.chunks=[],this.err=u,this.msg=this.strm.msg},d.Deflate=i,d.deflate=m,d.deflateRaw=function(u,p){return(p=p||{}).raw=!0,m(u,p)},d.gzip=function(u,p){return(p=p||{}).gzip=!0,m(u,p)}},{"./utils/common":41,"./utils/strings":42,"./zlib/deflate":46,"./zlib/messages":51,"./zlib/zstream":53}],40:[function(o,l,d){var c=o("./zlib/inflate"),e=o("./utils/common"),t=o("./utils/strings"),a=o("./zlib/constants"),h=o("./zlib/messages"),g=o("./zlib/zstream"),w=o("./zlib/gzheader"),y=Object.prototype.toString;function s(i){if(!(this instanceof s))return new s(i);this.options=e.assign({chunkSize:16384,windowBits:0,to:""},i||{});var m=this.options;m.raw&&0<=m.windowBits&&m.windowBits<16&&(m.windowBits=-m.windowBits,m.windowBits===0&&(m.windowBits=-15)),!(0<=m.windowBits&&m.windowBits<16)||i&&i.windowBits||(m.windowBits+=32),15<m.windowBits&&m.windowBits<48&&(15&m.windowBits)==0&&(m.windowBits|=15),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new g,this.strm.avail_out=0;var u=c.inflateInit2(this.strm,m.windowBits);if(u!==a.Z_OK)throw new Error(h[u]);this.header=new w,c.inflateGetHeader(this.strm,this.header)}function b(i,m){var u=new s(m);if(u.push(i,!0),u.err)throw u.msg||h[u.err];return u.result}s.prototype.push=function(i,m){var u,p,B,P,C,L,I=this.strm,D=this.options.chunkSize,O=this.options.dictionary,j=!1;if(this.ended)return!1;p=m===~~m?m:m===!0?a.Z_FINISH:a.Z_NO_FLUSH,typeof i=="string"?I.input=t.binstring2buf(i):y.call(i)==="[object ArrayBuffer]"?I.input=new Uint8Array(i):I.input=i,I.next_in=0,I.avail_in=I.input.length;do{if(I.avail_out===0&&(I.output=new e.Buf8(D),I.next_out=0,I.avail_out=D),(u=c.inflate(I,a.Z_NO_FLUSH))===a.Z_NEED_DICT&&O&&(L=typeof O=="string"?t.string2buf(O):y.call(O)==="[object ArrayBuffer]"?new Uint8Array(O):O,u=c.inflateSetDictionary(this.strm,L)),u===a.Z_BUF_ERROR&&j===!0&&(u=a.Z_OK,j=!1),u!==a.Z_STREAM_END&&u!==a.Z_OK)return this.onEnd(u),!(this.ended=!0);I.next_out&&(I.avail_out!==0&&u!==a.Z_STREAM_END&&(I.avail_in!==0||p!==a.Z_FINISH&&p!==a.Z_SYNC_FLUSH)||(this.options.to==="string"?(B=t.utf8border(I.output,I.next_out),P=I.next_out-B,C=t.buf2string(I.output,B),I.next_out=P,I.avail_out=D-P,P&&e.arraySet(I.output,I.output,B,P,0),this.onData(C)):this.onData(e.shrinkBuf(I.output,I.next_out)))),I.avail_in===0&&I.avail_out===0&&(j=!0)}while((0<I.avail_in||I.avail_out===0)&&u!==a.Z_STREAM_END);return u===a.Z_STREAM_END&&(p=a.Z_FINISH),p===a.Z_FINISH?(u=c.inflateEnd(this.strm),this.onEnd(u),this.ended=!0,u===a.Z_OK):p!==a.Z_SYNC_FLUSH||(this.onEnd(a.Z_OK),!(I.avail_out=0))},s.prototype.onData=function(i){this.chunks.push(i)},s.prototype.onEnd=function(i){i===a.Z_OK&&(this.options.to==="string"?this.result=this.chunks.join(""):this.result=e.flattenChunks(this.chunks)),this.chunks=[],this.err=i,this.msg=this.strm.msg},d.Inflate=s,d.inflate=b,d.inflateRaw=function(i,m){return(m=m||{}).raw=!0,b(i,m)},d.ungzip=b},{"./utils/common":41,"./utils/strings":42,"./zlib/constants":44,"./zlib/gzheader":47,"./zlib/inflate":49,"./zlib/messages":51,"./zlib/zstream":53}],41:[function(o,l,d){var c=typeof Uint8Array<"u"&&typeof Uint16Array<"u"&&typeof Int32Array<"u";d.assign=function(a){for(var h=Array.prototype.slice.call(arguments,1);h.length;){var g=h.shift();if(g){if(typeof g!="object")throw new TypeError(g+"must be non-object");for(var w in g)g.hasOwnProperty(w)&&(a[w]=g[w])}}return a},d.shrinkBuf=function(a,h){return a.length===h?a:a.subarray?a.subarray(0,h):(a.length=h,a)};var e={arraySet:function(a,h,g,w,y){if(h.subarray&&a.subarray)a.set(h.subarray(g,g+w),y);else for(var s=0;s<w;s++)a[y+s]=h[g+s]},flattenChunks:function(a){var h,g,w,y,s,b;for(h=w=0,g=a.length;h<g;h++)w+=a[h].length;for(b=new Uint8Array(w),h=y=0,g=a.length;h<g;h++)s=a[h],b.set(s,y),y+=s.length;return b}},t={arraySet:function(a,h,g,w,y){for(var s=0;s<w;s++)a[y+s]=h[g+s]},flattenChunks:function(a){return[].concat.apply([],a)}};d.setTyped=function(a){a?(d.Buf8=Uint8Array,d.Buf16=Uint16Array,d.Buf32=Int32Array,d.assign(d,e)):(d.Buf8=Array,d.Buf16=Array,d.Buf32=Array,d.assign(d,t))},d.setTyped(c)},{}],42:[function(o,l,d){var c=o("./common"),e=!0,t=!0;try{String.fromCharCode.apply(null,[0])}catch{e=!1}try{String.fromCharCode.apply(null,new Uint8Array(1))}catch{t=!1}for(var a=new c.Buf8(256),h=0;h<256;h++)a[h]=252<=h?6:248<=h?5:240<=h?4:224<=h?3:192<=h?2:1;function g(w,y){if(y<65537&&(w.subarray&&t||!w.subarray&&e))return String.fromCharCode.apply(null,c.shrinkBuf(w,y));for(var s="",b=0;b<y;b++)s+=String.fromCharCode(w[b]);return s}a[254]=a[254]=1,d.string2buf=function(w){var y,s,b,i,m,u=w.length,p=0;for(i=0;i<u;i++)(64512&(s=w.charCodeAt(i)))==55296&&i+1<u&&(64512&(b=w.charCodeAt(i+1)))==56320&&(s=65536+(s-55296<<10)+(b-56320),i++),p+=s<128?1:s<2048?2:s<65536?3:4;for(y=new c.Buf8(p),i=m=0;m<p;i++)(64512&(s=w.charCodeAt(i)))==55296&&i+1<u&&(64512&(b=w.charCodeAt(i+1)))==56320&&(s=65536+(s-55296<<10)+(b-56320),i++),s<128?y[m++]=s:(s<2048?y[m++]=192|s>>>6:(s<65536?y[m++]=224|s>>>12:(y[m++]=240|s>>>18,y[m++]=128|s>>>12&63),y[m++]=128|s>>>6&63),y[m++]=128|63&s);return y},d.buf2binstring=function(w){return g(w,w.length)},d.binstring2buf=function(w){for(var y=new c.Buf8(w.length),s=0,b=y.length;s<b;s++)y[s]=w.charCodeAt(s);return y},d.buf2string=function(w,y){var s,b,i,m,u=y||w.length,p=new Array(2*u);for(s=b=0;s<u;)if((i=w[s++])<128)p[b++]=i;else if(4<(m=a[i]))p[b++]=65533,s+=m-1;else{for(i&=m===2?31:m===3?15:7;1<m&&s<u;)i=i<<6|63&w[s++],m--;1<m?p[b++]=65533:i<65536?p[b++]=i:(i-=65536,p[b++]=55296|i>>10&1023,p[b++]=56320|1023&i)}return g(p,b)},d.utf8border=function(w,y){var s;for((y=y||w.length)>w.length&&(y=w.length),s=y-1;0<=s&&(192&w[s])==128;)s--;return s<0||s===0?y:s+a[w[s]]>y?s:y}},{"./common":41}],43:[function(o,l,d){l.exports=function(c,e,t,a){for(var h=65535&c|0,g=c>>>16&65535|0,w=0;t!==0;){for(t-=w=2e3<t?2e3:t;g=g+(h=h+e[a++]|0)|0,--w;);h%=65521,g%=65521}return h|g<<16|0}},{}],44:[function(o,l,d){l.exports={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_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}},{}],45:[function(o,l,d){var c=function(){for(var e,t=[],a=0;a<256;a++){e=a;for(var h=0;h<8;h++)e=1&e?3988292384^e>>>1:e>>>1;t[a]=e}return t}();l.exports=function(e,t,a,h){var g=c,w=h+a;e^=-1;for(var y=h;y<w;y++)e=e>>>8^g[255&(e^t[y])];return-1^e}},{}],46:[function(o,l,d){var c,e=o("../utils/common"),t=o("./trees"),a=o("./adler32"),h=o("./crc32"),g=o("./messages"),w=0,y=4,s=0,b=-2,i=-1,m=4,u=2,p=8,B=9,P=286,C=30,L=19,I=2*P+1,D=15,O=3,j=258,K=j+O+1,_=42,z=113,n=1,M=2,J=3,U=4;function ee(r,T){return r.msg=g[T],T}function W(r){return(r<<1)-(4<r?9:0)}function Q(r){for(var T=r.length;0<=--T;)r[T]=0}function E(r){var T=r.state,A=T.pending;A>r.avail_out&&(A=r.avail_out),A!==0&&(e.arraySet(r.output,T.pending_buf,T.pending_out,A,r.next_out),r.next_out+=A,T.pending_out+=A,r.total_out+=A,r.avail_out-=A,T.pending-=A,T.pending===0&&(T.pending_out=0))}function S(r,T){t._tr_flush_block(r,0<=r.block_start?r.block_start:-1,r.strstart-r.block_start,T),r.block_start=r.strstart,E(r.strm)}function Y(r,T){r.pending_buf[r.pending++]=T}function G(r,T){r.pending_buf[r.pending++]=T>>>8&255,r.pending_buf[r.pending++]=255&T}function H(r,T){var A,k,f=r.max_chain_length,v=r.strstart,F=r.prev_length,N=r.nice_match,x=r.strstart>r.w_size-K?r.strstart-(r.w_size-K):0,Z=r.window,X=r.w_mask,q=r.prev,V=r.strstart+j,ne=Z[v+F-1],re=Z[v+F];r.prev_length>=r.good_match&&(f>>=2),N>r.lookahead&&(N=r.lookahead);do if(Z[(A=T)+F]===re&&Z[A+F-1]===ne&&Z[A]===Z[v]&&Z[++A]===Z[v+1]){v+=2,A++;do;while(Z[++v]===Z[++A]&&Z[++v]===Z[++A]&&Z[++v]===Z[++A]&&Z[++v]===Z[++A]&&Z[++v]===Z[++A]&&Z[++v]===Z[++A]&&Z[++v]===Z[++A]&&Z[++v]===Z[++A]&&v<V);if(k=j-(V-v),v=V-j,F<k){if(r.match_start=T,N<=(F=k))break;ne=Z[v+F-1],re=Z[v+F]}}while((T=q[T&X])>x&&--f!=0);return F<=r.lookahead?F:r.lookahead}function ae(r){var T,A,k,f,v,F,N,x,Z,X,q=r.w_size;do{if(f=r.window_size-r.lookahead-r.strstart,r.strstart>=q+(q-K)){for(e.arraySet(r.window,r.window,q,q,0),r.match_start-=q,r.strstart-=q,r.block_start-=q,T=A=r.hash_size;k=r.head[--T],r.head[T]=q<=k?k-q:0,--A;);for(T=A=q;k=r.prev[--T],r.prev[T]=q<=k?k-q:0,--A;);f+=q}if(r.strm.avail_in===0)break;if(F=r.strm,N=r.window,x=r.strstart+r.lookahead,Z=f,X=void 0,X=F.avail_in,Z<X&&(X=Z),A=X===0?0:(F.avail_in-=X,e.arraySet(N,F.input,F.next_in,X,x),F.state.wrap===1?F.adler=a(F.adler,N,X,x):F.state.wrap===2&&(F.adler=h(F.adler,N,X,x)),F.next_in+=X,F.total_in+=X,X),r.lookahead+=A,r.lookahead+r.insert>=O)for(v=r.strstart-r.insert,r.ins_h=r.window[v],r.ins_h=(r.ins_h<<r.hash_shift^r.window[v+1])&r.hash_mask;r.insert&&(r.ins_h=(r.ins_h<<r.hash_shift^r.window[v+O-1])&r.hash_mask,r.prev[v&r.w_mask]=r.head[r.ins_h],r.head[r.ins_h]=v,v++,r.insert--,!(r.lookahead+r.insert<O)););}while(r.lookahead<K&&r.strm.avail_in!==0)}function le(r,T){for(var A,k;;){if(r.lookahead<K){if(ae(r),r.lookahead<K&&T===w)return n;if(r.lookahead===0)break}if(A=0,r.lookahead>=O&&(r.ins_h=(r.ins_h<<r.hash_shift^r.window[r.strstart+O-1])&r.hash_mask,A=r.prev[r.strstart&r.w_mask]=r.head[r.ins_h],r.head[r.ins_h]=r.strstart),A!==0&&r.strstart-A<=r.w_size-K&&(r.match_length=H(r,A)),r.match_length>=O)if(k=t._tr_tally(r,r.strstart-r.match_start,r.match_length-O),r.lookahead-=r.match_length,r.match_length<=r.max_lazy_match&&r.lookahead>=O){for(r.match_length--;r.strstart++,r.ins_h=(r.ins_h<<r.hash_shift^r.window[r.strstart+O-1])&r.hash_mask,A=r.prev[r.strstart&r.w_mask]=r.head[r.ins_h],r.head[r.ins_h]=r.strstart,--r.match_length!=0;);r.strstart++}else r.strstart+=r.match_length,r.match_length=0,r.ins_h=r.window[r.strstart],r.ins_h=(r.ins_h<<r.hash_shift^r.window[r.strstart+1])&r.hash_mask;else k=t._tr_tally(r,0,r.window[r.strstart]),r.lookahead--,r.strstart++;if(k&&(S(r,!1),r.strm.avail_out===0))return n}return r.insert=r.strstart<O-1?r.strstart:O-1,T===y?(S(r,!0),r.strm.avail_out===0?J:U):r.last_lit&&(S(r,!1),r.strm.avail_out===0)?n:M}function te(r,T){for(var A,k,f;;){if(r.lookahead<K){if(ae(r),r.lookahead<K&&T===w)return n;if(r.lookahead===0)break}if(A=0,r.lookahead>=O&&(r.ins_h=(r.ins_h<<r.hash_shift^r.window[r.strstart+O-1])&r.hash_mask,A=r.prev[r.strstart&r.w_mask]=r.head[r.ins_h],r.head[r.ins_h]=r.strstart),r.prev_length=r.match_length,r.prev_match=r.match_start,r.match_length=O-1,A!==0&&r.prev_length<r.max_lazy_match&&r.strstart-A<=r.w_size-K&&(r.match_length=H(r,A),r.match_length<=5&&(r.strategy===1||r.match_length===O&&4096<r.strstart-r.match_start)&&(r.match_length=O-1)),r.prev_length>=O&&r.match_length<=r.prev_length){for(f=r.strstart+r.lookahead-O,k=t._tr_tally(r,r.strstart-1-r.prev_match,r.prev_length-O),r.lookahead-=r.prev_length-1,r.prev_length-=2;++r.strstart<=f&&(r.ins_h=(r.ins_h<<r.hash_shift^r.window[r.strstart+O-1])&r.hash_mask,A=r.prev[r.strstart&r.w_mask]=r.head[r.ins_h],r.head[r.ins_h]=r.strstart),--r.prev_length!=0;);if(r.match_available=0,r.match_length=O-1,r.strstart++,k&&(S(r,!1),r.strm.avail_out===0))return n}else if(r.match_available){if((k=t._tr_tally(r,0,r.window[r.strstart-1]))&&S(r,!1),r.strstart++,r.lookahead--,r.strm.avail_out===0)return n}else r.match_available=1,r.strstart++,r.lookahead--}return r.match_available&&(k=t._tr_tally(r,0,r.window[r.strstart-1]),r.match_available=0),r.insert=r.strstart<O-1?r.strstart:O-1,T===y?(S(r,!0),r.strm.avail_out===0?J:U):r.last_lit&&(S(r,!1),r.strm.avail_out===0)?n:M}function oe(r,T,A,k,f){this.good_length=r,this.max_lazy=T,this.nice_length=A,this.max_chain=k,this.func=f}function ce(){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=p,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 e.Buf16(2*I),this.dyn_dtree=new e.Buf16(2*(2*C+1)),this.bl_tree=new e.Buf16(2*(2*L+1)),Q(this.dyn_ltree),Q(this.dyn_dtree),Q(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new e.Buf16(D+1),this.heap=new e.Buf16(2*P+1),Q(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new e.Buf16(2*P+1),Q(this.depth),this.l_buf=0,this.lit_bufsize=0,this.last_lit=0,this.d_buf=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0}function ie(r){var T;return r&&r.state?(r.total_in=r.total_out=0,r.data_type=u,(T=r.state).pending=0,T.pending_out=0,T.wrap<0&&(T.wrap=-T.wrap),T.status=T.wrap?_:z,r.adler=T.wrap===2?0:1,T.last_flush=w,t._tr_init(T),s):ee(r,b)}function me(r){var T=ie(r);return T===s&&function(A){A.window_size=2*A.w_size,Q(A.head),A.max_lazy_match=c[A.level].max_lazy,A.good_match=c[A.level].good_length,A.nice_match=c[A.level].nice_length,A.max_chain_length=c[A.level].max_chain,A.strstart=0,A.block_start=0,A.lookahead=0,A.insert=0,A.match_length=A.prev_length=O-1,A.match_available=0,A.ins_h=0}(r.state),T}function he(r,T,A,k,f,v){if(!r)return b;var F=1;if(T===i&&(T=6),k<0?(F=0,k=-k):15<k&&(F=2,k-=16),f<1||B<f||A!==p||k<8||15<k||T<0||9<T||v<0||m<v)return ee(r,b);k===8&&(k=9);var N=new ce;return(r.state=N).strm=r,N.wrap=F,N.gzhead=null,N.w_bits=k,N.w_size=1<<N.w_bits,N.w_mask=N.w_size-1,N.hash_bits=f+7,N.hash_size=1<<N.hash_bits,N.hash_mask=N.hash_size-1,N.hash_shift=~~((N.hash_bits+O-1)/O),N.window=new e.Buf8(2*N.w_size),N.head=new e.Buf16(N.hash_size),N.prev=new e.Buf16(N.w_size),N.lit_bufsize=1<<f+6,N.pending_buf_size=4*N.lit_bufsize,N.pending_buf=new e.Buf8(N.pending_buf_size),N.d_buf=1*N.lit_bufsize,N.l_buf=3*N.lit_bufsize,N.level=T,N.strategy=v,N.method=A,me(r)}c=[new oe(0,0,0,0,function(r,T){var A=65535;for(A>r.pending_buf_size-5&&(A=r.pending_buf_size-5);;){if(r.lookahead<=1){if(ae(r),r.lookahead===0&&T===w)return n;if(r.lookahead===0)break}r.strstart+=r.lookahead,r.lookahead=0;var k=r.block_start+A;if((r.strstart===0||r.strstart>=k)&&(r.lookahead=r.strstart-k,r.strstart=k,S(r,!1),r.strm.avail_out===0)||r.strstart-r.block_start>=r.w_size-K&&(S(r,!1),r.strm.avail_out===0))return n}return r.insert=0,T===y?(S(r,!0),r.strm.avail_out===0?J:U):(r.strstart>r.block_start&&(S(r,!1),r.strm.avail_out),n)}),new oe(4,4,8,4,le),new oe(4,5,16,8,le),new oe(4,6,32,32,le),new oe(4,4,16,16,te),new oe(8,16,32,32,te),new oe(8,16,128,128,te),new oe(8,32,128,256,te),new oe(32,128,258,1024,te),new oe(32,258,258,4096,te)],d.deflateInit=function(r,T){return he(r,T,p,15,8,0)},d.deflateInit2=he,d.deflateReset=me,d.deflateResetKeep=ie,d.deflateSetHeader=function(r,T){return r&&r.state?r.state.wrap!==2?b:(r.state.gzhead=T,s):b},d.deflate=function(r,T){var A,k,f,v;if(!r||!r.state||5<T||T<0)return r?ee(r,b):b;if(k=r.state,!r.output||!r.input&&r.avail_in!==0||k.status===666&&T!==y)return ee(r,r.avail_out===0?-5:b);if(k.strm=r,A=k.last_flush,k.last_flush=T,k.status===_)if(k.wrap===2)r.adler=0,Y(k,31),Y(k,139),Y(k,8),k.gzhead?(Y(k,(k.gzhead.text?1:0)+(k.gzhead.hcrc?2:0)+(k.gzhead.extra?4:0)+(k.gzhead.name?8:0)+(k.gzhead.comment?16:0)),Y(k,255&k.gzhead.time),Y(k,k.gzhead.time>>8&255),Y(k,k.gzhead.time>>16&255),Y(k,k.gzhead.time>>24&255),Y(k,k.level===9?2:2<=k.strategy||k.level<2?4:0),Y(k,255&k.gzhead.os),k.gzhead.extra&&k.gzhead.extra.length&&(Y(k,255&k.gzhead.extra.length),Y(k,k.gzhead.extra.length>>8&255)),k.gzhead.hcrc&&(r.adler=h(r.adler,k.pending_buf,k.pending,0)),k.gzindex=0,k.status=69):(Y(k,0),Y(k,0),Y(k,0),Y(k,0),Y(k,0),Y(k,k.level===9?2:2<=k.strategy||k.level<2?4:0),Y(k,3),k.status=z);else{var F=p+(k.w_bits-8<<4)<<8;F|=(2<=k.strategy||k.level<2?0:k.level<6?1:k.level===6?2:3)<<6,k.strstart!==0&&(F|=32),F+=31-F%31,k.status=z,G(k,F),k.strstart!==0&&(G(k,r.adler>>>16),G(k,65535&r.adler)),r.adler=1}if(k.status===69)if(k.gzhead.extra){for(f=k.pending;k.gzindex<(65535&k.gzhead.extra.length)&&(k.pending!==k.pending_buf_size||(k.gzhead.hcrc&&k.pending>f&&(r.adler=h(r.adler,k.pending_buf,k.pending-f,f)),E(r),f=k.pending,k.pending!==k.pending_buf_size));)Y(k,255&k.gzhead.extra[k.gzindex]),k.gzindex++;k.gzhead.hcrc&&k.pending>f&&(r.adler=h(r.adler,k.pending_buf,k.pending-f,f)),k.gzindex===k.gzhead.extra.length&&(k.gzindex=0,k.status=73)}else k.status=73;if(k.status===73)if(k.gzhead.name){f=k.pending;do{if(k.pending===k.pending_buf_size&&(k.gzhead.hcrc&&k.pending>f&&(r.adler=h(r.adler,k.pending_buf,k.pending-f,f)),E(r),f=k.pending,k.pending===k.pending_buf_size)){v=1;break}v=k.gzindex<k.gzhead.name.length?255&k.gzhead.name.charCodeAt(k.gzindex++):0,Y(k,v)}while(v!==0);k.gzhead.hcrc&&k.pending>f&&(r.adler=h(r.adler,k.pending_buf,k.pending-f,f)),v===0&&(k.gzindex=0,k.status=91)}else k.status=91;if(k.status===91)if(k.gzhead.comment){f=k.pending;do{if(k.pending===k.pending_buf_size&&(k.gzhead.hcrc&&k.pending>f&&(r.adler=h(r.adler,k.pending_buf,k.pending-f,f)),E(r),f=k.pending,k.pending===k.pending_buf_size)){v=1;break}v=k.gzindex<k.gzhead.comment.length?255&k.gzhead.comment.charCodeAt(k.gzindex++):0,Y(k,v)}while(v!==0);k.gzhead.hcrc&&k.pending>f&&(r.adler=h(r.adler,k.pending_buf,k.pending-f,f)),v===0&&(k.status=103)}else k.status=103;if(k.status===103&&(k.gzhead.hcrc?(k.pending+2>k.pending_buf_size&&E(r),k.pending+2<=k.pending_buf_size&&(Y(k,255&r.adler),Y(k,r.adler>>8&255),r.adler=0,k.status=z)):k.status=z),k.pending!==0){if(E(r),r.avail_out===0)return k.last_flush=-1,s}else if(r.avail_in===0&&W(T)<=W(A)&&T!==y)return ee(r,-5);if(k.status===666&&r.avail_in!==0)return ee(r,-5);if(r.avail_in!==0||k.lookahead!==0||T!==w&&k.status!==666){var N=k.strategy===2?function(x,Z){for(var X;;){if(x.lookahead===0&&(ae(x),x.lookahead===0)){if(Z===w)return n;break}if(x.match_length=0,X=t._tr_tally(x,0,x.window[x.strstart]),x.lookahead--,x.strstart++,X&&(S(x,!1),x.strm.avail_out===0))return n}return x.insert=0,Z===y?(S(x,!0),x.strm.avail_out===0?J:U):x.last_lit&&(S(x,!1),x.strm.avail_out===0)?n:M}(k,T):k.strategy===3?function(x,Z){for(var X,q,V,ne,re=x.window;;){if(x.lookahead<=j){if(ae(x),x.lookahead<=j&&Z===w)return n;if(x.lookahead===0)break}if(x.match_length=0,x.lookahead>=O&&0<x.strstart&&(q=re[V=x.strstart-1])===re[++V]&&q===re[++V]&&q===re[++V]){ne=x.strstart+j;do;while(q===re[++V]&&q===re[++V]&&q===re[++V]&&q===re[++V]&&q===re[++V]&&q===re[++V]&&q===re[++V]&&q===re[++V]&&V<ne);x.match_length=j-(ne-V),x.match_length>x.lookahead&&(x.match_length=x.lookahead)}if(x.match_length>=O?(X=t._tr_tally(x,1,x.match_length-O),x.lookahead-=x.match_length,x.strstart+=x.match_length,x.match_length=0):(X=t._tr_tally(x,0,x.window[x.strstart]),x.lookahead--,x.strstart++),X&&(S(x,!1),x.strm.avail_out===0))return n}return x.insert=0,Z===y?(S(x,!0),x.strm.avail_out===0?J:U):x.last_lit&&(S(x,!1),x.strm.avail_out===0)?n:M}(k,T):c[k.level].func(k,T);if(N!==J&&N!==U||(k.status=666),N===n||N===J)return r.avail_out===0&&(k.last_flush=-1),s;if(N===M&&(T===1?t._tr_align(k):T!==5&&(t._tr_stored_block(k,0,0,!1),T===3&&(Q(k.head),k.lookahead===0&&(k.strstart=0,k.block_start=0,k.insert=0))),E(r),r.avail_out===0))return k.last_flush=-1,s}return T!==y?s:k.wrap<=0?1:(k.wrap===2?(Y(k,255&r.adler),Y(k,r.adler>>8&255),Y(k,r.adler>>16&255),Y(k,r.adler>>24&255),Y(k,255&r.total_in),Y(k,r.total_in>>8&255),Y(k,r.total_in>>16&255),Y(k,r.total_in>>24&255)):(G(k,r.adler>>>16),G(k,65535&r.adler)),E(r),0<k.wrap&&(k.wrap=-k.wrap),k.pending!==0?s:1)},d.deflateEnd=function(r){var T;return r&&r.state?(T=r.state.status)!==_&&T!==69&&T!==73&&T!==91&&T!==103&&T!==z&&T!==666?ee(r,b):(r.state=null,T===z?ee(r,-3):s):b},d.deflateSetDictionary=function(r,T){var A,k,f,v,F,N,x,Z,X=T.length;if(!r||!r.state||(v=(A=r.state).wrap)===2||v===1&&A.status!==_||A.lookahead)return b;for(v===1&&(r.adler=a(r.adler,T,X,0)),A.wrap=0,X>=A.w_size&&(v===0&&(Q(A.head),A.strstart=0,A.block_start=0,A.insert=0),Z=new e.Buf8(A.w_size),e.arraySet(Z,T,X-A.w_size,A.w_size,0),T=Z,X=A.w_size),F=r.avail_in,N=r.next_in,x=r.input,r.avail_in=X,r.next_in=0,r.input=T,ae(A);A.lookahead>=O;){for(k=A.strstart,f=A.lookahead-(O-1);A.ins_h=(A.ins_h<<A.hash_shift^A.window[k+O-1])&A.hash_mask,A.prev[k&A.w_mask]=A.head[A.ins_h],A.head[A.ins_h]=k,k++,--f;);A.strstart=k,A.lookahead=O-1,ae(A)}return A.strstart+=A.lookahead,A.block_start=A.strstart,A.insert=A.lookahead,A.lookahead=0,A.match_length=A.prev_length=O-1,A.match_available=0,r.next_in=N,r.input=x,r.avail_in=F,A.wrap=v,s},d.deflateInfo="pako deflate (from Nodeca project)"},{"../utils/common":41,"./adler32":43,"./crc32":45,"./messages":51,"./trees":52}],47:[function(o,l,d){l.exports=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}},{}],48:[function(o,l,d){l.exports=function(c,e){var t,a,h,g,w,y,s,b,i,m,u,p,B,P,C,L,I,D,O,j,K,_,z,n,M;t=c.state,a=c.next_in,n=c.input,h=a+(c.avail_in-5),g=c.next_out,M=c.output,w=g-(e-c.avail_out),y=g+(c.avail_out-257),s=t.dmax,b=t.wsize,i=t.whave,m=t.wnext,u=t.window,p=t.hold,B=t.bits,P=t.lencode,C=t.distcode,L=(1<<t.lenbits)-1,I=(1<<t.distbits)-1;e:do{B<15&&(p+=n[a++]<<B,B+=8,p+=n[a++]<<B,B+=8),D=P[p&L];t:for(;;){if(p>>>=O=D>>>24,B-=O,(O=D>>>16&255)===0)M[g++]=65535&D;else{if(!(16&O)){if((64&O)==0){D=P[(65535&D)+(p&(1<<O)-1)];continue t}if(32&O){t.mode=12;break e}c.msg="invalid literal/length code",t.mode=30;break e}j=65535&D,(O&=15)&&(B<O&&(p+=n[a++]<<B,B+=8),j+=p&(1<<O)-1,p>>>=O,B-=O),B<15&&(p+=n[a++]<<B,B+=8,p+=n[a++]<<B,B+=8),D=C[p&I];r:for(;;){if(p>>>=O=D>>>24,B-=O,!(16&(O=D>>>16&255))){if((64&O)==0){D=C[(65535&D)+(p&(1<<O)-1)];continue r}c.msg="invalid distance code",t.mode=30;break e}if(K=65535&D,B<(O&=15)&&(p+=n[a++]<<B,(B+=8)<O&&(p+=n[a++]<<B,B+=8)),s<(K+=p&(1<<O)-1)){c.msg="invalid distance too far back",t.mode=30;break e}if(p>>>=O,B-=O,(O=g-w)<K){if(i<(O=K-O)&&t.sane){c.msg="invalid distance too far back",t.mode=30;break e}if(z=u,(_=0)===m){if(_+=b-O,O<j){for(j-=O;M[g++]=u[_++],--O;);_=g-K,z=M}}else if(m<O){if(_+=b+m-O,(O-=m)<j){for(j-=O;M[g++]=u[_++],--O;);if(_=0,m<j){for(j-=O=m;M[g++]=u[_++],--O;);_=g-K,z=M}}}else if(_+=m-O,O<j){for(j-=O;M[g++]=u[_++],--O;);_=g-K,z=M}for(;2<j;)M[g++]=z[_++],M[g++]=z[_++],M[g++]=z[_++],j-=3;j&&(M[g++]=z[_++],1<j&&(M[g++]=z[_++]))}else{for(_=g-K;M[g++]=M[_++],M[g++]=M[_++],M[g++]=M[_++],2<(j-=3););j&&(M[g++]=M[_++],1<j&&(M[g++]=M[_++]))}break}}break}}while(a<h&&g<y);a-=j=B>>3,p&=(1<<(B-=j<<3))-1,c.next_in=a,c.next_out=g,c.avail_in=a<h?h-a+5:5-(a-h),c.avail_out=g<y?y-g+257:257-(g-y),t.hold=p,t.bits=B}},{}],49:[function(o,l,d){var c=o("../utils/common"),e=o("./adler32"),t=o("./crc32"),a=o("./inffast"),h=o("./inftrees"),g=1,w=2,y=0,s=-2,b=1,i=852,m=592;function u(_){return(_>>>24&255)+(_>>>8&65280)+((65280&_)<<8)+((255&_)<<24)}function p(){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 c.Buf16(320),this.work=new c.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function B(_){var z;return _&&_.state?(z=_.state,_.total_in=_.total_out=z.total=0,_.msg="",z.wrap&&(_.adler=1&z.wrap),z.mode=b,z.last=0,z.havedict=0,z.dmax=32768,z.head=null,z.hold=0,z.bits=0,z.lencode=z.lendyn=new c.Buf32(i),z.distcode=z.distdyn=new c.Buf32(m),z.sane=1,z.back=-1,y):s}function P(_){var z;return _&&_.state?((z=_.state).wsize=0,z.whave=0,z.wnext=0,B(_)):s}function C(_,z){var n,M;return _&&_.state?(M=_.state,z<0?(n=0,z=-z):(n=1+(z>>4),z<48&&(z&=15)),z&&(z<8||15<z)?s:(M.window!==null&&M.wbits!==z&&(M.window=null),M.wrap=n,M.wbits=z,P(_))):s}function L(_,z){var n,M;return _?(M=new p,(_.state=M).window=null,(n=C(_,z))!==y&&(_.state=null),n):s}var I,D,O=!0;function j(_){if(O){var z;for(I=new c.Buf32(512),D=new c.Buf32(32),z=0;z<144;)_.lens[z++]=8;for(;z<256;)_.lens[z++]=9;for(;z<280;)_.lens[z++]=7;for(;z<288;)_.lens[z++]=8;for(h(g,_.lens,0,288,I,0,_.work,{bits:9}),z=0;z<32;)_.lens[z++]=5;h(w,_.lens,0,32,D,0,_.work,{bits:5}),O=!1}_.lencode=I,_.lenbits=9,_.distcode=D,_.distbits=5}function K(_,z,n,M){var J,U=_.state;return U.window===null&&(U.wsize=1<<U.wbits,U.wnext=0,U.whave=0,U.window=new c.Buf8(U.wsize)),M>=U.wsize?(c.arraySet(U.window,z,n-U.wsize,U.wsize,0),U.wnext=0,U.whave=U.wsize):(M<(J=U.wsize-U.wnext)&&(J=M),c.arraySet(U.window,z,n-M,J,U.wnext),(M-=J)?(c.arraySet(U.window,z,n-M,M,0),U.wnext=M,U.whave=U.wsize):(U.wnext+=J,U.wnext===U.wsize&&(U.wnext=0),U.whave<U.wsize&&(U.whave+=J))),0}d.inflateReset=P,d.inflateReset2=C,d.inflateResetKeep=B,d.inflateInit=function(_){return L(_,15)},d.inflateInit2=L,d.inflate=function(_,z){var n,M,J,U,ee,W,Q,E,S,Y,G,H,ae,le,te,oe,ce,ie,me,he,r,T,A,k,f=0,v=new c.Buf8(4),F=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];if(!_||!_.state||!_.output||!_.input&&_.avail_in!==0)return s;(n=_.state).mode===12&&(n.mode=13),ee=_.next_out,J=_.output,Q=_.avail_out,U=_.next_in,M=_.input,W=_.avail_in,E=n.hold,S=n.bits,Y=W,G=Q,T=y;e:for(;;)switch(n.mode){case b:if(n.wrap===0){n.mode=13;break}for(;S<16;){if(W===0)break e;W--,E+=M[U++]<<S,S+=8}if(2&n.wrap&&E===35615){v[n.check=0]=255&E,v[1]=E>>>8&255,n.check=t(n.check,v,2,0),S=E=0,n.mode=2;break}if(n.flags=0,n.head&&(n.head.done=!1),!(1&n.wrap)||(((255&E)<<8)+(E>>8))%31){_.msg="incorrect header check",n.mode=30;break}if((15&E)!=8){_.msg="unknown compression method",n.mode=30;break}if(S-=4,r=8+(15&(E>>>=4)),n.wbits===0)n.wbits=r;else if(r>n.wbits){_.msg="invalid window size",n.mode=30;break}n.dmax=1<<r,_.adler=n.check=1,n.mode=512&E?10:12,S=E=0;break;case 2:for(;S<16;){if(W===0)break e;W--,E+=M[U++]<<S,S+=8}if(n.flags=E,(255&n.flags)!=8){_.msg="unknown compression method",n.mode=30;break}if(57344&n.flags){_.msg="unknown header flags set",n.mode=30;break}n.head&&(n.head.text=E>>8&1),512&n.flags&&(v[0]=255&E,v[1]=E>>>8&255,n.check=t(n.check,v,2,0)),S=E=0,n.mode=3;case 3:for(;S<32;){if(W===0)break e;W--,E+=M[U++]<<S,S+=8}n.head&&(n.head.time=E),512&n.flags&&(v[0]=255&E,v[1]=E>>>8&255,v[2]=E>>>16&255,v[3]=E>>>24&255,n.check=t(n.check,v,4,0)),S=E=0,n.mode=4;case 4:for(;S<16;){if(W===0)break e;W--,E+=M[U++]<<S,S+=8}n.head&&(n.head.xflags=255&E,n.head.os=E>>8),512&n.flags&&(v[0]=255&E,v[1]=E>>>8&255,n.check=t(n.check,v,2,0)),S=E=0,n.mode=5;case 5:if(1024&n.flags){for(;S<16;){if(W===0)break e;W--,E+=M[U++]<<S,S+=8}n.length=E,n.head&&(n.head.extra_len=E),512&n.flags&&(v[0]=255&E,v[1]=E>>>8&255,n.check=t(n.check,v,2,0)),S=E=0}else n.head&&(n.head.extra=null);n.mode=6;case 6:if(1024&n.flags&&(W<(H=n.length)&&(H=W),H&&(n.head&&(r=n.head.extra_len-n.length,n.head.extra||(n.head.extra=new Array(n.head.extra_len)),c.arraySet(n.head.extra,M,U,H,r)),512&n.flags&&(n.check=t(n.check,M,H,U)),W-=H,U+=H,n.length-=H),n.length))break e;n.length=0,n.mode=7;case 7:if(2048&n.flags){if(W===0)break e;for(H=0;r=M[U+H++],n.head&&r&&n.length<65536&&(n.head.name+=String.fromCharCode(r)),r&&H<W;);if(512&n.flags&&(n.check=t(n.check,M,H,U)),W-=H,U+=H,r)break e}else n.head&&(n.head.name=null);n.length=0,n.mode=8;case 8:if(4096&n.flags){if(W===0)break e;for(H=0;r=M[U+H++],n.head&&r&&n.length<65536&&(n.head.comment+=String.fromCharCode(r)),r&&H<W;);if(512&n.flags&&(n.check=t(n.check,M,H,U)),W-=H,U+=H,r)break e}else n.head&&(n.head.comment=null);n.mode=9;case 9:if(512&n.flags){for(;S<16;){if(W===0)break e;W--,E+=M[U++]<<S,S+=8}if(E!==(65535&n.check)){_.msg="header crc mismatch",n.mode=30;break}S=E=0}n.head&&(n.head.hcrc=n.flags>>9&1,n.head.done=!0),_.adler=n.check=0,n.mode=12;break;case 10:for(;S<32;){if(W===0)break e;W--,E+=M[U++]<<S,S+=8}_.adler=n.check=u(E),S=E=0,n.mode=11;case 11:if(n.havedict===0)return _.next_out=ee,_.avail_out=Q,_.next_in=U,_.avail_in=W,n.hold=E,n.bits=S,2;_.adler=n.check=1,n.mode=12;case 12:if(z===5||z===6)break e;case 13:if(n.last){E>>>=7&S,S-=7&S,n.mode=27;break}for(;S<3;){if(W===0)break e;W--,E+=M[U++]<<S,S+=8}switch(n.last=1&E,S-=1,3&(E>>>=1)){case 0:n.mode=14;break;case 1:if(j(n),n.mode=20,z!==6)break;E>>>=2,S-=2;break e;case 2:n.mode=17;break;case 3:_.msg="invalid block type",n.mode=30}E>>>=2,S-=2;break;case 14:for(E>>>=7&S,S-=7&S;S<32;){if(W===0)break e;W--,E+=M[U++]<<S,S+=8}if((65535&E)!=(E>>>16^65535)){_.msg="invalid stored block lengths",n.mode=30;break}if(n.length=65535&E,S=E=0,n.mode=15,z===6)break e;case 15:n.mode=16;case 16:if(H=n.length){if(W<H&&(H=W),Q<H&&(H=Q),H===0)break e;c.arraySet(J,M,U,H,ee),W-=H,U+=H,Q-=H,ee+=H,n.length-=H;break}n.mode=12;break;case 17:for(;S<14;){if(W===0)break e;W--,E+=M[U++]<<S,S+=8}if(n.nlen=257+(31&E),E>>>=5,S-=5,n.ndist=1+(31&E),E>>>=5,S-=5,n.ncode=4+(15&E),E>>>=4,S-=4,286<n.nlen||30<n.ndist){_.msg="too many length or distance symbols",n.mode=30;break}n.have=0,n.mode=18;case 18:for(;n.have<n.ncode;){for(;S<3;){if(W===0)break e;W--,E+=M[U++]<<S,S+=8}n.lens[F[n.have++]]=7&E,E>>>=3,S-=3}for(;n.have<19;)n.lens[F[n.have++]]=0;if(n.lencode=n.lendyn,n.lenbits=7,A={bits:n.lenbits},T=h(0,n.lens,0,19,n.lencode,0,n.work,A),n.lenbits=A.bits,T){_.msg="invalid code lengths set",n.mode=30;break}n.have=0,n.mode=19;case 19:for(;n.have<n.nlen+n.ndist;){for(;oe=(f=n.lencode[E&(1<<n.lenbits)-1])>>>16&255,ce=65535&f,!((te=f>>>24)<=S);){if(W===0)break e;W--,E+=M[U++]<<S,S+=8}if(ce<16)E>>>=te,S-=te,n.lens[n.have++]=ce;else{if(ce===16){for(k=te+2;S<k;){if(W===0)break e;W--,E+=M[U++]<<S,S+=8}if(E>>>=te,S-=te,n.have===0){_.msg="invalid bit length repeat",n.mode=30;break}r=n.lens[n.have-1],H=3+(3&E),E>>>=2,S-=2}else if(ce===17){for(k=te+3;S<k;){if(W===0)break e;W--,E+=M[U++]<<S,S+=8}S-=te,r=0,H=3+(7&(E>>>=te)),E>>>=3,S-=3}else{for(k=te+7;S<k;){if(W===0)break e;W--,E+=M[U++]<<S,S+=8}S-=te,r=0,H=11+(127&(E>>>=te)),E>>>=7,S-=7}if(n.have+H>n.nlen+n.ndist){_.msg="invalid bit length repeat",n.mode=30;break}for(;H--;)n.lens[n.have++]=r}}if(n.mode===30)break;if(n.lens[256]===0){_.msg="invalid code -- missing end-of-block",n.mode=30;break}if(n.lenbits=9,A={bits:n.lenbits},T=h(g,n.lens,0,n.nlen,n.lencode,0,n.work,A),n.lenbits=A.bits,T){_.msg="invalid literal/lengths set",n.mode=30;break}if(n.distbits=6,n.distcode=n.distdyn,A={bits:n.distbits},T=h(w,n.lens,n.nlen,n.ndist,n.distcode,0,n.work,A),n.distbits=A.bits,T){_.msg="invalid distances set",n.mode=30;break}if(n.mode=20,z===6)break e;case 20:n.mode=21;case 21:if(6<=W&&258<=Q){_.next_out=ee,_.avail_out=Q,_.next_in=U,_.avail_in=W,n.hold=E,n.bits=S,a(_,G),ee=_.next_out,J=_.output,Q=_.avail_out,U=_.next_in,M=_.input,W=_.avail_in,E=n.hold,S=n.bits,n.mode===12&&(n.back=-1);break}for(n.back=0;oe=(f=n.lencode[E&(1<<n.lenbits)-1])>>>16&255,ce=65535&f,!((te=f>>>24)<=S);){if(W===0)break e;W--,E+=M[U++]<<S,S+=8}if(oe&&(240&oe)==0){for(ie=te,me=oe,he=ce;oe=(f=n.lencode[he+((E&(1<<ie+me)-1)>>ie)])>>>16&255,ce=65535&f,!(ie+(te=f>>>24)<=S);){if(W===0)break e;W--,E+=M[U++]<<S,S+=8}E>>>=ie,S-=ie,n.back+=ie}if(E>>>=te,S-=te,n.back+=te,n.length=ce,oe===0){n.mode=26;break}if(32&oe){n.back=-1,n.mode=12;break}if(64&oe){_.msg="invalid literal/length code",n.mode=30;break}n.extra=15&oe,n.mode=22;case 22:if(n.extra){for(k=n.extra;S<k;){if(W===0)break e;W--,E+=M[U++]<<S,S+=8}n.length+=E&(1<<n.extra)-1,E>>>=n.extra,S-=n.extra,n.back+=n.extra}n.was=n.length,n.mode=23;case 23:for(;oe=(f=n.distcode[E&(1<<n.distbits)-1])>>>16&255,ce=65535&f,!((te=f>>>24)<=S);){if(W===0)break e;W--,E+=M[U++]<<S,S+=8}if((240&oe)==0){for(ie=te,me=oe,he=ce;oe=(f=n.distcode[he+((E&(1<<ie+me)-1)>>ie)])>>>16&255,ce=65535&f,!(ie+(te=f>>>24)<=S);){if(W===0)break e;W--,E+=M[U++]<<S,S+=8}E>>>=ie,S-=ie,n.back+=ie}if(E>>>=te,S-=te,n.back+=te,64&oe){_.msg="invalid distance code",n.mode=30;break}n.offset=ce,n.extra=15&oe,n.mode=24;case 24:if(n.extra){for(k=n.extra;S<k;){if(W===0)break e;W--,E+=M[U++]<<S,S+=8}n.offset+=E&(1<<n.extra)-1,E>>>=n.extra,S-=n.extra,n.back+=n.extra}if(n.offset>n.dmax){_.msg="invalid distance too far back",n.mode=30;break}n.mode=25;case 25:if(Q===0)break e;if(H=G-Q,n.offset>H){if((H=n.offset-H)>n.whave&&n.sane){_.msg="invalid distance too far back",n.mode=30;break}ae=H>n.wnext?(H-=n.wnext,n.wsize-H):n.wnext-H,H>n.length&&(H=n.length),le=n.window}else le=J,ae=ee-n.offset,H=n.length;for(Q<H&&(H=Q),Q-=H,n.length-=H;J[ee++]=le[ae++],--H;);n.length===0&&(n.mode=21);break;case 26:if(Q===0)break e;J[ee++]=n.length,Q--,n.mode=21;break;case 27:if(n.wrap){for(;S<32;){if(W===0)break e;W--,E|=M[U++]<<S,S+=8}if(G-=Q,_.total_out+=G,n.total+=G,G&&(_.adler=n.check=n.flags?t(n.check,J,G,ee-G):e(n.check,J,G,ee-G)),G=Q,(n.flags?E:u(E))!==n.check){_.msg="incorrect data check",n.mode=30;break}S=E=0}n.mode=28;case 28:if(n.wrap&&n.flags){for(;S<32;){if(W===0)break e;W--,E+=M[U++]<<S,S+=8}if(E!==(4294967295&n.total)){_.msg="incorrect length check",n.mode=30;break}S=E=0}n.mode=29;case 29:T=1;break e;case 30:T=-3;break e;case 31:return-4;case 32:default:return s}return _.next_out=ee,_.avail_out=Q,_.next_in=U,_.avail_in=W,n.hold=E,n.bits=S,(n.wsize||G!==_.avail_out&&n.mode<30&&(n.mode<27||z!==4))&&K(_,_.output,_.next_out,G-_.avail_out)?(n.mode=31,-4):(Y-=_.avail_in,G-=_.avail_out,_.total_in+=Y,_.total_out+=G,n.total+=G,n.wrap&&G&&(_.adler=n.check=n.flags?t(n.check,J,G,_.next_out-G):e(n.check,J,G,_.next_out-G)),_.data_type=n.bits+(n.last?64:0)+(n.mode===12?128:0)+(n.mode===20||n.mode===15?256:0),(Y==0&&G===0||z===4)&&T===y&&(T=-5),T)},d.inflateEnd=function(_){if(!_||!_.state)return s;var z=_.state;return z.window&&(z.window=null),_.state=null,y},d.inflateGetHeader=function(_,z){var n;return _&&_.state?(2&(n=_.state).wrap)==0?s:((n.head=z).done=!1,y):s},d.inflateSetDictionary=function(_,z){var n,M=z.length;return _&&_.state?(n=_.state).wrap!==0&&n.mode!==11?s:n.mode===11&&e(1,z,M,0)!==n.check?-3:K(_,z,M,M)?(n.mode=31,-4):(n.havedict=1,y):s},d.inflateInfo="pako inflate (from Nodeca project)"},{"../utils/common":41,"./adler32":43,"./crc32":45,"./inffast":48,"./inftrees":50}],50:[function(o,l,d){var c=o("../utils/common"),e=[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],t=[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],a=[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],h=[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];l.exports=function(g,w,y,s,b,i,m,u){var p,B,P,C,L,I,D,O,j,K=u.bits,_=0,z=0,n=0,M=0,J=0,U=0,ee=0,W=0,Q=0,E=0,S=null,Y=0,G=new c.Buf16(16),H=new c.Buf16(16),ae=null,le=0;for(_=0;_<=15;_++)G[_]=0;for(z=0;z<s;z++)G[w[y+z]]++;for(J=K,M=15;1<=M&&G[M]===0;M--);if(M<J&&(J=M),M===0)return b[i++]=20971520,b[i++]=20971520,u.bits=1,0;for(n=1;n<M&&G[n]===0;n++);for(J<n&&(J=n),_=W=1;_<=15;_++)if(W<<=1,(W-=G[_])<0)return-1;if(0<W&&(g===0||M!==1))return-1;for(H[1]=0,_=1;_<15;_++)H[_+1]=H[_]+G[_];for(z=0;z<s;z++)w[y+z]!==0&&(m[H[w[y+z]]++]=z);if(I=g===0?(S=ae=m,19):g===1?(S=e,Y-=257,ae=t,le-=257,256):(S=a,ae=h,-1),_=n,L=i,ee=z=E=0,P=-1,C=(Q=1<<(U=J))-1,g===1&&852<Q||g===2&&592<Q)return 1;for(;;){for(D=_-ee,j=m[z]<I?(O=0,m[z]):m[z]>I?(O=ae[le+m[z]],S[Y+m[z]]):(O=96,0),p=1<<_-ee,n=B=1<<U;b[L+(E>>ee)+(B-=p)]=D<<24|O<<16|j|0,B!==0;);for(p=1<<_-1;E&p;)p>>=1;if(p!==0?(E&=p-1,E+=p):E=0,z++,--G[_]==0){if(_===M)break;_=w[y+m[z]]}if(J<_&&(E&C)!==P){for(ee===0&&(ee=J),L+=n,W=1<<(U=_-ee);U+ee<M&&!((W-=G[U+ee])<=0);)U++,W<<=1;if(Q+=1<<U,g===1&&852<Q||g===2&&592<Q)return 1;b[P=E&C]=J<<24|U<<16|L-i|0}}return E!==0&&(b[L+E]=_-ee<<24|64<<16|0),u.bits=J,0}},{"../utils/common":41}],51:[function(o,l,d){l.exports={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"}},{}],52:[function(o,l,d){var c=o("../utils/common"),e=0,t=1;function a(f){for(var v=f.length;0<=--v;)f[v]=0}var h=0,g=29,w=256,y=w+1+g,s=30,b=19,i=2*y+1,m=15,u=16,p=7,B=256,P=16,C=17,L=18,I=[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=[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],O=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7],j=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],K=new Array(2*(y+2));a(K);var _=new Array(2*s);a(_);var z=new Array(512);a(z);var n=new Array(256);a(n);var M=new Array(g);a(M);var J,U,ee,W=new Array(s);function Q(f,v,F,N,x){this.static_tree=f,this.extra_bits=v,this.extra_base=F,this.elems=N,this.max_length=x,this.has_stree=f&&f.length}function E(f,v){this.dyn_tree=f,this.max_code=0,this.stat_desc=v}function S(f){return f<256?z[f]:z[256+(f>>>7)]}function Y(f,v){f.pending_buf[f.pending++]=255&v,f.pending_buf[f.pending++]=v>>>8&255}function G(f,v,F){f.bi_valid>u-F?(f.bi_buf|=v<<f.bi_valid&65535,Y(f,f.bi_buf),f.bi_buf=v>>u-f.bi_valid,f.bi_valid+=F-u):(f.bi_buf|=v<<f.bi_valid&65535,f.bi_valid+=F)}function H(f,v,F){G(f,F[2*v],F[2*v+1])}function ae(f,v){for(var F=0;F|=1&f,f>>>=1,F<<=1,0<--v;);return F>>>1}function le(f,v,F){var N,x,Z=new Array(m+1),X=0;for(N=1;N<=m;N++)Z[N]=X=X+F[N-1]<<1;for(x=0;x<=v;x++){var q=f[2*x+1];q!==0&&(f[2*x]=ae(Z[q]++,q))}}function te(f){var v;for(v=0;v<y;v++)f.dyn_ltree[2*v]=0;for(v=0;v<s;v++)f.dyn_dtree[2*v]=0;for(v=0;v<b;v++)f.bl_tree[2*v]=0;f.dyn_ltree[2*B]=1,f.opt_len=f.static_len=0,f.last_lit=f.matches=0}function oe(f){8<f.bi_valid?Y(f,f.bi_buf):0<f.bi_valid&&(f.pending_buf[f.pending++]=f.bi_buf),f.bi_buf=0,f.bi_valid=0}function ce(f,v,F,N){var x=2*v,Z=2*F;return f[x]<f[Z]||f[x]===f[Z]&&N[v]<=N[F]}function ie(f,v,F){for(var N=f.heap[F],x=F<<1;x<=f.heap_len&&(x<f.heap_len&&ce(v,f.heap[x+1],f.heap[x],f.depth)&&x++,!ce(v,N,f.heap[x],f.depth));)f.heap[F]=f.heap[x],F=x,x<<=1;f.heap[F]=N}function me(f,v,F){var N,x,Z,X,q=0;if(f.last_lit!==0)for(;N=f.pending_buf[f.d_buf+2*q]<<8|f.pending_buf[f.d_buf+2*q+1],x=f.pending_buf[f.l_buf+q],q++,N===0?H(f,x,v):(H(f,(Z=n[x])+w+1,v),(X=I[Z])!==0&&G(f,x-=M[Z],X),H(f,Z=S(--N),F),(X=D[Z])!==0&&G(f,N-=W[Z],X)),q<f.last_lit;);H(f,B,v)}function he(f,v){var F,N,x,Z=v.dyn_tree,X=v.stat_desc.static_tree,q=v.stat_desc.has_stree,V=v.stat_desc.elems,ne=-1;for(f.heap_len=0,f.heap_max=i,F=0;F<V;F++)Z[2*F]!==0?(f.heap[++f.heap_len]=ne=F,f.depth[F]=0):Z[2*F+1]=0;for(;f.heap_len<2;)Z[2*(x=f.heap[++f.heap_len]=ne<2?++ne:0)]=1,f.depth[x]=0,f.opt_len--,q&&(f.static_len-=X[2*x+1]);for(v.max_code=ne,F=f.heap_len>>1;1<=F;F--)ie(f,Z,F);for(x=V;F=f.heap[1],f.heap[1]=f.heap[f.heap_len--],ie(f,Z,1),N=f.heap[1],f.heap[--f.heap_max]=F,f.heap[--f.heap_max]=N,Z[2*x]=Z[2*F]+Z[2*N],f.depth[x]=(f.depth[F]>=f.depth[N]?f.depth[F]:f.depth[N])+1,Z[2*F+1]=Z[2*N+1]=x,f.heap[1]=x++,ie(f,Z,1),2<=f.heap_len;);f.heap[--f.heap_max]=f.heap[1],function(re,ue){var ye,pe,_e,se,Ae,Me,ge=ue.dyn_tree,Ye=ue.max_code,bt=ue.stat_desc.static_tree,yt=ue.stat_desc.has_stree,_t=ue.stat_desc.extra_bits,Ke=ue.stat_desc.extra_base,Be=ue.stat_desc.max_length,Ie=0;for(se=0;se<=m;se++)re.bl_count[se]=0;for(ge[2*re.heap[re.heap_max]+1]=0,ye=re.heap_max+1;ye<i;ye++)Be<(se=ge[2*ge[2*(pe=re.heap[ye])+1]+1]+1)&&(se=Be,Ie++),ge[2*pe+1]=se,Ye<pe||(re.bl_count[se]++,Ae=0,Ke<=pe&&(Ae=_t[pe-Ke]),Me=ge[2*pe],re.opt_len+=Me*(se+Ae),yt&&(re.static_len+=Me*(bt[2*pe+1]+Ae)));if(Ie!==0){do{for(se=Be-1;re.bl_count[se]===0;)se--;re.bl_count[se]--,re.bl_count[se+1]+=2,re.bl_count[Be]--,Ie-=2}while(0<Ie);for(se=Be;se!==0;se--)for(pe=re.bl_count[se];pe!==0;)Ye<(_e=re.heap[--ye])||(ge[2*_e+1]!==se&&(re.opt_len+=(se-ge[2*_e+1])*ge[2*_e],ge[2*_e+1]=se),pe--)}}(f,v),le(Z,ne,f.bl_count)}function r(f,v,F){var N,x,Z=-1,X=v[1],q=0,V=7,ne=4;for(X===0&&(V=138,ne=3),v[2*(F+1)+1]=65535,N=0;N<=F;N++)x=X,X=v[2*(N+1)+1],++q<V&&x===X||(q<ne?f.bl_tree[2*x]+=q:x!==0?(x!==Z&&f.bl_tree[2*x]++,f.bl_tree[2*P]++):q<=10?f.bl_tree[2*C]++:f.bl_tree[2*L]++,Z=x,ne=(q=0)===X?(V=138,3):x===X?(V=6,3):(V=7,4))}function T(f,v,F){var N,x,Z=-1,X=v[1],q=0,V=7,ne=4;for(X===0&&(V=138,ne=3),N=0;N<=F;N++)if(x=X,X=v[2*(N+1)+1],!(++q<V&&x===X)){if(q<ne)for(;H(f,x,f.bl_tree),--q!=0;);else x!==0?(x!==Z&&(H(f,x,f.bl_tree),q--),H(f,P,f.bl_tree),G(f,q-3,2)):q<=10?(H(f,C,f.bl_tree),G(f,q-3,3)):(H(f,L,f.bl_tree),G(f,q-11,7));Z=x,ne=(q=0)===X?(V=138,3):x===X?(V=6,3):(V=7,4)}}a(W);var A=!1;function k(f,v,F,N){G(f,(h<<1)+(N?1:0),3),function(x,Z,X,q){oe(x),Y(x,X),Y(x,~X),c.arraySet(x.pending_buf,x.window,Z,X,x.pending),x.pending+=X}(f,v,F)}d._tr_init=function(f){A||(function(){var v,F,N,x,Z,X=new Array(m+1);for(x=N=0;x<g-1;x++)for(M[x]=N,v=0;v<1<<I[x];v++)n[N++]=x;for(n[N-1]=x,x=Z=0;x<16;x++)for(W[x]=Z,v=0;v<1<<D[x];v++)z[Z++]=x;for(Z>>=7;x<s;x++)for(W[x]=Z<<7,v=0;v<1<<D[x]-7;v++)z[256+Z++]=x;for(F=0;F<=m;F++)X[F]=0;for(v=0;v<=143;)K[2*v+1]=8,v++,X[8]++;for(;v<=255;)K[2*v+1]=9,v++,X[9]++;for(;v<=279;)K[2*v+1]=7,v++,X[7]++;for(;v<=287;)K[2*v+1]=8,v++,X[8]++;for(le(K,y+1,X),v=0;v<s;v++)_[2*v+1]=5,_[2*v]=ae(v,5);J=new Q(K,I,w+1,y,m),U=new Q(_,D,0,s,m),ee=new Q(new Array(0),O,0,b,p)}(),A=!0),f.l_desc=new E(f.dyn_ltree,J),f.d_desc=new E(f.dyn_dtree,U),f.bl_desc=new E(f.bl_tree,ee),f.bi_buf=0,f.bi_valid=0,te(f)},d._tr_stored_block=k,d._tr_flush_block=function(f,v,F,N){var x,Z,X=0;0<f.level?(f.strm.data_type===2&&(f.strm.data_type=function(q){var V,ne=4093624447;for(V=0;V<=31;V++,ne>>>=1)if(1&ne&&q.dyn_ltree[2*V]!==0)return e;if(q.dyn_ltree[18]!==0||q.dyn_ltree[20]!==0||q.dyn_ltree[26]!==0)return t;for(V=32;V<w;V++)if(q.dyn_ltree[2*V]!==0)return t;return e}(f)),he(f,f.l_desc),he(f,f.d_desc),X=function(q){var V;for(r(q,q.dyn_ltree,q.l_desc.max_code),r(q,q.dyn_dtree,q.d_desc.max_code),he(q,q.bl_desc),V=b-1;3<=V&&q.bl_tree[2*j[V]+1]===0;V--);return q.opt_len+=3*(V+1)+5+5+4,V}(f),x=f.opt_len+3+7>>>3,(Z=f.static_len+3+7>>>3)<=x&&(x=Z)):x=Z=F+5,F+4<=x&&v!==-1?k(f,v,F,N):f.strategy===4||Z===x?(G(f,2+(N?1:0),3),me(f,K,_)):(G(f,4+(N?1:0),3),function(q,V,ne,re){var ue;for(G(q,V-257,5),G(q,ne-1,5),G(q,re-4,4),ue=0;ue<re;ue++)G(q,q.bl_tree[2*j[ue]+1],3);T(q,q.dyn_ltree,V-1),T(q,q.dyn_dtree,ne-1)}(f,f.l_desc.max_code+1,f.d_desc.max_code+1,X+1),me(f,f.dyn_ltree,f.dyn_dtree)),te(f),N&&oe(f)},d._tr_tally=function(f,v,F){return f.pending_buf[f.d_buf+2*f.last_lit]=v>>>8&255,f.pending_buf[f.d_buf+2*f.last_lit+1]=255&v,f.pending_buf[f.l_buf+f.last_lit]=255&F,f.last_lit++,v===0?f.dyn_ltree[2*F]++:(f.matches++,v--,f.dyn_ltree[2*(n[F]+w+1)]++,f.dyn_dtree[2*S(v)]++),f.last_lit===f.lit_bufsize-1},d._tr_align=function(f){G(f,2,3),H(f,B,K),function(v){v.bi_valid===16?(Y(v,v.bi_buf),v.bi_buf=0,v.bi_valid=0):8<=v.bi_valid&&(v.pending_buf[v.pending++]=255&v.bi_buf,v.bi_buf>>=8,v.bi_valid-=8)}(f)}},{"../utils/common":41}],53:[function(o,l,d){l.exports=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}},{}],54:[function(o,l,d){(function(c){(function(e,t){if(!e.setImmediate){var a,h,g,w,y=1,s={},b=!1,i=e.document,m=Object.getPrototypeOf&&Object.getPrototypeOf(e);m=m&&m.setTimeout?m:e,a={}.toString.call(e.process)==="[object process]"?function(P){process.nextTick(function(){p(P)})}:function(){if(e.postMessage&&!e.importScripts){var P=!0,C=e.onmessage;return e.onmessage=function(){P=!1},e.postMessage("","*"),e.onmessage=C,P}}()?(w="setImmediate$"+Math.random()+"$",e.addEventListener?e.addEventListener("message",B,!1):e.attachEvent("onmessage",B),function(P){e.postMessage(w+P,"*")}):e.MessageChannel?((g=new MessageChannel).port1.onmessage=function(P){p(P.data)},function(P){g.port2.postMessage(P)}):i&&"onreadystatechange"in i.createElement("script")?(h=i.documentElement,function(P){var C=i.createElement("script");C.onreadystatechange=function(){p(P),C.onreadystatechange=null,h.removeChild(C),C=null},h.appendChild(C)}):function(P){setTimeout(p,0,P)},m.setImmediate=function(P){typeof P!="function"&&(P=new Function(""+P));for(var C=new Array(arguments.length-1),L=0;L<C.length;L++)C[L]=arguments[L+1];var I={callback:P,args:C};return s[y]=I,a(y),y++},m.clearImmediate=u}function u(P){delete s[P]}function p(P){if(b)setTimeout(p,0,P);else{var C=s[P];if(C){b=!0;try{(function(L){var I=L.callback,D=L.args;switch(D.length){case 0:I();break;case 1:I(D[0]);break;case 2:I(D[0],D[1]);break;case 3:I(D[0],D[1],D[2]);break;default:I.apply(t,D)}})(C)}finally{u(P),b=!1}}}}function B(P){P.source===e&&typeof P.data=="string"&&P.data.indexOf(w)===0&&p(+P.data.slice(w.length))}})(typeof self>"u"?c===void 0?this:c:self)}).call(this,typeof de<"u"?de:typeof self<"u"?self:typeof window<"u"?window:{})},{}]},{},[10])(10)})}(Fe)),Fe.exports}var Je=Qe(),De=fe(Je);const je=Symbol("Comlink.proxy"),et=Symbol("Comlink.endpoint"),tt=Symbol("Comlink.releaseProxy"),Oe=Symbol("Comlink.finalizer"),ve=Symbol("Comlink.thrown"),Ue=R=>typeof R=="object"&&R!==null||typeof R=="function",rt={canHandle:R=>Ue(R)&&R[je],serialize(R){const{port1:$,port2:o}=new MessageChannel;return ze(R,$),[o,[o]]},deserialize(R){return R.start(),it(R)}},ot={canHandle:R=>Ue(R)&&ve in R,serialize({value:R}){let $;return R instanceof Error?$={isError:!0,value:{message:R.message,name:R.name,stack:R.stack}}:$={isError:!1,value:R},[$,[]]},deserialize(R){throw R.isError?Object.assign(new Error(R.value.message),R.value):R.value}},We=new Map([["proxy",rt],["throw",ot]]);function nt(R,$){for(const o of R)if($===o||o==="*"||o instanceof RegExp&&o.test($))return!0;return!1}function ze(R,$=globalThis,o=["*"]){$.addEventListener("message",function l(d){if(!d||!d.data)return;if(!nt(o,d.origin)){console.warn(\`Invalid origin '\${d.origin}' for comlink proxy\`);return}const{id:c,type:e,path:t}=Object.assign({path:[]},d.data),a=(d.data.argumentList||[]).map(we);let h;try{const g=t.slice(0,-1).reduce((y,s)=>y[s],R),w=t.reduce((y,s)=>y[s],R);switch(e){case"GET":h=w;break;case"SET":g[t.slice(-1)[0]]=we(d.data.value),h=!0;break;case"APPLY":h=w.apply(g,a);break;case"CONSTRUCT":{const y=new w(...a);h=dt(y)}break;case"ENDPOINT":{const{port1:y,port2:s}=new MessageChannel;ze(R,s),h=Le(y,[y])}break;case"RELEASE":h=void 0;break;default:return}}catch(g){h={value:g,[ve]:0}}Promise.resolve(h).catch(g=>({value:g,[ve]:0})).then(g=>{const[w,y]=Se(g);$.postMessage(Object.assign(Object.assign({},w),{id:c}),y),e==="RELEASE"&&($.removeEventListener("message",l),Ze($),Oe in R&&typeof R[Oe]=="function"&&R[Oe]())}).catch(g=>{const[w,y]=Se({value:new TypeError("Unserializable return value"),[ve]:0});$.postMessage(Object.assign(Object.assign({},w),{id:c}),y)})}),$.start&&$.start()}function at(R){return R.constructor.name==="MessagePort"}function Ze(R){at(R)&&R.close()}function it(R,$){const o=new Map;return R.addEventListener("message",function(l){const{data:d}=l;if(!d||!d.id)return;const c=o.get(d.id);if(c)try{c(d)}finally{o.delete(d.id)}}),Re(R,o,[],$)}function Ce(R){if(R)throw new Error("Proxy has been released and is not useable")}function qe(R){return be(R,new Map,{type:"RELEASE"}).then(()=>{Ze(R)})}const Pe=new WeakMap,xe="FinalizationRegistry"in globalThis&&new FinalizationRegistry(R=>{const $=(Pe.get(R)||0)-1;Pe.set(R,$),$===0&&qe(R)});function st(R,$){const o=(Pe.get($)||0)+1;Pe.set($,o),xe&&xe.register(R,$,R)}function ct(R){xe&&xe.unregister(R)}function Re(R,$,o=[],l=function(){}){let d=!1;const c=new Proxy(l,{get(e,t){if(Ce(d),t===tt)return()=>{ct(c),qe(R),$.clear(),d=!0};if(t==="then"){if(o.length===0)return{then:()=>c};const a=be(R,$,{type:"GET",path:o.map(h=>h.toString())}).then(we);return a.then.bind(a)}return Re(R,$,[...o,t])},set(e,t,a){Ce(d);const[h,g]=Se(a);return be(R,$,{type:"SET",path:[...o,t].map(w=>w.toString()),value:h},g).then(we)},apply(e,t,a){Ce(d);const h=o[o.length-1];if(h===et)return be(R,$,{type:"ENDPOINT"}).then(we);if(h==="bind")return Re(R,$,o.slice(0,-1));const[g,w]=He(a);return be(R,$,{type:"APPLY",path:o.map(y=>y.toString()),argumentList:g},w).then(we)},construct(e,t){Ce(d);const[a,h]=He(t);return be(R,$,{type:"CONSTRUCT",path:o.map(g=>g.toString()),argumentList:a},h).then(we)}});return st(c,R),c}function lt(R){return Array.prototype.concat.apply([],R)}function He(R){const $=R.map(Se);return[$.map(o=>o[0]),lt($.map(o=>o[1]))]}const $e=new WeakMap;function Le(R,$){return $e.set(R,$),R}function dt(R){return Object.assign(R,{[je]:!0})}function Se(R){for(const[$,o]of We)if(o.canHandle(R)){const[l,d]=o.serialize(R);return[{type:"HANDLER",name:$,value:l},d]}return[{type:"RAW",value:R},$e.get(R)||[]]}function we(R){switch(R.type){case"HANDLER":return We.get(R.name).deserialize(R.value);case"RAW":return R.value}}function be(R,$,o,l){return new Promise(d=>{const c=ut();$.set(c,d),R.start&&R.start(),R.postMessage(Object.assign({id:c},o),l)})}function ut(){return new Array(4).fill(0).map(()=>Math.floor(Math.random()*Number.MAX_SAFE_INTEGER).toString(16)).join("-")}var Te={exports:{}},Ge=Te.exports,Xe;function ht(){return Xe||(Xe=1,function(R,$){var o=o||{};o.scope={},o.ASSUME_ES5=!1,o.ASSUME_NO_NATIVE_MAP=!1,o.ASSUME_NO_NATIVE_SET=!1,o.SIMPLE_FROUND_POLYFILL=!1,o.ISOLATE_POLYFILLS=!1,o.FORCE_POLYFILL_PROMISE=!1,o.FORCE_POLYFILL_PROMISE_WHEN_NO_UNHANDLED_REJECTION=!1,o.defineProperty=o.ASSUME_ES5||typeof Object.defineProperties=="function"?Object.defineProperty:function(l,d,c){return l==Array.prototype||l==Object.prototype||(l[d]=c.value),l},o.getGlobal=function(l){l=[typeof globalThis=="object"&&globalThis,l,typeof window=="object"&&window,typeof self=="object"&&self,typeof de=="object"&&de];for(var d=0;d<l.length;++d){var c=l[d];if(c&&c.Math==Math)return c}throw Error("Cannot find global object")},o.global=o.getGlobal(Ge),o.IS_SYMBOL_NATIVE=typeof Symbol=="function"&&typeof Symbol("x")=="symbol",o.TRUST_ES6_POLYFILLS=!o.ISOLATE_POLYFILLS||o.IS_SYMBOL_NATIVE,o.polyfills={},o.propertyToPolyfillSymbol={},o.POLYFILL_PREFIX="$jscp$",o.polyfill=function(l,d,c,e){d&&(o.ISOLATE_POLYFILLS?o.polyfillIsolated(l,d,c,e):o.polyfillUnisolated(l,d,c,e))},o.polyfillUnisolated=function(l,d,c,e){for(c=o.global,l=l.split("."),e=0;e<l.length-1;e++){var t=l[e];if(!(t in c))return;c=c[t]}l=l[l.length-1],e=c[l],d=d(e),d!=e&&d!=null&&o.defineProperty(c,l,{configurable:!0,writable:!0,value:d})},o.polyfillIsolated=function(l,d,c,e){var t=l.split(".");l=t.length===1,e=t[0],e=!l&&e in o.polyfills?o.polyfills:o.global;for(var a=0;a<t.length-1;a++){var h=t[a];if(!(h in e))return;e=e[h]}t=t[t.length-1],c=o.IS_SYMBOL_NATIVE&&c==="es6"?e[t]:null,d=d(c),d!=null&&(l?o.defineProperty(o.polyfills,t,{configurable:!0,writable:!0,value:d}):d!==c&&(o.propertyToPolyfillSymbol[t]===void 0&&(c=1e9*Math.random()>>>0,o.propertyToPolyfillSymbol[t]=o.IS_SYMBOL_NATIVE?o.global.Symbol(t):o.POLYFILL_PREFIX+c+"$"+t),o.defineProperty(e,o.propertyToPolyfillSymbol[t],{configurable:!0,writable:!0,value:d})))},o.underscoreProtoCanBeSet=function(){var l={a:!0},d={};try{return d.__proto__=l,d.a}catch{}return!1},o.setPrototypeOf=o.TRUST_ES6_POLYFILLS&&typeof Object.setPrototypeOf=="function"?Object.setPrototypeOf:o.underscoreProtoCanBeSet()?function(l,d){if(l.__proto__=d,l.__proto__!==d)throw new TypeError(l+" is not extensible");return l}:null,o.arrayIteratorImpl=function(l){var d=0;return function(){return d<l.length?{done:!1,value:l[d++]}:{done:!0}}},o.arrayIterator=function(l){return{next:o.arrayIteratorImpl(l)}},o.makeIterator=function(l){var d=typeof Symbol<"u"&&Symbol.iterator&&l[Symbol.iterator];return d?d.call(l):o.arrayIterator(l)},o.generator={},o.generator.ensureIteratorResultIsObject_=function(l){if(!(l instanceof Object))throw new TypeError("Iterator result "+l+" is not an object")},o.generator.Context=function(){this.isRunning_=!1,this.yieldAllIterator_=null,this.yieldResult=void 0,this.nextAddress=1,this.finallyAddress_=this.catchAddress_=0,this.finallyContexts_=this.abruptCompletion_=null},o.generator.Context.prototype.start_=function(){if(this.isRunning_)throw new TypeError("Generator is already running");this.isRunning_=!0},o.generator.Context.prototype.stop_=function(){this.isRunning_=!1},o.generator.Context.prototype.jumpToErrorHandler_=function(){this.nextAddress=this.catchAddress_||this.finallyAddress_},o.generator.Context.prototype.next_=function(l){this.yieldResult=l},o.generator.Context.prototype.throw_=function(l){this.abruptCompletion_={exception:l,isException:!0},this.jumpToErrorHandler_()},o.generator.Context.prototype.return=function(l){this.abruptCompletion_={return:l},this.nextAddress=this.finallyAddress_},o.generator.Context.prototype.jumpThroughFinallyBlocks=function(l){this.abruptCompletion_={jumpTo:l},this.nextAddress=this.finallyAddress_},o.generator.Context.prototype.yield=function(l,d){return this.nextAddress=d,{value:l}},o.generator.Context.prototype.yieldAll=function(l,d){l=o.makeIterator(l);var c=l.next();if(o.generator.ensureIteratorResultIsObject_(c),c.done)this.yieldResult=c.value,this.nextAddress=d;else return this.yieldAllIterator_=l,this.yield(c.value,d)},o.generator.Context.prototype.jumpTo=function(l){this.nextAddress=l},o.generator.Context.prototype.jumpToEnd=function(){this.nextAddress=0},o.generator.Context.prototype.setCatchFinallyBlocks=function(l,d){this.catchAddress_=l,d!=null&&(this.finallyAddress_=d)},o.generator.Context.prototype.setFinallyBlock=function(l){this.catchAddress_=0,this.finallyAddress_=l||0},o.generator.Context.prototype.leaveTryBlock=function(l,d){this.nextAddress=l,this.catchAddress_=d||0},o.generator.Context.prototype.enterCatchBlock=function(l){return this.catchAddress_=l||0,l=this.abruptCompletion_.exception,this.abruptCompletion_=null,l},o.generator.Context.prototype.enterFinallyBlock=function(l,d,c){c?this.finallyContexts_[c]=this.abruptCompletion_:this.finallyContexts_=[this.abruptCompletion_],this.catchAddress_=l||0,this.finallyAddress_=d||0},o.generator.Context.prototype.leaveFinallyBlock=function(l,d){if(d=this.finallyContexts_.splice(d||0)[0],d=this.abruptCompletion_=this.abruptCompletion_||d){if(d.isException)return this.jumpToErrorHandler_();d.jumpTo!=null&&this.finallyAddress_<d.jumpTo?(this.nextAddress=d.jumpTo,this.abruptCompletion_=null):this.nextAddress=this.finallyAddress_}else this.nextAddress=l},o.generator.Context.prototype.forIn=function(l){return new o.generator.Context.PropertyIterator(l)},o.generator.Context.PropertyIterator=function(l){this.object_=l,this.properties_=[];for(var d in l)this.properties_.push(d);this.properties_.reverse()},o.generator.Context.PropertyIterator.prototype.getNext=function(){for(;0<this.properties_.length;){var l=this.properties_.pop();if(l in this.object_)return l}return null},o.generator.Engine_=function(l){this.context_=new o.generator.Context,this.program_=l},o.generator.Engine_.prototype.next_=function(l){return this.context_.start_(),this.context_.yieldAllIterator_?this.yieldAllStep_(this.context_.yieldAllIterator_.next,l,this.context_.next_):(this.context_.next_(l),this.nextStep_())},o.generator.Engine_.prototype.return_=function(l){this.context_.start_();var d=this.context_.yieldAllIterator_;return d?this.yieldAllStep_("return"in d?d.return:function(c){return{value:c,done:!0}},l,this.context_.return):(this.context_.return(l),this.nextStep_())},o.generator.Engine_.prototype.throw_=function(l){return this.context_.start_(),this.context_.yieldAllIterator_?this.yieldAllStep_(this.context_.yieldAllIterator_.throw,l,this.context_.next_):(this.context_.throw_(l),this.nextStep_())},o.generator.Engine_.prototype.yieldAllStep_=function(l,d,c){try{var e=l.call(this.context_.yieldAllIterator_,d);if(o.generator.ensureIteratorResultIsObject_(e),!e.done)return this.context_.stop_(),e;var t=e.value}catch(a){return this.context_.yieldAllIterator_=null,this.context_.throw_(a),this.nextStep_()}return this.context_.yieldAllIterator_=null,c.call(this.context_,t),this.nextStep_()},o.generator.Engine_.prototype.nextStep_=function(){for(;this.context_.nextAddress;)try{var l=this.program_(this.context_);if(l)return this.context_.stop_(),{value:l.value,done:!1}}catch(d){this.context_.yieldResult=void 0,this.context_.throw_(d)}if(this.context_.stop_(),this.context_.abruptCompletion_){if(l=this.context_.abruptCompletion_,this.context_.abruptCompletion_=null,l.isException)throw l.exception;return{value:l.return,done:!0}}return{value:void 0,done:!0}},o.generator.Generator_=function(l){this.next=function(d){return l.next_(d)},this.throw=function(d){return l.throw_(d)},this.return=function(d){return l.return_(d)},this[Symbol.iterator]=function(){return this}},o.generator.createGenerator=function(l,d){return d=new o.generator.Generator_(new o.generator.Engine_(d)),o.setPrototypeOf&&l.prototype&&o.setPrototypeOf(d,l.prototype),d},o.asyncExecutePromiseGenerator=function(l){function d(e){return l.next(e)}function c(e){return l.throw(e)}return new Promise(function(e,t){function a(h){h.done?e(h.value):Promise.resolve(h.value).then(d,c).then(a,t)}a(l.next())})},o.asyncExecutePromiseGeneratorFunction=function(l){return o.asyncExecutePromiseGenerator(l())},o.asyncExecutePromiseGeneratorProgram=function(l){return o.asyncExecutePromiseGenerator(new o.generator.Generator_(new o.generator.Engine_(l)))},function(l,d){R.exports=d()}(Ge,function(){class l{constructor(e,t,a,h,g){this._legacyCanvasSize=l.DEFAULT_CANVAS_SIZE,this._preferredCamera="environment",this._maxScansPerSecond=25,this._lastScanTimestamp=-1,this._destroyed=this._flashOn=this._paused=this._active=!1,this.$video=e,this.$canvas=document.createElement("canvas"),a&&typeof a=="object"?this._onDecode=t:(console.warn(a||h||g?"You're using a deprecated version of the QrScanner constructor which will be removed in the future":"Note that the type of the scan result passed to onDecode will change in the future. To already switch to the new api today, you can pass returnDetailedScanResult: true."),this._legacyOnDecode=t),t=typeof a=="object"?a:{},this._onDecodeError=t.onDecodeError||(typeof a=="function"?a:this._onDecodeError),this._calculateScanRegion=t.calculateScanRegion||(typeof h=="function"?h:this._calculateScanRegion),this._preferredCamera=t.preferredCamera||g||this._preferredCamera,this._legacyCanvasSize=typeof a=="number"?a:typeof h=="number"?h:this._legacyCanvasSize,this._maxScansPerSecond=t.maxScansPerSecond||this._maxScansPerSecond,this._onPlay=this._onPlay.bind(this),this._onLoadedMetaData=this._onLoadedMetaData.bind(this),this._onVisibilityChange=this._onVisibilityChange.bind(this),this._updateOverlay=this._updateOverlay.bind(this),e.disablePictureInPicture=!0,e.playsInline=!0,e.muted=!0;let w=!1;if(e.hidden&&(e.hidden=!1,w=!0),document.body.contains(e)||(document.body.appendChild(e),w=!0),a=e.parentElement,t.highlightScanRegion||t.highlightCodeOutline){if(h=!!t.overlay,this.$overlay=t.overlay||document.createElement("div"),g=this.$overlay.style,g.position="absolute",g.display="none",g.pointerEvents="none",this.$overlay.classList.add("scan-region-highlight"),!h&&t.highlightScanRegion){this.$overlay.innerHTML='<svg class="scan-region-highlight-svg" viewBox="0 0 238 238" preserveAspectRatio="none" style="position:absolute;width:100%;height:100%;left:0;top:0;fill:none;stroke:#e9b213;stroke-width:4;stroke-linecap:round;stroke-linejoin:round"><path d="M31 2H10a8 8 0 0 0-8 8v21M207 2h21a8 8 0 0 1 8 8v21m0 176v21a8 8 0 0 1-8 8h-21m-176 0H10a8 8 0 0 1-8-8v-21"/></svg>';try{this.$overlay.firstElementChild.animate({transform:["scale(.98)","scale(1.01)"]},{duration:400,iterations:1/0,direction:"alternate",easing:"ease-in-out"})}catch{}a.insertBefore(this.$overlay,this.$video.nextSibling)}t.highlightCodeOutline&&(this.$overlay.insertAdjacentHTML("beforeend",'<svg class="code-outline-highlight" preserveAspectRatio="none" style="display:none;width:100%;height:100%;fill:none;stroke:#e9b213;stroke-width:5;stroke-dasharray:25;stroke-linecap:round;stroke-linejoin:round"><polygon/></svg>'),this.$codeOutlineHighlight=this.$overlay.lastElementChild)}this._scanRegion=this._calculateScanRegion(e),requestAnimationFrame(()=>{let y=window.getComputedStyle(e);y.display==="none"&&(e.style.setProperty("display","block","important"),w=!0),y.visibility!=="visible"&&(e.style.setProperty("visibility","visible","important"),w=!0),w&&(console.warn("QrScanner has overwritten the video hiding style to avoid Safari stopping the playback."),e.style.opacity="0",e.style.width="0",e.style.height="0",this.$overlay&&this.$overlay.parentElement&&this.$overlay.parentElement.removeChild(this.$overlay),delete this.$overlay,delete this.$codeOutlineHighlight),this.$overlay&&this._updateOverlay()}),e.addEventListener("play",this._onPlay),e.addEventListener("loadedmetadata",this._onLoadedMetaData),document.addEventListener("visibilitychange",this._onVisibilityChange),window.addEventListener("resize",this._updateOverlay),this._qrEnginePromise=l.createQrEngine()}static set WORKER_PATH(e){console.warn("Setting QrScanner.WORKER_PATH is not required and not supported anymore. Have a look at the README for new setup instructions.")}static hasCamera(){return o.asyncExecutePromiseGeneratorFunction(function*(){try{return!!(yield l.listCameras(!1)).length}catch{return!1}})}static listCameras(e=!1){return o.asyncExecutePromiseGeneratorFunction(function*(){if(!navigator.mediaDevices)return[];let t=()=>o.asyncExecutePromiseGeneratorFunction(function*(){return(yield navigator.mediaDevices.enumerateDevices()).filter(h=>h.kind==="videoinput")}),a;try{e&&(yield t()).every(h=>!h.label)&&(a=yield navigator.mediaDevices.getUserMedia({audio:!1,video:!0}))}catch{}try{return(yield t()).map((h,g)=>({id:h.deviceId,label:h.label||(g===0?"Default Camera":\`Camera \${g+1}\`)}))}finally{a&&(console.warn("Call listCameras after successfully starting a QR scanner to avoid creating a temporary video stream"),l._stopVideoStream(a))}})}hasFlash(){const e=this;return o.asyncExecutePromiseGeneratorFunction(function*(){let t;try{if(e.$video.srcObject){if(!(e.$video.srcObject instanceof MediaStream))return!1;t=e.$video.srcObject}else t=(yield e._getCameraStream()).stream;return"torch"in t.getVideoTracks()[0].getSettings()}catch{return!1}finally{t&&t!==e.$video.srcObject&&(console.warn("Call hasFlash after successfully starting the scanner to avoid creating a temporary video stream"),l._stopVideoStream(t))}})}isFlashOn(){return this._flashOn}toggleFlash(){const e=this;return o.asyncExecutePromiseGeneratorFunction(function*(){e._flashOn?yield e.turnFlashOff():yield e.turnFlashOn()})}turnFlashOn(){const e=this;return o.asyncExecutePromiseGeneratorFunction(function*(){if(!e._flashOn&&!e._destroyed&&(e._flashOn=!0,e._active&&!e._paused))try{if(!(yield e.hasFlash()))throw"No flash available";yield e.$video.srcObject.getVideoTracks()[0].applyConstraints({advanced:[{torch:!0}]})}catch(t){throw e._flashOn=!1,t}})}turnFlashOff(){const e=this;return o.asyncExecutePromiseGeneratorFunction(function*(){e._flashOn&&(e._flashOn=!1,yield e._restartVideoStream())})}destroy(){this.$video.removeEventListener("loadedmetadata",this._onLoadedMetaData),this.$video.removeEventListener("play",this._onPlay),document.removeEventListener("visibilitychange",this._onVisibilityChange),window.removeEventListener("resize",this._updateOverlay),this._destroyed=!0,this._flashOn=!1,this.stop(),l._postWorkerMessage(this._qrEnginePromise,"close")}start(){const e=this;return o.asyncExecutePromiseGeneratorFunction(function*(){if(e._destroyed)throw Error("The QR scanner can not be started as it had been destroyed.");if((!e._active||e._paused)&&(window.location.protocol!=="https:"&&console.warn("The camera stream is only accessible if the page is transferred via https."),e._active=!0,!document.hidden))if(e._paused=!1,e.$video.srcObject)yield e.$video.play();else try{let{stream:t,facingMode:a}=yield e._getCameraStream();!e._active||e._paused?l._stopVideoStream(t):(e._setVideoMirror(a),e.$video.srcObject=t,yield e.$video.play(),e._flashOn&&(e._flashOn=!1,e.turnFlashOn().catch(()=>{})))}catch(t){if(!e._paused)throw e._active=!1,t}})}stop(){this.pause(),this._active=!1}pause(e=!1){const t=this;return o.asyncExecutePromiseGeneratorFunction(function*(){if(t._paused=!0,!t._active)return!0;t.$video.pause(),t.$overlay&&(t.$overlay.style.display="none");let a=()=>{t.$video.srcObject instanceof MediaStream&&(l._stopVideoStream(t.$video.srcObject),t.$video.srcObject=null)};return e?(a(),!0):(yield new Promise(h=>setTimeout(h,300)),t._paused?(a(),!0):!1)})}setCamera(e){const t=this;return o.asyncExecutePromiseGeneratorFunction(function*(){e!==t._preferredCamera&&(t._preferredCamera=e,yield t._restartVideoStream())})}static scanImage(e,t,a,h,g=!1,w=!1){return o.asyncExecutePromiseGeneratorFunction(function*(){let y,s=!1;t&&("scanRegion"in t||"qrEngine"in t||"canvas"in t||"disallowCanvasResizing"in t||"alsoTryWithoutScanRegion"in t||"returnDetailedScanResult"in t)?(y=t.scanRegion,a=t.qrEngine,h=t.canvas,g=t.disallowCanvasResizing||!1,w=t.alsoTryWithoutScanRegion||!1,s=!0):console.warn(t||a||h||g||w?"You're using a deprecated api for scanImage which will be removed in the future.":"Note that the return type of scanImage will change in the future. To already switch to the new api today, you can pass returnDetailedScanResult: true.");let b=!!a;try{let i,m;[a,i]=yield Promise.all([a||l.createQrEngine(),l._loadImage(e)]),[h,m]=l._drawToCanvas(i,y,h,g);let u;if(a instanceof Worker){let p=a;b||l._postWorkerMessageSync(p,"inversionMode","both"),u=yield new Promise((B,P)=>{let C,L,I,D=-1;L=j=>{j.data.id===D&&(p.removeEventListener("message",L),p.removeEventListener("error",I),clearTimeout(C),j.data.data!==null?B({data:j.data.data,cornerPoints:l._convertPoints(j.data.cornerPoints,y)}):P(l.NO_QR_CODE_FOUND))},I=j=>{p.removeEventListener("message",L),p.removeEventListener("error",I),clearTimeout(C),P("Scanner error: "+(j?j.message||j:"Unknown Error"))},p.addEventListener("message",L),p.addEventListener("error",I),C=setTimeout(()=>I("timeout"),1e4);let O=m.getImageData(0,0,h.width,h.height);D=l._postWorkerMessageSync(p,"decode",O,[O.data.buffer])})}else u=yield Promise.race([new Promise((p,B)=>window.setTimeout(()=>B("Scanner error: timeout"),1e4)),o.asyncExecutePromiseGeneratorFunction(function*(){try{var[p]=yield a.detect(h);if(!p)throw l.NO_QR_CODE_FOUND;return{data:p.rawValue,cornerPoints:l._convertPoints(p.cornerPoints,y)}}catch(B){if(p=B.message||B,/not implemented|service unavailable/.test(p))return l._disableBarcodeDetector=!0,l.scanImage(e,{scanRegion:y,canvas:h,disallowCanvasResizing:g,alsoTryWithoutScanRegion:w});throw\`Scanner error: \${p}\`}})]);return s?u:u.data}catch(i){if(!y||!w)throw i;let m=yield l.scanImage(e,{qrEngine:a,canvas:h,disallowCanvasResizing:g});return s?m:m.data}finally{b||l._postWorkerMessage(a,"close")}})}setGrayscaleWeights(e,t,a,h=!0){l._postWorkerMessage(this._qrEnginePromise,"grayscaleWeights",{red:e,green:t,blue:a,useIntegerApproximation:h})}setInversionMode(e){l._postWorkerMessage(this._qrEnginePromise,"inversionMode",e)}static createQrEngine(e){return o.asyncExecutePromiseGeneratorFunction(function*(){e&&console.warn("Specifying a worker path is not required and not supported anymore.");let t=()=>Promise.resolve().then(function(){return d}).then(h=>h.createWorker());if(!(!l._disableBarcodeDetector&&"BarcodeDetector"in window&&BarcodeDetector.getSupportedFormats&&(yield BarcodeDetector.getSupportedFormats()).includes("qr_code")))return t();let a=navigator.userAgentData;return a&&a.brands.some(({brand:h})=>/Chromium/i.test(h))&&/mac ?OS/i.test(a.platform)&&(yield a.getHighEntropyValues(["architecture","platformVersion"]).then(({architecture:h,platformVersion:g})=>/arm/i.test(h||"arm")&&13<=parseInt(g||"13")).catch(()=>!0))?t():new BarcodeDetector({formats:["qr_code"]})})}_onPlay(){this._scanRegion=this._calculateScanRegion(this.$video),this._updateOverlay(),this.$overlay&&(this.$overlay.style.display=""),this._scanFrame()}_onLoadedMetaData(){this._scanRegion=this._calculateScanRegion(this.$video),this._updateOverlay()}_onVisibilityChange(){document.hidden?this.pause():this._active&&this.start()}_calculateScanRegion(e){let t=Math.round(.6666666666666666*Math.min(e.videoWidth,e.videoHeight));return{x:Math.round((e.videoWidth-t)/2),y:Math.round((e.videoHeight-t)/2),width:t,height:t,downScaledWidth:this._legacyCanvasSize,downScaledHeight:this._legacyCanvasSize}}_updateOverlay(){requestAnimationFrame(()=>{if(this.$overlay){var e=this.$video,t=e.videoWidth,a=e.videoHeight,h=e.offsetWidth,g=e.offsetHeight,w=e.offsetLeft,y=e.offsetTop,s=window.getComputedStyle(e),b=s.objectFit,i=t/a,m=h/g;switch(b){case"none":var u=t,p=a;break;case"fill":u=h,p=g;break;default:(b==="cover"?i>m:i<m)?(p=g,u=p*i):(u=h,p=u/i),b==="scale-down"&&(u=Math.min(u,t),p=Math.min(p,a))}var[B,P]=s.objectPosition.split(" ").map((L,I)=>{const D=parseFloat(L);return L.endsWith("%")?(I?g-p:h-u)*D/100:D});s=this._scanRegion.width||t,m=this._scanRegion.height||a,b=this._scanRegion.x||0;var C=this._scanRegion.y||0;i=this.$overlay.style,i.width=\`\${s/t*u}px\`,i.height=\`\${m/a*p}px\`,i.top=\`\${y+P+C/a*p}px\`,a=/scaleX\\(-1\\)/.test(e.style.transform),i.left=\`\${w+(a?h-B-u:B)+(a?t-b-s:b)/t*u}px\`,i.transform=e.style.transform}})}static _convertPoints(e,t){if(!t)return e;let a=t.x||0,h=t.y||0,g=t.width&&t.downScaledWidth?t.width/t.downScaledWidth:1;t=t.height&&t.downScaledHeight?t.height/t.downScaledHeight:1;for(let w of e)w.x=w.x*g+a,w.y=w.y*t+h;return e}_scanFrame(){!this._active||this.$video.paused||this.$video.ended||("requestVideoFrameCallback"in this.$video?this.$video.requestVideoFrameCallback.bind(this.$video):requestAnimationFrame)(()=>{const e=this;return o.asyncExecutePromiseGeneratorFunction(function*(){if(!(1>=e.$video.readyState)){var t=Date.now()-e._lastScanTimestamp,a=1e3/e._maxScansPerSecond;t<a&&(yield new Promise(g=>setTimeout(g,a-t))),e._lastScanTimestamp=Date.now();try{var h=yield l.scanImage(e.$video,{scanRegion:e._scanRegion,qrEngine:e._qrEnginePromise,canvas:e.$canvas})}catch(g){if(!e._active)return;e._onDecodeError(g)}!l._disableBarcodeDetector||(yield e._qrEnginePromise)instanceof Worker||(e._qrEnginePromise=l.createQrEngine()),h?(e._onDecode?e._onDecode(h):e._legacyOnDecode&&e._legacyOnDecode(h.data),e.$codeOutlineHighlight&&(clearTimeout(e._codeOutlineHighlightRemovalTimeout),e._codeOutlineHighlightRemovalTimeout=void 0,e.$codeOutlineHighlight.setAttribute("viewBox",\`\${e._scanRegion.x||0} \${e._scanRegion.y||0} \${e._scanRegion.width||e.$video.videoWidth} \${e._scanRegion.height||e.$video.videoHeight}\`),e.$codeOutlineHighlight.firstElementChild.setAttribute("points",h.cornerPoints.map(({x:g,y:w})=>\`\${g},\${w}\`).join(" ")),e.$codeOutlineHighlight.style.display="")):e.$codeOutlineHighlight&&!e._codeOutlineHighlightRemovalTimeout&&(e._codeOutlineHighlightRemovalTimeout=setTimeout(()=>e.$codeOutlineHighlight.style.display="none",100))}e._scanFrame()})})}_onDecodeError(e){e!==l.NO_QR_CODE_FOUND&&console.log(e)}_getCameraStream(){const e=this;return o.asyncExecutePromiseGeneratorFunction(function*(){if(!navigator.mediaDevices)throw"Camera not found.";let t=/^(environment|user)$/.test(e._preferredCamera)?"facingMode":"deviceId",a=[{width:{min:1024}},{width:{min:768}},{}],h=a.map(g=>Object.assign({},g,{[t]:{exact:e._preferredCamera}}));for(let g of[...h,...a])try{let w=yield navigator.mediaDevices.getUserMedia({video:g,audio:!1}),y=e._getFacingMode(w)||(g.facingMode?e._preferredCamera:e._preferredCamera==="environment"?"user":"environment");return{stream:w,facingMode:y}}catch{}throw"Camera not found."})}_restartVideoStream(){const e=this;return o.asyncExecutePromiseGeneratorFunction(function*(){let t=e._paused;(yield e.pause(!0))&&!t&&e._active&&(yield e.start())})}static _stopVideoStream(e){for(let t of e.getTracks())t.stop(),e.removeTrack(t)}_setVideoMirror(e){this.$video.style.transform="scaleX("+(e==="user"?-1:1)+")"}_getFacingMode(e){return(e=e.getVideoTracks()[0])?/rear|back|environment/i.test(e.label)?"environment":/front|user|face/i.test(e.label)?"user":null:null}static _drawToCanvas(e,t,a,h=!1){a=a||document.createElement("canvas");let g=t&&t.x?t.x:0,w=t&&t.y?t.y:0,y=t&&t.width?t.width:e.videoWidth||e.width,s=t&&t.height?t.height:e.videoHeight||e.height;return h||(h=t&&t.downScaledWidth?t.downScaledWidth:y,t=t&&t.downScaledHeight?t.downScaledHeight:s,a.width!==h&&(a.width=h),a.height!==t&&(a.height=t)),t=a.getContext("2d",{alpha:!1}),t.imageSmoothingEnabled=!1,t.drawImage(e,g,w,y,s,0,0,a.width,a.height),[a,t]}static _loadImage(e){return o.asyncExecutePromiseGeneratorFunction(function*(){if(e instanceof Image)return yield l._awaitImageLoad(e),e;if(e instanceof HTMLVideoElement||e instanceof HTMLCanvasElement||e instanceof SVGImageElement||"OffscreenCanvas"in window&&e instanceof OffscreenCanvas||"ImageBitmap"in window&&e instanceof ImageBitmap)return e;if(e instanceof File||e instanceof Blob||e instanceof URL||typeof e=="string"){let t=new Image;t.src=e instanceof File||e instanceof Blob?URL.createObjectURL(e):e.toString();try{return yield l._awaitImageLoad(t),t}finally{(e instanceof File||e instanceof Blob)&&URL.revokeObjectURL(t.src)}}else throw"Unsupported image type."})}static _awaitImageLoad(e){return o.asyncExecutePromiseGeneratorFunction(function*(){e.complete&&e.naturalWidth!==0||(yield new Promise((t,a)=>{let h=g=>{e.removeEventListener("load",h),e.removeEventListener("error",h),g instanceof ErrorEvent?a("Image load error"):t()};e.addEventListener("load",h),e.addEventListener("error",h)}))})}static _postWorkerMessage(e,t,a,h){return o.asyncExecutePromiseGeneratorFunction(function*(){return l._postWorkerMessageSync(yield e,t,a,h)})}static _postWorkerMessageSync(e,t,a,h){if(!(e instanceof Worker))return-1;let g=l._workerMessageId++;return e.postMessage({id:g,type:t,data:a},h),g}}l.DEFAULT_CANVAS_SIZE=400,l.NO_QR_CODE_FOUND="No QR code found",l._disableBarcodeDetector=!1,l._workerMessageId=0;var d=Object.freeze({__proto__:null,createWorker:()=>new Worker(URL.createObjectURL(new Blob([\`class x{constructor(a,b){this.width=b;this.height=a.length/b;this.data=a}static createEmpty(a,b){return new x(new Uint8ClampedArray(a*b),a)}get(a,b){return 0>a||a>=this.width||0>b||b>=this.height?!1:!!this.data[b*this.width+a]}set(a,b,c){this.data[b*this.width+a]=c?1:0}setRegion(a,b,c,d,e){for(let f=b;f<b+d;f++)for(let g=a;g<a+c;g++)this.set(g,f,!!e)}}
class A{constructor(a,b,c){this.width=a;a*=b;if(c&&c.length!==a)throw Error("Wrong buffer size");this.data=c||new Uint8ClampedArray(a)}get(a,b){return this.data[b*this.width+a]}set(a,b,c){this.data[b*this.width+a]=c}}
class ba{constructor(a){this.bitOffset=this.byteOffset=0;this.bytes=a}readBits(a){if(1>a||32<a||a>this.available())throw Error("Cannot read "+a.toString()+" bits");var b=0;if(0<this.bitOffset){b=8-this.bitOffset;var c=a<b?a:b;b-=c;b=(this.bytes[this.byteOffset]&255>>8-c<<b)>>b;a-=c;this.bitOffset+=c;8===this.bitOffset&&(this.bitOffset=0,this.byteOffset++)}if(0<a){for(;8<=a;)b=b<<8|this.bytes[this.byteOffset]&255,this.byteOffset++,a-=8;0<a&&(c=8-a,b=b<<a|(this.bytes[this.byteOffset]&255>>c<<c)>>c,
this.bitOffset+=a)}return b}available(){return 8*(this.bytes.length-this.byteOffset)-this.bitOffset}}var B,C=B||(B={});C.Numeric="numeric";C.Alphanumeric="alphanumeric";C.Byte="byte";C.Kanji="kanji";C.ECI="eci";C.StructuredAppend="structuredappend";var D,E=D||(D={});E[E.Terminator=0]="Terminator";E[E.Numeric=1]="Numeric";E[E.Alphanumeric=2]="Alphanumeric";E[E.Byte=4]="Byte";E[E.Kanji=8]="Kanji";E[E.ECI=7]="ECI";E[E.StructuredAppend=3]="StructuredAppend";let F="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:".split("");
function ca(a,b){let c=[],d="";b=a.readBits([8,16,16][b]);for(let e=0;e<b;e++){let f=a.readBits(8);c.push(f)}try{d+=decodeURIComponent(c.map(e=>\\\`%\\\${("0"+e.toString(16)).substr(-2)}\\\`).join(""))}catch(e){}return{bytes:c,text:d}}
function da(a,b){a=new ba(a);let c=9>=b?0:26>=b?1:2;for(b={text:"",bytes:[],chunks:[],version:b};4<=a.available();){var d=a.readBits(4);if(d===D.Terminator)return b;if(d===D.ECI)0===a.readBits(1)?b.chunks.push({type:B.ECI,assignmentNumber:a.readBits(7)}):0===a.readBits(1)?b.chunks.push({type:B.ECI,assignmentNumber:a.readBits(14)}):0===a.readBits(1)?b.chunks.push({type:B.ECI,assignmentNumber:a.readBits(21)}):b.chunks.push({type:B.ECI,assignmentNumber:-1});else if(d===D.Numeric){var e=a,f=[];d="";for(var g=
e.readBits([10,12,14][c]);3<=g;){var h=e.readBits(10);if(1E3<=h)throw Error("Invalid numeric value above 999");var k=Math.floor(h/100),m=Math.floor(h/10)%10;h%=10;f.push(48+k,48+m,48+h);d+=k.toString()+m.toString()+h.toString();g-=3}if(2===g){g=e.readBits(7);if(100<=g)throw Error("Invalid numeric value above 99");e=Math.floor(g/10);g%=10;f.push(48+e,48+g);d+=e.toString()+g.toString()}else if(1===g){e=e.readBits(4);if(10<=e)throw Error("Invalid numeric value above 9");f.push(48+e);d+=e.toString()}b.text+=
d;b.bytes.push(...f);b.chunks.push({type:B.Numeric,text:d})}else if(d===D.Alphanumeric){e=a;f=[];d="";for(g=e.readBits([9,11,13][c]);2<=g;)m=e.readBits(11),k=Math.floor(m/45),m%=45,f.push(F[k].charCodeAt(0),F[m].charCodeAt(0)),d+=F[k]+F[m],g-=2;1===g&&(e=e.readBits(6),f.push(F[e].charCodeAt(0)),d+=F[e]);b.text+=d;b.bytes.push(...f);b.chunks.push({type:B.Alphanumeric,text:d})}else if(d===D.Byte)d=ca(a,c),b.text+=d.text,b.bytes.push(...d.bytes),b.chunks.push({type:B.Byte,bytes:d.bytes,text:d.text});
else if(d===D.Kanji){f=a;d=[];e=f.readBits([8,10,12][c]);for(g=0;g<e;g++)k=f.readBits(13),k=Math.floor(k/192)<<8|k%192,k=7936>k?k+33088:k+49472,d.push(k>>8,k&255);f=(new TextDecoder("shift-jis")).decode(Uint8Array.from(d));b.text+=f;b.bytes.push(...d);b.chunks.push({type:B.Kanji,bytes:d,text:f})}else d===D.StructuredAppend&&b.chunks.push({type:B.StructuredAppend,currentSequence:a.readBits(4),totalSequence:a.readBits(4),parity:a.readBits(8)})}if(0===a.available()||0===a.readBits(a.available()))return b}
class G{constructor(a,b){if(0===b.length)throw Error("No coefficients.");this.field=a;let c=b.length;if(1<c&&0===b[0]){let d=1;for(;d<c&&0===b[d];)d++;if(d===c)this.coefficients=a.zero.coefficients;else for(this.coefficients=new Uint8ClampedArray(c-d),a=0;a<this.coefficients.length;a++)this.coefficients[a]=b[d+a]}else this.coefficients=b}degree(){return this.coefficients.length-1}isZero(){return 0===this.coefficients[0]}getCoefficient(a){return this.coefficients[this.coefficients.length-1-a]}addOrSubtract(a){if(this.isZero())return a;
if(a.isZero())return this;let b=this.coefficients;a=a.coefficients;b.length>a.length&&([b,a]=[a,b]);let c=new Uint8ClampedArray(a.length),d=a.length-b.length;for(var e=0;e<d;e++)c[e]=a[e];for(e=d;e<a.length;e++)c[e]=b[e-d]^a[e];return new G(this.field,c)}multiply(a){if(0===a)return this.field.zero;if(1===a)return this;let b=this.coefficients.length,c=new Uint8ClampedArray(b);for(let d=0;d<b;d++)c[d]=this.field.multiply(this.coefficients[d],a);return new G(this.field,c)}multiplyPoly(a){if(this.isZero()||
a.isZero())return this.field.zero;let b=this.coefficients,c=b.length;a=a.coefficients;let d=a.length,e=new Uint8ClampedArray(c+d-1);for(let f=0;f<c;f++){let g=b[f];for(let h=0;h<d;h++)e[f+h]=H(e[f+h],this.field.multiply(g,a[h]))}return new G(this.field,e)}multiplyByMonomial(a,b){if(0>a)throw Error("Invalid degree less than 0");if(0===b)return this.field.zero;let c=this.coefficients.length;a=new Uint8ClampedArray(c+a);for(let d=0;d<c;d++)a[d]=this.field.multiply(this.coefficients[d],b);return new G(this.field,
a)}evaluateAt(a){let b=0;if(0===a)return this.getCoefficient(0);let c=this.coefficients.length;if(1===a)return this.coefficients.forEach(d=>{b^=d}),b;b=this.coefficients[0];for(let d=1;d<c;d++)b=H(this.field.multiply(a,b),this.coefficients[d]);return b}}function H(a,b){return a^b}
class ea{constructor(a,b,c){this.primitive=a;this.size=b;this.generatorBase=c;this.expTable=Array(this.size);this.logTable=Array(this.size);a=1;for(b=0;b<this.size;b++)this.expTable[b]=a,a*=2,a>=this.size&&(a=(a^this.primitive)&this.size-1);for(a=0;a<this.size-1;a++)this.logTable[this.expTable[a]]=a;this.zero=new G(this,Uint8ClampedArray.from([0]));this.one=new G(this,Uint8ClampedArray.from([1]))}multiply(a,b){return 0===a||0===b?0:this.expTable[(this.logTable[a]+this.logTable[b])%(this.size-1)]}inverse(a){if(0===
a)throw Error("Can't invert 0");return this.expTable[this.size-this.logTable[a]-1]}buildMonomial(a,b){if(0>a)throw Error("Invalid monomial degree less than 0");if(0===b)return this.zero;a=new Uint8ClampedArray(a+1);a[0]=b;return new G(this,a)}log(a){if(0===a)throw Error("Can't take log(0)");return this.logTable[a]}exp(a){return this.expTable[a]}}
function fa(a,b,c,d){b.degree()<c.degree()&&([b,c]=[c,b]);let e=a.zero;for(var f=a.one;c.degree()>=d/2;){var g=b;let h=e;b=c;e=f;if(b.isZero())return null;c=g;f=a.zero;g=b.getCoefficient(b.degree());for(g=a.inverse(g);c.degree()>=b.degree()&&!c.isZero();){let k=c.degree()-b.degree(),m=a.multiply(c.getCoefficient(c.degree()),g);f=f.addOrSubtract(a.buildMonomial(k,m));c=c.addOrSubtract(b.multiplyByMonomial(k,m))}f=f.multiplyPoly(e).addOrSubtract(h);if(c.degree()>=b.degree())return null}d=f.getCoefficient(0);
if(0===d)return null;a=a.inverse(d);return[f.multiply(a),c.multiply(a)]}
function ha(a,b){let c=new Uint8ClampedArray(a.length);c.set(a);a=new ea(285,256,0);var d=new G(a,c),e=new Uint8ClampedArray(b),f=!1;for(var g=0;g<b;g++){var h=d.evaluateAt(a.exp(g+a.generatorBase));e[e.length-1-g]=h;0!==h&&(f=!0)}if(!f)return c;d=new G(a,e);d=fa(a,a.buildMonomial(b,1),d,b);if(null===d)return null;b=d[0];g=b.degree();if(1===g)b=[b.getCoefficient(1)];else{e=Array(g);f=0;for(h=1;h<a.size&&f<g;h++)0===b.evaluateAt(h)&&(e[f]=a.inverse(h),f++);b=f!==g?null:e}if(null==b)return null;e=d[1];
f=b.length;d=Array(f);for(g=0;g<f;g++){h=a.inverse(b[g]);let k=1;for(let m=0;m<f;m++)g!==m&&(k=a.multiply(k,H(1,a.multiply(b[m],h))));d[g]=a.multiply(e.evaluateAt(h),a.inverse(k));0!==a.generatorBase&&(d[g]=a.multiply(d[g],h))}for(e=0;e<b.length;e++){f=c.length-1-a.log(b[e]);if(0>f)return null;c[f]^=d[e]}return c}
let I=[{infoBits:null,versionNumber:1,alignmentPatternCenters:[],errorCorrectionLevels:[{ecCodewordsPerBlock:7,ecBlocks:[{numBlocks:1,dataCodewordsPerBlock:19}]},{ecCodewordsPerBlock:10,ecBlocks:[{numBlocks:1,dataCodewordsPerBlock:16}]},{ecCodewordsPerBlock:13,ecBlocks:[{numBlocks:1,dataCodewordsPerBlock:13}]},{ecCodewordsPerBlock:17,ecBlocks:[{numBlocks:1,dataCodewordsPerBlock:9}]}]},{infoBits:null,versionNumber:2,alignmentPatternCenters:[6,18],errorCorrectionLevels:[{ecCodewordsPerBlock:10,ecBlocks:[{numBlocks:1,
dataCodewordsPerBlock:34}]},{ecCodewordsPerBlock:16,ecBlocks:[{numBlocks:1,dataCodewordsPerBlock:28}]},{ecCodewordsPerBlock:22,ecBlocks:[{numBlocks:1,dataCodewordsPerBlock:22}]},{ecCodewordsPerBlock:28,ecBlocks:[{numBlocks:1,dataCodewordsPerBlock:16}]}]},{infoBits:null,versionNumber:3,alignmentPatternCenters:[6,22],errorCorrectionLevels:[{ecCodewordsPerBlock:15,ecBlocks:[{numBlocks:1,dataCodewordsPerBlock:55}]},{ecCodewordsPerBlock:26,ecBlocks:[{numBlocks:1,dataCodewordsPerBlock:44}]},{ecCodewordsPerBlock:18,
ecBlocks:[{numBlocks:2,dataCodewordsPerBlock:17}]},{ecCodewordsPerBlock:22,ecBlocks:[{numBlocks:2,dataCodewordsPerBlock:13}]}]},{infoBits:null,versionNumber:4,alignmentPatternCenters:[6,26],errorCorrectionLevels:[{ecCodewordsPerBlock:20,ecBlocks:[{numBlocks:1,dataCodewordsPerBlock:80}]},{ecCodewordsPerBlock:18,ecBlocks:[{numBlocks:2,dataCodewordsPerBlock:32}]},{ecCodewordsPerBlock:26,ecBlocks:[{numBlocks:2,dataCodewordsPerBlock:24}]},{ecCodewordsPerBlock:16,ecBlocks:[{numBlocks:4,dataCodewordsPerBlock:9}]}]},
{infoBits:null,versionNumber:5,alignmentPatternCenters:[6,30],errorCorrectionLevels:[{ecCodewordsPerBlock:26,ecBlocks:[{numBlocks:1,dataCodewordsPerBlock:108}]},{ecCodewordsPerBlock:24,ecBlocks:[{numBlocks:2,dataCodewordsPerBlock:43}]},{ecCodewordsPerBlock:18,ecBlocks:[{numBlocks:2,dataCodewordsPerBlock:15},{numBlocks:2,dataCodewordsPerBlock:16}]},{ecCodewordsPerBlock:22,ecBlocks:[{numBlocks:2,dataCodewordsPerBlock:11},{numBlocks:2,dataCodewordsPerBlock:12}]}]},{infoBits:null,versionNumber:6,alignmentPatternCenters:[6,
34],errorCorrectionLevels:[{ecCodewordsPerBlock:18,ecBlocks:[{numBlocks:2,dataCodewordsPerBlock:68}]},{ecCodewordsPerBlock:16,ecBlocks:[{numBlocks:4,dataCodewordsPerBlock:27}]},{ecCodewordsPerBlock:24,ecBlocks:[{numBlocks:4,dataCodewordsPerBlock:19}]},{ecCodewordsPerBlock:28,ecBlocks:[{numBlocks:4,dataCodewordsPerBlock:15}]}]},{infoBits:31892,versionNumber:7,alignmentPatternCenters:[6,22,38],errorCorrectionLevels:[{ecCodewordsPerBlock:20,ecBlocks:[{numBlocks:2,dataCodewordsPerBlock:78}]},{ecCodewordsPerBlock:18,
ecBlocks:[{numBlocks:4,dataCodewordsPerBlock:31}]},{ecCodewordsPerBlock:18,ecBlocks:[{numBlocks:2,dataCodewordsPerBlock:14},{numBlocks:4,dataCodewordsPerBlock:15}]},{ecCodewordsPerBlock:26,ecBlocks:[{numBlocks:4,dataCodewordsPerBlock:13},{numBlocks:1,dataCodewordsPerBlock:14}]}]},{infoBits:34236,versionNumber:8,alignmentPatternCenters:[6,24,42],errorCorrectionLevels:[{ecCodewordsPerBlock:24,ecBlocks:[{numBlocks:2,dataCodewordsPerBlock:97}]},{ecCodewordsPerBlock:22,ecBlocks:[{numBlocks:2,dataCodewordsPerBlock:38},
{numBlocks:2,dataCodewordsPerBlock:39}]},{ecCodewordsPerBlock:22,ecBlocks:[{numBlocks:4,dataCodewordsPerBlock:18},{numBlocks:2,dataCodewordsPerBlock:19}]},{ecCodewordsPerBlock:26,ecBlocks:[{numBlocks:4,dataCodewordsPerBlock:14},{numBlocks:2,dataCodewordsPerBlock:15}]}]},{infoBits:39577,versionNumber:9,alignmentPatternCenters:[6,26,46],errorCorrectionLevels:[{ecCodewordsPerBlock:30,ecBlocks:[{numBlocks:2,dataCodewordsPerBlock:116}]},{ecCodewordsPerBlock:22,ecBlocks:[{numBlocks:3,dataCodewordsPerBlock:36},
{numBlocks:2,dataCodewordsPerBlock:37}]},{ecCodewordsPerBlock:20,ecBlocks:[{numBlocks:4,dataCodewordsPerBlock:16},{numBlocks:4,dataCodewordsPerBlock:17}]},{ecCodewordsPerBlock:24,ecBlocks:[{numBlocks:4,dataCodewordsPerBlock:12},{numBlocks:4,dataCodewordsPerBlock:13}]}]},{infoBits:42195,versionNumber:10,alignmentPatternCenters:[6,28,50],errorCorrectionLevels:[{ecCodewordsPerBlock:18,ecBlocks:[{numBlocks:2,dataCodewordsPerBlock:68},{numBlocks:2,dataCodewordsPerBlock:69}]},{ecCodewordsPerBlock:26,ecBlocks:[{numBlocks:4,
dataCodewordsPerBlock:43},{numBlocks:1,dataCodewordsPerBlock:44}]},{ecCodewordsPerBlock:24,ecBlocks:[{numBlocks:6,dataCodewordsPerBlock:19},{numBlocks:2,dataCodewordsPerBlock:20}]},{ecCodewordsPerBlock:28,ecBlocks:[{numBlocks:6,dataCodewordsPerBlock:15},{numBlocks:2,dataCodewordsPerBlock:16}]}]},{infoBits:48118,versionNumber:11,alignmentPatternCenters:[6,30,54],errorCorrectionLevels:[{ecCodewordsPerBlock:20,ecBlocks:[{numBlocks:4,dataCodewordsPerBlock:81}]},{ecCodewordsPerBlock:30,ecBlocks:[{numBlocks:1,
dataCodewordsPerBlock:50},{numBlocks:4,dataCodewordsPerBlock:51}]},{ecCodewordsPerBlock:28,ecBlocks:[{numBlocks:4,dataCodewordsPerBlock:22},{numBlocks:4,dataCodewordsPerBlock:23}]},{ecCodewordsPerBlock:24,ecBlocks:[{numBlocks:3,dataCodewordsPerBlock:12},{numBlocks:8,dataCodewordsPerBlock:13}]}]},{infoBits:51042,versionNumber:12,alignmentPatternCenters:[6,32,58],errorCorrectionLevels:[{ecCodewordsPerBlock:24,ecBlocks:[{numBlocks:2,dataCodewordsPerBlock:92},{numBlocks:2,dataCodewordsPerBlock:93}]},
{ecCodewordsPerBlock:22,ecBlocks:[{numBlocks:6,dataCodewordsPerBlock:36},{numBlocks:2,dataCodewordsPerBlock:37}]},{ecCodewordsPerBlock:26,ecBlocks:[{numBlocks:4,dataCodewordsPerBlock:20},{numBlocks:6,dataCodewordsPerBlock:21}]},{ecCodewordsPerBlock:28,ecBlocks:[{numBlocks:7,dataCodewordsPerBlock:14},{numBlocks:4,dataCodewordsPerBlock:15}]}]},{infoBits:55367,versionNumber:13,alignmentPatternCenters:[6,34,62],errorCorrectionLevels:[{ecCodewordsPerBlock:26,ecBlocks:[{numBlocks:4,dataCodewordsPerBlock:107}]},
{ecCodewordsPerBlock:22,ecBlocks:[{numBlocks:8,dataCodewordsPerBlock:37},{numBlocks:1,dataCodewordsPerBlock:38}]},{ecCodewordsPerBlock:24,ecBlocks:[{numBlocks:8,dataCodewordsPerBlock:20},{numBlocks:4,dataCodewordsPerBlock:21}]},{ecCodewordsPerBlock:22,ecBlocks:[{numBlocks:12,dataCodewordsPerBlock:11},{numBlocks:4,dataCodewordsPerBlock:12}]}]},{infoBits:58893,versionNumber:14,alignmentPatternCenters:[6,26,46,66],errorCorrectionLevels:[{ecCodewordsPerBlock:30,ecBlocks:[{numBlocks:3,dataCodewordsPerBlock:115},
{numBlocks:1,dataCodewordsPerBlock:116}]},{ecCodewordsPerBlock:24,ecBlocks:[{numBlocks:4,dataCodewordsPerBlock:40},{numBlocks:5,dataCodewordsPerBlock:41}]},{ecCodewordsPerBlock:20,ecBlocks:[{numBlocks:11,dataCodewordsPerBlock:16},{numBlocks:5,dataCodewordsPerBlock:17}]},{ecCodewordsPerBlock:24,ecBlocks:[{numBlocks:11,dataCodewordsPerBlock:12},{numBlocks:5,dataCodewordsPerBlock:13}]}]},{infoBits:63784,versionNumber:15,alignmentPatternCenters:[6,26,48,70],errorCorrectionLevels:[{ecCodewordsPerBlock:22,
ecBlocks:[{numBlocks:5,dataCodewordsPerBlock:87},{numBlocks:1,dataCodewordsPerBlock:88}]},{ecCodewordsPerBlock:24,ecBlocks:[{numBlocks:5,dataCodewordsPerBlock:41},{numBlocks:5,dataCodewordsPerBlock:42}]},{ecCodewordsPerBlock:30,ecBlocks:[{numBlocks:5,dataCodewordsPerBlock:24},{numBlocks:7,dataCodewordsPerBlock:25}]},{ecCodewordsPerBlock:24,ecBlocks:[{numBlocks:11,dataCodewordsPerBlock:12},{numBlocks:7,dataCodewordsPerBlock:13}]}]},{infoBits:68472,versionNumber:16,alignmentPatternCenters:[6,26,50,
74],errorCorrectionLevels:[{ecCodewordsPerBlock:24,ecBlocks:[{numBlocks:5,dataCodewordsPerBlock:98},{numBlocks:1,dataCodewordsPerBlock:99}]},{ecCodewordsPerBlock:28,ecBlocks:[{numBlocks:7,dataCodewordsPerBlock:45},{numBlocks:3,dataCodewordsPerBlock:46}]},{ecCodewordsPerBlock:24,ecBlocks:[{numBlocks:15,dataCodewordsPerBlock:19},{numBlocks:2,dataCodewordsPerBlock:20}]},{ecCodewordsPerBlock:30,ecBlocks:[{numBlocks:3,dataCodewordsPerBlock:15},{numBlocks:13,dataCodewordsPerBlock:16}]}]},{infoBits:70749,
versionNumber:17,alignmentPatternCenters:[6,30,54,78],errorCorrectionLevels:[{ecCodewordsPerBlock:28,ecBlocks:[{numBlocks:1,dataCodewordsPerBlock:107},{numBlocks:5,dataCodewordsPerBlock:108}]},{ecCodewordsPerBlock:28,ecBlocks:[{numBlocks:10,dataCodewordsPerBlock:46},{numBlocks:1,dataCodewordsPerBlock:47}]},{ecCodewordsPerBlock:28,ecBlocks:[{numBlocks:1,dataCodewordsPerBlock:22},{numBlocks:15,dataCodewordsPerBlock:23}]},{ecCodewordsPerBlock:28,ecBlocks:[{numBlocks:2,dataCodewordsPerBlock:14},{numBlocks:17,
dataCodewordsPerBlock:15}]}]},{infoBits:76311,versionNumber:18,alignmentPatternCenters:[6,30,56,82],errorCorrectionLevels:[{ecCodewordsPerBlock:30,ecBlocks:[{numBlocks:5,dataCodewordsPerBlock:120},{numBlocks:1,dataCodewordsPerBlock:121}]},{ecCodewordsPerBlock:26,ecBlocks:[{numBlocks:9,dataCodewordsPerBlock:43},{numBlocks:4,dataCodewordsPerBlock:44}]},{ecCodewordsPerBlock:28,ecBlocks:[{numBlocks:17,dataCodewordsPerBlock:22},{numBlocks:1,dataCodewordsPerBlock:23}]},{ecCodewordsPerBlock:28,ecBlocks:[{numBlocks:2,
dataCodewordsPerBlock:14},{numBlocks:19,dataCodewordsPerBlock:15}]}]},{infoBits:79154,versionNumber:19,alignmentPatternCenters:[6,30,58,86],errorCorrectionLevels:[{ecCodewordsPerBlock:28,ecBlocks:[{numBlocks:3,dataCodewordsPerBlock:113},{numBlocks:4,dataCodewordsPerBlock:114}]},{ecCodewordsPerBlock:26,ecBlocks:[{numBlocks:3,dataCodewordsPerBlock:44},{numBlocks:11,dataCodewordsPerBlock:45}]},{ecCodewordsPerBlock:26,ecBlocks:[{numBlocks:17,dataCodewordsPerBlock:21},{numBlocks:4,dataCodewordsPerBlock:22}]},
{ecCodewordsPerBlock:26,ecBlocks:[{numBlocks:9,dataCodewordsPerBlock:13},{numBlocks:16,dataCodewordsPerBlock:14}]}]},{infoBits:84390,versionNumber:20,alignmentPatternCenters:[6,34,62,90],errorCorrectionLevels:[{ecCodewordsPerBlock:28,ecBlocks:[{numBlocks:3,dataCodewordsPerBlock:107},{numBlocks:5,dataCodewordsPerBlock:108}]},{ecCodewordsPerBlock:26,ecBlocks:[{numBlocks:3,dataCodewordsPerBlock:41},{numBlocks:13,dataCodewordsPerBlock:42}]},{ecCodewordsPerBlock:30,ecBlocks:[{numBlocks:15,dataCodewordsPerBlock:24},
{numBlocks:5,dataCodewordsPerBlock:25}]},{ecCodewordsPerBlock:28,ecBlocks:[{numBlocks:15,dataCodewordsPerBlock:15},{numBlocks:10,dataCodewordsPerBlock:16}]}]},{infoBits:87683,versionNumber:21,alignmentPatternCenters:[6,28,50,72,94],errorCorrectionLevels:[{ecCodewordsPerBlock:28,ecBlocks:[{numBlocks:4,dataCodewordsPerBlock:116},{numBlocks:4,dataCodewordsPerBlock:117}]},{ecCodewordsPerBlock:26,ecBlocks:[{numBlocks:17,dataCodewordsPerBlock:42}]},{ecCodewordsPerBlock:28,ecBlocks:[{numBlocks:17,dataCodewordsPerBlock:22},
{numBlocks:6,dataCodewordsPerBlock:23}]},{ecCodewordsPerBlock:30,ecBlocks:[{numBlocks:19,dataCodewordsPerBlock:16},{numBlocks:6,dataCodewordsPerBlock:17}]}]},{infoBits:92361,versionNumber:22,alignmentPatternCenters:[6,26,50,74,98],errorCorrectionLevels:[{ecCodewordsPerBlock:28,ecBlocks:[{numBlocks:2,dataCodewordsPerBlock:111},{numBlocks:7,dataCodewordsPerBlock:112}]},{ecCodewordsPerBlock:28,ecBlocks:[{numBlocks:17,dataCodewordsPerBlock:46}]},{ecCodewordsPerBlock:30,ecBlocks:[{numBlocks:7,dataCodewordsPerBlock:24},
{numBlocks:16,dataCodewordsPerBlock:25}]},{ecCodewordsPerBlock:24,ecBlocks:[{numBlocks:34,dataCodewordsPerBlock:13}]}]},{infoBits:96236,versionNumber:23,alignmentPatternCenters:[6,30,54,74,102],errorCorrectionLevels:[{ecCodewordsPerBlock:30,ecBlocks:[{numBlocks:4,dataCodewordsPerBlock:121},{numBlocks:5,dataCodewordsPerBlock:122}]},{ecCodewordsPerBlock:28,ecBlocks:[{numBlocks:4,dataCodewordsPerBlock:47},{numBlocks:14,dataCodewordsPerBlock:48}]},{ecCodewordsPerBlock:30,ecBlocks:[{numBlocks:11,dataCodewordsPerBlock:24},
{numBlocks:14,dataCodewordsPerBlock:25}]},{ecCodewordsPerBlock:30,ecBlocks:[{numBlocks:16,dataCodewordsPerBlock:15},{numBlocks:14,dataCodewordsPerBlock:16}]}]},{infoBits:102084,versionNumber:24,alignmentPatternCenters:[6,28,54,80,106],errorCorrectionLevels:[{ecCodewordsPerBlock:30,ecBlocks:[{numBlocks:6,dataCodewordsPerBlock:117},{numBlocks:4,dataCodewordsPerBlock:118}]},{ecCodewordsPerBlock:28,ecBlocks:[{numBlocks:6,dataCodewordsPerBlock:45},{numBlocks:14,dataCodewordsPerBlock:46}]},{ecCodewordsPerBlock:30,
ecBlocks:[{numBlocks:11,dataCodewordsPerBlock:24},{numBlocks:16,dataCodewordsPerBlock:25}]},{ecCodewordsPerBlock:30,ecBlocks:[{numBlocks:30,dataCodewordsPerBlock:16},{numBlocks:2,dataCodewordsPerBlock:17}]}]},{infoBits:102881,versionNumber:25,alignmentPatternCenters:[6,32,58,84,110],errorCorrectionLevels:[{ecCodewordsPerBlock:26,ecBlocks:[{numBlocks:8,dataCodewordsPerBlock:106},{numBlocks:4,dataCodewordsPerBlock:107}]},{ecCodewordsPerBlock:28,ecBlocks:[{numBlocks:8,dataCodewordsPerBlock:47},{numBlocks:13,
dataCodewordsPerBlock:48}]},{ecCodewordsPerBlock:30,ecBlocks:[{numBlocks:7,dataCodewordsPerBlock:24},{numBlocks:22,dataCodewordsPerBlock:25}]},{ecCodewordsPerBlock:30,ecBlocks:[{numBlocks:22,dataCodewordsPerBlock:15},{numBlocks:13,dataCodewordsPerBlock:16}]}]},{infoBits:110507,versionNumber:26,alignmentPatternCenters:[6,30,58,86,114],errorCorrectionLevels:[{ecCodewordsPerBlock:28,ecBlocks:[{numBlocks:10,dataCodewordsPerBlock:114},{numBlocks:2,dataCodewordsPerBlock:115}]},{ecCodewordsPerBlock:28,ecBlocks:[{numBlocks:19,
dataCodewordsPerBlock:46},{numBlocks:4,dataCodewordsPerBlock:47}]},{ecCodewordsPerBlock:28,ecBlocks:[{numBlocks:28,dataCodewordsPerBlock:22},{numBlocks:6,dataCodewordsPerBlock:23}]},{ecCodewordsPerBlock:30,ecBlocks:[{numBlocks:33,dataCodewordsPerBlock:16},{numBlocks:4,dataCodewordsPerBlock:17}]}]},{infoBits:110734,versionNumber:27,alignmentPatternCenters:[6,34,62,90,118],errorCorrectionLevels:[{ecCodewordsPerBlock:30,ecBlocks:[{numBlocks:8,dataCodewordsPerBlock:122},{numBlocks:4,dataCodewordsPerBlock:123}]},
{ecCodewordsPerBlock:28,ecBlocks:[{numBlocks:22,dataCodewordsPerBlock:45},{numBlocks:3,dataCodewordsPerBlock:46}]},{ecCodewordsPerBlock:30,ecBlocks:[{numBlocks:8,dataCodewordsPerBlock:23},{numBlocks:26,dataCodewordsPerBlock:24}]},{ecCodewordsPerBlock:30,ecBlocks:[{numBlocks:12,dataCodewordsPerBlock:15},{numBlocks:28,dataCodewordsPerBlock:16}]}]},{infoBits:117786,versionNumber:28,alignmentPatternCenters:[6,26,50,74,98,122],errorCorrectionLevels:[{ecCodewordsPerBlock:30,ecBlocks:[{numBlocks:3,dataCodewordsPerBlock:117},
{numBlocks:10,dataCodewordsPerBlock:118}]},{ecCodewordsPerBlock:28,ecBlocks:[{numBlocks:3,dataCodewordsPerBlock:45},{numBlocks:23,dataCodewordsPerBlock:46}]},{ecCodewordsPerBlock:30,ecBlocks:[{numBlocks:4,dataCodewordsPerBlock:24},{numBlocks:31,dataCodewordsPerBlock:25}]},{ecCodewordsPerBlock:30,ecBlocks:[{numBlocks:11,dataCodewordsPerBlock:15},{numBlocks:31,dataCodewordsPerBlock:16}]}]},{infoBits:119615,versionNumber:29,alignmentPatternCenters:[6,30,54,78,102,126],errorCorrectionLevels:[{ecCodewordsPerBlock:30,
ecBlocks:[{numBlocks:7,dataCodewordsPerBlock:116},{numBlocks:7,dataCodewordsPerBlock:117}]},{ecCodewordsPerBlock:28,ecBlocks:[{numBlocks:21,dataCodewordsPerBlock:45},{numBlocks:7,dataCodewordsPerBlock:46}]},{ecCodewordsPerBlock:30,ecBlocks:[{numBlocks:1,dataCodewordsPerBlock:23},{numBlocks:37,dataCodewordsPerBlock:24}]},{ecCodewordsPerBlock:30,ecBlocks:[{numBlocks:19,dataCodewordsPerBlock:15},{numBlocks:26,dataCodewordsPerBlock:16}]}]},{infoBits:126325,versionNumber:30,alignmentPatternCenters:[6,
26,52,78,104,130],errorCorrectionLevels:[{ecCodewordsPerBlock:30,ecBlocks:[{numBlocks:5,dataCodewordsPerBlock:115},{numBlocks:10,dataCodewordsPerBlock:116}]},{ecCodewordsPerBlock:28,ecBlocks:[{numBlocks:19,dataCodewordsPerBlock:47},{numBlocks:10,dataCodewordsPerBlock:48}]},{ecCodewordsPerBlock:30,ecBlocks:[{numBlocks:15,dataCodewordsPerBlock:24},{numBlocks:25,dataCodewordsPerBlock:25}]},{ecCodewordsPerBlock:30,ecBlocks:[{numBlocks:23,dataCodewordsPerBlock:15},{numBlocks:25,dataCodewordsPerBlock:16}]}]},
{infoBits:127568,versionNumber:31,alignmentPatternCenters:[6,30,56,82,108,134],errorCorrectionLevels:[{ecCodewordsPerBlock:30,ecBlocks:[{numBlocks:13,dataCodewordsPerBlock:115},{numBlocks:3,dataCodewordsPerBlock:116}]},{ecCodewordsPerBlock:28,ecBlocks:[{numBlocks:2,dataCodewordsPerBlock:46},{numBlocks:29,dataCodewordsPerBlock:47}]},{ecCodewordsPerBlock:30,ecBlocks:[{numBlocks:42,dataCodewordsPerBlock:24},{numBlocks:1,dataCodewordsPerBlock:25}]},{ecCodewordsPerBlock:30,ecBlocks:[{numBlocks:23,dataCodewordsPerBlock:15},
{numBlocks:28,dataCodewordsPerBlock:16}]}]},{infoBits:133589,versionNumber:32,alignmentPatternCenters:[6,34,60,86,112,138],errorCorrectionLevels:[{ecCodewordsPerBlock:30,ecBlocks:[{numBlocks:17,dataCodewordsPerBlock:115}]},{ecCodewordsPerBlock:28,ecBlocks:[{numBlocks:10,dataCodewordsPerBlock:46},{numBlocks:23,dataCodewordsPerBlock:47}]},{ecCodewordsPerBlock:30,ecBlocks:[{numBlocks:10,dataCodewordsPerBlock:24},{numBlocks:35,dataCodewordsPerBlock:25}]},{ecCodewordsPerBlock:30,ecBlocks:[{numBlocks:19,
dataCodewordsPerBlock:15},{numBlocks:35,dataCodewordsPerBlock:16}]}]},{infoBits:136944,versionNumber:33,alignmentPatternCenters:[6,30,58,86,114,142],errorCorrectionLevels:[{ecCodewordsPerBlock:30,ecBlocks:[{numBlocks:17,dataCodewordsPerBlock:115},{numBlocks:1,dataCodewordsPerBlock:116}]},{ecCodewordsPerBlock:28,ecBlocks:[{numBlocks:14,dataCodewordsPerBlock:46},{numBlocks:21,dataCodewordsPerBlock:47}]},{ecCodewordsPerBlock:30,ecBlocks:[{numBlocks:29,dataCodewordsPerBlock:24},{numBlocks:19,dataCodewordsPerBlock:25}]},
{ecCodewordsPerBlock:30,ecBlocks:[{numBlocks:11,dataCodewordsPerBlock:15},{numBlocks:46,dataCodewordsPerBlock:16}]}]},{infoBits:141498,versionNumber:34,alignmentPatternCenters:[6,34,62,90,118,146],errorCorrectionLevels:[{ecCodewordsPerBlock:30,ecBlocks:[{numBlocks:13,dataCodewordsPerBlock:115},{numBlocks:6,dataCodewordsPerBlock:116}]},{ecCodewordsPerBlock:28,ecBlocks:[{numBlocks:14,dataCodewordsPerBlock:46},{numBlocks:23,dataCodewordsPerBlock:47}]},{ecCodewordsPerBlock:30,ecBlocks:[{numBlocks:44,
dataCodewordsPerBlock:24},{numBlocks:7,dataCodewordsPerBlock:25}]},{ecCodewordsPerBlock:30,ecBlocks:[{numBlocks:59,dataCodewordsPerBlock:16},{numBlocks:1,dataCodewordsPerBlock:17}]}]},{infoBits:145311,versionNumber:35,alignmentPatternCenters:[6,30,54,78,102,126,150],errorCorrectionLevels:[{ecCodewordsPerBlock:30,ecBlocks:[{numBlocks:12,dataCodewordsPerBlock:121},{numBlocks:7,dataCodewordsPerBlock:122}]},{ecCodewordsPerBlock:28,ecBlocks:[{numBlocks:12,dataCodewordsPerBlock:47},{numBlocks:26,dataCodewordsPerBlock:48}]},
{ecCodewordsPerBlock:30,ecBlocks:[{numBlocks:39,dataCodewordsPerBlock:24},{numBlocks:14,dataCodewordsPerBlock:25}]},{ecCodewordsPerBlock:30,ecBlocks:[{numBlocks:22,dataCodewordsPerBlock:15},{numBlocks:41,dataCodewordsPerBlock:16}]}]},{infoBits:150283,versionNumber:36,alignmentPatternCenters:[6,24,50,76,102,128,154],errorCorrectionLevels:[{ecCodewordsPerBlock:30,ecBlocks:[{numBlocks:6,dataCodewordsPerBlock:121},{numBlocks:14,dataCodewordsPerBlock:122}]},{ecCodewordsPerBlock:28,ecBlocks:[{numBlocks:6,
dataCodewordsPerBlock:47},{numBlocks:34,dataCodewordsPerBlock:48}]},{ecCodewordsPerBlock:30,ecBlocks:[{numBlocks:46,dataCodewordsPerBlock:24},{numBlocks:10,dataCodewordsPerBlock:25}]},{ecCodewordsPerBlock:30,ecBlocks:[{numBlocks:2,dataCodewordsPerBlock:15},{numBlocks:64,dataCodewordsPerBlock:16}]}]},{infoBits:152622,versionNumber:37,alignmentPatternCenters:[6,28,54,80,106,132,158],errorCorrectionLevels:[{ecCodewordsPerBlock:30,ecBlocks:[{numBlocks:17,dataCodewordsPerBlock:122},{numBlocks:4,dataCodewordsPerBlock:123}]},
{ecCodewordsPerBlock:28,ecBlocks:[{numBlocks:29,dataCodewordsPerBlock:46},{numBlocks:14,dataCodewordsPerBlock:47}]},{ecCodewordsPerBlock:30,ecBlocks:[{numBlocks:49,dataCodewordsPerBlock:24},{numBlocks:10,dataCodewordsPerBlock:25}]},{ecCodewordsPerBlock:30,ecBlocks:[{numBlocks:24,dataCodewordsPerBlock:15},{numBlocks:46,dataCodewordsPerBlock:16}]}]},{infoBits:158308,versionNumber:38,alignmentPatternCenters:[6,32,58,84,110,136,162],errorCorrectionLevels:[{ecCodewordsPerBlock:30,ecBlocks:[{numBlocks:4,
dataCodewordsPerBlock:122},{numBlocks:18,dataCodewordsPerBlock:123}]},{ecCodewordsPerBlock:28,ecBlocks:[{numBlocks:13,dataCodewordsPerBlock:46},{numBlocks:32,dataCodewordsPerBlock:47}]},{ecCodewordsPerBlock:30,ecBlocks:[{numBlocks:48,dataCodewordsPerBlock:24},{numBlocks:14,dataCodewordsPerBlock:25}]},{ecCodewordsPerBlock:30,ecBlocks:[{numBlocks:42,dataCodewordsPerBlock:15},{numBlocks:32,dataCodewordsPerBlock:16}]}]},{infoBits:161089,versionNumber:39,alignmentPatternCenters:[6,26,54,82,110,138,166],
errorCorrectionLevels:[{ecCodewordsPerBlock:30,ecBlocks:[{numBlocks:20,dataCodewordsPerBlock:117},{numBlocks:4,dataCodewordsPerBlock:118}]},{ecCodewordsPerBlock:28,ecBlocks:[{numBlocks:40,dataCodewordsPerBlock:47},{numBlocks:7,dataCodewordsPerBlock:48}]},{ecCodewordsPerBlock:30,ecBlocks:[{numBlocks:43,dataCodewordsPerBlock:24},{numBlocks:22,dataCodewordsPerBlock:25}]},{ecCodewordsPerBlock:30,ecBlocks:[{numBlocks:10,dataCodewordsPerBlock:15},{numBlocks:67,dataCodewordsPerBlock:16}]}]},{infoBits:167017,
versionNumber:40,alignmentPatternCenters:[6,30,58,86,114,142,170],errorCorrectionLevels:[{ecCodewordsPerBlock:30,ecBlocks:[{numBlocks:19,dataCodewordsPerBlock:118},{numBlocks:6,dataCodewordsPerBlock:119}]},{ecCodewordsPerBlock:28,ecBlocks:[{numBlocks:18,dataCodewordsPerBlock:47},{numBlocks:31,dataCodewordsPerBlock:48}]},{ecCodewordsPerBlock:30,ecBlocks:[{numBlocks:34,dataCodewordsPerBlock:24},{numBlocks:34,dataCodewordsPerBlock:25}]},{ecCodewordsPerBlock:30,ecBlocks:[{numBlocks:20,dataCodewordsPerBlock:15},
{numBlocks:61,dataCodewordsPerBlock:16}]}]}];function J(a,b){a^=b;for(b=0;a;)b++,a&=a-1;return b}function K(a,b){return b<<1|a}
let ia=[{bits:21522,formatInfo:{errorCorrectionLevel:1,dataMask:0}},{bits:20773,formatInfo:{errorCorrectionLevel:1,dataMask:1}},{bits:24188,formatInfo:{errorCorrectionLevel:1,dataMask:2}},{bits:23371,formatInfo:{errorCorrectionLevel:1,dataMask:3}},{bits:17913,formatInfo:{errorCorrectionLevel:1,dataMask:4}},{bits:16590,formatInfo:{errorCorrectionLevel:1,dataMask:5}},{bits:20375,formatInfo:{errorCorrectionLevel:1,dataMask:6}},{bits:19104,formatInfo:{errorCorrectionLevel:1,dataMask:7}},{bits:30660,formatInfo:{errorCorrectionLevel:0,
dataMask:0}},{bits:29427,formatInfo:{errorCorrectionLevel:0,dataMask:1}},{bits:32170,formatInfo:{errorCorrectionLevel:0,dataMask:2}},{bits:30877,formatInfo:{errorCorrectionLevel:0,dataMask:3}},{bits:26159,formatInfo:{errorCorrectionLevel:0,dataMask:4}},{bits:25368,formatInfo:{errorCorrectionLevel:0,dataMask:5}},{bits:27713,formatInfo:{errorCorrectionLevel:0,dataMask:6}},{bits:26998,formatInfo:{errorCorrectionLevel:0,dataMask:7}},{bits:5769,formatInfo:{errorCorrectionLevel:3,dataMask:0}},{bits:5054,
formatInfo:{errorCorrectionLevel:3,dataMask:1}},{bits:7399,formatInfo:{errorCorrectionLevel:3,dataMask:2}},{bits:6608,formatInfo:{errorCorrectionLevel:3,dataMask:3}},{bits:1890,formatInfo:{errorCorrectionLevel:3,dataMask:4}},{bits:597,formatInfo:{errorCorrectionLevel:3,dataMask:5}},{bits:3340,formatInfo:{errorCorrectionLevel:3,dataMask:6}},{bits:2107,formatInfo:{errorCorrectionLevel:3,dataMask:7}},{bits:13663,formatInfo:{errorCorrectionLevel:2,dataMask:0}},{bits:12392,formatInfo:{errorCorrectionLevel:2,
dataMask:1}},{bits:16177,formatInfo:{errorCorrectionLevel:2,dataMask:2}},{bits:14854,formatInfo:{errorCorrectionLevel:2,dataMask:3}},{bits:9396,formatInfo:{errorCorrectionLevel:2,dataMask:4}},{bits:8579,formatInfo:{errorCorrectionLevel:2,dataMask:5}},{bits:11994,formatInfo:{errorCorrectionLevel:2,dataMask:6}},{bits:11245,formatInfo:{errorCorrectionLevel:2,dataMask:7}}],ja=[a=>0===(a.y+a.x)%2,a=>0===a.y%2,a=>0===a.x%3,a=>0===(a.y+a.x)%3,a=>0===(Math.floor(a.y/2)+Math.floor(a.x/3))%2,a=>0===a.x*a.y%
2+a.x*a.y%3,a=>0===(a.y*a.x%2+a.y*a.x%3)%2,a=>0===((a.y+a.x)%2+a.y*a.x%3)%2];
function ka(a,b,c){c=ja[c.dataMask];let d=a.height;var e=17+4*b.versionNumber;let f=x.createEmpty(e,e);f.setRegion(0,0,9,9,!0);f.setRegion(e-8,0,8,9,!0);f.setRegion(0,e-8,9,8,!0);for(var g of b.alignmentPatternCenters)for(var h of b.alignmentPatternCenters)6===g&&6===h||6===g&&h===e-7||g===e-7&&6===h||f.setRegion(g-2,h-2,5,5,!0);f.setRegion(6,9,1,e-17,!0);f.setRegion(9,6,e-17,1,!0);6<b.versionNumber&&(f.setRegion(e-11,0,3,6,!0),f.setRegion(0,e-11,6,3,!0));b=[];h=g=0;e=!0;for(let k=d-1;0<k;k-=2){6===
k&&k--;for(let m=0;m<d;m++){let l=e?d-1-m:m;for(let n=0;2>n;n++){let q=k-n;if(!f.get(q,l)){h++;let r=a.get(q,l);c({y:l,x:q})&&(r=!r);g=g<<1|r;8===h&&(b.push(g),g=h=0)}}}e=!e}return b}
function la(a){var b=a.height,c=Math.floor((b-17)/4);if(6>=c)return I[c-1];c=0;for(var d=5;0<=d;d--)for(var e=b-9;e>=b-11;e--)c=K(a.get(e,d),c);d=0;for(e=5;0<=e;e--)for(let g=b-9;g>=b-11;g--)d=K(a.get(e,g),d);a=Infinity;let f;for(let g of I){if(g.infoBits===c||g.infoBits===d)return g;b=J(c,g.infoBits);b<a&&(f=g,a=b);b=J(d,g.infoBits);b<a&&(f=g,a=b)}if(3>=a)return f}
function ma(a){let b=0;for(var c=0;8>=c;c++)6!==c&&(b=K(a.get(c,8),b));for(c=7;0<=c;c--)6!==c&&(b=K(a.get(8,c),b));var d=a.height;c=0;for(var e=d-1;e>=d-7;e--)c=K(a.get(8,e),c);for(e=d-8;e<d;e++)c=K(a.get(e,8),c);a=Infinity;d=null;for(let {bits:f,formatInfo:g}of ia){if(f===b||f===c)return g;e=J(b,f);e<a&&(d=g,a=e);b!==c&&(e=J(c,f),e<a&&(d=g,a=e))}return 3>=a?d:null}
function na(a,b,c){let d=b.errorCorrectionLevels[c],e=[],f=0;d.ecBlocks.forEach(h=>{for(let k=0;k<h.numBlocks;k++)e.push({numDataCodewords:h.dataCodewordsPerBlock,codewords:[]}),f+=h.dataCodewordsPerBlock+d.ecCodewordsPerBlock});if(a.length<f)return null;a=a.slice(0,f);b=d.ecBlocks[0].dataCodewordsPerBlock;for(c=0;c<b;c++)for(var g of e)g.codewords.push(a.shift());if(1<d.ecBlocks.length)for(g=d.ecBlocks[0].numBlocks,b=d.ecBlocks[1].numBlocks,c=0;c<b;c++)e[g+c].codewords.push(a.shift());for(;0<a.length;)for(let h of e)h.codewords.push(a.shift());
return e}function L(a){let b=la(a);if(!b)return null;var c=ma(a);if(!c)return null;a=ka(a,b,c);var d=na(a,b,c.errorCorrectionLevel);if(!d)return null;c=d.reduce((e,f)=>e+f.numDataCodewords,0);c=new Uint8ClampedArray(c);a=0;for(let e of d){d=ha(e.codewords,e.codewords.length-e.numDataCodewords);if(!d)return null;for(let f=0;f<e.numDataCodewords;f++)c[a++]=d[f]}try{return da(c,b.versionNumber)}catch(e){return null}}
function M(a,b,c,d){var e=a.x-b.x+c.x-d.x;let f=a.y-b.y+c.y-d.y;if(0===e&&0===f)return{a11:b.x-a.x,a12:b.y-a.y,a13:0,a21:c.x-b.x,a22:c.y-b.y,a23:0,a31:a.x,a32:a.y,a33:1};let g=b.x-c.x;var h=d.x-c.x;let k=b.y-c.y,m=d.y-c.y;c=g*m-h*k;h=(e*m-h*f)/c;e=(g*f-e*k)/c;return{a11:b.x-a.x+h*b.x,a12:b.y-a.y+h*b.y,a13:h,a21:d.x-a.x+e*d.x,a22:d.y-a.y+e*d.y,a23:e,a31:a.x,a32:a.y,a33:1}}
function oa(a,b,c,d){a=M(a,b,c,d);return{a11:a.a22*a.a33-a.a23*a.a32,a12:a.a13*a.a32-a.a12*a.a33,a13:a.a12*a.a23-a.a13*a.a22,a21:a.a23*a.a31-a.a21*a.a33,a22:a.a11*a.a33-a.a13*a.a31,a23:a.a13*a.a21-a.a11*a.a23,a31:a.a21*a.a32-a.a22*a.a31,a32:a.a12*a.a31-a.a11*a.a32,a33:a.a11*a.a22-a.a12*a.a21}}
function pa(a,b){var c=oa({x:3.5,y:3.5},{x:b.dimension-3.5,y:3.5},{x:b.dimension-6.5,y:b.dimension-6.5},{x:3.5,y:b.dimension-3.5}),d=M(b.topLeft,b.topRight,b.alignmentPattern,b.bottomLeft),e=d.a11*c.a11+d.a21*c.a12+d.a31*c.a13,f=d.a12*c.a11+d.a22*c.a12+d.a32*c.a13,g=d.a13*c.a11+d.a23*c.a12+d.a33*c.a13,h=d.a11*c.a21+d.a21*c.a22+d.a31*c.a23,k=d.a12*c.a21+d.a22*c.a22+d.a32*c.a23,m=d.a13*c.a21+d.a23*c.a22+d.a33*c.a23,l=d.a11*c.a31+d.a21*c.a32+d.a31*c.a33,n=d.a12*c.a31+d.a22*c.a32+d.a32*c.a33,q=d.a13*
c.a31+d.a23*c.a32+d.a33*c.a33;c=x.createEmpty(b.dimension,b.dimension);d=(r,u)=>{const p=g*r+m*u+q;return{x:(e*r+h*u+l)/p,y:(f*r+k*u+n)/p}};for(let r=0;r<b.dimension;r++)for(let u=0;u<b.dimension;u++){let p=d(u+.5,r+.5);c.set(u,r,a.get(Math.floor(p.x),Math.floor(p.y)))}return{matrix:c,mappingFunction:d}}let N=(a,b)=>Math.sqrt(Math.pow(b.x-a.x,2)+Math.pow(b.y-a.y,2));function O(a){return a.reduce((b,c)=>b+c)}
function qa(a,b,c){let d=N(a,b),e=N(b,c),f=N(a,c),g,h,k;e>=d&&e>=f?[g,h,k]=[b,a,c]:f>=e&&f>=d?[g,h,k]=[a,b,c]:[g,h,k]=[a,c,b];0>(k.x-h.x)*(g.y-h.y)-(k.y-h.y)*(g.x-h.x)&&([g,k]=[k,g]);return{bottomLeft:g,topLeft:h,topRight:k}}
function ra(a,b,c,d){d=(O(P(a,c,d,5))/7+O(P(a,b,d,5))/7+O(P(c,a,d,5))/7+O(P(b,a,d,5))/7)/4;if(1>d)throw Error("Invalid module size");b=Math.round(N(a,b)/d);a=Math.round(N(a,c)/d);a=Math.floor((b+a)/2)+7;switch(a%4){case 0:a++;break;case 2:a--}return{dimension:a,moduleSize:d}}
function Q(a,b,c,d){let e=[{x:Math.floor(a.x),y:Math.floor(a.y)}];var f=Math.abs(b.y-a.y)>Math.abs(b.x-a.x);if(f){var g=Math.floor(a.y);var h=Math.floor(a.x);a=Math.floor(b.y);b=Math.floor(b.x)}else g=Math.floor(a.x),h=Math.floor(a.y),a=Math.floor(b.x),b=Math.floor(b.y);let k=Math.abs(a-g),m=Math.abs(b-h),l=Math.floor(-k/2),n=g<a?1:-1,q=h<b?1:-1,r=!0;for(let u=g,p=h;u!==a+n;u+=n){g=f?p:u;h=f?u:p;if(c.get(g,h)!==r&&(r=!r,e.push({x:g,y:h}),e.length===d+1))break;l+=m;if(0<l){if(p===b)break;p+=q;l-=k}}c=
[];for(f=0;f<d;f++)e[f]&&e[f+1]?c.push(N(e[f],e[f+1])):c.push(0);return c}function P(a,b,c,d){let e=b.y-a.y,f=b.x-a.x;b=Q(a,b,c,Math.ceil(d/2));a=Q(a,{x:a.x-f,y:a.y-e},c,Math.ceil(d/2));c=b.shift()+a.shift()-1;return a.concat(c).concat(...b)}function R(a,b){let c=O(a)/O(b),d=0;b.forEach((e,f)=>{d+=Math.pow(a[f]-e*c,2)});return{averageSize:c,error:d}}
function S(a,b,c){try{let d=P(a,{x:-1,y:a.y},c,b.length),e=P(a,{x:a.x,y:-1},c,b.length),f=P(a,{x:Math.max(0,a.x-a.y)-1,y:Math.max(0,a.y-a.x)-1},c,b.length),g=P(a,{x:Math.min(c.width,a.x+a.y)+1,y:Math.min(c.height,a.y+a.x)+1},c,b.length),h=R(d,b),k=R(e,b),m=R(f,b),l=R(g,b),n=(h.averageSize+k.averageSize+m.averageSize+l.averageSize)/4;return Math.sqrt(h.error*h.error+k.error*k.error+m.error*m.error+l.error*l.error)+(Math.pow(h.averageSize-n,2)+Math.pow(k.averageSize-n,2)+Math.pow(m.averageSize-n,2)+
Math.pow(l.averageSize-n,2))/n}catch(d){return Infinity}}function T(a,b){for(var c=Math.round(b.x);a.get(c,Math.round(b.y));)c--;for(var d=Math.round(b.x);a.get(d,Math.round(b.y));)d++;c=(c+d)/2;for(d=Math.round(b.y);a.get(Math.round(c),d);)d--;for(b=Math.round(b.y);a.get(Math.round(c),b);)b++;return{x:c,y:(d+b)/2}}
function sa(a){var b=[],c=[];let d=[];var e=[];for(let p=0;p<=a.height;p++){var f=0,g=!1;let t=[0,0,0,0,0];for(let v=-1;v<=a.width;v++){var h=a.get(v,p);if(h===g)f++;else{t=[t[1],t[2],t[3],t[4],f];f=1;g=h;var k=O(t)/7;k=Math.abs(t[0]-k)<k&&Math.abs(t[1]-k)<k&&Math.abs(t[2]-3*k)<3*k&&Math.abs(t[3]-k)<k&&Math.abs(t[4]-k)<k&&!h;var m=O(t.slice(-3))/3;h=Math.abs(t[2]-m)<m&&Math.abs(t[3]-m)<m&&Math.abs(t[4]-m)<m&&h;if(k){let z=v-t[3]-t[4],y=z-t[2];k={startX:y,endX:z,y:p};m=c.filter(w=>y>=w.bottom.startX&&
y<=w.bottom.endX||z>=w.bottom.startX&&y<=w.bottom.endX||y<=w.bottom.startX&&z>=w.bottom.endX&&1.5>t[2]/(w.bottom.endX-w.bottom.startX)&&.5<t[2]/(w.bottom.endX-w.bottom.startX));0<m.length?m[0].bottom=k:c.push({top:k,bottom:k})}if(h){let z=v-t[4],y=z-t[3];h={startX:y,y:p,endX:z};k=e.filter(w=>y>=w.bottom.startX&&y<=w.bottom.endX||z>=w.bottom.startX&&y<=w.bottom.endX||y<=w.bottom.startX&&z>=w.bottom.endX&&1.5>t[2]/(w.bottom.endX-w.bottom.startX)&&.5<t[2]/(w.bottom.endX-w.bottom.startX));0<k.length?
k[0].bottom=h:e.push({top:h,bottom:h})}}}b.push(...c.filter(v=>v.bottom.y!==p&&2<=v.bottom.y-v.top.y));c=c.filter(v=>v.bottom.y===p);d.push(...e.filter(v=>v.bottom.y!==p));e=e.filter(v=>v.bottom.y===p)}b.push(...c.filter(p=>2<=p.bottom.y-p.top.y));d.push(...e);c=[];for(var l of b)2>l.bottom.y-l.top.y||(b=(l.top.startX+l.top.endX+l.bottom.startX+l.bottom.endX)/4,e=(l.top.y+l.bottom.y+1)/2,a.get(Math.round(b),Math.round(e))&&(f=[l.top.endX-l.top.startX,l.bottom.endX-l.bottom.startX,l.bottom.y-l.top.y+
1],f=O(f)/f.length,g=S({x:Math.round(b),y:Math.round(e)},[1,1,3,1,1],a),c.push({score:g,x:b,y:e,size:f})));if(3>c.length)return null;c.sort((p,t)=>p.score-t.score);l=[];for(b=0;b<Math.min(c.length,5);++b){e=c[b];f=[];for(var n of c)n!==e&&f.push(Object.assign(Object.assign({},n),{score:n.score+Math.pow(n.size-e.size,2)/e.size}));f.sort((p,t)=>p.score-t.score);l.push({points:[e,f[0],f[1]],score:e.score+f[0].score+f[1].score})}l.sort((p,t)=>p.score-t.score);let {topRight:q,topLeft:r,bottomLeft:u}=qa(...l[0].points);
l=U(a,d,q,r,u);n=[];l&&n.push({alignmentPattern:{x:l.alignmentPattern.x,y:l.alignmentPattern.y},bottomLeft:{x:u.x,y:u.y},dimension:l.dimension,topLeft:{x:r.x,y:r.y},topRight:{x:q.x,y:q.y}});l=T(a,q);b=T(a,r);c=T(a,u);(a=U(a,d,l,b,c))&&n.push({alignmentPattern:{x:a.alignmentPattern.x,y:a.alignmentPattern.y},bottomLeft:{x:c.x,y:c.y},topLeft:{x:b.x,y:b.y},topRight:{x:l.x,y:l.y},dimension:a.dimension});return 0===n.length?null:n}
function U(a,b,c,d,e){let f,g;try{({dimension:f,moduleSize:g}=ra(d,c,e,a))}catch(l){return null}var h=c.x-d.x+e.x,k=c.y-d.y+e.y;c=(N(d,e)+N(d,c))/2/g;e=1-3/c;let m={x:d.x+e*(h-d.x),y:d.y+e*(k-d.y)};b=b.map(l=>{const n=(l.top.startX+l.top.endX+l.bottom.startX+l.bottom.endX)/4;l=(l.top.y+l.bottom.y+1)/2;if(a.get(Math.floor(n),Math.floor(l))){var q=S({x:Math.floor(n),y:Math.floor(l)},[1,1,1],a)+N({x:n,y:l},m);return{x:n,y:l,score:q}}}).filter(l=>!!l).sort((l,n)=>l.score-n.score);return{alignmentPattern:15<=
c&&b.length?b[0]:m,dimension:f}}
function V(a){var b=sa(a);if(!b)return null;for(let e of b){b=pa(a,e);var c=b.matrix;if(null==c)c=null;else{var d=L(c);if(d)c=d;else{for(d=0;d<c.width;d++)for(let f=d+1;f<c.height;f++)c.get(d,f)!==c.get(f,d)&&(c.set(d,f,!c.get(d,f)),c.set(f,d,!c.get(f,d)));c=L(c)}}if(c)return{binaryData:c.bytes,data:c.text,chunks:c.chunks,version:c.version,location:{topRightCorner:b.mappingFunction(e.dimension,0),topLeftCorner:b.mappingFunction(0,0),bottomRightCorner:b.mappingFunction(e.dimension,e.dimension),bottomLeftCorner:b.mappingFunction(0,
e.dimension),topRightFinderPattern:e.topRight,topLeftFinderPattern:e.topLeft,bottomLeftFinderPattern:e.bottomLeft,bottomRightAlignmentPattern:e.alignmentPattern},matrix:b.matrix}}return null}let ta={inversionAttempts:"attemptBoth",greyScaleWeights:{red:.2126,green:.7152,blue:.0722,useIntegerApproximation:!1},canOverwriteImage:!0};function W(a,b){Object.keys(b).forEach(c=>{a[c]=b[c]})}
function X(a,b,c,d={}){let e=Object.create(null);W(e,ta);W(e,d);d="onlyInvert"===e.inversionAttempts||"invertFirst"===e.inversionAttempts;var f="attemptBoth"===e.inversionAttempts||d;var g=e.greyScaleWeights,h=e.canOverwriteImage,k=b*c;if(a.length!==4*k)throw Error("Malformed data passed to binarizer.");var m=0;if(h){var l=new Uint8ClampedArray(a.buffer,m,k);m+=k}l=new A(b,c,l);if(g.useIntegerApproximation)for(var n=0;n<c;n++)for(var q=0;q<b;q++){var r=4*(n*b+q);l.set(q,n,g.red*a[r]+g.green*a[r+1]+
g.blue*a[r+2]+128>>8)}else for(n=0;n<c;n++)for(q=0;q<b;q++)r=4*(n*b+q),l.set(q,n,g.red*a[r]+g.green*a[r+1]+g.blue*a[r+2]);g=Math.ceil(b/8);n=Math.ceil(c/8);q=g*n;if(h){var u=new Uint8ClampedArray(a.buffer,m,q);m+=q}u=new A(g,n,u);for(q=0;q<n;q++)for(r=0;r<g;r++){var p=Infinity,t=0;for(var v=0;8>v;v++)for(let w=0;8>w;w++){let aa=l.get(8*r+w,8*q+v);p=Math.min(p,aa);t=Math.max(t,aa)}v=(p+t)/2;v=Math.min(255,1.11*v);24>=t-p&&(v=p/2,0<q&&0<r&&(t=(u.get(r,q-1)+2*u.get(r-1,q)+u.get(r-1,q-1))/4,p<t&&(v=t)));
u.set(r,q,v)}h?(q=new Uint8ClampedArray(a.buffer,m,k),m+=k,q=new x(q,b)):q=x.createEmpty(b,c);r=null;f&&(h?(a=new Uint8ClampedArray(a.buffer,m,k),r=new x(a,b)):r=x.createEmpty(b,c));for(b=0;b<n;b++)for(a=0;a<g;a++){c=g-3;c=2>a?2:a>c?c:a;h=n-3;h=2>b?2:b>h?h:b;k=0;for(m=-2;2>=m;m++)for(p=-2;2>=p;p++)k+=u.get(c+m,h+p);c=k/25;for(h=0;8>h;h++)for(k=0;8>k;k++)m=8*a+h,p=8*b+k,t=l.get(m,p),q.set(m,p,t<=c),f&&r.set(m,p,!(t<=c))}f=f?{binarized:q,inverted:r}:{binarized:q};let {binarized:z,inverted:y}=f;(f=V(d?
y:z))||"attemptBoth"!==e.inversionAttempts&&"invertFirst"!==e.inversionAttempts||(f=V(d?z:y));return f}X.default=X;let Y="dontInvert",Z={red:77,green:150,blue:29,useIntegerApproximation:!0};
self.onmessage=a=>{let b=a.data.id,c=a.data.data;switch(a.data.type){case "decode":(a=X(c.data,c.width,c.height,{inversionAttempts:Y,greyScaleWeights:Z}))?self.postMessage({id:b,type:"qrResult",data:a.data,cornerPoints:[a.location.topLeftCorner,a.location.topRightCorner,a.location.bottomRightCorner,a.location.bottomLeftCorner]}):self.postMessage({id:b,type:"qrResult",data:null});break;case "grayscaleWeights":Z.red=c.red;Z.green=c.green;Z.blue=c.blue;Z.useIntegerApproximation=c.useIntegerApproximation;
break;case "inversionMode":switch(c){case "original":Y="dontInvert";break;case "invert":Y="onlyInvert";break;case "both":Y="attemptBoth";break;default:throw Error("Invalid inversion mode");}break;case "close":self.close()}}
\`]),{type:"application/javascript"}))});return l})}(Te)),Te.exports}var ft=ht(),Ve=fe(ft);self.window=self,self.Image=self.HTMLVideoElement=self.HTMLCanvasElement=self.SVGImageElement=class{};const mt=Ve.createQrEngine(),Ee=new OffscreenCanvas(0,0);Ee._getContext=Ee.getContext,Ee.getContext=function(...R){return R[1]&&(R[1].willReadFrequently=!0),this._getContext(...R)};const pt=[/^https:\\/\\/[^.]+\\.fanbox\\.cc/,/^https:\\/\\/twitter\\.com/,/^https:\\/\\/x\\.com/,/^https:\\/\\/fantia\\.jp/,/^https:\\/\\/marshmallow-qa\\.com/,/^https:\\/\\/www\\.dlsite\\.com/,/^https:\\/\\/hitomi\\.la/,/^https:\\/\\/www\\.dmm\\.co\\.jp/],kt=async R=>{try{const $=(await Ve.scanImage(await createImageBitmap(new Blob([R])),{qrEngine:mt,canvas:Ee})).data;if($)return pt.every(o=>!o.test($))}catch{}return!1},gt=async(R,$,o=new Set)=>{let l=R.length-1,d=0;for(;l>=R.length-10&&!(l<=2);l--){if(o.has(l))continue;const e=R[l];if(!e)break;if(await $(e))o.add(l);else{if(d>=2)break;d+=1}}let c=0;for(l=Math.min(...o);l<R.length;l++){if(o.has(l)){c+=1;continue}c>=2||o.has(l-1)&&o.has(l+1)?o.add(l):c=0}return o};class wt{constructor(){__publicField(this,"zip",new De),__publicField(this,"adRemoved",!1)}file({name:$,data:o}){this.zip.file($,o)}files($){$.forEach(({name:o,data:l})=>{this.zip.file(o,l)})}async unzipFile({data:$,path:o,type:l}){var d;return(d=(await De.loadAsync($)).file(o))==null?void 0:d.async(l)}async generateAsync($,o){$!=null&&$.removeAdPage&&await this.removeAd();const l=await this.zip.generateAsync({...$,type:"uint8array"},o);return Le(l,[l.buffer])}async generateStream($,o,l){$!=null&&$.removeAdPage&&await this.removeAd();const d=this.zip.generateInternalStream({...$,type:"uint8array"}),c=new ReadableStream({start:e=>{d.on("error",t=>{e.error(t),l?.()}),d.on("end",()=>{setTimeout(()=>{e.close(),l?.()})}),d.on("data",(t,a)=>{e.enqueue(t),o?.(a)}),d.resume()}});return Le({zipStream:c},[c])}async removeAd(){if(this.adRemoved)return;const $=[];Object.values(this.zip.files).forEach(o=>{const l=parseInt(o.name);Number.isNaN(l)||$.push({i:l,obj:o})}),$.sort((o,l)=>o.i-l.i);try{const o=await gt($,async({obj:d})=>kt(await d._data));if(!o.size){console.log("[nhentai-helper] no ad pages detected");return}const l=[...o.values()].map(d=>$[d].obj);console.log("[nhentai-helper] ad pages detected:",...l.map(d=>d.name)),l.forEach(d=>{this.zip.remove(d.name)})}catch(o){console.error("[nhentai-helper] remove ad page",o)}}}ze(wt)})();
`, blob$1 = typeof self < "u" && self.Blob && new Blob([jsContent$1], { type: "text/javascript;charset=utf-8" });
function WorkerWrapper$1(options) {
let objURL;
try {
if (objURL = blob$1 && (self.URL || self.webkitURL).createObjectURL(blob$1), !objURL) throw "";
const worker = new Worker(objURL, {
name: options == null ? void 0 : options.name
});
return worker.addEventListener("error", () => {
(self.URL || self.webkitURL).revokeObjectURL(objURL);
}), worker;
} catch {
return new Worker(
"data:text/javascript;charset=utf-8," + encodeURIComponent(jsContent$1),
{
name: options == null ? void 0 : options.name
}
);
} finally {
objURL && (self.URL || self.webkitURL).revokeObjectURL(objURL);
}
}
const getTransferableData = (files) => files.map(({ data }) => data).filter((data) => typeof data != "string");
class JSZipWorkerPool {
constructor() {
__publicField(this, "pool", []);
__publicField(this, "waitingQueue", []);
__publicField(this, "unzipFile", async (params) => {
const worker = await this.acquireWorker(), zip = await new worker.JSZip(), clean = () => {
zip[releaseProxy](), this.releaseWorker(worker);
};
try {
return await zip.unzipFile(transfer(params, [params.data]));
} catch (error) {
throw clean(), error;
}
});
for (let id = 0; id < WORKER_THREAD_NUM; id++)
this.pool.push({
id,
idle: true
});
}
async createWorker() {
return wrap(new WorkerWrapper$1());
}
waitIdleWorker() {
return new Promise((resolve) => {
this.waitingQueue.push(resolve);
});
}
async acquireWorker() {
let worker = this.pool.find(({ idle }) => idle);
return worker || (worker = await this.waitIdleWorker()), worker.JSZip || (worker.JSZip = await this.createWorker()), worker.idle = false, worker;
}
releaseWorker(worker) {
if (worker.idle = true, !this.waitingQueue.length) return;
removeAt(this.waitingQueue, 0)(worker);
}
async generateAsync(files, options, onUpdate) {
const worker = await this.acquireWorker(), zip = await new worker.JSZip();
try {
return await zip.files(transfer(files, getTransferableData(files))), await zip.generateAsync(
options,
proxy((metaData) => {
metaData.currentFile && (onUpdate == null || onUpdate({ workerId: worker.id, ...metaData }));
})
);
} finally {
zip[releaseProxy](), this.releaseWorker(worker);
}
}
async generateStream(files, options, onUpdate) {
const worker = await this.acquireWorker(), zip = await new worker.JSZip();
try {
await zip.files(transfer(files, getTransferableData(files)));
const { zipStream } = await zip.generateStream(
options,
proxy((metaData) => {
metaData.currentFile && (onUpdate == null || onUpdate({ workerId: worker.id, ...metaData }));
})
);
return zipStream;
} finally {
zip[releaseProxy](), this.releaseWorker(worker);
}
}
}
const jszipPool = new JSZipWorkerPool();
class JSZip {
constructor() {
__publicField(this, "files", []);
}
file(name, data) {
this.files.push({ name, data });
}
generateAsync(options, onUpdate) {
const { files } = this;
return this.files = [], jszipPool.generateAsync(files, options, onUpdate);
}
generateStream(options, onUpdate) {
const { files } = this;
return this.files = [], jszipPool.generateStream(files, options, onUpdate);
}
}
__publicField(JSZip, "unzipFile", (params) => jszipPool.unzipFile(params));
extendPrototype(localforage);
class DownloadHistory {
constructor(name) {
__publicField(this, "store");
__publicField(this, "ready");
this.name = name, this.store = localforage.createInstance({
name: "nhentai_helper",
storeName: name
}), this.ready = this.store.ready().then(() => true).catch((e) => (logger.error(e), false));
}
async add(key) {
if (await this.ready)
try {
await this.store.setItem(key, !0), logger.log(`mark "${key}" as downloaded`);
} catch (e) {
logger.error(e);
}
}
async del(key) {
if (await this.ready)
try {
await this.store.removeItem(key), logger.log(`unmark "${key}" as downloaded`);
} catch (e) {
logger.error(e);
}
}
async has(key) {
if (!await this.ready) return false;
try {
return await this.store.getItem(key) === !0;
} catch (e) {
logger.error(e);
}
return false;
}
async size() {
return await this.ready ? this.store.length() : NaN;
}
async import(keys2) {
if (!await this.ready) throw new Error(`store ${this.name} cannot ready`);
try {
await this.store.setItems(keys2.map((gid2) => ({ key: gid2, value: !0 })));
} catch (e) {
logger.error(e);
}
}
async export() {
if (!await this.ready) throw new Error(`store ${this.name} cannot ready`);
return this.store.keys();
}
async clear() {
await this.ready && await this.store.clear();
}
}
const gidHistory = new DownloadHistory("dl_history_gid"), enTitleHistory = new DownloadHistory("dl_history_en"), jpTitleHistory = new DownloadHistory("dl_history"), prettyTitleHistory = new DownloadHistory("dl_history_pretty"), normalizeTitle = (title) => title.replace(/\s/g, ""), getTitleMd5 = (title) => md5(normalizeTitle(title)), markAsDownloaded = (gid2, { english: english2, japanese: japanese2, pretty } = {}) => {
gidHistory.add(String(gid2)), english2 && enTitleHistory.add(getTitleMd5(english2)), japanese2 && jpTitleHistory.add(getTitleMd5(japanese2)), pretty && prettyTitleHistory.add(getTitleMd5(pretty));
}, unmarkAsDownloaded = (gid2, { english: english2, japanese: japanese2, pretty } = {}) => {
gidHistory.del(String(gid2)), english2 && enTitleHistory.del(getTitleMd5(english2)), japanese2 && jpTitleHistory.del(getTitleMd5(japanese2)), pretty && prettyTitleHistory.del(getTitleMd5(pretty));
}, isDownloadedByGid = (gid2) => gidHistory.has(String(gid2)), isDownloadedByTitle = async ({
english: english2,
japanese: japanese2,
pretty
} = {}) => {
if (settings.judgeDownloadedByJapanese && japanese2) {
const md5v2 = getTitleMd5(japanese2);
if (await jpTitleHistory.has(md5v2)) return true;
const md5v1 = md5(japanese2);
if (await jpTitleHistory.has(md5v1))
return jpTitleHistory.add(md5v2), jpTitleHistory.del(md5v1), true;
}
return !!(settings.judgeDownloadedByEnglish && english2 && await enTitleHistory.has(getTitleMd5(english2)) || settings.judgeDownloadedByPretty && pretty && await enTitleHistory.has(getTitleMd5(pretty)));
}, getDownloadNumber = () => gidHistory.size(), EXPORT_HEADER_GID = "gid:", EXPORT_HEADER_TITLE_JP = "title:", EXPORT_HEADER_TITLE_EN = "title_en:", EXPORT_HEADER_TITLE_PRETTY = "title_pretty:", EXPORT_SEPARATOR = ",", EXPORT_TEXT_FILENAME = "history.txt", exportDownloadHistory = async () => {
try {
const gids = await gidHistory.export(), jpTitles = await jpTitleHistory.export(), enTitles = await enTitleHistory.export(), prettyTitles = await prettyTitleHistory.export(), text = `${EXPORT_HEADER_GID}${gids.join(EXPORT_SEPARATOR)}
${EXPORT_HEADER_TITLE_JP}${jpTitles.join(EXPORT_SEPARATOR)}
${EXPORT_HEADER_TITLE_EN}${enTitles.join(EXPORT_SEPARATOR)}
${EXPORT_HEADER_TITLE_PRETTY}${prettyTitles.join(EXPORT_SEPARATOR)}`, zip = new JSZip();
zip.file(EXPORT_TEXT_FILENAME, text);
const data = await zip.generateAsync({
compression: "DEFLATE",
compressionOptions: { level: 9 }
}), filename = `nhentai-helper-download-history-${dateTimeFormatter.format(Date.now()).replace(/[^\d]/g, "")}.zip`;
return FileSaver_minExports.saveAs(new File([data], filename, { type: "application/zip" })), logger.log("export download history", filename), !0;
} catch (error) {
logger.error(error);
}
return false;
}, importDownloadHistory = async (data) => {
try {
const str = await JSZip.unzipFile({ data, path: EXPORT_TEXT_FILENAME, type: "string" });
if (!str)
return logger.error("zip doesn't contain file", EXPORT_TEXT_FILENAME), !1;
const lines = str.split(`
`);
for (const line of lines)
if (line.startsWith(EXPORT_HEADER_GID)) {
const gids = line.replace(EXPORT_HEADER_GID, "").split(EXPORT_SEPARATOR);
await gidHistory.import(gids);
} else if (line.startsWith(EXPORT_HEADER_TITLE_JP)) {
const titles = line.replace(EXPORT_HEADER_TITLE_JP, "").split(EXPORT_SEPARATOR);
await jpTitleHistory.import(titles);
} else if (line.startsWith(EXPORT_HEADER_TITLE_EN)) {
const titles = line.replace(EXPORT_HEADER_TITLE_EN, "").split(EXPORT_SEPARATOR);
await enTitleHistory.import(titles);
} else if (line.startsWith(EXPORT_HEADER_TITLE_PRETTY)) {
const titles = line.replace(EXPORT_HEADER_TITLE_PRETTY, "").split(EXPORT_SEPARATOR);
await prettyTitleHistory.import(titles);
}
return !0;
} catch (error) {
logger.error(error);
}
return false;
}, clearDownloadHistory = async () => {
try {
return await gidHistory.clear(), await enTitleHistory.clear(), await jpTitleHistory.clear(), await prettyTitleHistory.clear(), !0;
} catch (error) {
logger.error(error);
}
return false;
}, isSameTitleString = (title1, title2) => !!title1 && !!title2 && normalizeTitle(title1) === normalizeTitle(title2), isSameTitle = (title1, title2) => !!(settings.judgeDownloadedByJapanese && isSameTitleString(title1.japanese, title2.japanese) || settings.judgeDownloadedByEnglish && isSameTitleString(title1.english, title2.english) || settings.judgeDownloadedByPretty && isSameTitleString(title1.pretty, title2.pretty));
var core = {}, hasRequiredCore;
function requireCore() {
return hasRequiredCore || (hasRequiredCore = 1, function(exports2) {
Object.defineProperty(exports2, "__esModule", { value: true }), exports2.h = exports2._render = exports2.hydrate = exports2.render = exports2.appendChildren = exports2.strToHash = exports2.removeAllChildNodes = exports2.tick = exports2.isSSR = void 0;
const isSSR = () => typeof _nano < "u" && _nano.isSSR === true;
exports2.isSSR = isSSR, exports2.tick = Promise.prototype.then.bind(Promise.resolve());
const removeAllChildNodes = (parent) => {
for (; parent.firstChild; )
parent.removeChild(parent.firstChild);
};
exports2.removeAllChildNodes = removeAllChildNodes;
const strToHash = (s) => {
let hash = 0;
for (let i = 0; i < s.length; i++) {
const chr = s.charCodeAt(i);
hash = (hash << 5) - hash + chr, hash |= 0;
}
return Math.abs(hash).toString(32);
};
exports2.strToHash = strToHash;
const appendChildren = (element, children, escape2 = true) => {
if (!Array.isArray(children)) {
(0, exports2.appendChildren)(element, [children], escape2);
return;
}
typeof children == "object" && (children = Array.prototype.slice.call(children)), children.forEach((child) => {
if (Array.isArray(child))
(0, exports2.appendChildren)(element, child, escape2);
else {
const c = (0, exports2._render)(child);
typeof c < "u" && (Array.isArray(c) ? (0, exports2.appendChildren)(element, c, escape2) : (0, exports2.isSSR)() && !escape2 ? element.appendChild(c.nodeType == null ? c.toString() : c) : element.appendChild(c.nodeType == null ? document.createTextNode(c.toString()) : c));
}
});
};
exports2.appendChildren = appendChildren;
const SVG = (props) => {
const child = props.children[0], attrs = child.attributes;
if ((0, exports2.isSSR)())
return child;
const svg = hNS("svg");
for (let i = attrs.length - 1; i >= 0; i--)
svg.setAttribute(attrs[i].name, attrs[i].value);
return svg.innerHTML = child.innerHTML, svg;
}, render2 = (component, parent = null, removeChildNodes = true) => {
let el = (0, exports2._render)(component);
return Array.isArray(el) && (el = el.map((e) => (0, exports2._render)(e)), el.length === 1 && (el = el[0])), parent ? (removeChildNodes && (0, exports2.removeAllChildNodes)(parent), el && parent.id && parent.id === el.id && parent.parentElement ? parent.parentElement.replaceChild(el, parent) : Array.isArray(el) ? el.forEach((e) => {
(0, exports2.appendChildren)(parent, (0, exports2._render)(e));
}) : (0, exports2.appendChildren)(parent, (0, exports2._render)(el)), parent) : (0, exports2.isSSR)() && !Array.isArray(el) ? [el] : el;
};
exports2.render = render2, exports2.hydrate = exports2.render;
const _render = (comp) => {
if (comp === null || comp === false || typeof comp > "u")
return [];
if (typeof comp == "string" || typeof comp == "number")
return comp.toString();
if (comp.tagName && comp.tagName.toLowerCase() === "svg")
return SVG({ children: [comp] });
if (comp.tagName || comp && comp.nodeType === 3)
return comp;
if (comp && comp.component && comp.component.isClass)
return renderClassComponent(comp);
if (comp.isClass)
return renderClassComponent({ component: comp, props: {} });
if (comp.component && typeof comp.component == "function")
return renderFunctionalComponent(comp);
if (Array.isArray(comp))
return comp.map((c) => (0, exports2._render)(c)).flat();
if (typeof comp == "function" && !comp.isClass)
return (0, exports2._render)(comp());
if (comp.component && comp.component.tagName && typeof comp.component.tagName == "string" || Array.isArray(comp.component) || comp.component)
return (0, exports2._render)(comp.component);
if (typeof comp == "object")
return [];
console.warn("Something unexpected happened with:", comp);
};
exports2._render = _render;
const renderFunctionalComponent = (fncComp) => {
const { component, props } = fncComp;
return (0, exports2._render)(component(props));
}, renderClassComponent = (classComp) => {
const { component, props } = classComp, hash = (0, exports2.strToHash)(component.toString());
component.prototype._getHash = () => hash;
const Component = new component(props);
(0, exports2.isSSR)() || Component.willMount();
let el = Component.render();
return el = (0, exports2._render)(el), Component.elements = el, props && props.ref && props.ref(Component), (0, exports2.isSSR)() || (0, exports2.tick)(() => {
Component._didMount();
}), el;
}, hNS = (tag) => document.createElementNS("http://www.w3.org/2000/svg", tag), h2 = (tagNameOrComponent, props = {}, ...children) => {
if (props && props.children && (Array.isArray(children) ? Array.isArray(props.children) ? children = [...props.children, ...children] : children.push(props.children) : Array.isArray(props.children) ? children = props.children : children = [props.children]), (0, exports2.isSSR)() && _nano.ssrTricks.isWebComponent(tagNameOrComponent)) {
const element2 = _nano.ssrTricks.renderWebComponent(tagNameOrComponent, props, children, exports2._render);
return element2 === null ? `ERROR: "<${tagNameOrComponent} />"` : element2;
}
if (typeof tagNameOrComponent != "string")
return { component: tagNameOrComponent, props: Object.assign(Object.assign({}, props), { children }) };
try {
if ((0, exports2.isSSR)() && typeof tagNameOrComponent == "string" && !document)
throw new Error("document is not defined");
} catch (err) {
console.log("ERROR:", err.message, `
> Please read: https://github.com/nanojsx/nano/issues/106`);
}
let ref2;
const element = tagNameOrComponent === "svg" ? hNS("svg") : document.createElement(tagNameOrComponent), isEvent = (el, p) => p.indexOf("on") !== 0 ? false : el._ssr ? true : typeof el[p] == "object" || typeof el[p] == "function";
for (const p in props) {
if (p === "style" && typeof props[p] == "object") {
const styles = Object.keys(props[p]).map((k) => `${k}:${props[p][k]}`).join(";").replace(/[A-Z]/g, (match2) => `-${match2.toLowerCase()}`);
props[p] = `${styles};`;
}
if (p === "ref")
ref2 = props[p];
else if (isEvent(element, p.toLowerCase()))
element.addEventListener(p.toLowerCase().substring(2), (e) => props[p](e));
else if (p === "dangerouslySetInnerHTML" && props[p].__html)
if ((0, exports2.isSSR)())
element.innerHTML = props[p].__html;
else {
const fragment = document.createElement("fragment");
fragment.innerHTML = props[p].__html, element.appendChild(fragment);
}
else if (p === "innerHTML" && props[p].__dangerousHtml)
if ((0, exports2.isSSR)())
element.innerHTML = props[p].__dangerousHtml;
else {
const fragment = document.createElement("fragment");
fragment.innerHTML = props[p].__dangerousHtml, element.appendChild(fragment);
}
else /^className$/i.test(p) ? element.setAttribute("class", props[p]) : typeof props[p] < "u" && element.setAttribute(p, props[p]);
}
const escape2 = !["noscript", "script", "style"].includes(tagNameOrComponent);
return (0, exports2.appendChildren)(element, children, escape2), ref2 && ref2(element), element;
};
exports2.h = h2;
}(core)), core;
}
var coreExports = requireCore();
const readFile = (file) => new Promise((resolve, reject) => {
const reader = new FileReader();
reader.onload = () => {
resolve(reader.result);
}, reader.onabort = reject, reader.onerror = reject, reader.readAsArrayBuffer(file);
}), pickFile = (accept) => new Promise((resolve) => {
const input = /* @__PURE__ */ coreExports.h(
"input",
{
type: "file",
accept,
onChange: () => {
var _a;
resolve((_a = input.files) == null ? void 0 : _a[0]);
}
}
);
input.click();
}), pickAndReadFile = async (accept) => {
const file = await pickFile(accept);
if (file) return readFile(file);
}, showMessage = (params) => elementPlus.ElMessage({ ...params, appendTo: _monkeyWindow.document.body }), _hoisted_1$2 = { class: "nhentai-helper-setting-help-buttons no-sl" }, _hoisted_2$1 = ["id"], _hoisted_3$1 = { id: "nhentai-helper-setting-dialog" }, _hoisted_4$1 = {
class: "asterisk-example no-sl",
style: { "margin-bottom": "18px" }
}, _hoisted_5$1 = { class: "inline-item" }, _hoisted_6$1 = { class: "inline-item__name" }, _hoisted_7$1 = { class: "inline-item" }, _hoisted_8 = { class: "inline-item__name" }, _hoisted_9 = { style: { color: "var(--el-text-color-regular)", "font-size": "var(--el-form-label-font-size)" } }, _hoisted_10 = {
key: 0,
class: "no-sl"
}, _hoisted_11 = {
key: 0,
class: "no-sl"
}, _hoisted_12 = { class: "monospace" }, _hoisted_13 = { class: "no-sl" }, _hoisted_14 = { class: "no-sl" }, _sfc_main$2 = /* @__PURE__ */ vue.defineComponent({
__name: "SettingsDialog",
setup(__props, { expose: __expose }) {
startWatchSettings();
const threadNumMarks = {
1: "1",
4: "4",
8: "8",
16: "16",
32: {
label: "32",
style: { whiteSpace: "nowrap" }
}
}, compressionLevelMarks = {
0: "0",
1: "1",
9: "9"
}, { t: t2, locale } = useI18n(), show = vue.ref(false), downloadedNum = vue.ref(NaN), filenameLengthNumber = vue.computed({
get: () => typeof writeableSettings.filenameLength == "number" ? writeableSettings.filenameLength : 0,
set: (val) => {
writeableSettings.filenameLength = val;
}
}), filenameLengthAuto = vue.computed({
get: () => writeableSettings.filenameLength === "auto",
set: (val) => {
writeableSettings.filenameLength = val ? "auto" : 0;
}
}), refreshDownloadNum = async () => {
downloadedNum.value = await getDownloadNumber();
}, open2 = () => {
show.value = true, refreshDownloadNum();
}, openHelp = () => {
_GM_openInTab(
locale.value === "zh" ? "https://github.com/Tsuk1ko/nhentai-helper/blob/master/README-ZH.md#%E8%AE%BE%E7%BD%AE" : "https://github.com/Tsuk1ko/nhentai-helper/blob/master/README.md#settings",
{ active: true, setParent: true }
);
}, exporting = vue.ref(false), importing = vue.ref(false), clearing = vue.ref(false), showMessageBySucceed = (succeed) => {
showMessage({
type: succeed ? "success" : "error",
message: succeed ? "Succeed" : "Failed, please check console for error message"
});
}, exportHistory = async () => {
exporting.value = true;
const succeed = await exportDownloadHistory();
exporting.value = false, showMessageBySucceed(succeed);
}, importHistory = async () => {
const data = await pickAndReadFile("application/zip");
if (!data) return;
importing.value = true;
const succeed = await importDownloadHistory(data);
importing.value = false, refreshDownloadNum(), showMessageBySucceed(succeed);
}, clearHistory = async () => {
clearing.value = true;
const succeed = await clearDownloadHistory();
clearing.value = false, refreshDownloadNum(), showMessageBySucceed(succeed);
}, addTitleReplacement = () => {
writeableSettings.titleReplacement.push({ from: "", to: "", regexp: false });
}, delTitleReplacement = (index) => {
writeableSettings.titleReplacement.splice(index, 1);
};
return vue.watch(
() => writeableSettings.language,
(val) => {
locale.value = val;
}
), __expose({ open: open2 }), (_ctx, _cache) => (vue.openBlock(), vue.createBlock(vue.unref(elementPlus.ElDialog), {
id: "nhentai-helper-setting-dialog-outside",
modelValue: show.value,
"onUpdate:modelValue": _cache[30] || (_cache[30] = ($event) => show.value = $event),
center: true,
top: "50px"
}, {
header: vue.withCtx(({ titleId, titleClass }) => [
vue.createElementVNode("div", _hoisted_1$2, [
vue.createVNode(vue.unref(elementPlus.ElButton), {
size: "small",
onClick: openHelp
}, {
default: vue.withCtx(() => [
vue.createTextVNode(vue.toDisplayString(vue.unref(t2)("setting.helpButton")), 1)
]),
_: 1
})
]),
vue.createElementVNode("span", {
id: titleId,
class: vue.normalizeClass([titleClass, "no-sl"])
}, vue.toDisplayString(vue.unref(t2)("setting.title")), 11, _hoisted_2$1)
]),
default: vue.withCtx(() => [
vue.createElementVNode("div", _hoisted_3$1, [
vue.createElementVNode("div", _hoisted_4$1, vue.toDisplayString(vue.unref(t2)("setting.asteriskTip")), 1),
vue.createVNode(vue.unref(elementPlus.ElForm), {
"label-width": "auto",
"label-position": "left"
}, {
default: vue.withCtx(() => [
vue.createVNode(vue.unref(elementPlus.ElFormItem), { label: "Language" }, {
default: vue.withCtx(() => [
vue.createVNode(vue.unref(elementPlus.ElSelect), {
modelValue: vue.unref(writeableSettings).language,
"onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => vue.unref(writeableSettings).language = $event)
}, {
default: vue.withCtx(() => [
vue.createVNode(vue.unref(elementPlus.ElOption), {
label: "English",
value: "en"
}),
vue.createVNode(vue.unref(elementPlus.ElOption), {
label: "中文",
value: "zh"
})
]),
_: 1
}, 8, ["modelValue"])
]),
_: 1
}),
vue.createVNode(vue.unref(elementPlus.ElFormItem), {
class: "m-b-32",
label: vue.unref(t2)("setting.downloadThread")
}, {
default: vue.withCtx(() => [
vue.createVNode(vue.unref(elementPlus.ElSlider), {
modelValue: vue.unref(writeableSettings).threadNum,
"onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => vue.unref(writeableSettings).threadNum = $event),
min: 1,
max: 32,
marks: threadNumMarks
}, null, 8, ["modelValue"])
]),
_: 1
}, 8, ["label"]),
vue.createVNode(vue.unref(elementPlus.ElFormItem), {
class: "refresh-required",
label: vue.unref(t2)("setting.openOnNewTab")
}, {
default: vue.withCtx(() => [
vue.createVNode(vue.unref(elementPlus.ElSwitch), {
modelValue: vue.unref(writeableSettings).openOnNewTab,
"onUpdate:modelValue": _cache[2] || (_cache[2] = ($event) => vue.unref(writeableSettings).openOnNewTab = $event)
}, null, 8, ["modelValue"])
]),
_: 1
}, 8, ["label"]),
vue.createVNode(vue.unref(elementPlus.ElFormItem), {
label: vue.unref(t2)("setting.compressionFilename")
}, {
default: vue.withCtx(() => [
vue.createVNode(vue.unref(elementPlus.ElInput), {
modelValue: vue.unref(writeableSettings).compressionFilename,
"onUpdate:modelValue": _cache[3] || (_cache[3] = ($event) => vue.unref(writeableSettings).compressionFilename = $event),
placeholder: vue.unref(settingDefinitions).compressionFilename.default,
onBlur: _cache[4] || (_cache[4] = ($event) => {
vue.unref(writeableSettings).compressionFilename || (vue.unref(writeableSettings).compressionFilename = vue.unref(settingDefinitions).compressionFilename.default);
})
}, null, 8, ["modelValue", "placeholder"])
]),
_: 1
}, 8, ["label"]),
vue.createVNode(vue.unref(elementPlus.ElFormItem), { label: "└ {{artist}}" }, {
default: vue.withCtx(() => [
vue.createElementVNode("div", _hoisted_5$1, [
vue.createElementVNode("span", _hoisted_6$1, vue.toDisplayString(vue.unref(t2)("setting.maxNumber")), 1),
vue.createVNode(vue.unref(elementPlus.ElInputNumber), {
modelValue: vue.unref(writeableSettings).filenameMaxArtistsNumber,
"onUpdate:modelValue": _cache[5] || (_cache[5] = ($event) => vue.unref(writeableSettings).filenameMaxArtistsNumber = $event),
size: "small",
min: 0,
"value-on-clear": vue.unref(settingDefinitions).filenameMaxArtistsNumber.default,
"step-strictly": true,
style: { width: "90px" }
}, null, 8, ["modelValue", "value-on-clear"])
]),
vue.createElementVNode("div", _hoisted_7$1, [
vue.createElementVNode("span", _hoisted_8, vue.toDisplayString(vue.unref(t2)("setting.separator")), 1),
vue.createVNode(vue.unref(elementPlus.ElInput), {
modelValue: vue.unref(writeableSettings).filenameArtistsSeparator,
"onUpdate:modelValue": _cache[6] || (_cache[6] = ($event) => vue.unref(writeableSettings).filenameArtistsSeparator = $event),
size: "small",
placeholder: vue.unref(settingDefinitions).filenameArtistsSeparator.default,
style: { width: "50px" }
}, null, 8, ["modelValue", "placeholder"])
])
]),
_: 1
}),
vue.createVNode(vue.unref(elementPlus.ElFormItem), {
class: "m-b-32",
label: vue.unref(t2)("setting.compressionLevel")
}, {
default: vue.withCtx(() => [
vue.createVNode(vue.unref(elementPlus.ElSlider), {
modelValue: vue.unref(writeableSettings).compressionLevel,
"onUpdate:modelValue": _cache[7] || (_cache[7] = ($event) => vue.unref(writeableSettings).compressionLevel = $event),
min: 0,
max: 9,
marks: compressionLevelMarks
}, null, 8, ["modelValue"])
]),
_: 1
}, 8, ["label"]),
vue.createVNode(vue.unref(elementPlus.ElFormItem), {
label: vue.unref(t2)("setting.filenameLength")
}, {
default: vue.withCtx(() => [
vue.createVNode(vue.unref(elementPlus.ElInputNumber), {
modelValue: filenameLengthNumber.value,
"onUpdate:modelValue": _cache[8] || (_cache[8] = ($event) => filenameLengthNumber.value = $event),
min: 0,
"value-on-clear": vue.unref(settingDefinitions).filenameLength.default,
"step-strictly": true,
disabled: vue.unref(writeableSettings).filenameLength === "auto"
}, null, 8, ["modelValue", "value-on-clear", "disabled"]),
vue.createVNode(vue.unref(elementPlus.ElCheckbox), {
modelValue: filenameLengthAuto.value,
"onUpdate:modelValue": _cache[9] || (_cache[9] = ($event) => filenameLengthAuto.value = $event),
class: "m-l-16",
label: vue.unref(t2)("common.auto")
}, null, 8, ["modelValue", "label"])
]),
_: 1
}, 8, ["label"]),
vue.createVNode(vue.unref(elementPlus.ElFormItem), {
label: vue.unref(t2)("setting.convertWebpTo")
}, {
default: vue.withCtx(() => [
vue.createVNode(vue.unref(elementPlus.ElRadioGroup), {
modelValue: vue.unref(writeableSettings).convertWebpTo,
"onUpdate:modelValue": _cache[10] || (_cache[10] = ($event) => vue.unref(writeableSettings).convertWebpTo = $event)
}, {
default: vue.withCtx(() => [
vue.createVNode(vue.unref(elementPlus.ElRadio), { value: "" }, {
default: vue.withCtx(() => [
vue.createTextVNode(vue.toDisplayString(vue.unref(t2)("common.disabled")), 1)
]),
_: 1
}),
vue.createVNode(vue.unref(elementPlus.ElRadio), {
value: vue.unref(MIME).JPG
}, {
default: vue.withCtx(() => _cache[31] || (_cache[31] = [
vue.createTextVNode("jpg")
])),
_: 1
}, 8, ["value"]),
vue.createVNode(vue.unref(elementPlus.ElRadio), {
value: vue.unref(MIME).PNG
}, {
default: vue.withCtx(() => _cache[32] || (_cache[32] = [
vue.createTextVNode("png")
])),
_: 1
}, 8, ["value"])
]),
_: 1
}, 8, ["modelValue"])
]),
_: 1
}, 8, ["label"]),
vue.unref(writeableSettings).convertWebpTo === vue.unref(MIME).JPG ? (vue.openBlock(), vue.createBlock(vue.unref(elementPlus.ElFormItem), {
key: 0,
label: `└ ${vue.unref(t2)("setting.convertWebpQuality")} (0~100)`
}, {
default: vue.withCtx(() => [
vue.createVNode(vue.unref(elementPlus.ElInputNumber), {
modelValue: vue.unref(writeableSettings).convertWebpQuality,
"onUpdate:modelValue": _cache[11] || (_cache[11] = ($event) => vue.unref(writeableSettings).convertWebpQuality = $event),
size: "small",
min: 0,
max: 100,
"value-on-clear": vue.unref(settingDefinitions).convertWebpQuality.default,
"step-strictly": true
}, null, 8, ["modelValue", "value-on-clear"])
]),
_: 1
}, 8, ["label"])) : vue.createCommentVNode("", true),
vue.createVNode(vue.unref(elementPlus.ElFormItem), {
label: vue.unref(t2)("setting.removeAdPage")
}, {
default: vue.withCtx(() => [
vue.createVNode(vue.unref(elementPlus.ElSwitch), {
modelValue: vue.unref(writeableSettings).removeAdPage,
"onUpdate:modelValue": _cache[12] || (_cache[12] = ($event) => vue.unref(writeableSettings).removeAdPage = $event)
}, null, 8, ["modelValue"])
]),
_: 1
}, 8, ["label"]),
vue.createVNode(vue.unref(elementPlus.ElFormItem), {
label: vue.unref(t2)("setting.autoCancelDownloadedManga")
}, {
default: vue.withCtx(() => [
vue.createVNode(vue.unref(elementPlus.ElSwitch), {
modelValue: vue.unref(writeableSettings).autoCancelDownloadedManga,
"onUpdate:modelValue": _cache[13] || (_cache[13] = ($event) => vue.unref(writeableSettings).autoCancelDownloadedManga = $event)
}, null, 8, ["modelValue"])
]),
_: 1
}, 8, ["label"]),
vue.createVNode(vue.unref(elementPlus.ElFormItem), {
label: vue.unref(t2)("setting.autoRetryWhenErrorOccurs")
}, {
default: vue.withCtx(() => [
vue.createVNode(vue.unref(elementPlus.ElSwitch), {
modelValue: vue.unref(writeableSettings).autoRetryWhenErrorOccurs,
"onUpdate:modelValue": _cache[14] || (_cache[14] = ($event) => vue.unref(writeableSettings).autoRetryWhenErrorOccurs = $event)
}, null, 8, ["modelValue"])
]),
_: 1
}, 8, ["label"]),
vue.createVNode(vue.unref(elementPlus.ElFormItem), {
label: vue.unref(t2)("setting.autoShowAll")
}, {
default: vue.withCtx(() => [
vue.createVNode(vue.unref(elementPlus.ElSwitch), {
modelValue: vue.unref(writeableSettings).autoShowAll,
"onUpdate:modelValue": _cache[15] || (_cache[15] = ($event) => vue.unref(writeableSettings).autoShowAll = $event)
}, null, 8, ["modelValue"])
]),
_: 1
}, 8, ["label"]),
vue.createVNode(vue.unref(elementPlus.ElFormItem), {
class: "refresh-required",
label: vue.unref(t2)("setting.showIgnoreButton")
}, {
default: vue.withCtx(() => [
vue.createVNode(vue.unref(elementPlus.ElSwitch), {
modelValue: vue.unref(writeableSettings).showIgnoreButton,
"onUpdate:modelValue": _cache[16] || (_cache[16] = ($event) => vue.unref(writeableSettings).showIgnoreButton = $event)
}, null, 8, ["modelValue"])
]),
_: 1
}, 8, ["label"]),
vue.createVNode(vue.unref(elementPlus.ElFormItem), {
label: vue.unref(t2)("setting.galleryContextmenuPreview")
}, {
default: vue.withCtx(() => [
vue.createVNode(vue.unref(elementPlus.ElSwitch), {
modelValue: vue.unref(writeableSettings).galleryContextmenuPreview,
"onUpdate:modelValue": _cache[17] || (_cache[17] = ($event) => vue.unref(writeableSettings).galleryContextmenuPreview = $event)
}, null, 8, ["modelValue"])
]),
_: 1
}, 8, ["label"]),
vue.createVNode(vue.unref(elementPlus.ElFormItem), {
label: vue.unref(t2)("setting.judgeDownloadedMangaByTitle")
}, {
default: vue.withCtx(() => [
vue.createVNode(vue.unref(elementPlus.ElCheckbox), {
modelValue: vue.unref(writeableSettings).judgeDownloadedByEnglish,
"onUpdate:modelValue": _cache[18] || (_cache[18] = ($event) => vue.unref(writeableSettings).judgeDownloadedByEnglish = $event),
label: vue.unref(t2)("common.english")
}, null, 8, ["modelValue", "label"]),
vue.createVNode(vue.unref(elementPlus.ElCheckbox), {
modelValue: vue.unref(writeableSettings).judgeDownloadedByJapanese,
"onUpdate:modelValue": _cache[19] || (_cache[19] = ($event) => vue.unref(writeableSettings).judgeDownloadedByJapanese = $event),
label: vue.unref(t2)("common.japanese")
}, null, 8, ["modelValue", "label"]),
vue.createVNode(vue.unref(elementPlus.ElCheckbox), {
modelValue: vue.unref(writeableSettings).judgeDownloadedByPretty,
"onUpdate:modelValue": _cache[20] || (_cache[20] = ($event) => vue.unref(writeableSettings).judgeDownloadedByPretty = $event),
label: vue.unref(t2)("common.pretty")
}, null, 8, ["modelValue", "label"])
]),
_: 1
}, 8, ["label"]),
vue.createVNode(vue.unref(elementPlus.ElFormItem), {
label: vue.unref(t2)("setting.addMetaFile")
}, {
default: vue.withCtx(() => [
vue.createVNode(vue.unref(elementPlus.ElCheckboxGroup), {
modelValue: vue.unref(writeableSettings).addMetaFile,
"onUpdate:modelValue": _cache[21] || (_cache[21] = ($event) => vue.unref(writeableSettings).addMetaFile = $event)
}, {
default: vue.withCtx(() => [
vue.createVNode(vue.unref(elementPlus.ElCheckbox), {
label: "ComicInfo.xml",
value: "ComicInfoXml"
}),
vue.createVNode(vue.unref(elementPlus.ElCheckbox), {
label: "info.json (eze)",
value: "EzeInfoJson"
})
]),
_: 1
}, 8, ["modelValue"])
]),
_: 1
}, 8, ["label"]),
vue.unref(writeableSettings).addMetaFile.includes("ComicInfoXml") ? (vue.openBlock(), vue.createBlock(vue.unref(elementPlus.ElFormItem), {
key: 1,
label: `└ ${vue.unref(t2)("setting.metaFileTitleLanguage")}`
}, {
default: vue.withCtx(() => [
vue.createVNode(vue.unref(elementPlus.ElSelect), {
modelValue: vue.unref(writeableSettings).metaFileTitleLanguage,
"onUpdate:modelValue": _cache[22] || (_cache[22] = ($event) => vue.unref(writeableSettings).metaFileTitleLanguage = $event)
}, {
default: vue.withCtx(() => [
vue.createVNode(vue.unref(elementPlus.ElOption), {
label: vue.unref(t2)("common.english"),
value: "english"
}, null, 8, ["label"]),
vue.createVNode(vue.unref(elementPlus.ElOption), {
label: vue.unref(t2)("common.japanese"),
value: "japanese"
}, null, 8, ["label"])
]),
_: 1
}, 8, ["modelValue"])
]),
_: 1
}, 8, ["label"])) : vue.createCommentVNode("", true),
vue.createVNode(vue.unref(elementPlus.ElDivider), null, {
default: vue.withCtx(() => [
vue.createTextVNode(vue.toDisplayString(vue.unref(t2)("setting.advanceTitle")), 1)
]),
_: 1
}),
vue.unref(IS_NHENTAI) ? (vue.openBlock(), vue.createBlock(vue.unref(elementPlus.ElFormItem), {
key: 2,
label: vue.unref(t2)("setting.nHentaiDownloadHost")
}, {
default: vue.withCtx(() => [
vue.createVNode(vue.unref(elementPlus.ElSelect), {
modelValue: vue.unref(writeableSettings).nHentaiDownloadHost,
"onUpdate:modelValue": _cache[23] || (_cache[23] = ($event) => vue.unref(writeableSettings).nHentaiDownloadHost = $event),
disabled: !!vue.unref(writeableSettings).customDownloadUrl
}, {
default: vue.withCtx(() => [
(vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(vue.unref(nHentaiDownloadHostSpecials), (value) => (vue.openBlock(), vue.createBlock(vue.unref(elementPlus.ElOption), {
key: value,
label: vue.unref(t2)(`setting.nHentaiDownloadHostOption.${value}`),
value
}, null, 8, ["label", "value"]))), 128)),
(vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(vue.unref(nHentaiDownloadHosts), (host) => (vue.openBlock(), vue.createBlock(vue.unref(elementPlus.ElOption), {
key: host,
label: host,
value: host
}, null, 8, ["label", "value"]))), 128))
]),
_: 1
}, 8, ["modelValue", "disabled"])
]),
_: 1
}, 8, ["label"])) : vue.createCommentVNode("", true),
vue.createVNode(vue.unref(elementPlus.ElFormItem), {
label: vue.unref(t2)("setting.customDownloadUrl")
}, {
default: vue.withCtx(() => [
vue.createVNode(vue.unref(elementPlus.ElInput), {
modelValue: vue.unref(writeableSettings).customDownloadUrl,
"onUpdate:modelValue": _cache[24] || (_cache[24] = ($event) => vue.unref(writeableSettings).customDownloadUrl = $event)
}, null, 8, ["modelValue"])
]),
_: 1
}, 8, ["label"]),
vue.createVNode(vue.unref(elementPlus.ElFormItem), {
label: vue.unref(t2)("setting.compressionStreamFiles")
}, {
default: vue.withCtx(() => [
vue.createVNode(vue.unref(elementPlus.ElSwitch), {
modelValue: vue.unref(writeableSettings).compressionStreamFiles,
"onUpdate:modelValue": _cache[25] || (_cache[25] = ($event) => vue.unref(writeableSettings).compressionStreamFiles = $event)
}, null, 8, ["modelValue"])
]),
_: 1
}, 8, ["label"]),
vue.createVNode(vue.unref(elementPlus.ElFormItem), {
label: vue.unref(t2)("setting.seriesMode")
}, {
default: vue.withCtx(() => [
vue.createVNode(vue.unref(elementPlus.ElSwitch), {
modelValue: vue.unref(writeableSettings).seriesMode,
"onUpdate:modelValue": _cache[26] || (_cache[26] = ($event) => vue.unref(writeableSettings).seriesMode = $event)
}, null, 8, ["modelValue"])
]),
_: 1
}, 8, ["label"]),
vue.createVNode(vue.unref(elementPlus.ElFormItem), {
label: vue.unref(t2)("setting.streamDownload")
}, {
default: vue.withCtx(() => [
vue.createVNode(vue.unref(elementPlus.ElSwitch), {
modelValue: vue.unref(writeableSettings).streamDownload,
"onUpdate:modelValue": _cache[27] || (_cache[27] = ($event) => vue.unref(writeableSettings).streamDownload = $event),
disabled: vue.unref(DISABLE_STREAM_DOWNLOAD)
}, null, 8, ["modelValue", "disabled"])
]),
_: 1
}, 8, ["label"]),
vue.unref(IS_NHENTAI) ? (vue.openBlock(), vue.createBlock(vue.unref(elementPlus.ElFormItem), {
key: 3,
class: "refresh-required",
label: vue.unref(t2)("setting.preventConsoleClearing")
}, {
default: vue.withCtx(() => [
vue.createVNode(vue.unref(elementPlus.ElSwitch), {
modelValue: vue.unref(writeableSettings).preventConsoleClearing,
"onUpdate:modelValue": _cache[28] || (_cache[28] = ($event) => vue.unref(writeableSettings).preventConsoleClearing = $event)
}, null, 8, ["modelValue"])
]),
_: 1
}, 8, ["label"])) : vue.createCommentVNode("", true),
vue.createVNode(vue.unref(elementPlus.ElCollapse), null, {
default: vue.withCtx(() => [
vue.createVNode(vue.unref(elementPlus.ElCollapseItem), null, {
title: vue.withCtx(() => [
vue.createElementVNode("span", _hoisted_9, vue.toDisplayString(vue.unref(t2)("setting.titleReplacement")), 1)
]),
default: vue.withCtx(() => [
vue.createVNode(vue.unref(elementPlus.ElTable), {
id: "title-replacement-table",
data: vue.unref(writeableSettings).titleReplacement
}, {
append: vue.withCtx(() => [
vue.createVNode(vue.unref(elementPlus.ElButton), {
text: "",
style: { width: "100%" },
onClick: addTitleReplacement
}, {
default: vue.withCtx(() => _cache[33] || (_cache[33] = [
vue.createTextVNode("+")
])),
_: 1
})
]),
default: vue.withCtx(() => [
vue.createVNode(vue.unref(elementPlus.ElTableColumn), { label: "From" }, {
default: vue.withCtx((scope) => [
vue.createVNode(vue.unref(elementPlus.ElInput), {
modelValue: scope.row.from,
"onUpdate:modelValue": ($event) => scope.row.from = $event
}, {
prefix: vue.withCtx(() => [
scope.row.regexp ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_10, "/")) : vue.createCommentVNode("", true)
]),
suffix: vue.withCtx(() => [
scope.row.regexp ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_11, "/")) : vue.createCommentVNode("", true)
]),
_: 2
}, 1032, ["modelValue", "onUpdate:modelValue"])
]),
_: 1
}),
vue.createVNode(vue.unref(elementPlus.ElTableColumn), { label: "To" }, {
default: vue.withCtx((scope) => [
vue.createVNode(vue.unref(elementPlus.ElInput), {
modelValue: scope.row.to,
"onUpdate:modelValue": ($event) => scope.row.to = $event
}, null, 8, ["modelValue", "onUpdate:modelValue"])
]),
_: 1
}),
vue.createVNode(vue.unref(elementPlus.ElTableColumn), {
label: "RegExp",
width: "80"
}, {
default: vue.withCtx((scope) => [
vue.createVNode(vue.unref(elementPlus.ElSwitch), {
modelValue: scope.row.regexp,
"onUpdate:modelValue": ($event) => scope.row.regexp = $event
}, null, 8, ["modelValue", "onUpdate:modelValue"])
]),
_: 1
}),
vue.createVNode(vue.unref(elementPlus.ElTableColumn), { width: "70" }, {
default: vue.withCtx((scope) => [
vue.createVNode(_sfc_main$3, {
onConfirm: () => delTitleReplacement(scope.$index)
}, {
default: vue.withCtx(() => [
vue.createVNode(vue.unref(elementPlus.ElButton), {
type: "danger",
icon: vue.unref(delete_default)
}, null, 8, ["icon"])
]),
_: 2
}, 1032, ["onConfirm"])
]),
_: 1
})
]),
_: 1
}, 8, ["data"])
]),
_: 1
})
]),
_: 1
}),
vue.createVNode(vue.unref(elementPlus.ElFormItem), {
label: vue.unref(t2)("setting.customFilenameFunction")
}, {
default: vue.withCtx(() => [
vue.createElementVNode("span", _hoisted_12, [
_cache[37] || (_cache[37] = vue.createTextVNode("function (filename")),
vue.createVNode(vue.unref(elementPlus.ElText), { type: "info" }, {
default: vue.withCtx(() => _cache[34] || (_cache[34] = [
vue.createTextVNode(": string")
])),
_: 1
}),
_cache[38] || (_cache[38] = vue.createTextVNode(", gallery")),
vue.createVNode(vue.unref(elementPlus.ElText), { type: "info" }, {
default: vue.withCtx(() => [
_cache[36] || (_cache[36] = vue.createTextVNode(": ")),
vue.createVNode(vue.unref(elementPlus.ElLink), {
type: "primary",
href: "https://github.com/Tsuk1ko/nhentai-helper/blob/df00acb0d5ad8244d408561410b3c647d5af7ed4/src/utils/nhentai.ts#L57-L75",
target: "_blank"
}, {
default: vue.withCtx(() => _cache[35] || (_cache[35] = [
vue.createTextVNode("NHentaiGallery")
])),
_: 1
})
]),
_: 1
}),
_cache[39] || (_cache[39] = vue.createTextVNode(") {"))
]),
vue.createVNode(vue.unref(elementPlus.ElInput), {
modelValue: vue.unref(writeableSettings).customFilenameFunction,
"onUpdate:modelValue": _cache[29] || (_cache[29] = ($event) => vue.unref(writeableSettings).customFilenameFunction = $event),
class: "monospace",
type: "textarea",
placeholder: "return filename;",
autosize: { minRows: 1 }
}, null, 8, ["modelValue"]),
_cache[40] || (_cache[40] = vue.createElementVNode("span", { class: "monospace" }, "}", -1))
]),
_: 1
}, 8, ["label"])
]),
_: 1
}),
vue.createVNode(vue.unref(elementPlus.ElDivider), null, {
default: vue.withCtx(() => [
vue.createTextVNode(vue.toDisplayString(vue.unref(t2)("setting.history.title")), 1)
]),
_: 1
}),
vue.createElementVNode("p", _hoisted_13, vue.toDisplayString(vue.unref(t2)("setting.history.downloadedNumberTip", {
num: Number.isNaN(downloadedNum.value) ? downloadedNum.value : vue.unref(numberFormatter).format(downloadedNum.value)
})), 1),
vue.createVNode(vue.unref(elementPlus.ElButton), {
type: "primary",
icon: vue.unref(download_default),
disabled: !downloadedNum.value,
loading: exporting.value,
onClick: exportHistory
}, {
default: vue.withCtx(() => [
vue.createTextVNode(vue.toDisplayString(vue.unref(t2)("setting.history.export")), 1)
]),
_: 1
}, 8, ["icon", "disabled", "loading"]),
vue.createVNode(vue.unref(elementPlus.ElButton), {
type: "primary",
icon: vue.unref(upload_default),
loading: importing.value,
onClick: importHistory
}, {
default: vue.withCtx(() => [
vue.createTextVNode(vue.toDisplayString(vue.unref(t2)("setting.history.import")), 1)
]),
_: 1
}, 8, ["icon", "loading"]),
vue.createVNode(_sfc_main$3, { onConfirm: clearHistory }, {
default: vue.withCtx(() => [
vue.createVNode(vue.unref(elementPlus.ElButton), {
type: "danger",
icon: vue.unref(delete_default),
loading: clearing.value
}, {
default: vue.withCtx(() => [
vue.createTextVNode(vue.toDisplayString(vue.unref(t2)("setting.history.clear")), 1)
]),
_: 1
}, 8, ["icon", "loading"])
]),
_: 1
}),
vue.createElementVNode("p", _hoisted_14, vue.toDisplayString(vue.unref(t2)("setting.history.importTip")), 1)
])
]),
_: 1
}, 8, ["modelValue"]));
}
}), SettingsDialog = /* @__PURE__ */ _export_sfc(_sfc_main$2, [["__scopeId", "data-v-b1ccce6d"]]), compileTemplate = (tpl) => template(tpl, { interpolate: /{{([\s\S]+?)}}/g }), getDownloadExt = () => {
const ext = last(settings.compressionFilename.split("."));
return ext ? ext.toLowerCase() : "zip";
}, getCompressionOptions = () => ({
removeAdPage: settings.removeAdPage,
streamFiles: settings.compressionStreamFiles,
compression: settings.compressionLevel > 0 ? "DEFLATE" : "STORE",
compressionOptions: { level: settings.compressionLevel }
}), getShowAllBtn = () => new Promise((resolve, reject) => {
const $btn = $(selector.showAllImagesButton);
if ($btn.length > 0) {
resolve($btn);
return;
}
const container = document.querySelector(selector.thumbnailContainer);
if (!container) {
reject(new Error("Show all button not found"));
return;
}
new MutationObserver((mutations, self2) => {
mutations.forEach(({ addedNodes }) => {
const btnContainer = addedNodes[0];
(btnContainer == null ? void 0 : btnContainer.id) === "show-all-images-container" && (self2.disconnect(), resolve($(selector.showAllImagesButton)));
});
}).observe(container, { childList: true });
}), createMangaDownloadInfo = (gallery2, needReactive = false) => {
const info = {
gallery: gallery2,
done: 0,
compressing: false,
compressingPercent: "0",
error: false
};
return needReactive ? (vue.markRaw(info.gallery), vue.reactive(info)) : info;
}, tryParseJSON = (str) => {
if (typeof str == "string")
try {
return JSON.parse(str);
} catch {
}
};
var noty$1 = { exports: {} };
var noty = noty$1.exports, hasRequiredNoty;
function requireNoty() {
return hasRequiredNoty || (hasRequiredNoty = 1, function(module2, exports2) {
(function(root2, factory) {
module2.exports = factory();
})(noty, function() {
return (
/******/
function(modules) {
var installedModules = {};
function __webpack_require__(moduleId) {
if (installedModules[moduleId])
return installedModules[moduleId].exports;
var module22 = installedModules[moduleId] = {
/******/
i: moduleId,
/******/
l: false,
/******/
exports: {}
/******/
};
return modules[moduleId].call(module22.exports, module22, module22.exports, __webpack_require__), module22.l = true, module22.exports;
}
return __webpack_require__.m = modules, __webpack_require__.c = installedModules, __webpack_require__.i = function(value) {
return value;
}, __webpack_require__.d = function(exports22, name, getter) {
__webpack_require__.o(exports22, name) || Object.defineProperty(exports22, name, {
/******/
configurable: false,
/******/
enumerable: true,
/******/
get: getter
/******/
});
}, __webpack_require__.n = function(module22) {
var getter = module22 && module22.__esModule ? (
/******/
function() {
return module22.default;
}
) : (
/******/
function() {
return module22;
}
);
return __webpack_require__.d(getter, "a", getter), getter;
}, __webpack_require__.o = function(object, property2) {
return Object.prototype.hasOwnProperty.call(object, property2);
}, __webpack_require__.p = "", __webpack_require__(__webpack_require__.s = 6);
}([
/* 0 */
/***/
function(module22, exports22, __webpack_require__) {
Object.defineProperty(exports22, "__esModule", {
value: true
}), exports22.css = exports22.deepExtend = exports22.animationEndEvents = void 0;
var _typeof = typeof Symbol == "function" && typeof Symbol.iterator == "symbol" ? function(obj) {
return typeof obj;
} : function(obj) {
return obj && typeof Symbol == "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
};
exports22.inArray = inArray, exports22.stopPropagation = stopPropagation, exports22.generateID = generateID, exports22.outerHeight = outerHeight, exports22.addListener = addListener, exports22.hasClass = hasClass, exports22.addClass = addClass, exports22.removeClass = removeClass, exports22.remove = remove, exports22.classList = classList, exports22.visibilityChangeFlow = visibilityChangeFlow, exports22.createAudioElements = createAudioElements;
var _api = __webpack_require__(1), API = _interopRequireWildcard(_api);
function _interopRequireWildcard(obj) {
if (obj && obj.__esModule)
return obj;
var newObj = {};
if (obj != null)
for (var key in obj)
Object.prototype.hasOwnProperty.call(obj, key) && (newObj[key] = obj[key]);
return newObj.default = obj, newObj;
}
exports22.animationEndEvents = "webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend animationend";
function inArray(needle, haystack, argStrict) {
var key = void 0, strict = !!argStrict;
if (strict) {
for (key in haystack)
if (haystack.hasOwnProperty(key) && haystack[key] === needle)
return true;
} else
for (key in haystack)
if (haystack.hasOwnProperty(key) && haystack[key] === needle)
return true;
return false;
}
function stopPropagation(evt) {
evt = evt || window.event, typeof evt.stopPropagation < "u" ? evt.stopPropagation() : evt.cancelBubble = true;
}
exports22.deepExtend = function deepExtend2(out) {
out = out || {};
for (var i = 1; i < arguments.length; i++) {
var obj = arguments[i];
if (obj)
for (var key in obj)
obj.hasOwnProperty(key) && (Array.isArray(obj[key]) ? out[key] = obj[key] : _typeof(obj[key]) === "object" && obj[key] !== null ? out[key] = deepExtend2(out[key], obj[key]) : out[key] = obj[key]);
}
return out;
};
function generateID() {
var prefix = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : "", id = "noty_" + prefix + "_";
return id += "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function(c) {
var r = Math.random() * 16 | 0, v = c === "x" ? r : r & 3 | 8;
return v.toString(16);
}), id;
}
function outerHeight(el) {
var height = el.offsetHeight, style = window.getComputedStyle(el);
return height += parseInt(style.marginTop) + parseInt(style.marginBottom), height;
}
exports22.css = /* @__PURE__ */ function() {
var cssPrefixes = ["Webkit", "O", "Moz", "ms"], cssProps = {};
function camelCase(string) {
return string.replace(/^-ms-/, "ms-").replace(/-([\da-z])/gi, function(match2, letter) {
return letter.toUpperCase();
});
}
function getVendorProp(name) {
var style = document.body.style;
if (name in style) return name;
for (var i = cssPrefixes.length, capName = name.charAt(0).toUpperCase() + name.slice(1), vendorName = void 0; i--; )
if (vendorName = cssPrefixes[i] + capName, vendorName in style) return vendorName;
return name;
}
function getStyleProp(name) {
return name = camelCase(name), cssProps[name] || (cssProps[name] = getVendorProp(name));
}
function applyCss(element, prop, value) {
prop = getStyleProp(prop), element.style[prop] = value;
}
return function(element, properties) {
var args = arguments, prop = void 0, value = void 0;
if (args.length === 2)
for (prop in properties)
properties.hasOwnProperty(prop) && (value = properties[prop], value !== void 0 && properties.hasOwnProperty(prop) && applyCss(element, prop, value));
else
applyCss(element, args[1], args[2]);
};
}();
function addListener(el, events, cb) {
var useCapture = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : false;
events = events.split(" ");
for (var i = 0; i < events.length; i++)
document.addEventListener ? el.addEventListener(events[i], cb, useCapture) : document.attachEvent && el.attachEvent("on" + events[i], cb);
}
function hasClass(element, name) {
var list = typeof element == "string" ? element : classList(element);
return list.indexOf(" " + name + " ") >= 0;
}
function addClass(element, name) {
var oldList = classList(element), newList = oldList + name;
hasClass(oldList, name) || (element.className = newList.substring(1));
}
function removeClass(element, name) {
var oldList = classList(element), newList = void 0;
hasClass(element, name) && (newList = oldList.replace(" " + name + " ", " "), element.className = newList.substring(1, newList.length - 1));
}
function remove(element) {
element.parentNode && element.parentNode.removeChild(element);
}
function classList(element) {
return (" " + (element && element.className || "") + " ").replace(/\s+/gi, " ");
}
function visibilityChangeFlow() {
var hidden = void 0, visibilityChange = void 0;
typeof document.hidden < "u" ? (hidden = "hidden", visibilityChange = "visibilitychange") : typeof document.msHidden < "u" ? (hidden = "msHidden", visibilityChange = "msvisibilitychange") : typeof document.webkitHidden < "u" && (hidden = "webkitHidden", visibilityChange = "webkitvisibilitychange");
function onVisibilityChange() {
API.PageHidden = document[hidden], handleVisibilityChange();
}
function onBlur() {
API.PageHidden = true, handleVisibilityChange();
}
function onFocus() {
API.PageHidden = false, handleVisibilityChange();
}
function handleVisibilityChange() {
API.PageHidden ? stopAll() : resumeAll();
}
function stopAll() {
setTimeout(function() {
Object.keys(API.Store).forEach(function(id) {
API.Store.hasOwnProperty(id) && API.Store[id].options.visibilityControl && API.Store[id].stop();
});
}, 100);
}
function resumeAll() {
setTimeout(function() {
Object.keys(API.Store).forEach(function(id) {
API.Store.hasOwnProperty(id) && API.Store[id].options.visibilityControl && API.Store[id].resume();
}), API.queueRenderAll();
}, 100);
}
visibilityChange && addListener(document, visibilityChange, onVisibilityChange), addListener(window, "blur", onBlur), addListener(window, "focus", onFocus);
}
function createAudioElements(ref2) {
if (ref2.hasSound) {
var audioElement = document.createElement("audio");
ref2.options.sounds.sources.forEach(function(s) {
var source = document.createElement("source");
source.src = s, source.type = "audio/" + getExtension(s), audioElement.appendChild(source);
}), ref2.barDom ? ref2.barDom.appendChild(audioElement) : document.querySelector("body").appendChild(audioElement), audioElement.volume = ref2.options.sounds.volume, ref2.soundPlayed || (audioElement.play(), ref2.soundPlayed = true), audioElement.onended = function() {
remove(audioElement);
};
}
}
function getExtension(fileName) {
return fileName.match(/\.([^.]+)$/)[1];
}
},
/* 1 */
/***/
function(module22, exports22, __webpack_require__) {
Object.defineProperty(exports22, "__esModule", {
value: true
}), exports22.Defaults = exports22.Store = exports22.Queues = exports22.DefaultMaxVisible = exports22.docTitle = exports22.DocModalCount = exports22.PageHidden = void 0, exports22.getQueueCounts = getQueueCounts, exports22.addToQueue = addToQueue, exports22.removeFromQueue = removeFromQueue, exports22.queueRender = queueRender, exports22.queueRenderAll = queueRenderAll, exports22.ghostFix = ghostFix, exports22.build = build, exports22.hasButtons = hasButtons, exports22.handleModal = handleModal, exports22.handleModalClose = handleModalClose, exports22.queueClose = queueClose, exports22.dequeueClose = dequeueClose, exports22.fire = fire, exports22.openFlow = openFlow, exports22.closeFlow = closeFlow;
var _utils = __webpack_require__(0), Utils = _interopRequireWildcard(_utils);
function _interopRequireWildcard(obj) {
if (obj && obj.__esModule)
return obj;
var newObj = {};
if (obj != null)
for (var key in obj)
Object.prototype.hasOwnProperty.call(obj, key) && (newObj[key] = obj[key]);
return newObj.default = obj, newObj;
}
exports22.PageHidden = false;
var DocModalCount = exports22.DocModalCount = 0, DocTitleProps = {
originalTitle: null,
count: 0,
changed: false
}, docTitle = exports22.docTitle = {
increment: function() {
DocTitleProps.count++, docTitle._update();
},
decrement: function() {
if (DocTitleProps.count--, DocTitleProps.count <= 0) {
docTitle._clear();
return;
}
docTitle._update();
},
_update: function() {
var title = document.title;
DocTitleProps.changed ? document.title = "(" + DocTitleProps.count + ") " + DocTitleProps.originalTitle : (DocTitleProps.originalTitle = title, document.title = "(" + DocTitleProps.count + ") " + title, DocTitleProps.changed = true);
},
_clear: function() {
DocTitleProps.changed && (DocTitleProps.count = 0, document.title = DocTitleProps.originalTitle, DocTitleProps.changed = false);
}
}, DefaultMaxVisible = exports22.DefaultMaxVisible = 5, Queues = exports22.Queues = {
global: {
maxVisible: DefaultMaxVisible,
queue: []
}
}, Store = exports22.Store = {};
exports22.Defaults = {
type: "alert",
layout: "topRight",
theme: "mint",
text: "",
timeout: false,
progressBar: true,
closeWith: ["click"],
animation: {
open: "noty_effects_open",
close: "noty_effects_close"
},
id: false,
force: false,
killer: false,
queue: "global",
container: false,
buttons: [],
callbacks: {
beforeShow: null,
onShow: null,
afterShow: null,
onClose: null,
afterClose: null,
onClick: null,
onHover: null,
onTemplate: null
},
sounds: {
sources: [],
volume: 1,
conditions: []
},
titleCount: {
conditions: []
},
modal: false,
visibilityControl: false
/**
* @param {string} queueName
* @return {object}
*/
};
function getQueueCounts() {
var queueName = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : "global", count = 0, max = DefaultMaxVisible;
return Queues.hasOwnProperty(queueName) && (max = Queues[queueName].maxVisible, Object.keys(Store).forEach(function(i) {
Store[i].options.queue === queueName && !Store[i].closed && count++;
})), {
current: count,
maxVisible: max
};
}
function addToQueue(ref2) {
Queues.hasOwnProperty(ref2.options.queue) || (Queues[ref2.options.queue] = { maxVisible: DefaultMaxVisible, queue: [] }), Queues[ref2.options.queue].queue.push(ref2);
}
function removeFromQueue(ref2) {
if (Queues.hasOwnProperty(ref2.options.queue)) {
var queue = [];
Object.keys(Queues[ref2.options.queue].queue).forEach(function(i) {
Queues[ref2.options.queue].queue[i].id !== ref2.id && queue.push(Queues[ref2.options.queue].queue[i]);
}), Queues[ref2.options.queue].queue = queue;
}
}
function queueRender() {
var queueName = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : "global";
if (Queues.hasOwnProperty(queueName)) {
var noty2 = Queues[queueName].queue.shift();
noty2 && noty2.show();
}
}
function queueRenderAll() {
Object.keys(Queues).forEach(function(queueName) {
queueRender(queueName);
});
}
function ghostFix(ref2) {
var ghostID = Utils.generateID("ghost"), ghost = document.createElement("div");
ghost.setAttribute("id", ghostID), Utils.css(ghost, {
height: Utils.outerHeight(ref2.barDom) + "px"
}), ref2.barDom.insertAdjacentHTML("afterend", ghost.outerHTML), Utils.remove(ref2.barDom), ghost = document.getElementById(ghostID), Utils.addClass(ghost, "noty_fix_effects_height"), Utils.addListener(ghost, Utils.animationEndEvents, function() {
Utils.remove(ghost);
});
}
function build(ref2) {
findOrCreateContainer(ref2);
var markup = '<div class="noty_body">' + ref2.options.text + "</div>" + buildButtons(ref2) + '<div class="noty_progressbar"></div>';
ref2.barDom = document.createElement("div"), ref2.barDom.setAttribute("id", ref2.id), Utils.addClass(ref2.barDom, "noty_bar noty_type__" + ref2.options.type + " noty_theme__" + ref2.options.theme), ref2.barDom.innerHTML = markup, fire(ref2, "onTemplate");
}
function hasButtons(ref2) {
return !!(ref2.options.buttons && Object.keys(ref2.options.buttons).length);
}
function buildButtons(ref2) {
if (hasButtons(ref2)) {
var buttons = document.createElement("div");
return Utils.addClass(buttons, "noty_buttons"), Object.keys(ref2.options.buttons).forEach(function(key) {
buttons.appendChild(ref2.options.buttons[key].dom);
}), ref2.options.buttons.forEach(function(btn) {
buttons.appendChild(btn.dom);
}), buttons.outerHTML;
}
return "";
}
function handleModal(ref2) {
ref2.options.modal && (DocModalCount === 0 && createModal(), exports22.DocModalCount = DocModalCount += 1);
}
function handleModalClose(ref2) {
if (ref2.options.modal && DocModalCount > 0 && (exports22.DocModalCount = DocModalCount -= 1, DocModalCount <= 0)) {
var modal = document.querySelector(".noty_modal");
modal && (Utils.removeClass(modal, "noty_modal_open"), Utils.addClass(modal, "noty_modal_close"), Utils.addListener(modal, Utils.animationEndEvents, function() {
Utils.remove(modal);
}));
}
}
function createModal() {
var body = document.querySelector("body"), modal = document.createElement("div");
Utils.addClass(modal, "noty_modal"), body.insertBefore(modal, body.firstChild), Utils.addClass(modal, "noty_modal_open"), Utils.addListener(modal, Utils.animationEndEvents, function() {
Utils.removeClass(modal, "noty_modal_open");
});
}
function findOrCreateContainer(ref2) {
if (ref2.options.container) {
ref2.layoutDom = document.querySelector(ref2.options.container);
return;
}
var layoutID = "noty_layout__" + ref2.options.layout;
ref2.layoutDom = document.querySelector("div#" + layoutID), ref2.layoutDom || (ref2.layoutDom = document.createElement("div"), ref2.layoutDom.setAttribute("id", layoutID), ref2.layoutDom.setAttribute("role", "alert"), ref2.layoutDom.setAttribute("aria-live", "polite"), Utils.addClass(ref2.layoutDom, "noty_layout"), document.querySelector("body").appendChild(ref2.layoutDom));
}
function queueClose(ref2) {
ref2.options.timeout && (ref2.options.progressBar && ref2.progressDom && Utils.css(ref2.progressDom, {
transition: "width " + ref2.options.timeout + "ms linear",
width: "0%"
}), clearTimeout(ref2.closeTimer), ref2.closeTimer = setTimeout(function() {
ref2.close();
}, ref2.options.timeout));
}
function dequeueClose(ref2) {
ref2.options.timeout && ref2.closeTimer && (clearTimeout(ref2.closeTimer), ref2.closeTimer = -1, ref2.options.progressBar && ref2.progressDom && Utils.css(ref2.progressDom, {
transition: "width 0ms linear",
width: "100%"
}));
}
function fire(ref2, eventName) {
ref2.listeners.hasOwnProperty(eventName) && ref2.listeners[eventName].forEach(function(cb) {
typeof cb == "function" && cb.apply(ref2);
});
}
function openFlow(ref2) {
fire(ref2, "afterShow"), queueClose(ref2), Utils.addListener(ref2.barDom, "mouseenter", function() {
dequeueClose(ref2);
}), Utils.addListener(ref2.barDom, "mouseleave", function() {
queueClose(ref2);
});
}
function closeFlow(ref2) {
delete Store[ref2.id], ref2.closing = false, fire(ref2, "afterClose"), Utils.remove(ref2.barDom), ref2.layoutDom.querySelectorAll(".noty_bar").length === 0 && !ref2.options.container && Utils.remove(ref2.layoutDom), (Utils.inArray("docVisible", ref2.options.titleCount.conditions) || Utils.inArray("docHidden", ref2.options.titleCount.conditions)) && docTitle.decrement(), queueRender(ref2.options.queue);
}
},
/* 2 */
/***/
function(module22, exports22, __webpack_require__) {
Object.defineProperty(exports22, "__esModule", {
value: true
}), exports22.NotyButton = void 0;
var _utils = __webpack_require__(0), Utils = _interopRequireWildcard(_utils);
function _interopRequireWildcard(obj) {
if (obj && obj.__esModule)
return obj;
var newObj = {};
if (obj != null)
for (var key in obj)
Object.prototype.hasOwnProperty.call(obj, key) && (newObj[key] = obj[key]);
return newObj.default = obj, newObj;
}
function _classCallCheck(instance, Constructor) {
if (!(instance instanceof Constructor))
throw new TypeError("Cannot call a class as a function");
}
exports22.NotyButton = function NotyButton2(html, classes, cb) {
var _this = this, attributes = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : {};
return _classCallCheck(this, NotyButton2), this.dom = document.createElement("button"), this.dom.innerHTML = html, this.id = attributes.id = attributes.id || Utils.generateID("button"), this.cb = cb, Object.keys(attributes).forEach(function(propertyName) {
_this.dom.setAttribute(propertyName, attributes[propertyName]);
}), Utils.addClass(this.dom, classes || "noty_btn"), this;
};
},
/* 3 */
/***/
function(module22, exports22, __webpack_require__) {
Object.defineProperty(exports22, "__esModule", {
value: true
});
var _createClass = /* @__PURE__ */ function() {
function defineProperties(target, props) {
for (var i = 0; i < props.length; i++) {
var descriptor = props[i];
descriptor.enumerable = descriptor.enumerable || false, descriptor.configurable = true, "value" in descriptor && (descriptor.writable = true), Object.defineProperty(target, descriptor.key, descriptor);
}
}
return function(Constructor, protoProps, staticProps) {
return protoProps && defineProperties(Constructor.prototype, protoProps), staticProps && defineProperties(Constructor, staticProps), Constructor;
};
}();
function _classCallCheck(instance, Constructor) {
if (!(instance instanceof Constructor))
throw new TypeError("Cannot call a class as a function");
}
exports22.Push = function() {
function Push2() {
var workerPath = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : "/service-worker.js";
return _classCallCheck(this, Push2), this.subData = {}, this.workerPath = workerPath, this.listeners = {
onPermissionGranted: [],
onPermissionDenied: [],
onSubscriptionSuccess: [],
onSubscriptionCancel: [],
onWorkerError: [],
onWorkerSuccess: [],
onWorkerNotSupported: []
}, this;
}
return _createClass(Push2, [{
key: "on",
value: function(eventName) {
var cb = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : function() {
};
return typeof cb == "function" && this.listeners.hasOwnProperty(eventName) && this.listeners[eventName].push(cb), this;
}
}, {
key: "fire",
value: function(eventName) {
var _this = this, params = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : [];
this.listeners.hasOwnProperty(eventName) && this.listeners[eventName].forEach(function(cb) {
typeof cb == "function" && cb.apply(_this, params);
});
}
}, {
key: "create",
value: function() {
console.log("NOT IMPLEMENTED YET");
}
/**
* @return {boolean}
*/
}, {
key: "isSupported",
value: function() {
var result = false;
try {
result = window.Notification || window.webkitNotifications || navigator.mozNotification || window.external && window.external.msIsSiteMode() !== void 0;
} catch {
}
return result;
}
/**
* @return {string}
*/
}, {
key: "getPermissionStatus",
value: function() {
var perm = "default";
if (window.Notification && window.Notification.permissionLevel)
perm = window.Notification.permissionLevel;
else if (window.webkitNotifications && window.webkitNotifications.checkPermission)
switch (window.webkitNotifications.checkPermission()) {
case 1:
perm = "default";
break;
case 0:
perm = "granted";
break;
default:
perm = "denied";
}
else window.Notification && window.Notification.permission ? perm = window.Notification.permission : navigator.mozNotification ? perm = "granted" : window.external && window.external.msIsSiteMode() !== void 0 && (perm = window.external.msIsSiteMode() ? "granted" : "default");
return perm.toString().toLowerCase();
}
/**
* @return {string}
*/
}, {
key: "getEndpoint",
value: function(subscription) {
var endpoint = subscription.endpoint, subscriptionId = subscription.subscriptionId;
return subscriptionId && endpoint.indexOf(subscriptionId) === -1 && (endpoint += "/" + subscriptionId), endpoint;
}
/**
* @return {boolean}
*/
}, {
key: "isSWRegistered",
value: function() {
try {
return navigator.serviceWorker.controller.state === "activated";
} catch {
return false;
}
}
/**
* @return {void}
*/
}, {
key: "unregisterWorker",
value: function() {
var self2 = this;
"serviceWorker" in navigator && navigator.serviceWorker.getRegistrations().then(function(registrations) {
var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;
try {
for (var _iterator = registrations[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = !0) {
var registration = _step.value;
registration.unregister(), self2.fire("onSubscriptionCancel");
}
} catch (err) {
_didIteratorError = true, _iteratorError = err;
} finally {
try {
!_iteratorNormalCompletion && _iterator.return && _iterator.return();
} finally {
if (_didIteratorError)
throw _iteratorError;
}
}
});
}
/**
* @return {void}
*/
}, {
key: "requestSubscription",
value: function() {
var _this2 = this, userVisibleOnly = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : true, self2 = this, current = this.getPermissionStatus(), cb = function(result) {
result === "granted" ? (_this2.fire("onPermissionGranted"), "serviceWorker" in navigator ? navigator.serviceWorker.register(_this2.workerPath).then(function() {
navigator.serviceWorker.ready.then(function(serviceWorkerRegistration) {
self2.fire("onWorkerSuccess"), serviceWorkerRegistration.pushManager.subscribe({
userVisibleOnly
}).then(function(subscription) {
var key = subscription.getKey("p256dh"), token = subscription.getKey("auth");
self2.subData = {
endpoint: self2.getEndpoint(subscription),
p256dh: key ? window.btoa(String.fromCharCode.apply(null, new Uint8Array(key))) : null,
auth: token ? window.btoa(String.fromCharCode.apply(null, new Uint8Array(token))) : null
}, self2.fire("onSubscriptionSuccess", [self2.subData]);
}).catch(function(err) {
self2.fire("onWorkerError", [err]);
});
});
}) : self2.fire("onWorkerNotSupported")) : result === "denied" && (_this2.fire("onPermissionDenied"), _this2.unregisterWorker());
};
current === "default" ? window.Notification && window.Notification.requestPermission ? window.Notification.requestPermission(cb) : window.webkitNotifications && window.webkitNotifications.checkPermission && window.webkitNotifications.requestPermission(cb) : cb(current);
}
}]), Push2;
}();
},
/* 4 */
/***/
function(module22, exports22, __webpack_require__) {
(function(process2, global2) {
var require2;
(function(global22, factory) {
module22.exports = factory();
})(this, function() {
function objectOrFunction(x) {
var type = typeof x;
return x !== null && (type === "object" || type === "function");
}
function isFunction2(x) {
return typeof x == "function";
}
var _isArray = void 0;
Array.isArray ? _isArray = Array.isArray : _isArray = function(x) {
return Object.prototype.toString.call(x) === "[object Array]";
};
var isArray2 = _isArray, len = 0, vertxNext = void 0, customSchedulerFn = void 0, asap = function(callback, arg) {
queue[len] = callback, queue[len + 1] = arg, len += 2, len === 2 && (customSchedulerFn ? customSchedulerFn(flush) : scheduleFlush());
};
function setScheduler(scheduleFn) {
customSchedulerFn = scheduleFn;
}
function setAsap(asapFn) {
asap = asapFn;
}
var browserWindow = typeof window < "u" ? window : void 0, browserGlobal = browserWindow || {}, BrowserMutationObserver = browserGlobal.MutationObserver || browserGlobal.WebKitMutationObserver, isNode = typeof self > "u" && typeof process2 < "u" && {}.toString.call(process2) === "[object process]", isWorker = typeof Uint8ClampedArray < "u" && typeof importScripts < "u" && typeof MessageChannel < "u";
function useNextTick() {
return function() {
return process2.nextTick(flush);
};
}
function useVertxTimer() {
return typeof vertxNext < "u" ? function() {
vertxNext(flush);
} : useSetTimeout();
}
function useMutationObserver() {
var iterations = 0, observer = new BrowserMutationObserver(flush), node = document.createTextNode("");
return observer.observe(node, { characterData: true }), function() {
node.data = iterations = ++iterations % 2;
};
}
function useMessageChannel() {
var channel = new MessageChannel();
return channel.port1.onmessage = flush, function() {
return channel.port2.postMessage(0);
};
}
function useSetTimeout() {
var globalSetTimeout = setTimeout;
return function() {
return globalSetTimeout(flush, 1);
};
}
var queue = new Array(1e3);
function flush() {
for (var i = 0; i < len; i += 2) {
var callback = queue[i], arg = queue[i + 1];
callback(arg), queue[i] = void 0, queue[i + 1] = void 0;
}
len = 0;
}
function attemptVertx() {
try {
var r = require2, vertx = __webpack_require__(9);
return vertxNext = vertx.runOnLoop || vertx.runOnContext, useVertxTimer();
} catch {
return useSetTimeout();
}
}
var scheduleFlush = void 0;
isNode ? scheduleFlush = useNextTick() : BrowserMutationObserver ? scheduleFlush = useMutationObserver() : isWorker ? scheduleFlush = useMessageChannel() : browserWindow === void 0 ? scheduleFlush = attemptVertx() : scheduleFlush = useSetTimeout();
function then(onFulfillment, onRejection) {
var _arguments = arguments, parent = this, child = new this.constructor(noop2);
child[PROMISE_ID] === void 0 && makePromise(child);
var _state = parent._state;
return _state ? function() {
var callback = _arguments[_state - 1];
asap(function() {
return invokeCallback(_state, child, callback, parent._result);
});
}() : subscribe(parent, child, onFulfillment, onRejection), child;
}
function resolve$1(object) {
var Constructor = this;
if (object && typeof object == "object" && object.constructor === Constructor)
return object;
var promise = new Constructor(noop2);
return resolve(promise, object), promise;
}
var PROMISE_ID = Math.random().toString(36).substring(16);
function noop2() {
}
var PENDING = void 0, FULFILLED = 1, REJECTED = 2, GET_THEN_ERROR = new ErrorObject();
function selfFulfillment() {
return new TypeError("You cannot resolve a promise with itself");
}
function cannotReturnOwn() {
return new TypeError("A promises callback cannot return that same promise.");
}
function getThen(promise) {
try {
return promise.then;
} catch (error) {
return GET_THEN_ERROR.error = error, GET_THEN_ERROR;
}
}
function tryThen(then$$1, value, fulfillmentHandler, rejectionHandler) {
try {
then$$1.call(value, fulfillmentHandler, rejectionHandler);
} catch (e) {
return e;
}
}
function handleForeignThenable(promise, thenable, then$$1) {
asap(function(promise2) {
var sealed = false, error = tryThen(then$$1, thenable, function(value) {
sealed || (sealed = true, thenable !== value ? resolve(promise2, value) : fulfill(promise2, value));
}, function(reason) {
sealed || (sealed = true, reject(promise2, reason));
}, "Settle: " + (promise2._label || " unknown promise"));
!sealed && error && (sealed = true, reject(promise2, error));
}, promise);
}
function handleOwnThenable(promise, thenable) {
thenable._state === FULFILLED ? fulfill(promise, thenable._result) : thenable._state === REJECTED ? reject(promise, thenable._result) : subscribe(thenable, void 0, function(value) {
return resolve(promise, value);
}, function(reason) {
return reject(promise, reason);
});
}
function handleMaybeThenable(promise, maybeThenable, then$$1) {
maybeThenable.constructor === promise.constructor && then$$1 === then && maybeThenable.constructor.resolve === resolve$1 ? handleOwnThenable(promise, maybeThenable) : then$$1 === GET_THEN_ERROR ? (reject(promise, GET_THEN_ERROR.error), GET_THEN_ERROR.error = null) : then$$1 === void 0 ? fulfill(promise, maybeThenable) : isFunction2(then$$1) ? handleForeignThenable(promise, maybeThenable, then$$1) : fulfill(promise, maybeThenable);
}
function resolve(promise, value) {
promise === value ? reject(promise, selfFulfillment()) : objectOrFunction(value) ? handleMaybeThenable(promise, value, getThen(value)) : fulfill(promise, value);
}
function publishRejection(promise) {
promise._onerror && promise._onerror(promise._result), publish(promise);
}
function fulfill(promise, value) {
promise._state === PENDING && (promise._result = value, promise._state = FULFILLED, promise._subscribers.length !== 0 && asap(publish, promise));
}
function reject(promise, reason) {
promise._state === PENDING && (promise._state = REJECTED, promise._result = reason, asap(publishRejection, promise));
}
function subscribe(parent, child, onFulfillment, onRejection) {
var _subscribers = parent._subscribers, length = _subscribers.length;
parent._onerror = null, _subscribers[length] = child, _subscribers[length + FULFILLED] = onFulfillment, _subscribers[length + REJECTED] = onRejection, length === 0 && parent._state && asap(publish, parent);
}
function publish(promise) {
var subscribers = promise._subscribers, settled = promise._state;
if (subscribers.length !== 0) {
for (var child = void 0, callback = void 0, detail = promise._result, i = 0; i < subscribers.length; i += 3)
child = subscribers[i], callback = subscribers[i + settled], child ? invokeCallback(settled, child, callback, detail) : callback(detail);
promise._subscribers.length = 0;
}
}
function ErrorObject() {
this.error = null;
}
var TRY_CATCH_ERROR = new ErrorObject();
function tryCatch(callback, detail) {
try {
return callback(detail);
} catch (e) {
return TRY_CATCH_ERROR.error = e, TRY_CATCH_ERROR;
}
}
function invokeCallback(settled, promise, callback, detail) {
var hasCallback = isFunction2(callback), value = void 0, error = void 0, succeeded = void 0, failed = void 0;
if (hasCallback) {
if (value = tryCatch(callback, detail), value === TRY_CATCH_ERROR ? (failed = true, error = value.error, value.error = null) : succeeded = true, promise === value) {
reject(promise, cannotReturnOwn());
return;
}
} else
value = detail, succeeded = true;
promise._state !== PENDING || (hasCallback && succeeded ? resolve(promise, value) : failed ? reject(promise, error) : settled === FULFILLED ? fulfill(promise, value) : settled === REJECTED && reject(promise, value));
}
function initializePromise(promise, resolver) {
try {
resolver(function(value) {
resolve(promise, value);
}, function(reason) {
reject(promise, reason);
});
} catch (e) {
reject(promise, e);
}
}
var id = 0;
function nextId() {
return id++;
}
function makePromise(promise) {
promise[PROMISE_ID] = id++, promise._state = void 0, promise._result = void 0, promise._subscribers = [];
}
function Enumerator$1(Constructor, input) {
this._instanceConstructor = Constructor, this.promise = new Constructor(noop2), this.promise[PROMISE_ID] || makePromise(this.promise), isArray2(input) ? (this.length = input.length, this._remaining = input.length, this._result = new Array(this.length), this.length === 0 ? fulfill(this.promise, this._result) : (this.length = this.length || 0, this._enumerate(input), this._remaining === 0 && fulfill(this.promise, this._result))) : reject(this.promise, validationError());
}
function validationError() {
return new Error("Array Methods must be provided an Array");
}
Enumerator$1.prototype._enumerate = function(input) {
for (var i = 0; this._state === PENDING && i < input.length; i++)
this._eachEntry(input[i], i);
}, Enumerator$1.prototype._eachEntry = function(entry, i) {
var c = this._instanceConstructor, resolve$$1 = c.resolve;
if (resolve$$1 === resolve$1) {
var _then = getThen(entry);
if (_then === then && entry._state !== PENDING)
this._settledAt(entry._state, i, entry._result);
else if (typeof _then != "function")
this._remaining--, this._result[i] = entry;
else if (c === Promise$2) {
var promise = new c(noop2);
handleMaybeThenable(promise, entry, _then), this._willSettleAt(promise, i);
} else
this._willSettleAt(new c(function(resolve$$12) {
return resolve$$12(entry);
}), i);
} else
this._willSettleAt(resolve$$1(entry), i);
}, Enumerator$1.prototype._settledAt = function(state, i, value) {
var promise = this.promise;
promise._state === PENDING && (this._remaining--, state === REJECTED ? reject(promise, value) : this._result[i] = value), this._remaining === 0 && fulfill(promise, this._result);
}, Enumerator$1.prototype._willSettleAt = function(promise, i) {
var enumerator = this;
subscribe(promise, void 0, function(value) {
return enumerator._settledAt(FULFILLED, i, value);
}, function(reason) {
return enumerator._settledAt(REJECTED, i, reason);
});
};
function all$1(entries) {
return new Enumerator$1(this, entries).promise;
}
function race$1(entries) {
var Constructor = this;
return isArray2(entries) ? new Constructor(function(resolve2, reject2) {
for (var length = entries.length, i = 0; i < length; i++)
Constructor.resolve(entries[i]).then(resolve2, reject2);
}) : new Constructor(function(_, reject2) {
return reject2(new TypeError("You must pass an array to race."));
});
}
function reject$1(reason) {
var Constructor = this, promise = new Constructor(noop2);
return reject(promise, reason), promise;
}
function needsResolver() {
throw new TypeError("You must pass a resolver function as the first argument to the promise constructor");
}
function needsNew() {
throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.");
}
function Promise$2(resolver) {
this[PROMISE_ID] = nextId(), this._result = this._state = void 0, this._subscribers = [], noop2 !== resolver && (typeof resolver != "function" && needsResolver(), this instanceof Promise$2 ? initializePromise(this, resolver) : needsNew());
}
Promise$2.all = all$1, Promise$2.race = race$1, Promise$2.resolve = resolve$1, Promise$2.reject = reject$1, Promise$2._setScheduler = setScheduler, Promise$2._setAsap = setAsap, Promise$2._asap = asap, Promise$2.prototype = {
constructor: Promise$2,
/**
The primary way of interacting with a promise is through its `then` method,
which registers callbacks to receive either a promise's eventual value or the
reason why the promise cannot be fulfilled.
```js
findUser().then(function(user){
// user is available
}, function(reason){
// user is unavailable, and you are given the reason why
});
```
Chaining
--------
The return value of `then` is itself a promise. This second, 'downstream'
promise is resolved with the return value of the first promise's fulfillment
or rejection handler, or rejected if the handler throws an exception.
```js
findUser().then(function (user) {
return user.name;
}, function (reason) {
return 'default name';
}).then(function (userName) {
// If `findUser` fulfilled, `userName` will be the user's name, otherwise it
// will be `'default name'`
});
findUser().then(function (user) {
throw new Error('Found user, but still unhappy');
}, function (reason) {
throw new Error('`findUser` rejected and we're unhappy');
}).then(function (value) {
// never reached
}, function (reason) {
// if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.
// If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.
});
```
If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.
```js
findUser().then(function (user) {
throw new PedagogicalException('Upstream error');
}).then(function (value) {
// never reached
}).then(function (value) {
// never reached
}, function (reason) {
// The `PedgagocialException` is propagated all the way down to here
});
```
Assimilation
------------
Sometimes the value you want to propagate to a downstream promise can only be
retrieved asynchronously. This can be achieved by returning a promise in the
fulfillment or rejection handler. The downstream promise will then be pending
until the returned promise is settled. This is called *assimilation*.
```js
findUser().then(function (user) {
return findCommentsByAuthor(user);
}).then(function (comments) {
// The user's comments are now available
});
```
If the assimliated promise rejects, then the downstream promise will also reject.
```js
findUser().then(function (user) {
return findCommentsByAuthor(user);
}).then(function (comments) {
// If `findCommentsByAuthor` fulfills, we'll have the value here
}, function (reason) {
// If `findCommentsByAuthor` rejects, we'll have the reason here
});
```
Simple Example
--------------
Synchronous Example
```javascript
let result;
try {
result = findResult();
// success
} catch(reason) {
// failure
}
```
Errback Example
```js
findResult(function(result, err){
if (err) {
// failure
} else {
// success
}
});
```
Promise Example;
```javascript
findResult().then(function(result){
// success
}, function(reason){
// failure
});
```
Advanced Example
--------------
Synchronous Example
```javascript
let author, books;
try {
author = findAuthor();
books = findBooksByAuthor(author);
// success
} catch(reason) {
// failure
}
```
Errback Example
```js
function foundBooks(books) {
}
function failure(reason) {
}
findAuthor(function(author, err){
if (err) {
failure(err);
// failure
} else {
try {
findBoooksByAuthor(author, function(books, err) {
if (err) {
failure(err);
} else {
try {
foundBooks(books);
} catch(reason) {
failure(reason);
}
}
});
} catch(error) {
failure(err);
}
// success
}
});
```
Promise Example;
```javascript
findAuthor().
then(findBooksByAuthor).
then(function(books){
// found books
}).catch(function(reason){
// something went wrong
});
```
@method then
@param {Function} onFulfilled
@param {Function} onRejected
Useful for tooling.
@return {Promise}
*/
then,
/**
`catch` is simply sugar for `then(undefined, onRejection)` which makes it the same
as the catch block of a try/catch statement.
```js
function findAuthor(){
throw new Error('couldn't find that author');
}
// synchronous
try {
findAuthor();
} catch(reason) {
// something went wrong
}
// async with promises
findAuthor().catch(function(reason){
// something went wrong
});
```
@method catch
@param {Function} onRejection
Useful for tooling.
@return {Promise}
*/
catch: function(onRejection) {
return this.then(null, onRejection);
}
};
function polyfill$1() {
var local = void 0;
if (typeof global2 < "u")
local = global2;
else if (typeof self < "u")
local = self;
else
try {
local = Function("return this")();
} catch {
throw new Error("polyfill failed because global object is unavailable in this environment");
}
var P = local.Promise;
if (P) {
var promiseToString = null;
try {
promiseToString = Object.prototype.toString.call(P.resolve());
} catch {
}
if (promiseToString === "[object Promise]" && !P.cast)
return;
}
local.Promise = Promise$2;
}
return Promise$2.polyfill = polyfill$1, Promise$2.Promise = Promise$2, Promise$2;
});
}).call(exports22, __webpack_require__(7), __webpack_require__(8));
},
/* 5 */
/***/
function(module22, exports22) {
},
/* 6 */
/***/
function(module22, exports22, __webpack_require__) {
Object.defineProperty(exports22, "__esModule", {
value: true
});
var _createClass = /* @__PURE__ */ function() {
function defineProperties(target, props) {
for (var i = 0; i < props.length; i++) {
var descriptor = props[i];
descriptor.enumerable = descriptor.enumerable || false, descriptor.configurable = true, "value" in descriptor && (descriptor.writable = true), Object.defineProperty(target, descriptor.key, descriptor);
}
}
return function(Constructor, protoProps, staticProps) {
return protoProps && defineProperties(Constructor.prototype, protoProps), staticProps && defineProperties(Constructor, staticProps), Constructor;
};
}();
__webpack_require__(5);
var _es6Promise = __webpack_require__(4), _es6Promise2 = _interopRequireDefault(_es6Promise), _utils = __webpack_require__(0), Utils = _interopRequireWildcard(_utils), _api = __webpack_require__(1), API = _interopRequireWildcard(_api), _button = __webpack_require__(2), _push = __webpack_require__(3);
function _interopRequireWildcard(obj) {
if (obj && obj.__esModule)
return obj;
var newObj = {};
if (obj != null)
for (var key in obj)
Object.prototype.hasOwnProperty.call(obj, key) && (newObj[key] = obj[key]);
return newObj.default = obj, newObj;
}
function _interopRequireDefault(obj) {
return obj && obj.__esModule ? obj : { default: obj };
}
function _classCallCheck(instance, Constructor) {
if (!(instance instanceof Constructor))
throw new TypeError("Cannot call a class as a function");
}
var Noty2 = function() {
function Noty22() {
var options = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};
return _classCallCheck(this, Noty22), this.options = Utils.deepExtend({}, API.Defaults, options), this.id = this.options.id || Utils.generateID("bar"), this.closeTimer = -1, this.barDom = null, this.layoutDom = null, this.progressDom = null, this.showing = false, this.shown = false, this.closed = false, this.closing = false, this.killable = this.options.timeout || this.options.closeWith.length > 0, this.hasSound = this.options.sounds.sources.length > 0, this.soundPlayed = false, this.listeners = {
beforeShow: [],
onShow: [],
afterShow: [],
onClose: [],
afterClose: [],
onClick: [],
onHover: [],
onTemplate: []
}, this.promises = {
show: null,
close: null
}, this.on("beforeShow", this.options.callbacks.beforeShow), this.on("onShow", this.options.callbacks.onShow), this.on("afterShow", this.options.callbacks.afterShow), this.on("onClose", this.options.callbacks.onClose), this.on("afterClose", this.options.callbacks.afterClose), this.on("onClick", this.options.callbacks.onClick), this.on("onHover", this.options.callbacks.onHover), this.on("onTemplate", this.options.callbacks.onTemplate), this;
}
return _createClass(Noty22, [{
key: "on",
value: function(eventName) {
var cb = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : function() {
};
return typeof cb == "function" && this.listeners.hasOwnProperty(eventName) && this.listeners[eventName].push(cb), this;
}
/**
* @return {Noty}
*/
}, {
key: "show",
value: function() {
var _this = this;
this.options.killer === true ? Noty22.closeAll() : typeof this.options.killer == "string" && Noty22.closeAll(this.options.killer);
var queueCounts = API.getQueueCounts(this.options.queue);
if (queueCounts.current >= queueCounts.maxVisible || API.PageHidden && this.options.visibilityControl)
return API.addToQueue(this), API.PageHidden && this.hasSound && Utils.inArray("docHidden", this.options.sounds.conditions) && Utils.createAudioElements(this), API.PageHidden && Utils.inArray("docHidden", this.options.titleCount.conditions) && API.docTitle.increment(), this;
if (API.Store[this.id] = this, API.fire(this, "beforeShow"), this.showing = true, this.closing)
return this.showing = false, this;
if (API.build(this), API.handleModal(this), this.options.force ? this.layoutDom.insertBefore(this.barDom, this.layoutDom.firstChild) : this.layoutDom.appendChild(this.barDom), this.hasSound && !this.soundPlayed && Utils.inArray("docVisible", this.options.sounds.conditions) && Utils.createAudioElements(this), Utils.inArray("docVisible", this.options.titleCount.conditions) && API.docTitle.increment(), this.shown = true, this.closed = false, API.hasButtons(this) && Object.keys(this.options.buttons).forEach(function(key) {
var btn = _this.barDom.querySelector("#" + _this.options.buttons[key].id);
Utils.addListener(btn, "click", function(e) {
Utils.stopPropagation(e), _this.options.buttons[key].cb();
});
}), this.progressDom = this.barDom.querySelector(".noty_progressbar"), Utils.inArray("click", this.options.closeWith) && (Utils.addClass(this.barDom, "noty_close_with_click"), Utils.addListener(this.barDom, "click", function(e) {
Utils.stopPropagation(e), API.fire(_this, "onClick"), _this.close();
}, false)), Utils.addListener(this.barDom, "mouseenter", function() {
API.fire(_this, "onHover");
}, false), this.options.timeout && Utils.addClass(this.barDom, "noty_has_timeout"), this.options.progressBar && Utils.addClass(this.barDom, "noty_has_progressbar"), Utils.inArray("button", this.options.closeWith)) {
Utils.addClass(this.barDom, "noty_close_with_button");
var closeButton = document.createElement("div");
Utils.addClass(closeButton, "noty_close_button"), closeButton.innerHTML = "×", this.barDom.appendChild(closeButton), Utils.addListener(closeButton, "click", function(e) {
Utils.stopPropagation(e), _this.close();
}, false);
}
return API.fire(this, "onShow"), this.options.animation.open === null ? this.promises.show = new _es6Promise2.default(function(resolve) {
resolve();
}) : typeof this.options.animation.open == "function" ? this.promises.show = new _es6Promise2.default(this.options.animation.open.bind(this)) : (Utils.addClass(this.barDom, this.options.animation.open), this.promises.show = new _es6Promise2.default(function(resolve) {
Utils.addListener(_this.barDom, Utils.animationEndEvents, function() {
Utils.removeClass(_this.barDom, _this.options.animation.open), resolve();
});
})), this.promises.show.then(function() {
var _t = _this;
setTimeout(function() {
API.openFlow(_t);
}, 100);
}), this;
}
/**
* @return {Noty}
*/
}, {
key: "stop",
value: function() {
return API.dequeueClose(this), this;
}
/**
* @return {Noty}
*/
}, {
key: "resume",
value: function() {
return API.queueClose(this), this;
}
/**
* @param {int|boolean} ms
* @return {Noty}
*/
}, {
key: "setTimeout",
value: function(_setTimeout) {
function setTimeout2(_x) {
return _setTimeout.apply(this, arguments);
}
return setTimeout2.toString = function() {
return _setTimeout.toString();
}, setTimeout2;
}(function(ms) {
if (this.stop(), this.options.timeout = ms, this.barDom) {
this.options.timeout ? Utils.addClass(this.barDom, "noty_has_timeout") : Utils.removeClass(this.barDom, "noty_has_timeout");
var _t = this;
setTimeout(function() {
_t.resume();
}, 100);
}
return this;
})
/**
* @param {string} html
* @param {boolean} optionsOverride
* @return {Noty}
*/
}, {
key: "setText",
value: function(html) {
var optionsOverride = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : false;
return this.barDom && (this.barDom.querySelector(".noty_body").innerHTML = html), optionsOverride && (this.options.text = html), this;
}
/**
* @param {string} type
* @param {boolean} optionsOverride
* @return {Noty}
*/
}, {
key: "setType",
value: function(type) {
var _this2 = this, optionsOverride = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : false;
if (this.barDom) {
var classList = Utils.classList(this.barDom).split(" ");
classList.forEach(function(c) {
c.substring(0, 11) === "noty_type__" && Utils.removeClass(_this2.barDom, c);
}), Utils.addClass(this.barDom, "noty_type__" + type);
}
return optionsOverride && (this.options.type = type), this;
}
/**
* @param {string} theme
* @param {boolean} optionsOverride
* @return {Noty}
*/
}, {
key: "setTheme",
value: function(theme) {
var _this3 = this, optionsOverride = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : false;
if (this.barDom) {
var classList = Utils.classList(this.barDom).split(" ");
classList.forEach(function(c) {
c.substring(0, 12) === "noty_theme__" && Utils.removeClass(_this3.barDom, c);
}), Utils.addClass(this.barDom, "noty_theme__" + theme);
}
return optionsOverride && (this.options.theme = theme), this;
}
/**
* @return {Noty}
*/
}, {
key: "close",
value: function() {
var _this4 = this;
return this.closed ? this : this.shown ? (API.fire(this, "onClose"), this.closing = true, this.options.animation.close === null ? this.promises.close = new _es6Promise2.default(function(resolve) {
resolve();
}) : typeof this.options.animation.close == "function" ? this.promises.close = new _es6Promise2.default(this.options.animation.close.bind(this)) : (Utils.addClass(this.barDom, this.options.animation.close), this.promises.close = new _es6Promise2.default(function(resolve) {
Utils.addListener(_this4.barDom, Utils.animationEndEvents, function() {
_this4.options.force ? Utils.remove(_this4.barDom) : API.ghostFix(_this4), resolve();
});
})), this.promises.close.then(function() {
API.closeFlow(_this4), API.handleModalClose(_this4);
}), this.closed = true, this) : (API.removeFromQueue(this), this);
}
// API functions
/**
* @param {boolean|string} queueName
* @return {Noty}
*/
}], [{
key: "closeAll",
value: function() {
var queueName = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : false;
return Object.keys(API.Store).forEach(function(id) {
queueName ? API.Store[id].options.queue === queueName && API.Store[id].killable && API.Store[id].close() : API.Store[id].killable && API.Store[id].close();
}), this;
}
/**
* @param {Object} obj
* @return {Noty}
*/
}, {
key: "overrideDefaults",
value: function(obj) {
return API.Defaults = Utils.deepExtend({}, API.Defaults, obj), this;
}
/**
* @param {int} amount
* @param {string} queueName
* @return {Noty}
*/
}, {
key: "setMaxVisible",
value: function() {
var amount = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : API.DefaultMaxVisible, queueName = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : "global";
return API.Queues.hasOwnProperty(queueName) || (API.Queues[queueName] = { maxVisible: amount, queue: [] }), API.Queues[queueName].maxVisible = amount, this;
}
/**
* @param {string} innerHtml
* @param {String} classes
* @param {Function} cb
* @param {Object} attributes
* @return {NotyButton}
*/
}, {
key: "button",
value: function(innerHtml) {
var classes = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : null, cb = arguments[2], attributes = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : {};
return new _button.NotyButton(innerHtml, classes, cb, attributes);
}
/**
* @return {string}
*/
}, {
key: "version",
value: function() {
return "3.1.4";
}
/**
* @param {String} workerPath
* @return {Push}
*/
}, {
key: "Push",
value: function(workerPath) {
return new _push.Push(workerPath);
}
}]), Noty22;
}();
exports22.default = Noty2, Utils.visibilityChangeFlow(), module22.exports = exports22.default;
},
/* 7 */
/***/
function(module22, exports22) {
var process2 = module22.exports = {}, cachedSetTimeout, cachedClearTimeout;
function defaultSetTimout() {
throw new Error("setTimeout has not been defined");
}
function defaultClearTimeout() {
throw new Error("clearTimeout has not been defined");
}
(function() {
try {
typeof setTimeout == "function" ? cachedSetTimeout = setTimeout : cachedSetTimeout = defaultSetTimout;
} catch {
cachedSetTimeout = defaultSetTimout;
}
try {
typeof clearTimeout == "function" ? cachedClearTimeout = clearTimeout : cachedClearTimeout = defaultClearTimeout;
} catch {
cachedClearTimeout = defaultClearTimeout;
}
})();
function runTimeout(fun) {
if (cachedSetTimeout === setTimeout)
return setTimeout(fun, 0);
if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout)
return cachedSetTimeout = setTimeout, setTimeout(fun, 0);
try {
return cachedSetTimeout(fun, 0);
} catch {
try {
return cachedSetTimeout.call(null, fun, 0);
} catch {
return cachedSetTimeout.call(this, fun, 0);
}
}
}
function runClearTimeout(marker) {
if (cachedClearTimeout === clearTimeout)
return clearTimeout(marker);
if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout)
return cachedClearTimeout = clearTimeout, clearTimeout(marker);
try {
return cachedClearTimeout(marker);
} catch {
try {
return cachedClearTimeout.call(null, marker);
} catch {
return cachedClearTimeout.call(this, marker);
}
}
}
var queue = [], draining = false, currentQueue, queueIndex = -1;
function cleanUpNextTick() {
!draining || !currentQueue || (draining = false, currentQueue.length ? queue = currentQueue.concat(queue) : queueIndex = -1, queue.length && drainQueue());
}
function drainQueue() {
if (!draining) {
var timeout = runTimeout(cleanUpNextTick);
draining = true;
for (var len = queue.length; len; ) {
for (currentQueue = queue, queue = []; ++queueIndex < len; )
currentQueue && currentQueue[queueIndex].run();
queueIndex = -1, len = queue.length;
}
currentQueue = null, draining = false, runClearTimeout(timeout);
}
}
process2.nextTick = function(fun) {
var args = new Array(arguments.length - 1);
if (arguments.length > 1)
for (var i = 1; i < arguments.length; i++)
args[i - 1] = arguments[i];
queue.push(new Item(fun, args)), queue.length === 1 && !draining && runTimeout(drainQueue);
};
function Item(fun, array) {
this.fun = fun, this.array = array;
}
Item.prototype.run = function() {
this.fun.apply(null, this.array);
}, process2.title = "browser", process2.browser = true, process2.env = {}, process2.argv = [], process2.version = "", process2.versions = {};
function noop2() {
}
process2.on = noop2, process2.addListener = noop2, process2.once = noop2, process2.off = noop2, process2.removeListener = noop2, process2.removeAllListeners = noop2, process2.emit = noop2, process2.prependListener = noop2, process2.prependOnceListener = noop2, process2.listeners = function(name) {
return [];
}, process2.binding = function(name) {
throw new Error("process.binding is not supported");
}, process2.cwd = function() {
return "/";
}, process2.chdir = function(dir) {
throw new Error("process.chdir is not supported");
}, process2.umask = function() {
return 0;
};
},
/* 8 */
/***/
function(module22, exports22) {
var g;
g = /* @__PURE__ */ function() {
return this;
}();
try {
g = g || Function("return this")() || (0, eval)("this");
} catch {
typeof window == "object" && (g = window);
}
module22.exports = g;
},
/* 9 */
/***/
function(module22, exports22) {
}
/******/
])
);
});
}(noty$1)), noty$1.exports;
}
var notyExports = requireNoty();
const Noty = /* @__PURE__ */ getDefaultExportFromCjs(notyExports);
const _create = Object.create, create = (obj = null) => _create(obj);
let _globalThis;
const getGlobalThis = () => _globalThis || (_globalThis = typeof globalThis < "u" ? globalThis : typeof self < "u" ? self : typeof window < "u" ? window : typeof global < "u" ? global : create()), isFunction = (val) => typeof val == "function", isObject$1 = (val) => val !== null && typeof val == "object";
function initFeatureFlags() {
typeof __INTLIFY_PROD_DEVTOOLS__ != "boolean" && (getGlobalThis().__INTLIFY_PROD_DEVTOOLS__ = false);
}
const pathStateMachine = [];
pathStateMachine[
0
/* States.BEFORE_PATH */
] = {
w: [
0
/* States.BEFORE_PATH */
],
i: [
3,
0
/* Actions.APPEND */
],
"[": [
4
/* States.IN_SUB_PATH */
],
o: [
7
/* States.AFTER_PATH */
]
};
pathStateMachine[
1
/* States.IN_PATH */
] = {
w: [
1
/* States.IN_PATH */
],
".": [
2
/* States.BEFORE_IDENT */
],
"[": [
4
/* States.IN_SUB_PATH */
],
o: [
7
/* States.AFTER_PATH */
]
};
pathStateMachine[
2
/* States.BEFORE_IDENT */
] = {
w: [
2
/* States.BEFORE_IDENT */
],
i: [
3,
0
/* Actions.APPEND */
],
0: [
3,
0
/* Actions.APPEND */
]
};
pathStateMachine[
3
/* States.IN_IDENT */
] = {
i: [
3,
0
/* Actions.APPEND */
],
0: [
3,
0
/* Actions.APPEND */
],
w: [
1,
1
/* Actions.PUSH */
],
".": [
2,
1
/* Actions.PUSH */
],
"[": [
4,
1
/* Actions.PUSH */
],
o: [
7,
1
/* Actions.PUSH */
]
};
pathStateMachine[
4
/* States.IN_SUB_PATH */
] = {
"'": [
5,
0
/* Actions.APPEND */
],
'"': [
6,
0
/* Actions.APPEND */
],
"[": [
4,
2
/* Actions.INC_SUB_PATH_DEPTH */
],
"]": [
1,
3
/* Actions.PUSH_SUB_PATH */
],
o: 8,
l: [
4,
0
/* Actions.APPEND */
]
};
pathStateMachine[
5
/* States.IN_SINGLE_QUOTE */
] = {
"'": [
4,
0
/* Actions.APPEND */
],
o: 8,
l: [
5,
0
/* Actions.APPEND */
]
};
pathStateMachine[
6
/* States.IN_DOUBLE_QUOTE */
] = {
'"': [
4,
0
/* Actions.APPEND */
],
o: 8,
l: [
6,
0
/* Actions.APPEND */
]
};
const literalValueRE = /^\s?(?:true|false|-?[\d.]+|'[^']*'|"[^"]*")\s?$/;
function isLiteral(exp) {
return literalValueRE.test(exp);
}
function stripQuotes(str) {
const a = str.charCodeAt(0), b = str.charCodeAt(str.length - 1);
return a === b && (a === 34 || a === 39) ? str.slice(1, -1) : str;
}
function getPathCharType(ch) {
if (ch == null)
return "o";
switch (ch.charCodeAt(0)) {
case 91:
// [
case 93:
// ]
case 46:
// .
case 34:
// "
case 39:
return ch;
case 95:
// _
case 36:
// $
case 45:
return "i";
case 9:
// Tab (HT)
case 10:
// Newline (LF)
case 13:
// Return (CR)
case 160:
// No-break space (NBSP)
case 65279:
// Byte Order Mark (BOM)
case 8232:
// Line Separator (LS)
case 8233:
return "w";
}
return "i";
}
function formatSubPath(path) {
const trimmed = path.trim();
return path.charAt(0) === "0" && isNaN(parseInt(path)) ? false : isLiteral(trimmed) ? stripQuotes(trimmed) : "*" + trimmed;
}
function parse(path) {
const keys2 = [];
let index = -1, mode = 0, subPathDepth = 0, c, key, newChar, type, transition, action, typeMap;
const actions = [];
actions[
0
/* Actions.APPEND */
] = () => {
key === void 0 ? key = newChar : key += newChar;
}, actions[
1
/* Actions.PUSH */
] = () => {
key !== void 0 && (keys2.push(key), key = void 0);
}, actions[
2
/* Actions.INC_SUB_PATH_DEPTH */
] = () => {
actions[
0
/* Actions.APPEND */
](), subPathDepth++;
}, actions[
3
/* Actions.PUSH_SUB_PATH */
] = () => {
if (subPathDepth > 0)
subPathDepth--, mode = 4, actions[
0
/* Actions.APPEND */
]();
else {
if (subPathDepth = 0, key === void 0 || (key = formatSubPath(key), key === false))
return false;
actions[
1
/* Actions.PUSH */
]();
}
};
function maybeUnescapeQuote() {
const nextChar = path[index + 1];
if (mode === 5 && nextChar === "'" || mode === 6 && nextChar === '"')
return index++, newChar = "\\" + nextChar, actions[
0
/* Actions.APPEND */
](), true;
}
for (; mode !== null; )
if (index++, c = path[index], !(c === "\\" && maybeUnescapeQuote())) {
if (type = getPathCharType(c), typeMap = pathStateMachine[mode], transition = typeMap[type] || typeMap.l || 8, transition === 8 || (mode = transition[0], transition[1] !== void 0 && (action = actions[transition[1]], action && (newChar = c, action() === false))))
return;
if (mode === 7)
return keys2;
}
}
const cache = /* @__PURE__ */ new Map();
function resolveValue(obj, path) {
if (!isObject$1(obj))
return null;
let hit = cache.get(path);
if (hit || (hit = parse(path), hit && cache.set(path, hit)), !hit)
return null;
const len = hit.length;
let last2 = obj, i = 0;
for (; i < len; ) {
const val = last2[hit[i]];
if (val === void 0 || isFunction(last2))
return null;
last2 = val, i++;
}
return last2;
}
initFeatureFlags();
const resource$1 = {
common: {
settings: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "Settings" } },
auto: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "Auto" } },
english: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "English" } },
japanese: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "Japanese" } },
chinese: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "Chinese" } },
pretty: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "Pretty" } },
filter: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "Filter" } },
none: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "None" } },
disabled: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "Disabled" } },
copy: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "Copy" } },
copied: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "Copied" } },
abbr: {
english: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "EN" } },
japanese: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "JP" } },
chinese: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "CN" } }
}
},
setting: {
title: { t: 0, b: { t: 2, i: [{ t: 6, k: { t: 7, v: "common.settings" } }] } },
advanceTitle: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "Advance Settings" } },
helpButton: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "Help" } },
asteriskTip: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "means refresh is required to take effect" } },
downloadThread: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "Download thread" } },
openOnNewTab: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "Open on new tab" } },
compressionFilename: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "Compression filename" } },
maxNumber: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "Max number" } },
separator: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "Separator" } },
compressionLevel: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "Compression level" } },
filenameLength: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "Filename length" } },
convertWebpTo: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "Convert webp to" } },
convertWebpQuality: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "Quality" } },
removeAdPage: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "Remove ads pages" } },
autoCancelDownloadedManga: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "Auto cancel downloaded manga" } },
autoRetryWhenErrorOccurs: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "Auto retry when error occurs" } },
autoShowAll: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "Auto show all" } },
showIgnoreButton: { t: 0, b: { t: 2, i: [{ t: 3 }], s: 'Show "Ignore" button' } },
judgeDownloadedMangaByTitle: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "Judge downloaded manga by title" } },
customDownloadUrl: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "Custom download URL" } },
compressionStreamFiles: { t: 0, b: { t: 2, i: [{ t: 3 }], s: 'Compression "streamFiles"' } },
seriesMode: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "Series mode" } },
streamDownload: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "Stream download" } },
preventConsoleClearing: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "Prevent console clearing" } },
nHentaiDownloadHost: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "nHentai download host" } },
nHentaiDownloadHostOption: {
auto: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "Auto (recommended)" } },
random: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "Random" } },
balance: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "Balance" } }
},
addMetaFile: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "Add metadata file" } },
metaFileTitleLanguage: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "Title language" } },
titleReplacement: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "Title replacement" } },
galleryContextmenuPreview: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "Context menu preview" } },
customFilenameFunction: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "Custom filename function" } },
history: {
title: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "Download History" } },
downloadedNumberTip: { t: 0, b: { t: 2, i: [{ t: 3, v: "You have downloaded " }, { t: 4, k: "num" }, { t: 3, v: " manga on this site using nHentai Helper." }] } },
import: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "Import" } },
export: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "Export" } },
clear: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "Clear" } },
importTip: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "Tip: Import will not clear the existing history, but merges with it." } }
}
},
dialog: {
yes: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "YES" } },
no: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "NO" } },
action: {
getInfo: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "getting information" } },
download: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "downloading" } }
},
downloadAgainConfirm: ({ named }) => `<i>${named("title")}</i> is already downloaded${named("hasQueue") ? " or in queue" : ""}.<br>Do you want to download again?`,
errorRetryConfirm: ({ linked, named }) => `Error occurred while ${linked(`message.dialog.action.${named("action")}`)}, retry?`,
errorRetryTip: ({ linked, named }) => `Error occurred while ${linked(`message.dialog.action.${named("action")}`)}, retrying...`,
downloadedTip: { t: 0, b: { t: 2, i: [{ t: 3, v: "<i>" }, { t: 4, k: "title" }, { t: 3, v: "</i> is already downloaded or in queue." }] } },
getMediaUrlTemplateFailed: { t: 0, b: { t: 2, i: [{ t: 3, v: 'Fail to get image download url. Please set "' }, { t: 6, k: { t: 9, v: "setting.customDownloadUrl" } }, { t: 3, v: '" manually, or open a github issue to report with current url.' }] } }
},
button: {
download: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "Download" } },
downloading: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "Downloading" } },
compressing: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "Compressing" } },
ignore: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "Ignore this" } },
unignore: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "Ignore this" } }
},
input: {
downloadSpecifiedPages: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "Download specified pages (e.g. -5,7-10,12,14,18-)" } }
},
confirmPopup: {
title: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "Are you sure?" } },
yes: { t: 0, b: { static: "", t: 2, i: [] } },
no: { t: 0, b: { static: "", t: 2, i: [] } }
},
meta: {
id: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "ID" } },
parody: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "Parodies" } },
character: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "Characters" } },
tag: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "Tags" } },
artist: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "Artists" } },
group: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "Groups" } },
language: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "Languages" } },
category: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "Categories" } },
page: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "Pages" } },
upload: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "Upload Date" } }
}
}, resource = {
common: {
settings: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "设置" } },
auto: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "自动" } },
english: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "英文" } },
japanese: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "日文" } },
chinese: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "中文" } },
pretty: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "简略" } },
filter: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "过滤" } },
none: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "无" } },
disabled: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "禁用" } },
copy: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "复制" } },
copied: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "已复制" } },
abbr: {
english: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "英" } },
japanese: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "日" } },
chinese: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "中" } }
}
},
setting: {
title: { t: 0, b: { t: 2, i: [{ t: 6, k: { t: 7, v: "common.settings" } }] } },
advanceTitle: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "进阶设置" } },
helpButton: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "帮助" } },
asteriskTip: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "表示刷新页面才能生效" } },
downloadThread: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "下载线程数" } },
openOnNewTab: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "在新选项卡打开" } },
compressionFilename: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "压缩文件名" } },
maxNumber: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "最大数量" } },
separator: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "分隔符" } },
compressionLevel: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "压缩等级" } },
filenameLength: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "文件名长度" } },
convertWebpTo: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "转换 webp 为" } },
convertWebpQuality: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "质量" } },
removeAdPage: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "移除广告页" } },
autoCancelDownloadedManga: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "自动取消下载过的本子" } },
autoRetryWhenErrorOccurs: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "发生错误时自动重试" } },
autoShowAll: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "自动显示全部" } },
showIgnoreButton: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "显示“忽略”按钮" } },
judgeDownloadedMangaByTitle: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "用标题判断本子是否下载过" } },
customDownloadUrl: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "自定义下载地址" } },
compressionStreamFiles: { t: 0, b: { t: 2, i: [{ t: 3 }], s: '压缩 "streamFiles" 选项' } },
seriesMode: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "串行模式" } },
streamDownload: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "流式下载" } },
preventConsoleClearing: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "阻止控制台清空" } },
nHentaiDownloadHost: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "nHentai 下载节点" } },
nHentaiDownloadHostOption: {
auto: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "自动(推荐)" } },
random: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "随机" } },
balance: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "均衡" } }
},
addMetaFile: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "添加元数据文件" } },
metaFileTitleLanguage: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "标题语言" } },
titleReplacement: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "标题替换" } },
galleryContextmenuPreview: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "右击预览" } },
customFilenameFunction: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "自定义文件名函数" } },
history: {
title: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "下载历史" } },
downloadedNumberTip: { t: 0, b: { t: 2, i: [{ t: 3, v: "你在这个站点上已经用 nHentai 助手下载了 " }, { t: 4, k: "num" }, { t: 3, v: " 个本子" }] } },
import: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "导入" } },
export: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "导出" } },
clear: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "清空" } },
importTip: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "提示:导入会将导入的历史记录与现有历史记录合并,不会清空现有历史记录" } }
}
},
dialog: {
yes: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "是的" } },
no: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "算了" } },
action: {
getInfo: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "获取信息" } },
download: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "下载" } }
},
downloadAgainConfirm: ({ named }) => `《${named("title")}》已下载过${named("hasQueue") ? "或在队列中" : ""},你希望再次下载吗?`,
errorRetryConfirm: ({ linked, named }) => `${linked(`message.dialog.action.${named("action")}`)}发生错误,是否重试?`,
errorRetryTip: ({ linked, named }) => `${linked(`message.dialog.action.${named("action")}`)}发生错误,重试中……`,
downloadedTip: { t: 0, b: { t: 2, i: [{ t: 3, v: "《" }, { t: 4, k: "title" }, { t: 3, v: "》已经下载过或在队列中" }] } },
getMediaUrlTemplateFailed: { t: 0, b: { t: 2, i: [{ t: 3, v: "获取图片下载地址失败,请手动设置“" }, { t: 6, k: { t: 9, v: "setting.customDownloadUrl" } }, { t: 3, v: "”,或前往 github issue 或脚本页面反馈并附带当前网址" }] } }
},
button: {
download: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "下载" } },
downloading: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "下载中" } },
compressing: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "压缩中" } },
ignore: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "忽略" } },
unignore: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "不再忽略" } }
},
input: {
downloadSpecifiedPages: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "下载指定页面(例:-5,7-10,12,14,18-)" } }
},
confirmPopup: {
title: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "真的吗?" } },
yes: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "真的" } },
no: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "算了" } }
},
meta: {
id: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "ID" } },
parody: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "模仿" } },
character: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "角色" } },
tag: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "标签" } },
artist: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "作者" } },
group: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "团体" } },
language: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "语言" } },
category: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "分类" } },
page: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "页数" } },
upload: { t: 0, b: { t: 2, i: [{ t: 3 }], s: "上传时间" } }
}
};
registerMessageResolver(resolveValue);
const i18n = createI18n({
locale: settings.language,
fallbackLocale: "en",
messages: { en: resource$1, zh: resource }
}), { t: t$3 } = i18n.global, notyConfirmOption = {
type: "error",
layout: "bottomRight",
theme: "nest",
timeout: false,
closeWith: []
}, downloadAgainConfirm = async (title, hasQueue = false) => hasQueue && settings.autoCancelDownloadedManga ? (downloadedTip(title), false) : new Promise((resolve) => {
const n = new Noty({
...notyConfirmOption,
text: t$3("dialog.downloadAgainConfirm", { title, hasQueue }),
buttons: [
Noty.button(t$3("dialog.yes"), "btn btn-noty-blue btn-noty", () => {
n.close(), resolve(true);
}),
Noty.button(t$3("dialog.no"), "btn btn-noty-green btn-noty", () => {
n.close(), resolve(false);
})
]
});
n.show();
}), errorRetryConfirm = (action, noCb, yesCb) => {
if (settings.autoRetryWhenErrorOccurs) {
errorRetryTip(action), yesCb == null || yesCb();
return;
}
const n = new Noty({
...notyConfirmOption,
text: t$3("dialog.errorRetryConfirm", { action }),
buttons: [
Noty.button(t$3("dialog.no"), "btn btn-noty-blue btn-noty", () => {
n.close(), noCb == null || noCb();
}),
Noty.button(t$3("dialog.yes"), "btn btn-noty-green btn-noty", () => {
n.close(), yesCb == null || yesCb();
})
]
});
n.show();
}, downloadedTip = (title) => {
new Noty({
type: "info",
layout: "bottomRight",
theme: "nest",
closeWith: [],
timeout: 4e3,
text: t$3("dialog.downloadedTip", { title })
}).show();
}, errorRetryTip = (action) => {
new Noty({
type: "warning",
layout: "bottomRight",
theme: "nest",
closeWith: [],
timeout: 3e3,
text: t$3("dialog.errorRetryTip", { action })
}).show();
};
var StreamSaver = { exports: {} };
var hasRequiredStreamSaver;
function requireStreamSaver() {
return hasRequiredStreamSaver || (hasRequiredStreamSaver = 1, function(module2) {
((name, definition) => {
module2.exports = definition();
})("streamSaver", () => {
const global2 = typeof window == "object" ? window : this;
global2.HTMLElement || console.warn("streamsaver is meant to run on browsers main thread");
let mitmTransporter = null, supportsTransferable = false;
const test = (fn) => {
try {
fn();
} catch {
}
}, ponyfill = global2.WebStreamsPolyfill || {}, isSecureContext = global2.isSecureContext;
let useBlobFallback = /constructor/i.test(global2.HTMLElement) || !!global2.safari || !!global2.WebKitPoint;
const downloadStrategy = isSecureContext || "MozAppearance" in document.documentElement.style ? "iframe" : "navigate", streamSaver = {
createWriteStream,
WritableStream: global2.WritableStream || ponyfill.WritableStream,
supported: true,
version: { full: "2.0.5", major: 2, minor: 0, dot: 5 },
mitm: "https://jimmywarting.github.io/StreamSaver.js/mitm.html?version=2.0.0"
};
function makeIframe(src) {
if (!src) throw new Error("meh");
const iframe = document.createElement("iframe");
return iframe.hidden = true, iframe.src = src, iframe.loaded = false, iframe.name = "iframe", iframe.isIframe = true, iframe.postMessage = (...args) => iframe.contentWindow.postMessage(...args), iframe.addEventListener("load", () => {
iframe.loaded = true;
}, { once: true }), document.body.appendChild(iframe), iframe;
}
function makePopup(src) {
const options = "width=200,height=100", delegate = document.createDocumentFragment(), popup = {
frame: global2.open(src, "popup", options),
loaded: false,
isIframe: false,
isPopup: true,
remove() {
popup.frame.close();
},
addEventListener(...args) {
delegate.addEventListener(...args);
},
dispatchEvent(...args) {
delegate.dispatchEvent(...args);
},
removeEventListener(...args) {
delegate.removeEventListener(...args);
},
postMessage(...args) {
popup.frame.postMessage(...args);
}
}, onReady = (evt) => {
evt.source === popup.frame && (popup.loaded = true, global2.removeEventListener("message", onReady), popup.dispatchEvent(new Event("load")));
};
return global2.addEventListener("message", onReady), popup;
}
try {
new Response(new ReadableStream()), isSecureContext && !("serviceWorker" in navigator) && (useBlobFallback = !0);
} catch {
useBlobFallback = true;
}
test(() => {
const { readable } = new TransformStream(), mc = new MessageChannel();
mc.port1.postMessage(readable, [readable]), mc.port1.close(), mc.port2.close(), supportsTransferable = !0, Object.defineProperty(streamSaver, "TransformStream", {
configurable: !1,
writable: !1,
value: TransformStream
});
});
function loadTransporter() {
mitmTransporter || (mitmTransporter = isSecureContext ? makeIframe(streamSaver.mitm) : makePopup(streamSaver.mitm));
}
function createWriteStream(filename, options, size) {
let opts = {
size: null,
pathname: null,
writableStrategy: void 0,
readableStrategy: void 0
}, bytesWritten = 0, downloadUrl = null, channel = null, ts = null;
if (Number.isFinite(options) ? ([size, options] = [options, size], console.warn("[StreamSaver] Deprecated pass an object as 2nd argument when creating a write stream"), opts.size = size, opts.writableStrategy = options) : options && options.highWaterMark ? (console.warn("[StreamSaver] Deprecated pass an object as 2nd argument when creating a write stream"), opts.size = size, opts.writableStrategy = options) : opts = options || {}, !useBlobFallback) {
loadTransporter(), channel = new MessageChannel(), filename = encodeURIComponent(filename.replace(/\//g, ":")).replace(/['()]/g, escape).replace(/\*/g, "%2A");
const response = {
transferringReadable: supportsTransferable,
pathname: opts.pathname || Math.random().toString().slice(-6) + "/" + filename,
headers: {
"Content-Type": "application/octet-stream; charset=utf-8",
"Content-Disposition": "attachment; filename*=UTF-8''" + filename
}
};
opts.size && (response.headers["Content-Length"] = opts.size);
const args = [response, "*", [channel.port2]];
if (supportsTransferable) {
const transformer = downloadStrategy === "iframe" ? void 0 : {
// This transformer & flush method is only used by insecure context.
transform(chunk, controller) {
if (!(chunk instanceof Uint8Array))
throw new TypeError("Can only write Uint8Arrays");
bytesWritten += chunk.length, controller.enqueue(chunk), downloadUrl && (location.href = downloadUrl, downloadUrl = null);
},
flush() {
downloadUrl && (location.href = downloadUrl);
}
};
ts = new streamSaver.TransformStream(
transformer,
opts.writableStrategy,
opts.readableStrategy
);
const readableStream = ts.readable;
channel.port1.postMessage({ readableStream }, [readableStream]);
}
channel.port1.onmessage = (evt) => {
evt.data.download ? downloadStrategy === "navigate" ? (mitmTransporter.remove(), mitmTransporter = null, bytesWritten ? location.href = evt.data.download : downloadUrl = evt.data.download) : (mitmTransporter.isPopup && (mitmTransporter.remove(), mitmTransporter = null, downloadStrategy === "iframe" && makeIframe(streamSaver.mitm)), makeIframe(evt.data.download)) : evt.data.abort && (chunks = [], channel.port1.postMessage("abort"), channel.port1.onmessage = null, channel.port1.close(), channel.port2.close(), channel = null);
}, mitmTransporter.loaded ? mitmTransporter.postMessage(...args) : mitmTransporter.addEventListener("load", () => {
mitmTransporter.postMessage(...args);
}, { once: true });
}
let chunks = [];
return !useBlobFallback && ts && ts.writable || new streamSaver.WritableStream({
write(chunk) {
if (!(chunk instanceof Uint8Array))
throw new TypeError("Can only write Uint8Arrays");
if (useBlobFallback) {
chunks.push(chunk);
return;
}
channel.port1.postMessage(chunk), bytesWritten += chunk.length, downloadUrl && (location.href = downloadUrl, downloadUrl = null);
},
close() {
if (useBlobFallback) {
const blob2 = new Blob(chunks, { type: "application/octet-stream; charset=utf-8" }), link = document.createElement("a");
link.href = URL.createObjectURL(blob2), link.download = filename, link.click();
} else
channel.port1.postMessage("end");
},
abort() {
chunks = [], channel.port1.postMessage("abort"), channel.port1.onmessage = null, channel.port1.close(), channel.port2.close(), channel = null;
}
}, opts.writableStrategy);
}
return streamSaver;
});
}(StreamSaver)), StreamSaver.exports;
}
var StreamSaverExports = requireStreamSaver();
class MultiThread {
constructor(tasks, taskFunc, params) {
__publicField(this, "threads", []);
__publicField(this, "taskIndex", 0);
__publicField(this, "started", false);
__publicField(this, "aborted", false);
this.tasks = tasks, this.taskFunc = taskFunc, this.params = params;
}
startThread(threadId) {
let abortFunc;
const threadPromise = (async () => {
for (; !this.aborted; ) {
const i = this.taskIndex++;
if (i >= this.tasks.length) break;
const { abort, promise } = await this.taskFunc(this.tasks[i], threadId, this.params);
abortFunc = abort, await promise;
}
})();
return {
abort: () => abortFunc == null ? void 0 : abortFunc(),
promise: threadPromise
};
}
start() {
if (this.started) throw new Error("Multi-thread started.");
this.started = true;
for (let threadId = 0; threadId < settings.threadNum; threadId++)
this.threads.push(this.startThread(threadId));
return {
abort: () => {
this.aborted = true, this.threads.forEach(({ abort }) => abort());
},
promise: Promise.all(this.threads.map(({ promise }) => promise)).then()
};
}
}
class RequestAbortError extends Error {
constructor(url) {
super(`Request abort ${url}`);
}
}
const isAbortError = (e) => e instanceof RequestAbortError, requestArrayBufferGm = (params) => {
const { url: urlGetter, retry = 3, on404 } = params;
let abortFunc;
const dataPromise = new Promise((resolve, reject) => {
try {
const url = typeof urlGetter == "function" ? urlGetter() : urlGetter, req = _GM_xmlhttpRequest({
method: "GET",
url,
responseType: "arraybuffer",
onerror: (e) => {
retry === 0 ? (logger.error("Network error", url, e), reject(e)) : (logger.warn("Network error, retry", url, e), setTimeout(() => {
const { abort, dataPromise: dataPromise2 } = requestArrayBufferGm({ ...params, retry: retry - 1 });
abortFunc = abort, resolve(dataPromise2);
}, 1e3));
},
onload: (r) => {
const { status, response } = r;
if (status === 200) resolve(response);
else if (retry === 0) reject(r);
else {
const additionRetry = status === 404 ? on404 == null ? void 0 : on404(r.finalUrl) : !1;
logger.warn("Request error, retry", status, url, r), setTimeout(() => {
const { abort, dataPromise: dataPromise2 } = requestArrayBufferGm({
...params,
retry: retry - (additionRetry ? 0 : 1)
});
abortFunc = abort, resolve(dataPromise2);
}, 1e3);
}
}
});
abortFunc = () => {
req.abort(), logger.log("Request abort", url), reject(new RequestAbortError(url));
};
} catch (error) {
reject(error);
}
});
return {
abort: () => abortFunc == null ? void 0 : abortFunc(),
dataPromise
};
}, fetchText = (url) => fetch(url).then((r) => r.text()), fetchJSON = (url) => fetch(url).then((r) => r.json());
class Counter {
constructor(keys2) {
__publicField(this, "key");
__publicField(this, "countMap");
__publicField(this, "countKeys");
__publicField(this, "blackList", /* @__PURE__ */ new Set());
if (!keys2.length) throw new Error("Counter no key");
this.countKeys = [...keys2], this.reset();
}
get availableKeys() {
return without(this.countKeys, ...this.blackList);
}
add(key) {
this.countMap[key]++;
}
del(key) {
this.countMap[key]--;
}
ban(key) {
return this.blackList.add(key), this.availableKeys.length > 0;
}
getMin(key) {
return this.updateKey(key), minBy(this.availableKeys, (key2) => this.countMap[key2]);
}
getRandom(key) {
return this.updateKey(key), sample(this.availableKeys);
}
updateKey(key) {
this.key !== key && (this.key = key, this.reset());
}
reset() {
this.countMap = Object.fromEntries(this.countKeys.map((key) => [key, 0])), this.blackList.clear();
}
}
const loadHTML = (html) => {
const parser = new DOMParser();
return $(parser.parseFromString(html, "text/html").body);
};
class OrderCache extends Map {
constructor(maxSize) {
super();
__publicField(this, "order", []);
this.maxSize = maxSize;
}
set(key, value) {
if (!super.has(key)) {
if (super.size + 1 > this.maxSize) {
const delKey = this.order.shift();
delKey && super.delete(delKey);
}
this.order.push(key);
}
return super.set(key, value);
}
delete(key) {
const has = super.delete(key);
return has && this.order.splice(
this.order.findIndex((val) => val === key),
1
), has;
}
clear() {
super.clear(), this.order = [];
}
}
var NHentaiImgExt = /* @__PURE__ */ ((NHentaiImgExt2) => (NHentaiImgExt2.j = "jpg", NHentaiImgExt2.p = "png", NHentaiImgExt2.g = "gif", NHentaiImgExt2.w = "webp", NHentaiImgExt2))(NHentaiImgExt || {});
const nHentaiImgExtReversed = invert(NHentaiImgExt), getTypeFromExt = (ext) => nHentaiImgExtReversed[ext.toLowerCase()], nHentaiDownloadHostCounter = new Counter(nHentaiDownloadHosts), getNHentaiDownloadHost = (mid) => {
switch (settings.nHentaiDownloadHost) {
case NHentaiDownloadHostSpecial.RANDOM:
return nHentaiDownloadHostCounter.getRandom(mid);
case NHentaiDownloadHostSpecial.BALANCE:
return nHentaiDownloadHostCounter.getMin(mid);
default:
return settings.nHentaiDownloadHost;
}
}, getMediaDownloadUrl = (mid, filename) => `https://${getNHentaiDownloadHost(mid)}/galleries/${mid}/${filename}`, getMediaDownloadUrlByWebpage = async (gid2, mid, filename) => (await getCompliedMediaUrlTemplate(gid2))({ mid, filename }), getGalleryFromApi = (gid2) => {
const url = `https://nhentai.net/api/gallery/${gid2}`;
return fetchJSON(url);
}, fixGalleryObj = (gallery2, gid2) => (gid2 && (gallery2.id = Number(gid2)), Array.isArray(gallery2.images.pages) || (gallery2.images.pages = Object.values(gallery2.images.pages)), gallery2), getGalleryFromWebpage = async (gid) => {
var _a, _b;
let doc = document;
if (!IS_PAGE_MANGA_DETAIL) {
const html = await fetchText(`/g/${gid}`);
doc = new DOMParser().parseFromString(html, "text/html");
}
const match = (_a = /gallery(\(\{[\s\S]+\}\));/.exec(doc.body.innerHTML)) == null ? void 0 : _a[1];
if (match)
try {
const gallery = eval(match);
return logger.log("get gallery by script tag success"), fixGalleryObj(gallery, gid);
} catch {
logger.warn("get gallery by script tag failed");
}
const $doc = $(doc.body), english = $doc.find(selector.englishTitle).text(), japanese = $doc.find(selector.japaneseTitle).text(), pages = [];
let mediaId = "";
const xxxPageMatch = tryParseJSON((_b = /'({"fl":{"1":"[^']+)'/.exec(doc.body.innerHTML)) == null ? void 0 : _b[1]);
if (xxxPageMatch) {
const img = $doc.find(selector.thumbnailContainerImage)[0], src = img.dataset.src ?? img.src, match2 = /\/([0-9a-z]+)\/(\d+)t?\.([^/]+)$/i.exec(src);
match2 && (mediaId = match2[1]), forEach(xxxPageMatch.fl, (data, index) => {
const [type, width, height] = data.split(",");
pages[Number(index) - 1] = {
t: type,
w: width ? Number(width) : void 0,
h: height ? Number(height) : void 0
};
});
} else
$doc.find(selector.thumbnailContainerImage).each((i, img) => {
const src = img.dataset.src ?? img.src, width = img.getAttribute("width"), height = img.getAttribute("height"), match2 = /\/([0-9a-z]+)\/(\d+)t?\.([^/]+)$/i.exec(src);
if (!match2) return;
const [, mid, index, ext] = match2;
mediaId || (mediaId = mid);
const t2 = getTypeFromExt(ext);
t2 && (pages[Number(index) - 1] = {
t: t2,
w: width ? Number(width) : void 0,
h: height ? Number(height) : void 0
});
});
if (!english && !japanese || !mediaId || !pages.length)
throw new Error("Get gallery info error.");
const getTags = (type, elContains) => {
const $tags = $doc.find(selector.tag(elContains));
return filter(
Array.from($tags).map((el) => {
var _a2, _b2;
if (!(el instanceof HTMLElement)) return;
const name = (_a2 = el.querySelector(selector.tagName)) == null ? void 0 : _a2.innerText.trim(), count = (_b2 = el.querySelector(selector.tagCount)) == null ? void 0 : _b2.innerText.trim();
return name ? {
type,
name,
url: el.getAttribute("href") || void 0,
count: count ? Number(count) : void 0
} : void 0;
})
);
}, tags = [
...getTags("parody", "Parodies"),
...getTags("character", "Characters"),
...getTags("tag", "Tags"),
...getTags("artist", "Artists"),
...getTags("group", "Groups"),
...getTags("language", "Languages"),
...getTags("category", "Categories")
], pageNum = Number($doc.find(selector.pagesTag).text() || 0);
if (pageNum > 0 && pageNum !== pages.length) {
const defaultPage = { t: "j" };
for (let i = pages.length; i < pageNum; i++)
pages.push(defaultPage);
}
const uploadDateStr = $doc.find(selector.uploadDateTag).attr("datetime"), uploadDate = uploadDateStr ? new Date(uploadDateStr) : void 0;
return {
id: Number(gid),
media_id: mediaId,
title: {
english: english || japanese,
japanese: japanese || english,
pretty: ""
},
images: {
pages
},
tags,
num_pages: pageNum || pages.length,
upload_date: uploadDate && String(uploadDate) !== "Invalid Date" ? Math.floor(uploadDate.getTime() / 1e3) : void 0
};
}, getCFNameArtists = (tags2) => {
const artists = map(
tags2.filter(({ name, type }) => type === "artist" && name),
"name"
);
if (!artists.length) return "none";
const maxNum = settings.filenameMaxArtistsNumber;
return maxNum && artists.length > maxNum ? "various" : artists.join(settings.filenameArtistsSeparator);
}, galleryCache = new OrderCache(100), getGallery = async (gid2) => {
gid2 = String(gid2);
const cached = galleryCache.get(gid2);
if (cached) return cached;
const gallery2 = IS_NHENTAI ? await getGalleryFromApi(gid2) : await getGalleryFromWebpage(gid2);
return galleryCache.set(gid2, gallery2), gallery2;
}, getGalleryInfo = async (gid2) => {
const gallery2 = await (async () => {
var _a;
if (gid2) return getGallery(gid2);
const gidFromUrl = (_a = /^\/g\/(\d+)/.exec(location.pathname)) == null ? void 0 : _a[1], localGallery = _unsafeWindow._gallery ?? _unsafeWindow.gallery;
if (localGallery) return fixGalleryObj(localGallery, gidFromUrl);
if (gidFromUrl) return getGallery(gidFromUrl);
throw new Error("Cannot get gallery info.");
})(), {
id,
media_id,
title,
images: { pages: pages2 },
num_pages,
tags: tags2,
upload_date
} = gallery2, { english: english2, japanese: japanese2, pretty } = title, infoPages = pages2.map(({ t: t2, w, h: h2 }, i) => ({ i: i + 1, t: NHentaiImgExt[t2], w, h: h2 })), info = {
gid: id,
mid: media_id,
title,
pages: infoPages,
cfName: removeIllegalFilenameChars(
compileTemplate(settings.compressionFilename)({
english: applyTitleReplacement(english2 || japanese2),
japanese: applyTitleReplacement(japanese2 || english2),
pretty: applyTitleReplacement(pretty || english2 || japanese2),
id,
pages: num_pages,
artist: getCFNameArtists(tags2)
})
),
tags: tags2,
uploadDate: upload_date,
gallery: gallery2
};
return logger.log("info", info), info;
}, fetchMediaUrlTemplate = async (gid2) => {
var _a, _b, _c;
const onlineViewUrl = ((_b = (_a = document.querySelector(selector.galleryHref)) == null ? void 0 : _a.getAttribute("href")) == null ? void 0 : _b.replace(/\/+$/, "").replace(/\d+$/, gid2).concat("/1")) ?? ((_c = document.querySelector(selector.thumbnailHref)) == null ? void 0 : _c.getAttribute("href"));
if (!onlineViewUrl)
throw new Error("get media url failed: cannot find a gallery");
logger.log(`fetching media url template by ${onlineViewUrl}`);
const onlineViewHtml = await fetchText(onlineViewUrl), $img = loadHTML(onlineViewHtml).find(selector.mediaImage), imgSrc = $img.attr("data-src") || $img.attr("src");
if (!imgSrc)
throw new Error("get media url failed: cannot find an image src");
const template2 = imgSrc.replace(/\/[0-9a-z]+\/\d+\.[^/]+$/i, "/{{mid}}/{{filename}}");
return MEDIA_URL_TEMPLATE_MAY_CHANGE || _GM_setValue(MEDIA_URL_TEMPLATE_KEY, template2), template2;
}, fetchThumbMediaUrlTemplate = async (gid2) => {
var _a, _b;
const detailUrl = (_b = (_a = document.querySelector(selector.galleryHref)) == null ? void 0 : _a.getAttribute("href")) == null ? void 0 : _b.replace(/\d+(\/)?$/, `${gid2}$1`);
if (!detailUrl)
throw new Error("get detail url failed: cannot find a gallery");
logger.log(`fetching thumb media url template by ${detailUrl}`);
const detailHtml = await fetchText(detailUrl), $img = loadHTML(detailHtml).find(selector.thumbnailContainerImage), imgSrc = $img.attr("data-src") || $img.attr("src");
if (!imgSrc)
throw new Error("get thumb media url failed: cannot find an image src");
const template2 = imgSrc.replace(/\/[0-9a-z]+\/\d+t\.[^/]+$/i, "/{{mid}}/{{filename}}");
return _GM_setValue(THUMB_MEDIA_URL_TEMPLATE_KEY, template2), template2;
}, mediaUrlTemplateGidCache = {}, getMediaUrlTemplate = async (getter, cacheKey, gid2) => {
if (MEDIA_URL_TEMPLATE_MAY_CHANGE && (mediaUrlTemplateGidCache[cacheKey] || (mediaUrlTemplateGidCache[cacheKey] = /* @__PURE__ */ new Map()), mediaUrlTemplateGidCache[cacheKey].has(gid2)))
return mediaUrlTemplateGidCache[cacheKey].get(gid2);
try {
const promise = getter(gid2);
MEDIA_URL_TEMPLATE_MAY_CHANGE && !mediaUrlTemplateGidCache[cacheKey].has(gid2) && mediaUrlTemplateGidCache[cacheKey].set(gid2, promise);
const template2 = await promise;
return logger.log(`use media url template: ${template2}`), template2;
} catch (error) {
if (logger.error(error), MEDIA_URL_TEMPLATE_MAY_CHANGE)
mediaUrlTemplateGidCache[cacheKey].delete(gid2);
else {
const cachedTemplate = _GM_getValue(cacheKey);
if (cachedTemplate)
return logger.warn(`try to use cached media url template: ${cachedTemplate}`), cachedTemplate;
}
throw error;
}
}, getCompliedMediaUrlTemplate = (MEDIA_URL_TEMPLATE_MAY_CHANGE ? identity : once)(
async (gid2) => compileTemplate(await getMediaUrlTemplate(fetchMediaUrlTemplate, MEDIA_URL_TEMPLATE_KEY, gid2))
), getCompliedThumbMediaUrlTemplate = (MEDIA_URL_TEMPLATE_MAY_CHANGE ? identity : once)(
async (gid2) => compileTemplate(
IS_NHENTAI ? "https://t3.nhentai.net/galleries/{{mid}}/{{filename}}" : await getMediaUrlTemplate(fetchThumbMediaUrlTemplate, THUMB_MEDIA_URL_TEMPLATE_KEY, gid2)
)
), applyTitleReplacement = (title) => validTitleReplacement.value.length ? validTitleReplacement.value.reduce((pre, { from, to, regexp }) => {
try {
return pre.replaceAll(regexp ? new RegExp(from, "g") : from, to);
} catch {
return pre;
}
}, title) : title;
let textareaEl;
const encodeHtml = (text) => {
textareaEl || (textareaEl = document.createElement("textarea")), textareaEl.innerText = text;
const encodedText = textareaEl.innerHTML;
return textareaEl.innerHTML = "", encodedText;
}, encodeXml = (text) => encodeHtml(text).replace(/ /g, " "), langMap = {
chinese: "zh",
english: "en",
japanese: "ja"
};
class ComicInfoXmlBuilder {
constructor(info) {
__publicField(this, "serializer", new XMLSerializer());
__publicField(this, "doc", document.implementation.createDocument(null, "ComicInfo"));
if (this.setRootNS(), this.appendElement(
"Title",
settings.metaFileTitleLanguage in info.title ? info.title[settings.metaFileTitleLanguage] : info.title.english
), this.appendElement(
"Notes",
`Created by nHentai Helper (Tsuk1ko/nhentai-helper) on ${(/* @__PURE__ */ new Date()).toISOString()}`
), info.uploadDate) {
const date = new Date(info.uploadDate * 1e3);
this.appendElement("Year", date.getUTCFullYear()), this.appendElement("Month", date.getUTCMonth() + 1), this.appendElement("Day", date.getUTCDate());
}
const getTags2 = (type) => info.tags.filter((t2) => t2.type === type), artistTags = getTags2("artist");
artistTags.length && this.appendElement("Writer", map(artistTags, "name").join(", "));
const tags2 = getTags2("tag");
tags2.length && this.appendElement("Tags", map(tags2, "name").join(", ")), this.appendElement("Web", `${location.origin}/g/${info.gid}`), this.appendElement("PageCount", info.pages.length);
const languageTag = info.tags.find(({ type, name }) => type === "language" && name in langMap);
languageTag && this.appendElement("LanguageISO", langMap[languageTag.name]), this.appendElement("Format", /\[digital\]/i.test(info.title.english) ? "Digital" : "TBP"), this.appendElement("Manga", "Yes");
const characterTags = getTags2("character");
characterTags.length && this.appendElement("Characters", map(characterTags, "name").join(", "));
const pagesEl = this.createElement("Pages"), pageEls = info.pages.map(
({ i, w, h: h2 }) => this.createElement("Page", void 0, { Image: i, ImageWidth: w, ImageHeight: h2 })
);
pagesEl.append(...pageEls), this.root.append(pagesEl);
}
build() {
return `<?xml version="1.0" encoding="utf-8"?>
${this.serializer.serializeToString(this.doc)}`;
}
get root() {
return this.doc.documentElement;
}
setRootNS() {
this.root.setAttribute("xmlns:xsd", "http://www.w3.org/2001/XMLSchema"), this.root.setAttribute("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance");
}
createElement(name, value, attrs) {
const el = this.doc.createElement(name);
return isNil(value) || (el.innerHTML = encodeXml(String(value))), attrs && forEach(attrs, (v, k) => {
isNil(v) || el.setAttribute(k, String(v));
}), el;
}
appendElement(name, value, attrs) {
this.root.append(this.createElement(name, value, attrs));
}
}
class EzeInfoJsonBuilder {
constructor(info) {
__publicField(this, "data");
var _a;
const date = info.uploadDate ? new Date(info.uploadDate * 1e3) : void 0;
this.data = {
gallery_info: {
title: info.title.english,
title_title_original: info.title.japanese,
link: `${location.origin}/g/${info.gid}`,
category: (_a = info.tags.find(({ type }) => type === "category")) == null ? void 0 : _a.name,
tags: mapValues(groupBy(info.tags, "type"), (tags2) => map(tags2, "name")),
...this.getLanguageInfo(info),
upload_date: date ? [
date.getUTCFullYear(),
date.getUTCMonth() + 1,
date.getUTCDate(),
date.getUTCHours(),
date.getUTCMinutes(),
date.getUTCSeconds()
] : void 0,
source: {
site: location.origin,
gid: info.gid
}
}
};
}
build() {
return JSON.stringify(this.data);
}
getLanguageInfo(info) {
let language, translated = false;
return info.tags.filter(({ type }) => type === "language").forEach(({ name }) => {
if (name === "translated") {
translated = true;
return;
}
language = name;
}), { language, translated };
}
}
const metaBuilderMap = {
ComicInfoXml: { name: "ComicInfo.xml", Builder: ComicInfoXmlBuilder },
EzeInfoJson: { name: "info.json", Builder: EzeInfoJsonBuilder }
}, generateMetaFiles = (info) => {
if (!settings.addMetaFile.length) return [];
const files = [];
for (const key of settings.addMetaFile)
if (key in metaBuilderMap) {
const { name, Builder } = metaBuilderMap[key];
files.push({
name,
data: new Builder(info).build()
});
}
return files;
}, jsContent = '(function(){"use strict";const M=Symbol("Comlink.proxy"),N=Symbol("Comlink.endpoint"),H=Symbol("Comlink.releaseProxy"),x=Symbol("Comlink.finalizer"),d=Symbol("Comlink.thrown"),S=e=>typeof e=="object"&&e!==null||typeof e=="function",I={canHandle:e=>S(e)&&e[M],serialize(e){const{port1:t,port2:r}=new MessageChannel;return P(e,t),[r,[r]]},deserialize(e){return e.start(),_(e)}},L={canHandle:e=>S(e)&&d in e,serialize({value:e}){let t;return e instanceof Error?t={isError:!0,value:{message:e.message,name:e.name,stack:e.stack}}:t={isError:!1,value:e},[t,[]]},deserialize(e){throw e.isError?Object.assign(new Error(e.value.message),e.value):e.value}},T=new Map([["proxy",I],["throw",L]]);function V(e,t){for(const r of e)if(t===r||r==="*"||r instanceof RegExp&&r.test(t))return!0;return!1}function P(e,t=globalThis,r=["*"]){t.addEventListener("message",function c(n){if(!n||!n.data)return;if(!V(r,n.origin)){console.warn(`Invalid origin \'${n.origin}\' for comlink proxy`);return}const{id:s,type:y,path:l}=Object.assign({path:[]},n.data),u=(n.data.argumentList||[]).map(g);let a;try{const o=l.slice(0,-1).reduce((i,w)=>i[w],e),f=l.reduce((i,w)=>i[w],e);switch(y){case"GET":a=f;break;case"SET":o[l.slice(-1)[0]]=g(n.data.value),a=!0;break;case"APPLY":a=f.apply(o,u);break;case"CONSTRUCT":{const i=new f(...u);a=B(i)}break;case"ENDPOINT":{const{port1:i,port2:w}=new MessageChannel;P(e,w),a=z(i,[i])}break;case"RELEASE":a=void 0;break;default:return}}catch(o){a={value:o,[d]:0}}Promise.resolve(a).catch(o=>({value:o,[d]:0})).then(o=>{const[f,i]=p(o);t.postMessage(Object.assign(Object.assign({},f),{id:s}),i),y==="RELEASE"&&(t.removeEventListener("message",c),C(t),x in e&&typeof e[x]=="function"&&e[x]())}).catch(o=>{const[f,i]=p({value:new TypeError("Unserializable return value"),[d]:0});t.postMessage(Object.assign(Object.assign({},f),{id:s}),i)})}),t.start&&t.start()}function W(e){return e.constructor.name==="MessagePort"}function C(e){W(e)&&e.close()}function _(e,t){const r=new Map;return e.addEventListener("message",function(c){const{data:n}=c;if(!n||!n.id)return;const s=r.get(n.id);if(s)try{s(n)}finally{r.delete(n.id)}}),k(e,r,[],t)}function b(e){if(e)throw new Error("Proxy has been released and is not useable")}function A(e){return m(e,new Map,{type:"RELEASE"}).then(()=>{C(e)})}const h=new WeakMap,E="FinalizationRegistry"in globalThis&&new FinalizationRegistry(e=>{const t=(h.get(e)||0)-1;h.set(e,t),t===0&&A(e)});function F(e,t){const r=(h.get(t)||0)+1;h.set(t,r),E&&E.register(e,t,e)}function j(e){E&&E.unregister(e)}function k(e,t,r=[],c=function(){}){let n=!1;const s=new Proxy(c,{get(y,l){if(b(n),l===H)return()=>{j(s),A(e),t.clear(),n=!0};if(l==="then"){if(r.length===0)return{then:()=>s};const u=m(e,t,{type:"GET",path:r.map(a=>a.toString())}).then(g);return u.then.bind(u)}return k(e,t,[...r,l])},set(y,l,u){b(n);const[a,o]=p(u);return m(e,t,{type:"SET",path:[...r,l].map(f=>f.toString()),value:a},o).then(g)},apply(y,l,u){b(n);const a=r[r.length-1];if(a===N)return m(e,t,{type:"ENDPOINT"}).then(g);if(a==="bind")return k(e,t,r.slice(0,-1));const[o,f]=O(u);return m(e,t,{type:"APPLY",path:r.map(i=>i.toString()),argumentList:o},f).then(g)},construct(y,l){b(n);const[u,a]=O(l);return m(e,t,{type:"CONSTRUCT",path:r.map(o=>o.toString()),argumentList:u},a).then(g)}});return F(s,e),s}function v(e){return Array.prototype.concat.apply([],e)}function O(e){const t=e.map(p);return[t.map(r=>r[0]),v(t.map(r=>r[1]))]}const R=new WeakMap;function z(e,t){return R.set(e,t),e}function B(e){return Object.assign(e,{[M]:!0})}function p(e){for(const[t,r]of T)if(r.canHandle(e)){const[c,n]=r.serialize(e);return[{type:"HANDLER",name:t,value:c},n]}return[{type:"RAW",value:e},R.get(e)||[]]}function g(e){switch(e.type){case"HANDLER":return T.get(e.name).deserialize(e.value);case"RAW":return e.value}}function m(e,t,r,c){return new Promise(n=>{const s=D();t.set(s,n),e.start&&e.start(),e.postMessage(Object.assign({id:s},r),c)})}function D(){return new Array(4).fill(0).map(()=>Math.floor(Math.random()*Number.MAX_SAFE_INTEGER).toString(16)).join("-")}P({convertWebpTo:async(e,t,r)=>{const c=await createImageBitmap(new Blob([e],{type:"image/webp"})),n=new OffscreenCanvas(c.width,c.height);n.getContext("bitmaprenderer").transferFromImageBitmap(c);const s=await(await n.convertToBlob({type:t,quality:r})).arrayBuffer();return z({buffer:s,type:t},[s])}})})();\n', blob = typeof self < "u" && self.Blob && new Blob([jsContent], { type: "text/javascript;charset=utf-8" });
function WorkerWrapper(options) {
let objURL;
try {
if (objURL = blob && (self.URL || self.webkitURL).createObjectURL(blob), !objURL) throw "";
const worker = new Worker(objURL, {
name: options == null ? void 0 : options.name
});
return worker.addEventListener("error", () => {
(self.URL || self.webkitURL).revokeObjectURL(objURL);
}), worker;
} catch {
return new Worker(
"data:text/javascript;charset=utf-8," + encodeURIComponent(jsContent),
{
name: options == null ? void 0 : options.name
}
);
} finally {
objURL && (self.URL || self.webkitURL).revokeObjectURL(objURL);
}
}
const mimeToExt = {
[MIME.JPG]: "jpg",
[MIME.PNG]: "png"
};
var _worker;
class ImgConverter {
constructor() {
__privateAdd(this, _worker);
}
async convertWebpTo(...args) {
const worker = await this.getWorker(), { buffer, type } = await worker.convertWebpTo(...args);
return {
buffer,
ext: mimeToExt[type] || "unknown"
};
}
async getWorker() {
return __privateGet(this, _worker) || __privateSet(this, _worker, this.createWorker()), __privateGet(this, _worker);
}
async createWorker() {
return wrap(new WorkerWrapper());
}
}
_worker = new WeakMap();
const imgConverter = new ImgConverter(), downloadGalleryByInfo = async (info, { progressDisplayController, rangeCheckers } = {}) => {
info.done = 0;
let { mid, pages: pages2, cfName } = info.gallery;
if (customFilenameFunction.value) {
const result = customFilenameFunction.value(cfName, info.gallery.gallery);
if (typeof result != "string" || !result.trim())
throw new Error(`Custom filename function illegal result: ${result}`);
cfName = removeIllegalFilenameChars(result);
}
rangeCheckers != null && rangeCheckers.length && (pages2 = pages2.filter(({ i }) => rangeCheckers.some((check) => check(i))));
let aborted = false;
info.cancel = () => {
aborted = true, progressDisplayController == null || progressDisplayController.reset();
}, progressDisplayController == null || progressDisplayController.bindInfo(info), progressDisplayController == null || progressDisplayController.updateProgress();
const zip = new JSZip(), metaFiles = generateMetaFiles(info.gallery);
metaFiles.length && metaFiles.forEach(({ name, data }) => {
zip.file(name, data);
});
const { convertWebpTo, convertWebpQuality } = settings, downloadTask = async (page, threadID, { filenameLength, customDownloadUrl }) => {
if (info.error) return { abort: () => {
}, promise: Promise.resolve() };
const useCounter = IS_NHENTAI && (settings.nHentaiDownloadHost === NHentaiDownloadHostSpecial.BALANCE || settings.nHentaiDownloadHost === NHentaiDownloadHostSpecial.RANDOM), usedCounterKeys = [];
let urlGetterError;
const urlGetter = await (async () => {
if (customDownloadUrl)
return compileTemplate(customDownloadUrl)({ mid, index: page.i, ext: page.t });
const filename = `${page.i}.${page.t}`;
return IS_NHENTAI && settings.nHentaiDownloadHost !== NHentaiDownloadHostSpecial.AUTO ? useCounter ? () => {
const url = getMediaDownloadUrl(mid, filename);
if (logger.log(`[${threadID}] ${url}`), settings.nHentaiDownloadHost === NHentaiDownloadHostSpecial.BALANCE) {
const counterKey = new URL(url).host;
usedCounterKeys.push(counterKey), nHentaiDownloadHostCounter.add(counterKey);
}
return url;
} : getMediaDownloadUrl(mid, filename) : getMediaDownloadUrlByWebpage(String(info.gallery.gid), mid, filename);
})().catch((e) => {
urlGetterError = e;
});
if (!urlGetter || urlGetterError)
throw info.error = true, urlGetterError && urlGetterError instanceof Error ? urlGetterError : new Error("No available url");
typeof urlGetter != "function" && logger.log(`[${threadID}] ${urlGetter}`);
const { abort: abort2, dataPromise } = requestArrayBufferGm({
url: urlGetter,
on404: useCounter ? (url) => {
const counterKey = new URL(url).host;
return logger.warn(`[${threadID}] ban ${counterKey} because 404`), nHentaiDownloadHostCounter.ban(counterKey);
} : void 0
});
return {
abort: () => {
logger.log(`[${threadID}] abort`), abort2();
},
promise: dataPromise.then(async (data) => {
if (data) {
const filename = String(page.i).padStart(filenameLength || 0, "0");
if (page.t === NHentaiImgExt.w && convertWebpTo) {
const { buffer, ext } = await imgConverter.convertWebpTo(
data,
convertWebpTo,
convertWebpQuality / 100
);
zip.file(`${filename}.${ext}`, buffer);
} else zip.file(`${filename}.${page.t}`, data);
}
info.done++, progressDisplayController == null || progressDisplayController.updateProgress();
}).catch((e) => {
if (!isAbortError(e))
throw info.error = true, e;
}).finally(() => {
usedCounterKeys.length && usedCounterKeys.forEach((key) => {
nHentaiDownloadHostCounter.del(key);
});
})
};
}, multiThread = new MultiThread(pages2, downloadTask, {
filenameLength: settings.filenameLength === "auto" ? Math.ceil(Math.log10(Math.max(...pages2.map(({ i }) => Number(i))))) : settings.filenameLength,
customDownloadUrl: settings.customDownloadUrl
}), { abort, promise } = multiThread.start();
if (info.cancel = () => {
aborted = true, abort(), progressDisplayController == null || progressDisplayController.reset();
}, aborted || await promise, !aborted)
return async () => {
info.compressing = true, progressDisplayController == null || progressDisplayController.updateProgress(), logger.log("start compressing", cfName);
let lastZipFile = "";
const onCompressionUpdate = ({ workerId, percent, currentFile }) => {
lastZipFile !== currentFile && currentFile && (lastZipFile = currentFile, logger.log(`[${workerId}] compressing ${percent.toFixed(2)}%`, currentFile)), info.compressingPercent = percent.toFixed(2), progressDisplayController == null || progressDisplayController.updateProgress();
};
if (settings.streamDownload) {
logger.log("stream mode on");
const fileStream = StreamSaverExports.createWriteStream(cfName);
await (await zip.generateStream(getCompressionOptions(), onCompressionUpdate)).pipeTo(fileStream);
} else {
const data = await zip.generateAsync(getCompressionOptions(), onCompressionUpdate);
FileSaver_minExports.saveAs(new File([data], cfName, { type: "application/zip" }));
}
logger.log("completed", cfName), progressDisplayController == null || progressDisplayController.complete(), progressDisplayController == null || progressDisplayController.unbindInfo();
};
}, addDownloadGalleryTask = (gallery2, { progressDisplayController, markGalleryDownloaded } = {}) => {
const info = createMangaDownloadInfo(gallery2, true);
info.cancel = () => {
progressDisplayController == null || progressDisplayController.reset();
}, dlQueue.push(async () => {
const zipFunc = await downloadGalleryByInfo(info, { progressDisplayController }).catch((e) => {
throw progressDisplayController == null || progressDisplayController.error(), errorRetryConfirm(
ErrorAction.DOWNLOAD,
() => {
dlQueue.skipFromError().catch(logger.error);
},
() => {
info.error = false, dlQueue.restartFromError().catch(logger.error);
}
), e;
});
zipFunc && (zipQueue.push(async () => {
try {
await zipFunc(), markAsDownloaded(gallery2.gid, gallery2.title), markGalleryDownloaded == null || markGalleryDownloaded();
} catch (error) {
error || logger.warn("user abort stream download"), logger.error(error), progressDisplayController == null || progressDisplayController.error();
}
}, info), zipQueue.start().catch(logger.error));
}, info), dlQueue.start().catch(logger.error);
}, defaultClassName = {
greyButton: "btn btn-secondary"
}, siteMap = {
"nhentai.xxx": {
greyButton: "mbtn grey"
}
}, className = { ...defaultClassName, ...siteMap[location.hostname] }, { t: t$2 } = i18n.global;
class ProgressDisplayController {
constructor(enableHeadTxt = false, docTitle) {
__publicField(this, "downloadBtn");
__publicField(this, "btnTxt");
__publicField(this, "info");
this.enableHeadTxt = enableHeadTxt, this.docTitle = docTitle, this.btnTxt = /* @__PURE__ */ coreExports.h("span", { class: "download-zip-txt" }, this.defaultBtnText()), this.downloadBtn = /* @__PURE__ */ coreExports.h("button", { class: `${className.greyButton} nhentai-helper-btn download-zip-btn` }, /* @__PURE__ */ coreExports.h("i", { class: "fa fa-download" }), " ", this.btnTxt);
}
get compressingHeadText() {
return this.enableHeadTxt ? `${t$2("button.compressing")} ${getDownloadExt()} ` : "";
}
get downloadingHeadText() {
return this.enableHeadTxt ? `${t$2("button.downloading")} ${getDownloadExt()} ` : "";
}
defaultBtnText(suffix) {
return this.enableHeadTxt ? `${t$2("button.download")} ${getDownloadExt()}${suffix ? ` ${suffix}` : ""}` : suffix ?? "";
}
bindInfo(info) {
this.info = info;
}
unbindInfo() {
this.info = void 0;
}
lockBtn(text) {
this.downloadBtn.setAttribute("disabled", "disabled"), text && (this.btnTxt.innerText = text);
}
releaseBtn() {
this.downloadBtn.removeAttribute("disabled");
}
complete() {
this.setDocTitle("✓"), this.btnTxt.innerText = this.defaultBtnText("✓"), this.releaseBtn();
}
reset() {
this.setDocTitle(), this.btnTxt.innerText = this.defaultBtnText(), this.releaseBtn();
}
error() {
this.releaseBtn(), this.btnTxt.innerText = "Error", this.setDocTitle("×");
}
updateProgress() {
if (!this.info) return;
const { done, compressing, compressingPercent } = this.info;
if (compressing)
this.setDocTitle(`${compressingPercent}%`), this.btnTxt.innerText = `${this.compressingHeadText}${compressingPercent}%`;
else {
const total = this.info.gallery.pages.length;
this.setDocTitle(`${done}/${total}`), this.btnTxt.innerText = `${this.downloadingHeadText}${done}/${total}`;
}
}
setDocTitle(prefix) {
this.docTitle && (document.title = prefix ? `[${prefix}] ${this.docTitle}` : this.docTitle);
}
}
const { t: t$1 } = i18n.global;
class IgnoreController {
constructor(text = true, status = false) {
__publicField(this, "ignoreBtn");
__publicField(this, "icon");
__publicField(this, "text");
this.status = status, this.icon = /* @__PURE__ */ coreExports.h("i", { class: this.iconClass }), text && (this.text = /* @__PURE__ */ coreExports.h("span", null, this.btnText)), this.ignoreBtn = /* @__PURE__ */ coreExports.h("button", { class: `${className.greyButton} nhentai-helper-btn ignore-btn` }, this.icon, " ", this.text);
}
setStatus(status) {
this.status = status, this.updateBtn();
}
getStatus() {
return this.status;
}
get iconClass() {
return this.status ? "fa fa-eye-slash" : "fa fa-eye";
}
get btnText() {
return this.status ? t$1("button.unignore") : t$1("button.ignore");
}
updateBtn() {
this.icon.className = this.iconClass, this.text && (this.text.innerText = this.btnText);
}
}
const { t } = i18n.global, initDetailPage = async () => {
const progressDisplayController = new ProgressDisplayController(true, document.title), { downloadBtn } = progressDisplayController, pagesInput = /* @__PURE__ */ coreExports.h(
"input",
{
class: "pages-input",
placeholder: t("input.downloadSpecifiedPages"),
onKeydown: (e) => {
e.key === "Enter" && downloadBtn.click();
}
}
);
$(selector.infoButtons).append(downloadBtn).after(pagesInput);
let ignoreController;
if (settings.showIgnoreButton) {
const gallery2 = await getGalleryInfo(), isDownloaded = await isDownloadedByGid(gallery2.gid);
ignoreController = new IgnoreController(true, isDownloaded);
const { ignoreBtn } = ignoreController;
ignoreBtn.addEventListener("click", () => {
const ignore = ignoreController.getStatus();
ignore ? unmarkAsDownloaded(gallery2.gid, gallery2.title) : markAsDownloaded(gallery2.gid, gallery2.title), ignoreController.setStatus(!ignore);
}), $(selector.infoButtons).append(ignoreBtn);
}
downloadBtn.addEventListener("click", async () => {
var _a;
const gallery2 = await getGalleryInfo(), rangeCheckers = pagesInput.value.split(",").filter((range) => /^\s*(?:\d+(?:\s*-\s*)?\d*|-\d+)\s*$/.test(range)).map((range) => {
const [start, end] = range.split("-").map((num) => parseInt(num));
return Number.isNaN(start) ? (page) => page <= end : end === void 0 ? (page) => page === start : Number.isNaN(end) ? (page) => page >= start : (page) => start <= page && page <= end;
});
progressDisplayController.lockBtn();
try {
if ((await isDownloadedByGid(gallery2.gid) || await isDownloadedByTitle(gallery2.title)) && !await downloadAgainConfirm(gallery2.title.japanese || gallery2.title.english)) {
progressDisplayController.reset(), markAsDownloaded(gallery2.gid, gallery2.title), ignoreController == null || ignoreController.setStatus(!0);
return;
}
await ((_a = await downloadGalleryByInfo(createMangaDownloadInfo(gallery2), {
progressDisplayController,
rangeCheckers
})) == null ? void 0 : _a()), markAsDownloaded(gallery2.gid, gallery2.title), ignoreController == null || ignoreController.setStatus(!0);
} catch (error) {
progressDisplayController.error(), logger.error(error);
}
}), applyAutoShowAll();
}, applyAutoShowAll = () => {
settings.autoShowAll && getShowAllBtn().then(($btn) => $btn.trigger("click")).catch(logger.error);
};
function tryOnScopeDispose(fn) {
return vue.getCurrentScope() ? (vue.onScopeDispose(fn), true) : false;
}
const isClient = typeof window < "u" && typeof document < "u";
typeof WorkerGlobalScope < "u" && globalThis instanceof WorkerGlobalScope;
const toString = Object.prototype.toString, isObject = (val) => toString.call(val) === "[object Object]", noop = () => {
};
function toRef(...args) {
if (args.length !== 1)
return vue.toRef(...args);
const r = args[0];
return typeof r == "function" ? vue.readonly(vue.customRef(() => ({ get: r, set: noop }))) : vue.ref(r);
}
function createFilterWrapper(filter2, fn) {
function wrapper(...args) {
return new Promise((resolve, reject) => {
Promise.resolve(filter2(() => fn.apply(this, args), { fn, thisArg: this, args })).then(resolve).catch(reject);
});
}
return wrapper;
}
const bypassFilter = (invoke) => invoke();
function pausableFilter(extendFilter = bypassFilter, options = {}) {
const {
initialState = "active"
} = options, isActive = toRef(initialState === "active");
function pause() {
isActive.value = false;
}
function resume() {
isActive.value = true;
}
const eventFilter = (...args) => {
isActive.value && extendFilter(...args);
};
return { isActive: vue.readonly(isActive), pause, resume, eventFilter };
}
function toArray(value) {
return Array.isArray(value) ? value : [value];
}
function getLifeCycleTarget(target) {
return vue.getCurrentInstance();
}
function watchWithFilter(source, cb, options = {}) {
const {
eventFilter = bypassFilter,
...watchOptions
} = options;
return vue.watch(
source,
createFilterWrapper(
eventFilter,
cb
),
watchOptions
);
}
function watchPausable(source, cb, options = {}) {
const {
eventFilter: filter2,
initialState = "active",
...watchOptions
} = options, { eventFilter, pause, resume, isActive } = pausableFilter(filter2, { initialState });
return { stop: watchWithFilter(
source,
cb,
{
...watchOptions,
eventFilter
}
), pause, resume, isActive };
}
function tryOnMounted(fn, sync = true, target) {
getLifeCycleTarget() ? vue.onMounted(fn, target) : sync ? fn() : vue.nextTick(fn);
}
function watchImmediate(source, cb, options) {
return vue.watch(
source,
cb,
{
...options,
immediate: true
}
);
}
const defaultWindow = isClient ? window : void 0;
function unrefElement(elRef) {
var _a;
const plain = vue.toValue(elRef);
return (_a = plain == null ? void 0 : plain.$el) != null ? _a : plain;
}
function useEventListener(...args) {
const cleanups = [], cleanup = () => {
cleanups.forEach((fn) => fn()), cleanups.length = 0;
}, register = (el, event, listener, options) => (el.addEventListener(event, listener, options), () => el.removeEventListener(event, listener, options)), firstParamTargets = vue.computed(() => {
const test = toArray(vue.toValue(args[0])).filter((e) => e != null);
return test.every((e) => typeof e != "string") ? test : void 0;
}), stopWatch = watchImmediate(
() => {
var _a, _b;
return [
(_b = (_a = firstParamTargets.value) == null ? void 0 : _a.map((e) => unrefElement(e))) != null ? _b : [defaultWindow].filter((e) => e != null),
toArray(vue.toValue(firstParamTargets.value ? args[1] : args[0])),
toArray(vue.unref(firstParamTargets.value ? args[2] : args[1])),
// @ts-expect-error - TypeScript gets the correct types, but somehow still complains
vue.toValue(firstParamTargets.value ? args[3] : args[2])
];
},
([raw_targets, raw_events, raw_listeners, raw_options]) => {
if (cleanup(), !(raw_targets != null && raw_targets.length) || !(raw_events != null && raw_events.length) || !(raw_listeners != null && raw_listeners.length))
return;
const optionsClone = isObject(raw_options) ? { ...raw_options } : raw_options;
cleanups.push(
...raw_targets.flatMap(
(el) => raw_events.flatMap(
(event) => raw_listeners.map((listener) => register(el, event, listener, optionsClone))
)
)
);
},
{ flush: "post" }
), stop = () => {
stopWatch(), cleanup();
};
return tryOnScopeDispose(cleanup), stop;
}
const _global = typeof globalThis < "u" ? globalThis : typeof window < "u" ? window : typeof global < "u" ? global : typeof self < "u" ? self : {}, globalKey = "__vueuse_ssr_handlers__", handlers = /* @__PURE__ */ getHandlers();
function getHandlers() {
return globalKey in _global || (_global[globalKey] = _global[globalKey] || {}), _global[globalKey];
}
function getSSRHandler(key, fallback) {
return handlers[key] || fallback;
}
function guessSerializerType(rawInit) {
return rawInit == null ? "any" : rawInit instanceof Set ? "set" : rawInit instanceof Map ? "map" : rawInit instanceof Date ? "date" : typeof rawInit == "boolean" ? "boolean" : typeof rawInit == "string" ? "string" : typeof rawInit == "object" ? "object" : Number.isNaN(rawInit) ? "any" : "number";
}
const StorageSerializers = {
boolean: {
read: (v) => v === "true",
write: (v) => String(v)
},
object: {
read: (v) => JSON.parse(v),
write: (v) => JSON.stringify(v)
},
number: {
read: (v) => Number.parseFloat(v),
write: (v) => String(v)
},
any: {
read: (v) => v,
write: (v) => String(v)
},
string: {
read: (v) => v,
write: (v) => String(v)
},
map: {
read: (v) => new Map(JSON.parse(v)),
write: (v) => JSON.stringify(Array.from(v.entries()))
},
set: {
read: (v) => new Set(JSON.parse(v)),
write: (v) => JSON.stringify(Array.from(v))
},
date: {
read: (v) => new Date(v),
write: (v) => v.toISOString()
}
}, customStorageEventName = "vueuse-storage";
function useStorage(key, defaults2, storage, options = {}) {
var _a;
const {
flush = "pre",
deep = true,
listenToStorageChanges = true,
writeDefaults = true,
mergeDefaults = false,
shallow,
window: window2 = defaultWindow,
eventFilter,
onError = (e) => {
console.error(e);
},
initOnMounted
} = options, data = (shallow ? vue.shallowRef : vue.ref)(typeof defaults2 == "function" ? defaults2() : defaults2), keyComputed = vue.computed(() => vue.toValue(key));
if (!storage)
try {
storage = getSSRHandler("getDefaultStorage", () => {
var _a2;
return (_a2 = defaultWindow) == null ? void 0 : _a2.localStorage;
})();
} catch (e) {
onError(e);
}
if (!storage)
return data;
const rawInit = vue.toValue(defaults2), type = guessSerializerType(rawInit), serializer = (_a = options.serializer) != null ? _a : StorageSerializers[type], { pause: pauseWatch, resume: resumeWatch } = watchPausable(
data,
() => write(data.value),
{ flush, deep, eventFilter }
);
vue.watch(keyComputed, () => update(), { flush });
let firstMounted = false;
const onStorageEvent = (ev) => {
initOnMounted && !firstMounted || update(ev);
}, onStorageCustomEvent = (ev) => {
initOnMounted && !firstMounted || updateFromCustomEvent(ev);
};
window2 && listenToStorageChanges && (storage instanceof Storage ? useEventListener(window2, "storage", onStorageEvent, { passive: true }) : useEventListener(window2, customStorageEventName, onStorageCustomEvent)), initOnMounted ? tryOnMounted(() => {
firstMounted = true, update();
}) : update();
function dispatchWriteEvent(oldValue, newValue) {
if (window2) {
const payload = {
key: keyComputed.value,
oldValue,
newValue,
storageArea: storage
};
window2.dispatchEvent(storage instanceof Storage ? new StorageEvent("storage", payload) : new CustomEvent(customStorageEventName, {
detail: payload
}));
}
}
function write(v) {
try {
const oldValue = storage.getItem(keyComputed.value);
if (v == null)
dispatchWriteEvent(oldValue, null), storage.removeItem(keyComputed.value);
else {
const serialized = serializer.write(v);
oldValue !== serialized && (storage.setItem(keyComputed.value, serialized), dispatchWriteEvent(oldValue, serialized));
}
} catch (e) {
onError(e);
}
}
function read(event) {
const rawValue = event ? event.newValue : storage.getItem(keyComputed.value);
if (rawValue == null)
return writeDefaults && rawInit != null && storage.setItem(keyComputed.value, serializer.write(rawInit)), rawInit;
if (!event && mergeDefaults) {
const value = serializer.read(rawValue);
return typeof mergeDefaults == "function" ? mergeDefaults(value, rawInit) : type === "object" && !Array.isArray(value) ? { ...rawInit, ...value } : value;
} else return typeof rawValue != "string" ? rawValue : serializer.read(rawValue);
}
function update(event) {
if (!(event && event.storageArea !== storage)) {
if (event && event.key == null) {
data.value = rawInit;
return;
}
if (!(event && event.key !== keyComputed.value)) {
pauseWatch();
try {
(event == null ? void 0 : event.newValue) !== serializer.write(data.value) && (data.value = read(event));
} catch (e) {
onError(e);
} finally {
event ? vue.nextTick(resumeWatch) : resumeWatch();
}
}
}
}
function updateFromCustomEvent(event) {
update(event.detail);
}
return data;
}
function useSessionStorage(key, initialValue, options = {}) {
const { window: window2 = defaultWindow } = options;
return useStorage(key, initialValue, window2 == null ? void 0 : window2.sessionStorage, options);
}
const _hoisted_1$1 = { class: "language-filter" }, _sfc_main$1 = /* @__PURE__ */ vue.defineComponent({
__name: "LanguageFilter",
setup(__props, { expose: __expose }) {
const { t: t2 } = i18n.global, languageFilter = useSessionStorage("languageFilter", [], {
listenToStorageChanges: false
}), options = IS_NHENTAI_TO ? [
["japanese", "2"],
["english", "19"],
["chinese", "10197"]
] : IS_NHENTAI_XXX ? [
["japanese", "2"],
["english", "1"],
["chinese", "3"]
] : [
["japanese", "6346"],
["english", "12227"],
["chinese", "29963"]
];
return vue.watch(
languageFilter,
(val) => {
filterLanguage(val);
},
{ deep: true, immediate: true }
), __expose({
filterLanguage: ($node) => {
filterLanguage(languageFilter.value, $node);
}
}), (_ctx, _cache) => (vue.openBlock(), vue.createElementBlock("li", _hoisted_1$1, [
vue.createVNode(vue.unref(elementPlus.ElSelect), {
modelValue: vue.unref(languageFilter),
"onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => vue.isRef(languageFilter) ? languageFilter.value = $event : null),
class: "filter-select",
multiple: "",
"collapse-tags": "",
"collapse-tags-tooltip": "",
placeholder: vue.unref(t2)("common.filter")
}, {
default: vue.withCtx(() => [
(vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(vue.unref(options), ([key, val]) => (vue.openBlock(), vue.createBlock(vue.unref(elementPlus.ElOption), {
key,
label: vue.unref(t2)(`common.abbr.${key}`),
value: val
}, {
default: vue.withCtx(() => [
vue.createTextVNode(vue.toDisplayString(vue.unref(t2)(`common.${key}`)), 1)
]),
_: 2
}, 1032, ["label", "value"]))), 128))
]),
_: 1
}, 8, ["modelValue", "placeholder"])
]));
}
}), LanguageFilter = /* @__PURE__ */ _export_sfc(_sfc_main$1, [["__scopeId", "data-v-e2153767"]]), filterLanguage = (tags2, $node) => {
const attrName = IS_NHENTAI_XXX ? "data-languages" : "data-tags", getNode = $node ? (selector2) => $node.find(selector2) : (selector2) => $(selector2);
if (getNode(selector.gallery).removeClass("nhentai-helper-hidden"), tags2.length) {
const notSelector = tags2.map((tag) => `:not([${attrName}~=${tag}])`).join("");
getNode(`${selector.gallery}${notSelector}`).addClass("nhentai-helper-hidden");
}
}, mountLanguageFilter = () => {
var _a;
const menuLeft = document.querySelector(selector.menuLeft);
if (!menuLeft) return {};
const vnode = vue.h(LanguageFilter);
return vue.render(vnode, menuLeft), ((_a = vnode.component) == null ? void 0 : _a.exposed) ?? {};
}, createAppAndMount = (component, appInitFunc) => {
const el = document.createElement("div");
document.body.append(el);
const app = vue.createApp(component);
return appInitFunc == null || appInitFunc(app), app.mount(el);
}, _hoisted_1 = { class: "info-label bold" }, _hoisted_2 = { class: "info-label bold" }, _hoisted_3 = { class: "bold" }, _hoisted_4 = { class: "info-label bold" }, _hoisted_5 = { class: "bold" }, _hoisted_6 = { class: "info-label bold" }, _hoisted_7 = { class: "scroll-container-inner" }, POPOVER_MAX_WIDTH = 720, POPOVER_THUMB_MORE_COL_WIDTH = 640, _sfc_main = /* @__PURE__ */ vue.defineComponent({
__name: "GalleryMiniPopover",
setup(__props, { expose: __expose }) {
const TAG_TYPES = [
"parody",
"character",
"tag",
"artist",
"group",
"language",
"category"
], getTagSortIndex = (type) => {
const index = TAG_TYPES.findIndex((t22) => t22 === type);
return index === -1 ? 999 : index;
}, { t: t2 } = useI18n(), visible = vue.ref(false), virtualRef = vue.ref(), popoverRef = vue.ref(), popoverPlacement = vue.ref("right"), popoverWidth = vue.ref(0), popoverTransition = vue.ref(false), gallery2 = vue.ref(null), title = vue.computed(() => {
var _a;
const t22 = (_a = gallery2.value) == null ? void 0 : _a.title;
return t22 ? t22.japanese || t22.english || t22.pretty : "";
}), groupedTags = vue.computed(() => {
var _a;
const tags2 = (_a = gallery2.value) == null ? void 0 : _a.tags;
return tags2 ? Object.entries(groupBy(tags2, "type")).sort(
([a], [b]) => getTagSortIndex(a) - getTagSortIndex(b)
) : [];
}), galleryLink = vue.computed(() => {
var _a;
return `${location.origin}/g/${(_a = gallery2.value) == null ? void 0 : _a.id}/`;
}), pageThumbs = vue.ref([]), pageThumbsColSpan = vue.computed(
() => popoverWidth.value >= POPOVER_THUMB_MORE_COL_WIDTH ? 6 : 8
), pageThumbsColNum = vue.computed(
() => popoverWidth.value >= POPOVER_THUMB_MORE_COL_WIDTH ? 4 : 3
), pageThumbWidth = vue.computed(
() => (popoverWidth.value - 24 - (pageThumbsColNum.value - 1) * 8) / pageThumbsColNum.value
), pageThumbScrollHeight = vue.computed(() => Math.max(0, ...map(pageThumbs.value, "height")) * 1.5), limitTagLength = (tags2, maxLength) => {
const result = tags2.slice(0, maxLength), larger = tags2.length - result.length;
return larger > 0 && result.push({ type: "__limit__", name: "__limit__", count: larger }), result;
}, isLimitTag = (tag) => tag.type === "__limit__";
let thumbUrlTemplate;
const getThumbInfo = ({ t: t22, w, h: h2 }, i) => {
var _a;
return {
url: thumbUrlTemplate({
mid: (_a = gallery2.value) == null ? void 0 : _a.media_id,
filename: `${i + 1}t.${NHentaiImgExt[t22]}`
}),
height: w && h2 ? Math.floor(pageThumbWidth.value * Math.min(h2 / w, 1.8)) : 0
};
}, formatNumber = (num) => num >= 1e6 ? `${Math.floor(num / 1e6)}M` : num >= 1e3 ? `${Math.floor(num / 1e3)}K` : num, openTagUrl = (path) => {
path && _GM_openInTab(`${location.origin}${path}`, { active: true, setParent: true });
};
let loadingGid = "";
const open2 = async (el, gid2) => {
var _a, _b, _c;
if (virtualRef.value === el) return;
const rect = el.getBoundingClientRect(), bodyWidth = document.body.clientWidth, showRight = rect.left + rect.right <= bodyWidth;
virtualRef.value = el, popoverPlacement.value = showRight ? "right" : "left", popoverTransition.value = false, popoverWidth.value = Math.min(
POPOVER_MAX_WIDTH,
Math.round(showRight ? bodyWidth - rect.right : rect.left) - 16
), visible.value = true, gallery2.value = null, setTimeout(() => {
gallery2.value || (popoverTransition.value = true);
}), pageThumbs.value = [];
try {
loadingGid = gid2, thumbUrlTemplate || (thumbUrlTemplate = await getCompliedThumbMediaUrlTemplate(gid2));
const loadedGallery = await getGallery(gid2);
if (loadingGid !== gid2) return;
gallery2.value = loadedGallery, pageThumbs.value = loadedGallery.images.pages.slice(0, 12).map(getThumbInfo), await vue.nextTick(), (_c = (_b = (_a = popoverRef.value) == null ? void 0 : _a.popperRef) == null ? void 0 : _b.popperInstanceRef) == null || _c.update();
} catch (error) {
logger.error(error);
} finally {
loadingGid === gid2 && (loadingGid = "");
}
}, addPageThumbLine = () => {
const curLength = pageThumbs.value.length;
if (curLength >= gallery2.value.images.pages.length) return;
const curLines = Math.ceil(curLength / pageThumbsColNum.value);
pageThumbs.value.push(
...gallery2.value.images.pages.slice(curLength, (curLines + 1) * pageThumbsColNum.value).map((img, i) => getThumbInfo(img, curLength + i))
);
}, handleScrollWheel = (e) => {
const { scrollTop, clientHeight, scrollHeight } = e.currentTarget;
(scrollTop + clientHeight === scrollHeight && e.deltaY > 0 || scrollTop === 0 && e.deltaY < 0) && e.preventDefault();
}, close = () => {
visible.value && (visible.value = false);
}, copyTitle = () => {
_GM_setClipboard(title.value, "text", () => {
showMessage({
type: "success",
message: t2("common.copied"),
duration: 2e3
});
});
};
return vue.watch(visible, (val) => {
val ? (window.addEventListener("scroll", close), window.addEventListener("resize", close)) : (window.removeEventListener("scroll", close), window.removeEventListener("resize", close));
}), vue.onBeforeUnmount(() => {
window.removeEventListener("scroll", close), window.removeEventListener("resize", close);
}), __expose({ open: open2 }), (_ctx, _cache) => (vue.openBlock(), vue.createBlock(vue.unref(elementPlus.ElPopover), {
ref_key: "popoverRef",
ref: popoverRef,
visible: visible.value,
"onUpdate:visible": _cache[2] || (_cache[2] = ($event) => visible.value = $event),
"popper-class": popoverTransition.value ? "popover-transition" : "",
"virtual-ref": virtualRef.value,
"virtual-triggering": "",
placement: popoverPlacement.value,
trigger: "contextmenu",
width: popoverWidth.value,
"hide-after": 0
}, {
default: vue.withCtx(() => [
gallery2.value ? (vue.openBlock(), vue.createElementBlock("div", {
key: 0,
class: vue.normalizeClass(["gallery-mini-popover", `lang-${vue.unref(settings).language}`]),
onWheel: _cache[0] || (_cache[0] = vue.withModifiers(() => {
}, ["prevent"]))
}, [
vue.createVNode(vue.unref(elementPlus.ElDescriptions), {
title: title.value,
column: 1
}, {
extra: vue.withCtx(() => [
vue.createVNode(vue.unref(elementPlus.ElButton), {
text: "",
size: "small",
onClick: copyTitle
}, {
default: vue.withCtx(() => [
vue.createTextVNode(vue.toDisplayString(vue.unref(t2)("common.copy")), 1)
]),
_: 1
}),
vue.createVNode(vue.unref(elementPlus.ElButton), {
icon: vue.unref(close_bold_default),
circle: "",
text: "",
size: "small",
style: { "margin-left": "4px" },
onClick: close
}, null, 8, ["icon"])
]),
default: vue.withCtx(() => [
vue.createVNode(vue.unref(elementPlus.ElDescriptionsItem), null, {
label: vue.withCtx(() => [
vue.createElementVNode("span", _hoisted_1, vue.toDisplayString(vue.unref(t2)("meta.id")), 1)
]),
default: vue.withCtx(() => [
vue.createVNode(vue.unref(elementPlus.ElLink), {
type: "primary",
target: "_blank",
underline: false,
href: galleryLink.value
}, {
default: vue.withCtx(() => [
vue.createTextVNode(vue.toDisplayString(gallery2.value.id), 1)
]),
_: 1
}, 8, ["href"])
]),
_: 1
}),
(vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(groupedTags.value, ([type, tags2]) => (vue.openBlock(), vue.createBlock(vue.unref(elementPlus.ElDescriptionsItem), { key: type }, {
label: vue.withCtx(() => [
vue.createElementVNode("span", _hoisted_2, vue.toDisplayString(vue.unref(t2)(`meta.${type}`)), 1)
]),
default: vue.withCtx(() => [
(vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(limitTagLength(tags2, 10), (tag) => (vue.openBlock(), vue.createBlock(vue.unref(elementPlus.ElTag), {
key: tag.id ?? tag.name,
class: vue.normalizeClass(["info-tag", { "info-tag--pointer": !isLimitTag(tag) }]),
type: "info",
effect: "dark",
"disable-transitions": "",
onClick: () => openTagUrl(tag.url)
}, {
default: vue.withCtx(() => [
isLimitTag(tag) ? (vue.openBlock(), vue.createElementBlock(vue.Fragment, { key: 0 }, [
vue.createTextVNode("+" + vue.toDisplayString(tag.count), 1)
], 64)) : (vue.openBlock(), vue.createElementBlock(vue.Fragment, { key: 1 }, [
vue.createElementVNode("span", _hoisted_3, vue.toDisplayString(tag.name), 1),
vue.createTextVNode(vue.toDisplayString(tag.count ? ` | ${formatNumber(tag.count)}` : void 0), 1)
], 64))
]),
_: 2
}, 1032, ["class", "onClick"]))), 128))
]),
_: 2
}, 1024))), 128)),
gallery2.value.num_pages ? (vue.openBlock(), vue.createBlock(vue.unref(elementPlus.ElDescriptionsItem), { key: 0 }, {
label: vue.withCtx(() => [
vue.createElementVNode("span", _hoisted_4, vue.toDisplayString(vue.unref(t2)("meta.page")), 1)
]),
default: vue.withCtx(() => [
vue.createVNode(vue.unref(elementPlus.ElTag), {
class: "info-tag",
type: "info",
effect: "dark",
"disable-transitions": ""
}, {
default: vue.withCtx(() => [
vue.createElementVNode("span", _hoisted_5, vue.toDisplayString(gallery2.value.num_pages), 1)
]),
_: 1
})
]),
_: 1
})) : vue.createCommentVNode("", true),
gallery2.value.upload_date ? (vue.openBlock(), vue.createBlock(vue.unref(elementPlus.ElDescriptionsItem), { key: 1 }, {
label: vue.withCtx(() => [
vue.createElementVNode("span", _hoisted_6, vue.toDisplayString(vue.unref(t2)("meta.upload")), 1)
]),
default: vue.withCtx(() => [
vue.createTextVNode(" " + vue.toDisplayString(new Date(gallery2.value.upload_date * 1e3).toLocaleString()), 1)
]),
_: 1
})) : vue.createCommentVNode("", true)
]),
_: 1
}, 8, ["title"]),
pageThumbs.value.length ? vue.withDirectives((vue.openBlock(), vue.createElementBlock("div", {
key: 0,
"infinite-scroll-distance": 100,
class: "scroll-container",
style: vue.normalizeStyle({ height: `${pageThumbScrollHeight.value}px` }),
onWheelCapture: vue.withModifiers(handleScrollWheel, ["stop"])
}, [
vue.createElementVNode("div", _hoisted_7, [
vue.createVNode(vue.unref(elementPlus.ElRow), { gutter: 8 }, {
default: vue.withCtx(() => [
(vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(pageThumbs.value, ({ url, height }) => (vue.openBlock(), vue.createBlock(vue.unref(elementPlus.ElCol), {
key: url,
span: pageThumbsColSpan.value
}, {
default: vue.withCtx(() => [
vue.createVNode(vue.unref(elementPlus.ElImage), {
src: url,
style: vue.normalizeStyle({ "min-height": `${height}px` })
}, null, 8, ["src", "style"])
]),
_: 2
}, 1032, ["span"]))), 128))
]),
_: 1
})
])
], 36)), [
[vue.unref(elementPlus.ElInfiniteScroll), addPageThumbLine]
]) : vue.createCommentVNode("", true)
], 34)) : vue.withDirectives((vue.openBlock(), vue.createElementBlock("div", {
key: 1,
style: { height: "700px", maxHeight: "90vh" },
onWheel: _cache[1] || (_cache[1] = vue.withModifiers(() => {
}, ["prevent"]))
}, null, 544)), [
[vue.unref(elementPlus.vLoading), true]
])
]),
_: 1
}, 8, ["visible", "popper-class", "virtual-ref", "placement", "width"]));
}
}), GalleryMiniPopover = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-22c5eb74"]]), initApp = once(
() => createAppAndMount(GalleryMiniPopover, (app) => {
app.use(i18n);
})
), openGalleryMiniPopover = (el, gid2) => {
initApp().open(el, gid2);
}, initListPage = () => {
$(selector.gallery).each(initGallery);
const { filterLanguage: filterLanguage2 } = mountLanguageFilter();
initShortcut(), restoreDownloadQueue();
const contentEl = document.querySelector(selector.galleryList);
contentEl && new MutationObserver((mutations) => {
mutations.forEach(({ addedNodes }) => {
addedNodes.forEach((node) => {
const $el = $(node);
$el.find(selector.gallery).each(initGallery), filterLanguage2 == null || filterLanguage2($el);
});
});
}).observe(contentEl, { childList: true });
}, initShortcut = () => {
const ignoreActiveElTags = /* @__PURE__ */ new Set(["INPUT", "TEXTAREA"]);
$(document).on("keydown", (event) => {
var _a;
const activeElTag = ((_a = document.activeElement) == null ? void 0 : _a.tagName) || "";
if (!ignoreActiveElTags.has(activeElTag))
switch (event.key) {
case "ArrowLeft":
$(selector.paginationPrevious).trigger("click");
break;
case "ArrowRight":
$(selector.paginationNext).trigger("click");
break;
}
});
}, restoreDownloadQueue = () => {
const galleriesJson = sessionStorage.getItem("downloadQueue");
if (galleriesJson)
try {
const galleries = JSON.parse(galleriesJson);
for (const gallery2 of galleries)
addDownloadGalleryTask(gallery2);
} catch (error) {
logger.error(error);
}
}, initGallery = function() {
var _a;
const $gallery = $(this);
if ($gallery.attr("init")) return;
$gallery.attr("init", "true"), $gallery.addClass("nhentai-helper-gallery");
const $a = $gallery.find(selector.galleryCover);
settings.openOnNewTab && $a.attr("target", "_blank");
const gid2 = (_a = /\/g\/([0-9]+)/.exec($a.attr("href"))) == null ? void 0 : _a[1];
if (!gid2) return;
const enTitle = $gallery.find(selector.galleryCaption).text().trim(), progressDisplayController = new ProgressDisplayController(), { downloadBtn } = progressDisplayController;
$gallery.append(downloadBtn);
let ignoreController, galleryTitle;
const markGalleryDownloaded = () => {
$gallery.addClass("downloaded"), ignoreController == null || ignoreController.setStatus(true);
}, unmarkGalleryDownloaded = () => {
$gallery.removeClass("downloaded"), ignoreController == null || ignoreController.setStatus(false);
};
Promise.all([isDownloadedByGid(gid2), isDownloadedByTitle({ english: enTitle })]).then(
([gidDownloaded, titleDownloaded]) => {
const downloaded = gidDownloaded || titleDownloaded;
if (downloaded && markGalleryDownloaded(), settings.showIgnoreButton) {
ignoreController = new IgnoreController(false, downloaded);
const { ignoreBtn } = ignoreController;
ignoreBtn.addEventListener("click", () => {
ignoreController.getStatus() ? (unmarkGalleryDownloaded(), unmarkAsDownloaded(gid2, galleryTitle)) : (markGalleryDownloaded(), markAsDownloaded(gid2, galleryTitle));
}), $gallery.append(ignoreBtn);
}
}
);
let skipDownloadedCheck = false;
const startDownload = async () => {
if (settings.autoCancelDownloadedManga || progressDisplayController.lockBtn("Wait"), !skipDownloadedCheck && await isDownloadedByGid(gid2)) {
const title = $gallery.find(selector.galleryCaption).text();
if (!await downloadAgainConfirm(title, true)) {
progressDisplayController.reset(), markGalleryDownloaded();
return;
}
skipDownloadedCheck = true;
}
settings.autoCancelDownloadedManga && progressDisplayController.lockBtn("Wait");
let gallery2;
try {
gallery2 = await getGalleryInfo(gid2), galleryTitle = gallery2.title;
} catch (error) {
logger.error(error), progressDisplayController.error(), errorRetryConfirm(ErrorAction.GET_INFO, void 0, startDownload);
return;
}
if (!skipDownloadedCheck) {
if (await isDownloadedByTitle(gallery2.title) && !await downloadAgainConfirm(gallery2.title.japanese || gallery2.title.english, true)) {
progressDisplayController.reset(), markAsDownloaded(gid2, gallery2.title), markGalleryDownloaded();
return;
}
if (dlQueue.queue.some(
({
info: {
gallery: { title }
}
}) => isSameTitle(title, gallery2.title)
) && !await downloadAgainConfirm(gallery2.title.japanese || gallery2.title.english, true)) {
progressDisplayController.reset();
return;
}
}
addDownloadGalleryTask(gallery2, { progressDisplayController, markGalleryDownloaded });
};
downloadBtn.addEventListener("click", startDownload), this.addEventListener("contextmenu", (e) => {
settings.galleryContextmenuPreview && (e.preventDefault(), openGalleryMiniPopover(this, gid2));
});
};
class StyleInjector {
constructor(style) {
__publicField(this, "styleNode");
this.styleNode = /* @__PURE__ */ coreExports.h("style", null, style);
}
inject() {
document.head.append(this.styleNode);
}
remove() {
this.styleNode.remove();
}
}
const initOnlineViewPage = () => {
IS_NHENTAI || initViewMode();
}, initViewMode = () => {
const style = new StyleInjector(
`${selector.mediaImage}{width:auto;max-width:calc(100vw - 20px);max-height:100vh}`
), viewModeText = ["[off]", "[on]"];
let viewMode = _GM_getValue("online_view_mode", 0);
applyOnlineViewStyle(!!viewMode, style);
const btnText = /* @__PURE__ */ coreExports.h("span", null, viewModeText[viewMode]), btn = /* @__PURE__ */ coreExports.h("button", { id: "online-view-mode-btn", class: className.greyButton }, "100% view height ", btnText);
btn.addEventListener("click", () => {
viewMode = 1 - viewMode, _GM_setValue("online_view_mode", viewMode), btnText.innerText = viewModeText[viewMode], applyOnlineViewStyle(!!viewMode, style);
}), $(selector.pageContainer).prepend(btn);
}, applyOnlineViewStyle = (enable, style) => {
enable ? style.inject() : style.remove();
}, initPage = () => {
$("body").addClass(`nhentai-helper-${location.hostname.replace(/\./g, "_")}`), IS_PAGE_MANGA_LIST ? (initListPage(), applyPjax()) : IS_PAGE_MANGA_DETAIL ? initDetailPage().catch(logger.error) : IS_PAGE_ONLINE_VIEW && initOnlineViewPage();
}, applyPjax = () => {
$(document).pjax(selector.pjaxTrigger, {
container: selector.pjaxTarget,
fragment: selector.pjaxTarget,
timeout: 1e4
}), $(document).on("pjax:end", () => {
$(selector.pjaxRemoveParam).each(function() {
const $this = $(this), href = $this.attr("href");
if (!href || href.startsWith("#")) return;
const isPathname = href.startsWith("/"), url = isPathname ? new URL(href, location.origin) : new URL(href);
url.searchParams.delete("_pjax"), $this.attr("href", isPathname ? `${url.pathname}${url.search}` : url.href);
}), applyLazyLoad();
});
}, applyLazyLoad = () => {
const { _n_app } = _unsafeWindow;
_n_app && (_n_app.install_lazy_loader(), _n_app.install_blacklisting());
}, initSettingsDialogApp = once(
() => createAppAndMount(SettingsDialog, (app) => {
app.use(i18n);
})
), openSettingsDialog = () => {
initSettingsDialogApp().open();
};
createAppAndMount(_sfc_main$4);
initPage();
_GM_registerMenuCommand(i18n.global.t("common.settings"), openSettingsDialog);
}
});
require_main_001();
})(jQuery, Vue, ElementPlus);