您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
为 nHentai 增加压缩打包下载方式以及一些辅助功能,同时还支持一些镜像站
// ==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);