diff --git a/.obsidian/community-plugins.json b/.obsidian/community-plugins.json index 826024d9..7cee74d4 100644 --- a/.obsidian/community-plugins.json +++ b/.obsidian/community-plugins.json @@ -63,5 +63,7 @@ "obsidian42-brat", "soundscapes", "execute-code", - "obsidian-custom-frames" + "obsidian-custom-frames", + "local-gpt", + "ai-providers" ] \ No newline at end of file diff --git a/.obsidian/plugins/ai-providers/data.json b/.obsidian/plugins/ai-providers/data.json new file mode 100644 index 00000000..44d67402 --- /dev/null +++ b/.obsidian/plugins/ai-providers/data.json @@ -0,0 +1,23 @@ +{ + "_version": 1, + "debugLogging": false, + "useNativeFetch": false, + "providers": [ + { + "id": "id-1756883617241", + "name": "Ollama", + "apiKey": "", + "url": "http://himan.picp.net:11434", + "type": "ollama", + "model": "deepseek-r1:1.5b", + "availableModels": [ + "deepseek-r1:latest", + "llama3-backup:latest", + "mario:latest", + "llama3.2:latest", + "qwen2.5:7b", + "deepseek-r1:1.5b" + ] + } + ] +} \ No newline at end of file diff --git a/.obsidian/plugins/ai-providers/main.js b/.obsidian/plugins/ai-providers/main.js new file mode 100644 index 00000000..83bd9c90 --- /dev/null +++ b/.obsidian/plugins/ai-providers/main.js @@ -0,0 +1,43 @@ +/* +THIS IS A GENERATED/BUNDLED FILE BY ESBUILD +if you want to view the source, please visit the github repository of this plugin +*/ + +var vi=Object.create;var hr=Object.defineProperty;var _i=Object.getOwnPropertyDescriptor;var Ai=Object.getOwnPropertyNames;var Pi=Object.getPrototypeOf,Ii=Object.prototype.hasOwnProperty;var xi=(n,e)=>{for(var t in e)hr(n,t,{get:e[t],enumerable:!0})},Xn=(n,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of Ai(e))!Ii.call(n,s)&&s!==t&&hr(n,s,{get:()=>e[s],enumerable:!(r=_i(e,s))||r.enumerable});return n};var Ei=(n,e,t)=>(t=n!=null?vi(Pi(n)):{},Xn(e||!n||!n.__esModule?hr(t,"default",{value:n,enumerable:!0}):t,n)),Ci=n=>Xn(hr({},"__esModule",{value:!0}),n);var Pa={};xi(Pa,{default:()=>zr});module.exports=Ci(Pa);var le=require("obsidian");var Y=require("obsidian");var Gn={settings:{notice:'Dieses Plugin ist eine Konfigurationszentrale f\xFCr KI-Anbieter. Es macht selbst nichts, aber andere Plugins k\xF6nnen es nutzen, um KI-Einstellungen nicht mehrfach konfigurieren zu m\xFCssen.',configuredProviders:"KI-anbieter",addNewProvider:"Neuen anbieter hinzuf\xFCgen",addProvider:"Anbieter hinzuf\xFCgen",providerName:"Anbietername",providerNameDesc:"Geben Sie einen Namen f\xFCr diesen Anbieter ein",providerNamePlaceholder:"Mein anbieter",providerType:"Anbietertyp",providerTypeDesc:"W\xE4hlen Sie den KI-anbietertyp aus",providerUrl:"Anbieter-URL",providerUrlDesc:"Geben Sie die API-Endpunkt-URL ein",providerUrlPlaceholder:"https://...",apiKey:"API-Schl\xFCssel",apiKeyDesc:"Geben Sie Ihren API-Schl\xFCssel ein (falls erforderlich)",apiKeyPlaceholder:"sk-...",defaultModel:"Standardmodell",defaultModelDesc:"W\xE4hlen Sie das Standard-KI-Modell f\xFCr diesen Anbieter",save:"Speichern",cancel:"Abbrechen",options:"Optionen",delete:"L\xF6schen",duplicate:"Duplizieren",deleteConfirmation:'M\xF6chten Sie den Anbieter "{{name}}" wirklich l\xF6schen?',modelsUpdated:"Modellliste aktualisiert",refreshModelsList:"Modellliste aktualisieren",model:"Modell",modelDesc:"W\xE4hlen Sie das KI-Modell f\xFCr diesen Anbieter.
Oder in den Textmodus wechseln",modelTextDesc:"Geben Sie den KI-Modellnamen ein.
Oder in den Dropdown-Modus wechseln",modelTextOnlyDesc:"Geben Sie den KI-Modellnamen f\xFCr diesen Anbieter ein.",loadingModels:"Modelle werden geladen...",noModelsAvailable:"Keine Modelle verf\xFCgbar",editProvider:"Anbieter bearbeiten",developerSettings:"F\xFCr entwickler",developerSettingsDesc:"Zus\xE4tzliche Einstellungen f\xFCr Entwicklung und Debugging aktivieren",debugLogging:"Debug-protokollierung",debugLoggingDesc:"Detaillierte Protokollierung in der Konsole aktivieren",useNativeFetch:"Nativen fetch verwenden",useNativeFetchDesc:"Verwendet Fetch API anstelle von Obsidian f\xFCr besseres Debugging der Anfragen in DevTools"},modals:{confirm:"Best\xE4tigen",cancel:"Abbrechen"},errors:{failedToFetchModels:"Modelle konnten nicht abgerufen werden",failedToExecuteRequest:"Anfrage konnte nicht ausgef\xFChrt werden",failedToEmbed:"Fehler beim Generieren der Einbettungen",missingApiKey:"API-Schl\xFCssel ist erforderlich",missingUrl:"Anbieter-URL ist erforderlich",missingModel:"Modell muss ausgew\xE4hlt werden",pluginMustBeUpdated:"Plugin muss aktualisiert werden",pluginMustBeUpdatedFormatted:"Das Plugin muss aktualisiert werden, um mit dieser Version von AI Providers zu funktionieren",providerNameRequired:"Anbietername ist erforderlich",providerNameExists:'Ein Anbieter mit dem Namen "{{name}}" existiert bereits'}};var Qn={settings:{notice:"This plugin provides AI Provider integrations for other plugins. Configure your providers below.",configuredProviders:"AI providers",addNewProvider:"Add new provider",addProvider:"Add provider",providerName:"Provider name",providerNameDesc:"Enter a name for this provider",providerNamePlaceholder:"My provider",providerType:"Provider type",providerTypeDesc:"Select the type of AI provider",providerUrl:"Provider URL",providerUrlDesc:"Enter the API endpoint URL",providerUrlPlaceholder:"https://...",apiKey:"API key",apiKeyDesc:"Enter your API key (if required)",apiKeyPlaceholder:"sk-...",defaultModel:"Default model",defaultModelDesc:"Select the default AI model for this provider",save:"Save",cancel:"Cancel",options:"Options",delete:"Delete",duplicate:"Duplicate",deleteConfirmation:'Are you sure you want to delete provider "{{name}}"?',modelsUpdated:"Models list updated",refreshModelsList:"Refresh models list",model:"Model",modelDesc:"Select the AI model for this provider.
Or switch to text mode",modelTextDesc:"Enter the AI model name.
Or switch to dropdown mode",modelTextOnlyDesc:"Enter the AI model name for this provider.",loadingModels:"Loading models...",noModelsAvailable:"No models available",editProvider:"Edit provider",developerSettings:"For developers",developerSettingsDesc:"Enable additional settings for development and debugging",debugLogging:"Debug Logging",debugLoggingDesc:"Enable debug logging for troubleshooting",useNativeFetch:"Use native Fetch",useNativeFetchDesc:"Use native Fetch API instead of electron-specific implementation (may help with CORS issues)"},modals:{confirm:"Confirm",cancel:"Cancel"},errors:{failedToFetchModels:"Failed to fetch models",failedToExecuteRequest:"Failed to execute request",failedToEmbed:"Failed to generate embeddings",missingApiKey:"API key is required",missingUrl:"Provider URL is required",missingModel:"Model must be selected",pluginMustBeUpdated:"Plugin must be updated",pluginMustBeUpdatedFormatted:"Plugin must be updated to work with this version of AI Providers",providerNameRequired:"Provider name is required",providerNameExists:'A provider with the name "{{name}}" already exists'}};var Yn={settings:{notice:'\u042D\u0442\u043E\u0442 \u043F\u043B\u0430\u0433\u0438\u043D \u043F\u043E\u043C\u043E\u0433\u0430\u0435\u0442 \u043D\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044C AI-\u043F\u0440\u043E\u0432\u0430\u0439\u0434\u0435\u0440\u044B. \u0421\u0430\u043C \u043F\u043E \u0441\u0435\u0431\u0435 \u043E\u043D \u043D\u0438\u0447\u0435\u0433\u043E \u043D\u0435 \u0434\u0435\u043B\u0430\u0435\u0442, \u043D\u043E \u0441\u043B\u0443\u0436\u0438\u0442 \u043E\u0431\u0449\u0438\u043C \u0445\u0440\u0430\u043D\u0438\u043B\u0438\u0449\u0435\u043C \u043D\u0430\u0441\u0442\u0440\u043E\u0435\u043A, \u043A\u043E\u0442\u043E\u0440\u044B\u043C \u043C\u043E\u0433\u0443\u0442 \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u044C\u0441\u044F \u0434\u0440\u0443\u0433\u0438\u0435 \u043F\u043B\u0430\u0433\u0438\u043D\u044B \u0432\u043C\u0435\u0441\u0442\u043E \u043F\u043E\u0432\u0442\u043E\u0440\u043D\u043E\u0439 \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438.',configuredProviders:"AI \u043F\u0440\u043E\u0432\u0430\u0439\u0434\u0435\u0440\u044B",addNewProvider:"\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u043D\u043E\u0432\u044B\u0439 \u043F\u0440\u043E\u0432\u0430\u0439\u0434\u0435\u0440",addProvider:"\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u043F\u0440\u043E\u0432\u0430\u0439\u0434\u0435\u0440",providerName:"\u0418\u043C\u044F \u043F\u0440\u043E\u0432\u0430\u0439\u0434\u0435\u0440\u0430",providerNameDesc:"\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u0438\u043C\u044F \u0434\u043B\u044F \u044D\u0442\u043E\u0433\u043E \u043F\u0440\u043E\u0432\u0430\u0439\u0434\u0435\u0440\u0430",providerNamePlaceholder:"\u041C\u043E\u0439 \u043F\u0440\u043E\u0432\u0430\u0439\u0434\u0435\u0440",providerType:"\u0422\u0438\u043F \u043F\u0440\u043E\u0432\u0430\u0439\u0434\u0435\u0440\u0430",providerTypeDesc:"\u0412\u044B\u0431\u0435\u0440\u0438\u0442\u0435 \u0442\u0438\u043F AI-\u043F\u0440\u043E\u0432\u0430\u0439\u0434\u0435\u0440\u0430",providerUrl:"URL \u043F\u0440\u043E\u0432\u0430\u0439\u0434\u0435\u0440\u0430",providerUrlDesc:"\u0412\u0432\u0435\u0434\u0438\u0442\u0435 URL \u043A\u043E\u043D\u0435\u0447\u043D\u043E\u0439 \u0442\u043E\u0447\u043A\u0438 API",providerUrlPlaceholder:"https://...",apiKey:"API-\u043A\u043B\u044E\u0447",apiKeyDesc:"\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u0432\u0430\u0448 API \u043A\u043B\u044E\u0447 (\u0435\u0441\u043B\u0438 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044F)",apiKeyPlaceholder:"sk-...",defaultModel:"\u041C\u043E\u0434\u0435\u043B\u044C \u043F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E",defaultModelDesc:"\u0412\u044B\u0431\u0435\u0440\u0438\u0442\u0435 \u043C\u043E\u0434\u0435\u043B\u044C AI \u043F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E \u0434\u043B\u044F \u044D\u0442\u043E\u0433\u043E \u043F\u0440\u043E\u0432\u0430\u0439\u0434\u0435\u0440\u0430",save:"\u0421\u043E\u0445\u0440\u0430\u043D\u0438\u0442\u044C",cancel:"\u041E\u0442\u043C\u0435\u043D\u0430",options:"\u041D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438",delete:"\u0423\u0434\u0430\u043B\u0438\u0442\u044C",duplicate:"\u0414\u0443\u0431\u043B\u0438\u0440\u043E\u0432\u0430\u0442\u044C",deleteConfirmation:'\u0412\u044B \u0443\u0432\u0435\u0440\u0435\u043D\u044B, \u0447\u0442\u043E \u0445\u043E\u0442\u0438\u0442\u0435 \u0443\u0434\u0430\u043B\u0438\u0442\u044C \u043F\u0440\u043E\u0432\u0430\u0439\u0434\u0435\u0440\u0430 "{{name}}"?',modelsUpdated:"\u0421\u043F\u0438\u0441\u043E\u043A \u043C\u043E\u0434\u0435\u043B\u0435\u0439 \u043E\u0431\u043D\u043E\u0432\u043B\u0435\u043D",refreshModelsList:"\u041E\u0431\u043D\u043E\u0432\u0438\u0442\u044C \u0441\u043F\u0438\u0441\u043E\u043A \u043C\u043E\u0434\u0435\u043B\u0435\u0439",model:"\u041C\u043E\u0434\u0435\u043B\u044C",modelDesc:"\u0412\u044B\u0431\u0435\u0440\u0438\u0442\u0435 AI \u043C\u043E\u0434\u0435\u043B\u044C \u0434\u043B\u044F \u044D\u0442\u043E\u0433\u043E \u043F\u0440\u043E\u0432\u0430\u0439\u0434\u0435\u0440\u0430.
\u0418\u043B\u0438 \u043F\u0435\u0440\u0435\u043A\u043B\u044E\u0447\u0438\u0442\u044C\u0441\u044F \u0432 \u0442\u0435\u043A\u0441\u0442\u043E\u0432\u044B\u0439 \u0440\u0435\u0436\u0438\u043C",modelTextDesc:"\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 AI \u043C\u043E\u0434\u0435\u043B\u0438.
\u0418\u043B\u0438 \u043F\u0435\u0440\u0435\u043A\u043B\u044E\u0447\u0438\u0442\u044C\u0441\u044F \u0432 \u0440\u0435\u0436\u0438\u043C \u0432\u044B\u043F\u0430\u0434\u0430\u044E\u0449\u0435\u0433\u043E \u0441\u043F\u0438\u0441\u043A\u0430",modelTextOnlyDesc:"\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 AI \u043C\u043E\u0434\u0435\u043B\u0438 \u0434\u043B\u044F \u044D\u0442\u043E\u0433\u043E \u043F\u0440\u043E\u0432\u0430\u0439\u0434\u0435\u0440\u0430.",loadingModels:"\u0417\u0430\u0433\u0440\u0443\u0437\u043A\u0430 \u043C\u043E\u0434\u0435\u043B\u0435\u0439...",noModelsAvailable:"\u041D\u0435\u0442 \u0434\u043E\u0441\u0442\u0443\u043F\u043D\u044B\u0445 \u043C\u043E\u0434\u0435\u043B\u0435\u0439",editProvider:"\u0420\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u043F\u0440\u043E\u0432\u0430\u0439\u0434\u0435\u0440\u0430",developerSettings:"\u0414\u043B\u044F \u0440\u0430\u0437\u0440\u0430\u0431\u043E\u0442\u0447\u0438\u043A\u043E\u0432",developerSettingsDesc:"\u0412\u043A\u043B\u044E\u0447\u0438\u0442\u044C \u0434\u043E\u043F\u043E\u043B\u043D\u0438\u0442\u0435\u043B\u044C\u043D\u044B\u0435 \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438 \u0434\u043B\u044F \u0440\u0430\u0437\u0440\u0430\u0431\u043E\u0442\u043A\u0438 \u0438 \u043E\u0442\u043B\u0430\u0434\u043A\u0438",debugLogging:"\u041E\u0442\u043B\u0430\u0434\u043E\u0447\u043D\u043E\u0435 \u043B\u043E\u0433\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0435",debugLoggingDesc:"\u0412\u043A\u043B\u044E\u0447\u0438\u0442\u044C \u043F\u043E\u0434\u0440\u043E\u0431\u043D\u043E\u0435 \u043B\u043E\u0433\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0435 \u0432 \u043A\u043E\u043D\u0441\u043E\u043B\u0438",useNativeFetch:"\u0418\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u044C \u043D\u0430\u0442\u0438\u0432\u043D\u044B\u0439 Fetch",useNativeFetchDesc:"\u0418\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u044C Fetch API \u0432\u043C\u0435\u0441\u0442\u043E Obsidian \u0434\u043B\u044F \u0443\u0434\u043E\u0431\u043D\u043E\u0439 \u043E\u0442\u043B\u0430\u0434\u043A\u0438 \u0437\u0430\u043F\u0440\u043E\u0441\u043E\u0432 \u0432 DevTools"},modals:{confirm:"\u041F\u043E\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u044C",cancel:"\u041E\u0442\u043C\u0435\u043D\u0430"},errors:{failedToFetchModels:"\u041D\u0435 \u0443\u0434\u0430\u043B\u043E\u0441\u044C \u043F\u043E\u043B\u0443\u0447\u0438\u0442\u044C \u0441\u043F\u0438\u0441\u043E\u043A \u043C\u043E\u0434\u0435\u043B\u0435\u0439",failedToExecuteRequest:"\u041D\u0435 \u0443\u0434\u0430\u043B\u043E\u0441\u044C \u0432\u044B\u043F\u043E\u043B\u043D\u0438\u0442\u044C \u0437\u0430\u043F\u0440\u043E\u0441",failedToEmbed:"\u041D\u0435 \u0443\u0434\u0430\u043B\u043E\u0441\u044C \u0441\u043E\u0437\u0434\u0430\u0442\u044C \u044D\u043C\u0431\u0435\u0434\u0434\u0438\u043D\u0433\u0438",missingApiKey:"\u0422\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044F API \u043A\u043B\u044E\u0447",missingUrl:"\u0422\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044F URL \u043F\u0440\u043E\u0432\u0430\u0439\u0434\u0435\u0440\u0430",missingModel:"\u041D\u0435\u043E\u0431\u0445\u043E\u0434\u0438\u043C\u043E \u0432\u044B\u0431\u0440\u0430\u0442\u044C \u043C\u043E\u0434\u0435\u043B\u044C",pluginMustBeUpdated:"\u041F\u043B\u0430\u0433\u0438\u043D \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043E\u0431\u043D\u043E\u0432\u043B\u0435\u043D\u0438\u044F",pluginMustBeUpdatedFormatted:"\u0414\u043B\u044F \u0440\u0430\u0431\u043E\u0442\u044B \u0441 \u044D\u0442\u043E\u0439 \u0432\u0435\u0440\u0441\u0438\u0435\u0439 AI Providers \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044F \u043E\u0431\u043D\u043E\u0432\u043B\u0435\u043D\u0438\u0435 \u043F\u043B\u0430\u0433\u0438\u043D\u0430",providerNameRequired:"\u0422\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044F \u0438\u043C\u044F \u043F\u0440\u043E\u0432\u0430\u0439\u0434\u0435\u0440\u0430",providerNameExists:'\u041F\u0440\u043E\u0432\u0430\u0439\u0434\u0435\u0440 \u0441 \u0438\u043C\u0435\u043D\u0435\u043C "{{name}}" \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442'}};var Zn={settings:{notice:'\u6B64\u63D2\u4EF6\u662F AI \u63D0\u4F9B\u5546\u7684\u914D\u7F6E\u4E2D\u5FC3\u3002\u5B83\u672C\u8EAB\u4E0D\u63D0\u4F9B\u4EFB\u4F55\u529F\u80FD\uFF0C\u4F46\u5176\u4ED6\u63D2\u4EF6\u53EF\u4EE5\u4F7F\u7528\u5B83\u6765\u907F\u514D\u91CD\u590D\u914D\u7F6E AI \u8BBE\u7F6E\u3002',configuredProviders:"AI \u670D\u52A1\u63D0\u4F9B\u5546",addNewProvider:"\u6DFB\u52A0\u65B0\u7684\u670D\u52A1\u63D0\u4F9B\u5546",addProvider:"\u6DFB\u52A0\u63D0\u4F9B\u5546",providerName:"\u63D0\u4F9B\u5546\u540D\u79F0",providerNameDesc:"\u4E3A\u6B64\u670D\u52A1\u63D0\u4F9B\u5546\u8F93\u5165\u540D\u79F0",providerNamePlaceholder:"\u6211\u7684\u670D\u52A1\u63D0\u4F9B\u5546",providerType:"\u63D0\u4F9B\u5546\u7C7B\u578B",providerTypeDesc:"\u9009\u62E9 AI \u670D\u52A1\u63D0\u4F9B\u5546\u7C7B\u578B",providerUrl:"\u670D\u52A1\u5730\u5740",providerUrlDesc:"\u8F93\u5165 API \u63A5\u53E3\u5730\u5740",providerUrlPlaceholder:"https://...",apiKey:"API \u5BC6\u94A5",apiKeyDesc:"\u8F93\u5165\u60A8\u7684 API \u5BC6\u94A5\uFF08\u5982\u9700\u8981\uFF09",apiKeyPlaceholder:"sk-...",defaultModel:"\u9ED8\u8BA4\u6A21\u578B",defaultModelDesc:"\u9009\u62E9\u6B64\u63D0\u4F9B\u5546\u7684\u9ED8\u8BA4 AI \u6A21\u578B",save:"\u4FDD\u5B58",cancel:"\u53D6\u6D88",options:"\u9009\u9879",delete:"\u5220\u9664",duplicate:"\u590D\u5236",deleteConfirmation:'\u786E\u5B9A\u8981\u5220\u9664\u63D0\u4F9B\u5546"{{name}}"\u5417\uFF1F',modelsUpdated:"\u6A21\u578B\u5217\u8868\u5DF2\u66F4\u65B0",refreshModelsList:"\u5237\u65B0\u6A21\u578B\u5217\u8868",model:"\u6A21\u578B",modelDesc:"\u9009\u62E9\u6B64\u63D0\u4F9B\u5546\u7684 AI \u6A21\u578B\u3002
\u6216\u5207\u6362\u5230\u6587\u672C\u6A21\u5F0F",modelTextDesc:"\u8F93\u5165 AI \u6A21\u578B\u540D\u79F0\u3002
\u6216\u5207\u6362\u5230\u4E0B\u62C9\u6A21\u5F0F",modelTextOnlyDesc:"\u8F93\u5165\u6B64\u63D0\u4F9B\u5546\u7684 AI \u6A21\u578B\u540D\u79F0\u3002",loadingModels:"\u6B63\u5728\u52A0\u8F7D\u6A21\u578B...",noModelsAvailable:"\u6CA1\u6709\u53EF\u7528\u7684\u6A21\u578B",editProvider:"\u7F16\u8F91\u63D0\u4F9B\u5546",developerSettings:"\u5F00\u53D1\u8005\u9009\u9879",developerSettingsDesc:"\u542F\u7528\u989D\u5916\u7684\u5F00\u53D1\u548C\u8C03\u8BD5\u8BBE\u7F6E",debugLogging:"\u8C03\u8BD5\u65E5\u5FD7",debugLoggingDesc:"\u5728\u63A7\u5236\u53F0\u542F\u7528\u8BE6\u7EC6\u65E5\u5FD7\u8BB0\u5F55",useNativeFetch:"\u4F7F\u7528\u539F\u751F Fetch",useNativeFetchDesc:"\u4F7F\u7528 Fetch API \u66FF\u4EE3 Obsidian\uFF0C\u4EE5\u4FBF\u5728 DevTools \u4E2D\u66F4\u597D\u5730\u8C03\u8BD5\u8BF7\u6C42"},modals:{confirm:"\u786E\u8BA4",cancel:"\u53D6\u6D88"},errors:{failedToFetchModels:"\u83B7\u53D6\u6A21\u578B\u5217\u8868\u5931\u8D25",failedToExecuteRequest:"\u8BF7\u6C42\u6267\u884C\u5931\u8D25",failedToEmbed:"\u751F\u6210\u5D4C\u5165\u5931\u8D25",missingApiKey:"\u9700\u8981\u63D0\u4F9B API \u5BC6\u94A5",missingUrl:"\u9700\u8981\u63D0\u4F9B\u670D\u52A1\u5730\u5740",missingModel:"\u9700\u8981\u9009\u62E9\u6A21\u578B",pluginMustBeUpdated:"\u63D2\u4EF6\u9700\u8981\u66F4\u65B0",pluginMustBeUpdatedFormatted:"\u63D2\u4EF6\u9700\u8981\u66F4\u65B0\u624D\u80FD\u4E0E\u6B64\u7248\u672C\u7684 AI Providers \u4E00\u8D77\u4F7F\u7528",providerNameRequired:"\u9700\u8981\u63D0\u4F9B\u5546\u540D\u79F0",providerNameExists:'\u540D\u4E3A"{{name}}"\u7684\u63D0\u4F9B\u5546\u5DF2\u5B58\u5728'}};var Kr=class{constructor(){this.enabled=!1}isEnabled(){return this.enabled}setEnabled(e){this.enabled=e}log(e,...t){if(!this.enabled)return;let r=new Date().toISOString(),s=`[AI Providers ${e.toUpperCase()}] ${r}:`;switch(e){case"debug":console.log(s,...t);break;case"info":console.info(s,...t);break;case"warn":console.warn(s,...t);break;case"error":console.error(s,...t);break}}debug(...e){this.log("debug",...e)}info(...e){this.log("info",...e)}warn(...e){this.log("warn",...e)}error(...e){this.log("error",...e)}time(e){this.enabled&&console.time(`[AI Providers] ${e}`)}timeEnd(e){this.enabled&&console.timeEnd(`[AI Providers] ${e}`)}},p=new Kr;var Jr={en:Qn,ru:Yn,de:Gn,zh:Zn},_=class{static t(e,t){let r=window.localStorage.getItem("language")||"en",s=e.split("."),i=Jr[r]||Jr.en;for(let a of s){if((i==null?void 0:i[a])===void 0){p.warn(`Translation missing: ${e}`),i=Jr.en;let c=i;for(let l of s)c=c==null?void 0:c[l];return c||e}i=i[a]}let o=i;return t&&Object.entries(t).forEach(([a,c])=>{o=o.replace(`{{${a}}}`,c)}),o}};var fr=require("obsidian");var ht=class extends fr.Modal{constructor(t,r,s,i=()=>{}){super(t);this.message=r;this.onConfirm=s,this.onCancel=i}onOpen(){let{contentEl:t}=this;t.createEl("p",{text:this.message}),new fr.Setting(t).addButton(r=>r.setButtonText(_.t("modals.confirm")).setWarning().onClick(()=>{this.onConfirm(),this.close()})).addButton(r=>r.setButtonText(_.t("modals.cancel")).onClick(()=>{this.onCancel(),this.close()}))}onClose(){let{contentEl:t}=this;t.empty()}};var Q=require("obsidian");var ft={openai:{url:"https://api.openai.com/v1",name:"OpenAI"},ollama:{url:"http://localhost:11434",name:"Ollama"},"ollama-openwebui":{url:"http://localhost:3000/ollama",name:"Ollama (Open WebUI)"},gemini:{url:"https://generativelanguage.googleapis.com/v1beta/openai",name:"Google Gemini"},openrouter:{url:"https://openrouter.ai/api/v1",name:"OpenRouter"},lmstudio:{url:"http://localhost:1234/v1",name:"LM Studio"},groq:{url:"https://api.groq.com/openai/v1",name:"Groq"},ai302:{url:"https://api.302.ai",name:"302.AI",options:{modelsFetching:!1}}},mr=class extends Q.Modal{constructor(t,r,s,i,o=!1){super(t);this.plugin=r;this.provider=s;this.onSave=i;this.isAddingNew=o;this.nameModified=!1;this.urlModified=!1;this.isTextMode=!1;this.isLoadingModels=!1}hasModelFetching(t){var s;return((s=ft[t].options)==null?void 0:s.modelsFetching)!==!1}getModelDescription(t,r){return r?_.t("settings.modelTextOnlyDesc"):t?_.t("settings.modelTextDesc"):_.t("settings.modelDesc")}getDefaultName(t){return ft[t].name}initDefaults(){this.nameModified=!1,this.urlModified=!1,this.provider.url||(this.provider.url=ft[this.provider.type].url),this.isAddingNew&&!this.provider.name&&(this.provider.name=this.getDefaultName(this.provider.type))}createModelSetting(t){let r=!this.hasModelFetching(this.provider.type),s=this.isTextMode||r,i=new Q.Setting(t).setName(_.t("settings.model")).setDesc(this.getModelDescription(s,r));return s?this.createTextInput(i):(this.createDropdown(i),this.createRefresh(i)),this.setupDescription(i,s,r),i}createTextInput(t){t.addText(r=>(r.setValue(this.provider.model||"").onChange(s=>{this.provider.model=s}),r.inputEl.setAttribute("data-testid","model-input"),r))}createDropdown(t){t.addDropdown(r=>(this.populateDropdown(r),this.setupDropdown(r),r))}populateDropdown(t){if(this.isLoadingModels){t.addOption("loading",_.t("settings.loadingModels")),t.setDisabled(!0);return}let r=this.provider.availableModels;if(!r||r.length===0){t.addOption("none",_.t("settings.noModelsAvailable")),t.setDisabled(!0);return}r.forEach(s=>{t.addOption(s,s);let i=t.selectEl.options,o=i[i.length-1];o.title=s}),t.setDisabled(!1)}setupDropdown(t){var r;t.setValue(this.provider.model||"").onChange(s=>{this.provider.model=s,t.selectEl.title=s}),t.selectEl.setAttribute("data-testid","model-dropdown"),t.selectEl.title=this.provider.model||"",(r=t.selectEl.parentElement)==null||r.addClass("ai-providers-model-dropdown")}createRefresh(t){t.addButton(r=>{r.setIcon("refresh-cw").setTooltip(_.t("settings.refreshModelsList")),r.buttonEl.setAttribute("data-testid","refresh-models-button"),this.isLoadingModels&&(r.setDisabled(!0),r.buttonEl.addClass("loading")),r.onClick(async()=>{await this.refreshModels()})})}async refreshModels(){try{this.isLoadingModels=!0,this.display();let t=await this.plugin.aiProviders.fetchModels(this.provider);this.provider.availableModels=t,t.length>0&&(this.provider.model=t[0]||""),new Q.Notice(_.t("settings.modelsUpdated"))}catch(t){p.error("Failed to fetch models:",t),new Q.Notice(_.t("errors.failedToFetchModels"))}finally{this.isLoadingModels=!1,this.display()}}setupDescription(t,r,s){let i=t.descEl;if(i.empty(),i.appendChild((0,Q.sanitizeHTMLToDom)(this.getModelDescription(r,s))),!s){let o=i.querySelector("a");o&&o.addEventListener("click",a=>{a.preventDefault(),this.isTextMode=!this.isTextMode,this.display()})}}onOpen(){let{contentEl:t}=this;this.initDefaults(),t.createEl("h2",{text:this.isAddingNew?_.t("settings.addNewProvider"):_.t("settings.editProvider")}).setAttribute("data-testid","provider-form-title"),new Q.Setting(t).setName(_.t("settings.providerType")).setDesc(_.t("settings.providerTypeDesc")).addDropdown(r=>{let s=Object.entries(ft).reduce((i,[o,a])=>(i[o]=a.name,i),{});return r.addOptions(s).setValue(this.provider.type).onChange(i=>{this.changeProviderType(i)}),r.selectEl.setAttribute("data-testid","provider-type-dropdown"),r}),new Q.Setting(t).setName(_.t("settings.providerName")).setDesc(_.t("settings.providerNameDesc")).addText(r=>(r.setPlaceholder(_.t("settings.providerNamePlaceholder")).setValue(this.provider.name).onChange(s=>{this.provider.name=s,this.nameModified=!0}),r.inputEl.setAttribute("data-field","provider-name"),r)),new Q.Setting(t).setName(_.t("settings.providerUrl")).setDesc(_.t("settings.providerUrlDesc")).addText(r=>(r.setPlaceholder(_.t("settings.providerUrlPlaceholder")).setValue(this.provider.url||"").onChange(s=>{this.provider.url=s,this.urlModified=!0}),r.inputEl.setAttribute("data-field","provider-url"),r)),new Q.Setting(t).setName(_.t("settings.apiKey")).setDesc(_.t("settings.apiKeyDesc")).addText(r=>r.setPlaceholder(_.t("settings.apiKeyPlaceholder")).setValue(this.provider.apiKey||"").onChange(s=>{this.provider.apiKey=s})),this.createModelSetting(t),new Q.Setting(t).addButton(r=>r.setButtonText(_.t("settings.save")).setCta().onClick(async()=>{this.provider.name=this.provider.name.trim(),await this.onSave(this.provider)})).addButton(r=>(r.setButtonText(_.t("settings.cancel")).onClick(()=>{this.close()}),r.buttonEl.setAttribute("data-testid","cancel-button"),r))}onClose(){let{contentEl:t}=this;t.empty()}changeProviderType(t){let r=this.getDefaultName(this.provider.type),s=ft[this.provider.type].url,i=this.hasModelFetching(this.provider.type),o=this.hasModelFetching(t);this.provider.type=t,this.provider.availableModels=void 0,this.provider.model=void 0,this.isAddingNew&&(!this.urlModified||this.provider.url===s)&&(this.provider.url=ft[t].url,this.urlModified=!1),this.isAddingNew&&(!this.nameModified||this.provider.name===r)&&(this.provider.name=this.getDefaultName(t),this.nameModified=!1),i!==o?this.display():this.updateFields()}updateFields(){let t=this.contentEl.querySelector('input[data-field="provider-url"]'),r=this.contentEl.querySelector('input[data-field="provider-name"]');t&&(t.value=this.provider.url||""),r&&(r.value=this.provider.name)}display(){let{contentEl:t}=this;t.empty(),this.onOpen()}};var es={_version:1,debugLogging:!1,useNativeFetch:!1},pr=class extends Y.PluginSettingTab{constructor(t,r){super(t,r);this.isFormOpen=!1;this.isDeveloperMode=!1;this.plugin=r}openForm(t,r){let s=r||{id:`id-${Date.now().toString()}`,name:"",apiKey:"",url:"",type:"openai",model:""};this.currentModal=new mr(this.app,this.plugin,s,async i=>{await this.saveProvider(i)},t),this.currentModal.open()}closeForm(){this.isFormOpen=!1,this.currentModal&&(this.currentModal.close(),this.currentModal=void 0),this.display()}validateProvider(t){return!t.name||t.name.trim()===""?{isValid:!1,error:_.t("errors.providerNameRequired")}:(this.plugin.settings.providers||[]).find(i=>i.name.trim()===t.name.trim()&&i.id!==t.id)?{isValid:!1,error:_.t("errors.providerNameExists",{name:t.name})}:{isValid:!0}}async saveProvider(t){let r=this.validateProvider(t);if(!r.isValid){new Y.Notice(r.error);return}let s=this.plugin.settings.providers||[],i=s.findIndex(o=>o.id===t.id);i!==-1?s[i]=t:s.push(t),this.plugin.settings.providers=s,await this.plugin.saveSettings(),this.closeForm()}async deleteProvider(t){let r=this.plugin.settings.providers||[],s=r.findIndex(i=>i.id===t.id);s!==-1&&(r.splice(s,1),this.plugin.settings.providers=r,await this.plugin.saveSettings(),this.display())}async duplicateProvider(t){let r={...t,id:`id-${Date.now().toString()}`,name:`${t.name} (${_.t("settings.duplicate")})`},s=this.plugin.settings.providers||[];s.push(r),this.plugin.settings.providers=s,await this.plugin.saveSettings(),this.display()}display(){let{containerEl:t}=this;t.empty();let r=t.createDiv("ai-providers-main-interface");r.setAttribute("data-testid","main-interface"),r.createDiv("ai-providers-notice").createDiv("ai-providers-notice-content").appendChild((0,Y.sanitizeHTMLToDom)(`${_.t("settings.notice")}`)),new Y.Setting(r).setHeading().setName(_.t("settings.configuredProviders")).addButton(a=>{let c=a.setIcon("plus").setTooltip(_.t("settings.addProvider")).onClick(()=>{this.isFormOpen||this.openForm(!0)});return c.buttonEl.setAttribute("aria-label",_.t("settings.addProvider")),c.buttonEl.setAttribute("data-testid","add-provider-button"),c});let o=this.plugin.settings.providers||[];if(o.length>0&&o.forEach(a=>{let c=new Y.Setting(r).setName(a.name).setDesc(a.url||""),l=c.nameEl.createSpan("ai-providers-provider-icon");if((0,Y.setIcon)(l,`ai-providers-${a.type}`),c.nameEl.prepend(l),a.model){let d=c.settingEl.createDiv("ai-providers-model-pill");d.textContent=a.model,d.setAttribute("data-testid","model-pill"),c.nameEl.after(d)}c.addExtraButton(d=>{d.setIcon("gear").setTooltip(_.t("settings.options")).onClick(()=>{this.isFormOpen||this.openForm(!1,{...a})}),d.extraSettingsEl.setAttribute("data-testid","edit-provider")}).addExtraButton(d=>{d.setIcon("copy").setTooltip(_.t("settings.duplicate")).onClick(async()=>{await this.duplicateProvider(a)}),d.extraSettingsEl.setAttribute("data-testid","duplicate-provider")}).addExtraButton(d=>{d.setIcon("lucide-trash-2").setTooltip(_.t("settings.delete")).onClick(async()=>{new ht(this.app,_.t("settings.deleteConfirmation",{name:a.name}),async()=>{await this.deleteProvider(a)}).open()}),d.extraSettingsEl.setAttribute("data-testid","delete-provider")})}),new Y.Setting(r).setHeading().setName(_.t("settings.developerSettings")).setDesc(_.t("settings.developerSettingsDesc")).setClass("ai-providers-developer-settings-toggle").addToggle(a=>a.setValue(this.isDeveloperMode).onChange(c=>{this.isDeveloperMode=c,this.display()})),this.isDeveloperMode){let a=r.createDiv("ai-providers-developer-settings");new Y.Setting(a).setName(_.t("settings.debugLogging")).setDesc(_.t("settings.debugLoggingDesc")).addToggle(c=>{var l;return c.setValue((l=this.plugin.settings.debugLogging)!=null?l:!1).onChange(async d=>{this.plugin.settings.debugLogging=d,p.setEnabled(d),await this.plugin.saveSettings()})}),new Y.Setting(a).setName(_.t("settings.useNativeFetch")).setDesc(_.t("settings.useNativeFetchDesc")).addToggle(c=>{var l;return c.setValue((l=this.plugin.settings.useNativeFetch)!=null?l:!1).onChange(async d=>{this.plugin.settings.useNativeFetch=d,await this.plugin.saveSettings()})})}}};var Wr=require("obsidian");var gr="RFC3986",yr={RFC1738:n=>String(n).replace(/%20/g,"+"),RFC3986:n=>String(n)},ts="RFC1738";var Ti=Array.isArray,ue=(()=>{let n=[];for(let e=0;e<256;++e)n.push("%"+((e<16?"0":"")+e.toString(16)).toUpperCase());return n})();var Xr=1024,rs=(n,e,t,r,s)=>{if(n.length===0)return n;let i=n;if(typeof n=="symbol"?i=Symbol.prototype.toString.call(n):typeof n!="string"&&(i=String(n)),t==="iso-8859-1")return escape(i).replace(/%u[0-9a-f]{4}/gi,function(a){return"%26%23"+parseInt(a.slice(2),16)+"%3B"});let o="";for(let a=0;a=Xr?i.slice(a,a+Xr):i,l=[];for(let d=0;d=48&&u<=57||u>=65&&u<=90||u>=97&&u<=122||s===ts&&(u===40||u===41)){l[l.length]=c.charAt(d);continue}if(u<128){l[l.length]=ue[u];continue}if(u<2048){l[l.length]=ue[192|u>>6]+ue[128|u&63];continue}if(u<55296||u>=57344){l[l.length]=ue[224|u>>12]+ue[128|u>>6&63]+ue[128|u&63];continue}d+=1,u=65536+((u&1023)<<10|c.charCodeAt(d)&1023),l[l.length]=ue[240|u>>18]+ue[128|u>>12&63]+ue[128|u>>6&63]+ue[128|u&63]}o+=l.join("")}return o};function ns(n){return!n||typeof n!="object"?!1:!!(n.constructor&&n.constructor.isBuffer&&n.constructor.isBuffer(n))}function Gr(n,e){if(Ti(n)){let t=[];for(let r=0;r0?b.join(",")||null:void 0}];else if(he(l))T=l;else{let E=Object.keys(b);T=d?E.sort(d):E}let M=a?String(e).replace(/\./g,"%2E"):String(e),x=r&&he(b)&&b.length===1?M+"[]":M;if(s&&he(b)&&b.length===0)return x+"[]";for(let E=0;E0?u+d:""}var He="4.73.1";var as=!1,We,Zr,$i,Ui,ji,en,qi,br,tn,rn,nn,wr,sn;function cs(n,e={auto:!1}){if(as)throw new Error(`you must \`import 'openai/shims/${n.kind}'\` before importing anything else from openai`);if(We)throw new Error(`can't \`import 'openai/shims/${n.kind}'\` after \`import 'openai/shims/${We}'\``);as=e.auto,We=n.kind,Zr=n.fetch,$i=n.Request,Ui=n.Response,ji=n.Headers,en=n.FormData,qi=n.Blob,br=n.File,tn=n.ReadableStream,rn=n.getMultipartRequestOptions,nn=n.getDefaultAgent,wr=n.fileFromPath,sn=n.isFsReadStream}var vr=class{constructor(e){this.body=e}get[Symbol.toStringTag](){return"MultipartBody"}};function ls({manuallyImported:n}={}){let e=n?"You may need to use polyfills":"Add one of these imports before your first `import \u2026 from 'openai'`:\n- `import 'openai/shims/node'` (if you're running on Node)\n- `import 'openai/shims/web'` (otherwise)\n",t,r,s,i;try{t=fetch,r=Request,s=Response,i=Headers}catch(o){throw new Error(`this environment is missing the following Web Fetch API type: ${o.message}. ${e}`)}return{kind:"web",fetch:t,Request:r,Response:s,Headers:i,FormData:typeof FormData!="undefined"?FormData:class{constructor(){throw new Error(`file uploads aren't supported in this environment yet as 'FormData' is undefined. ${e}`)}},Blob:typeof Blob!="undefined"?Blob:class{constructor(){throw new Error(`file uploads aren't supported in this environment yet as 'Blob' is undefined. ${e}`)}},File:typeof File!="undefined"?File:class{constructor(){throw new Error(`file uploads aren't supported in this environment yet as 'File' is undefined. ${e}`)}},ReadableStream:typeof ReadableStream!="undefined"?ReadableStream:class{constructor(){throw new Error(`streaming isn't supported in this environment yet as 'ReadableStream' is undefined. ${e}`)}},getMultipartRequestOptions:async(o,a)=>({...a,body:new vr(o)}),getDefaultAgent:o=>{},fileFromPath:()=>{throw new Error("The `fileFromPath` function is only supported in Node. See the README for more details: https://www.github.com/openai/openai-node#file-uploads")},isFsReadStream:o=>!1}}We||cs(ls(),{auto:!0});var A=class extends Error{},$=class extends A{constructor(e,t,r,s){super(`${$.makeMessage(e,t,r)}`),this.status=e,this.headers=s,this.request_id=s==null?void 0:s["x-request-id"];let i=t;this.error=i,this.code=i==null?void 0:i.code,this.param=i==null?void 0:i.param,this.type=i==null?void 0:i.type}static makeMessage(e,t,r){let s=t!=null&&t.message?typeof t.message=="string"?t.message:JSON.stringify(t.message):t?JSON.stringify(t):r;return e&&s?`${e} ${s}`:e?`${e} status code (no body)`:s||"(no status code or body)"}static generate(e,t,r,s){if(!e)return new Re({message:r,cause:_r(t)});let i=t==null?void 0:t.error;return e===400?new jt(e,i,r,s):e===401?new qt(e,i,r,s):e===403?new Ht(e,i,r,s):e===404?new Wt(e,i,r,s):e===409?new Vt(e,i,r,s):e===422?new zt(e,i,r,s):e===429?new Kt(e,i,r,s):e>=500?new Jt(e,i,r,s):new $(e,i,r,s)}},H=class extends ${constructor({message:e}={}){super(void 0,void 0,e||"Request was aborted.",void 0),this.status=void 0}},Re=class extends ${constructor({message:e,cause:t}){super(void 0,void 0,e||"Connection error.",void 0),this.status=void 0,t&&(this.cause=t)}},Oe=class extends Re{constructor({message:e}={}){super({message:e!=null?e:"Request timed out."})}},jt=class extends ${constructor(){super(...arguments),this.status=400}},qt=class extends ${constructor(){super(...arguments),this.status=401}},Ht=class extends ${constructor(){super(...arguments),this.status=403}},Wt=class extends ${constructor(){super(...arguments),this.status=404}},Vt=class extends ${constructor(){super(...arguments),this.status=409}},zt=class extends ${constructor(){super(...arguments),this.status=422}},Kt=class extends ${constructor(){super(...arguments),this.status=429}},Jt=class extends ${},mt=class extends A{constructor(){super("Could not parse response content as the length limit was reached")}},pt=class extends A{constructor(){super("Could not parse response content as the request was rejected by the content filter")}};var fe=class{constructor(){this.buffer=[],this.trailingCR=!1}decode(e){let t=this.decodeText(e);if(this.trailingCR&&(t="\r"+t,this.trailingCR=!1),t.endsWith("\r")&&(this.trailingCR=!0,t=t.slice(0,-1)),!t)return[];let r=fe.NEWLINE_CHARS.has(t[t.length-1]||""),s=t.split(fe.NEWLINE_REGEXP);return r&&s.pop(),s.length===1&&!r?(this.buffer.push(s[0]),[]):(this.buffer.length>0&&(s=[this.buffer.join("")+s[0],...s.slice(1)],this.buffer=[]),r||(this.buffer=[s.pop()||""]),s)}decodeText(e){var t;if(e==null)return"";if(typeof e=="string")return e;if(typeof Buffer!="undefined"){if(e instanceof Buffer)return e.toString();if(e instanceof Uint8Array)return Buffer.from(e).toString();throw new A(`Unexpected: received non-Uint8Array (${e.constructor.name}) stream chunk in an environment with a global "Buffer" defined, which this library assumes to be Node. Please report this error.`)}if(typeof TextDecoder!="undefined"){if(e instanceof Uint8Array||e instanceof ArrayBuffer)return(t=this.textDecoder)!=null||(this.textDecoder=new TextDecoder("utf8")),this.textDecoder.decode(e);throw new A(`Unexpected: received non-Uint8Array/ArrayBuffer (${e.constructor.name}) in a web platform. Please report this error.`)}throw new A("Unexpected: neither Buffer nor TextDecoder are available as globals. Please report this error.")}flush(){if(!this.buffer.length&&!this.trailingCR)return[];let e=[this.buffer.join("")];return this.buffer=[],this.trailingCR=!1,e}};fe.NEWLINE_CHARS=new Set([` +`,"\r"]);fe.NEWLINE_REGEXP=/\r\n|[\n\r]/g;var J=class{constructor(e,t){this.iterator=e,this.controller=t}static fromSSEResponse(e,t){let r=!1;async function*s(){if(r)throw new Error("Cannot iterate over a consumed stream, use `.tee()` to split the stream.");r=!0;let i=!1;try{for await(let o of Vi(e,t))if(!i){if(o.data.startsWith("[DONE]")){i=!0;continue}if(o.event===null){let a;try{a=JSON.parse(o.data)}catch(c){throw console.error("Could not parse message into JSON:",o.data),console.error("From chunk:",o.raw),c}if(a&&a.error)throw new $(void 0,a.error,void 0,void 0);yield a}else{let a;try{a=JSON.parse(o.data)}catch(c){throw console.error("Could not parse message into JSON:",o.data),console.error("From chunk:",o.raw),c}if(o.event=="error")throw new $(void 0,a.error,a.message,void 0);yield{event:o.event,data:a}}}i=!0}catch(o){if(o instanceof Error&&o.name==="AbortError")return;throw o}finally{i||t.abort()}}return new J(s,t)}static fromReadableStream(e,t){let r=!1;async function*s(){let o=new fe,a=ds(e);for await(let c of a)for(let l of o.decode(c))yield l;for(let c of o.flush())yield c}async function*i(){if(r)throw new Error("Cannot iterate over a consumed stream, use `.tee()` to split the stream.");r=!0;let o=!1;try{for await(let a of s())o||a&&(yield JSON.parse(a));o=!0}catch(a){if(a instanceof Error&&a.name==="AbortError")return;throw a}finally{o||t.abort()}}return new J(i,t)}[Symbol.asyncIterator](){return this.iterator()}tee(){let e=[],t=[],r=this.iterator(),s=i=>({next:()=>{if(i.length===0){let o=r.next();e.push(o),t.push(o)}return i.shift()}});return[new J(()=>s(e),this.controller),new J(()=>s(t),this.controller)]}toReadableStream(){let e=this,t,r=new TextEncoder;return new tn({async start(){t=e[Symbol.asyncIterator]()},async pull(s){try{let{value:i,done:o}=await t.next();if(o)return s.close();let a=r.encode(JSON.stringify(i)+` +`);s.enqueue(a)}catch(i){s.error(i)}},async cancel(){var s;await((s=t.return)==null?void 0:s.call(t))}})}};async function*Vi(n,e){if(!n.body)throw e.abort(),new A("Attempted to iterate over a response with no body");let t=new on,r=new fe,s=ds(n.body);for await(let i of zi(s))for(let o of r.decode(i)){let a=t.decode(o);a&&(yield a)}for(let i of r.flush()){let o=t.decode(i);o&&(yield o)}}async function*zi(n){let e=new Uint8Array;for await(let t of n){if(t==null)continue;let r=t instanceof ArrayBuffer?new Uint8Array(t):typeof t=="string"?new TextEncoder().encode(t):t,s=new Uint8Array(e.length+r.length);s.set(e),s.set(r,e.length),e=s;let i;for(;(i=Ki(e))!==-1;)yield e.slice(0,i),e=e.slice(i)}e.length>0&&(yield e)}function Ki(n){for(let r=0;rn!=null&&typeof n=="object"&&typeof n.url=="string"&&typeof n.blob=="function",hs=n=>n!=null&&typeof n=="object"&&typeof n.name=="string"&&typeof n.lastModified=="number"&&Xt(n),Xt=n=>n!=null&&typeof n=="object"&&typeof n.size=="number"&&typeof n.type=="string"&&typeof n.text=="function"&&typeof n.slice=="function"&&typeof n.arrayBuffer=="function",Xi=n=>hs(n)||us(n)||sn(n);async function ln(n,e,t){var s,i,o;if(n=await n,hs(n))return n;if(us(n)){let a=await n.blob();e||(e=(s=new URL(n.url).pathname.split(/[\\/]/).pop())!=null?s:"unknown_file");let c=Xt(a)?[await a.arrayBuffer()]:[a];return new br(c,e,t)}let r=await Gi(n);if(e||(e=(i=Yi(n))!=null?i:"unknown_file"),!(t!=null&&t.type)){let a=(o=r[0])==null?void 0:o.type;typeof a=="string"&&(t={...t,type:a})}return new br(r,e,t)}async function Gi(n){var t;let e=[];if(typeof n=="string"||ArrayBuffer.isView(n)||n instanceof ArrayBuffer)e.push(n);else if(Xt(n))e.push(await n.arrayBuffer());else if(Zi(n))for await(let r of n)e.push(r);else throw new Error(`Unexpected data type: ${typeof n}; constructor: ${(t=n==null?void 0:n.constructor)==null?void 0:t.name}; props: ${Qi(n)}`);return e}function Qi(n){return`[${Object.getOwnPropertyNames(n).map(t=>`"${t}"`).join(", ")}]`}function Yi(n){var e;return an(n.name)||an(n.filename)||((e=an(n.path))==null?void 0:e.split(/[\\/]/).pop())}var an=n=>{if(typeof n=="string")return n;if(typeof Buffer!="undefined"&&n instanceof Buffer)return String(n)},Zi=n=>n!=null&&typeof n=="object"&&typeof n[Symbol.asyncIterator]=="function",dn=n=>n&&typeof n=="object"&&n.body&&n[Symbol.toStringTag]==="MultipartBody";var ie=async n=>{let e=await fs(n.body);return rn(e,n)},fs=async n=>{let e=new en;return await Promise.all(Object.entries(n||{}).map(([t,r])=>cn(e,t,r))),e};var cn=async(n,e,t)=>{if(t!==void 0){if(t==null)throw new TypeError(`Received null for "${e}"; to pass null in FormData, you must use the string 'null'`);if(typeof t=="string"||typeof t=="number"||typeof t=="boolean")n.append(e,String(t));else if(Xi(t)){let r=await ln(t);n.append(e,r)}else if(Array.isArray(t))await Promise.all(t.map(r=>cn(n,e+"[]",r)));else if(typeof t=="object")await Promise.all(Object.entries(t).map(([r,s])=>cn(n,`${e}[${r}]`,s)));else throw new TypeError(`Invalid value given to form, expected a string, number, boolean, object, Array, File or Blob but got ${t} instead`)}};var to=function(n,e,t,r,s){if(r==="m")throw new TypeError("Private method is not writable");if(r==="a"&&!s)throw new TypeError("Private accessor was defined without a setter");if(typeof e=="function"?n!==e||!s:!e.has(n))throw new TypeError("Cannot write private member to an object whose class did not declare it");return r==="a"?s.call(n,t):s?s.value=t:e.set(n,t),t},ro=function(n,e,t,r){if(t==="a"&&!r)throw new TypeError("Private accessor was defined without a getter");if(typeof e=="function"?n!==e||!r:!e.has(n))throw new TypeError("Cannot read private member from an object whose class did not declare it");return t==="m"?r:t==="a"?r.call(n):r?r.value:e.get(n)},Ar;async function bs(n){let{response:e}=n;if(n.options.stream)return gt("response",e.status,e.url,e.headers,e.body),n.options.__streamClass?n.options.__streamClass.fromSSEResponse(e,n.controller):J.fromSSEResponse(e,n.controller);if(e.status===204)return null;if(n.options.__binaryResponse)return e;let t=e.headers.get("content-type");if((t==null?void 0:t.includes("application/json"))||(t==null?void 0:t.includes("application/vnd.api+json"))){let i=await e.json();return gt("response",e.status,e.url,e.headers,i),ws(i,e)}let s=await e.text();return gt("response",e.status,e.url,e.headers,s),s}function ws(n,e){return!n||typeof n!="object"||Array.isArray(n)?n:Object.defineProperty(n,"_request_id",{value:e.headers.get("x-request-id"),enumerable:!1})}var yt=class extends Promise{constructor(e,t=bs){super(r=>{r(null)}),this.responsePromise=e,this.parseResponse=t}_thenUnwrap(e){return new yt(this.responsePromise,async t=>ws(e(await this.parseResponse(t),t),t.response))}asResponse(){return this.responsePromise.then(e=>e.response)}async withResponse(){let[e,t]=await Promise.all([this.parse(),this.asResponse()]);return{data:e,response:t,request_id:t.headers.get("x-request-id")}}parse(){return this.parsedPromise||(this.parsedPromise=this.responsePromise.then(this.parseResponse)),this.parsedPromise}then(e,t){return this.parse().then(e,t)}catch(e){return this.parse().catch(e)}finally(e){return this.parse().finally(e)}},Ir=class{constructor({baseURL:e,maxRetries:t=2,timeout:r=6e5,httpAgent:s,fetch:i}){this.baseURL=e,this.maxRetries=un("maxRetries",t),this.timeout=un("timeout",r),this.httpAgent=s,this.fetch=i!=null?i:Zr}authHeaders(e){return{}}defaultHeaders(e){return{Accept:"application/json","Content-Type":"application/json","User-Agent":this.getUserAgent(),...ao(),...this.authHeaders(e)}}validateHeaders(e,t){}defaultIdempotencyKey(){return`stainless-node-retry-${ho()}`}get(e,t){return this.methodRequest("get",e,t)}post(e,t){return this.methodRequest("post",e,t)}patch(e,t){return this.methodRequest("patch",e,t)}put(e,t){return this.methodRequest("put",e,t)}delete(e,t){return this.methodRequest("delete",e,t)}methodRequest(e,t,r){return this.request(Promise.resolve(r).then(async s=>{let i=s&&Xt(s==null?void 0:s.body)?new DataView(await s.body.arrayBuffer()):(s==null?void 0:s.body)instanceof DataView?s.body:(s==null?void 0:s.body)instanceof ArrayBuffer?new DataView(s.body):s&&ArrayBuffer.isView(s==null?void 0:s.body)?new DataView(s.body.buffer):s==null?void 0:s.body;return{method:e,path:t,...s,body:i}}))}getAPIList(e,t,r){return this.requestAPIList(t,{method:"get",path:e,...r})}calculateContentLength(e){if(typeof e=="string"){if(typeof Buffer!="undefined")return Buffer.byteLength(e,"utf8").toString();if(typeof TextEncoder!="undefined")return new TextEncoder().encode(e).length.toString()}else if(ArrayBuffer.isView(e))return e.byteLength.toString();return null}buildRequest(e,{retryCount:t=0}={}){var v,g,O,b,C,N;let{method:r,path:s,query:i,headers:o={}}=e,a=ArrayBuffer.isView(e.body)||e.__binaryRequest&&typeof e.body=="string"?e.body:dn(e.body)?e.body.body:e.body?JSON.stringify(e.body,null,2):null,c=this.calculateContentLength(a),l=this.buildURL(s,i);"timeout"in e&&un("timeout",e.timeout);let d=(v=e.timeout)!=null?v:this.timeout,u=(O=(g=e.httpAgent)!=null?g:this.httpAgent)!=null?O:nn(l),h=d+1e3;typeof((b=u==null?void 0:u.options)==null?void 0:b.timeout)=="number"&&h>((C=u.options.timeout)!=null?C:0)&&(u.options.timeout=h),this.idempotencyHeader&&r!=="get"&&(e.idempotencyKey||(e.idempotencyKey=this.defaultIdempotencyKey()),o[this.idempotencyHeader]=e.idempotencyKey);let m=this.buildHeaders({options:e,headers:o,contentLength:c,retryCount:t});return{req:{method:r,...a&&{body:a},headers:m,...u&&{agent:u},signal:(N=e.signal)!=null?N:null},url:l,timeout:d}}buildHeaders({options:e,headers:t,contentLength:r,retryCount:s}){let i={};r&&(i["content-length"]=r);let o=this.defaultHeaders(e);return gs(i,o),gs(i,t),dn(e.body)&&We!=="node"&&delete i["content-type"],ys(o,"x-stainless-retry-count")===void 0&&ys(t,"x-stainless-retry-count")===void 0&&(i["x-stainless-retry-count"]=String(s)),this.validateHeaders(i,t),i}async prepareOptions(e){}async prepareRequest(e,{url:t,options:r}){}parseHeaders(e){return e?Symbol.iterator in e?Object.fromEntries(Array.from(e).map(t=>[...t])):{...e}:{}}makeStatusError(e,t,r,s){return $.generate(e,t,r,s)}request(e,t=null){return new yt(this.makeRequest(e,t))}async makeRequest(e,t){var u,h,m;let r=await e,s=(u=r.maxRetries)!=null?u:this.maxRetries;t==null&&(t=s),await this.prepareOptions(r);let{req:i,url:o,timeout:a}=this.buildRequest(r,{retryCount:s-t});if(await this.prepareRequest(i,{url:o,options:r}),gt("request",o,r,i.headers),(h=r.signal)!=null&&h.aborted)throw new H;let c=new AbortController,l=await this.fetchWithTimeout(o,i,a,c).catch(_r);if(l instanceof Error){if((m=r.signal)!=null&&m.aborted)throw new H;if(t)return this.retryRequest(r,t);throw l.name==="AbortError"?new Oe:new Re({cause:l})}let d=no(l.headers);if(!l.ok){if(t&&this.shouldRetry(l)){let C=`retrying, ${t} attempts remaining`;return gt(`response (error; ${C})`,l.status,o,d),this.retryRequest(r,t,d)}let f=await l.text().catch(C=>_r(C).message),v=co(f),g=v?void 0:f;throw gt(`response (error; ${t?"(error; no more retries left)":"(error; not retryable)"})`,l.status,o,d,g),this.makeStatusError(l.status,v,g,d)}return{response:l,options:r,controller:c}}requestAPIList(e,t){let r=this.makeRequest(t,null);return new hn(this,r,e)}buildURL(e,t){let r=uo(e)?new URL(e):new URL(this.baseURL+(this.baseURL.endsWith("/")&&e.startsWith("/")?e.slice(1):e)),s=this.defaultQuery();return vs(s)||(t={...s,...t}),typeof t=="object"&&t&&!Array.isArray(t)&&(r.search=this.stringifyQuery(t)),r.toString()}stringifyQuery(e){return Object.entries(e).filter(([t,r])=>typeof r!="undefined").map(([t,r])=>{if(typeof r=="string"||typeof r=="number"||typeof r=="boolean")return`${encodeURIComponent(t)}=${encodeURIComponent(r)}`;if(r===null)return`${encodeURIComponent(t)}=`;throw new A(`Cannot stringify type ${typeof r}; Expected string, number, boolean, or null. If you need to pass nested query parameters, you can manually encode them, e.g. { query: { 'foo[key1]': value1, 'foo[key2]': value2 } }, and please open a GitHub issue requesting better support for your use case.`)}).join("&")}async fetchWithTimeout(e,t,r,s){let{signal:i,...o}=t||{};i&&i.addEventListener("abort",()=>s.abort());let a=setTimeout(()=>s.abort(),r);return this.getRequestClient().fetch.call(void 0,e,{signal:s.signal,...o}).finally(()=>{clearTimeout(a)})}getRequestClient(){return{fetch:this.fetch}}shouldRetry(e){let t=e.headers.get("x-should-retry");return t==="true"?!0:t==="false"?!1:e.status===408||e.status===409||e.status===429||e.status>=500}async retryRequest(e,t,r){var a;let s,i=r==null?void 0:r["retry-after-ms"];if(i){let c=parseFloat(i);Number.isNaN(c)||(s=c)}let o=r==null?void 0:r["retry-after"];if(o&&!s){let c=parseFloat(o);Number.isNaN(c)?s=Date.parse(o)-Date.now():s=c*1e3}if(!(s&&0<=s&&s<60*1e3)){let c=(a=e.maxRetries)!=null?a:this.maxRetries;s=this.calculateDefaultRetryTimeoutMillis(t,c)}return await Ae(s),this.makeRequest(e,t-1)}calculateDefaultRetryTimeoutMillis(e,t){let i=t-e,o=Math.min(.5*Math.pow(2,i),8),a=1-Math.random()*.25;return o*a*1e3}getUserAgent(){return`${this.constructor.name}/JS ${He}`}},Gt=class{constructor(e,t,r,s){Ar.set(this,void 0),to(this,Ar,e,"f"),this.options=s,this.response=t,this.body=r}hasNextPage(){return this.getPaginatedItems().length?this.nextPageInfo()!=null:!1}async getNextPage(){let e=this.nextPageInfo();if(!e)throw new A("No next page expected; please check `.hasNextPage()` before calling `.getNextPage()`.");let t={...this.options};if("params"in e&&typeof t.query=="object")t.query={...t.query,...e.params};else if("url"in e){let r=[...Object.entries(t.query||{}),...e.url.searchParams.entries()];for(let[s,i]of r)e.url.searchParams.set(s,i);t.query=void 0,t.path=e.url.toString()}return await ro(this,Ar,"f").requestAPIList(this.constructor,t)}async*iterPages(){let e=this;for(yield e;e.hasNextPage();)e=await e.getNextPage(),yield e}async*[(Ar=new WeakMap,Symbol.asyncIterator)](){for await(let e of this.iterPages())for(let t of e.getPaginatedItems())yield t}},hn=class extends yt{constructor(e,t,r){super(t,async s=>new r(e,s.response,await bs(s),s.options))}async*[Symbol.asyncIterator](){let e=await this;for await(let t of e)yield t}},no=n=>new Proxy(Object.fromEntries(n.entries()),{get(e,t){let r=t.toString();return e[r.toLowerCase()]||e[r]}}),so={method:!0,path:!0,query:!0,body:!0,headers:!0,maxRetries:!0,stream:!0,timeout:!0,httpAgent:!0,signal:!0,idempotencyKey:!0,__binaryRequest:!0,__binaryResponse:!0,__streamClass:!0},F=n=>typeof n=="object"&&n!==null&&!vs(n)&&Object.keys(n).every(e=>_s(so,e)),io=()=>{var e,t;if(typeof Deno!="undefined"&&Deno.build!=null)return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":He,"X-Stainless-OS":ps(Deno.build.os),"X-Stainless-Arch":ms(Deno.build.arch),"X-Stainless-Runtime":"deno","X-Stainless-Runtime-Version":typeof Deno.version=="string"?Deno.version:(t=(e=Deno.version)==null?void 0:e.deno)!=null?t:"unknown"};if(typeof EdgeRuntime!="undefined")return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":He,"X-Stainless-OS":"Unknown","X-Stainless-Arch":`other:${EdgeRuntime}`,"X-Stainless-Runtime":"edge","X-Stainless-Runtime-Version":process.version};if(Object.prototype.toString.call(typeof process!="undefined"?process:0)==="[object process]")return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":He,"X-Stainless-OS":ps(process.platform),"X-Stainless-Arch":ms(process.arch),"X-Stainless-Runtime":"node","X-Stainless-Runtime-Version":process.version};let n=oo();return n?{"X-Stainless-Lang":"js","X-Stainless-Package-Version":He,"X-Stainless-OS":"Unknown","X-Stainless-Arch":"unknown","X-Stainless-Runtime":`browser:${n.browser}`,"X-Stainless-Runtime-Version":n.version}:{"X-Stainless-Lang":"js","X-Stainless-Package-Version":He,"X-Stainless-OS":"Unknown","X-Stainless-Arch":"unknown","X-Stainless-Runtime":"unknown","X-Stainless-Runtime-Version":"unknown"}};function oo(){if(typeof navigator=="undefined"||!navigator)return null;let n=[{key:"edge",pattern:/Edge(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"ie",pattern:/MSIE(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"ie",pattern:/Trident(?:.*rv\:(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"chrome",pattern:/Chrome(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"firefox",pattern:/Firefox(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"safari",pattern:/(?:Version\W+(\d+)\.(\d+)(?:\.(\d+))?)?(?:\W+Mobile\S*)?\W+Safari/}];for(let{key:e,pattern:t}of n){let r=t.exec(navigator.userAgent);if(r){let s=r[1]||0,i=r[2]||0,o=r[3]||0;return{browser:e,version:`${s}.${i}.${o}`}}}return null}var ms=n=>n==="x32"?"x32":n==="x86_64"||n==="x64"?"x64":n==="arm"?"arm":n==="aarch64"||n==="arm64"?"arm64":n?`other:${n}`:"unknown",ps=n=>(n=n.toLowerCase(),n.includes("ios")?"iOS":n==="android"?"Android":n==="darwin"?"MacOS":n==="win32"?"Windows":n==="freebsd"?"FreeBSD":n==="openbsd"?"OpenBSD":n==="linux"?"Linux":n?`Other:${n}`:"Unknown"),Pr,ao=()=>Pr!=null?Pr:Pr=io(),co=n=>{try{return JSON.parse(n)}catch(e){return}},lo=new RegExp("^(?:[a-z]+:)?//","i"),uo=n=>lo.test(n),Ae=n=>new Promise(e=>setTimeout(e,n)),un=(n,e)=>{if(typeof e!="number"||!Number.isInteger(e))throw new A(`${n} must be an integer`);if(e<0)throw new A(`${n} must be a positive integer`);return e},_r=n=>{if(n instanceof Error)return n;if(typeof n=="object"&&n!==null)try{return new Error(JSON.stringify(n))}catch(e){}return new Error(n)};var Qt=n=>{var e,t,r,s,i,o;if(typeof process!="undefined")return(r=(t=(e=process.env)==null?void 0:e[n])==null?void 0:t.trim())!=null?r:void 0;if(typeof Deno!="undefined")return(o=(i=(s=Deno.env)==null?void 0:s.get)==null?void 0:i.call(s,n))==null?void 0:o.trim()};function vs(n){if(!n)return!0;for(let e in n)return!1;return!0}function _s(n,e){return Object.prototype.hasOwnProperty.call(n,e)}function gs(n,e){for(let t in e){if(!_s(e,t))continue;let r=t.toLowerCase();if(!r)continue;let s=e[t];s===null?delete n[r]:s!==void 0&&(n[r]=s)}}function gt(n,...e){var t;typeof process!="undefined"&&((t=process==null?void 0:process.env)==null?void 0:t.DEBUG)==="true"&&console.log(`OpenAI:DEBUG:${n}`,...e)}var ho=()=>"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,n=>{let e=Math.random()*16|0;return(n==="x"?e:e&3|8).toString(16)}),As=()=>typeof window!="undefined"&&typeof window.document!="undefined"&&typeof navigator!="undefined",fo=n=>typeof(n==null?void 0:n.get)=="function";var ys=(n,e)=>{var r;let t=e.toLowerCase();if(fo(n)){let s=((r=e[0])==null?void 0:r.toUpperCase())+e.substring(1).replace(/([^\w])(\w)/g,(i,o,a)=>o+a.toUpperCase());for(let i of[e,t,e.toUpperCase(),s]){let o=n.get(i);if(o)return o}}for(let[s,i]of Object.entries(n))if(s.toLowerCase()===t)return Array.isArray(i)?(i.length<=1||console.warn(`Received ${i.length} entries for the ${e} header, using the first entry.`),i[0]):i};function Yt(n){return n!=null&&typeof n=="object"&&!Array.isArray(n)}var xr=class extends Gt{constructor(e,t,r,s){super(e,t,r,s),this.data=r.data||[],this.object=r.object}getPaginatedItems(){var e;return(e=this.data)!=null?e:[]}nextPageParams(){return null}nextPageInfo(){return null}},B=class extends Gt{constructor(e,t,r,s){super(e,t,r,s),this.data=r.data||[]}getPaginatedItems(){var e;return(e=this.data)!=null?e:[]}nextPageParams(){let e=this.nextPageInfo();if(!e)return null;if("params"in e)return e.params;let t=Object.fromEntries(e.url.searchParams);return Object.keys(t).length?t:null}nextPageInfo(){var r;let e=this.getPaginatedItems();if(!e.length)return null;let t=(r=e[e.length-1])==null?void 0:r.id;return t?{params:{after:t}}:null}};var y=class{constructor(e){this._client=e}};var bt=class extends y{create(e,t){var r;return this._client.post("/chat/completions",{body:e,...t,stream:(r=e.stream)!=null?r:!1})}};var Me=class extends y{constructor(){super(...arguments),this.completions=new bt(this._client)}};Me.Completions=bt;var wt=class extends y{create(e,t){return this._client.post("/audio/speech",{body:e,...t,__binaryResponse:!0})}};var vt=class extends y{create(e,t){return this._client.post("/audio/transcriptions",ie({body:e,...t}))}};var _t=class extends y{create(e,t){return this._client.post("/audio/translations",ie({body:e,...t}))}};var me=class extends y{constructor(){super(...arguments),this.transcriptions=new vt(this._client),this.translations=new _t(this._client),this.speech=new wt(this._client)}};me.Transcriptions=vt;me.Translations=_t;me.Speech=wt;var Te=class extends y{create(e,t){return this._client.post("/batches",{body:e,...t})}retrieve(e,t){return this._client.get(`/batches/${e}`,t)}list(e={},t){return F(e)?this.list({},e):this._client.getAPIList("/batches",ze,{query:e,...t})}cancel(e,t){return this._client.post(`/batches/${e}/cancel`,t)}},ze=class extends B{};Te.BatchesPage=ze;var Ke=class extends y{create(e,t){return this._client.post("/assistants",{body:e,...t,headers:{"OpenAI-Beta":"assistants=v2",...t==null?void 0:t.headers}})}retrieve(e,t){return this._client.get(`/assistants/${e}`,{...t,headers:{"OpenAI-Beta":"assistants=v2",...t==null?void 0:t.headers}})}update(e,t,r){return this._client.post(`/assistants/${e}`,{body:t,...r,headers:{"OpenAI-Beta":"assistants=v2",...r==null?void 0:r.headers}})}list(e={},t){return F(e)?this.list({},e):this._client.getAPIList("/assistants",At,{query:e,...t,headers:{"OpenAI-Beta":"assistants=v2",...t==null?void 0:t.headers}})}del(e,t){return this._client.delete(`/assistants/${e}`,{...t,headers:{"OpenAI-Beta":"assistants=v2",...t==null?void 0:t.headers}})}},At=class extends B{};Ke.AssistantsPage=At;function fn(n){return typeof n.parse=="function"}var ke=n=>(n==null?void 0:n.role)==="assistant",mn=n=>(n==null?void 0:n.role)==="function",pn=n=>(n==null?void 0:n.role)==="tool";var ae=function(n,e,t,r,s){if(r==="m")throw new TypeError("Private method is not writable");if(r==="a"&&!s)throw new TypeError("Private accessor was defined without a setter");if(typeof e=="function"?n!==e||!s:!e.has(n))throw new TypeError("Cannot write private member to an object whose class did not declare it");return r==="a"?s.call(n,t):s?s.value=t:e.set(n,t),t},L=function(n,e,t,r){if(t==="a"&&!r)throw new TypeError("Private accessor was defined without a getter");if(typeof e=="function"?n!==e||!r:!e.has(n))throw new TypeError("Cannot read private member from an object whose class did not declare it");return t==="m"?r:t==="a"?r.call(n):r?r.value:e.get(n)},gn,Er,Cr,Zt,er,Sr,tr,Pe,rr,Rr,Or,Pt,Ps,It=class{constructor(){gn.add(this),this.controller=new AbortController,Er.set(this,void 0),Cr.set(this,()=>{}),Zt.set(this,()=>{}),er.set(this,void 0),Sr.set(this,()=>{}),tr.set(this,()=>{}),Pe.set(this,{}),rr.set(this,!1),Rr.set(this,!1),Or.set(this,!1),Pt.set(this,!1),ae(this,Er,new Promise((e,t)=>{ae(this,Cr,e,"f"),ae(this,Zt,t,"f")}),"f"),ae(this,er,new Promise((e,t)=>{ae(this,Sr,e,"f"),ae(this,tr,t,"f")}),"f"),L(this,Er,"f").catch(()=>{}),L(this,er,"f").catch(()=>{})}_run(e){setTimeout(()=>{e().then(()=>{this._emitFinal(),this._emit("end")},L(this,gn,"m",Ps).bind(this))},0)}_connected(){this.ended||(L(this,Cr,"f").call(this),this._emit("connect"))}get ended(){return L(this,rr,"f")}get errored(){return L(this,Rr,"f")}get aborted(){return L(this,Or,"f")}abort(){this.controller.abort()}on(e,t){return(L(this,Pe,"f")[e]||(L(this,Pe,"f")[e]=[])).push({listener:t}),this}off(e,t){let r=L(this,Pe,"f")[e];if(!r)return this;let s=r.findIndex(i=>i.listener===t);return s>=0&&r.splice(s,1),this}once(e,t){return(L(this,Pe,"f")[e]||(L(this,Pe,"f")[e]=[])).push({listener:t,once:!0}),this}emitted(e){return new Promise((t,r)=>{ae(this,Pt,!0,"f"),e!=="error"&&this.once("error",r),this.once(e,t)})}async done(){ae(this,Pt,!0,"f"),await L(this,er,"f")}_emit(e,...t){if(L(this,rr,"f"))return;e==="end"&&(ae(this,rr,!0,"f"),L(this,Sr,"f").call(this));let r=L(this,Pe,"f")[e];if(r&&(L(this,Pe,"f")[e]=r.filter(s=>!s.once),r.forEach(({listener:s})=>s(...t))),e==="abort"){let s=t[0];!L(this,Pt,"f")&&!(r!=null&&r.length)&&Promise.reject(s),L(this,Zt,"f").call(this,s),L(this,tr,"f").call(this,s),this._emit("end");return}if(e==="error"){let s=t[0];!L(this,Pt,"f")&&!(r!=null&&r.length)&&Promise.reject(s),L(this,Zt,"f").call(this,s),L(this,tr,"f").call(this,s),this._emit("end")}}_emitFinal(){}};Er=new WeakMap,Cr=new WeakMap,Zt=new WeakMap,er=new WeakMap,Sr=new WeakMap,tr=new WeakMap,Pe=new WeakMap,rr=new WeakMap,Rr=new WeakMap,Or=new WeakMap,Pt=new WeakMap,gn=new WeakSet,Ps=function(e){if(ae(this,Rr,!0,"f"),e instanceof Error&&e.name==="AbortError"&&(e=new H),e instanceof H)return ae(this,Or,!0,"f"),this._emit("abort",e);if(e instanceof A)return this._emit("error",e);if(e instanceof Error){let t=new A(e.message);return t.cause=e,this._emit("error",t)}return this._emit("error",new A(String(e)))};function yn(n){return(n==null?void 0:n.$brand)==="auto-parseable-response-format"}function Je(n){return(n==null?void 0:n.$brand)==="auto-parseable-tool"}function Is(n,e){return!e||!bn(e)?{...n,choices:n.choices.map(t=>{var r;return{...t,message:{...t.message,parsed:null,tool_calls:(r=t.message.tool_calls)!=null?r:[]}}})}:nr(n,e)}function nr(n,e){let t=n.choices.map(r=>{var s,i;if(r.finish_reason==="length")throw new mt;if(r.finish_reason==="content_filter")throw new pt;return{...r,message:{...r.message,tool_calls:(i=(s=r.message.tool_calls)==null?void 0:s.map(o=>vo(e,o)))!=null?i:[],parsed:r.message.content&&!r.message.refusal?wo(e,r.message.content):null}}});return{...n,choices:t}}function wo(n,e){var t,r;return((t=n.response_format)==null?void 0:t.type)!=="json_schema"?null:((r=n.response_format)==null?void 0:r.type)==="json_schema"?"$parseRaw"in n.response_format?n.response_format.$parseRaw(e):JSON.parse(e):null}function vo(n,e){var r;let t=(r=n.tools)==null?void 0:r.find(s=>{var i;return((i=s.function)==null?void 0:i.name)===e.function.name});return{...e,function:{...e.function,parsed_arguments:Je(t)?t.$parseRaw(e.function.arguments):t!=null&&t.function.strict?JSON.parse(e.function.arguments):null}}}function xs(n,e){var r;if(!n)return!1;let t=(r=n.tools)==null?void 0:r.find(s=>{var i;return((i=s.function)==null?void 0:i.name)===e.function.name});return Je(t)||(t==null?void 0:t.function.strict)||!1}function bn(n){var e,t;return yn(n.response_format)?!0:(t=(e=n.tools)==null?void 0:e.some(r=>Je(r)||r.type==="function"&&r.function.strict===!0))!=null?t:!1}function Es(n){for(let e of n!=null?n:[]){if(e.type!=="function")throw new A(`Currently only \`function\` tool types support auto-parsing; Received \`${e.type}\``);if(e.function.strict!==!0)throw new A(`The \`${e.function.name}\` tool is not marked with \`strict: true\`. Only strict function tools can be auto-parsed`)}}var Z=function(n,e,t,r){if(t==="a"&&!r)throw new TypeError("Private accessor was defined without a getter");if(typeof e=="function"?n!==e||!r:!e.has(n))throw new TypeError("Cannot read private member from an object whose class did not declare it");return t==="m"?r:t==="a"?r.call(n):r?r.value:e.get(n)},K,wn,Mr,vn,_n,An,Ss,Pn,Cs=10,xt=class extends It{constructor(){super(...arguments),K.add(this),this._chatCompletions=[],this.messages=[]}_addChatCompletion(e){var r;this._chatCompletions.push(e),this._emit("chatCompletion",e);let t=(r=e.choices[0])==null?void 0:r.message;return t&&this._addMessage(t),e}_addMessage(e,t=!0){if("content"in e||(e.content=null),this.messages.push(e),t){if(this._emit("message",e),(mn(e)||pn(e))&&e.content)this._emit("functionCallResult",e.content);else if(ke(e)&&e.function_call)this._emit("functionCall",e.function_call);else if(ke(e)&&e.tool_calls)for(let r of e.tool_calls)r.type==="function"&&this._emit("functionCall",r.function)}}async finalChatCompletion(){await this.done();let e=this._chatCompletions[this._chatCompletions.length-1];if(!e)throw new A("stream ended without producing a ChatCompletion");return e}async finalContent(){return await this.done(),Z(this,K,"m",wn).call(this)}async finalMessage(){return await this.done(),Z(this,K,"m",Mr).call(this)}async finalFunctionCall(){return await this.done(),Z(this,K,"m",vn).call(this)}async finalFunctionCallResult(){return await this.done(),Z(this,K,"m",_n).call(this)}async totalUsage(){return await this.done(),Z(this,K,"m",An).call(this)}allChatCompletions(){return[...this._chatCompletions]}_emitFinal(){let e=this._chatCompletions[this._chatCompletions.length-1];e&&this._emit("finalChatCompletion",e);let t=Z(this,K,"m",Mr).call(this);t&&this._emit("finalMessage",t);let r=Z(this,K,"m",wn).call(this);r&&this._emit("finalContent",r);let s=Z(this,K,"m",vn).call(this);s&&this._emit("finalFunctionCall",s);let i=Z(this,K,"m",_n).call(this);i!=null&&this._emit("finalFunctionCallResult",i),this._chatCompletions.some(o=>o.usage)&&this._emit("totalUsage",Z(this,K,"m",An).call(this))}async _createChatCompletion(e,t,r){let s=r==null?void 0:r.signal;s&&(s.aborted&&this.controller.abort(),s.addEventListener("abort",()=>this.controller.abort())),Z(this,K,"m",Ss).call(this,t);let i=await e.chat.completions.create({...t,stream:!1},{...r,signal:this.controller.signal});return this._connected(),this._addChatCompletion(nr(i,t))}async _runChatCompletion(e,t,r){for(let s of t.messages)this._addMessage(s,!1);return await this._createChatCompletion(e,t,r)}async _runFunctions(e,t,r){var h;let s="function",{function_call:i="auto",stream:o,...a}=t,c=typeof i!="string"&&(i==null?void 0:i.name),{maxChatCompletions:l=Cs}=r||{},d={};for(let m of t.functions)d[m.name||m.function.name]=m;let u=t.functions.map(m=>({name:m.name||m.function.name,parameters:m.parameters,description:m.description}));for(let m of t.messages)this._addMessage(m,!1);for(let m=0;mJSON.stringify(T.name)).join(", ")}. Please try again`;this._addMessage({role:s,name:g,content:D});continue}let C;try{C=fn(b)?await b.parse(O):O}catch(D){this._addMessage({role:s,name:g,content:D instanceof Error?D.message:String(D)});continue}let N=await b.function(C,this),P=Z(this,K,"m",Pn).call(this,N);if(this._addMessage({role:s,name:g,content:P}),c)return}}async _runTools(e,t,r){var m,f,v;let s="tool",{tool_choice:i="auto",stream:o,...a}=t,c=typeof i!="string"&&((m=i==null?void 0:i.function)==null?void 0:m.name),{maxChatCompletions:l=Cs}=r||{},d=t.tools.map(g=>{if(Je(g)){if(!g.$callback)throw new A("Tool given to `.runTools()` that does not have an associated function");return{type:"function",function:{function:g.$callback,name:g.function.name,description:g.function.description||"",parameters:g.function.parameters,parse:g.$parseRaw,strict:!0}}}return g}),u={};for(let g of d)g.type==="function"&&(u[g.function.name||g.function.function.name]=g.function);let h="tools"in t?d.map(g=>g.type==="function"?{type:"function",function:{name:g.function.name||g.function.function.name,parameters:g.function.parameters,description:g.function.description,strict:g.function.strict}}:g):void 0;for(let g of t.messages)this._addMessage(g,!1);for(let g=0;gJSON.stringify(S)).join(", ")}. Please try again`;this._addMessage({role:s,tool_call_id:N,content:k});continue}let M;try{M=fn(T)?await T.parse(D):D}catch(k){let S=k instanceof Error?k.message:String(k);this._addMessage({role:s,tool_call_id:N,content:S});continue}let x=await T.function(M,this),E=Z(this,K,"m",Pn).call(this,x);if(this._addMessage({role:s,tool_call_id:N,content:E}),c)return}}}};K=new WeakSet,wn=function(){var e;return(e=Z(this,K,"m",Mr).call(this).content)!=null?e:null},Mr=function(){var t,r;let e=this.messages.length;for(;e-- >0;){let s=this.messages[e];if(ke(s)){let{function_call:i,...o}=s,a={...o,content:(t=s.content)!=null?t:null,refusal:(r=s.refusal)!=null?r:null};return i&&(a.function_call=i),a}}throw new A("stream ended without producing a ChatCompletionMessage with role=assistant")},vn=function(){var e,t;for(let r=this.messages.length-1;r>=0;r--){let s=this.messages[r];if(ke(s)&&(s!=null&&s.function_call))return s.function_call;if(ke(s)&&((e=s==null?void 0:s.tool_calls)!=null&&e.length))return(t=s.tool_calls.at(-1))==null?void 0:t.function}},_n=function(){for(let e=this.messages.length-1;e>=0;e--){let t=this.messages[e];if(mn(t)&&t.content!=null||pn(t)&&t.content!=null&&typeof t.content=="string"&&this.messages.some(r=>{var s;return r.role==="assistant"&&((s=r.tool_calls)==null?void 0:s.some(i=>i.type==="function"&&i.id===t.tool_call_id))}))return t.content}},An=function(){let e={completion_tokens:0,prompt_tokens:0,total_tokens:0};for(let{usage:t}of this._chatCompletions)t&&(e.completion_tokens+=t.completion_tokens,e.prompt_tokens+=t.prompt_tokens,e.total_tokens+=t.total_tokens);return e},Ss=function(e){if(e.n!=null&&e.n>1)throw new A("ChatCompletion convenience helpers only support n=1 at this time. To use n>1, please use chat.completions.create() directly.")},Pn=function(e){return typeof e=="string"?e:e===void 0?"undefined":JSON.stringify(e)};var Fe=class extends xt{static runFunctions(e,t,r){let s=new Fe,i={...r,headers:{...r==null?void 0:r.headers,"X-Stainless-Helper-Method":"runFunctions"}};return s._run(()=>s._runFunctions(e,t,i)),s}static runTools(e,t,r){let s=new Fe,i={...r,headers:{...r==null?void 0:r.headers,"X-Stainless-Helper-Method":"runTools"}};return s._run(()=>s._runTools(e,t,i)),s}_addMessage(e,t=!0){super._addMessage(e,t),ke(e)&&e.content&&this._emit("content",e.content)}};var W={STR:1,NUM:2,ARR:4,OBJ:8,NULL:16,BOOL:32,NAN:64,INFINITY:128,MINUS_INFINITY:256,INF:384,SPECIAL:496,ATOM:499,COLLECTION:12,ALL:511},In=class extends Error{},xn=class extends Error{};function _o(n,e=W.ALL){if(typeof n!="string")throw new TypeError(`expecting str, got ${typeof n}`);if(!n.trim())throw new Error(`${n} is empty`);return Ao(n.trim(),e)}var Ao=(n,e)=>{let t=n.length,r=0,s=h=>{throw new In(`${h} at position ${r}`)},i=h=>{throw new xn(`${h} at position ${r}`)},o=()=>(u(),r>=t&&s("Unexpected end of input"),n[r]==='"'?a():n[r]==="{"?c():n[r]==="["?l():n.substring(r,r+4)==="null"||W.NULL&e&&t-r<4&&"null".startsWith(n.substring(r))?(r+=4,null):n.substring(r,r+4)==="true"||W.BOOL&e&&t-r<4&&"true".startsWith(n.substring(r))?(r+=4,!0):n.substring(r,r+5)==="false"||W.BOOL&e&&t-r<5&&"false".startsWith(n.substring(r))?(r+=5,!1):n.substring(r,r+8)==="Infinity"||W.INFINITY&e&&t-r<8&&"Infinity".startsWith(n.substring(r))?(r+=8,1/0):n.substring(r,r+9)==="-Infinity"||W.MINUS_INFINITY&e&&1{let h=r,m=!1;for(r++;r{r++,u();let h={};try{for(;n[r]!=="}";){if(u(),r>=t&&W.OBJ&e)return h;let m=a();u(),r++;try{let f=o();Object.defineProperty(h,m,{value:f,writable:!0,enumerable:!0,configurable:!0})}catch(f){if(W.OBJ&e)return h;throw f}u(),n[r]===","&&r++}}catch(m){if(W.OBJ&e)return h;s("Expected '}' at end of object")}return r++,h},l=()=>{r++;let h=[];try{for(;n[r]!=="]";)h.push(o()),u(),n[r]===","&&r++}catch(m){if(W.ARR&e)return h;s("Expected ']' at end of array")}return r++,h},d=()=>{if(r===0){n==="-"&&W.NUM&e&&s("Not sure what '-' is");try{return JSON.parse(n)}catch(m){if(W.NUM&e)try{return n[n.length-1]==="."?JSON.parse(n.substring(0,n.lastIndexOf("."))):JSON.parse(n.substring(0,n.lastIndexOf("e")))}catch(f){}i(String(m))}}let h=r;for(n[r]==="-"&&r++;n[r]&&!",]}".includes(n[r]);)r++;r==t&&!(W.NUM&e)&&s("Unterminated number literal");try{return JSON.parse(n.substring(h,r))}catch(m){n.substring(h,r)==="-"&&W.NUM&e&&s("Not sure what '-' is");try{return JSON.parse(n.substring(h,n.lastIndexOf("e")))}catch(f){i(String(f))}}},u=()=>{for(;r_o(n,W.ALL^W.NUM);var Et=function(n,e,t,r,s){if(r==="m")throw new TypeError("Private method is not writable");if(r==="a"&&!s)throw new TypeError("Private accessor was defined without a setter");if(typeof e=="function"?n!==e||!s:!e.has(n))throw new TypeError("Cannot write private member to an object whose class did not declare it");return r==="a"?s.call(n,t):s?s.value=t:e.set(n,t),t},R=function(n,e,t,r){if(t==="a"&&!r)throw new TypeError("Private accessor was defined without a getter");if(typeof e=="function"?n!==e||!r:!e.has(n))throw new TypeError("Cannot read private member from an object whose class did not declare it");return t==="m"?r:t==="a"?r.call(n):r?r.value:e.get(n)},j,Ie,Ct,De,Cn,Tr,Sn,Rn,On,kr,Mn,Rs,xe=class extends xt{constructor(e){super(),j.add(this),Ie.set(this,void 0),Ct.set(this,void 0),De.set(this,void 0),Et(this,Ie,e,"f"),Et(this,Ct,[],"f")}get currentChatCompletionSnapshot(){return R(this,De,"f")}static fromReadableStream(e){let t=new xe(null);return t._run(()=>t._fromReadableStream(e)),t}static createChatCompletion(e,t,r){let s=new xe(t);return s._run(()=>s._runChatCompletion(e,{...t,stream:!0},{...r,headers:{...r==null?void 0:r.headers,"X-Stainless-Helper-Method":"stream"}})),s}async _createChatCompletion(e,t,r){var o;super._createChatCompletion;let s=r==null?void 0:r.signal;s&&(s.aborted&&this.controller.abort(),s.addEventListener("abort",()=>this.controller.abort())),R(this,j,"m",Cn).call(this);let i=await e.chat.completions.create({...t,stream:!0},{...r,signal:this.controller.signal});this._connected();for await(let a of i)R(this,j,"m",Sn).call(this,a);if((o=i.controller.signal)!=null&&o.aborted)throw new H;return this._addChatCompletion(R(this,j,"m",kr).call(this))}async _fromReadableStream(e,t){var o;let r=t==null?void 0:t.signal;r&&(r.aborted&&this.controller.abort(),r.addEventListener("abort",()=>this.controller.abort())),R(this,j,"m",Cn).call(this),this._connected();let s=J.fromReadableStream(e,this.controller),i;for await(let a of s)i&&i!==a.id&&this._addChatCompletion(R(this,j,"m",kr).call(this)),R(this,j,"m",Sn).call(this,a),i=a.id;if((o=s.controller.signal)!=null&&o.aborted)throw new H;return this._addChatCompletion(R(this,j,"m",kr).call(this))}[(Ie=new WeakMap,Ct=new WeakMap,De=new WeakMap,j=new WeakSet,Cn=function(){this.ended||Et(this,De,void 0,"f")},Tr=function(t){let r=R(this,Ct,"f")[t.index];return r||(r={content_done:!1,refusal_done:!1,logprobs_content_done:!1,logprobs_refusal_done:!1,done_tool_calls:new Set,current_tool_call_index:null},R(this,Ct,"f")[t.index]=r,r)},Sn=function(t){var s,i,o,a,c,l,d,u,h,m,f,v,g,O,b,C,N,P,D,T;if(this.ended)return;let r=R(this,j,"m",Rs).call(this,t);this._emit("chunk",t,r);for(let M of t.choices){let x=r.choices[M.index];M.delta.content!=null&&((s=x.message)==null?void 0:s.role)==="assistant"&&((i=x.message)!=null&&i.content)&&(this._emit("content",M.delta.content,x.message.content),this._emit("content.delta",{delta:M.delta.content,snapshot:x.message.content,parsed:x.message.parsed})),M.delta.refusal!=null&&((o=x.message)==null?void 0:o.role)==="assistant"&&((a=x.message)!=null&&a.refusal)&&this._emit("refusal.delta",{delta:M.delta.refusal,snapshot:x.message.refusal}),((c=M.logprobs)==null?void 0:c.content)!=null&&((l=x.message)==null?void 0:l.role)==="assistant"&&this._emit("logprobs.content.delta",{content:(d=M.logprobs)==null?void 0:d.content,snapshot:(h=(u=x.logprobs)==null?void 0:u.content)!=null?h:[]}),((m=M.logprobs)==null?void 0:m.refusal)!=null&&((f=x.message)==null?void 0:f.role)==="assistant"&&this._emit("logprobs.refusal.delta",{refusal:(v=M.logprobs)==null?void 0:v.refusal,snapshot:(O=(g=x.logprobs)==null?void 0:g.refusal)!=null?O:[]});let E=R(this,j,"m",Tr).call(this,x);x.finish_reason&&(R(this,j,"m",On).call(this,x),E.current_tool_call_index!=null&&R(this,j,"m",Rn).call(this,x,E.current_tool_call_index));for(let k of(b=M.delta.tool_calls)!=null?b:[])E.current_tool_call_index!==k.index&&(R(this,j,"m",On).call(this,x),E.current_tool_call_index!=null&&R(this,j,"m",Rn).call(this,x,E.current_tool_call_index)),E.current_tool_call_index=k.index;for(let k of(C=M.delta.tool_calls)!=null?C:[]){let S=(N=x.message.tool_calls)==null?void 0:N[k.index];S!=null&&S.type&&((S==null?void 0:S.type)==="function"?this._emit("tool_calls.function.arguments.delta",{name:(P=S.function)==null?void 0:P.name,index:k.index,arguments:S.function.arguments,parsed_arguments:S.function.parsed_arguments,arguments_delta:(T=(D=k.function)==null?void 0:D.arguments)!=null?T:""}):(S==null||S.type,void 0))}}},Rn=function(t,r){var o,a,c;if(R(this,j,"m",Tr).call(this,t).done_tool_calls.has(r))return;let i=(o=t.message.tool_calls)==null?void 0:o[r];if(!i)throw new Error("no tool call snapshot");if(!i.type)throw new Error("tool call snapshot missing `type`");if(i.type==="function"){let l=(c=(a=R(this,Ie,"f"))==null?void 0:a.tools)==null?void 0:c.find(d=>d.type==="function"&&d.function.name===i.function.name);this._emit("tool_calls.function.arguments.done",{name:i.function.name,index:r,arguments:i.function.arguments,parsed_arguments:Je(l)?l.$parseRaw(i.function.arguments):l!=null&&l.function.strict?JSON.parse(i.function.arguments):null})}else i.type},On=function(t){var s,i;let r=R(this,j,"m",Tr).call(this,t);if(t.message.content&&!r.content_done){r.content_done=!0;let o=R(this,j,"m",Mn).call(this);this._emit("content.done",{content:t.message.content,parsed:o?o.$parseRaw(t.message.content):null})}t.message.refusal&&!r.refusal_done&&(r.refusal_done=!0,this._emit("refusal.done",{refusal:t.message.refusal})),(s=t.logprobs)!=null&&s.content&&!r.logprobs_content_done&&(r.logprobs_content_done=!0,this._emit("logprobs.content.done",{content:t.logprobs.content})),(i=t.logprobs)!=null&&i.refusal&&!r.logprobs_refusal_done&&(r.logprobs_refusal_done=!0,this._emit("logprobs.refusal.done",{refusal:t.logprobs.refusal}))},kr=function(){if(this.ended)throw new A("stream has ended, this shouldn't happen");let t=R(this,De,"f");if(!t)throw new A("request ended without sending any chunks");return Et(this,De,void 0,"f"),Et(this,Ct,[],"f"),Po(t,R(this,Ie,"f"))},Mn=function(){var r;let t=(r=R(this,Ie,"f"))==null?void 0:r.response_format;return yn(t)?t:null},Rs=function(t){var d,u,h,m,f,v;var r,s,i,o;let a=R(this,De,"f"),{choices:c,...l}=t;a?Object.assign(a,l):a=Et(this,De,{...l,choices:[]},"f");for(let{delta:g,finish_reason:O,index:b,logprobs:C=null,...N}of t.choices){let P=a.choices[b];if(P||(P=a.choices[b]={finish_reason:O,index:b,message:{},logprobs:C,...N}),C)if(!P.logprobs)P.logprobs=Object.assign({},C);else{let{content:S,refusal:se,..._e}=C;Object.assign(P.logprobs,_e),S&&((d=(r=P.logprobs).content)!=null||(r.content=[]),P.logprobs.content.push(...S)),se&&((u=(s=P.logprobs).refusal)!=null||(s.refusal=[]),P.logprobs.refusal.push(...se))}if(O&&(P.finish_reason=O,R(this,Ie,"f")&&bn(R(this,Ie,"f")))){if(O==="length")throw new mt;if(O==="content_filter")throw new pt}if(Object.assign(P,N),!g)continue;let{content:D,refusal:T,function_call:M,role:x,tool_calls:E,...k}=g;if(Object.assign(P.message,k),T&&(P.message.refusal=(P.message.refusal||"")+T),x&&(P.message.role=x),M&&(P.message.function_call?(M.name&&(P.message.function_call.name=M.name),M.arguments&&((h=(i=P.message.function_call).arguments)!=null||(i.arguments=""),P.message.function_call.arguments+=M.arguments)):P.message.function_call=M),D&&(P.message.content=(P.message.content||"")+D,!P.message.refusal&&R(this,j,"m",Mn).call(this)&&(P.message.parsed=En(P.message.content))),E){P.message.tool_calls||(P.message.tool_calls=[]);for(let{index:S,id:se,type:_e,function:te,...wi}of E){let de=(m=(o=P.message.tool_calls)[S])!=null?m:o[S]={};Object.assign(de,wi),se&&(de.id=se),_e&&(de.type=_e),te&&((v=de.function)!=null||(de.function={name:(f=te.name)!=null?f:"",arguments:""})),te!=null&&te.name&&(de.function.name=te.name),te!=null&&te.arguments&&(de.function.arguments+=te.arguments,xs(R(this,Ie,"f"),de)&&(de.function.parsed_arguments=En(de.function.arguments)))}}}return a},Symbol.asyncIterator)](){let e=[],t=[],r=!1;return this.on("chunk",s=>{let i=t.shift();i?i.resolve(s):e.push(s)}),this.on("end",()=>{r=!0;for(let s of t)s.resolve(void 0);t.length=0}),this.on("abort",s=>{r=!0;for(let i of t)i.reject(s);t.length=0}),this.on("error",s=>{r=!0;for(let i of t)i.reject(s);t.length=0}),{next:async()=>e.length?{value:e.shift(),done:!1}:r?{value:void 0,done:!0}:new Promise((i,o)=>t.push({resolve:i,reject:o})).then(i=>i?{value:i,done:!1}:{value:void 0,done:!0}),return:async()=>(this.abort(),{value:void 0,done:!0})}}toReadableStream(){return new J(this[Symbol.asyncIterator].bind(this),this.controller).toReadableStream()}};function Po(n,e){let{id:t,choices:r,created:s,model:i,system_fingerprint:o,...a}=n,c={...a,id:t,choices:r.map(({message:l,finish_reason:d,index:u,logprobs:h,...m})=>{var C,N,P;if(!d)throw new A(`missing finish_reason for choice ${u}`);let{content:f=null,function_call:v,tool_calls:g,...O}=l,b=l.role;if(!b)throw new A(`missing role for choice ${u}`);if(v){let{arguments:D,name:T}=v;if(D==null)throw new A(`missing function_call.arguments for choice ${u}`);if(!T)throw new A(`missing function_call.name for choice ${u}`);return{...m,message:{content:f,function_call:{arguments:D,name:T},role:b,refusal:(C=l.refusal)!=null?C:null},finish_reason:d,index:u,logprobs:h}}return g?{...m,index:u,finish_reason:d,logprobs:h,message:{...O,role:b,content:f,refusal:(N=l.refusal)!=null?N:null,tool_calls:g.map((D,T)=>{let{function:M,type:x,id:E,...k}=D,{arguments:S,name:se,..._e}=M||{};if(E==null)throw new A(`missing choices[${u}].tool_calls[${T}].id +${Fr(n)}`);if(x==null)throw new A(`missing choices[${u}].tool_calls[${T}].type +${Fr(n)}`);if(se==null)throw new A(`missing choices[${u}].tool_calls[${T}].function.name +${Fr(n)}`);if(S==null)throw new A(`missing choices[${u}].tool_calls[${T}].function.arguments +${Fr(n)}`);return{...k,id:E,type:x,function:{..._e,name:se,arguments:S}}})}}:{...m,message:{...O,content:f,role:b,refusal:(P=l.refusal)!=null?P:null},finish_reason:d,index:u,logprobs:h}}),created:s,model:i,object:"chat.completion",...o?{system_fingerprint:o}:{}};return Is(c,e)}function Fr(n){return JSON.stringify(n)}var Ee=class extends xe{static fromReadableStream(e){let t=new Ee(null);return t._run(()=>t._fromReadableStream(e)),t}static runFunctions(e,t,r){let s=new Ee(null),i={...r,headers:{...r==null?void 0:r.headers,"X-Stainless-Helper-Method":"runFunctions"}};return s._run(()=>s._runFunctions(e,t,i)),s}static runTools(e,t,r){let s=new Ee(t),i={...r,headers:{...r==null?void 0:r.headers,"X-Stainless-Helper-Method":"runTools"}};return s._run(()=>s._runTools(e,t,i)),s}};var sr=class extends y{parse(e,t){return Es(e.tools),this._client.chat.completions.create(e,{...t,headers:{...t==null?void 0:t.headers,"X-Stainless-Helper-Method":"beta.chat.completions.parse"}})._thenUnwrap(r=>nr(r,e))}runFunctions(e,t){return e.stream?Ee.runFunctions(this._client,e,t):Fe.runFunctions(this._client,e,t)}runTools(e,t){return e.stream?Ee.runTools(this._client,e,t):Fe.runTools(this._client,e,t)}stream(e,t){return xe.createChatCompletion(this._client,e,t)}};var St=class extends y{constructor(){super(...arguments),this.completions=new sr(this._client)}};(function(n){n.Completions=sr})(St||(St={}));var w=function(n,e,t,r){if(t==="a"&&!r)throw new TypeError("Private accessor was defined without a getter");if(typeof e=="function"?n!==e||!r:!e.has(n))throw new TypeError("Cannot read private member from an object whose class did not declare it");return t==="m"?r:t==="a"?r.call(n):r?r.value:e.get(n)},re=function(n,e,t,r,s){if(r==="m")throw new TypeError("Private method is not writable");if(r==="a"&&!s)throw new TypeError("Private accessor was defined without a setter");if(typeof e=="function"?n!==e||!s:!e.has(n))throw new TypeError("Cannot write private member to an object whose class did not declare it");return r==="a"?s.call(n,t):s?s.value=t:e.set(n,t),t},V,Tn,pe,Dr,ce,Ge,Rt,Xe,Lr,ne,Nr,Br,ar,ir,or,Os,Ms,Ts,ks,Fs,Ds,Ns,X=class extends It{constructor(){super(...arguments),V.add(this),Tn.set(this,[]),pe.set(this,{}),Dr.set(this,{}),ce.set(this,void 0),Ge.set(this,void 0),Rt.set(this,void 0),Xe.set(this,void 0),Lr.set(this,void 0),ne.set(this,void 0),Nr.set(this,void 0),Br.set(this,void 0),ar.set(this,void 0)}[(Tn=new WeakMap,pe=new WeakMap,Dr=new WeakMap,ce=new WeakMap,Ge=new WeakMap,Rt=new WeakMap,Xe=new WeakMap,Lr=new WeakMap,ne=new WeakMap,Nr=new WeakMap,Br=new WeakMap,ar=new WeakMap,V=new WeakSet,Symbol.asyncIterator)](){let e=[],t=[],r=!1;return this.on("event",s=>{let i=t.shift();i?i.resolve(s):e.push(s)}),this.on("end",()=>{r=!0;for(let s of t)s.resolve(void 0);t.length=0}),this.on("abort",s=>{r=!0;for(let i of t)i.reject(s);t.length=0}),this.on("error",s=>{r=!0;for(let i of t)i.reject(s);t.length=0}),{next:async()=>e.length?{value:e.shift(),done:!1}:r?{value:void 0,done:!0}:new Promise((i,o)=>t.push({resolve:i,reject:o})).then(i=>i?{value:i,done:!1}:{value:void 0,done:!0}),return:async()=>(this.abort(),{value:void 0,done:!0})}}static fromReadableStream(e){let t=new X;return t._run(()=>t._fromReadableStream(e)),t}async _fromReadableStream(e,t){var i;let r=t==null?void 0:t.signal;r&&(r.aborted&&this.controller.abort(),r.addEventListener("abort",()=>this.controller.abort())),this._connected();let s=J.fromReadableStream(e,this.controller);for await(let o of s)w(this,V,"m",ir).call(this,o);if((i=s.controller.signal)!=null&&i.aborted)throw new H;return this._addRun(w(this,V,"m",or).call(this))}toReadableStream(){return new J(this[Symbol.asyncIterator].bind(this),this.controller).toReadableStream()}static createToolAssistantStream(e,t,r,s,i){let o=new X;return o._run(()=>o._runToolAssistantStream(e,t,r,s,{...i,headers:{...i==null?void 0:i.headers,"X-Stainless-Helper-Method":"stream"}})),o}async _createToolAssistantStream(e,t,r,s,i){var l;let o=i==null?void 0:i.signal;o&&(o.aborted&&this.controller.abort(),o.addEventListener("abort",()=>this.controller.abort()));let a={...s,stream:!0},c=await e.submitToolOutputs(t,r,a,{...i,signal:this.controller.signal});this._connected();for await(let d of c)w(this,V,"m",ir).call(this,d);if((l=c.controller.signal)!=null&&l.aborted)throw new H;return this._addRun(w(this,V,"m",or).call(this))}static createThreadAssistantStream(e,t,r){let s=new X;return s._run(()=>s._threadAssistantStream(e,t,{...r,headers:{...r==null?void 0:r.headers,"X-Stainless-Helper-Method":"stream"}})),s}static createAssistantStream(e,t,r,s){let i=new X;return i._run(()=>i._runAssistantStream(e,t,r,{...s,headers:{...s==null?void 0:s.headers,"X-Stainless-Helper-Method":"stream"}})),i}currentEvent(){return w(this,Nr,"f")}currentRun(){return w(this,Br,"f")}currentMessageSnapshot(){return w(this,ce,"f")}currentRunStepSnapshot(){return w(this,ar,"f")}async finalRunSteps(){return await this.done(),Object.values(w(this,pe,"f"))}async finalMessages(){return await this.done(),Object.values(w(this,Dr,"f"))}async finalRun(){if(await this.done(),!w(this,Ge,"f"))throw Error("Final run was not received.");return w(this,Ge,"f")}async _createThreadAssistantStream(e,t,r){var a;let s=r==null?void 0:r.signal;s&&(s.aborted&&this.controller.abort(),s.addEventListener("abort",()=>this.controller.abort()));let i={...t,stream:!0},o=await e.createAndRun(i,{...r,signal:this.controller.signal});this._connected();for await(let c of o)w(this,V,"m",ir).call(this,c);if((a=o.controller.signal)!=null&&a.aborted)throw new H;return this._addRun(w(this,V,"m",or).call(this))}async _createAssistantStream(e,t,r,s){var c;let i=s==null?void 0:s.signal;i&&(i.aborted&&this.controller.abort(),i.addEventListener("abort",()=>this.controller.abort()));let o={...r,stream:!0},a=await e.create(t,o,{...s,signal:this.controller.signal});this._connected();for await(let l of a)w(this,V,"m",ir).call(this,l);if((c=a.controller.signal)!=null&&c.aborted)throw new H;return this._addRun(w(this,V,"m",or).call(this))}static accumulateDelta(e,t){for(let[r,s]of Object.entries(t)){if(!e.hasOwnProperty(r)){e[r]=s;continue}let i=e[r];if(i==null){e[r]=s;continue}if(r==="index"||r==="type"){e[r]=s;continue}if(typeof i=="string"&&typeof s=="string")i+=s;else if(typeof i=="number"&&typeof s=="number")i+=s;else if(Yt(i)&&Yt(s))i=this.accumulateDelta(i,s);else if(Array.isArray(i)&&Array.isArray(s)){if(i.every(o=>typeof o=="string"||typeof o=="number")){i.push(...s);continue}for(let o of s){if(!Yt(o))throw new Error(`Expected array delta entry to be an object but got: ${o}`);let a=o.index;if(a==null)throw console.error(o),new Error("Expected array delta entry to have an `index` property");if(typeof a!="number")throw new Error(`Expected array delta entry \`index\` property to be a number but got ${a}`);let c=i[a];c==null?i.push(o):i[a]=this.accumulateDelta(c,o)}continue}else throw Error(`Unhandled record type: ${r}, deltaValue: ${s}, accValue: ${i}`);e[r]=i}return e}_addRun(e){return e}async _threadAssistantStream(e,t,r){return await this._createThreadAssistantStream(t,e,r)}async _runAssistantStream(e,t,r,s){return await this._createAssistantStream(t,e,r,s)}async _runToolAssistantStream(e,t,r,s,i){return await this._createToolAssistantStream(r,e,t,s,i)}};ir=function(e){if(!this.ended)switch(re(this,Nr,e,"f"),w(this,V,"m",Ts).call(this,e),e.event){case"thread.created":break;case"thread.run.created":case"thread.run.queued":case"thread.run.in_progress":case"thread.run.requires_action":case"thread.run.completed":case"thread.run.failed":case"thread.run.cancelling":case"thread.run.cancelled":case"thread.run.expired":w(this,V,"m",Ns).call(this,e);break;case"thread.run.step.created":case"thread.run.step.in_progress":case"thread.run.step.delta":case"thread.run.step.completed":case"thread.run.step.failed":case"thread.run.step.cancelled":case"thread.run.step.expired":w(this,V,"m",Ms).call(this,e);break;case"thread.message.created":case"thread.message.in_progress":case"thread.message.delta":case"thread.message.completed":case"thread.message.incomplete":w(this,V,"m",Os).call(this,e);break;case"error":throw new Error("Encountered an error event in event processing - errors should be processed earlier")}},or=function(){if(this.ended)throw new A("stream has ended, this shouldn't happen");if(!w(this,Ge,"f"))throw Error("Final run has not been received");return w(this,Ge,"f")},Os=function(e){let[t,r]=w(this,V,"m",Fs).call(this,e,w(this,ce,"f"));re(this,ce,t,"f"),w(this,Dr,"f")[t.id]=t;for(let s of r){let i=t.content[s.index];(i==null?void 0:i.type)=="text"&&this._emit("textCreated",i.text)}switch(e.event){case"thread.message.created":this._emit("messageCreated",e.data);break;case"thread.message.in_progress":break;case"thread.message.delta":if(this._emit("messageDelta",e.data.delta,t),e.data.delta.content)for(let s of e.data.delta.content){if(s.type=="text"&&s.text){let i=s.text,o=t.content[s.index];if(o&&o.type=="text")this._emit("textDelta",i,o.text);else throw Error("The snapshot associated with this text delta is not text or missing")}if(s.index!=w(this,Rt,"f")){if(w(this,Xe,"f"))switch(w(this,Xe,"f").type){case"text":this._emit("textDone",w(this,Xe,"f").text,w(this,ce,"f"));break;case"image_file":this._emit("imageFileDone",w(this,Xe,"f").image_file,w(this,ce,"f"));break}re(this,Rt,s.index,"f")}re(this,Xe,t.content[s.index],"f")}break;case"thread.message.completed":case"thread.message.incomplete":if(w(this,Rt,"f")!==void 0){let s=e.data.content[w(this,Rt,"f")];if(s)switch(s.type){case"image_file":this._emit("imageFileDone",s.image_file,w(this,ce,"f"));break;case"text":this._emit("textDone",s.text,w(this,ce,"f"));break}}w(this,ce,"f")&&this._emit("messageDone",e.data),re(this,ce,void 0,"f")}},Ms=function(e){let t=w(this,V,"m",ks).call(this,e);switch(re(this,ar,t,"f"),e.event){case"thread.run.step.created":this._emit("runStepCreated",e.data);break;case"thread.run.step.delta":let r=e.data.delta;if(r.step_details&&r.step_details.type=="tool_calls"&&r.step_details.tool_calls&&t.step_details.type=="tool_calls")for(let i of r.step_details.tool_calls)i.index==w(this,Lr,"f")?this._emit("toolCallDelta",i,t.step_details.tool_calls[i.index]):(w(this,ne,"f")&&this._emit("toolCallDone",w(this,ne,"f")),re(this,Lr,i.index,"f"),re(this,ne,t.step_details.tool_calls[i.index],"f"),w(this,ne,"f")&&this._emit("toolCallCreated",w(this,ne,"f")));this._emit("runStepDelta",e.data.delta,t);break;case"thread.run.step.completed":case"thread.run.step.failed":case"thread.run.step.cancelled":case"thread.run.step.expired":re(this,ar,void 0,"f"),e.data.step_details.type=="tool_calls"&&w(this,ne,"f")&&(this._emit("toolCallDone",w(this,ne,"f")),re(this,ne,void 0,"f")),this._emit("runStepDone",e.data,t);break;case"thread.run.step.in_progress":break}},Ts=function(e){w(this,Tn,"f").push(e),this._emit("event",e)},ks=function(e){switch(e.event){case"thread.run.step.created":return w(this,pe,"f")[e.data.id]=e.data,e.data;case"thread.run.step.delta":let t=w(this,pe,"f")[e.data.id];if(!t)throw Error("Received a RunStepDelta before creation of a snapshot");let r=e.data;if(r.delta){let s=X.accumulateDelta(t,r.delta);w(this,pe,"f")[e.data.id]=s}return w(this,pe,"f")[e.data.id];case"thread.run.step.completed":case"thread.run.step.failed":case"thread.run.step.cancelled":case"thread.run.step.expired":case"thread.run.step.in_progress":w(this,pe,"f")[e.data.id]=e.data;break}if(w(this,pe,"f")[e.data.id])return w(this,pe,"f")[e.data.id];throw new Error("No snapshot available")},Fs=function(e,t){let r=[];switch(e.event){case"thread.message.created":return[e.data,r];case"thread.message.delta":if(!t)throw Error("Received a delta with no existing snapshot (there should be one from message creation)");let s=e.data;if(s.delta.content)for(let i of s.delta.content)if(i.index in t.content){let o=t.content[i.index];t.content[i.index]=w(this,V,"m",Ds).call(this,i,o)}else t.content[i.index]=i,r.push(i);return[t,r];case"thread.message.in_progress":case"thread.message.completed":case"thread.message.incomplete":if(t)return[t,r];throw Error("Received thread message event with no existing snapshot")}throw Error("Tried to accumulate a non-message event")},Ds=function(e,t){return X.accumulateDelta(t,e)},Ns=function(e){switch(re(this,Br,e.data,"f"),e.event){case"thread.run.created":break;case"thread.run.queued":break;case"thread.run.in_progress":break;case"thread.run.requires_action":case"thread.run.cancelled":case"thread.run.failed":case"thread.run.completed":case"thread.run.expired":re(this,Ge,e.data,"f"),w(this,ne,"f")&&(this._emit("toolCallDone",w(this,ne,"f")),re(this,ne,void 0,"f"));break;case"thread.run.cancelling":break}};var Qe=class extends y{create(e,t,r){return this._client.post(`/threads/${e}/messages`,{body:t,...r,headers:{"OpenAI-Beta":"assistants=v2",...r==null?void 0:r.headers}})}retrieve(e,t,r){return this._client.get(`/threads/${e}/messages/${t}`,{...r,headers:{"OpenAI-Beta":"assistants=v2",...r==null?void 0:r.headers}})}update(e,t,r,s){return this._client.post(`/threads/${e}/messages/${t}`,{body:r,...s,headers:{"OpenAI-Beta":"assistants=v2",...s==null?void 0:s.headers}})}list(e,t={},r){return F(t)?this.list(e,{},t):this._client.getAPIList(`/threads/${e}/messages`,Ot,{query:t,...r,headers:{"OpenAI-Beta":"assistants=v2",...r==null?void 0:r.headers}})}del(e,t,r){return this._client.delete(`/threads/${e}/messages/${t}`,{...r,headers:{"OpenAI-Beta":"assistants=v2",...r==null?void 0:r.headers}})}},Ot=class extends B{};Qe.MessagesPage=Ot;var Ye=class extends y{retrieve(e,t,r,s={},i){return F(s)?this.retrieve(e,t,r,{},s):this._client.get(`/threads/${e}/runs/${t}/steps/${r}`,{query:s,...i,headers:{"OpenAI-Beta":"assistants=v2",...i==null?void 0:i.headers}})}list(e,t,r={},s){return F(r)?this.list(e,t,{},r):this._client.getAPIList(`/threads/${e}/runs/${t}/steps`,Mt,{query:r,...s,headers:{"OpenAI-Beta":"assistants=v2",...s==null?void 0:s.headers}})}},Mt=class extends B{};Ye.RunStepsPage=Mt;var Ce=class extends y{constructor(){super(...arguments),this.steps=new Ye(this._client)}create(e,t,r){var o;let{include:s,...i}=t;return this._client.post(`/threads/${e}/runs`,{query:{include:s},body:i,...r,headers:{"OpenAI-Beta":"assistants=v2",...r==null?void 0:r.headers},stream:(o=t.stream)!=null?o:!1})}retrieve(e,t,r){return this._client.get(`/threads/${e}/runs/${t}`,{...r,headers:{"OpenAI-Beta":"assistants=v2",...r==null?void 0:r.headers}})}update(e,t,r,s){return this._client.post(`/threads/${e}/runs/${t}`,{body:r,...s,headers:{"OpenAI-Beta":"assistants=v2",...s==null?void 0:s.headers}})}list(e,t={},r){return F(t)?this.list(e,{},t):this._client.getAPIList(`/threads/${e}/runs`,Tt,{query:t,...r,headers:{"OpenAI-Beta":"assistants=v2",...r==null?void 0:r.headers}})}cancel(e,t,r){return this._client.post(`/threads/${e}/runs/${t}/cancel`,{...r,headers:{"OpenAI-Beta":"assistants=v2",...r==null?void 0:r.headers}})}async createAndPoll(e,t,r){let s=await this.create(e,t,r);return await this.poll(e,s.id,r)}createAndStream(e,t,r){return X.createAssistantStream(e,this._client.beta.threads.runs,t,r)}async poll(e,t,r){let s={...r==null?void 0:r.headers,"X-Stainless-Poll-Helper":"true"};for(r!=null&&r.pollIntervalMs&&(s["X-Stainless-Custom-Poll-Interval"]=r.pollIntervalMs.toString());;){let{data:i,response:o}=await this.retrieve(e,t,{...r,headers:{...r==null?void 0:r.headers,...s}}).withResponse();switch(i.status){case"queued":case"in_progress":case"cancelling":let a=5e3;if(r!=null&&r.pollIntervalMs)a=r.pollIntervalMs;else{let c=o.headers.get("openai-poll-after-ms");if(c){let l=parseInt(c);isNaN(l)||(a=l)}}await Ae(a);break;case"requires_action":case"incomplete":case"cancelled":case"completed":case"failed":case"expired":return i}}}stream(e,t,r){return X.createAssistantStream(e,this._client.beta.threads.runs,t,r)}submitToolOutputs(e,t,r,s){var i;return this._client.post(`/threads/${e}/runs/${t}/submit_tool_outputs`,{body:r,...s,headers:{"OpenAI-Beta":"assistants=v2",...s==null?void 0:s.headers},stream:(i=r.stream)!=null?i:!1})}async submitToolOutputsAndPoll(e,t,r,s){let i=await this.submitToolOutputs(e,t,r,s);return await this.poll(e,i.id,s)}submitToolOutputsStream(e,t,r,s){return X.createToolAssistantStream(e,t,this._client.beta.threads.runs,r,s)}},Tt=class extends B{};Ce.RunsPage=Tt;Ce.Steps=Ye;Ce.RunStepsPage=Mt;var ge=class extends y{constructor(){super(...arguments),this.runs=new Ce(this._client),this.messages=new Qe(this._client)}create(e={},t){return F(e)?this.create({},e):this._client.post("/threads",{body:e,...t,headers:{"OpenAI-Beta":"assistants=v2",...t==null?void 0:t.headers}})}retrieve(e,t){return this._client.get(`/threads/${e}`,{...t,headers:{"OpenAI-Beta":"assistants=v2",...t==null?void 0:t.headers}})}update(e,t,r){return this._client.post(`/threads/${e}`,{body:t,...r,headers:{"OpenAI-Beta":"assistants=v2",...r==null?void 0:r.headers}})}del(e,t){return this._client.delete(`/threads/${e}`,{...t,headers:{"OpenAI-Beta":"assistants=v2",...t==null?void 0:t.headers}})}createAndRun(e,t){var r;return this._client.post("/threads/runs",{body:e,...t,headers:{"OpenAI-Beta":"assistants=v2",...t==null?void 0:t.headers},stream:(r=e.stream)!=null?r:!1})}async createAndRunPoll(e,t){let r=await this.createAndRun(e,t);return await this.runs.poll(r.thread_id,r.id,t)}createAndRunStream(e,t){return X.createThreadAssistantStream(e,this._client.beta.threads,t)}};ge.Runs=Ce;ge.RunsPage=Tt;ge.Messages=Qe;ge.MessagesPage=Ot;var Bs=async n=>{let e=await Promise.allSettled(n),t=e.filter(s=>s.status==="rejected");if(t.length){for(let s of t)console.error(s.reason);throw new Error(`${t.length} promise(s) failed - see the above errors`)}let r=[];for(let s of e)s.status==="fulfilled"&&r.push(s.value);return r};var Ze=class extends y{create(e,t,r){return this._client.post(`/vector_stores/${e}/files`,{body:t,...r,headers:{"OpenAI-Beta":"assistants=v2",...r==null?void 0:r.headers}})}retrieve(e,t,r){return this._client.get(`/vector_stores/${e}/files/${t}`,{...r,headers:{"OpenAI-Beta":"assistants=v2",...r==null?void 0:r.headers}})}list(e,t={},r){return F(t)?this.list(e,{},t):this._client.getAPIList(`/vector_stores/${e}/files`,Ne,{query:t,...r,headers:{"OpenAI-Beta":"assistants=v2",...r==null?void 0:r.headers}})}del(e,t,r){return this._client.delete(`/vector_stores/${e}/files/${t}`,{...r,headers:{"OpenAI-Beta":"assistants=v2",...r==null?void 0:r.headers}})}async createAndPoll(e,t,r){let s=await this.create(e,t,r);return await this.poll(e,s.id,r)}async poll(e,t,r){let s={...r==null?void 0:r.headers,"X-Stainless-Poll-Helper":"true"};for(r!=null&&r.pollIntervalMs&&(s["X-Stainless-Custom-Poll-Interval"]=r.pollIntervalMs.toString());;){let i=await this.retrieve(e,t,{...r,headers:s}).withResponse(),o=i.data;switch(o.status){case"in_progress":let a=5e3;if(r!=null&&r.pollIntervalMs)a=r.pollIntervalMs;else{let c=i.response.headers.get("openai-poll-after-ms");if(c){let l=parseInt(c);isNaN(l)||(a=l)}}await Ae(a);break;case"failed":case"completed":return o}}}async upload(e,t,r){let s=await this._client.files.create({file:t,purpose:"assistants"},r);return this.create(e,{file_id:s.id},r)}async uploadAndPoll(e,t,r){let s=await this.upload(e,t,r);return await this.poll(e,s.id,r)}},Ne=class extends B{};Ze.VectorStoreFilesPage=Ne;var kt=class extends y{create(e,t,r){return this._client.post(`/vector_stores/${e}/file_batches`,{body:t,...r,headers:{"OpenAI-Beta":"assistants=v2",...r==null?void 0:r.headers}})}retrieve(e,t,r){return this._client.get(`/vector_stores/${e}/file_batches/${t}`,{...r,headers:{"OpenAI-Beta":"assistants=v2",...r==null?void 0:r.headers}})}cancel(e,t,r){return this._client.post(`/vector_stores/${e}/file_batches/${t}/cancel`,{...r,headers:{"OpenAI-Beta":"assistants=v2",...r==null?void 0:r.headers}})}async createAndPoll(e,t,r){let s=await this.create(e,t);return await this.poll(e,s.id,r)}listFiles(e,t,r={},s){return F(r)?this.listFiles(e,t,{},r):this._client.getAPIList(`/vector_stores/${e}/file_batches/${t}/files`,Ne,{query:r,...s,headers:{"OpenAI-Beta":"assistants=v2",...s==null?void 0:s.headers}})}async poll(e,t,r){let s={...r==null?void 0:r.headers,"X-Stainless-Poll-Helper":"true"};for(r!=null&&r.pollIntervalMs&&(s["X-Stainless-Custom-Poll-Interval"]=r.pollIntervalMs.toString());;){let{data:i,response:o}=await this.retrieve(e,t,{...r,headers:s}).withResponse();switch(i.status){case"in_progress":let a=5e3;if(r!=null&&r.pollIntervalMs)a=r.pollIntervalMs;else{let c=o.headers.get("openai-poll-after-ms");if(c){let l=parseInt(c);isNaN(l)||(a=l)}}await Ae(a);break;case"failed":case"cancelled":case"completed":return i}}}async uploadAndPoll(e,{files:t,fileIds:r=[]},s){var h;if(t==null||t.length==0)throw new Error("No `files` provided to process. If you've already uploaded files you should use `.createAndPoll()` instead");let i=(h=s==null?void 0:s.maxConcurrency)!=null?h:5,o=Math.min(i,t.length),a=this._client,c=t.values(),l=[...r];async function d(m){for(let f of m){let v=await a.files.create({file:f,purpose:"assistants"},s);l.push(v.id)}}let u=Array(o).fill(c).map(d);return await Bs(u),await this.createAndPoll(e,{file_ids:l})}};var ye=class extends y{constructor(){super(...arguments),this.files=new Ze(this._client),this.fileBatches=new kt(this._client)}create(e,t){return this._client.post("/vector_stores",{body:e,...t,headers:{"OpenAI-Beta":"assistants=v2",...t==null?void 0:t.headers}})}retrieve(e,t){return this._client.get(`/vector_stores/${e}`,{...t,headers:{"OpenAI-Beta":"assistants=v2",...t==null?void 0:t.headers}})}update(e,t,r){return this._client.post(`/vector_stores/${e}`,{body:t,...r,headers:{"OpenAI-Beta":"assistants=v2",...r==null?void 0:r.headers}})}list(e={},t){return F(e)?this.list({},e):this._client.getAPIList("/vector_stores",Ft,{query:e,...t,headers:{"OpenAI-Beta":"assistants=v2",...t==null?void 0:t.headers}})}del(e,t){return this._client.delete(`/vector_stores/${e}`,{...t,headers:{"OpenAI-Beta":"assistants=v2",...t==null?void 0:t.headers}})}},Ft=class extends B{};ye.VectorStoresPage=Ft;ye.Files=Ze;ye.VectorStoreFilesPage=Ne;ye.FileBatches=kt;var oe=class extends y{constructor(){super(...arguments),this.vectorStores=new ye(this._client),this.chat=new St(this._client),this.assistants=new Ke(this._client),this.threads=new ge(this._client)}};oe.VectorStores=ye;oe.VectorStoresPage=Ft;oe.Assistants=Ke;oe.AssistantsPage=At;oe.Threads=ge;var et=class extends y{create(e,t){var r;return this._client.post("/completions",{body:e,...t,stream:(r=e.stream)!=null?r:!1})}};var tt=class extends y{create(e,t){return this._client.post("/embeddings",{body:e,...t})}};var Be=class extends y{create(e,t){return this._client.post("/files",ie({body:e,...t}))}retrieve(e,t){return this._client.get(`/files/${e}`,t)}list(e={},t){return F(e)?this.list({},e):this._client.getAPIList("/files",rt,{query:e,...t})}del(e,t){return this._client.delete(`/files/${e}`,t)}content(e,t){return this._client.get(`/files/${e}/content`,{...t,__binaryResponse:!0})}retrieveContent(e,t){return this._client.get(`/files/${e}/content`,{...t,headers:{Accept:"application/json",...t==null?void 0:t.headers}})}async waitForProcessing(e,{pollInterval:t=5e3,maxWait:r=30*60*1e3}={}){let s=new Set(["processed","error","deleted"]),i=Date.now(),o=await this.retrieve(e);for(;!o.status||!s.has(o.status);)if(await Ae(t),o=await this.retrieve(e),Date.now()-i>r)throw new Oe({message:`Giving up on waiting for file ${e} to finish processing after ${r} milliseconds.`});return o}},rt=class extends B{};Be.FileObjectsPage=rt;var nt=class extends y{list(e,t={},r){return F(t)?this.list(e,{},t):this._client.getAPIList(`/fine_tuning/jobs/${e}/checkpoints`,Dt,{query:t,...r})}},Dt=class extends B{};nt.FineTuningJobCheckpointsPage=Dt;var be=class extends y{constructor(){super(...arguments),this.checkpoints=new nt(this._client)}create(e,t){return this._client.post("/fine_tuning/jobs",{body:e,...t})}retrieve(e,t){return this._client.get(`/fine_tuning/jobs/${e}`,t)}list(e={},t){return F(e)?this.list({},e):this._client.getAPIList("/fine_tuning/jobs",Nt,{query:e,...t})}cancel(e,t){return this._client.post(`/fine_tuning/jobs/${e}/cancel`,t)}listEvents(e,t={},r){return F(t)?this.listEvents(e,{},t):this._client.getAPIList(`/fine_tuning/jobs/${e}/events`,Bt,{query:t,...r})}},Nt=class extends B{},Bt=class extends B{};be.FineTuningJobsPage=Nt;be.FineTuningJobEventsPage=Bt;be.Checkpoints=nt;be.FineTuningJobCheckpointsPage=Dt;var we=class extends y{constructor(){super(...arguments),this.jobs=new be(this._client)}};we.Jobs=be;we.FineTuningJobsPage=Nt;we.FineTuningJobEventsPage=Bt;var st=class extends y{createVariation(e,t){return this._client.post("/images/variations",ie({body:e,...t}))}edit(e,t){return this._client.post("/images/edits",ie({body:e,...t}))}generate(e,t){return this._client.post("/images/generations",{body:e,...t})}};var Le=class extends y{retrieve(e,t){return this._client.get(`/models/${e}`,t)}list(e){return this._client.getAPIList("/models",it,e)}del(e,t){return this._client.delete(`/models/${e}`,t)}},it=class extends xr{};Le.ModelsPage=it;var ot=class extends y{create(e,t){return this._client.post("/moderations",{body:e,...t})}};var Lt=class extends y{create(e,t,r){return this._client.post(`/uploads/${e}/parts`,ie({body:t,...r}))}};var $e=class extends y{constructor(){super(...arguments),this.parts=new Lt(this._client)}create(e,t){return this._client.post("/uploads",{body:e,...t})}cancel(e,t){return this._client.post(`/uploads/${e}/cancel`,t)}complete(e,t,r){return this._client.post(`/uploads/${e}/complete`,{body:t,...r})}};$e.Parts=Lt;var Ls,I=class extends Ir{constructor({baseURL:e=Qt("OPENAI_BASE_URL"),apiKey:t=Qt("OPENAI_API_KEY"),organization:r=(o=>(o=Qt("OPENAI_ORG_ID"))!=null?o:null)(),project:s=(a=>(a=Qt("OPENAI_PROJECT_ID"))!=null?a:null)(),...i}={}){var l;if(t===void 0)throw new A("The OPENAI_API_KEY environment variable is missing or empty; either provide it, or instantiate the OpenAI client with an apiKey option, like new OpenAI({ apiKey: 'My API Key' }).");let c={apiKey:t,organization:r,project:s,...i,baseURL:e||"https://api.openai.com/v1"};if(!c.dangerouslyAllowBrowser&&As())throw new A(`It looks like you're running in a browser-like environment. + +This is disabled by default, as it risks exposing your secret API credentials to attackers. +If you understand the risks and have appropriate mitigations in place, +you can set the \`dangerouslyAllowBrowser\` option to \`true\`, e.g., + +new OpenAI({ apiKey, dangerouslyAllowBrowser: true }); + +https://help.openai.com/en/articles/5112595-best-practices-for-api-key-safety +`);super({baseURL:c.baseURL,timeout:(l=c.timeout)!=null?l:6e5,httpAgent:c.httpAgent,maxRetries:c.maxRetries,fetch:c.fetch}),this.completions=new et(this),this.chat=new Me(this),this.embeddings=new tt(this),this.files=new Be(this),this.images=new st(this),this.audio=new me(this),this.moderations=new ot(this),this.models=new Le(this),this.fineTuning=new we(this),this.beta=new oe(this),this.batches=new Te(this),this.uploads=new $e(this),this._options=c,this.apiKey=t,this.organization=r,this.project=s}defaultQuery(){return this._options.defaultQuery}defaultHeaders(e){return{...super.defaultHeaders(e),"OpenAI-Organization":this.organization,"OpenAI-Project":this.project,...this._options.defaultHeaders}}authHeaders(e){return{Authorization:`Bearer ${this.apiKey}`}}stringifyQuery(e){return Yr(e,{arrayFormat:"brackets"})}};Ls=I;I.OpenAI=Ls;I.DEFAULT_TIMEOUT=6e5;I.OpenAIError=A;I.APIError=$;I.APIConnectionError=Re;I.APIConnectionTimeoutError=Oe;I.APIUserAbortError=H;I.NotFoundError=Wt;I.ConflictError=Vt;I.RateLimitError=Kt;I.BadRequestError=jt;I.AuthenticationError=qt;I.InternalServerError=Jt;I.PermissionDeniedError=Ht;I.UnprocessableEntityError=zt;I.toFile=ln;I.fileFromPath=wr;I.Completions=et;I.Chat=Me;I.Embeddings=tt;I.Files=Be;I.FileObjectsPage=rt;I.Images=st;I.Audio=me;I.Moderations=ot;I.Models=Le;I.ModelsPage=it;I.FineTuning=we;I.Beta=oe;I.Batches=Te;I.BatchesPage=ze;I.Uploads=$e;var $s=I;var Us=require("electron"),kn=require("obsidian");async function Fn(n,e={}){var s;delete e.headers["content-length"];let t={};this&&"controller"in this&&(t.controller=this.controller);let r=e.signal||((s=t.controller)==null?void 0:s.signal);return p.debug("electronFetch request:",{url:n,method:e.method||"GET",headers:e.headers,hasBody:!!e.body,platform:kn.Platform.isMobileApp?"mobile":"desktop"}),kn.Platform.isMobileApp?(p.debug("Using native fetch (mobile platform)"),fetch(n,{...e,signal:r})):new Promise((i,o)=>{let a=()=>{c.removeAllListeners(),p.debug("Request cleanup completed")},c=Us.remote.net.request({url:n,method:e.method||"GET"});if(e.headers&&Object.entries(e.headers).forEach(([l,d])=>{c.setHeader(l,d)}),r!=null&&r.aborted){p.debug("Request aborted before start"),c.abort(),o(new Error("Aborted"));return}r==null||r.addEventListener("abort",()=>{p.debug("Request aborted by controller"),a(),c.abort(),o(new Error("Aborted"))}),c.on("response",l=>{if(r!=null&&r.aborted){p.debug("Request aborted during response");return}p.debug("Response received:",{status:l.statusCode,headers:l.headers});let{readable:d,writable:u}=new TransformStream({transform(f,v){v.enqueue(new Uint8Array(f))}}),h=u.getWriter(),m={status:l.statusCode||200,headers:l.headers};i(new Response(d,m)),l.on("data",async f=>{try{await h.ready,await h.write(f),p.debug("Chunk received:",{size:f.length})}catch(v){p.error("Error writing chunk:",v),a(),h.abort(v)}}),l.on("end",async()=>{try{await h.ready,await h.close(),p.debug("Response stream completed")}catch(f){p.error("Error closing writer:",f)}finally{a()}}),l.on("error",f=>{p.error("Response error:",f),a(),h.abort(f),o(f)})}),c.on("error",l=>{p.error("Request error:",l),a(),o(l)}),e.body&&c.write(e.body),c.end(),p.debug("Request sent")})}var js=require("obsidian");var ee=async(n,e={})=>{delete e.headers["content-length"],p.debug("obsidianFetch request:",{url:n,method:e.method||"GET",headers:e.headers,hasBody:!!e.body});let t={url:n,method:e.method||"GET",headers:e.headers};e.body&&(t.body=e.body,p.debug("Request body prepared:",t.body));try{p.debug("Sending request via requestUrl");let r=await(0,js.requestUrl)(t);p.debug("Response received:",{status:r.status,headers:r.headers,contentLength:r.text.length});let s={status:r.status,headers:r.headers};return new Response(r.text,s)}catch(r){throw p.error("Request failed:",r),r}};var qs=require("obsidian");var Bo=["cors policy","cors error","blocked by cors","cross-origin","access-control-allow-origin","access-control-allow-methods","access-control-allow-headers","preflight request","connection error","network error","failed to fetch","typeerror: failed to fetch","net::err_failed","fetch error","cors"],$t=class{constructor(e){this.settings=e;this.corsBlockedProviders=new Set}getProviderKey(e){return`${e.url||"unknown"}:${e.type}`}isMobilePlatform(){return qs.Platform.isMobileApp}shouldUseNativeFetch(){var e;return(e=this.settings.useNativeFetch)!=null?e:!1}getFetch(e){let t=e.name;return this.isBlocked(e)?(p.debug("Using obsidianFetch for CORS-blocked provider (API):",t),ee):this.isMobilePlatform()?(p.debug("Using obsidianFetch for mobile platform (API):",t),ee):this.shouldUseNativeFetch()?(p.debug("Using native fetch for provider (API):",t),globalThis.fetch):(p.debug("Using obsidianFetch for provider (API):",t),ee)}getStreamingFetch(e){let t=e.name;return this.isBlocked(e)?(p.debug("Using obsidianFetch for CORS-blocked provider (streaming):",t),ee):this.isMobilePlatform()?(p.debug("Using obsidianFetch for mobile platform (streaming):",t),ee):this.shouldUseNativeFetch()?(p.debug("Using native fetch for provider (streaming):",t),globalThis.fetch):(p.debug("Using electronFetch for provider (streaming):",t),Fn)}getFetchFunction(e){let t=e.name;return this.isBlocked(e)?(p.debug("Using obsidianFetch for CORS-blocked provider:",t),ee):this.isMobilePlatform()?(p.debug("Using obsidianFetch for mobile platform:",t),ee):this.shouldUseNativeFetch()?(p.debug("Using native fetch for provider:",t),globalThis.fetch):(p.debug("Using electronFetch for provider:",t),Fn)}isCorsError(e){if(!e)return!1;let t=(e.message||"").toLowerCase(),r=(e.name||"").toLowerCase();p.debug("Checking CORS error:",{message:e.message,name:e.name});let s=this.matchesCorsPattern(t,r);return p.debug("CORS error detection result:",{isCors:s}),s}matchesCorsPattern(e,t){return Bo.some(r=>e.includes(r)||t.includes(r))}async execute(e,t){if(p.debug("Starting execute operation for provider:",e.name),this.isBlocked(e))return p.debug("Provider already CORS-blocked, using obsidianFetch directly"),t(ee);let r=this.getStreamingFetch(e);try{let s=await t(r);return p.debug("Execute operation completed successfully"),s}catch(s){if(this.isCorsError(s))return p.debug("CORS error detected in execute, retrying with obsidianFetch"),this.markBlocked(e),t(ee);throw s}}async request(e,t){if(p.debug("Starting request operation for provider:",e.name),this.isBlocked(e))return p.debug("Provider already CORS-blocked, using obsidianFetch directly"),t(ee);let r=this.getFetch(e);try{let s=await t(r);return p.debug("Request operation completed successfully"),s}catch(s){if(this.isCorsError(s))return p.debug("CORS error detected in request, retrying with obsidianFetch"),this.markBlocked(e),t(ee);throw s}}getBlockedProviderCount(){return this.corsBlockedProviders.size}isBlocked(e){let t=this.getProviderKey(e);return this.corsBlockedProviders.has(t)}markBlocked(e){let t=this.getProviderKey(e);this.corsBlockedProviders.add(t),p.debug("Provider marked as CORS blocked:",{key:t,provider:e.name})}clear(){this.corsBlockedProviders.clear(),p.debug("All CORS blocked providers cleared")}};var Se=class{constructor(e){this.settings=e;this.fetchSelector=new $t(e)}getClient(e,t){let r;return t?r=t:r=this.fetchSelector.getFetchFunction(e),new $s({baseURL:e.url||(e.type==="openai"?void 0:"http://localhost:1234/v1"),apiKey:e.apiKey||"placeholder-key",dangerouslyAllowBrowser:!0,fetch:r,defaultHeaders:{"x-stainless-arch":null,"x-stainless-lang":null,"x-stainless-os":null,"x-stainless-package-version":null,"x-stainless-retry-count":null,"x-stainless-runtime":null,"x-stainless-runtime-version":null,"x-stainless-timeout":null}})}async fetchModels({provider:e,abortController:t}){if(t!=null&&t.signal.aborted)throw new Error("Aborted");let r=await this.fetchSelector.request(e,async s=>{if(t!=null&&t.signal.aborted)throw new Error("Aborted");return(await this.getClient(e,s).models.list()).data.map(a=>a.id)});if(t!=null&&t.signal.aborted)throw new Error("Aborted");return r}async embed(e){var l;let t=(l=e.input)!=null?l:e.text;if(!t)throw new Error("Either input or text parameter must be provided");let r=e.abortController;if(r!=null&&r.signal.aborted)throw new Error("Aborted");let s=Array.isArray(t)?t:[t],i=[],o=2048,a=[];for(let d=0;d{let v=await this.getClient(e.provider,m).embeddings.create({model:e.provider.model||"",input:d},{signal:r==null?void 0:r.signal});return p.debug("Embed response:",v),v.data.map(g=>g.embedding)},h=await this.fetchSelector.request(e.provider,u);if(i.push(...h),c.push(...d),e.onProgress&&e.onProgress([...c]),r!=null&&r.signal.aborted)throw new Error("Aborted")}return i}async executeOpenAIGeneration(e,t,r,s){var c,l,d;let i=[];if("messages"in e&&e.messages)i=e.messages.map(u=>{if(typeof u.content=="string")return{role:u.role,content:u.content};let h=[];return u.content.forEach(m=>{m.type==="text"?h.push({type:"text",text:m.text}):m.type==="image_url"&&h.push({type:"image_url",image_url:{url:m.image_url.url}})}),{role:u.role,content:h}});else if("prompt"in e)if(e.systemPrompt&&i.push({role:"system",content:e.systemPrompt}),(c=e.images)!=null&&c.length){let u=[{type:"text",text:e.prompt}];e.images.forEach(h=>{u.push({type:"image_url",image_url:{url:h}})}),i.push({role:"user",content:u})}else i.push({role:"user",content:e.prompt});else throw new Error("Either messages or prompt must be provided");p.debug("Sending chat request to OpenAI");let o=await t.chat.completions.create({model:e.provider.model||"",messages:i,stream:!0,...e.options},{signal:s==null?void 0:s.signal}),a="";for await(let u of o){if(s!=null&&s.signal.aborted)throw new Error("Aborted");let h=(d=(l=u.choices[0])==null?void 0:l.delta)==null?void 0:d.content;h&&(a+=h,r&&r(h,a))}return a}async execute(e){var i,o,a,c;p.debug("Starting execute process with params:",{model:e.provider.model,messagesCount:((i=e.messages)==null?void 0:i.length)||0,promptLength:((o=e.prompt)==null?void 0:o.length)||0,systemPromptLength:((a=e.systemPrompt)==null?void 0:a.length)||0,hasImages:!!((c=e.images)!=null&&c.length)});let t=e,r=t.abortController,s=t.onProgress;if(r!=null&&r.signal.aborted)return Promise.reject(new Error("Aborted"));try{return await this.fetchSelector.execute(e.provider,async l=>{let d=this.getClient(e.provider,l);return this.executeOpenAIGeneration(e,d,(u,h)=>{if(s&&s(u,h),r!=null&&r.signal.aborted)throw new Error("Aborted")},r)})}catch(l){let d=l;if(d.message==="Aborted")return Promise.reject(d);throw d}}};var z=typeof globalThis!="undefined"&&globalThis||typeof self!="undefined"&&self||typeof global!="undefined"&&global||{},G={searchParams:"URLSearchParams"in z,iterable:"Symbol"in z&&"iterator"in Symbol,blob:"FileReader"in z&&"Blob"in z&&function(){try{return new Blob,!0}catch(n){return!1}}(),formData:"FormData"in z,arrayBuffer:"ArrayBuffer"in z};function Lo(n){return n&&DataView.prototype.isPrototypeOf(n)}G.arrayBuffer&&(Hs=["[object Int8Array]","[object Uint8Array]","[object Uint8ClampedArray]","[object Int16Array]","[object Uint16Array]","[object Int32Array]","[object Uint32Array]","[object Float32Array]","[object Float64Array]"],Vs=ArrayBuffer.isView||function(n){return n&&Hs.indexOf(Object.prototype.toString.call(n))>-1});var Hs,Vs;function Ut(n){if(typeof n!="string"&&(n=String(n)),/[^a-z0-9\-#$%&'*+.^_`|~!]/i.test(n)||n==="")throw new TypeError('Invalid character in header field name: "'+n+'"');return n.toLowerCase()}function Nn(n){return typeof n!="string"&&(n=String(n)),n}function Bn(n){var e={next:function(){var t=n.shift();return{done:t===void 0,value:t}}};return G.iterable&&(e[Symbol.iterator]=function(){return e}),e}function q(n){this.map={},n instanceof q?n.forEach(function(e,t){this.append(t,e)},this):Array.isArray(n)?n.forEach(function(e){if(e.length!=2)throw new TypeError("Headers constructor: expected name/value pair to be length 2, found"+e.length);this.append(e[0],e[1])},this):n&&Object.getOwnPropertyNames(n).forEach(function(e){this.append(e,n[e])},this)}q.prototype.append=function(n,e){n=Ut(n),e=Nn(e);var t=this.map[n];this.map[n]=t?t+", "+e:e};q.prototype.delete=function(n){delete this.map[Ut(n)]};q.prototype.get=function(n){return n=Ut(n),this.has(n)?this.map[n]:null};q.prototype.has=function(n){return this.map.hasOwnProperty(Ut(n))};q.prototype.set=function(n,e){this.map[Ut(n)]=Nn(e)};q.prototype.forEach=function(n,e){for(var t in this.map)this.map.hasOwnProperty(t)&&n.call(e,this.map[t],t,this)};q.prototype.keys=function(){var n=[];return this.forEach(function(e,t){n.push(t)}),Bn(n)};q.prototype.values=function(){var n=[];return this.forEach(function(e){n.push(e)}),Bn(n)};q.prototype.entries=function(){var n=[];return this.forEach(function(e,t){n.push([t,e])}),Bn(n)};G.iterable&&(q.prototype[Symbol.iterator]=q.prototype.entries);function Dn(n){if(!n._noBody){if(n.bodyUsed)return Promise.reject(new TypeError("Already read"));n.bodyUsed=!0}}function zs(n){return new Promise(function(e,t){n.onload=function(){e(n.result)},n.onerror=function(){t(n.error)}})}function $o(n){var e=new FileReader,t=zs(e);return e.readAsArrayBuffer(n),t}function Uo(n){var e=new FileReader,t=zs(e),r=/charset=([A-Za-z0-9_-]+)/.exec(n.type),s=r?r[1]:"utf-8";return e.readAsText(n,s),t}function jo(n){for(var e=new Uint8Array(n),t=new Array(e.length),r=0;r-1?e:n}function ct(n,e){if(!(this instanceof ct))throw new TypeError('Please use the "new" operator, this DOM object constructor cannot be called as a function.');e=e||{};var t=e.body;if(n instanceof ct){if(n.bodyUsed)throw new TypeError("Already read");this.url=n.url,this.credentials=n.credentials,e.headers||(this.headers=new q(n.headers)),this.method=n.method,this.mode=n.mode,this.signal=n.signal,!t&&n._bodyInit!=null&&(t=n._bodyInit,n.bodyUsed=!0)}else this.url=String(n);if(this.credentials=e.credentials||this.credentials||"same-origin",(e.headers||!this.headers)&&(this.headers=new q(e.headers)),this.method=Ho(e.method||this.method||"GET"),this.mode=e.mode||this.mode||null,this.signal=e.signal||this.signal||function(){if("AbortController"in z){var i=new AbortController;return i.signal}}(),this.referrer=null,(this.method==="GET"||this.method==="HEAD")&&t)throw new TypeError("Body not allowed for GET or HEAD requests");if(this._initBody(t),(this.method==="GET"||this.method==="HEAD")&&(e.cache==="no-store"||e.cache==="no-cache")){var r=/([?&])_=[^&]*/;if(r.test(this.url))this.url=this.url.replace(r,"$1_="+new Date().getTime());else{var s=/\?/;this.url+=(s.test(this.url)?"&":"?")+"_="+new Date().getTime()}}}ct.prototype.clone=function(){return new ct(this,{body:this._bodyInit})};function Wo(n){var e=new FormData;return n.trim().split("&").forEach(function(t){if(t){var r=t.split("="),s=r.shift().replace(/\+/g," "),i=r.join("=").replace(/\+/g," ");e.append(decodeURIComponent(s),decodeURIComponent(i))}}),e}function Vo(n){var e=new q,t=n.replace(/\r?\n[\t ]+/g," ");return t.split("\r").map(function(r){return r.indexOf(` +`)===0?r.substr(1,r.length):r}).forEach(function(r){var s=r.split(":"),i=s.shift().trim();if(i){var o=s.join(":").trim();try{e.append(i,o)}catch(a){console.warn("Response "+a.message)}}}),e}Ks.call(ct.prototype);function ve(n,e){if(!(this instanceof ve))throw new TypeError('Please use the "new" operator, this DOM object constructor cannot be called as a function.');if(e||(e={}),this.type="default",this.status=e.status===void 0?200:e.status,this.status<200||this.status>599)throw new RangeError("Failed to construct 'Response': The status provided (0) is outside the range [200, 599].");this.ok=this.status>=200&&this.status<300,this.statusText=e.statusText===void 0?"":""+e.statusText,this.headers=new q(e.headers),this.url=e.url||"",this._initBody(n)}Ks.call(ve.prototype);ve.prototype.clone=function(){return new ve(this._bodyInit,{status:this.status,statusText:this.statusText,headers:new q(this.headers),url:this.url})};ve.error=function(){var n=new ve(null,{status:200,statusText:""});return n.ok=!1,n.status=0,n.type="error",n};var zo=[301,302,303,307,308];ve.redirect=function(n,e){if(zo.indexOf(e)===-1)throw new RangeError("Invalid status code");return new ve(null,{status:e,headers:{location:n}})};var at=z.DOMException;try{new at}catch(n){at=function(e,t){this.message=e,this.name=t;var r=Error(e);this.stack=r.stack},at.prototype=Object.create(Error.prototype),at.prototype.constructor=at}function Js(n,e){return new Promise(function(t,r){var s=new ct(n,e);if(s.signal&&s.signal.aborted)return r(new at("Aborted","AbortError"));var i=new XMLHttpRequest;function o(){i.abort()}i.onload=function(){var l={statusText:i.statusText,headers:Vo(i.getAllResponseHeaders()||"")};s.url.indexOf("file://")===0&&(i.status<200||i.status>599)?l.status=200:l.status=i.status,l.url="responseURL"in i?i.responseURL:l.headers.get("X-Request-URL");var d="response"in i?i.response:i.responseText;setTimeout(function(){t(new ve(d,l))},0)},i.onerror=function(){setTimeout(function(){r(new TypeError("Network request failed"))},0)},i.ontimeout=function(){setTimeout(function(){r(new TypeError("Network request timed out"))},0)},i.onabort=function(){setTimeout(function(){r(new at("Aborted","AbortError"))},0)};function a(l){try{return l===""&&z.location.href?z.location.href:l}catch(d){return l}}if(i.open(s.method,a(s.url),!0),s.credentials==="include"?i.withCredentials=!0:s.credentials==="omit"&&(i.withCredentials=!1),"responseType"in i&&(G.blob?i.responseType="blob":G.arrayBuffer&&(i.responseType="arraybuffer")),e&&typeof e.headers=="object"&&!(e.headers instanceof q||z.Headers&&e.headers instanceof z.Headers)){var c=[];Object.getOwnPropertyNames(e.headers).forEach(function(l){c.push(Ut(l)),i.setRequestHeader(l,Nn(e.headers[l]))}),s.headers.forEach(function(l,d){c.indexOf(d)===-1&&i.setRequestHeader(d,l)})}else s.headers.forEach(function(l,d){i.setRequestHeader(d,l)});s.signal&&(s.signal.addEventListener("abort",o),i.onreadystatechange=function(){i.readyState===4&&s.signal.removeEventListener("abort",o)}),i.send(typeof s._bodyInit=="undefined"?null:s._bodyInit)})}Js.polyfill=!0;z.fetch||(z.fetch=Js,z.Headers=q,z.Request=ct,z.Response=ve);var Ko="0.5.10",Jo=Object.defineProperty,Xo=(n,e,t)=>e in n?Jo(n,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[e]=t,Ln=(n,e,t)=>(Xo(n,typeof e!="symbol"?e+"":e,t),t),cr=class extends Error{constructor(e,t){super(e),this.error=e,this.status_code=t,this.name="ResponseError",Error.captureStackTrace&&Error.captureStackTrace(this,cr)}},Un=class{constructor(e,t,r){Ln(this,"abortController"),Ln(this,"itr"),Ln(this,"doneCallback"),this.abortController=e,this.itr=t,this.doneCallback=r}abort(){this.abortController.abort()}async*[Symbol.asyncIterator](){for await(let e of this.itr){if("error"in e)throw new Error(e.error);if(yield e,e.done||e.status==="success"){this.doneCallback();return}}throw new Error("Did not receive done or success response in stream.")}},$r=async n=>{var r;if(n.ok)return;let e=`Error ${n.status}: ${n.statusText}`,t=null;if((r=n.headers.get("content-type"))!=null&&r.includes("application/json"))try{t=await n.json(),e=t.error||e}catch(s){console.log("Failed to parse error response as JSON")}else try{console.log("Getting text from response"),e=await n.text()||e}catch(s){console.log("Failed to get text from error response")}throw new cr(e,n.status)};function Go(){return typeof window!="undefined"&&window.navigator?`${window.navigator.platform.toLowerCase()} Browser/${navigator.userAgent};`:typeof process!="undefined"?`${process.arch} ${process.platform} Node.js/${process.version}`:""}var Ur=async(n,e,t={})=>{let r={"Content-Type":"application/json",Accept:"application/json","User-Agent":`ollama-js/${Ko} (${Go()})`};t.headers||(t.headers={});let s=Object.fromEntries(Object.entries(t.headers).filter(([i])=>!Object.keys(r).some(o=>o.toLowerCase()===i.toLowerCase())));return t.headers={...r,...s},n(e,t)},Xs=async(n,e,t)=>{let r=await Ur(n,e,{headers:t==null?void 0:t.headers});return await $r(r),r},Gs=async(n,e)=>{let t=await Ur(n,e,{method:"HEAD"});return await $r(t),t},Ue=async(n,e,t,r)=>{let i=(a=>a!==null&&typeof a=="object"&&!Array.isArray(a))(t)?JSON.stringify(t):t,o=await Ur(n,e,{method:"POST",body:i,signal:r==null?void 0:r.signal,headers:r==null?void 0:r.headers});return await $r(o),o},Qo=async(n,e,t,r)=>{let s=await Ur(n,e,{method:"DELETE",body:JSON.stringify(t),headers:r==null?void 0:r.headers});return await $r(s),s},Yo=async function*(n){var s;let e=new TextDecoder("utf-8"),t="",r=n.getReader();for(;;){let{done:i,value:o}=await r.read();if(i)break;t+=e.decode(o);let a=t.split(` +`);t=(s=a.pop())!=null?s:"";for(let c of a)try{yield JSON.parse(c)}catch(l){console.warn("invalid json: ",c)}}for(let i of t.split(` +`).filter(o=>o!==""))try{yield JSON.parse(i)}catch(o){console.warn("invalid json: ",i)}},Zo=n=>{if(!n)return"http://127.0.0.1:11434";let e=n.includes("://");n.startsWith(":")&&(n=`http://127.0.0.1${n}`,e=!0),e||(n=`http://${n}`);let t=new URL(n),r=t.port;r||(e?r=t.protocol==="https:"?"443":"80":r="11434");let s=`${t.protocol}//${t.hostname}:${r}${t.pathname}`;return s.endsWith("/")&&(s=s.slice(0,-1)),s},ea=Object.defineProperty,ta=(n,e,t)=>e in n?ea(n,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[e]=t,$n=(n,e,t)=>(ta(n,typeof e!="symbol"?e+"":e,t),t),jn=class{constructor(e){var t,r;$n(this,"config"),$n(this,"fetch"),$n(this,"ongoingStreamedRequests",[]),this.config={host:"",headers:e==null?void 0:e.headers},e!=null&&e.proxy||(this.config.host=Zo((t=e==null?void 0:e.host)!=null?t:"http://127.0.0.1:11434")),this.fetch=(r=e==null?void 0:e.fetch)!=null?r:fetch}abort(){for(let e of this.ongoingStreamedRequests)e.abort();this.ongoingStreamedRequests.length=0}async processStreamableRequest(e,t){var i;t.stream=(i=t.stream)!=null?i:!1;let r=`${this.config.host}/api/${e}`;if(t.stream){let o=new AbortController,a=await Ue(this.fetch,r,t,{signal:o.signal,headers:this.config.headers});if(!a.body)throw new Error("Missing body");let c=Yo(a.body),l=new Un(o,c,()=>{let d=this.ongoingStreamedRequests.indexOf(l);d>-1&&this.ongoingStreamedRequests.splice(d,1)});return this.ongoingStreamedRequests.push(l),l}return await(await Ue(this.fetch,r,t,{headers:this.config.headers})).json()}async encodeImage(e){if(typeof e!="string"){let t=new Uint8Array(e),r="",s=t.byteLength;for(let i=0;i{let a=(0,Qs.createHash)("sha256");t.on("data",c=>a.update(c)),t.on("end",()=>i(a.digest("hex"))),t.on("error",o)})}`;try{await Gs(this.fetch,`${this.config.host}/api/blobs/${s}`)}catch(i){if(i instanceof Error&&i.message.includes("404")){let o=new ReadableStream({start(a){t.on("data",c=>{a.enqueue(c)}),t.on("end",()=>{a.close()}),t.on("error",c=>{a.error(c)})}});await Ue(this.fetch,`${this.config.host}/api/blobs/${s}`,o)}else throw i}return s}async create(e){let t="";if(e.path)t=await je.promises.readFile(e.path,{encoding:"utf8"}),t=await this.parseModelfile(t,(0,lt.dirname)(e.path));else if(e.modelfile)t=await this.parseModelfile(e.modelfile);else throw new Error("Must provide either path or modelfile to create a model");return e.modelfile=t,e.stream?super.create(e):super.create(e)}},ju=new lr;var ra=2.5,jr=2048,Zs=2048,na=1.2,dr=class{constructor(e){this.settings=e;this.modelInfoCache=new Map,this.fetchSelector=new $t(e)}getClient(e,t){let r={host:e.url,fetch:t};return e.apiKey&&(r.headers=r.headers||{},r.headers.Authorization=`Bearer ${e.apiKey}`),new lr(r)}getDefaultModelInfo(){return{contextLength:0,lastContextLength:jr}}async getCachedModelInfo(e,t){let r=`${e.url}_${t}`,s=this.modelInfoCache.get(r);if(s)return s;let i=this.getClient(e,this.settings.useNativeFetch?fetch:ee);try{let o={model:t};e.type==="ollama-openwebui"&&(o={name:t});let a=await i.show(o),c=this.getDefaultModelInfo(),l=Object.entries(a.model_info).find(([d,u])=>(d.endsWith(".context_length")||d==="num_ctx")&&typeof u=="number"&&u>0);return l&&typeof l[1]=="number"&&(c.contextLength=l[1]),this.modelInfoCache.set(r,c),c}catch(o){return p.error("Failed to fetch model info:",o),this.getDefaultModelInfo()}}setModelInfoLastContextLength(e,t,r){let s=`${e.url}_${t}`,i=this.modelInfoCache.get(s);i&&this.modelInfoCache.set(s,{...i,lastContextLength:r||i.lastContextLength})}async fetchModels({provider:e,abortController:t}){if(t!=null&&t.signal.aborted)throw new Error("Aborted");let r=async i=>{if(t!=null&&t.signal.aborted)throw new Error("Aborted");let o=this.getClient(e,i);return t==null||t.signal.addEventListener("abort",()=>{o.abort()}),(await o.list()).models.map(c=>c.name)},s=await this.fetchSelector.request(e,r);if(t!=null&&t.signal.aborted)throw new Error("Aborted");return s}optimizeContext(e,t,r,s){let i=Math.ceil(e/ra);if(i<=t)return{num_ctx:t>r?t:void 0,shouldUpdate:!1};let o=Math.min(Math.ceil(Math.max(i,r)*na),s),a=o>t;return{num_ctx:o,shouldUpdate:a}}prepareChatMessages(e){var s;let t=[],r=[];if("messages"in e&&e.messages)e.messages.forEach(i=>{var o;if(typeof i.content=="string")t.push({role:i.role,content:i.content});else{let a=i.content.filter(c=>c.type==="text").map(c=>c.type==="text"?c.text:"").join(` +`);i.content.filter(c=>c.type==="image_url").forEach(c=>{var l;c.type==="image_url"&&((l=c.image_url)!=null&&l.url)&&r.push(c.image_url.url)}),t.push({role:i.role,content:a})}(o=i.images)!=null&&o.length&&r.push(...i.images)});else if("prompt"in e)e.systemPrompt&&t.push({role:"system",content:e.systemPrompt}),t.push({role:"user",content:e.prompt}),(s=e.images)!=null&&s.length&&r.push(...e.images);else throw new Error("Either messages or prompt must be provided");return{chatMessages:t,extractedImages:r}}async executeOllamaGeneration(e,t,r,s){var h,m;let i=await this.getCachedModelInfo(e.provider,e.provider.model||"").catch(f=>(p.error("Failed to get model info:",f),null)),{chatMessages:o,extractedImages:a}=this.prepareChatMessages(e),c=a.length>0?a.map(f=>f.replace(/^data:image\/(.*?);base64,/,"")):void 0,l={};if(!(c!=null&&c.length)){let f=o.reduce((O,b)=>O+b.content.length,0),{num_ctx:v,shouldUpdate:g}=this.optimizeContext(f,(i==null?void 0:i.lastContextLength)||jr,jr,(i==null?void 0:i.contextLength)||jr);v&&(l.num_ctx=v),g&&this.setModelInfoLastContextLength(e.provider,e.provider.model||"",v)}if(e.options&&Object.assign(l,e.options),c!=null&&c.length){let f=o.map(v=>v.role).lastIndexOf("user");f!==-1?o[f]={...o[f],images:c}:o.length>0?o[o.length-1]={...o[o.length-1],images:c}:o.push({role:"user",content:"",images:c})}p.debug("Sending chat request to Ollama");let d=await t.chat({model:e.provider.model||"",messages:o,stream:!0,options:{...l}}),u="";for await(let f of d){if(s!=null&&s.signal.aborted)throw new Error("Aborted");let v=(h=f.message)==null?void 0:h.content;v&&(u+=v,r&&r(v,u)),f.done&&f.total_duration>0&&this.setModelInfoLastContextLength(e.provider,e.provider.model||"",(m=f.context)==null?void 0:m.length)}return u}async embed(e){var l;let t=(l=e.input)!=null?l:e.text;if(!t)throw new Error("Either input or text parameter must be provided");let r=e.abortController;if(r!=null&&r.signal.aborted)throw new Error("Aborted");let s=await this.getCachedModelInfo(e.provider,e.provider.model||""),i=Array.isArray(t)?Math.max(...t.map(d=>d.length)):t.length,{num_ctx:o,shouldUpdate:a}=this.optimizeContext(i,s.lastContextLength||Zs,Zs,s.contextLength);a&&this.setModelInfoLastContextLength(e.provider,e.provider.model||"",o);let c=async d=>{let u=this.getClient(e.provider,d);r==null||r.signal.addEventListener("abort",()=>{u.abort()});let h=Array.isArray(t)?t:[t],m=[],f=[];for(let v of h){if(r!=null&&r.signal.aborted)throw new Error("Aborted");let g=await u.embed({model:e.provider.model||"",input:v,options:{num_ctx:o}});if(m.push(g.embeddings[0]),p.debug("Embed response:",g),f.push(v),e.onProgress&&e.onProgress([...f]),r!=null&&r.signal.aborted)throw new Error("Aborted")}return m};return this.fetchSelector.request(e.provider,c)}async execute(e){let t=e,r=t.abortController,s=t.onProgress;if(r!=null&&r.signal.aborted)return Promise.reject(new Error("Aborted"));try{return await this.fetchSelector.execute(e.provider,async i=>{let o=this.getClient(e.provider,i);if(r==null||r.signal.addEventListener("abort",()=>{o.abort()}),r!=null&&r.signal.aborted)throw new Error("Aborted");return this.executeOllamaGeneration(e,o,(a,c)=>{if(s&&s(a,c),r!=null&&r.signal.aborted)throw new Error("Aborted")},r)})}catch(i){let o=i;if(o.message==="Aborted")return Promise.reject(o);throw o}}};var Wn=(n,e)=>e.some(t=>n instanceof t),ei,ti;function sa(){return ei||(ei=[IDBDatabase,IDBObjectStore,IDBIndex,IDBCursor,IDBTransaction])}function ia(){return ti||(ti=[IDBCursor.prototype.advance,IDBCursor.prototype.continue,IDBCursor.prototype.continuePrimaryKey])}var Vn=new WeakMap,qn=new WeakMap,qr=new WeakMap;function oa(n){let e=new Promise((t,r)=>{let s=()=>{n.removeEventListener("success",i),n.removeEventListener("error",o)},i=()=>{t(dt(n.result)),s()},o=()=>{r(n.error),s()};n.addEventListener("success",i),n.addEventListener("error",o)});return qr.set(e,n),e}function aa(n){if(Vn.has(n))return;let e=new Promise((t,r)=>{let s=()=>{n.removeEventListener("complete",i),n.removeEventListener("error",o),n.removeEventListener("abort",o)},i=()=>{t(),s()},o=()=>{r(n.error||new DOMException("AbortError","AbortError")),s()};n.addEventListener("complete",i),n.addEventListener("error",o),n.addEventListener("abort",o)});Vn.set(n,e)}var zn={get(n,e,t){if(n instanceof IDBTransaction){if(e==="done")return Vn.get(n);if(e==="store")return t.objectStoreNames[1]?void 0:t.objectStore(t.objectStoreNames[0])}return dt(n[e])},set(n,e,t){return n[e]=t,!0},has(n,e){return n instanceof IDBTransaction&&(e==="done"||e==="store")?!0:e in n}};function ii(n){zn=n(zn)}function ca(n){return ia().includes(n)?function(...e){return n.apply(Kn(this),e),dt(this.request)}:function(...e){return dt(n.apply(Kn(this),e))}}function la(n){return typeof n=="function"?ca(n):(n instanceof IDBTransaction&&aa(n),Wn(n,sa())?new Proxy(n,zn):n)}function dt(n){if(n instanceof IDBRequest)return oa(n);if(qn.has(n))return qn.get(n);let e=la(n);return e!==n&&(qn.set(n,e),qr.set(e,n)),e}var Kn=n=>qr.get(n);function oi(n,e,{blocked:t,upgrade:r,blocking:s,terminated:i}={}){let o=indexedDB.open(n,e),a=dt(o);return r&&o.addEventListener("upgradeneeded",c=>{r(dt(o.result),c.oldVersion,c.newVersion,dt(o.transaction),c)}),t&&o.addEventListener("blocked",c=>t(c.oldVersion,c.newVersion,c)),a.then(c=>{i&&c.addEventListener("close",()=>i()),s&&c.addEventListener("versionchange",l=>s(l.oldVersion,l.newVersion,l))}).catch(()=>{}),a}var da=["get","getKey","getAll","getAllKeys","count"],ua=["put","add","delete","clear"],Hn=new Map;function ri(n,e){if(!(n instanceof IDBDatabase&&!(e in n)&&typeof e=="string"))return;if(Hn.get(e))return Hn.get(e);let t=e.replace(/FromIndex$/,""),r=e!==t,s=ua.includes(t);if(!(t in(r?IDBIndex:IDBObjectStore).prototype)||!(s||da.includes(t)))return;let i=async function(o,...a){let c=this.transaction(o,s?"readwrite":"readonly"),l=c.store;return r&&(l=l.index(a.shift())),(await Promise.all([l[t](...a),s&&c.done]))[0]};return Hn.set(e,i),i}ii(n=>({...n,get:(e,t,r)=>ri(e,t)||n.get(e,t,r),has:(e,t)=>!!ri(e,t)||n.has(e,t)}));var ha=["continue","continuePrimaryKey","advance"],ni={},Jn=new WeakMap,ai=new WeakMap,fa={get(n,e){if(!ha.includes(e))return n[e];let t=ni[e];return t||(t=ni[e]=function(...r){Jn.set(this,ai.get(this)[e](...r))}),t}};async function*ma(...n){let e=this;if(e instanceof IDBCursor||(e=await e.openCursor(...n)),!e)return;e=e;let t=new Proxy(e,fa);for(ai.set(t,e),qr.set(t,Kn(e));e;)yield t,e=await(Jn.get(t)||e.continue()),Jn.delete(t)}function si(n,e){return e===Symbol.asyncIterator&&Wn(n,[IDBIndex,IDBObjectStore,IDBCursor])||e==="iterate"&&Wn(n,[IDBIndex,IDBObjectStore])}ii(n=>({...n,get(e,t,r){return si(e,t)?ma:n.get(e,t,r)},has(e,t){return si(e,t)||n.has(e,t)}}));async function pa(n,e=16){if(!(crypto!=null&&crypto.subtle))throw new Error("crypto.subtle is not available. This environment does not support secure hashing.");try{let r=new TextEncoder().encode(n),s=await crypto.subtle.digest("SHA-256",r);return Array.from(new Uint8Array(s)).map(a=>a.toString(16).padStart(2,"0")).join("").substring(0,e)}catch(t){throw new Error(`Failed to generate secure hash: ${t instanceof Error?t.message:"Unknown error"}`)}}var ci=n=>pa(n,16);var qe=class{constructor(){this.db=null;this.vaultId="";this.dbName=""}static getInstance(){return qe.instance||(qe.instance=new qe),qe.instance}async init(e){try{if(this.db&&this.vaultId!==e&&await this.close(),this.db&&this.vaultId===e)return;this.vaultId=e;let t=await ci("ai-providers-plugin");this.dbName=`aiProviders_${t}_${this.vaultId}`,this.db=await oi(this.dbName,1,{upgrade(r){r.createObjectStore("embeddings")}})}catch(t){console.error("Failed to initialize embeddings cache database:",t),this.db=null}}async getEmbeddings(e){if(this.db)try{return await this.db.get("embeddings",e)}catch(t){console.error("Error getting embeddings from cache:",t);return}}async setEmbeddings(e,t){if(this.db)try{await this.db.put("embeddings",t,e)}catch(r){console.error("Error setting embeddings in cache:",r)}}async clearEmbeddings(){if(this.db)try{await this.db.clear("embeddings")}catch(e){console.error("Error clearing embeddings cache:",e)}}async clearAll(){if(this.db)try{await this.db.clear("embeddings")}catch(e){console.error("Error clearing all caches:",e)}}async close(){this.db&&(this.db.close(),this.db=null)}isInitialized(){return this.db!==null}},ut=qe.getInstance();var Hr=class{constructor(e){this.embedFunction=e}async embedWithCache(e){var a;if(!e.chunks)return this.embedFunction(e);let t=e.abortController;if(t!=null&&t.signal.aborted)throw new Error("Aborted");let r=await this.generateCacheKey(e),{chunks:s}=e,i=await this.loadCachedChunks(e,r),o=s.filter(c=>!i.has(c));if(o.length>0){if(t!=null&&t.signal.aborted)throw new Error("Aborted");await this.embedAndCacheChunks(e,o,i,r)}return(a=e.onProgress)==null||a.call(e,s),s.map(c=>i.get(c))}async embedAndCacheChunks(e,t,r,s){let i=e.abortController;if(i!=null&&i.signal.aborted)throw new Error("Aborted");let o=await this.embedFunction({...e,input:t});t.forEach((a,c)=>r.set(a,o[c])),await this.saveCachedChunks(s,e.provider,r)}async loadCachedChunks(e,t){let r=await ut.getEmbeddings(t).catch(s=>(p.error("Error reading from embeddings cache:",s),null));return(r==null?void 0:r.providerId)===e.provider.id&&(r==null?void 0:r.providerModel)===e.provider.model?new Map(r.chunks.map(s=>[s.content,s.embedding])):new Map}async saveCachedChunks(e,t,r){if(!t.model)return;let s=Array.from(r,([i,o])=>({content:i,embedding:o}));await ut.setEmbeddings(e,{providerId:t.id,providerModel:t.model,chunks:s}).catch(i=>{p.error("Error writing to embeddings cache:",i)})}async generateCacheKey(e){return`embed:${e.provider.id}:${e.provider.model}`}};var ur=1e3;function li(n){return p.debug("Preprocessing content",{contentLength:n.length}),n.replace(/^---\n[\s\S]*?\n---\n/,"").replace(/```[\s\S]*?```/g,"").replace(/^(#+)\s*$\n/gm,"").replace(/^(#+)\s*(?!$)[^\n]+\n(?=\s*(?:\1#|\s*$)(?!\s*\S))/gm,"").replace(/\n{3,}/g,` + +`).replace(/[ \t]+$/gm,"").replace(/\n+$/,"")}function di(n){return n.lengthga(t.trim())).flatMap(t=>ya(t)).map(t=>t.trim()).filter(t=>t.length>0))}function ga(n){let e=/^(#{1,6})\s+(.+)$/gm,t=[],r=0,s="",i;for(;(i=e.exec(n))!==null;)ro.length>0)}function ya(n){let t=n.split(` +`).reduce(ba,{chunks:[],currentChunk:"",inList:!1,lastNonListText:""}),r=t.currentChunk?[...t.chunks,t.currentChunk.trim()]:t.chunks.map(i=>i.trim()),s=[];for(let i=0;iur){let o=e,a=[...t];for(r&&a.push(r.trim());o.length>0;){let c=Aa(o,ur);a.push(o.slice(0,c).trim()),o=o.slice(c).trim()}return{chunks:a,currentChunk:"",inList:!1,lastNonListText:e}}let i=r+(r?` +`:"")+e;return i.length>ur?{chunks:[...t,r.trim()],currentChunk:e,inList:!1,lastNonListText:e.trim()?e:s}:{...n,currentChunk:i,inList:!1,lastNonListText:e.trim()?e:s}}function Aa(n,e){if(n.length<=e)return n.length;let t=e;for(;t>0&&!/\s/.test(n[t]);)t--;return t>0?t:e}var Vr=class{constructor(e,t){this.providers=[];this.version=3;this.plugin=t,this.providers=t.settings.providers||[],this.app=e,this.handlers={openai:new Se(t.settings),openrouter:new Se(t.settings),ollama:new dr(t.settings),"ollama-openwebui":new dr(t.settings),gemini:new Se(t.settings),lmstudio:new Se(t.settings),groq:new Se(t.settings),ai302:new Se(t.settings)},this.cachedEmbeddingsService=new Hr(this.embedForce.bind(this))}async initEmbeddingsCache(){try{let e=this.app.appId||"default";await ut.init(e)}catch(e){p.error("Failed to initialize embeddings cache:",e)}}getHandler(e){return this.handlers[e]}async embedForce(e){let t=this.getHandler(e.provider.type);if(!t)throw new Error(`Handler not found for provider type: ${e.provider.type}`);return t.embed(e)}async embed(e){try{if(!e.input)throw new Error("Input is required for embedding");let t=e.abortController;if(t!=null&&t.signal.aborted)throw new Error("Aborted");let r=Array.isArray(e.input)?e.input:[e.input],s={...e,input:r,chunks:r};return this.cachedEmbeddingsService.embedWithCache(s)}catch(t){let r=t instanceof Error?t.message:_.t("errors.failedToEmbed");throw new Wr.Notice(r),t}}async fetchModels(e){try{let t="provider"in e?e.provider:e,r="abortController"in e?e.abortController:void 0;if(r!=null&&r.signal.aborted)throw new Error("Aborted");let s=this.getHandler(t.type);if(!s||!s.fetchModels)throw new Error(`Handler not found or does not support fetchModels for provider type: ${t.type}`);return s.fetchModels({provider:t,abortController:r})}catch(t){let r=t instanceof Error?t.message:_.t("errors.failedToFetchModels");throw new Wr.Notice(r),t}}async execute(e){let t=this.getHandler(e.provider.type);if(!t)throw new Error(`Handler not found for provider type: ${e.provider.type}`);let r=e,s=Boolean(r.onProgress),i=Boolean(r.abortController);if(!(!s&&!i))return await t.execute(e);let a=new AbortController,c={data:[],end:[],error:[]};return t.execute({...e,abortController:a,onProgress:(d,u)=>{c.data.forEach(h=>h(d,u))}}).then(d=>{c.end.forEach(u=>u(d))}).catch(d=>{let u=d instanceof Error?d:new Error(String(d));c.error.forEach(h=>h(u))}),{onData(d){c.data.push(d)},onEnd(d){c.end.push(d)},onError(d){c.error.push(d)},abort:()=>{a.abort()}}}async migrateProvider(e){let t=["type","apiKey","url","model"];this.plugin.settings.providers=this.plugin.settings.providers||[];let r=this.plugin.settings.providers.find(s=>t.every(i=>s[i]===e[i]));return r?Promise.resolve(r):new Promise(s=>{new ht(this.app,`Migrate provider ${e.name}?`,async()=>{var i;(i=this.plugin.settings.providers)==null||i.push(e),await this.plugin.saveSettings(),s(e)},()=>{s(!1)}).open()})}checkCompatibility(e){if(e>this.version)throw new Wr.Notice(_.t("errors.pluginMustBeUpdatedFormatted")),new Error(_.t("errors.pluginMustBeUpdated"))}async retrieve(e){var h,m;let t=e.abortController;if(t!=null&&t.signal.aborted)throw new Error("Aborted");if(!e.query)return[];if(!e.documents||e.documents.length===0)return[];if(!this.getHandler(e.embeddingProvider.type))throw new Error(`Handler not found for provider type: ${e.embeddingProvider.type}`);let{chunks:s,totalChunks:i,documentChunkCounts:o}=this.processDocuments(e.documents);if(s.length===0)return[];let a=e.documents.length;(h=e.onProgress)==null||h.call(e,{totalDocuments:a,totalChunks:i,processedDocuments:[],processedChunks:[],processingType:"embedding"});let[c,l]=await Promise.all([this.embed({provider:e.embeddingProvider,input:e.query,abortController:e.abortController}),this.embed({provider:e.embeddingProvider,input:s.map(f=>f.content),abortController:e.abortController,onProgress:f=>{var b;if(t!=null&&t.signal.aborted)return;let v=f.length,g=s.slice(0,v),O=this.getProcessedDocs(g,o,e.documents);(b=e.onProgress)==null||b.call(e,{totalDocuments:a,totalChunks:i,processedDocuments:O,processedChunks:g,processingType:"embedding"})}})]).catch(f=>{var v,g;throw(g=(v=e.abortController)==null?void 0:v.signal)!=null&&g.aborted?new Error("Aborted"):f}),d=this.l2Normalize(c[0]),u=l.map(f=>this.l2Normalize(f));return(m=e.onProgress)==null||m.call(e,{totalDocuments:a,totalChunks:i,processedDocuments:this.getProcessedDocs(s,o,e.documents),processedChunks:s,processingType:"embedding"}),this.rankChunks(d,s,u)}processDocuments(e){var s;let t=[],r={};for(let i of e){let o=li(i.content),a=di(o),c=((s=i.meta)==null?void 0:s.id)||i.content;r[c]=0;for(let l of a)l.trim().length>0&&(t.push({content:l.trim(),document:i}),r[c]++)}return{chunks:t,totalChunks:t.length,documentChunkCounts:r}}getProcessedDocs(e,t,r){var o,a;let s={};for(let c of e){let l=((o=c.document.meta)==null?void 0:o.id)||c.document.content;s[l]=(s[l]||0)+1}let i=[];for(let c of r){let l=((a=c.meta)==null?void 0:a.id)||c.content;t[l]>0&&s[l]===t[l]&&i.push(c)}return i}rankChunks(e,t,r){let s=r.map(i=>this.dotProduct(e,i));return t.map((i,o)=>({document:i.document,score:s[o],content:i.content})).sort((i,o)=>o.score-i.score)}dotProduct(e,t){return e.reduce((r,s,i)=>r+s*t[i],0)}l2Normalize(e){let t=Math.sqrt(e.reduce((r,s)=>r+s*s,0))||1;return e.map(r=>r/t)}async cleanup(){try{ut.isInitialized()&&await ut.close()}catch(e){p.error("Error during cleanup:",e)}}};var ui='',hi='',fi='',mi='',pi='',gi='',yi='',bi='';var zr=class extends le.Plugin{async onload(){await this.loadSettings(),(0,le.addIcon)("ai-providers-openai",ui),(0,le.addIcon)("ai-providers-ollama",gi),(0,le.addIcon)("ai-providers-ollama-openwebui",yi),(0,le.addIcon)("ai-providers-gemini",pi),(0,le.addIcon)("ai-providers-openrouter",hi),(0,le.addIcon)("ai-providers-lmstudio",mi),(0,le.addIcon)("ai-providers-groq",fi),(0,le.addIcon)("ai-providers-ai302",bi);let t=new pr(this.app,this);this.exposeAIProviders(),this.app.workspace.onLayoutReady(async()=>{await this.aiProviders.initEmbeddingsCache()}),this.app.workspace.trigger("ai-providers-ready"),this.addSettingTab(t)}async onunload(){this.aiProviders&&await this.aiProviders.cleanup(),delete this.app.aiProviders}async loadSettings(){var t;this.settings=Object.assign({},es,await this.loadData()),p.setEnabled((t=this.settings.debugLogging)!=null?t:!1)}async saveSettings(){await this.saveData(this.settings),this.exposeAIProviders()}exposeAIProviders(){this.aiProviders&&this.aiProviders.cleanup().catch(t=>{console.error("Error during aiProviders cleanup:",t)}),this.aiProviders=new Vr(this.app,this),this.app.aiProviders=this.aiProviders,this.app.workspace.layoutReady&&this.aiProviders.initEmbeddingsCache().catch(t=>{console.error("Error reinitializing embeddings cache:",t)})}}; + +/* nosourcemap */ \ No newline at end of file diff --git a/.obsidian/plugins/ai-providers/manifest.json b/.obsidian/plugins/ai-providers/manifest.json new file mode 100644 index 00000000..663d4d35 --- /dev/null +++ b/.obsidian/plugins/ai-providers/manifest.json @@ -0,0 +1,10 @@ +{ + "id": "ai-providers", + "name": "AI Providers", + "version": "1.7.2", + "minAppVersion": "0.15.0", + "description": "A hub for setting AI providers (OpenAI-like, Ollama and more) in one place.", + "author": "Pavel Frankov", + "authorUrl": "https://github.com/pfrankov", + "isDesktopOnly": false +} diff --git a/.obsidian/plugins/ai-providers/styles.css b/.obsidian/plugins/ai-providers/styles.css new file mode 100644 index 00000000..6a9c8007 --- /dev/null +++ b/.obsidian/plugins/ai-providers/styles.css @@ -0,0 +1 @@ +.ai-providers-model-pill{display:inline-block;padding:2px 6px;margin-top:4px;border-radius:var(--radius-s);background-color:var(--background-modifier-border);color:var(--text-muted);font-size:var(--font-smallest);opacity:.8;text-shadow:var(--background-primary) 0 0 1px,var(--background-primary) 0 0 1px}.ai-providers-provider-icon{display:inline-flex;align-items:center;margin-right:6px;vertical-align:text-top}.ai-providers-provider-icon svg{width:16px;height:16px;fill:var(--text-muted)}.ai-providers-developer-settings-toggle{margin-top:1.5em;border:0}.ai-providers-developer-settings{margin-top:.75em;padding:1em;border:1px solid var(--background-modifier-border);border-radius:var(--radius-m)}.ai-providers-notice{margin:0 -1em 1em;padding:1em;border:1px solid var(--background-modifier-border);border-radius:var(--radius-m);background-color:var(--background-secondary)}.ai-providers-notice-content{color:var(--text-muted);font-size:var(--font-small);line-height:var(--line-height-tight)}.ai-providers-model-dropdown{max-width:65%}.ai-providers-model-dropdown select{width:100%;text-overflow:ellipsis}.ai-providers-main-interface .setting-item,.ai-providers-main-interface .setting-item-info{overflow:hidden}.ai-providers-main-interface .setting-item-description{max-width:100%} diff --git a/.obsidian/plugins/cubox-sync/data.json b/.obsidian/plugins/cubox-sync/data.json index 69586f10..4946c57e 100644 --- a/.obsidian/plugins/cubox-sync/data.json +++ b/.obsidian/plugins/cubox-sync/data.json @@ -34,7 +34,7 @@ "contentTemplate": "# {{{title}}}\n\n{{{description}}}\n\n{{{article_title}}} //文章内容标题\n{{{content}}} //文章正文\n\n\n[Read in Cubox]({{{cubox_url}}}) \n[Read Original]({{{url}}}) \n\n---\n\n{{#highlights.length}}\n## Annotations \n\n{{#highlights}}\n> {{{text}}} \n\n{{#note}}\n{{{note}}}\n{{/note}}\n[Link️]({{{cubox_url}}}) \n\n{{/highlights}}\n{{/highlights.length}}", "highlightInContent": true, "dateFormat": "yyyy-MM-dd", - "lastSyncTime": 1756881758901, + "lastSyncTime": 1756885358457, "lastSyncCardId": "7362485231795834846", "lastCardUpdateTime": "2025-09-02T17:21:26.574+0800", "syncing": false diff --git a/.obsidian/plugins/local-gpt/main.js b/.obsidian/plugins/local-gpt/main.js new file mode 100644 index 00000000..2eea035e --- /dev/null +++ b/.obsidian/plugins/local-gpt/main.js @@ -0,0 +1,24285 @@ +/* +THIS IS A GENERATED/BUNDLED FILE BY ESBUILD +if you want to view the source, please visit the github repository of this plugin +*/ + +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +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 __require() { + return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; +}; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var __publicField = (obj, key, value) => { + __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value); + return value; +}; +var __accessCheck = (obj, member, msg) => { + if (!member.has(obj)) + throw TypeError("Cannot " + msg); +}; +var __privateGet = (obj, member, getter) => { + __accessCheck(obj, member, "read from private field"); + return getter ? getter.call(obj) : member.get(obj); +}; +var __privateAdd = (obj, member, value) => { + if (member.has(obj)) + throw TypeError("Cannot add the same private member more than once"); + member instanceof WeakSet ? member.add(obj) : member.set(obj, value); +}; +var __privateSet = (obj, member, value, setter) => { + __accessCheck(obj, member, "write to private field"); + setter ? setter.call(obj, value) : member.set(obj, value); + return value; +}; +var __privateWrapper = (obj, member, setter, getter) => ({ + set _(value) { + __privateSet(obj, member, value, setter); + }, + get _() { + return __privateGet(obj, member, getter); + } +}); +var __privateMethod = (obj, member, method) => { + __accessCheck(obj, member, "access private method"); + return method; +}; + +// node_modules/@obsidian-ai-providers/sdk/dist/index.js +var require_dist = __commonJS({ + "node_modules/@obsidian-ai-providers/sdk/dist/index.js"(exports, module2) { + var __defProp2 = Object.defineProperty; + var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor; + var __getOwnPropNames2 = Object.getOwnPropertyNames; + var __hasOwnProp2 = Object.prototype.hasOwnProperty; + var __name = (target, value) => __defProp2(target, "name", { value, configurable: true }); + var __export2 = (target, all) => { + for (var name in all) + __defProp2(target, name, { get: all[name], enumerable: true }); + }; + var __copyProps2 = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames2(from)) + if (!__hasOwnProp2.call(to, key) && key !== except) + __defProp2(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc2(from, key)) || desc.enumerable }); + } + return to; + }; + var __toCommonJS2 = (mod) => __copyProps2(__defProp2({}, "__esModule", { value: true }), mod); + var sdk_exports = {}; + __export2(sdk_exports, { + initAI: () => initAI2, + waitForAI: () => waitForAI3 + }); + module2.exports = __toCommonJS2(sdk_exports); + var import_obsidian4 = require("obsidian"); + var FALLBACK_TIMEOUT = 100; + var REQUIRED_AI_PROVIDERS_VERSION = 3; + var AI_PROVIDERS_READY_EVENT = "ai-providers-ready"; + var aiProvidersReadyAiResolver = null; + async function waitForAIProviders(app, plugin) { + if (aiProvidersReadyAiResolver) { + return aiProvidersReadyAiResolver; + } + const abortController = new AbortController(); + let aiProvidersReady = /* @__PURE__ */ __name(() => { + }, "aiProvidersReady"); + const result = { + promise: new Promise((resolve, reject) => { + aiProvidersReady = /* @__PURE__ */ __name(() => { + app.workspace.off(AI_PROVIDERS_READY_EVENT, aiProvidersReady); + aiProvidersReadyAiResolver = null; + resolve(app.aiProviders); + }, "aiProvidersReady"); + if (app.aiProviders) { + aiProvidersReady(); + } else { + const eventRef = app.workspace.on( + AI_PROVIDERS_READY_EVENT, + aiProvidersReady + ); + plugin.registerEvent(eventRef); + } + abortController.signal.addEventListener("abort", () => { + app.workspace.off(AI_PROVIDERS_READY_EVENT, aiProvidersReady); + aiProvidersReadyAiResolver = null; + reject(new Error("Waiting for AI Providers was cancelled")); + }); + }), + cancel: () => abortController.abort() + }; + if (!app.aiProviders) { + aiProvidersReadyAiResolver = result; + } + return result; + } + __name(waitForAIProviders, "waitForAIProviders"); + var _AIProvidersManager = class { + constructor(app, plugin) { + this.app = app; + this.plugin = plugin; + } + static getInstance(app, plugin) { + if (!this.instance) { + if (!app || !plugin) { + throw new Error( + "AIProvidersManager not initialized. Call initialize() first" + ); + } + this.instance = new _AIProvidersManager(app, plugin); + } + return this.instance; + } + static reset() { + this.instance = null; + } + getApp() { + return this.app; + } + getPlugin() { + return this.plugin; + } + }; + var AIProvidersManager = _AIProvidersManager; + __name(AIProvidersManager, "AIProvidersManager"); + AIProvidersManager.instance = null; + async function initAI2(app, plugin, onDone, options) { + AIProvidersManager.getInstance(app, plugin); + let isFallbackShown = false; + if (options == null ? void 0 : options.disableFallback) { + await onDone(); + return; + } + try { + const timeout = setTimeout(async () => { + plugin.addSettingTab( + new AIProvidersFallbackSettingsTab(app, plugin) + ); + isFallbackShown = true; + }, FALLBACK_TIMEOUT); + const aiProvidersAiResolver = await waitForAIProviders(app, plugin); + const aiProviders = await aiProvidersAiResolver.promise; + clearTimeout(timeout); + try { + aiProviders.checkCompatibility(REQUIRED_AI_PROVIDERS_VERSION); + } catch (error) { + console.error(`AI Providers compatibility check failed: ${error}`); + if (error.code === "version_mismatch") { + plugin.addSettingTab( + new AIProvidersFallbackSettingsTab(app, plugin) + ); + throw new Error( + `AI Providers version ${REQUIRED_AI_PROVIDERS_VERSION} is required` + ); + } + throw error; + } + await onDone(); + } finally { + if (isFallbackShown && app.plugins) { + await app.plugins.disablePlugin(plugin.manifest.id); + await app.plugins.enablePlugin(plugin.manifest.id); + } + } + } + __name(initAI2, "initAI"); + async function waitForAI3() { + const manager = AIProvidersManager.getInstance(); + return waitForAIProviders(manager.getApp(), manager.getPlugin()); + } + __name(waitForAI3, "waitForAI"); + var AIProvidersFallbackSettingsTab = class extends import_obsidian4.PluginSettingTab { + constructor(app, plugin) { + super(app, plugin); + this.plugin = plugin; + } + async display() { + const { containerEl } = this; + containerEl.empty(); + const aiProvidersNotice = containerEl.createEl("div"); + aiProvidersNotice.addClass("ai-providers-notice"); + aiProvidersNotice.appendChild( + (0, import_obsidian4.sanitizeHTMLToDom)(` +

\u26A0\uFE0F This plugin requires AI Providers plugin to be installed.

+

Please install and configure AI Providers plugin first.

+ `) + ); + } + }; + __name(AIProvidersFallbackSettingsTab, "AIProvidersFallbackSettingsTab"); + } +}); + +// src/main.ts +var main_exports = {}; +__export(main_exports, { + default: () => LocalGPT +}); +module.exports = __toCommonJS(main_exports); +var import_obsidian3 = require("obsidian"); + +// src/LocalGPTSettingTab.ts +var import_obsidian = require("obsidian"); + +// src/defaultSettings.ts +var DEFAULT_SETTINGS = { + aiProviders: { + main: null, + embedding: null, + vision: null + }, + defaults: { + creativity: "low", + contextLimit: "local" + }, + actions: [ + { + name: "\u{1FA84} General help", + prompt: "", + system: "You are an assistant helping a user write more content in a document based on a prompt. Output in markdown format. Do not use links. Do not include literal content from the original document." + }, + { + name: "\u270D\uFE0F Continue writing", + prompt: "Act as a professional editor with many years of experience as a writer. Carefully finalize the following text, add details, use facts and make sure that the meaning and original style are preserved. Purposely write in detail, with examples, so that your reader is comfortable, even if they don't understand the specifics. Don't use clericalisms, evaluations without proof with facts, passive voice. Use Markdown markup language for formatting. Answer only content and nothing else, no introductory words, only substance.", + system: "You are an AI assistant that follows instruction extremely well. Help as much as you can." + }, + { + name: "\u{1F36D} Summarize", + prompt: "Make a concise summary of the key points of the following text.", + system: "You are an AI assistant that follows instruction extremely well. Help as much as you can." + }, + { + name: "\u{1F4D6} Fix spelling and grammar", + prompt: "Proofread the below for spelling and grammar.", + system: "You are an AI assistant that follows instruction extremely well. Help as much as you can.", + replace: true + }, + { + name: "\u2705 Find action items", + prompt: 'Act as an assistant helping find action items inside a document. An action item is an extracted task or to-do found inside of an unstructured document. Use Markdown checkbox format: each line starts with "- [ ] "', + system: "You are an AI assistant that follows instruction extremely well. Help as much as you can." + }, + { + name: "\u{1F9E0} New System Prompt", + prompt: "", + system: `You are a highly skilled AI prompt engineer with expertise in creating tailored prompts for a wide range of professional roles. You have a deep knowledge of how to craft prompts that effectively guide the language model to produce high-quality, contextually appropriate responses. + +Your task is to generate a custom system prompt for different roles based on user input. This involves understanding the specific requirements of each role, the context in which the prompt will be used, and the desired output format. You are skilled in structuring prompts that ensure clarity, relevance, and utility. + +Create a custom system prompt for an LLM to assist users in generating contextually appropriate and highly effective responses for various roles. The prompt should provide clear instructions to the LLM on how to handle specific scenarios related to the role, including the tone and format of the response. + +Start by providing a role "You are..." and context as a summary of the situation or background information relevant to the prompt. Define the main objective, outlining what the LLM needs to accomplish. + +Include instructions on the appropriate style and tone (e.g., formal, casual, technical, empathetic) based on the role and audience. Identify the target audience to tailor the LLM's output effectively. Specify the format of the response, whether it should be a narrative, bullet points, step-by-step guide, code, or another format. Avoid using headings or examples; the prompt should read as a continuous, cohesive set of instructions. +ANSWER PROMPT AND NOTHING ELSE!` + } + ], + _version: 8 +}; +var CREATIVITY = { + "": { + temperature: 0 + }, + low: { + temperature: 0.2 + }, + medium: { + temperature: 0.5 + }, + high: { + temperature: 1 + } +}; +var SELECTION_KEYWORD = "{{=SELECTION=}}"; +var CONTEXT_KEYWORD = "{{=CONTEXT=}}"; +var CONTEXT_CONDITION_START = "{{=CONTEXT_START=}}"; +var CONTEXT_CONDITION_END = "{{=CONTEXT_END=}}"; + +// src/LocalGPTSettingTab.ts +var import_sdk = __toESM(require_dist()); + +// src/i18n/de.json +var de_default = { + commands: { + showContextMenu: "Kontextmen\xFC anzeigen", + actionPalette: { + name: "Aktionspalette", + placeholder: "Ihr Prompt... | Enter: senden, Esc: abbrechen" + } + }, + statusBar: { + enhancing: "\u2728 Verbessern", + enhancingWithProgress: "\u2728 Verbessern {{percent}}%" + }, + notices: { + errorGenerating: "Fehler bei der Texterzeugung: {{message}}", + errorProcessingRag: "Fehler bei der Verarbeitung verkn\xFCpfter Dokumente: {{message}}. Fahre mit dem Originaltext fort.", + importantUpdate: "\uFE0F\u{1F6A8} WICHTIG! Aktualisiere die Local GPT Einstellungen!", + newVersion: "\u2B06\uFE0F Local GPT: Eine neue Version ist verf\xFCgbar", + actionNameRequired: "Bitte gib einen Namen f\xFCr die Aktion ein.", + actionNameExists: 'Eine Aktion mit dem Namen "{{name}}" existiert bereits.', + actionRewritten: 'Aktion "{{name}}" \xFCberschrieben', + actionAdded: 'Aktion "{{name}}" hinzugef\xFCgt', + copied: "Kopiert" + }, + settings: { + mainProvider: "Haupt-AI-Provider", + embeddingProvider: "Embedding AI Provider", + embeddingProviderDesc: "Optional. Wird f\xFCr \u2728\xA0Erweiterte\xA0Aktionen.", + visionProvider: "Vision AI Provider", + visionProviderDesc: "Optional. Dies wird f\xFCr Bilder verwendet. Wenn nicht festgelegt, wird der Haupt-AI-Provider verwendet.", + creativity: "Kreativit\xE4t", + creativityNone: "\u26AA Keine", + creativityLow: "\uFE0F\u{1F4A1} Niedrig", + creativityMedium: "\u{1F3A8} Mittel", + creativityHigh: "\u{1F680} Hoch", + actions: "Aktionen", + quickAdd: "Schnell hinzuf\xFCgen", + quickAddPlaceholder: "Aktion einf\xFCgen", + quickAddDesc: 'Sie k\xF6nnen die besten S\xE4tze von Prompts teilen oder einen aus der Community erhalten.
Wichtig: Wenn Sie bereits eine Aktion mit demselben Namen haben, wird sie \xFCberschrieben.', + addNewManually: "Manuell hinzuf\xFCgen", + actionName: "Aktionsname", + actionNamePlaceholder: "Auswahl zusammenfassen", + systemPrompt: "System-Prompt", + systemPromptDesc: "Optional", + systemPromptPlaceholder: "Du bist ein hilfreicher Assistent.", + prompt: "Prompt", + promptDesc: 'Bitte lesen Sie \xFCber
Prompt-Vorlagen
, wenn Sie Ihre
resultierenden Prompts anpassen m\xF6chten', + replaceSelected: "Ausgew\xE4hlten Text ersetzen", + replaceSelectedDesc: "Wenn diese Option aktiviert ist, wird der hervorgehobene Text durch eine Antwort des Modells ersetzt.", + remove: "Entfernen", + close: "Schlie\xDFen", + save: "Speichern", + actionsList: "Aktionsliste", + changeOrder: "Reihenfolge \xE4ndern", + done: "Fertig", + advancedSettings: "Erweiterte Einstellungen", + advancedSettingsDesc: "\u2728 Erweiterte Aktionen (RAG), Alle Aktionen zur\xFCcksetzen", + enhancedActions: "Erweiterte Aktionen", + enhancedActionsLabel: "RAG\u2011Kontext", + enhancedActionsDesc: "Mehr Kontext kann die Antwortqualit\xE4t bei leistungsstarken Modellen verbessern, bei schw\xE4cheren jedoch verschlechtern. Gr\xF6\xDFerer Kontext verbraucht au\xDFerdem mehr Tokens und erh\xF6ht die Kosten pro Anfrage (bei kostenpflichtigen Modellen).", + contextLimitLocal: "Lokale Modelle", + contextLimitCloud: "Cloud\u2011Modelle", + contextLimitAdvanced: "Top: GPT, Claude, Gemini", + contextLimitMax: "Keine Limits (Achtung)", + dangerZone: "Gefahrenzone", + resetActions: "Aktionen zur\xFCcksetzen", + resetActionsDesc: "\u{1F6A8} Setzt alle Aktionen auf die Standardeinstellungen zur\xFCck. Dies kann nicht r\xFCckg\xE4ngig gemacht werden und l\xF6scht alle Ihre benutzerdefinierten Aktionen.", + reset: "Zur\xFCcksetzen", + confirmReset: "Zur\xFCcksetzen best\xE4tigen" + } +}; + +// src/i18n/en.json +var en_default = { + commands: { + showContextMenu: "Show context menu", + actionPalette: { + name: "Action Palette", + placeholder: "Your prompt... | Enter: send, Esc: cancel" + } + }, + statusBar: { + enhancing: "\u2728 Enhancing", + enhancingWithProgress: "\u2728 Enhancing {{percent}}%" + }, + notices: { + errorGenerating: "Error while generating text: {{message}}", + errorProcessingRag: "Error processing related documents: {{message}}. Continuing with original text.", + importantUpdate: "\uFE0F\u{1F6A8} IMPORTANT! Update Local GPT settings!", + newVersion: "\u2B06\uFE0F Local GPT: a new version is available", + actionNameRequired: "Please enter a name for the action.", + actionNameExists: 'An action with the name "{{name}}" already exists.', + actionRewritten: 'Rewritten "{{name}}" action', + actionAdded: 'Added "{{name}}" action', + copied: "Copied" + }, + settings: { + mainProvider: "Main AI Provider", + embeddingProvider: "Embedding AI Provider", + embeddingProviderDesc: "Optional. Used for \u2728\xA0Enhanced\xA0Actions.", + visionProvider: "Vision AI Provider", + visionProviderDesc: "Optional. This is used for images. If not set, the main AI provider will be used.", + creativity: "Creativity", + creativityNone: "\u26AA None", + creativityLow: "\uFE0F\u{1F4A1} Low", + creativityMedium: "\u{1F3A8} Medium", + creativityHigh: "\u{1F680} High", + actions: "Actions", + quickAdd: "Quick add", + quickAddPlaceholder: "Paste action", + quickAddDesc: 'You can share the best sets prompts or get one from the community.
Important: if you already have an action with the same name it will be overwritten.', + addNewManually: "Add new manually", + actionName: "Action name", + actionNamePlaceholder: "Summarize selection", + systemPrompt: "System prompt", + systemPromptDesc: "Optional", + systemPromptPlaceholder: "You are a helpful assistant.", + prompt: "Prompt", + promptDesc: 'Please read about
Prompt templating
if you want to customize
your resulting prompts', + replaceSelected: "Replace selected text", + replaceSelectedDesc: "If checked, the highlighted text will be replaced with a response from the model.", + remove: "Remove", + close: "Close", + save: "Save", + actionsList: "Actions list", + changeOrder: "Change order", + done: "Done", + advancedSettings: "Advanced settings", + advancedSettingsDesc: "\u2728 Enhanced Actions (RAG), Reset all actions", + enhancedActions: "Enhanced Actions", + enhancedActionsLabel: "RAG context", + enhancedActionsDesc: "More context can improve answer quality for powerful models, but may reduce quality for weaker ones. Larger context also consumes more tokens and increases request cost for paid models.", + contextLimitLocal: "Local models", + contextLimitCloud: "Cloud models", + contextLimitAdvanced: "Top: GPT, Claude, Gemini", + contextLimitMax: "No limits (danger)", + dangerZone: "Danger zone", + resetActions: "Reset actions", + resetActionsDesc: "\u{1F6A8} Reset all actions to the default. This cannot be undone and will delete all your custom actions.", + reset: "Reset", + confirmReset: "Confirm reset" + } +}; + +// src/i18n/ru.json +var ru_default = { + commands: { + showContextMenu: "\u041F\u043E\u043A\u0430\u0437\u0430\u0442\u044C \u043A\u043E\u043D\u0442\u0435\u043A\u0441\u0442\u043D\u043E\u0435 \u043C\u0435\u043D\u044E", + actionPalette: { + name: "\u041F\u0430\u043B\u0438\u0442\u0440\u0430 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439", + placeholder: "\u0412\u0430\u0448 \u043F\u0440\u043E\u043C\u043F\u0442... | Enter: \u043E\u0442\u043F\u0440\u0430\u0432\u0438\u0442\u044C, Esc: \u043E\u0442\u043C\u0435\u043D\u0430" + } + }, + statusBar: { + enhancing: "\u2728 \u0423\u043B\u0443\u0447\u0448\u0435\u043D\u0438\u0435", + enhancingWithProgress: "\u2728 \u0423\u043B\u0443\u0447\u0448\u0435\u043D\u0438\u0435 {{percent}}%" + }, + notices: { + errorGenerating: "\u041E\u0448\u0438\u0431\u043A\u0430 \u0433\u0435\u043D\u0435\u0440\u0430\u0446\u0438\u0438 \u0442\u0435\u043A\u0441\u0442\u0430: {{message}}", + errorProcessingRag: "\u041E\u0448\u0438\u0431\u043A\u0430 \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u043A\u0438 \u0441\u0432\u044F\u0437\u0430\u043D\u043D\u044B\u0445 \u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u043E\u0432: {{message}}. \u041F\u0440\u043E\u0434\u043E\u043B\u0436\u0430\u044E \u0441 \u0438\u0441\u0445\u043E\u0434\u043D\u044B\u043C \u0442\u0435\u043A\u0441\u0442\u043E\u043C.", + importantUpdate: "\uFE0F\u{1F6A8} \u0412\u0410\u0416\u041D\u041E! \u041E\u0431\u043D\u043E\u0432\u0438\u0442\u0435 \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438 Local GPT!", + newVersion: "\u2B06\uFE0F Local GPT: \u0434\u043E\u0441\u0442\u0443\u043F\u043D\u0430 \u043D\u043E\u0432\u0430\u044F \u0432\u0435\u0440\u0441\u0438\u044F", + actionNameRequired: "\u041F\u043E\u0436\u0430\u043B\u0443\u0439\u0441\u0442\u0430, \u0432\u0432\u0435\u0434\u0438\u0442\u0435 \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u0434\u043B\u044F \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044F.", + actionNameExists: "\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0441 \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u0435\u043C \xAB{{name}}\xBB \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442.", + actionRewritten: "\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \xAB{{name}}\xBB \u043F\u0435\u0440\u0435\u0437\u0430\u043F\u0438\u0441\u0430\u043D\u043E", + actionAdded: "\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \xAB{{name}}\xBB \u0434\u043E\u0431\u0430\u0432\u043B\u0435\u043D\u043E", + copied: "\u0421\u043A\u043E\u043F\u0438\u0440\u043E\u0432\u0430\u043D\u043E" + }, + settings: { + mainProvider: "\u041E\u0441\u043D\u043E\u0432\u043D\u043E\u0439 AI-\u043F\u0440\u043E\u0432\u0430\u0439\u0434\u0435\u0440", + embeddingProvider: "\u041F\u0440\u043E\u0432\u0430\u0439\u0434\u0435\u0440 \u0434\u043B\u044F \u044D\u043C\u0431\u0435\u0434\u0434\u0438\u043D\u0433\u043E\u0432", + embeddingProviderDesc: "\u041E\u043F\u0446\u0438\u043E\u043D\u0430\u043B\u044C\u043D\u043E. \u0418\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0435\u0442\u0441\u044F \u0434\u043B\u044F \u2728\xA0\u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043D\u043D\u044B\u0445\xA0\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439.", + visionProvider: "\u041F\u0440\u043E\u0432\u0430\u0439\u0434\u0435\u0440 \u0434\u043B\u044F \u0438\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0439", + visionProviderDesc: "\u041E\u043F\u0446\u0438\u043E\u043D\u0430\u043B\u044C\u043D\u043E. \u0418\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0435\u0442\u0441\u044F \u0434\u043B\u044F \u0440\u0430\u0431\u043E\u0442\u044B \u0441 \u0438\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u044F\u043C\u0438. \u0415\u0441\u043B\u0438 \u043D\u0435 \u0432\u044B\u0431\u0440\u0430\u043D, \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D \u043E\u0441\u043D\u043E\u0432\u043D\u043E\u0439 AI-\u043F\u0440\u043E\u0432\u0430\u0439\u0434\u0435\u0440.", + creativity: "\u041A\u0440\u0435\u0430\u0442\u0438\u0432\u043D\u043E\u0441\u0442\u044C", + creativityNone: "\u26AA \u041E\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442", + creativityLow: "\uFE0F\u{1F4A1} \u041D\u0438\u0437\u043A\u0430\u044F", + creativityMedium: "\u{1F3A8} \u0421\u0440\u0435\u0434\u043D\u044F\u044F", + creativityHigh: "\u{1F680} \u0412\u044B\u0441\u043E\u043A\u0430\u044F", + actions: "\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u044F", + quickAdd: "\u0411\u044B\u0441\u0442\u0440\u043E\u0435 \u0434\u043E\u0431\u0430\u0432\u043B\u0435\u043D\u0438\u0435", + quickAddPlaceholder: "\u0412\u0441\u0442\u0430\u0432\u044C\u0442\u0435 \u0433\u043E\u0442\u043E\u0432\u043E\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435", + quickAddDesc: '\u0412\u044B \u043C\u043E\u0436\u0435\u0442\u0435 \u043F\u043E\u0434\u0435\u043B\u0438\u0442\u044C\u0441\u044F \u0441\u0432\u043E\u0438\u043C\u0438 \u043D\u0430\u0431\u043E\u0440\u0430\u043C\u0438 \u043F\u0440\u043E\u043C\u043F\u0442\u043E\u0432 \u0438\u043B\u0438 \u043D\u0430\u0439\u0442\u0438 \u043D\u043E\u0432\u044B\u0435 \u0432 \u0441\u043E\u043E\u0431\u0449\u0435\u0441\u0442\u0432\u0435.
\u0412\u0430\u0436\u043D\u043E: \u0435\u0441\u043B\u0438 \u0443 \u0432\u0430\u0441 \u0443\u0436\u0435 \u0435\u0441\u0442\u044C \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0441 \u0442\u0430\u043A\u0438\u043C \u0436\u0435 \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u0435\u043C, \u043E\u043D\u043E \u0431\u0443\u0434\u0435\u0442 \u043F\u0435\u0440\u0435\u0437\u0430\u043F\u0438\u0441\u0430\u043D\u043E.', + addNewManually: "\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u0432\u0440\u0443\u0447\u043D\u0443\u044E", + actionName: "\u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044F", + actionNamePlaceholder: "\u041A\u0440\u0430\u0442\u043A\u043E \u043F\u0435\u0440\u0435\u0441\u043A\u0430\u0437\u0430\u0442\u044C \u0432\u044B\u0434\u0435\u043B\u0435\u043D\u043D\u043E\u0435", + systemPrompt: "\u0421\u0438\u0441\u0442\u0435\u043C\u043D\u0430\u044F \u0438\u043D\u0441\u0442\u0440\u0443\u043A\u0446\u0438\u044F", + systemPromptDesc: "\u041E\u043F\u0446\u0438\u043E\u043D\u0430\u043B\u044C\u043D\u043E", + systemPromptPlaceholder: "\u0412\u044B \u2014 \u043F\u043E\u043B\u0435\u0437\u043D\u044B\u0439 \u0430\u0441\u0441\u0438\u0441\u0442\u0435\u043D\u0442.", + prompt: "\u041F\u0440\u043E\u043C\u043F\u0442", + promptDesc: '\u0423\u0437\u043D\u0430\u0439\u0442\u0435 \u0431\u043E\u043B\u044C\u0448\u0435 \u043E \u0448\u0430\u0431\u043B\u043E\u043D\u0438\u0437\u0430\u0446\u0438\u0438 \u043F\u0440\u043E\u043C\u043F\u0442\u043E\u0432, \u0447\u0442\u043E\u0431\u044B \u043D\u0430\u0441\u0442\u0440\u043E\u0438\u0442\u044C \u0438\u0445 \u043F\u043E\u0434 \u0441\u0435\u0431\u044F.', + replaceSelected: "\u0417\u0430\u043C\u0435\u043D\u044F\u0442\u044C \u0432\u044B\u0434\u0435\u043B\u0435\u043D\u043D\u044B\u0439 \u0442\u0435\u043A\u0441\u0442", + replaceSelectedDesc: "\u0415\u0441\u043B\u0438 \u043E\u043F\u0446\u0438\u044F \u0432\u043A\u043B\u044E\u0447\u0435\u043D\u0430, \u0432\u044B\u0434\u0435\u043B\u0435\u043D\u043D\u044B\u0439 \u0442\u0435\u043A\u0441\u0442 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043C\u0435\u043D\u0451\u043D \u043E\u0442\u0432\u0435\u0442\u043E\u043C \u043E\u0442 \u043C\u043E\u0434\u0435\u043B\u0438.", + remove: "\u0423\u0434\u0430\u043B\u0438\u0442\u044C", + close: "\u0417\u0430\u043A\u0440\u044B\u0442\u044C", + save: "\u0421\u043E\u0445\u0440\u0430\u043D\u0438\u0442\u044C", + actionsList: "\u0421\u043F\u0438\u0441\u043E\u043A \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439", + changeOrder: "\u0418\u0437\u043C\u0435\u043D\u0438\u0442\u044C \u043F\u043E\u0440\u044F\u0434\u043E\u043A", + done: "\u0413\u043E\u0442\u043E\u0432\u043E", + advancedSettings: "\u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043D\u043D\u044B\u0435 \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438", + advancedSettingsDesc: "\u2728 \u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043D\u043D\u044B\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044F (RAG), \u0421\u0431\u0440\u043E\u0441 \u0432\u0441\u0435\u0445 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439", + enhancedActions: "\u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043D\u043D\u044B\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044F", + enhancedActionsLabel: "RAG\u2011\u043A\u043E\u043D\u0442\u0435\u043A\u0441\u0442", + enhancedActionsDesc: "\u0427\u0435\u043C \u0431\u043E\u043B\u044C\u0448\u0435 \u043A\u043E\u043D\u0442\u0435\u043A\u0441\u0442 \u2014 \u0442\u0435\u043C \u0432\u044B\u0448\u0435 \u043A\u0430\u0447\u0435\u0441\u0442\u0432\u043E \u043E\u0442\u0432\u0435\u0442\u0430 \u0443 \u043C\u043E\u0449\u043D\u044B\u0445 \u043C\u043E\u0434\u0435\u043B\u0435\u0439, \u043D\u043E \u043D\u0438\u0436\u0435 \u043A\u0430\u0447\u0435\u0441\u0442\u0432\u043E \u0443 \u0441\u043B\u0430\u0431\u044B\u0445. \u0411\u043E\u043B\u044C\u0448\u043E\u0439 \u043A\u043E\u043D\u0442\u0435\u043A\u0441\u0442 \u0442\u0430\u043A\u0436\u0435 \u0440\u0430\u0441\u0445\u043E\u0434\u0443\u0435\u0442 \u0431\u043E\u043B\u044C\u0448\u0435 \u0442\u043E\u043A\u0435\u043D\u043E\u0432 \u0438 \u0443\u0432\u0435\u043B\u0438\u0447\u0438\u0432\u0430\u0435\u0442 \u0441\u0442\u043E\u0438\u043C\u043E\u0441\u0442\u044C \u0437\u0430\u043F\u0440\u043E\u0441\u0430 \u0434\u043B\u044F \u043F\u043B\u0430\u0442\u043D\u044B\u0445 \u043C\u043E\u0434\u0435\u043B\u0435\u0439.", + contextLimitLocal: "\u041B\u043E\u043A\u0430\u043B\u044C\u043D\u044B\u0435 \u043C\u043E\u0434\u0435\u043B\u0438", + contextLimitCloud: "\u041E\u0431\u043B\u0430\u0447\u043D\u044B\u0435 \u043C\u043E\u0434\u0435\u043B\u0438", + contextLimitAdvanced: "\u0422\u043E\u043F: GPT, Claude, Gemini", + contextLimitMax: "\u0411\u0435\u0437 \u043E\u0433\u0440\u0430\u043D\u0438\u0447\u0435\u043D\u0438\u0439 (\u043E\u043F\u0430\u0441\u043D\u043E)", + dangerZone: "\u041E\u043F\u0430\u0441\u043D\u0430\u044F \u0437\u043E\u043D\u0430", + resetActions: "\u0421\u0431\u0440\u043E\u0441\u0438\u0442\u044C \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044F", + resetActionsDesc: "\u{1F6A8} \u0421\u0431\u0440\u043E\u0441\u0438\u0442\u044C \u0432\u0441\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044F \u0434\u043E \u0441\u0442\u0430\u043D\u0434\u0430\u0440\u0442\u043D\u044B\u0445. \u042D\u0442\u043E \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u043D\u0435\u043E\u0431\u0440\u0430\u0442\u0438\u043C\u043E \u0438 \u0443\u0434\u0430\u043B\u0438\u0442 \u0432\u0441\u0435 \u0432\u0430\u0448\u0438 \u043A\u0430\u0441\u0442\u043E\u043C\u043D\u044B\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044F.", + reset: "\u0421\u0431\u0440\u043E\u0441\u0438\u0442\u044C", + confirmReset: "\u041F\u043E\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u044C \u0441\u0431\u0440\u043E\u0441" + } +}; + +// src/i18n/zh.json +var zh_default = { + commands: { + showContextMenu: "\u663E\u793A\u4E0A\u4E0B\u6587\u83DC\u5355", + actionPalette: { + name: "\u52A8\u4F5C\u9762\u677F", + placeholder: "\u60A8\u7684\u63D0\u793A... | Enter: \u53D1\u9001, Esc: \u53D6\u6D88" + } + }, + statusBar: { + enhancing: "\u2728 \u589E\u5F3A\u4E2D", + enhancingWithProgress: "\u2728 \u589E\u5F3A\u4E2D {{percent}}%" + }, + notices: { + errorGenerating: "\u751F\u6210\u6587\u672C\u65F6\u51FA\u9519: {{message}}", + errorProcessingRag: "\u5904\u7406\u76F8\u5173\u6587\u6863\u65F6\u51FA\u9519: {{message}}\u3002\u5C06\u7EE7\u7EED\u4F7F\u7528\u539F\u59CB\u6587\u672C\u3002", + importantUpdate: "\uFE0F\u{1F6A8} \u91CD\u8981\u63D0\u793A\uFF01\u8BF7\u66F4\u65B0 Local GPT \u8BBE\u7F6E\uFF01", + newVersion: "\u2B06\uFE0F Local GPT: \u65B0\u7248\u672C\u53EF\u7528", + actionNameRequired: "\u8BF7\u8F93\u5165\u64CD\u4F5C\u540D\u79F0\u3002", + actionNameExists: '\u540D\u4E3A"{{name}}"\u7684\u64CD\u4F5C\u5DF2\u5B58\u5728\u3002', + actionRewritten: '\u5DF2\u91CD\u5199\u64CD\u4F5C"{{name}}"', + actionAdded: '\u5DF2\u6DFB\u52A0\u64CD\u4F5C"{{name}}"', + copied: "\u5DF2\u590D\u5236" + }, + settings: { + mainProvider: "\u4E3B\u8981AI\u63D0\u4F9B\u5546", + embeddingProvider: "\u5D4C\u5165AI\u63D0\u4F9B\u5546", + embeddingProviderDesc: "\u53EF\u9009\u3002\u7528\u4E8E\u2728\u589E\u5F3A\u64CD\u4F5C\u3002", + visionProvider: "\u89C6\u89C9AI\u63D0\u4F9B\u5546", + visionProviderDesc: "\u53EF\u9009\u3002\u6B64\u9009\u9879\u7528\u4E8E\u56FE\u7247\u3002\u5982\u679C\u672A\u8BBE\u7F6E\uFF0C\u5C06\u4F7F\u7528\u4E3B\u8981\u7684AI\u63D0\u4F9B\u5546\u3002", + creativity: "\u521B\u9020\u529B", + creativityNone: "\u26AA \u65E0", + creativityLow: "\uFE0F\u{1F4A1} \u4F4E", + creativityMedium: "\u{1F3A8} \u4E2D", + creativityHigh: "\u{1F680} \u9AD8", + actions: "\u64CD\u4F5C", + quickAdd: "\u5FEB\u901F\u6DFB\u52A0", + quickAddPlaceholder: "\u7C98\u8D34\u64CD\u4F5C", + quickAddDesc: '\u60A8\u53EF\u4EE5\u5206\u4EAB\u6700\u4F73\u7684\u63D0\u793A\u96C6\uFF0C\u6216\u4ECE\u793E\u533A\u83B7\u53D6\u4E00\u4E2A\u3002
\u91CD\u8981\u63D0\u793A: \u5982\u679C\u60A8\u5DF2\u7ECF\u6709\u4E00\u4E2A\u540C\u540D\u64CD\u4F5C\uFF0C\u5B83\u5C06\u88AB\u8986\u76D6\u3002', + addNewManually: "\u624B\u52A8\u6DFB\u52A0", + actionName: "\u64CD\u4F5C\u540D\u79F0", + actionNamePlaceholder: "\u603B\u7ED3\u9009\u62E9", + systemPrompt: "\u7CFB\u7EDF\u63D0\u793A", + systemPromptDesc: "\u53EF\u9009", + systemPromptPlaceholder: "\u4F60\u662F\u4E00\u4E2A\u4E50\u4E8E\u52A9\u4EBA\u7684\u52A9\u624B\u3002", + prompt: "\u63D0\u793A", + promptDesc: '\u5982\u679C\u60A8\u60F3\u81EA\u5B9A\u4E49
\u60A8\u7684\u7ED3\u679C\u63D0\u793A\uFF0C
\u8BF7\u9605\u8BFB\u63D0\u793A\u6A21\u677F', + replaceSelected: "\u66FF\u6362\u9009\u5B9A\u7684\u6587\u672C", + replaceSelectedDesc: "\u5982\u679C\u9009\u4E2D\uFF0C\u7A81\u51FA\u663E\u793A\u7684\u6587\u672C\u5C06\u88AB\u6A21\u578B\u7684\u54CD\u5E94\u66FF\u6362\u3002", + remove: "\u5220\u9664", + close: "\u5173\u95ED", + save: "\u4FDD\u5B58", + actionsList: "\u64CD\u4F5C\u5217\u8868", + changeOrder: "\u66F4\u6539\u987A\u5E8F", + done: "\u5B8C\u6210", + advancedSettings: "\u9AD8\u7EA7\u8BBE\u7F6E", + advancedSettingsDesc: "\u2728 \u589E\u5F3A\u64CD\u4F5C\uFF08RAG\uFF09\u3001\u91CD\u7F6E\u6240\u6709\u64CD\u4F5C", + enhancedActions: "\u589E\u5F3A\u64CD\u4F5C", + enhancedActionsLabel: "RAG \u4E0A\u4E0B\u6587", + enhancedActionsDesc: "\u66F4\u591A\u4E0A\u4E0B\u6587\u53EF\u63D0\u5347\u5F3A\u5927\u6A21\u578B\u7684\u7B54\u6848\u8D28\u91CF\uFF0C\u4F46\u53EF\u80FD\u964D\u4F4E\u8F83\u5F31\u6A21\u578B\u7684\u8D28\u91CF\u3002\u66F4\u5927\u7684\u4E0A\u4E0B\u6587\u4E5F\u4F1A\u6D88\u8017\u66F4\u591A Token\uFF0C\u5E76\u63D0\u9AD8\u6BCF\u6B21\u8BF7\u6C42\u6210\u672C\uFF08\u5BF9\u4ED8\u8D39\u6A21\u578B\u800C\u8A00\uFF09\u3002", + contextLimitLocal: "\u672C\u5730\u6A21\u578B", + contextLimitCloud: "\u4E91\u7AEF\u6A21\u578B", + contextLimitAdvanced: "\u9876\u7EA7\uFF1AGPT\u3001Claude\u3001Gemini", + contextLimitMax: "\u65E0\u9650\u5236\uFF08\u6CE8\u610F\uFF09", + dangerZone: "\u5371\u9669\u533A\u57DF", + resetActions: "\u91CD\u7F6E\u64CD\u4F5C", + resetActionsDesc: "\u{1F6A8} \u5C06\u6240\u6709\u64CD\u4F5C\u91CD\u7F6E\u4E3A\u9ED8\u8BA4\u503C\u3002\u6B64\u64CD\u4F5C\u65E0\u6CD5\u64A4\u9500\uFF0C\u5E76\u5C06\u5220\u9664\u6240\u6709\u60A8\u7684\u81EA\u5B9A\u4E49\u64CD\u4F5C\u3002", + reset: "\u91CD\u7F6E", + confirmReset: "\u786E\u8BA4\u91CD\u7F6E" + } +}; + +// src/logger.ts +var Logger = class { + constructor() { + this.logLevel = 0 /* DEBUG */; + this.timers = /* @__PURE__ */ new Map(); + this.colorIndex = 0; + this.colors = [ + "#FFB3BA", + "#BAFFC9", + "#BAE1FF", + "#FFFFBA", + "#FFDFBA", + "#E0BBE4" + ]; + this.isDevMode = false; + } + static getInstance() { + if (!Logger.instance) { + Logger.instance = new Logger(); + } + return Logger.instance; + } + setLogLevel(level) { + this.logLevel = level; + } + logWithEmoji(level, message, ...args) { + if (this.isDevMode && level >= this.logLevel) { + const emoji = this.getEmojiForLevel(level); + if (args.length === 0) { + console.log(`${emoji} %c${message}`, "font-weight: bold;"); + } else { + console.group(`${emoji} %c${message}`, "font-weight: bold;"); + this.logArgs(args); + console.groupEnd(); + } + } + } + logArgs(args) { + args.forEach((arg) => { + console.log(arg); + }); + } + getEmojiForLevel(level) { + switch (level) { + case 0 /* DEBUG */: + return "\u{1F41B}"; + case 1 /* INFO */: + return "\u2139\uFE0F"; + case 2 /* WARN */: + return "\u26A0\uFE0F"; + case 3 /* ERROR */: + return "\u{1F6AB}"; + case 4 /* SUCCESS */: + return "\u2705"; + default: + return ""; + } + } + debug(message, ...args) { + this.logWithEmoji(0 /* DEBUG */, message, ...args); + } + info(message, ...args) { + this.logWithEmoji(1 /* INFO */, message, ...args); + } + warn(message, ...args) { + this.logWithEmoji(2 /* WARN */, message, ...args); + } + error(message, ...args) { + this.logWithEmoji(3 /* ERROR */, message, ...args); + } + success(message, ...args) { + this.logWithEmoji(4 /* SUCCESS */, message, ...args); + } + table(message, ...args) { + if (this.isDevMode && this.logLevel <= 0 /* DEBUG */) { + console.group(`\u{1F4CA} %c${message}`, "font-weight: bold;"); + this.logNestedGroups(args); + console.groupEnd(); + } + } + logNestedGroups(args) { + args.forEach((arg) => { + if (typeof arg === "object" && arg !== null) { + this.logObjectAsGroups(arg); + } else { + console.log(arg); + } + }); + } + logObjectAsGroups(obj) { + Object.entries(obj).forEach(([key, value]) => { + if (typeof value === "object" && value !== null) { + console.group(`${key}:`); + this.logObjectAsGroups(value); + console.groupEnd(); + } else { + console.log(`${key}: ${value}`); + } + }); + } + time(label) { + if (this.isDevMode && this.logLevel <= 0 /* DEBUG */) { + const color = this.getNextColor(); + this.timers.set(label, { startTime: performance.now(), color }); + console.log( + `\u23F1\uFE0F %c${label}: timer started`, + `color: black; font-weight: bold; background-color: ${color}; padding: 2px 5px; border-radius: 3px;` + ); + } + } + timeEnd(label) { + if (this.isDevMode && this.logLevel <= 0 /* DEBUG */) { + const timerData = this.timers.get(label); + if (timerData) { + const duration = performance.now() - timerData.startTime; + console.log( + `\u23F1\uFE0F %c${label}: ${duration.toFixed(2)}ms`, + `color: black; font-weight: bold; background-color: ${timerData.color}; padding: 2px 5px; border-radius: 3px;` + ); + this.timers.delete(label); + } else { + console.warn(`Timer '${label}' does not exist`); + } + } + } + getNextColor() { + const color = this.colors[this.colorIndex]; + this.colorIndex = (this.colorIndex + 1) % this.colors.length; + return color; + } + // Добавляем новый метод для создания разделителя + separator(message = "") { + if (this.isDevMode) { + const lineLength = 20; + const line = "\u2501".repeat(lineLength); + const paddedMessage = message ? ` ${message} ` : ""; + const leftPadding = Math.floor( + (lineLength - paddedMessage.length) / 2 + ); + const rightPadding = lineLength - paddedMessage.length - leftPadding; + const separatorLine = message ? line.slice(0, leftPadding) + paddedMessage + line.slice(lineLength - rightPadding) : line; + console.log( + "\n%c" + separatorLine, + "color: #FF4500; font-weight: bold; font-size: 1.2em;" + ); + } + } +}; +var logger = Logger.getInstance(); + +// src/i18n/index.ts +var locales = { + en: en_default, + ru: ru_default, + de: de_default, + zh: zh_default +}; +var I18n = class { + static t(key, params) { + const locale = window.localStorage.getItem("language") || "en"; + const keys = key.split("."); + let translations = locales[locale] || locales["en"]; + for (const k of keys) { + if ((translations == null ? void 0 : translations[k]) === void 0) { + logger.warn(`Translation missing: ${key}`); + translations = locales["en"]; + let engValue = translations; + for (const ek of keys) { + engValue = engValue == null ? void 0 : engValue[ek]; + } + return engValue || key; + } + translations = translations[k]; + } + let result = translations; + if (params) { + Object.entries(params).forEach(([key2, value]) => { + result = result.replace(`{{${key2}}}`, value); + }); + } + return result; + } +}; + +// src/LocalGPTSettingTab.ts +var SEPARATOR = "\u2702\uFE0F"; +function escapeTitle(title) { + if (!title) { + return ""; + } + return title.replace(/&/g, "&").replace(//g, ">").replace(/"/g, """).replace(/'/g, "'"); +} +var LocalGPTSettingTab = class extends import_obsidian.PluginSettingTab { + constructor(app, plugin) { + super(app, plugin); + this.editEnabled = false; + this.modelsOptions = {}; + this.changingOrder = false; + // Controls visibility of the Advanced settings section + this.isAdvancedMode = false; + // Guard to require a second click before destructive reset + this.isConfirmingReset = false; + this.plugin = plugin; + } + async display() { + const { containerEl } = this; + containerEl.empty(); + try { + const aiProvidersWaiter = await (0, import_sdk.waitForAI)(); + const aiProvidersResponse = await aiProvidersWaiter.promise; + const providers = aiProvidersResponse.providers.reduce( + (acc, provider) => ({ + ...acc, + [provider.id]: provider.model ? [provider.name, provider.model].join(" ~ ") : provider.name + }), + { + "": "" + } + ); + new import_obsidian.Setting(containerEl).setHeading().setName(I18n.t("settings.mainProvider")).setClass("ai-providers-select").addDropdown( + (dropdown) => dropdown.addOptions(providers).setValue(String(this.plugin.settings.aiProviders.main)).onChange(async (value) => { + this.plugin.settings.aiProviders.main = value; + await this.plugin.saveSettings(); + await this.display(); + }) + ); + new import_obsidian.Setting(containerEl).setName(I18n.t("settings.embeddingProvider")).setDesc(I18n.t("settings.embeddingProviderDesc")).setClass("ai-providers-select").addDropdown( + (dropdown) => dropdown.addOptions(providers).setValue( + String(this.plugin.settings.aiProviders.embedding) + ).onChange(async (value) => { + this.plugin.settings.aiProviders.embedding = value; + await this.plugin.saveSettings(); + await this.display(); + }) + ); + new import_obsidian.Setting(containerEl).setName(I18n.t("settings.visionProvider")).setClass("ai-providers-select").setDesc(I18n.t("settings.visionProviderDesc")).addDropdown( + (dropdown) => dropdown.addOptions(providers).setValue( + String(this.plugin.settings.aiProviders.vision) + ).onChange(async (value) => { + this.plugin.settings.aiProviders.vision = value; + await this.plugin.saveSettings(); + await this.display(); + }) + ); + new import_obsidian.Setting(containerEl).setName(I18n.t("settings.creativity")).setDesc("").addDropdown((dropdown) => { + dropdown.addOption("", I18n.t("settings.creativityNone")).addOptions({ + low: I18n.t("settings.creativityLow"), + medium: I18n.t("settings.creativityMedium"), + high: I18n.t("settings.creativityHigh") + }).setValue( + String(this.plugin.settings.defaults.creativity) || "" + ).onChange(async (value) => { + this.plugin.settings.defaults.creativity = value; + await this.plugin.saveSettings(); + await this.display(); + }); + }); + } catch (error) { + console.error(error); + } + const editingAction = this.editExistingAction || { + name: "", + prompt: "", + temperature: void 0, + system: "", + replace: false + }; + const sharingActionsMapping = { + name: "Name: ", + system: "System: ", + prompt: "Prompt: ", + replace: "Replace: ", + model: "Model: " + }; + containerEl.createEl("div", { cls: "local-gpt-settings-separator" }); + containerEl.createEl("h3", { text: I18n.t("settings.actions") }); + if (!this.editEnabled) { + const quickAdd = new import_obsidian.Setting(containerEl).setName(I18n.t("settings.quickAdd")).setDesc("").addText((text2) => { + text2.inputEl.style.minWidth = "100%"; + text2.setPlaceholder(I18n.t("settings.quickAddPlaceholder")); + text2.onChange(async (value) => { + const quickAddAction = value.split(SEPARATOR).map((part) => part.trim()).reduce((acc, part) => { + const foundMatchKey = Object.keys( + sharingActionsMapping + ).find((key) => { + return part.startsWith( + sharingActionsMapping[key] + ); + }); + if (foundMatchKey) { + acc[foundMatchKey] = part.substring( + sharingActionsMapping[foundMatchKey].length, + part.length + ); + } + return acc; + }, {}); + if (quickAddAction.name) { + await this.addNewAction(quickAddAction); + text2.setValue(""); + this.display(); + } + }); + }); + quickAdd.descEl.innerHTML = I18n.t("settings.quickAddDesc"); + new import_obsidian.Setting(containerEl).setName(I18n.t("settings.addNewManually")).addButton( + (button) => button.setIcon("plus").onClick(async () => { + this.editEnabled = true; + this.editExistingAction = void 0; + this.display(); + }) + ); + } else { + new import_obsidian.Setting(containerEl).setName(I18n.t("settings.actionName")).addText((text2) => { + (editingAction == null ? void 0 : editingAction.name) && text2.setValue(editingAction.name); + text2.inputEl.style.minWidth = "100%"; + text2.setPlaceholder( + I18n.t("settings.actionNamePlaceholder") + ); + text2.onChange(async (value) => { + editingAction.name = value; + }); + }); + new import_obsidian.Setting(containerEl).setName(I18n.t("settings.systemPrompt")).setDesc(I18n.t("settings.systemPromptDesc")).addTextArea((text2) => { + (editingAction == null ? void 0 : editingAction.system) && text2.setValue(editingAction.system); + text2.inputEl.style.minWidth = "100%"; + text2.inputEl.style.minHeight = "6em"; + text2.inputEl.style.resize = "vertical"; + text2.setPlaceholder( + I18n.t("settings.systemPromptPlaceholder") + ); + text2.onChange(async (value) => { + editingAction.system = value; + }); + }); + const promptSetting = new import_obsidian.Setting(containerEl).setName(I18n.t("settings.prompt")).setDesc("").addTextArea((text2) => { + (editingAction == null ? void 0 : editingAction.prompt) && text2.setValue(editingAction.prompt); + text2.inputEl.style.minWidth = "100%"; + text2.inputEl.style.minHeight = "6em"; + text2.inputEl.style.resize = "vertical"; + text2.setPlaceholder(""); + text2.onChange(async (value) => { + editingAction.prompt = value; + }); + }); + promptSetting.descEl.innerHTML = I18n.t("settings.promptDesc"); + new import_obsidian.Setting(containerEl).setName(I18n.t("settings.replaceSelected")).setDesc(I18n.t("settings.replaceSelectedDesc")).addToggle((component) => { + (editingAction == null ? void 0 : editingAction.replace) && component.setValue(editingAction.replace); + component.onChange(async (value) => { + editingAction.replace = value; + }); + }); + const actionButtonsRow = new import_obsidian.Setting(containerEl).setName(""); + if (this.editExistingAction) { + actionButtonsRow.addButton((button) => { + button.buttonEl.style.marginRight = "2em"; + button.setButtonText(I18n.t("settings.remove")).onClick(async () => { + if (!button.buttonEl.hasClass("mod-warning")) { + button.setClass("mod-warning"); + return; + } + this.plugin.settings.actions = this.plugin.settings.actions.filter( + (innerAction) => innerAction !== editingAction + ); + await this.plugin.saveSettings(); + this.editExistingAction = void 0; + this.editEnabled = false; + this.display(); + }); + }); + } + actionButtonsRow.addButton((button) => { + button.setButtonText(I18n.t("settings.close")).onClick(async () => { + this.editEnabled = false; + this.editExistingAction = void 0; + this.display(); + }); + }).addButton( + (button) => button.setCta().setButtonText(I18n.t("settings.save")).onClick(async () => { + if (!editingAction.name) { + new import_obsidian.Notice( + I18n.t("notices.actionNameRequired") + ); + return; + } + if (!this.editExistingAction) { + if (this.plugin.settings.actions.find( + (action) => action.name === editingAction.name + )) { + new import_obsidian.Notice( + I18n.t("notices.actionNameExists", { + name: editingAction.name + }) + ); + return; + } + await this.addNewAction(editingAction); + } else { + if (this.plugin.settings.actions.filter( + (action) => action.name === editingAction.name + ).length > 1) { + new import_obsidian.Notice( + I18n.t("notices.actionNameExists", { + name: editingAction.name + }) + ); + return; + } + const index = this.plugin.settings.actions.findIndex( + (innerAction) => innerAction === editingAction + ); + this.plugin.settings.actions[index] = editingAction; + } + await this.plugin.saveSettings(); + this.editEnabled = false; + this.editExistingAction = void 0; + this.display(); + }) + ); + } + containerEl.createEl("h4", { text: I18n.t("settings.actionsList") }); + this.plugin.settings.actions.forEach((action, actionIndex) => { + const sharingString = [ + action.name && `${sharingActionsMapping.name}${action.name}`, + action.system && `${sharingActionsMapping.system}${action.system}`, + action.prompt && `${sharingActionsMapping.prompt}${action.prompt}`, + action.replace && `${sharingActionsMapping.replace}${action.replace}` + ].filter(Boolean).join(` ${SEPARATOR} +`); + if (!this.changingOrder) { + const actionRow = new import_obsidian.Setting(containerEl).setName(action.name).setDesc("").addButton( + (button) => button.setIcon("copy").onClick(async () => { + navigator.clipboard.writeText(sharingString); + new import_obsidian.Notice(I18n.t("notices.copied")); + }) + ).addButton( + (button) => button.setButtonText("Edit").onClick(async () => { + this.editEnabled = true; + this.editExistingAction = this.plugin.settings.actions.find( + (innerAction) => innerAction.name == action.name + ); + this.display(); + }) + ); + const systemTitle = escapeTitle(action.system); + const promptTitle = escapeTitle(action.prompt); + actionRow.descEl.innerHTML = [ + action.system && `
+ ${sharingActionsMapping.system}${action.system}
`, + action.prompt && `
+ ${sharingActionsMapping.prompt}${action.prompt} +
` + ].filter(Boolean).join("
\n"); + } else { + const actionRow = new import_obsidian.Setting(containerEl).setName(action.name).setDesc(""); + if (actionIndex > 0) { + actionRow.addButton( + (button) => button.setIcon("arrow-up").onClick(async () => { + const prev = this.plugin.settings.actions[actionIndex - 1]; + this.plugin.settings.actions[actionIndex - 1] = action; + this.plugin.settings.actions[actionIndex] = prev; + await this.plugin.saveSettings(); + this.display(); + }) + ); + } + if (actionIndex < this.plugin.settings.actions.length - 1) { + actionRow.addButton( + (button) => button.setIcon("arrow-down").onClick(async () => { + const next = this.plugin.settings.actions[actionIndex + 1]; + this.plugin.settings.actions[actionIndex + 1] = action; + this.plugin.settings.actions[actionIndex] = next; + await this.plugin.saveSettings(); + this.display(); + }) + ); + } + } + }); + if (this.plugin.settings.actions.length) { + new import_obsidian.Setting(containerEl).setName("").addButton((button) => { + this.changingOrder && button.setCta(); + button.setButtonText( + this.changingOrder ? I18n.t("settings.done") : I18n.t("settings.changeOrder") + ).onClick(async () => { + this.changingOrder = !this.changingOrder; + this.display(); + }); + }); + } + new import_obsidian.Setting(containerEl).setHeading().setName(I18n.t("settings.advancedSettings")).setDesc(I18n.t("settings.advancedSettingsDesc")).setClass("local-gpt-advanced-toggle").addToggle( + (toggle) => toggle.setValue(this.isAdvancedMode).onChange((value) => { + this.isAdvancedMode = value; + this.display(); + }) + ); + if (this.isAdvancedMode) { + const enhancedSection = containerEl.createDiv( + "local-gpt-advanced-group" + ); + enhancedSection.createEl("h4", { + text: I18n.t("settings.enhancedActions") + }); + new import_obsidian.Setting(enhancedSection).setName(I18n.t("settings.enhancedActionsLabel")).setDesc(I18n.t("settings.enhancedActionsDesc")).setClass("ai-providers-select").addDropdown((dropdown) => { + dropdown.addOptions({ + local: I18n.t("settings.contextLimitLocal"), + cloud: I18n.t("settings.contextLimitCloud"), + advanced: I18n.t("settings.contextLimitAdvanced"), + max: I18n.t("settings.contextLimitMax") + }).setValue( + String( + this.plugin.settings.defaults.contextLimit || "local" + ) + ).onChange(async (value) => { + this.plugin.settings.defaults.contextLimit = value; + await this.plugin.saveSettings(); + }); + }); + const dangerSection = containerEl.createDiv( + "local-gpt-advanced-group" + ); + dangerSection.createEl("h4", { + text: I18n.t("settings.dangerZone") + }); + new import_obsidian.Setting(dangerSection).setName(I18n.t("settings.resetActions")).setDesc(I18n.t("settings.resetActionsDesc")).addButton( + (button) => button.setClass("mod-warning").setButtonText(I18n.t("settings.reset")).onClick(async () => { + if (!this.isConfirmingReset) { + this.isConfirmingReset = true; + button.setButtonText( + I18n.t("settings.confirmReset") + ); + return; + } + button.setDisabled(true); + button.buttonEl.setAttribute("disabled", "true"); + button.buttonEl.classList.remove("mod-warning"); + this.plugin.settings.actions = DEFAULT_SETTINGS.actions; + await this.plugin.saveSettings(); + this.isConfirmingReset = false; + this.display(); + }) + ); + } + } + async addNewAction(editingAction) { + const alreadyExistingActionIndex = this.plugin.settings.actions.findIndex( + (action) => action.name === editingAction.name + ); + if (alreadyExistingActionIndex >= 0) { + this.plugin.settings.actions[alreadyExistingActionIndex] = editingAction; + new import_obsidian.Notice( + I18n.t("notices.actionRewritten", { name: editingAction.name }) + ); + } else { + this.plugin.settings.actions = [ + editingAction, + ...this.plugin.settings.actions + ]; + new import_obsidian.Notice( + I18n.t("notices.actionAdded", { name: editingAction.name }) + ); + } + await this.plugin.saveSettings(); + } +}; + +// src/spinnerPlugin.ts +var import_state = require("@codemirror/state"); +var import_view = require("@codemirror/view"); +var _LoaderWidget = class extends import_view.WidgetType { + toDOM(view) { + return _LoaderWidget.element.cloneNode(true); + } +}; +var LoaderWidget = _LoaderWidget; +LoaderWidget.element = document.createElement("span"); +(() => { + _LoaderWidget.element.addClasses(["local-gpt-loading", "local-gpt-dots"]); +})(); +var ThinkingWidget = class extends import_view.WidgetType { + static createDOMStructure() { + const container = document.createElement("div"); + container.addClass("local-gpt-thinking-container"); + container.appendChild(document.createElement("br")); + const textElement = document.createElement("span"); + textElement.addClass("local-gpt-thinking"); + textElement.textContent = "Thinking"; + textElement.setAttribute("data-text", "Thinking"); + container.appendChild(textElement); + return container; + } + toDOM(view) { + return ThinkingWidget.createDOMStructure(); + } +}; +var ContentWidget = class extends import_view.WidgetType { + constructor(text2) { + super(); + this.text = text2; + this.dom = null; + } + eq(other) { + return other.text === this.text; + } + updateText(newText) { + if (this.dom && this.text !== newText) { + const addedText = newText.slice(this.text.length); + this.dom.textContent = newText.slice(0, -addedText.length); + let lastSpan = this.dom.querySelector("span:last-child"); + if (!lastSpan) { + lastSpan = document.createElement("span"); + this.dom.appendChild(lastSpan); + } + lastSpan.textContent = addedText; + this.text = newText; + } + } + toDOM(view) { + if (!this.dom) { + this.dom = document.createElement("div"); + this.dom.addClass("local-gpt-content"); + this.updateText(this.text); + } + return this.dom; + } +}; +var SpinnerPlugin = class { + constructor(editorView) { + this.editorView = editorView; + this.positions = /* @__PURE__ */ new Map(); + this.decorations = import_view.Decoration.none; + } + /** + * Process text with potential tags and update UI accordingly + * + * @param text Raw text that may include tags + * @param processFunc Optional function to process the display text + * @param position Optional position to update specific spinner + * @returns void + */ + processText(text2, processFunc, position) { + const result = this.processThinkingTags(text2); + this.showThinking(result.isThinking, position); + if (result.displayText.trim()) { + const displayText = processFunc ? processFunc(result.displayText) : result.displayText; + this.updateContent(displayText, position); + } + } + /** + * Process text with potential tags + * + * @param text Raw text that may contain tags + * @returns Object with parsed thinking state and display text + */ + processThinkingTags(text2) { + if (!text2.startsWith("")) { + return { + isThinking: false, + displayText: text2 + }; + } + const thinkingMatch = text2.match( + /^([\s\S]*?)(<\/think>\s*([\s\S]*))?$/ + ); + if (!thinkingMatch) { + return { + isThinking: true, + displayText: "" + // No display text while in thinking mode + }; + } + if (thinkingMatch[2]) { + const afterThinkTag = thinkingMatch[3] || ""; + return { + isThinking: false, + displayText: afterThinkTag + }; + } + return { + isThinking: true, + displayText: "" + // No display text while in thinking mode + }; + } + show(position) { + const isEndOfLine = this.isPositionAtEndOfLine( + this.editorView.state, + position + ); + this.positions.set(position, { + isEndOfLine, + widget: new LoaderWidget(), + isThinking: false + }); + this.updateDecorations(); + return () => this.hide(position); + } + hide(position) { + this.positions.delete(position); + this.updateDecorations(); + } + showThinking(enabled, position) { + let updated = false; + const updatePosition = (data) => { + if (enabled && !data.isThinking) { + data.widget = new ThinkingWidget(); + data.isThinking = true; + updated = true; + } else if (!enabled && data.isThinking) { + data.widget = new LoaderWidget(); + data.isThinking = false; + updated = true; + } + }; + if (position !== void 0) { + const data = this.positions.get(position); + if (data) + updatePosition(data); + } else { + this.positions.forEach(updatePosition); + } + if (updated) { + this.updateDecorations(); + } + } + updateContent(text2, position) { + let updated = false; + const updatePosition = (data) => { + if (data.isThinking) + return; + if (data.widget instanceof LoaderWidget) { + data.widget = new ContentWidget(text2); + updated = true; + } else if (data.widget instanceof ContentWidget) { + data.widget.updateText(text2); + updated = true; + } + }; + if (position !== void 0) { + const data = this.positions.get(position); + if (data) + updatePosition(data); + } else { + this.positions.forEach(updatePosition); + } + if (updated) { + this.updateDecorations(); + } + } + update(update2) { + if (update2.docChanged || update2.viewportChanged) { + this.updateDecorations(); + } + } + updateDecorations() { + const builder = new import_state.RangeSetBuilder(); + this.positions.forEach((data, position) => { + builder.add( + position, + position, + import_view.Decoration.widget({ + widget: data.widget, + side: data.isEndOfLine ? 1 : -1 + }) + ); + }); + this.decorations = builder.finish(); + this.editorView.requestMeasure(); + } + isPositionAtEndOfLine(state, position) { + return position === state.doc.lineAt(position).to; + } +}; +var spinnerPlugin = import_view.ViewPlugin.fromClass(SpinnerPlugin, { + decorations: (v) => v.decorations +}); + +// src/ui/actionPalettePlugin.ts +var import_state2 = require("@codemirror/state"); +var import_view2 = require("@codemirror/view"); + +// node_modules/svelte/src/runtime/internal/utils.js +function noop() { +} +function run(fn) { + return fn(); +} +function blank_object() { + return /* @__PURE__ */ Object.create(null); +} +function run_all(fns) { + fns.forEach(run); +} +function is_function(thing) { + return typeof thing === "function"; +} +function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || a && typeof a === "object" || typeof a === "function"; +} +function is_empty(obj) { + return Object.keys(obj).length === 0; +} + +// node_modules/svelte/src/runtime/internal/globals.js +var globals = typeof window !== "undefined" ? window : typeof globalThis !== "undefined" ? globalThis : ( + // @ts-ignore Node typings have this + global +); + +// node_modules/svelte/src/runtime/internal/ResizeObserverSingleton.js +var ResizeObserverSingleton = class { + /** @param {ResizeObserverOptions} options */ + constructor(options) { + /** + * @private + * @readonly + * @type {WeakMap} + */ + __publicField(this, "_listeners", "WeakMap" in globals ? /* @__PURE__ */ new WeakMap() : void 0); + /** + * @private + * @type {ResizeObserver} + */ + __publicField(this, "_observer"); + /** @type {ResizeObserverOptions} */ + __publicField(this, "options"); + this.options = options; + } + /** + * @param {Element} element + * @param {import('./private.js').Listener} listener + * @returns {() => void} + */ + observe(element2, listener) { + this._listeners.set(element2, listener); + this._getObserver().observe(element2, this.options); + return () => { + this._listeners.delete(element2); + this._observer.unobserve(element2); + }; + } + /** + * @private + */ + _getObserver() { + var _a2; + return (_a2 = this._observer) != null ? _a2 : this._observer = new ResizeObserver((entries) => { + var _a3; + for (const entry of entries) { + ResizeObserverSingleton.entries.set(entry.target, entry); + (_a3 = this._listeners.get(entry.target)) == null ? void 0 : _a3(entry); + } + }); + } +}; +ResizeObserverSingleton.entries = "WeakMap" in globals ? /* @__PURE__ */ new WeakMap() : void 0; + +// node_modules/svelte/src/runtime/internal/dom.js +var is_hydrating = false; +function start_hydrating() { + is_hydrating = true; +} +function end_hydrating() { + is_hydrating = false; +} +function append(target, node) { + target.appendChild(node); +} +function insert(target, node, anchor) { + target.insertBefore(node, anchor || null); +} +function detach(node) { + if (node.parentNode) { + node.parentNode.removeChild(node); + } +} +function element(name) { + return document.createElement(name); +} +function text(data) { + return document.createTextNode(data); +} +function space() { + return text(" "); +} +function listen(node, event, handler, options) { + node.addEventListener(event, handler, options); + return () => node.removeEventListener(event, handler, options); +} +function attr(node, attribute, value) { + if (value == null) + node.removeAttribute(attribute); + else if (node.getAttribute(attribute) !== value) + node.setAttribute(attribute, value); +} +function children(element2) { + return Array.from(element2.childNodes); +} +function set_data(text2, data) { + data = "" + data; + if (text2.data === data) + return; + text2.data = /** @type {string} */ + data; +} +function set_input_value(input, value) { + input.value = value == null ? "" : value; +} +function custom_event(type, detail, { bubbles = false, cancelable = false } = {}) { + return new CustomEvent(type, { detail, bubbles, cancelable }); +} +function get_custom_elements_slots(element2) { + const result = {}; + element2.childNodes.forEach( + /** @param {Element} node */ + (node) => { + result[node.slot || "default"] = true; + } + ); + return result; +} + +// node_modules/svelte/src/runtime/internal/lifecycle.js +var current_component; +function set_current_component(component) { + current_component = component; +} +function get_current_component() { + if (!current_component) + throw new Error("Function called outside component initialization"); + return current_component; +} +function onMount(fn) { + get_current_component().$$.on_mount.push(fn); +} +function createEventDispatcher() { + const component = get_current_component(); + return (type, detail, { cancelable = false } = {}) => { + const callbacks = component.$$.callbacks[type]; + if (callbacks) { + const event = custom_event( + /** @type {string} */ + type, + detail, + { cancelable } + ); + callbacks.slice().forEach((fn) => { + fn.call(component, event); + }); + return !event.defaultPrevented; + } + return true; + }; +} + +// node_modules/svelte/src/runtime/internal/scheduler.js +var dirty_components = []; +var binding_callbacks = []; +var render_callbacks = []; +var flush_callbacks = []; +var resolved_promise = /* @__PURE__ */ Promise.resolve(); +var update_scheduled = false; +function schedule_update() { + if (!update_scheduled) { + update_scheduled = true; + resolved_promise.then(flush); + } +} +function add_render_callback(fn) { + render_callbacks.push(fn); +} +var seen_callbacks = /* @__PURE__ */ new Set(); +var flushidx = 0; +function flush() { + if (flushidx !== 0) { + return; + } + const saved_component = current_component; + do { + try { + while (flushidx < dirty_components.length) { + const component = dirty_components[flushidx]; + flushidx++; + set_current_component(component); + update(component.$$); + } + } catch (e) { + dirty_components.length = 0; + flushidx = 0; + throw e; + } + set_current_component(null); + dirty_components.length = 0; + flushidx = 0; + while (binding_callbacks.length) + binding_callbacks.pop()(); + for (let i = 0; i < render_callbacks.length; i += 1) { + const callback = render_callbacks[i]; + if (!seen_callbacks.has(callback)) { + seen_callbacks.add(callback); + callback(); + } + } + render_callbacks.length = 0; + } while (dirty_components.length); + while (flush_callbacks.length) { + flush_callbacks.pop()(); + } + update_scheduled = false; + seen_callbacks.clear(); + set_current_component(saved_component); +} +function update($$) { + if ($$.fragment !== null) { + $$.update(); + run_all($$.before_update); + const dirty = $$.dirty; + $$.dirty = [-1]; + $$.fragment && $$.fragment.p($$.ctx, dirty); + $$.after_update.forEach(add_render_callback); + } +} +function flush_render_callbacks(fns) { + const filtered = []; + const targets = []; + render_callbacks.forEach((c) => fns.indexOf(c) === -1 ? filtered.push(c) : targets.push(c)); + targets.forEach((c) => c()); + render_callbacks = filtered; +} + +// node_modules/svelte/src/runtime/internal/transitions.js +var outroing = /* @__PURE__ */ new Set(); +function transition_in(block, local) { + if (block && block.i) { + outroing.delete(block); + block.i(local); + } +} + +// node_modules/svelte/src/shared/boolean_attributes.js +var _boolean_attributes = ( + /** @type {const} */ + [ + "allowfullscreen", + "allowpaymentrequest", + "async", + "autofocus", + "autoplay", + "checked", + "controls", + "default", + "defer", + "disabled", + "formnovalidate", + "hidden", + "inert", + "ismap", + "loop", + "multiple", + "muted", + "nomodule", + "novalidate", + "open", + "playsinline", + "readonly", + "required", + "reversed", + "selected" + ] +); +var boolean_attributes = /* @__PURE__ */ new Set([..._boolean_attributes]); + +// node_modules/svelte/src/runtime/internal/Component.js +function mount_component(component, target, anchor) { + const { fragment, after_update } = component.$$; + fragment && fragment.m(target, anchor); + add_render_callback(() => { + const new_on_destroy = component.$$.on_mount.map(run).filter(is_function); + if (component.$$.on_destroy) { + component.$$.on_destroy.push(...new_on_destroy); + } else { + run_all(new_on_destroy); + } + component.$$.on_mount = []; + }); + after_update.forEach(add_render_callback); +} +function destroy_component(component, detaching) { + const $$ = component.$$; + if ($$.fragment !== null) { + flush_render_callbacks($$.after_update); + run_all($$.on_destroy); + $$.fragment && $$.fragment.d(detaching); + $$.on_destroy = $$.fragment = null; + $$.ctx = []; + } +} +function make_dirty(component, i) { + if (component.$$.dirty[0] === -1) { + dirty_components.push(component); + schedule_update(); + component.$$.dirty.fill(0); + } + component.$$.dirty[i / 31 | 0] |= 1 << i % 31; +} +function init(component, options, instance2, create_fragment2, not_equal, props, append_styles = null, dirty = [-1]) { + const parent_component = current_component; + set_current_component(component); + const $$ = component.$$ = { + fragment: null, + ctx: [], + // state + props, + update: noop, + not_equal, + bound: blank_object(), + // lifecycle + on_mount: [], + on_destroy: [], + on_disconnect: [], + before_update: [], + after_update: [], + context: new Map(options.context || (parent_component ? parent_component.$$.context : [])), + // everything else + callbacks: blank_object(), + dirty, + skip_bound: false, + root: options.target || parent_component.$$.root + }; + append_styles && append_styles($$.root); + let ready = false; + $$.ctx = instance2 ? instance2(component, options.props || {}, (i, ret, ...rest) => { + const value = rest.length ? rest[0] : ret; + if ($$.ctx && not_equal($$.ctx[i], $$.ctx[i] = value)) { + if (!$$.skip_bound && $$.bound[i]) + $$.bound[i](value); + if (ready) + make_dirty(component, i); + } + return ret; + }) : []; + $$.update(); + ready = true; + run_all($$.before_update); + $$.fragment = create_fragment2 ? create_fragment2($$.ctx) : false; + if (options.target) { + if (options.hydrate) { + start_hydrating(); + const nodes = children(options.target); + $$.fragment && $$.fragment.l(nodes); + nodes.forEach(detach); + } else { + $$.fragment && $$.fragment.c(); + } + if (options.intro) + transition_in(component.$$.fragment); + mount_component(component, options.target, options.anchor); + end_hydrating(); + flush(); + } + set_current_component(parent_component); +} +var SvelteElement; +if (typeof HTMLElement === "function") { + SvelteElement = class extends HTMLElement { + constructor($$componentCtor, $$slots, use_shadow_dom) { + super(); + /** The Svelte component constructor */ + __publicField(this, "$$ctor"); + /** Slots */ + __publicField(this, "$$s"); + /** The Svelte component instance */ + __publicField(this, "$$c"); + /** Whether or not the custom element is connected */ + __publicField(this, "$$cn", false); + /** Component props data */ + __publicField(this, "$$d", {}); + /** `true` if currently in the process of reflecting component props back to attributes */ + __publicField(this, "$$r", false); + /** @type {Record} Props definition (name, reflected, type etc) */ + __publicField(this, "$$p_d", {}); + /** @type {Record} Event listeners */ + __publicField(this, "$$l", {}); + /** @type {Map} Event listener unsubscribe functions */ + __publicField(this, "$$l_u", /* @__PURE__ */ new Map()); + this.$$ctor = $$componentCtor; + this.$$s = $$slots; + if (use_shadow_dom) { + this.attachShadow({ mode: "open" }); + } + } + addEventListener(type, listener, options) { + this.$$l[type] = this.$$l[type] || []; + this.$$l[type].push(listener); + if (this.$$c) { + const unsub = this.$$c.$on(type, listener); + this.$$l_u.set(listener, unsub); + } + super.addEventListener(type, listener, options); + } + removeEventListener(type, listener, options) { + super.removeEventListener(type, listener, options); + if (this.$$c) { + const unsub = this.$$l_u.get(listener); + if (unsub) { + unsub(); + this.$$l_u.delete(listener); + } + } + if (this.$$l[type]) { + const idx = this.$$l[type].indexOf(listener); + if (idx >= 0) { + this.$$l[type].splice(idx, 1); + } + } + } + async connectedCallback() { + this.$$cn = true; + if (!this.$$c) { + let create_slot = function(name) { + return () => { + let node; + const obj = { + c: function create() { + node = element("slot"); + if (name !== "default") { + attr(node, "name", name); + } + }, + /** + * @param {HTMLElement} target + * @param {HTMLElement} [anchor] + */ + m: function mount(target, anchor) { + insert(target, node, anchor); + }, + d: function destroy(detaching) { + if (detaching) { + detach(node); + } + } + }; + return obj; + }; + }; + await Promise.resolve(); + if (!this.$$cn || this.$$c) { + return; + } + const $$slots = {}; + const existing_slots = get_custom_elements_slots(this); + for (const name of this.$$s) { + if (name in existing_slots) { + $$slots[name] = [create_slot(name)]; + } + } + for (const attribute of this.attributes) { + const name = this.$$g_p(attribute.name); + if (!(name in this.$$d)) { + this.$$d[name] = get_custom_element_value(name, attribute.value, this.$$p_d, "toProp"); + } + } + for (const key in this.$$p_d) { + if (!(key in this.$$d) && this[key] !== void 0) { + this.$$d[key] = this[key]; + delete this[key]; + } + } + this.$$c = new this.$$ctor({ + target: this.shadowRoot || this, + props: { + ...this.$$d, + $$slots, + $$scope: { + ctx: [] + } + } + }); + const reflect_attributes = () => { + this.$$r = true; + for (const key in this.$$p_d) { + this.$$d[key] = this.$$c.$$.ctx[this.$$c.$$.props[key]]; + if (this.$$p_d[key].reflect) { + const attribute_value = get_custom_element_value( + key, + this.$$d[key], + this.$$p_d, + "toAttribute" + ); + if (attribute_value == null) { + this.removeAttribute(this.$$p_d[key].attribute || key); + } else { + this.setAttribute(this.$$p_d[key].attribute || key, attribute_value); + } + } + } + this.$$r = false; + }; + this.$$c.$$.after_update.push(reflect_attributes); + reflect_attributes(); + for (const type in this.$$l) { + for (const listener of this.$$l[type]) { + const unsub = this.$$c.$on(type, listener); + this.$$l_u.set(listener, unsub); + } + } + this.$$l = {}; + } + } + // We don't need this when working within Svelte code, but for compatibility of people using this outside of Svelte + // and setting attributes through setAttribute etc, this is helpful + attributeChangedCallback(attr2, _oldValue, newValue) { + var _a2; + if (this.$$r) + return; + attr2 = this.$$g_p(attr2); + this.$$d[attr2] = get_custom_element_value(attr2, newValue, this.$$p_d, "toProp"); + (_a2 = this.$$c) == null ? void 0 : _a2.$set({ [attr2]: this.$$d[attr2] }); + } + disconnectedCallback() { + this.$$cn = false; + Promise.resolve().then(() => { + if (!this.$$cn && this.$$c) { + this.$$c.$destroy(); + this.$$c = void 0; + } + }); + } + $$g_p(attribute_name) { + return Object.keys(this.$$p_d).find( + (key) => this.$$p_d[key].attribute === attribute_name || !this.$$p_d[key].attribute && key.toLowerCase() === attribute_name + ) || attribute_name; + } + }; +} +function get_custom_element_value(prop, value, props_definition, transform) { + var _a2; + const type = (_a2 = props_definition[prop]) == null ? void 0 : _a2.type; + value = type === "Boolean" && typeof value !== "boolean" ? value != null : value; + if (!transform || !props_definition[prop]) { + return value; + } else if (transform === "toAttribute") { + switch (type) { + case "Object": + case "Array": + return value == null ? null : JSON.stringify(value); + case "Boolean": + return value ? "" : null; + case "Number": + return value == null ? null : value; + default: + return value; + } + } else { + switch (type) { + case "Object": + case "Array": + return value && JSON.parse(value); + case "Boolean": + return value; + case "Number": + return value != null ? +value : value; + default: + return value; + } + } +} +var SvelteComponent = class { + constructor() { + /** + * ### PRIVATE API + * + * Do not use, may change at any time + * + * @type {any} + */ + __publicField(this, "$$"); + /** + * ### PRIVATE API + * + * Do not use, may change at any time + * + * @type {any} + */ + __publicField(this, "$$set"); + } + /** @returns {void} */ + $destroy() { + destroy_component(this, 1); + this.$destroy = noop; + } + /** + * @template {Extract} K + * @param {K} type + * @param {((e: Events[K]) => void) | null | undefined} callback + * @returns {() => void} + */ + $on(type, callback) { + if (!is_function(callback)) { + return noop; + } + const callbacks = this.$$.callbacks[type] || (this.$$.callbacks[type] = []); + callbacks.push(callback); + return () => { + const index = callbacks.indexOf(callback); + if (index !== -1) + callbacks.splice(index, 1); + }; + } + /** + * @param {Partial} props + * @returns {void} + */ + $set(props) { + if (this.$$set && !is_empty(props)) { + this.$$.skip_bound = true; + this.$$set(props); + this.$$.skip_bound = false; + } + } +}; + +// node_modules/svelte/src/shared/version.js +var PUBLIC_VERSION = "4"; + +// node_modules/svelte/src/runtime/internal/disclose-version/index.js +if (typeof window !== "undefined") + (window.__svelte || (window.__svelte = { v: /* @__PURE__ */ new Set() })).v.add(PUBLIC_VERSION); + +// src/ui/ActionPalette.svelte +function create_if_block(ctx) { + let div1; + let div0; + let t; + return { + c() { + div1 = element("div"); + div0 = element("div"); + t = text( + /*modelLabel*/ + ctx[2] + ); + attr(div0, "class", "local-gpt-model-badge-label"); + attr(div1, "class", "local-gpt-model-badge"); + attr(div1, "aria-hidden", "true"); + }, + m(target, anchor) { + insert(target, div1, anchor); + append(div1, div0); + append(div0, t); + }, + p(ctx2, dirty) { + if (dirty & /*modelLabel*/ + 4) + set_data( + t, + /*modelLabel*/ + ctx2[2] + ); + }, + d(detaching) { + if (detaching) { + detach(div1); + } + } + }; +} +function create_fragment(ctx) { + let div; + let input; + let t; + let mounted; + let dispose; + let if_block = ( + /*modelLabel*/ + ctx[2] && create_if_block(ctx) + ); + return { + c() { + div = element("div"); + input = element("input"); + t = space(); + if (if_block) + if_block.c(); + attr( + input, + "placeholder", + /*placeholder*/ + ctx[1] + ); + attr(input, "class", "local-gpt-action-palette"); + attr(input, "autocomplete", "off"); + attr(input, "spellcheck", "false"); + attr(div, "class", "local-gpt-action-palette-shell"); + }, + m(target, anchor) { + insert(target, div, anchor); + append(div, input); + ctx[5](input); + set_input_value( + input, + /*value*/ + ctx[0] + ); + append(div, t); + if (if_block) + if_block.m(div, null); + if (!mounted) { + dispose = [ + listen( + input, + "input", + /*input_input_handler*/ + ctx[6] + ), + listen( + input, + "keydown", + /*handleKeydown*/ + ctx[4] + ) + ]; + mounted = true; + } + }, + p(ctx2, [dirty]) { + if (dirty & /*placeholder*/ + 2) { + attr( + input, + "placeholder", + /*placeholder*/ + ctx2[1] + ); + } + if (dirty & /*value*/ + 1 && input.value !== /*value*/ + ctx2[0]) { + set_input_value( + input, + /*value*/ + ctx2[0] + ); + } + if ( + /*modelLabel*/ + ctx2[2] + ) { + if (if_block) { + if_block.p(ctx2, dirty); + } else { + if_block = create_if_block(ctx2); + if_block.c(); + if_block.m(div, null); + } + } else if (if_block) { + if_block.d(1); + if_block = null; + } + }, + i: noop, + o: noop, + d(detaching) { + if (detaching) { + detach(div); + } + ctx[5](null); + if (if_block) + if_block.d(); + mounted = false; + run_all(dispose); + } + }; +} +function instance($$self, $$props, $$invalidate) { + let { placeholder = "Type here\u2026" } = $$props; + let { value = "" } = $$props; + let { modelLabel = "" } = $$props; + const dispatch = createEventDispatcher(); + let inputEl = null; + onMount(() => { + queueMicrotask(() => { + inputEl === null || inputEl === void 0 ? void 0 : inputEl.focus(); + inputEl === null || inputEl === void 0 ? void 0 : inputEl.select(); + }); + }); + function handleKeydown(e) { + if (e.key === "Enter") { + e.preventDefault(); + dispatch("submit", value); + } else if (e.key === "Escape") { + e.preventDefault(); + dispatch("cancel"); + } + } + function input_binding($$value) { + binding_callbacks[$$value ? "unshift" : "push"](() => { + inputEl = $$value; + $$invalidate(3, inputEl); + }); + } + function input_input_handler() { + value = this.value; + $$invalidate(0, value); + } + $$self.$$set = ($$props2) => { + if ("placeholder" in $$props2) + $$invalidate(1, placeholder = $$props2.placeholder); + if ("value" in $$props2) + $$invalidate(0, value = $$props2.value); + if ("modelLabel" in $$props2) + $$invalidate(2, modelLabel = $$props2.modelLabel); + }; + return [ + value, + placeholder, + modelLabel, + inputEl, + handleKeydown, + input_binding, + input_input_handler + ]; +} +var ActionPalette = class extends SvelteComponent { + constructor(options) { + super(); + init(this, options, instance, create_fragment, safe_not_equal, { placeholder: 1, value: 0, modelLabel: 2 }); + } +}; +var ActionPalette_default = ActionPalette; + +// src/ui/actionPalettePlugin.ts +var SvelteActionPaletteWidget = class extends import_view2.WidgetType { + constructor(options) { + super(); + this.options = options; + this.container = null; + this.app = null; + } + toDOM(view) { + this.container = document.createElement("div"); + this.container.addClass("local-gpt-action-palette-container"); + const mountTarget = document.createElement("div"); + this.container.appendChild(mountTarget); + this.app = new ActionPalette_default({ + target: mountTarget, + props: { + placeholder: this.options.placeholder || "Type\u2026", + modelLabel: this.options.modelLabel || "" + } + }); + this.app.$on("submit", (e) => { + var _a2, _b; + (_b = (_a2 = this.options).onSubmit) == null ? void 0 : _b.call(_a2, e.detail); + }); + this.app.$on("cancel", () => { + var _a2, _b; + (_b = (_a2 = this.options).onCancel) == null ? void 0 : _b.call(_a2); + }); + return this.container; + } + destroy(dom) { + var _a2; + (_a2 = this.app) == null ? void 0 : _a2.$destroy(); + this.app = null; + this.container = null; + } +}; +var ShowActionPaletteEffect = import_state2.StateEffect.define(); +var HideActionPaletteEffect = import_state2.StateEffect.define(); +function captureSelectionSnapshot(view) { + const rangesAll = view.state.selection.ranges.map((r) => ({ + from: r.from, + to: r.to + })); + const nonEmpty = rangesAll.filter((r) => r.from !== r.to); + return { + fakeSelections: nonEmpty.length ? nonEmpty : null, + previousSelectionRanges: rangesAll.length ? rangesAll : null, + previousCursor: view.state.selection.main.head + }; +} +function mapRanges(ranges, changes) { + return ranges ? ranges.map((r) => ({ + from: changes.mapPos(r.from), + to: changes.mapPos(r.to) + })) : null; +} +function buildDecorations(pos, options, fakeSelections) { + const builder = new import_state2.RangeSetBuilder(); + const widget = new SvelteActionPaletteWidget(options); + builder.add(pos, pos, import_view2.Decoration.widget({ widget, side: -1, block: true })); + if (fakeSelections) { + for (const r of fakeSelections) { + builder.add( + r.from, + r.to, + import_view2.Decoration.mark({ class: "local-gpt-fake-selection" }) + ); + } + } + return builder.finish(); +} +var actionPaletteStateField = import_state2.StateField.define({ + create() { + return { + deco: import_view2.Decoration.none, + pos: null, + fakeSelections: null, + previousSelectionRanges: null, + previousCursor: null + }; + }, + update(value, tr) { + let { + deco, + pos, + fakeSelections, + previousSelectionRanges, + previousCursor + } = value; + if (tr.docChanged) { + deco = deco.map(tr.changes); + if (pos !== null) + pos = tr.changes.mapPos(pos); + fakeSelections = mapRanges(fakeSelections, tr.changes); + previousSelectionRanges = mapRanges( + previousSelectionRanges, + tr.changes + ); + if (previousCursor !== null) + previousCursor = tr.changes.mapPos(previousCursor); + } + for (const e of tr.effects) { + if (e.is(ShowActionPaletteEffect)) { + pos = e.value.pos; + fakeSelections = e.value.fakeSelections; + previousSelectionRanges = e.value.previousSelectionRanges; + previousCursor = e.value.previousCursor; + deco = buildDecorations(pos, e.value.options, fakeSelections); + } else if (e.is(HideActionPaletteEffect)) { + pos = null; + fakeSelections = null; + previousSelectionRanges = null; + previousCursor = null; + deco = import_view2.Decoration.none; + } + } + return { + deco, + pos, + fakeSelections, + previousSelectionRanges, + previousCursor + }; + }, + provide: (f) => import_view2.EditorView.decorations.from(f, (v) => v.deco) +}); +var actionPalettePlugin = [actionPaletteStateField]; +function showActionPalette(view, pos, options) { + const { fakeSelections, previousSelectionRanges, previousCursor } = captureSelectionSnapshot(view); + view.dispatch({ + effects: ShowActionPaletteEffect.of({ + pos, + options, + fakeSelections, + previousSelectionRanges, + previousCursor + }) + }); +} +function hideActionPalette(view) { + const state = view.state.field(actionPaletteStateField, false); + if (state) { + if (state.previousSelectionRanges && state.previousSelectionRanges.length) { + const selection = import_state2.EditorSelection.create( + state.previousSelectionRanges.map( + (r) => import_state2.EditorSelection.range(r.from, r.to) + ) + ); + view.dispatch({ selection }); + view.focus(); + } else if (state.previousCursor !== null) { + view.dispatch({ selection: { anchor: state.previousCursor } }); + view.focus(); + } + } + view.dispatch({ effects: HideActionPaletteEffect.of(null) }); +} + +// src/rag.ts +var import_obsidian2 = require("obsidian"); + +// node_modules/pdfjs-dist/build/pdf.mjs +var __webpack_require__ = {}; +(() => { + __webpack_require__.d = (exports, definition) => { + for (var key in definition) { + if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { + Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); + } + } + }; +})(); +(() => { + __webpack_require__.o = (obj, prop) => Object.prototype.hasOwnProperty.call(obj, prop); +})(); +var __webpack_exports__ = globalThis.pdfjsLib = {}; +__webpack_require__.d(__webpack_exports__, { + AbortException: () => ( + /* reexport */ + AbortException + ), + AnnotationEditorLayer: () => ( + /* reexport */ + AnnotationEditorLayer + ), + AnnotationEditorParamsType: () => ( + /* reexport */ + AnnotationEditorParamsType + ), + AnnotationEditorType: () => ( + /* reexport */ + AnnotationEditorType + ), + AnnotationEditorUIManager: () => ( + /* reexport */ + AnnotationEditorUIManager + ), + AnnotationLayer: () => ( + /* reexport */ + AnnotationLayer + ), + AnnotationMode: () => ( + /* reexport */ + AnnotationMode + ), + CMapCompressionType: () => ( + /* reexport */ + CMapCompressionType + ), + ColorPicker: () => ( + /* reexport */ + ColorPicker + ), + DOMSVGFactory: () => ( + /* reexport */ + DOMSVGFactory + ), + DrawLayer: () => ( + /* reexport */ + DrawLayer + ), + FeatureTest: () => ( + /* reexport */ + util_FeatureTest + ), + GlobalWorkerOptions: () => ( + /* reexport */ + GlobalWorkerOptions + ), + ImageKind: () => ( + /* reexport */ + util_ImageKind + ), + InvalidPDFException: () => ( + /* reexport */ + InvalidPDFException + ), + MissingPDFException: () => ( + /* reexport */ + MissingPDFException + ), + OPS: () => ( + /* reexport */ + OPS + ), + PDFDataRangeTransport: () => ( + /* reexport */ + PDFDataRangeTransport + ), + PDFDateString: () => ( + /* reexport */ + PDFDateString + ), + PDFWorker: () => ( + /* reexport */ + PDFWorker + ), + PasswordResponses: () => ( + /* reexport */ + PasswordResponses + ), + PermissionFlag: () => ( + /* reexport */ + PermissionFlag + ), + PixelsPerInch: () => ( + /* reexport */ + PixelsPerInch + ), + RenderingCancelledException: () => ( + /* reexport */ + RenderingCancelledException + ), + TextLayer: () => ( + /* reexport */ + TextLayer + ), + UnexpectedResponseException: () => ( + /* reexport */ + UnexpectedResponseException + ), + Util: () => ( + /* reexport */ + Util + ), + VerbosityLevel: () => ( + /* reexport */ + VerbosityLevel + ), + XfaLayer: () => ( + /* reexport */ + XfaLayer + ), + build: () => ( + /* reexport */ + build + ), + createValidAbsoluteUrl: () => ( + /* reexport */ + createValidAbsoluteUrl + ), + fetchData: () => ( + /* reexport */ + fetchData + ), + getDocument: () => ( + /* reexport */ + getDocument + ), + getFilenameFromUrl: () => ( + /* reexport */ + getFilenameFromUrl + ), + getPdfFilenameFromUrl: () => ( + /* reexport */ + getPdfFilenameFromUrl + ), + getXfaPageViewport: () => ( + /* reexport */ + getXfaPageViewport + ), + isDataScheme: () => ( + /* reexport */ + isDataScheme + ), + isPdfFile: () => ( + /* reexport */ + isPdfFile + ), + noContextMenu: () => ( + /* reexport */ + noContextMenu + ), + normalizeUnicode: () => ( + /* reexport */ + normalizeUnicode + ), + setLayerDimensions: () => ( + /* reexport */ + setLayerDimensions + ), + shadow: () => ( + /* reexport */ + shadow + ), + version: () => ( + /* reexport */ + version + ) +}); +var isNodeJS = typeof process === "object" && process + "" === "[object process]" && !process.versions.nw && !(process.versions.electron && process.type && process.type !== "browser"); +var IDENTITY_MATRIX = [1, 0, 0, 1, 0, 0]; +var FONT_IDENTITY_MATRIX = [1e-3, 0, 0, 1e-3, 0, 0]; +var MAX_IMAGE_SIZE_TO_CACHE = 1e7; +var LINE_FACTOR = 1.35; +var LINE_DESCENT_FACTOR = 0.35; +var BASELINE_FACTOR = LINE_DESCENT_FACTOR / LINE_FACTOR; +var RenderingIntentFlag = { + ANY: 1, + DISPLAY: 2, + PRINT: 4, + SAVE: 8, + ANNOTATIONS_FORMS: 16, + ANNOTATIONS_STORAGE: 32, + ANNOTATIONS_DISABLE: 64, + IS_EDITING: 128, + OPLIST: 256 +}; +var AnnotationMode = { + DISABLE: 0, + ENABLE: 1, + ENABLE_FORMS: 2, + ENABLE_STORAGE: 3 +}; +var AnnotationEditorPrefix = "pdfjs_internal_editor_"; +var AnnotationEditorType = { + DISABLE: -1, + NONE: 0, + FREETEXT: 3, + HIGHLIGHT: 9, + STAMP: 13, + INK: 15 +}; +var AnnotationEditorParamsType = { + RESIZE: 1, + CREATE: 2, + FREETEXT_SIZE: 11, + FREETEXT_COLOR: 12, + FREETEXT_OPACITY: 13, + INK_COLOR: 21, + INK_THICKNESS: 22, + INK_OPACITY: 23, + HIGHLIGHT_COLOR: 31, + HIGHLIGHT_DEFAULT_COLOR: 32, + HIGHLIGHT_THICKNESS: 33, + HIGHLIGHT_FREE: 34, + HIGHLIGHT_SHOW_ALL: 35 +}; +var PermissionFlag = { + PRINT: 4, + MODIFY_CONTENTS: 8, + COPY: 16, + MODIFY_ANNOTATIONS: 32, + FILL_INTERACTIVE_FORMS: 256, + COPY_FOR_ACCESSIBILITY: 512, + ASSEMBLE: 1024, + PRINT_HIGH_QUALITY: 2048 +}; +var TextRenderingMode = { + FILL: 0, + STROKE: 1, + FILL_STROKE: 2, + INVISIBLE: 3, + FILL_ADD_TO_PATH: 4, + STROKE_ADD_TO_PATH: 5, + FILL_STROKE_ADD_TO_PATH: 6, + ADD_TO_PATH: 7, + FILL_STROKE_MASK: 3, + ADD_TO_PATH_FLAG: 4 +}; +var util_ImageKind = { + GRAYSCALE_1BPP: 1, + RGB_24BPP: 2, + RGBA_32BPP: 3 +}; +var AnnotationType = { + TEXT: 1, + LINK: 2, + FREETEXT: 3, + LINE: 4, + SQUARE: 5, + CIRCLE: 6, + POLYGON: 7, + POLYLINE: 8, + HIGHLIGHT: 9, + UNDERLINE: 10, + SQUIGGLY: 11, + STRIKEOUT: 12, + STAMP: 13, + CARET: 14, + INK: 15, + POPUP: 16, + FILEATTACHMENT: 17, + SOUND: 18, + MOVIE: 19, + WIDGET: 20, + SCREEN: 21, + PRINTERMARK: 22, + TRAPNET: 23, + WATERMARK: 24, + THREED: 25, + REDACT: 26 +}; +var AnnotationBorderStyleType = { + SOLID: 1, + DASHED: 2, + BEVELED: 3, + INSET: 4, + UNDERLINE: 5 +}; +var VerbosityLevel = { + ERRORS: 0, + WARNINGS: 1, + INFOS: 5 +}; +var CMapCompressionType = { + NONE: 0, + BINARY: 1 +}; +var OPS = { + dependency: 1, + setLineWidth: 2, + setLineCap: 3, + setLineJoin: 4, + setMiterLimit: 5, + setDash: 6, + setRenderingIntent: 7, + setFlatness: 8, + setGState: 9, + save: 10, + restore: 11, + transform: 12, + moveTo: 13, + lineTo: 14, + curveTo: 15, + curveTo2: 16, + curveTo3: 17, + closePath: 18, + rectangle: 19, + stroke: 20, + closeStroke: 21, + fill: 22, + eoFill: 23, + fillStroke: 24, + eoFillStroke: 25, + closeFillStroke: 26, + closeEOFillStroke: 27, + endPath: 28, + clip: 29, + eoClip: 30, + beginText: 31, + endText: 32, + setCharSpacing: 33, + setWordSpacing: 34, + setHScale: 35, + setLeading: 36, + setFont: 37, + setTextRenderingMode: 38, + setTextRise: 39, + moveText: 40, + setLeadingMoveText: 41, + setTextMatrix: 42, + nextLine: 43, + showText: 44, + showSpacedText: 45, + nextLineShowText: 46, + nextLineSetSpacingShowText: 47, + setCharWidth: 48, + setCharWidthAndBounds: 49, + setStrokeColorSpace: 50, + setFillColorSpace: 51, + setStrokeColor: 52, + setStrokeColorN: 53, + setFillColor: 54, + setFillColorN: 55, + setStrokeGray: 56, + setFillGray: 57, + setStrokeRGBColor: 58, + setFillRGBColor: 59, + setStrokeCMYKColor: 60, + setFillCMYKColor: 61, + shadingFill: 62, + beginInlineImage: 63, + beginImageData: 64, + endInlineImage: 65, + paintXObject: 66, + markPoint: 67, + markPointProps: 68, + beginMarkedContent: 69, + beginMarkedContentProps: 70, + endMarkedContent: 71, + beginCompat: 72, + endCompat: 73, + paintFormXObjectBegin: 74, + paintFormXObjectEnd: 75, + beginGroup: 76, + endGroup: 77, + beginAnnotation: 80, + endAnnotation: 81, + paintImageMaskXObject: 83, + paintImageMaskXObjectGroup: 84, + paintImageXObject: 85, + paintInlineImageXObject: 86, + paintInlineImageXObjectGroup: 87, + paintImageXObjectRepeat: 88, + paintImageMaskXObjectRepeat: 89, + paintSolidColorImageMask: 90, + constructPath: 91, + setStrokeTransparent: 92, + setFillTransparent: 93 +}; +var PasswordResponses = { + NEED_PASSWORD: 1, + INCORRECT_PASSWORD: 2 +}; +var verbosity = VerbosityLevel.WARNINGS; +function setVerbosityLevel(level) { + if (Number.isInteger(level)) { + verbosity = level; + } +} +function getVerbosityLevel() { + return verbosity; +} +function info(msg) { + if (verbosity >= VerbosityLevel.INFOS) { + console.log(`Info: ${msg}`); + } +} +function warn(msg) { + if (verbosity >= VerbosityLevel.WARNINGS) { + console.log(`Warning: ${msg}`); + } +} +function unreachable(msg) { + throw new Error(msg); +} +function assert(cond, msg) { + if (!cond) { + unreachable(msg); + } +} +function _isValidProtocol(url) { + switch (url == null ? void 0 : url.protocol) { + case "http:": + case "https:": + case "ftp:": + case "mailto:": + case "tel:": + return true; + default: + return false; + } +} +function createValidAbsoluteUrl(url, baseUrl = null, options = null) { + if (!url) { + return null; + } + try { + if (options && typeof url === "string") { + if (options.addDefaultProtocol && url.startsWith("www.")) { + const dots = url.match(/\./g); + if ((dots == null ? void 0 : dots.length) >= 2) { + url = `http://${url}`; + } + } + if (options.tryConvertEncoding) { + try { + url = stringToUTF8String(url); + } catch (e) { + } + } + } + const absoluteUrl = baseUrl ? new URL(url, baseUrl) : new URL(url); + if (_isValidProtocol(absoluteUrl)) { + return absoluteUrl; + } + } catch (e) { + } + return null; +} +function shadow(obj, prop, value, nonSerializable = false) { + Object.defineProperty(obj, prop, { + value, + enumerable: !nonSerializable, + configurable: true, + writable: false + }); + return value; +} +var BaseException = function BaseExceptionClosure() { + function BaseException2(message, name) { + this.message = message; + this.name = name; + } + BaseException2.prototype = new Error(); + BaseException2.constructor = BaseException2; + return BaseException2; +}(); +var PasswordException = class extends BaseException { + constructor(msg, code) { + super(msg, "PasswordException"); + this.code = code; + } +}; +var UnknownErrorException = class extends BaseException { + constructor(msg, details) { + super(msg, "UnknownErrorException"); + this.details = details; + } +}; +var InvalidPDFException = class extends BaseException { + constructor(msg) { + super(msg, "InvalidPDFException"); + } +}; +var MissingPDFException = class extends BaseException { + constructor(msg) { + super(msg, "MissingPDFException"); + } +}; +var UnexpectedResponseException = class extends BaseException { + constructor(msg, status) { + super(msg, "UnexpectedResponseException"); + this.status = status; + } +}; +var FormatError = class extends BaseException { + constructor(msg) { + super(msg, "FormatError"); + } +}; +var AbortException = class extends BaseException { + constructor(msg) { + super(msg, "AbortException"); + } +}; +function bytesToString(bytes) { + if (typeof bytes !== "object" || (bytes == null ? void 0 : bytes.length) === void 0) { + unreachable("Invalid argument for bytesToString"); + } + const length = bytes.length; + const MAX_ARGUMENT_COUNT = 8192; + if (length < MAX_ARGUMENT_COUNT) { + return String.fromCharCode.apply(null, bytes); + } + const strBuf = []; + for (let i = 0; i < length; i += MAX_ARGUMENT_COUNT) { + const chunkEnd = Math.min(i + MAX_ARGUMENT_COUNT, length); + const chunk = bytes.subarray(i, chunkEnd); + strBuf.push(String.fromCharCode.apply(null, chunk)); + } + return strBuf.join(""); +} +function stringToBytes(str) { + if (typeof str !== "string") { + unreachable("Invalid argument for stringToBytes"); + } + const length = str.length; + const bytes = new Uint8Array(length); + for (let i = 0; i < length; ++i) { + bytes[i] = str.charCodeAt(i) & 255; + } + return bytes; +} +function string32(value) { + return String.fromCharCode(value >> 24 & 255, value >> 16 & 255, value >> 8 & 255, value & 255); +} +function objectFromMap(map) { + const obj = /* @__PURE__ */ Object.create(null); + for (const [key, value] of map) { + obj[key] = value; + } + return obj; +} +function isLittleEndian() { + const buffer8 = new Uint8Array(4); + buffer8[0] = 1; + const view32 = new Uint32Array(buffer8.buffer, 0, 1); + return view32[0] === 1; +} +function isEvalSupported() { + try { + new Function(""); + return true; + } catch (e) { + return false; + } +} +var util_FeatureTest = class { + static get isLittleEndian() { + return shadow(this, "isLittleEndian", isLittleEndian()); + } + static get isEvalSupported() { + return shadow(this, "isEvalSupported", isEvalSupported()); + } + static get isOffscreenCanvasSupported() { + return shadow(this, "isOffscreenCanvasSupported", typeof OffscreenCanvas !== "undefined"); + } + static get platform() { + if (typeof navigator !== "undefined" && typeof (navigator == null ? void 0 : navigator.platform) === "string") { + return shadow(this, "platform", { + isMac: navigator.platform.includes("Mac") + }); + } + return shadow(this, "platform", { + isMac: false + }); + } + static get isCSSRoundSupported() { + var _a2, _b; + return shadow(this, "isCSSRoundSupported", (_b = (_a2 = globalThis.CSS) == null ? void 0 : _a2.supports) == null ? void 0 : _b.call(_a2, "width: round(1.5px, 1px)")); + } +}; +var hexNumbers = Array.from(Array(256).keys(), (n) => n.toString(16).padStart(2, "0")); +var _getExtremumOnCurve, getExtremumOnCurve_fn, _getExtremum, getExtremum_fn; +var Util = class { + static makeHexColor(r, g, b) { + return `#${hexNumbers[r]}${hexNumbers[g]}${hexNumbers[b]}`; + } + static scaleMinMax(transform, minMax) { + let temp; + if (transform[0]) { + if (transform[0] < 0) { + temp = minMax[0]; + minMax[0] = minMax[2]; + minMax[2] = temp; + } + minMax[0] *= transform[0]; + minMax[2] *= transform[0]; + if (transform[3] < 0) { + temp = minMax[1]; + minMax[1] = minMax[3]; + minMax[3] = temp; + } + minMax[1] *= transform[3]; + minMax[3] *= transform[3]; + } else { + temp = minMax[0]; + minMax[0] = minMax[1]; + minMax[1] = temp; + temp = minMax[2]; + minMax[2] = minMax[3]; + minMax[3] = temp; + if (transform[1] < 0) { + temp = minMax[1]; + minMax[1] = minMax[3]; + minMax[3] = temp; + } + minMax[1] *= transform[1]; + minMax[3] *= transform[1]; + if (transform[2] < 0) { + temp = minMax[0]; + minMax[0] = minMax[2]; + minMax[2] = temp; + } + minMax[0] *= transform[2]; + minMax[2] *= transform[2]; + } + minMax[0] += transform[4]; + minMax[1] += transform[5]; + minMax[2] += transform[4]; + minMax[3] += transform[5]; + } + static transform(m1, m2) { + return [m1[0] * m2[0] + m1[2] * m2[1], m1[1] * m2[0] + m1[3] * m2[1], m1[0] * m2[2] + m1[2] * m2[3], m1[1] * m2[2] + m1[3] * m2[3], m1[0] * m2[4] + m1[2] * m2[5] + m1[4], m1[1] * m2[4] + m1[3] * m2[5] + m1[5]]; + } + static applyTransform(p, m) { + const xt = p[0] * m[0] + p[1] * m[2] + m[4]; + const yt = p[0] * m[1] + p[1] * m[3] + m[5]; + return [xt, yt]; + } + static applyInverseTransform(p, m) { + const d = m[0] * m[3] - m[1] * m[2]; + const xt = (p[0] * m[3] - p[1] * m[2] + m[2] * m[5] - m[4] * m[3]) / d; + const yt = (-p[0] * m[1] + p[1] * m[0] + m[4] * m[1] - m[5] * m[0]) / d; + return [xt, yt]; + } + static getAxialAlignedBoundingBox(r, m) { + const p1 = this.applyTransform(r, m); + const p2 = this.applyTransform(r.slice(2, 4), m); + const p3 = this.applyTransform([r[0], r[3]], m); + const p4 = this.applyTransform([r[2], r[1]], m); + return [Math.min(p1[0], p2[0], p3[0], p4[0]), Math.min(p1[1], p2[1], p3[1], p4[1]), Math.max(p1[0], p2[0], p3[0], p4[0]), Math.max(p1[1], p2[1], p3[1], p4[1])]; + } + static inverseTransform(m) { + const d = m[0] * m[3] - m[1] * m[2]; + return [m[3] / d, -m[1] / d, -m[2] / d, m[0] / d, (m[2] * m[5] - m[4] * m[3]) / d, (m[4] * m[1] - m[5] * m[0]) / d]; + } + static singularValueDecompose2dScale(m) { + const transpose = [m[0], m[2], m[1], m[3]]; + const a = m[0] * transpose[0] + m[1] * transpose[2]; + const b = m[0] * transpose[1] + m[1] * transpose[3]; + const c = m[2] * transpose[0] + m[3] * transpose[2]; + const d = m[2] * transpose[1] + m[3] * transpose[3]; + const first = (a + d) / 2; + const second = Math.sqrt((a + d) ** 2 - 4 * (a * d - c * b)) / 2; + const sx = first + second || 1; + const sy = first - second || 1; + return [Math.sqrt(sx), Math.sqrt(sy)]; + } + static normalizeRect(rect) { + const r = rect.slice(0); + if (rect[0] > rect[2]) { + r[0] = rect[2]; + r[2] = rect[0]; + } + if (rect[1] > rect[3]) { + r[1] = rect[3]; + r[3] = rect[1]; + } + return r; + } + static intersect(rect1, rect2) { + const xLow = Math.max(Math.min(rect1[0], rect1[2]), Math.min(rect2[0], rect2[2])); + const xHigh = Math.min(Math.max(rect1[0], rect1[2]), Math.max(rect2[0], rect2[2])); + if (xLow > xHigh) { + return null; + } + const yLow = Math.max(Math.min(rect1[1], rect1[3]), Math.min(rect2[1], rect2[3])); + const yHigh = Math.min(Math.max(rect1[1], rect1[3]), Math.max(rect2[1], rect2[3])); + if (yLow > yHigh) { + return null; + } + return [xLow, yLow, xHigh, yHigh]; + } + static bezierBoundingBox(x0, y0, x1, y1, x2, y2, x3, y3, minMax) { + if (minMax) { + minMax[0] = Math.min(minMax[0], x0, x3); + minMax[1] = Math.min(minMax[1], y0, y3); + minMax[2] = Math.max(minMax[2], x0, x3); + minMax[3] = Math.max(minMax[3], y0, y3); + } else { + minMax = [Math.min(x0, x3), Math.min(y0, y3), Math.max(x0, x3), Math.max(y0, y3)]; + } + __privateMethod(this, _getExtremum, getExtremum_fn).call(this, x0, x1, x2, x3, y0, y1, y2, y3, 3 * (-x0 + 3 * (x1 - x2) + x3), 6 * (x0 - 2 * x1 + x2), 3 * (x1 - x0), minMax); + __privateMethod(this, _getExtremum, getExtremum_fn).call(this, x0, x1, x2, x3, y0, y1, y2, y3, 3 * (-y0 + 3 * (y1 - y2) + y3), 6 * (y0 - 2 * y1 + y2), 3 * (y1 - y0), minMax); + return minMax; + } +}; +_getExtremumOnCurve = new WeakSet(); +getExtremumOnCurve_fn = function(x0, x1, x2, x3, y0, y1, y2, y3, t, minMax) { + if (t <= 0 || t >= 1) { + return; + } + const mt = 1 - t; + const tt = t * t; + const ttt = tt * t; + const x = mt * (mt * (mt * x0 + 3 * t * x1) + 3 * tt * x2) + ttt * x3; + const y = mt * (mt * (mt * y0 + 3 * t * y1) + 3 * tt * y2) + ttt * y3; + minMax[0] = Math.min(minMax[0], x); + minMax[1] = Math.min(minMax[1], y); + minMax[2] = Math.max(minMax[2], x); + minMax[3] = Math.max(minMax[3], y); +}; +_getExtremum = new WeakSet(); +getExtremum_fn = function(x0, x1, x2, x3, y0, y1, y2, y3, a, b, c, minMax) { + if (Math.abs(a) < 1e-12) { + if (Math.abs(b) >= 1e-12) { + __privateMethod(this, _getExtremumOnCurve, getExtremumOnCurve_fn).call(this, x0, x1, x2, x3, y0, y1, y2, y3, -c / b, minMax); + } + return; + } + const delta = b ** 2 - 4 * c * a; + if (delta < 0) { + return; + } + const sqrtDelta = Math.sqrt(delta); + const a2 = 2 * a; + __privateMethod(this, _getExtremumOnCurve, getExtremumOnCurve_fn).call(this, x0, x1, x2, x3, y0, y1, y2, y3, (-b + sqrtDelta) / a2, minMax); + __privateMethod(this, _getExtremumOnCurve, getExtremumOnCurve_fn).call(this, x0, x1, x2, x3, y0, y1, y2, y3, (-b - sqrtDelta) / a2, minMax); +}; +__privateAdd(Util, _getExtremumOnCurve); +__privateAdd(Util, _getExtremum); +function stringToUTF8String(str) { + return decodeURIComponent(escape(str)); +} +var NormalizeRegex = null; +var NormalizationMap = null; +function normalizeUnicode(str) { + if (!NormalizeRegex) { + NormalizeRegex = /([\u00a0\u00b5\u037e\u0eb3\u2000-\u200a\u202f\u2126\ufb00-\ufb04\ufb06\ufb20-\ufb36\ufb38-\ufb3c\ufb3e\ufb40-\ufb41\ufb43-\ufb44\ufb46-\ufba1\ufba4-\ufba9\ufbae-\ufbb1\ufbd3-\ufbdc\ufbde-\ufbe7\ufbea-\ufbf8\ufbfc-\ufbfd\ufc00-\ufc5d\ufc64-\ufcf1\ufcf5-\ufd3d\ufd88\ufdf4\ufdfa-\ufdfb\ufe71\ufe77\ufe79\ufe7b\ufe7d]+)|(\ufb05+)/gu; + NormalizationMap = /* @__PURE__ */ new Map([["\uFB05", "\u017Ft"]]); + } + return str.replaceAll(NormalizeRegex, (_, p1, p2) => p1 ? p1.normalize("NFKC") : NormalizationMap.get(p2)); +} +function getUuid() { + if (typeof crypto !== "undefined" && typeof (crypto == null ? void 0 : crypto.randomUUID) === "function") { + return crypto.randomUUID(); + } + const buf = new Uint8Array(32); + if (typeof crypto !== "undefined" && typeof (crypto == null ? void 0 : crypto.getRandomValues) === "function") { + crypto.getRandomValues(buf); + } else { + for (let i = 0; i < 32; i++) { + buf[i] = Math.floor(Math.random() * 255); + } + } + return bytesToString(buf); +} +var AnnotationPrefix = "pdfjs_internal_id_"; +var FontRenderOps = { + BEZIER_CURVE_TO: 0, + MOVE_TO: 1, + LINE_TO: 2, + QUADRATIC_CURVE_TO: 3, + RESTORE: 4, + SAVE: 5, + SCALE: 6, + TRANSFORM: 7, + TRANSLATE: 8 +}; +var BaseFilterFactory = class { + addFilter(maps) { + return "none"; + } + addHCMFilter(fgColor, bgColor) { + return "none"; + } + addAlphaFilter(map) { + return "none"; + } + addLuminosityFilter(map) { + return "none"; + } + addHighlightHCMFilter(filterName, fgColor, bgColor, newFgColor, newBgColor) { + return "none"; + } + destroy(keepHCM = false) { + } +}; +var _enableHWA; +var BaseCanvasFactory = class { + constructor({ + enableHWA = false + } = {}) { + __privateAdd(this, _enableHWA, false); + __privateSet(this, _enableHWA, enableHWA); + } + create(width, height) { + if (width <= 0 || height <= 0) { + throw new Error("Invalid canvas size"); + } + const canvas = this._createCanvas(width, height); + return { + canvas, + context: canvas.getContext("2d", { + willReadFrequently: !__privateGet(this, _enableHWA) + }) + }; + } + reset(canvasAndContext, width, height) { + if (!canvasAndContext.canvas) { + throw new Error("Canvas is not specified"); + } + if (width <= 0 || height <= 0) { + throw new Error("Invalid canvas size"); + } + canvasAndContext.canvas.width = width; + canvasAndContext.canvas.height = height; + } + destroy(canvasAndContext) { + if (!canvasAndContext.canvas) { + throw new Error("Canvas is not specified"); + } + canvasAndContext.canvas.width = 0; + canvasAndContext.canvas.height = 0; + canvasAndContext.canvas = null; + canvasAndContext.context = null; + } + _createCanvas(width, height) { + unreachable("Abstract method `_createCanvas` called."); + } +}; +_enableHWA = new WeakMap(); +var BaseCMapReaderFactory = class { + constructor({ + baseUrl = null, + isCompressed = true + }) { + this.baseUrl = baseUrl; + this.isCompressed = isCompressed; + } + async fetch({ + name + }) { + if (!this.baseUrl) { + throw new Error("Ensure that the `cMapUrl` and `cMapPacked` API parameters are provided."); + } + if (!name) { + throw new Error("CMap name must be specified."); + } + const url = this.baseUrl + name + (this.isCompressed ? ".bcmap" : ""); + const compressionType = this.isCompressed ? CMapCompressionType.BINARY : CMapCompressionType.NONE; + return this._fetchData(url, compressionType).catch((reason) => { + throw new Error(`Unable to load ${this.isCompressed ? "binary " : ""}CMap at: ${url}`); + }); + } + _fetchData(url, compressionType) { + unreachable("Abstract method `_fetchData` called."); + } +}; +var BaseStandardFontDataFactory = class { + constructor({ + baseUrl = null + }) { + this.baseUrl = baseUrl; + } + async fetch({ + filename + }) { + if (!this.baseUrl) { + throw new Error("Ensure that the `standardFontDataUrl` API parameter is provided."); + } + if (!filename) { + throw new Error("Font filename must be specified."); + } + const url = `${this.baseUrl}${filename}`; + return this._fetchData(url).catch((reason) => { + throw new Error(`Unable to load font data at: ${url}`); + }); + } + _fetchData(url) { + unreachable("Abstract method `_fetchData` called."); + } +}; +var BaseSVGFactory = class { + create(width, height, skipDimensions = false) { + if (width <= 0 || height <= 0) { + throw new Error("Invalid SVG dimensions"); + } + const svg = this._createSVG("svg:svg"); + svg.setAttribute("version", "1.1"); + if (!skipDimensions) { + svg.setAttribute("width", `${width}px`); + svg.setAttribute("height", `${height}px`); + } + svg.setAttribute("preserveAspectRatio", "none"); + svg.setAttribute("viewBox", `0 0 ${width} ${height}`); + return svg; + } + createElement(type) { + if (typeof type !== "string") { + throw new Error("Invalid SVG element type"); + } + return this._createSVG(type); + } + _createSVG(type) { + unreachable("Abstract method `_createSVG` called."); + } +}; +var SVG_NS = "http://www.w3.org/2000/svg"; +var _PixelsPerInch = class { +}; +var PixelsPerInch = _PixelsPerInch; +__publicField(PixelsPerInch, "CSS", 96); +__publicField(PixelsPerInch, "PDF", 72); +__publicField(PixelsPerInch, "PDF_TO_CSS_UNITS", _PixelsPerInch.CSS / _PixelsPerInch.PDF); +var _baseUrl, __cache, __defs, _docId, _document, __hcmCache, _id, _cache, cache_get, _hcmCache, hcmCache_get, _defs, defs_get, _createTables, createTables_fn, _createUrl, createUrl_fn, _addLuminosityConversion, addLuminosityConversion_fn, _addGrayConversion, addGrayConversion_fn, _createFilter, createFilter_fn, _appendFeFunc, appendFeFunc_fn, _addTransferMapConversion, addTransferMapConversion_fn, _addTransferMapAlphaConversion, addTransferMapAlphaConversion_fn, _getRGB, getRGB_fn; +var DOMFilterFactory = class extends BaseFilterFactory { + constructor({ + docId, + ownerDocument = globalThis.document + } = {}) { + super(); + __privateAdd(this, _cache); + __privateAdd(this, _hcmCache); + __privateAdd(this, _defs); + __privateAdd(this, _createTables); + __privateAdd(this, _createUrl); + __privateAdd(this, _addLuminosityConversion); + __privateAdd(this, _addGrayConversion); + __privateAdd(this, _createFilter); + __privateAdd(this, _appendFeFunc); + __privateAdd(this, _addTransferMapConversion); + __privateAdd(this, _addTransferMapAlphaConversion); + __privateAdd(this, _getRGB); + __privateAdd(this, _baseUrl, void 0); + __privateAdd(this, __cache, void 0); + __privateAdd(this, __defs, void 0); + __privateAdd(this, _docId, void 0); + __privateAdd(this, _document, void 0); + __privateAdd(this, __hcmCache, void 0); + __privateAdd(this, _id, 0); + __privateSet(this, _docId, docId); + __privateSet(this, _document, ownerDocument); + } + addFilter(maps) { + if (!maps) { + return "none"; + } + let value = __privateGet(this, _cache, cache_get).get(maps); + if (value) { + return value; + } + const [tableR, tableG, tableB] = __privateMethod(this, _createTables, createTables_fn).call(this, maps); + const key = maps.length === 1 ? tableR : `${tableR}${tableG}${tableB}`; + value = __privateGet(this, _cache, cache_get).get(key); + if (value) { + __privateGet(this, _cache, cache_get).set(maps, value); + return value; + } + const id = `g_${__privateGet(this, _docId)}_transfer_map_${__privateWrapper(this, _id)._++}`; + const url = __privateMethod(this, _createUrl, createUrl_fn).call(this, id); + __privateGet(this, _cache, cache_get).set(maps, url); + __privateGet(this, _cache, cache_get).set(key, url); + const filter = __privateMethod(this, _createFilter, createFilter_fn).call(this, id); + __privateMethod(this, _addTransferMapConversion, addTransferMapConversion_fn).call(this, tableR, tableG, tableB, filter); + return url; + } + addHCMFilter(fgColor, bgColor) { + var _a2; + const key = `${fgColor}-${bgColor}`; + const filterName = "base"; + let info2 = __privateGet(this, _hcmCache, hcmCache_get).get(filterName); + if ((info2 == null ? void 0 : info2.key) === key) { + return info2.url; + } + if (info2) { + (_a2 = info2.filter) == null ? void 0 : _a2.remove(); + info2.key = key; + info2.url = "none"; + info2.filter = null; + } else { + info2 = { + key, + url: "none", + filter: null + }; + __privateGet(this, _hcmCache, hcmCache_get).set(filterName, info2); + } + if (!fgColor || !bgColor) { + return info2.url; + } + const fgRGB = __privateMethod(this, _getRGB, getRGB_fn).call(this, fgColor); + fgColor = Util.makeHexColor(...fgRGB); + const bgRGB = __privateMethod(this, _getRGB, getRGB_fn).call(this, bgColor); + bgColor = Util.makeHexColor(...bgRGB); + __privateGet(this, _defs, defs_get).style.color = ""; + if (fgColor === "#000000" && bgColor === "#ffffff" || fgColor === bgColor) { + return info2.url; + } + const map = new Array(256); + for (let i = 0; i <= 255; i++) { + const x = i / 255; + map[i] = x <= 0.03928 ? x / 12.92 : ((x + 0.055) / 1.055) ** 2.4; + } + const table = map.join(","); + const id = `g_${__privateGet(this, _docId)}_hcm_filter`; + const filter = info2.filter = __privateMethod(this, _createFilter, createFilter_fn).call(this, id); + __privateMethod(this, _addTransferMapConversion, addTransferMapConversion_fn).call(this, table, table, table, filter); + __privateMethod(this, _addGrayConversion, addGrayConversion_fn).call(this, filter); + const getSteps = (c, n) => { + const start = fgRGB[c] / 255; + const end = bgRGB[c] / 255; + const arr = new Array(n + 1); + for (let i = 0; i <= n; i++) { + arr[i] = start + i / n * (end - start); + } + return arr.join(","); + }; + __privateMethod(this, _addTransferMapConversion, addTransferMapConversion_fn).call(this, getSteps(0, 5), getSteps(1, 5), getSteps(2, 5), filter); + info2.url = __privateMethod(this, _createUrl, createUrl_fn).call(this, id); + return info2.url; + } + addAlphaFilter(map) { + let value = __privateGet(this, _cache, cache_get).get(map); + if (value) { + return value; + } + const [tableA] = __privateMethod(this, _createTables, createTables_fn).call(this, [map]); + const key = `alpha_${tableA}`; + value = __privateGet(this, _cache, cache_get).get(key); + if (value) { + __privateGet(this, _cache, cache_get).set(map, value); + return value; + } + const id = `g_${__privateGet(this, _docId)}_alpha_map_${__privateWrapper(this, _id)._++}`; + const url = __privateMethod(this, _createUrl, createUrl_fn).call(this, id); + __privateGet(this, _cache, cache_get).set(map, url); + __privateGet(this, _cache, cache_get).set(key, url); + const filter = __privateMethod(this, _createFilter, createFilter_fn).call(this, id); + __privateMethod(this, _addTransferMapAlphaConversion, addTransferMapAlphaConversion_fn).call(this, tableA, filter); + return url; + } + addLuminosityFilter(map) { + let value = __privateGet(this, _cache, cache_get).get(map || "luminosity"); + if (value) { + return value; + } + let tableA, key; + if (map) { + [tableA] = __privateMethod(this, _createTables, createTables_fn).call(this, [map]); + key = `luminosity_${tableA}`; + } else { + key = "luminosity"; + } + value = __privateGet(this, _cache, cache_get).get(key); + if (value) { + __privateGet(this, _cache, cache_get).set(map, value); + return value; + } + const id = `g_${__privateGet(this, _docId)}_luminosity_map_${__privateWrapper(this, _id)._++}`; + const url = __privateMethod(this, _createUrl, createUrl_fn).call(this, id); + __privateGet(this, _cache, cache_get).set(map, url); + __privateGet(this, _cache, cache_get).set(key, url); + const filter = __privateMethod(this, _createFilter, createFilter_fn).call(this, id); + __privateMethod(this, _addLuminosityConversion, addLuminosityConversion_fn).call(this, filter); + if (map) { + __privateMethod(this, _addTransferMapAlphaConversion, addTransferMapAlphaConversion_fn).call(this, tableA, filter); + } + return url; + } + addHighlightHCMFilter(filterName, fgColor, bgColor, newFgColor, newBgColor) { + var _a2; + const key = `${fgColor}-${bgColor}-${newFgColor}-${newBgColor}`; + let info2 = __privateGet(this, _hcmCache, hcmCache_get).get(filterName); + if ((info2 == null ? void 0 : info2.key) === key) { + return info2.url; + } + if (info2) { + (_a2 = info2.filter) == null ? void 0 : _a2.remove(); + info2.key = key; + info2.url = "none"; + info2.filter = null; + } else { + info2 = { + key, + url: "none", + filter: null + }; + __privateGet(this, _hcmCache, hcmCache_get).set(filterName, info2); + } + if (!fgColor || !bgColor) { + return info2.url; + } + const [fgRGB, bgRGB] = [fgColor, bgColor].map(__privateMethod(this, _getRGB, getRGB_fn).bind(this)); + let fgGray = Math.round(0.2126 * fgRGB[0] + 0.7152 * fgRGB[1] + 0.0722 * fgRGB[2]); + let bgGray = Math.round(0.2126 * bgRGB[0] + 0.7152 * bgRGB[1] + 0.0722 * bgRGB[2]); + let [newFgRGB, newBgRGB] = [newFgColor, newBgColor].map(__privateMethod(this, _getRGB, getRGB_fn).bind(this)); + if (bgGray < fgGray) { + [fgGray, bgGray, newFgRGB, newBgRGB] = [bgGray, fgGray, newBgRGB, newFgRGB]; + } + __privateGet(this, _defs, defs_get).style.color = ""; + const getSteps = (fg, bg, n) => { + const arr = new Array(256); + const step = (bgGray - fgGray) / n; + const newStart = fg / 255; + const newStep = (bg - fg) / (255 * n); + let prev = 0; + for (let i = 0; i <= n; i++) { + const k = Math.round(fgGray + i * step); + const value = newStart + i * newStep; + for (let j = prev; j <= k; j++) { + arr[j] = value; + } + prev = k + 1; + } + for (let i = prev; i < 256; i++) { + arr[i] = arr[prev - 1]; + } + return arr.join(","); + }; + const id = `g_${__privateGet(this, _docId)}_hcm_${filterName}_filter`; + const filter = info2.filter = __privateMethod(this, _createFilter, createFilter_fn).call(this, id); + __privateMethod(this, _addGrayConversion, addGrayConversion_fn).call(this, filter); + __privateMethod(this, _addTransferMapConversion, addTransferMapConversion_fn).call(this, getSteps(newFgRGB[0], newBgRGB[0], 5), getSteps(newFgRGB[1], newBgRGB[1], 5), getSteps(newFgRGB[2], newBgRGB[2], 5), filter); + info2.url = __privateMethod(this, _createUrl, createUrl_fn).call(this, id); + return info2.url; + } + destroy(keepHCM = false) { + if (keepHCM && __privateGet(this, _hcmCache, hcmCache_get).size !== 0) { + return; + } + if (__privateGet(this, __defs)) { + __privateGet(this, __defs).parentNode.parentNode.remove(); + __privateSet(this, __defs, null); + } + if (__privateGet(this, __cache)) { + __privateGet(this, __cache).clear(); + __privateSet(this, __cache, null); + } + __privateSet(this, _id, 0); + } +}; +_baseUrl = new WeakMap(); +__cache = new WeakMap(); +__defs = new WeakMap(); +_docId = new WeakMap(); +_document = new WeakMap(); +__hcmCache = new WeakMap(); +_id = new WeakMap(); +_cache = new WeakSet(); +cache_get = function() { + return __privateGet(this, __cache) || __privateSet(this, __cache, /* @__PURE__ */ new Map()); +}; +_hcmCache = new WeakSet(); +hcmCache_get = function() { + return __privateGet(this, __hcmCache) || __privateSet(this, __hcmCache, /* @__PURE__ */ new Map()); +}; +_defs = new WeakSet(); +defs_get = function() { + if (!__privateGet(this, __defs)) { + const div = __privateGet(this, _document).createElement("div"); + const { + style + } = div; + style.visibility = "hidden"; + style.contain = "strict"; + style.width = style.height = 0; + style.position = "absolute"; + style.top = style.left = 0; + style.zIndex = -1; + const svg = __privateGet(this, _document).createElementNS(SVG_NS, "svg"); + svg.setAttribute("width", 0); + svg.setAttribute("height", 0); + __privateSet(this, __defs, __privateGet(this, _document).createElementNS(SVG_NS, "defs")); + div.append(svg); + svg.append(__privateGet(this, __defs)); + __privateGet(this, _document).body.append(div); + } + return __privateGet(this, __defs); +}; +_createTables = new WeakSet(); +createTables_fn = function(maps) { + if (maps.length === 1) { + const mapR2 = maps[0]; + const buffer = new Array(256); + for (let i = 0; i < 256; i++) { + buffer[i] = mapR2[i] / 255; + } + const table = buffer.join(","); + return [table, table, table]; + } + const [mapR, mapG, mapB] = maps; + const bufferR = new Array(256); + const bufferG = new Array(256); + const bufferB = new Array(256); + for (let i = 0; i < 256; i++) { + bufferR[i] = mapR[i] / 255; + bufferG[i] = mapG[i] / 255; + bufferB[i] = mapB[i] / 255; + } + return [bufferR.join(","), bufferG.join(","), bufferB.join(",")]; +}; +_createUrl = new WeakSet(); +createUrl_fn = function(id) { + if (__privateGet(this, _baseUrl) === void 0) { + __privateSet(this, _baseUrl, ""); + const url = __privateGet(this, _document).URL; + if (url !== __privateGet(this, _document).baseURI) { + if (isDataScheme(url)) { + warn('#createUrl: ignore "data:"-URL for performance reasons.'); + } else { + __privateSet(this, _baseUrl, url.split("#", 1)[0]); + } + } + } + return `url(${__privateGet(this, _baseUrl)}#${id})`; +}; +_addLuminosityConversion = new WeakSet(); +addLuminosityConversion_fn = function(filter) { + const feColorMatrix = __privateGet(this, _document).createElementNS(SVG_NS, "feColorMatrix"); + feColorMatrix.setAttribute("type", "matrix"); + feColorMatrix.setAttribute("values", "0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.3 0.59 0.11 0 0"); + filter.append(feColorMatrix); +}; +_addGrayConversion = new WeakSet(); +addGrayConversion_fn = function(filter) { + const feColorMatrix = __privateGet(this, _document).createElementNS(SVG_NS, "feColorMatrix"); + feColorMatrix.setAttribute("type", "matrix"); + feColorMatrix.setAttribute("values", "0.2126 0.7152 0.0722 0 0 0.2126 0.7152 0.0722 0 0 0.2126 0.7152 0.0722 0 0 0 0 0 1 0"); + filter.append(feColorMatrix); +}; +_createFilter = new WeakSet(); +createFilter_fn = function(id) { + const filter = __privateGet(this, _document).createElementNS(SVG_NS, "filter"); + filter.setAttribute("color-interpolation-filters", "sRGB"); + filter.setAttribute("id", id); + __privateGet(this, _defs, defs_get).append(filter); + return filter; +}; +_appendFeFunc = new WeakSet(); +appendFeFunc_fn = function(feComponentTransfer, func, table) { + const feFunc = __privateGet(this, _document).createElementNS(SVG_NS, func); + feFunc.setAttribute("type", "discrete"); + feFunc.setAttribute("tableValues", table); + feComponentTransfer.append(feFunc); +}; +_addTransferMapConversion = new WeakSet(); +addTransferMapConversion_fn = function(rTable, gTable, bTable, filter) { + const feComponentTransfer = __privateGet(this, _document).createElementNS(SVG_NS, "feComponentTransfer"); + filter.append(feComponentTransfer); + __privateMethod(this, _appendFeFunc, appendFeFunc_fn).call(this, feComponentTransfer, "feFuncR", rTable); + __privateMethod(this, _appendFeFunc, appendFeFunc_fn).call(this, feComponentTransfer, "feFuncG", gTable); + __privateMethod(this, _appendFeFunc, appendFeFunc_fn).call(this, feComponentTransfer, "feFuncB", bTable); +}; +_addTransferMapAlphaConversion = new WeakSet(); +addTransferMapAlphaConversion_fn = function(aTable, filter) { + const feComponentTransfer = __privateGet(this, _document).createElementNS(SVG_NS, "feComponentTransfer"); + filter.append(feComponentTransfer); + __privateMethod(this, _appendFeFunc, appendFeFunc_fn).call(this, feComponentTransfer, "feFuncA", aTable); +}; +_getRGB = new WeakSet(); +getRGB_fn = function(color) { + __privateGet(this, _defs, defs_get).style.color = color; + return getRGB(getComputedStyle(__privateGet(this, _defs, defs_get)).getPropertyValue("color")); +}; +var DOMCanvasFactory = class extends BaseCanvasFactory { + constructor({ + ownerDocument = globalThis.document, + enableHWA = false + } = {}) { + super({ + enableHWA + }); + this._document = ownerDocument; + } + _createCanvas(width, height) { + const canvas = this._document.createElement("canvas"); + canvas.width = width; + canvas.height = height; + return canvas; + } +}; +async function fetchData(url, type = "text") { + if (isValidFetchUrl(url, document.baseURI)) { + const response = await fetch(url); + if (!response.ok) { + throw new Error(response.statusText); + } + switch (type) { + case "arraybuffer": + return response.arrayBuffer(); + case "blob": + return response.blob(); + case "json": + return response.json(); + } + return response.text(); + } + return new Promise((resolve, reject) => { + const request = new XMLHttpRequest(); + request.open("GET", url, true); + request.responseType = type; + request.onreadystatechange = () => { + if (request.readyState !== XMLHttpRequest.DONE) { + return; + } + if (request.status === 200 || request.status === 0) { + switch (type) { + case "arraybuffer": + case "blob": + case "json": + resolve(request.response); + return; + } + resolve(request.responseText); + return; + } + reject(new Error(request.statusText)); + }; + request.send(null); + }); +} +var DOMCMapReaderFactory = class extends BaseCMapReaderFactory { + _fetchData(url, compressionType) { + return fetchData(url, this.isCompressed ? "arraybuffer" : "text").then((data) => ({ + cMapData: data instanceof ArrayBuffer ? new Uint8Array(data) : stringToBytes(data), + compressionType + })); + } +}; +var DOMStandardFontDataFactory = class extends BaseStandardFontDataFactory { + _fetchData(url) { + return fetchData(url, "arraybuffer").then((data) => new Uint8Array(data)); + } +}; +var DOMSVGFactory = class extends BaseSVGFactory { + _createSVG(type) { + return document.createElementNS(SVG_NS, type); + } +}; +var PageViewport = class { + constructor({ + viewBox, + scale, + rotation, + offsetX = 0, + offsetY = 0, + dontFlip = false + }) { + this.viewBox = viewBox; + this.scale = scale; + this.rotation = rotation; + this.offsetX = offsetX; + this.offsetY = offsetY; + const centerX = (viewBox[2] + viewBox[0]) / 2; + const centerY = (viewBox[3] + viewBox[1]) / 2; + let rotateA, rotateB, rotateC, rotateD; + rotation %= 360; + if (rotation < 0) { + rotation += 360; + } + switch (rotation) { + case 180: + rotateA = -1; + rotateB = 0; + rotateC = 0; + rotateD = 1; + break; + case 90: + rotateA = 0; + rotateB = 1; + rotateC = 1; + rotateD = 0; + break; + case 270: + rotateA = 0; + rotateB = -1; + rotateC = -1; + rotateD = 0; + break; + case 0: + rotateA = 1; + rotateB = 0; + rotateC = 0; + rotateD = -1; + break; + default: + throw new Error("PageViewport: Invalid rotation, must be a multiple of 90 degrees."); + } + if (dontFlip) { + rotateC = -rotateC; + rotateD = -rotateD; + } + let offsetCanvasX, offsetCanvasY; + let width, height; + if (rotateA === 0) { + offsetCanvasX = Math.abs(centerY - viewBox[1]) * scale + offsetX; + offsetCanvasY = Math.abs(centerX - viewBox[0]) * scale + offsetY; + width = (viewBox[3] - viewBox[1]) * scale; + height = (viewBox[2] - viewBox[0]) * scale; + } else { + offsetCanvasX = Math.abs(centerX - viewBox[0]) * scale + offsetX; + offsetCanvasY = Math.abs(centerY - viewBox[1]) * scale + offsetY; + width = (viewBox[2] - viewBox[0]) * scale; + height = (viewBox[3] - viewBox[1]) * scale; + } + this.transform = [rotateA * scale, rotateB * scale, rotateC * scale, rotateD * scale, offsetCanvasX - rotateA * scale * centerX - rotateC * scale * centerY, offsetCanvasY - rotateB * scale * centerX - rotateD * scale * centerY]; + this.width = width; + this.height = height; + } + get rawDims() { + const { + viewBox + } = this; + return shadow(this, "rawDims", { + pageWidth: viewBox[2] - viewBox[0], + pageHeight: viewBox[3] - viewBox[1], + pageX: viewBox[0], + pageY: viewBox[1] + }); + } + clone({ + scale = this.scale, + rotation = this.rotation, + offsetX = this.offsetX, + offsetY = this.offsetY, + dontFlip = false + } = {}) { + return new PageViewport({ + viewBox: this.viewBox.slice(), + scale, + rotation, + offsetX, + offsetY, + dontFlip + }); + } + convertToViewportPoint(x, y) { + return Util.applyTransform([x, y], this.transform); + } + convertToViewportRectangle(rect) { + const topLeft = Util.applyTransform([rect[0], rect[1]], this.transform); + const bottomRight = Util.applyTransform([rect[2], rect[3]], this.transform); + return [topLeft[0], topLeft[1], bottomRight[0], bottomRight[1]]; + } + convertToPdfPoint(x, y) { + return Util.applyInverseTransform([x, y], this.transform); + } +}; +var RenderingCancelledException = class extends BaseException { + constructor(msg, extraDelay = 0) { + super(msg, "RenderingCancelledException"); + this.extraDelay = extraDelay; + } +}; +function isDataScheme(url) { + const ii = url.length; + let i = 0; + while (i < ii && url[i].trim() === "") { + i++; + } + return url.substring(i, i + 5).toLowerCase() === "data:"; +} +function isPdfFile(filename) { + return typeof filename === "string" && /\.pdf$/i.test(filename); +} +function getFilenameFromUrl(url) { + [url] = url.split(/[#?]/, 1); + return url.substring(url.lastIndexOf("/") + 1); +} +function getPdfFilenameFromUrl(url, defaultFilename = "document.pdf") { + if (typeof url !== "string") { + return defaultFilename; + } + if (isDataScheme(url)) { + warn('getPdfFilenameFromUrl: ignore "data:"-URL for performance reasons.'); + return defaultFilename; + } + const reURI = /^(?:(?:[^:]+:)?\/\/[^/]+)?([^?#]*)(\?[^#]*)?(#.*)?$/; + const reFilename = /[^/?#=]+\.pdf\b(?!.*\.pdf\b)/i; + const splitURI = reURI.exec(url); + let suggestedFilename = reFilename.exec(splitURI[1]) || reFilename.exec(splitURI[2]) || reFilename.exec(splitURI[3]); + if (suggestedFilename) { + suggestedFilename = suggestedFilename[0]; + if (suggestedFilename.includes("%")) { + try { + suggestedFilename = reFilename.exec(decodeURIComponent(suggestedFilename))[0]; + } catch (e) { + } + } + } + return suggestedFilename || defaultFilename; +} +var StatTimer = class { + constructor() { + __publicField(this, "started", /* @__PURE__ */ Object.create(null)); + __publicField(this, "times", []); + } + time(name) { + if (name in this.started) { + warn(`Timer is already running for ${name}`); + } + this.started[name] = Date.now(); + } + timeEnd(name) { + if (!(name in this.started)) { + warn(`Timer has not been started for ${name}`); + } + this.times.push({ + name, + start: this.started[name], + end: Date.now() + }); + delete this.started[name]; + } + toString() { + const outBuf = []; + let longest = 0; + for (const { + name + } of this.times) { + longest = Math.max(name.length, longest); + } + for (const { + name, + start, + end + } of this.times) { + outBuf.push(`${name.padEnd(longest)} ${end - start}ms +`); + } + return outBuf.join(""); + } +}; +function isValidFetchUrl(url, baseUrl) { + try { + const { + protocol + } = baseUrl ? new URL(url, baseUrl) : new URL(url); + return protocol === "http:" || protocol === "https:"; + } catch (e) { + return false; + } +} +function noContextMenu(e) { + e.preventDefault(); +} +var pdfDateStringRegex; +var PDFDateString = class { + static toDateObject(input) { + if (!input || typeof input !== "string") { + return null; + } + pdfDateStringRegex || (pdfDateStringRegex = new RegExp("^D:(\\d{4})(\\d{2})?(\\d{2})?(\\d{2})?(\\d{2})?(\\d{2})?([Z|+|-])?(\\d{2})?'?(\\d{2})?'?")); + const matches = pdfDateStringRegex.exec(input); + if (!matches) { + return null; + } + const year = parseInt(matches[1], 10); + let month = parseInt(matches[2], 10); + month = month >= 1 && month <= 12 ? month - 1 : 0; + let day = parseInt(matches[3], 10); + day = day >= 1 && day <= 31 ? day : 1; + let hour = parseInt(matches[4], 10); + hour = hour >= 0 && hour <= 23 ? hour : 0; + let minute = parseInt(matches[5], 10); + minute = minute >= 0 && minute <= 59 ? minute : 0; + let second = parseInt(matches[6], 10); + second = second >= 0 && second <= 59 ? second : 0; + const universalTimeRelation = matches[7] || "Z"; + let offsetHour = parseInt(matches[8], 10); + offsetHour = offsetHour >= 0 && offsetHour <= 23 ? offsetHour : 0; + let offsetMinute = parseInt(matches[9], 10) || 0; + offsetMinute = offsetMinute >= 0 && offsetMinute <= 59 ? offsetMinute : 0; + if (universalTimeRelation === "-") { + hour += offsetHour; + minute += offsetMinute; + } else if (universalTimeRelation === "+") { + hour -= offsetHour; + minute -= offsetMinute; + } + return new Date(Date.UTC(year, month, day, hour, minute, second)); + } +}; +function getXfaPageViewport(xfaPage, { + scale = 1, + rotation = 0 +}) { + const { + width, + height + } = xfaPage.attributes.style; + const viewBox = [0, 0, parseInt(width), parseInt(height)]; + return new PageViewport({ + viewBox, + scale, + rotation + }); +} +function getRGB(color) { + if (color.startsWith("#")) { + const colorRGB = parseInt(color.slice(1), 16); + return [(colorRGB & 16711680) >> 16, (colorRGB & 65280) >> 8, colorRGB & 255]; + } + if (color.startsWith("rgb(")) { + return color.slice(4, -1).split(",").map((x) => parseInt(x)); + } + if (color.startsWith("rgba(")) { + return color.slice(5, -1).split(",").map((x) => parseInt(x)).slice(0, 3); + } + warn(`Not a valid color format: "${color}"`); + return [0, 0, 0]; +} +function getColorValues(colors) { + const span = document.createElement("span"); + span.style.visibility = "hidden"; + document.body.append(span); + for (const name of colors.keys()) { + span.style.color = name; + const computedColor = window.getComputedStyle(span).color; + colors.set(name, getRGB(computedColor)); + } + span.remove(); +} +function getCurrentTransform(ctx) { + const { + a, + b, + c, + d, + e, + f + } = ctx.getTransform(); + return [a, b, c, d, e, f]; +} +function getCurrentTransformInverse(ctx) { + const { + a, + b, + c, + d, + e, + f + } = ctx.getTransform().invertSelf(); + return [a, b, c, d, e, f]; +} +function setLayerDimensions(div, viewport, mustFlip = false, mustRotate = true) { + if (viewport instanceof PageViewport) { + const { + pageWidth, + pageHeight + } = viewport.rawDims; + const { + style + } = div; + const useRound = util_FeatureTest.isCSSRoundSupported; + const w = `var(--scale-factor) * ${pageWidth}px`, h = `var(--scale-factor) * ${pageHeight}px`; + const widthStr = useRound ? `round(${w}, 1px)` : `calc(${w})`, heightStr = useRound ? `round(${h}, 1px)` : `calc(${h})`; + if (!mustFlip || viewport.rotation % 180 === 0) { + style.width = widthStr; + style.height = heightStr; + } else { + style.width = heightStr; + style.height = widthStr; + } + } + if (mustRotate) { + div.setAttribute("data-main-rotation", viewport.rotation); + } +} +var _toolbar, _colorPicker, _editor, _buttons, _altText, _l10nRemove, _pointerDown, pointerDown_fn, _focusIn, focusIn_fn, _focusOut, focusOut_fn, _addListenersToElement, addListenersToElement_fn, _addDeleteButton, addDeleteButton_fn, _divider, divider_get; +var _EditorToolbar = class { + constructor(editor) { + __privateAdd(this, _focusIn); + __privateAdd(this, _focusOut); + __privateAdd(this, _addListenersToElement); + __privateAdd(this, _addDeleteButton); + __privateAdd(this, _divider); + __privateAdd(this, _toolbar, null); + __privateAdd(this, _colorPicker, null); + __privateAdd(this, _editor, void 0); + __privateAdd(this, _buttons, null); + __privateAdd(this, _altText, null); + __privateSet(this, _editor, editor); + __privateGet(_EditorToolbar, _l10nRemove) || __privateSet(_EditorToolbar, _l10nRemove, Object.freeze({ + freetext: "pdfjs-editor-remove-freetext-button", + highlight: "pdfjs-editor-remove-highlight-button", + ink: "pdfjs-editor-remove-ink-button", + stamp: "pdfjs-editor-remove-stamp-button" + })); + } + render() { + const editToolbar = __privateSet(this, _toolbar, document.createElement("div")); + editToolbar.className = "editToolbar"; + editToolbar.setAttribute("role", "toolbar"); + const signal = __privateGet(this, _editor)._uiManager._signal; + editToolbar.addEventListener("contextmenu", noContextMenu, { + signal + }); + editToolbar.addEventListener("pointerdown", __privateMethod(_EditorToolbar, _pointerDown, pointerDown_fn), { + signal + }); + const buttons = __privateSet(this, _buttons, document.createElement("div")); + buttons.className = "buttons"; + editToolbar.append(buttons); + const position = __privateGet(this, _editor).toolbarPosition; + if (position) { + const { + style + } = editToolbar; + const x = __privateGet(this, _editor)._uiManager.direction === "ltr" ? 1 - position[0] : position[0]; + style.insetInlineEnd = `${100 * x}%`; + style.top = `calc(${100 * position[1]}% + var(--editor-toolbar-vert-offset))`; + } + __privateMethod(this, _addDeleteButton, addDeleteButton_fn).call(this); + return editToolbar; + } + hide() { + var _a2; + __privateGet(this, _toolbar).classList.add("hidden"); + (_a2 = __privateGet(this, _colorPicker)) == null ? void 0 : _a2.hideDropdown(); + } + show() { + var _a2; + __privateGet(this, _toolbar).classList.remove("hidden"); + (_a2 = __privateGet(this, _altText)) == null ? void 0 : _a2.shown(); + } + async addAltText(altText) { + const button = await altText.render(); + __privateMethod(this, _addListenersToElement, addListenersToElement_fn).call(this, button); + __privateGet(this, _buttons).prepend(button, __privateGet(this, _divider, divider_get)); + __privateSet(this, _altText, altText); + } + addColorPicker(colorPicker) { + __privateSet(this, _colorPicker, colorPicker); + const button = colorPicker.renderButton(); + __privateMethod(this, _addListenersToElement, addListenersToElement_fn).call(this, button); + __privateGet(this, _buttons).prepend(button, __privateGet(this, _divider, divider_get)); + } + remove() { + var _a2; + __privateGet(this, _toolbar).remove(); + (_a2 = __privateGet(this, _colorPicker)) == null ? void 0 : _a2.destroy(); + __privateSet(this, _colorPicker, null); + } +}; +var EditorToolbar = _EditorToolbar; +_toolbar = new WeakMap(); +_colorPicker = new WeakMap(); +_editor = new WeakMap(); +_buttons = new WeakMap(); +_altText = new WeakMap(); +_l10nRemove = new WeakMap(); +_pointerDown = new WeakSet(); +pointerDown_fn = function(e) { + e.stopPropagation(); +}; +_focusIn = new WeakSet(); +focusIn_fn = function(e) { + __privateGet(this, _editor)._focusEventsAllowed = false; + e.preventDefault(); + e.stopPropagation(); +}; +_focusOut = new WeakSet(); +focusOut_fn = function(e) { + __privateGet(this, _editor)._focusEventsAllowed = true; + e.preventDefault(); + e.stopPropagation(); +}; +_addListenersToElement = new WeakSet(); +addListenersToElement_fn = function(element2) { + const signal = __privateGet(this, _editor)._uiManager._signal; + element2.addEventListener("focusin", __privateMethod(this, _focusIn, focusIn_fn).bind(this), { + capture: true, + signal + }); + element2.addEventListener("focusout", __privateMethod(this, _focusOut, focusOut_fn).bind(this), { + capture: true, + signal + }); + element2.addEventListener("contextmenu", noContextMenu, { + signal + }); +}; +_addDeleteButton = new WeakSet(); +addDeleteButton_fn = function() { + const { + editorType, + _uiManager: _uiManager4 + } = __privateGet(this, _editor); + const button = document.createElement("button"); + button.className = "delete"; + button.tabIndex = 0; + button.setAttribute("data-l10n-id", __privateGet(_EditorToolbar, _l10nRemove)[editorType]); + __privateMethod(this, _addListenersToElement, addListenersToElement_fn).call(this, button); + button.addEventListener("click", (e) => { + _uiManager4.delete(); + }, { + signal: _uiManager4._signal + }); + __privateGet(this, _buttons).append(button); +}; +_divider = new WeakSet(); +divider_get = function() { + const divider = document.createElement("div"); + divider.className = "divider"; + return divider; +}; +__privateAdd(EditorToolbar, _pointerDown); +__privateAdd(EditorToolbar, _l10nRemove, null); +var _buttons2, _toolbar2, _uiManager, _render, render_fn, _getLastPoint, getLastPoint_fn, _addHighlightButton, addHighlightButton_fn; +var HighlightToolbar = class { + constructor(uiManager) { + __privateAdd(this, _render); + __privateAdd(this, _getLastPoint); + __privateAdd(this, _addHighlightButton); + __privateAdd(this, _buttons2, null); + __privateAdd(this, _toolbar2, null); + __privateAdd(this, _uiManager, void 0); + __privateSet(this, _uiManager, uiManager); + } + show(parent, boxes, isLTR) { + const [x, y] = __privateMethod(this, _getLastPoint, getLastPoint_fn).call(this, boxes, isLTR); + const { + style + } = __privateGet(this, _toolbar2) || __privateSet(this, _toolbar2, __privateMethod(this, _render, render_fn).call(this)); + parent.append(__privateGet(this, _toolbar2)); + style.insetInlineEnd = `${100 * x}%`; + style.top = `calc(${100 * y}% + var(--editor-toolbar-vert-offset))`; + } + hide() { + __privateGet(this, _toolbar2).remove(); + } +}; +_buttons2 = new WeakMap(); +_toolbar2 = new WeakMap(); +_uiManager = new WeakMap(); +_render = new WeakSet(); +render_fn = function() { + const editToolbar = __privateSet(this, _toolbar2, document.createElement("div")); + editToolbar.className = "editToolbar"; + editToolbar.setAttribute("role", "toolbar"); + editToolbar.addEventListener("contextmenu", noContextMenu, { + signal: __privateGet(this, _uiManager)._signal + }); + const buttons = __privateSet(this, _buttons2, document.createElement("div")); + buttons.className = "buttons"; + editToolbar.append(buttons); + __privateMethod(this, _addHighlightButton, addHighlightButton_fn).call(this); + return editToolbar; +}; +_getLastPoint = new WeakSet(); +getLastPoint_fn = function(boxes, isLTR) { + let lastY = 0; + let lastX = 0; + for (const box of boxes) { + const y = box.y + box.height; + if (y < lastY) { + continue; + } + const x = box.x + (isLTR ? box.width : 0); + if (y > lastY) { + lastX = x; + lastY = y; + continue; + } + if (isLTR) { + if (x > lastX) { + lastX = x; + } + } else if (x < lastX) { + lastX = x; + } + } + return [isLTR ? 1 - lastX : lastX, lastY]; +}; +_addHighlightButton = new WeakSet(); +addHighlightButton_fn = function() { + const button = document.createElement("button"); + button.className = "highlightButton"; + button.tabIndex = 0; + button.setAttribute("data-l10n-id", `pdfjs-highlight-floating-button1`); + const span = document.createElement("span"); + button.append(span); + span.className = "visuallyHidden"; + span.setAttribute("data-l10n-id", "pdfjs-highlight-floating-button-label"); + const signal = __privateGet(this, _uiManager)._signal; + button.addEventListener("contextmenu", noContextMenu, { + signal + }); + button.addEventListener("click", () => { + __privateGet(this, _uiManager).highlightSelection("floating_button"); + }, { + signal + }); + __privateGet(this, _buttons2).append(button); +}; +function bindEvents(obj, element2, names) { + for (const name of names) { + element2.addEventListener(name, obj[name].bind(obj)); + } +} +function opacityToHex(opacity) { + return Math.round(Math.min(255, Math.max(1, 255 * opacity))).toString(16).padStart(2, "0"); +} +var _id2; +var IdManager = class { + constructor() { + __privateAdd(this, _id2, 0); + } + get id() { + return `${AnnotationEditorPrefix}${__privateWrapper(this, _id2)._++}`; + } +}; +_id2 = new WeakMap(); +var _baseId, _id3, _cache2, _get, get_fn; +var _ImageManager = class { + constructor() { + __privateAdd(this, _get); + __privateAdd(this, _baseId, getUuid()); + __privateAdd(this, _id3, 0); + __privateAdd(this, _cache2, null); + } + static get _isSVGFittingCanvas() { + const svg = `data:image/svg+xml;charset=UTF-8,`; + const canvas = new OffscreenCanvas(1, 3); + const ctx = canvas.getContext("2d", { + willReadFrequently: true + }); + const image = new Image(); + image.src = svg; + const promise = image.decode().then(() => { + ctx.drawImage(image, 0, 0, 1, 1, 0, 0, 1, 3); + return new Uint32Array(ctx.getImageData(0, 0, 1, 1).data.buffer)[0] === 0; + }); + return shadow(this, "_isSVGFittingCanvas", promise); + } + async getFromFile(file) { + const { + lastModified, + name, + size, + type + } = file; + return __privateMethod(this, _get, get_fn).call(this, `${lastModified}_${name}_${size}_${type}`, file); + } + async getFromUrl(url) { + return __privateMethod(this, _get, get_fn).call(this, url, url); + } + async getFromId(id) { + __privateGet(this, _cache2) || __privateSet(this, _cache2, /* @__PURE__ */ new Map()); + const data = __privateGet(this, _cache2).get(id); + if (!data) { + return null; + } + if (data.bitmap) { + data.refCounter += 1; + return data; + } + if (data.file) { + return this.getFromFile(data.file); + } + return this.getFromUrl(data.url); + } + getSvgUrl(id) { + const data = __privateGet(this, _cache2).get(id); + if (!(data == null ? void 0 : data.isSvg)) { + return null; + } + return data.svgUrl; + } + deleteId(id) { + __privateGet(this, _cache2) || __privateSet(this, _cache2, /* @__PURE__ */ new Map()); + const data = __privateGet(this, _cache2).get(id); + if (!data) { + return; + } + data.refCounter -= 1; + if (data.refCounter !== 0) { + return; + } + data.bitmap = null; + } + isValidId(id) { + return id.startsWith(`image_${__privateGet(this, _baseId)}_`); + } +}; +var ImageManager = _ImageManager; +_baseId = new WeakMap(); +_id3 = new WeakMap(); +_cache2 = new WeakMap(); +_get = new WeakSet(); +get_fn = async function(key, rawData) { + __privateGet(this, _cache2) || __privateSet(this, _cache2, /* @__PURE__ */ new Map()); + let data = __privateGet(this, _cache2).get(key); + if (data === null) { + return null; + } + if (data == null ? void 0 : data.bitmap) { + data.refCounter += 1; + return data; + } + try { + data || (data = { + bitmap: null, + id: `image_${__privateGet(this, _baseId)}_${__privateWrapper(this, _id3)._++}`, + refCounter: 0, + isSvg: false + }); + let image; + if (typeof rawData === "string") { + data.url = rawData; + image = await fetchData(rawData, "blob"); + } else { + image = data.file = rawData; + } + if (image.type === "image/svg+xml") { + const mustRemoveAspectRatioPromise = _ImageManager._isSVGFittingCanvas; + const fileReader = new FileReader(); + const imageElement = new Image(); + const imagePromise = new Promise((resolve, reject) => { + imageElement.onload = () => { + data.bitmap = imageElement; + data.isSvg = true; + resolve(); + }; + fileReader.onload = async () => { + const url = data.svgUrl = fileReader.result; + imageElement.src = await mustRemoveAspectRatioPromise ? `${url}#svgView(preserveAspectRatio(none))` : url; + }; + imageElement.onerror = fileReader.onerror = reject; + }); + fileReader.readAsDataURL(image); + await imagePromise; + } else { + data.bitmap = await createImageBitmap(image); + } + data.refCounter = 1; + } catch (e) { + console.error(e); + data = null; + } + __privateGet(this, _cache2).set(key, data); + if (data) { + __privateGet(this, _cache2).set(data.id, data); + } + return data; +}; +var _commands, _locked, _maxSize, _position; +var CommandManager = class { + constructor(maxSize = 128) { + __privateAdd(this, _commands, []); + __privateAdd(this, _locked, false); + __privateAdd(this, _maxSize, void 0); + __privateAdd(this, _position, -1); + __privateSet(this, _maxSize, maxSize); + } + add({ + cmd, + undo, + post, + mustExec, + type = NaN, + overwriteIfSameType = false, + keepUndo = false + }) { + if (mustExec) { + cmd(); + } + if (__privateGet(this, _locked)) { + return; + } + const save = { + cmd, + undo, + post, + type + }; + if (__privateGet(this, _position) === -1) { + if (__privateGet(this, _commands).length > 0) { + __privateGet(this, _commands).length = 0; + } + __privateSet(this, _position, 0); + __privateGet(this, _commands).push(save); + return; + } + if (overwriteIfSameType && __privateGet(this, _commands)[__privateGet(this, _position)].type === type) { + if (keepUndo) { + save.undo = __privateGet(this, _commands)[__privateGet(this, _position)].undo; + } + __privateGet(this, _commands)[__privateGet(this, _position)] = save; + return; + } + const next = __privateGet(this, _position) + 1; + if (next === __privateGet(this, _maxSize)) { + __privateGet(this, _commands).splice(0, 1); + } else { + __privateSet(this, _position, next); + if (next < __privateGet(this, _commands).length) { + __privateGet(this, _commands).splice(next); + } + } + __privateGet(this, _commands).push(save); + } + undo() { + if (__privateGet(this, _position) === -1) { + return; + } + __privateSet(this, _locked, true); + const { + undo, + post + } = __privateGet(this, _commands)[__privateGet(this, _position)]; + undo(); + post == null ? void 0 : post(); + __privateSet(this, _locked, false); + __privateSet(this, _position, __privateGet(this, _position) - 1); + } + redo() { + if (__privateGet(this, _position) < __privateGet(this, _commands).length - 1) { + __privateSet(this, _position, __privateGet(this, _position) + 1); + __privateSet(this, _locked, true); + const { + cmd, + post + } = __privateGet(this, _commands)[__privateGet(this, _position)]; + cmd(); + post == null ? void 0 : post(); + __privateSet(this, _locked, false); + } + } + hasSomethingToUndo() { + return __privateGet(this, _position) !== -1; + } + hasSomethingToRedo() { + return __privateGet(this, _position) < __privateGet(this, _commands).length - 1; + } + destroy() { + __privateSet(this, _commands, null); + } +}; +_commands = new WeakMap(); +_locked = new WeakMap(); +_maxSize = new WeakMap(); +_position = new WeakMap(); +var _serialize, serialize_fn; +var KeyboardManager = class { + constructor(callbacks) { + __privateAdd(this, _serialize); + this.buffer = []; + this.callbacks = /* @__PURE__ */ new Map(); + this.allKeys = /* @__PURE__ */ new Set(); + const { + isMac + } = util_FeatureTest.platform; + for (const [keys, callback, options = {}] of callbacks) { + for (const key of keys) { + const isMacKey = key.startsWith("mac+"); + if (isMac && isMacKey) { + this.callbacks.set(key.slice(4), { + callback, + options + }); + this.allKeys.add(key.split("+").at(-1)); + } else if (!isMac && !isMacKey) { + this.callbacks.set(key, { + callback, + options + }); + this.allKeys.add(key.split("+").at(-1)); + } + } + } + } + exec(self, event) { + if (!this.allKeys.has(event.key)) { + return; + } + const info2 = this.callbacks.get(__privateMethod(this, _serialize, serialize_fn).call(this, event)); + if (!info2) { + return; + } + const { + callback, + options: { + bubbles = false, + args = [], + checker = null + } + } = info2; + if (checker && !checker(self, event)) { + return; + } + callback.bind(self, ...args, event)(); + if (!bubbles) { + event.stopPropagation(); + event.preventDefault(); + } + } +}; +_serialize = new WeakSet(); +serialize_fn = function(event) { + if (event.altKey) { + this.buffer.push("alt"); + } + if (event.ctrlKey) { + this.buffer.push("ctrl"); + } + if (event.metaKey) { + this.buffer.push("meta"); + } + if (event.shiftKey) { + this.buffer.push("shift"); + } + this.buffer.push(event.key); + const str = this.buffer.join("+"); + this.buffer.length = 0; + return str; +}; +var _ColorManager = class { + get _colors() { + const colors = /* @__PURE__ */ new Map([["CanvasText", null], ["Canvas", null]]); + getColorValues(colors); + return shadow(this, "_colors", colors); + } + convert(color) { + const rgb = getRGB(color); + if (!window.matchMedia("(forced-colors: active)").matches) { + return rgb; + } + for (const [name, RGB] of this._colors) { + if (RGB.every((x, i) => x === rgb[i])) { + return _ColorManager._colorsMapping.get(name); + } + } + return rgb; + } + getHexCode(name) { + const rgb = this._colors.get(name); + if (!rgb) { + return name; + } + return Util.makeHexColor(...rgb); + } +}; +var ColorManager = _ColorManager; +__publicField(ColorManager, "_colorsMapping", /* @__PURE__ */ new Map([["CanvasText", [0, 0, 0]], ["Canvas", [255, 255, 255]]])); +var _abortController, _activeEditor, _allEditors, _allLayers, _altTextManager, _annotationStorage, _changedExistingAnnotations, _commandManager, _copyPasteAC, _currentPageIndex, _deletedAnnotationsElementIds, _draggingEditors, _editorTypes, _editorsToRescale, _enableHighlightFloatingButton, _enableUpdatedAddImage, _enableNewAltTextWhenAddingImage, _filterFactory, _focusMainContainerTimeoutId, _focusManagerAC, _highlightColors, _highlightWhenShiftUp, _highlightToolbar, _idManager, _isEnabled, _isWaiting, _keyboardManagerAC, _lastActiveElement, _mainHighlightColorPicker, _mlManager, _mode, _selectedEditors, _selectedTextNode, _pageColors, _showAllStates, _previousStates, _translation, _translationTimeoutId, _container, _viewer, _getAnchorElementForSelection, getAnchorElementForSelection_fn, _getLayerForTextLayer, getLayerForTextLayer_fn, _displayHighlightToolbar, displayHighlightToolbar_fn, _selectionChange, selectionChange_fn, _onSelectEnd, onSelectEnd_fn, _addSelectionListener, addSelectionListener_fn, _addFocusManager, addFocusManager_fn, _removeFocusManager, removeFocusManager_fn, _addKeyboardManager, addKeyboardManager_fn, _removeKeyboardManager, removeKeyboardManager_fn, _addCopyPasteListeners, addCopyPasteListeners_fn, _removeCopyPasteListeners, removeCopyPasteListeners_fn, _addDragAndDropListeners, addDragAndDropListeners_fn, _dispatchUpdateStates, dispatchUpdateStates_fn, _dispatchUpdateUI, dispatchUpdateUI_fn, _enableAll, enableAll_fn, _disableAll, disableAll_fn, _addEditorToLayer, addEditorToLayer_fn, _lastSelectedEditor, lastSelectedEditor_get, _isEmpty, isEmpty_fn, _selectEditors, selectEditors_fn; +var _AnnotationEditorUIManager = class { + constructor(container, viewer, altTextManager, eventBus, pdfDocument, pageColors, highlightColors, enableHighlightFloatingButton, enableUpdatedAddImage, enableNewAltTextWhenAddingImage, mlManager) { + __privateAdd(this, _getAnchorElementForSelection); + __privateAdd(this, _getLayerForTextLayer); + __privateAdd(this, _displayHighlightToolbar); + __privateAdd(this, _selectionChange); + __privateAdd(this, _onSelectEnd); + __privateAdd(this, _addSelectionListener); + __privateAdd(this, _addFocusManager); + __privateAdd(this, _removeFocusManager); + __privateAdd(this, _addKeyboardManager); + __privateAdd(this, _removeKeyboardManager); + __privateAdd(this, _addCopyPasteListeners); + __privateAdd(this, _removeCopyPasteListeners); + __privateAdd(this, _addDragAndDropListeners); + __privateAdd(this, _dispatchUpdateStates); + __privateAdd(this, _dispatchUpdateUI); + __privateAdd(this, _enableAll); + __privateAdd(this, _disableAll); + __privateAdd(this, _addEditorToLayer); + __privateAdd(this, _lastSelectedEditor); + __privateAdd(this, _isEmpty); + __privateAdd(this, _selectEditors); + __privateAdd(this, _abortController, new AbortController()); + __privateAdd(this, _activeEditor, null); + __privateAdd(this, _allEditors, /* @__PURE__ */ new Map()); + __privateAdd(this, _allLayers, /* @__PURE__ */ new Map()); + __privateAdd(this, _altTextManager, null); + __privateAdd(this, _annotationStorage, null); + __privateAdd(this, _changedExistingAnnotations, null); + __privateAdd(this, _commandManager, new CommandManager()); + __privateAdd(this, _copyPasteAC, null); + __privateAdd(this, _currentPageIndex, 0); + __privateAdd(this, _deletedAnnotationsElementIds, /* @__PURE__ */ new Set()); + __privateAdd(this, _draggingEditors, null); + __privateAdd(this, _editorTypes, null); + __privateAdd(this, _editorsToRescale, /* @__PURE__ */ new Set()); + __privateAdd(this, _enableHighlightFloatingButton, false); + __privateAdd(this, _enableUpdatedAddImage, false); + __privateAdd(this, _enableNewAltTextWhenAddingImage, false); + __privateAdd(this, _filterFactory, null); + __privateAdd(this, _focusMainContainerTimeoutId, null); + __privateAdd(this, _focusManagerAC, null); + __privateAdd(this, _highlightColors, null); + __privateAdd(this, _highlightWhenShiftUp, false); + __privateAdd(this, _highlightToolbar, null); + __privateAdd(this, _idManager, new IdManager()); + __privateAdd(this, _isEnabled, false); + __privateAdd(this, _isWaiting, false); + __privateAdd(this, _keyboardManagerAC, null); + __privateAdd(this, _lastActiveElement, null); + __privateAdd(this, _mainHighlightColorPicker, null); + __privateAdd(this, _mlManager, null); + __privateAdd(this, _mode, AnnotationEditorType.NONE); + __privateAdd(this, _selectedEditors, /* @__PURE__ */ new Set()); + __privateAdd(this, _selectedTextNode, null); + __privateAdd(this, _pageColors, null); + __privateAdd(this, _showAllStates, null); + __privateAdd(this, _previousStates, { + isEditing: false, + isEmpty: true, + hasSomethingToUndo: false, + hasSomethingToRedo: false, + hasSelectedEditor: false, + hasSelectedText: false + }); + __privateAdd(this, _translation, [0, 0]); + __privateAdd(this, _translationTimeoutId, null); + __privateAdd(this, _container, null); + __privateAdd(this, _viewer, null); + const signal = this._signal = __privateGet(this, _abortController).signal; + __privateSet(this, _container, container); + __privateSet(this, _viewer, viewer); + __privateSet(this, _altTextManager, altTextManager); + this._eventBus = eventBus; + eventBus._on("editingaction", this.onEditingAction.bind(this), { + signal + }); + eventBus._on("pagechanging", this.onPageChanging.bind(this), { + signal + }); + eventBus._on("scalechanging", this.onScaleChanging.bind(this), { + signal + }); + eventBus._on("rotationchanging", this.onRotationChanging.bind(this), { + signal + }); + eventBus._on("setpreference", this.onSetPreference.bind(this), { + signal + }); + eventBus._on("switchannotationeditorparams", (evt) => this.updateParams(evt.type, evt.value), { + signal + }); + __privateMethod(this, _addSelectionListener, addSelectionListener_fn).call(this); + __privateMethod(this, _addDragAndDropListeners, addDragAndDropListeners_fn).call(this); + __privateMethod(this, _addKeyboardManager, addKeyboardManager_fn).call(this); + __privateSet(this, _annotationStorage, pdfDocument.annotationStorage); + __privateSet(this, _filterFactory, pdfDocument.filterFactory); + __privateSet(this, _pageColors, pageColors); + __privateSet(this, _highlightColors, highlightColors || null); + __privateSet(this, _enableHighlightFloatingButton, enableHighlightFloatingButton); + __privateSet(this, _enableUpdatedAddImage, enableUpdatedAddImage); + __privateSet(this, _enableNewAltTextWhenAddingImage, enableNewAltTextWhenAddingImage); + __privateSet(this, _mlManager, mlManager || null); + this.viewParameters = { + realScale: PixelsPerInch.PDF_TO_CSS_UNITS, + rotation: 0 + }; + this.isShiftKeyDown = false; + } + static get _keyboardManager() { + const proto = _AnnotationEditorUIManager.prototype; + const arrowChecker = (self) => __privateGet(self, _container).contains(document.activeElement) && document.activeElement.tagName !== "BUTTON" && self.hasSomethingToControl(); + const textInputChecker = (_self, { + target: el + }) => { + if (el instanceof HTMLInputElement) { + const { + type + } = el; + return type !== "text" && type !== "number"; + } + return true; + }; + const small = this.TRANSLATE_SMALL; + const big = this.TRANSLATE_BIG; + return shadow(this, "_keyboardManager", new KeyboardManager([[["ctrl+a", "mac+meta+a"], proto.selectAll, { + checker: textInputChecker + }], [["ctrl+z", "mac+meta+z"], proto.undo, { + checker: textInputChecker + }], [["ctrl+y", "ctrl+shift+z", "mac+meta+shift+z", "ctrl+shift+Z", "mac+meta+shift+Z"], proto.redo, { + checker: textInputChecker + }], [["Backspace", "alt+Backspace", "ctrl+Backspace", "shift+Backspace", "mac+Backspace", "mac+alt+Backspace", "mac+ctrl+Backspace", "Delete", "ctrl+Delete", "shift+Delete", "mac+Delete"], proto.delete, { + checker: textInputChecker + }], [["Enter", "mac+Enter"], proto.addNewEditorFromKeyboard, { + checker: (self, { + target: el + }) => !(el instanceof HTMLButtonElement) && __privateGet(self, _container).contains(el) && !self.isEnterHandled + }], [[" ", "mac+ "], proto.addNewEditorFromKeyboard, { + checker: (self, { + target: el + }) => !(el instanceof HTMLButtonElement) && __privateGet(self, _container).contains(document.activeElement) + }], [["Escape", "mac+Escape"], proto.unselectAll], [["ArrowLeft", "mac+ArrowLeft"], proto.translateSelectedEditors, { + args: [-small, 0], + checker: arrowChecker + }], [["ctrl+ArrowLeft", "mac+shift+ArrowLeft"], proto.translateSelectedEditors, { + args: [-big, 0], + checker: arrowChecker + }], [["ArrowRight", "mac+ArrowRight"], proto.translateSelectedEditors, { + args: [small, 0], + checker: arrowChecker + }], [["ctrl+ArrowRight", "mac+shift+ArrowRight"], proto.translateSelectedEditors, { + args: [big, 0], + checker: arrowChecker + }], [["ArrowUp", "mac+ArrowUp"], proto.translateSelectedEditors, { + args: [0, -small], + checker: arrowChecker + }], [["ctrl+ArrowUp", "mac+shift+ArrowUp"], proto.translateSelectedEditors, { + args: [0, -big], + checker: arrowChecker + }], [["ArrowDown", "mac+ArrowDown"], proto.translateSelectedEditors, { + args: [0, small], + checker: arrowChecker + }], [["ctrl+ArrowDown", "mac+shift+ArrowDown"], proto.translateSelectedEditors, { + args: [0, big], + checker: arrowChecker + }]])); + } + destroy() { + var _a2, _b, _c; + (_a2 = __privateGet(this, _abortController)) == null ? void 0 : _a2.abort(); + __privateSet(this, _abortController, null); + this._signal = null; + for (const layer of __privateGet(this, _allLayers).values()) { + layer.destroy(); + } + __privateGet(this, _allLayers).clear(); + __privateGet(this, _allEditors).clear(); + __privateGet(this, _editorsToRescale).clear(); + __privateSet(this, _activeEditor, null); + __privateGet(this, _selectedEditors).clear(); + __privateGet(this, _commandManager).destroy(); + (_b = __privateGet(this, _altTextManager)) == null ? void 0 : _b.destroy(); + (_c = __privateGet(this, _highlightToolbar)) == null ? void 0 : _c.hide(); + __privateSet(this, _highlightToolbar, null); + if (__privateGet(this, _focusMainContainerTimeoutId)) { + clearTimeout(__privateGet(this, _focusMainContainerTimeoutId)); + __privateSet(this, _focusMainContainerTimeoutId, null); + } + if (__privateGet(this, _translationTimeoutId)) { + clearTimeout(__privateGet(this, _translationTimeoutId)); + __privateSet(this, _translationTimeoutId, null); + } + } + combinedSignal(ac) { + return AbortSignal.any([this._signal, ac.signal]); + } + get mlManager() { + return __privateGet(this, _mlManager); + } + get useNewAltTextFlow() { + return __privateGet(this, _enableUpdatedAddImage); + } + get useNewAltTextWhenAddingImage() { + return __privateGet(this, _enableNewAltTextWhenAddingImage); + } + get hcmFilter() { + return shadow(this, "hcmFilter", __privateGet(this, _pageColors) ? __privateGet(this, _filterFactory).addHCMFilter(__privateGet(this, _pageColors).foreground, __privateGet(this, _pageColors).background) : "none"); + } + get direction() { + return shadow(this, "direction", getComputedStyle(__privateGet(this, _container)).direction); + } + get highlightColors() { + return shadow(this, "highlightColors", __privateGet(this, _highlightColors) ? new Map(__privateGet(this, _highlightColors).split(",").map((pair) => pair.split("=").map((x) => x.trim()))) : null); + } + get highlightColorNames() { + return shadow(this, "highlightColorNames", this.highlightColors ? new Map(Array.from(this.highlightColors, (e) => e.reverse())) : null); + } + setMainHighlightColorPicker(colorPicker) { + __privateSet(this, _mainHighlightColorPicker, colorPicker); + } + editAltText(editor, firstTime = false) { + var _a2; + (_a2 = __privateGet(this, _altTextManager)) == null ? void 0 : _a2.editAltText(this, editor, firstTime); + } + switchToMode(mode, callback) { + this._eventBus.on("annotationeditormodechanged", callback, { + once: true, + signal: this._signal + }); + this._eventBus.dispatch("showannotationeditorui", { + source: this, + mode + }); + } + setPreference(name, value) { + this._eventBus.dispatch("setpreference", { + source: this, + name, + value + }); + } + onSetPreference({ + name, + value + }) { + switch (name) { + case "enableNewAltTextWhenAddingImage": + __privateSet(this, _enableNewAltTextWhenAddingImage, value); + break; + } + } + onPageChanging({ + pageNumber + }) { + __privateSet(this, _currentPageIndex, pageNumber - 1); + } + focusMainContainer() { + __privateGet(this, _container).focus(); + } + findParent(x, y) { + for (const layer of __privateGet(this, _allLayers).values()) { + const { + x: layerX, + y: layerY, + width, + height + } = layer.div.getBoundingClientRect(); + if (x >= layerX && x <= layerX + width && y >= layerY && y <= layerY + height) { + return layer; + } + } + return null; + } + disableUserSelect(value = false) { + __privateGet(this, _viewer).classList.toggle("noUserSelect", value); + } + addShouldRescale(editor) { + __privateGet(this, _editorsToRescale).add(editor); + } + removeShouldRescale(editor) { + __privateGet(this, _editorsToRescale).delete(editor); + } + onScaleChanging({ + scale + }) { + this.commitOrRemove(); + this.viewParameters.realScale = scale * PixelsPerInch.PDF_TO_CSS_UNITS; + for (const editor of __privateGet(this, _editorsToRescale)) { + editor.onScaleChanging(); + } + } + onRotationChanging({ + pagesRotation + }) { + this.commitOrRemove(); + this.viewParameters.rotation = pagesRotation; + } + highlightSelection(methodOfCreation = "") { + const selection = document.getSelection(); + if (!selection || selection.isCollapsed) { + return; + } + const { + anchorNode, + anchorOffset, + focusNode, + focusOffset + } = selection; + const text2 = selection.toString(); + const anchorElement = __privateMethod(this, _getAnchorElementForSelection, getAnchorElementForSelection_fn).call(this, selection); + const textLayer = anchorElement.closest(".textLayer"); + const boxes = this.getSelectionBoxes(textLayer); + if (!boxes) { + return; + } + selection.empty(); + const layer = __privateMethod(this, _getLayerForTextLayer, getLayerForTextLayer_fn).call(this, textLayer); + const isNoneMode = __privateGet(this, _mode) === AnnotationEditorType.NONE; + const callback = () => { + layer == null ? void 0 : layer.createAndAddNewEditor({ + x: 0, + y: 0 + }, false, { + methodOfCreation, + boxes, + anchorNode, + anchorOffset, + focusNode, + focusOffset, + text: text2 + }); + if (isNoneMode) { + this.showAllEditors("highlight", true, true); + } + }; + if (isNoneMode) { + this.switchToMode(AnnotationEditorType.HIGHLIGHT, callback); + return; + } + callback(); + } + addToAnnotationStorage(editor) { + if (!editor.isEmpty() && __privateGet(this, _annotationStorage) && !__privateGet(this, _annotationStorage).has(editor.id)) { + __privateGet(this, _annotationStorage).setValue(editor.id, editor); + } + } + blur() { + this.isShiftKeyDown = false; + if (__privateGet(this, _highlightWhenShiftUp)) { + __privateSet(this, _highlightWhenShiftUp, false); + __privateMethod(this, _onSelectEnd, onSelectEnd_fn).call(this, "main_toolbar"); + } + if (!this.hasSelection) { + return; + } + const { + activeElement + } = document; + for (const editor of __privateGet(this, _selectedEditors)) { + if (editor.div.contains(activeElement)) { + __privateSet(this, _lastActiveElement, [editor, activeElement]); + editor._focusEventsAllowed = false; + break; + } + } + } + focus() { + if (!__privateGet(this, _lastActiveElement)) { + return; + } + const [lastEditor, lastActiveElement] = __privateGet(this, _lastActiveElement); + __privateSet(this, _lastActiveElement, null); + lastActiveElement.addEventListener("focusin", () => { + lastEditor._focusEventsAllowed = true; + }, { + once: true, + signal: this._signal + }); + lastActiveElement.focus(); + } + addEditListeners() { + __privateMethod(this, _addKeyboardManager, addKeyboardManager_fn).call(this); + __privateMethod(this, _addCopyPasteListeners, addCopyPasteListeners_fn).call(this); + } + removeEditListeners() { + __privateMethod(this, _removeKeyboardManager, removeKeyboardManager_fn).call(this); + __privateMethod(this, _removeCopyPasteListeners, removeCopyPasteListeners_fn).call(this); + } + dragOver(event) { + for (const { + type + } of event.dataTransfer.items) { + for (const editorType of __privateGet(this, _editorTypes)) { + if (editorType.isHandlingMimeForPasting(type)) { + event.dataTransfer.dropEffect = "copy"; + event.preventDefault(); + return; + } + } + } + } + drop(event) { + for (const item of event.dataTransfer.items) { + for (const editorType of __privateGet(this, _editorTypes)) { + if (editorType.isHandlingMimeForPasting(item.type)) { + editorType.paste(item, this.currentLayer); + event.preventDefault(); + return; + } + } + } + } + copy(event) { + var _a2; + event.preventDefault(); + (_a2 = __privateGet(this, _activeEditor)) == null ? void 0 : _a2.commitOrRemove(); + if (!this.hasSelection) { + return; + } + const editors = []; + for (const editor of __privateGet(this, _selectedEditors)) { + const serialized = editor.serialize(true); + if (serialized) { + editors.push(serialized); + } + } + if (editors.length === 0) { + return; + } + event.clipboardData.setData("application/pdfjs", JSON.stringify(editors)); + } + cut(event) { + this.copy(event); + this.delete(); + } + paste(event) { + event.preventDefault(); + const { + clipboardData + } = event; + for (const item of clipboardData.items) { + for (const editorType of __privateGet(this, _editorTypes)) { + if (editorType.isHandlingMimeForPasting(item.type)) { + editorType.paste(item, this.currentLayer); + return; + } + } + } + let data = clipboardData.getData("application/pdfjs"); + if (!data) { + return; + } + try { + data = JSON.parse(data); + } catch (ex) { + warn(`paste: "${ex.message}".`); + return; + } + if (!Array.isArray(data)) { + return; + } + this.unselectAll(); + const layer = this.currentLayer; + try { + const newEditors = []; + for (const editor of data) { + const deserializedEditor = layer.deserialize(editor); + if (!deserializedEditor) { + return; + } + newEditors.push(deserializedEditor); + } + const cmd = () => { + for (const editor of newEditors) { + __privateMethod(this, _addEditorToLayer, addEditorToLayer_fn).call(this, editor); + } + __privateMethod(this, _selectEditors, selectEditors_fn).call(this, newEditors); + }; + const undo = () => { + for (const editor of newEditors) { + editor.remove(); + } + }; + this.addCommands({ + cmd, + undo, + mustExec: true + }); + } catch (ex) { + warn(`paste: "${ex.message}".`); + } + } + keydown(event) { + if (!this.isShiftKeyDown && event.key === "Shift") { + this.isShiftKeyDown = true; + } + if (__privateGet(this, _mode) !== AnnotationEditorType.NONE && !this.isEditorHandlingKeyboard) { + _AnnotationEditorUIManager._keyboardManager.exec(this, event); + } + } + keyup(event) { + if (this.isShiftKeyDown && event.key === "Shift") { + this.isShiftKeyDown = false; + if (__privateGet(this, _highlightWhenShiftUp)) { + __privateSet(this, _highlightWhenShiftUp, false); + __privateMethod(this, _onSelectEnd, onSelectEnd_fn).call(this, "main_toolbar"); + } + } + } + onEditingAction({ + name + }) { + switch (name) { + case "undo": + case "redo": + case "delete": + case "selectAll": + this[name](); + break; + case "highlightSelection": + this.highlightSelection("context_menu"); + break; + } + } + setEditingState(isEditing) { + if (isEditing) { + __privateMethod(this, _addFocusManager, addFocusManager_fn).call(this); + __privateMethod(this, _addCopyPasteListeners, addCopyPasteListeners_fn).call(this); + __privateMethod(this, _dispatchUpdateStates, dispatchUpdateStates_fn).call(this, { + isEditing: __privateGet(this, _mode) !== AnnotationEditorType.NONE, + isEmpty: __privateMethod(this, _isEmpty, isEmpty_fn).call(this), + hasSomethingToUndo: __privateGet(this, _commandManager).hasSomethingToUndo(), + hasSomethingToRedo: __privateGet(this, _commandManager).hasSomethingToRedo(), + hasSelectedEditor: false + }); + } else { + __privateMethod(this, _removeFocusManager, removeFocusManager_fn).call(this); + __privateMethod(this, _removeCopyPasteListeners, removeCopyPasteListeners_fn).call(this); + __privateMethod(this, _dispatchUpdateStates, dispatchUpdateStates_fn).call(this, { + isEditing: false + }); + this.disableUserSelect(false); + } + } + registerEditorTypes(types) { + if (__privateGet(this, _editorTypes)) { + return; + } + __privateSet(this, _editorTypes, types); + for (const editorType of __privateGet(this, _editorTypes)) { + __privateMethod(this, _dispatchUpdateUI, dispatchUpdateUI_fn).call(this, editorType.defaultPropertiesToUpdate); + } + } + getId() { + return __privateGet(this, _idManager).id; + } + get currentLayer() { + return __privateGet(this, _allLayers).get(__privateGet(this, _currentPageIndex)); + } + getLayer(pageIndex) { + return __privateGet(this, _allLayers).get(pageIndex); + } + get currentPageIndex() { + return __privateGet(this, _currentPageIndex); + } + addLayer(layer) { + __privateGet(this, _allLayers).set(layer.pageIndex, layer); + if (__privateGet(this, _isEnabled)) { + layer.enable(); + } else { + layer.disable(); + } + } + removeLayer(layer) { + __privateGet(this, _allLayers).delete(layer.pageIndex); + } + updateMode(mode, editId = null, isFromKeyboard = false) { + if (__privateGet(this, _mode) === mode) { + return; + } + __privateSet(this, _mode, mode); + if (mode === AnnotationEditorType.NONE) { + this.setEditingState(false); + __privateMethod(this, _disableAll, disableAll_fn).call(this); + return; + } + this.setEditingState(true); + __privateMethod(this, _enableAll, enableAll_fn).call(this); + this.unselectAll(); + for (const layer of __privateGet(this, _allLayers).values()) { + layer.updateMode(mode); + } + if (!editId && isFromKeyboard) { + this.addNewEditorFromKeyboard(); + return; + } + if (!editId) { + return; + } + for (const editor of __privateGet(this, _allEditors).values()) { + if (editor.annotationElementId === editId) { + this.setSelected(editor); + editor.enterInEditMode(); + break; + } + } + } + addNewEditorFromKeyboard() { + if (this.currentLayer.canCreateNewEmptyEditor()) { + this.currentLayer.addNewEditor(); + } + } + updateToolbar(mode) { + if (mode === __privateGet(this, _mode)) { + return; + } + this._eventBus.dispatch("switchannotationeditormode", { + source: this, + mode + }); + } + updateParams(type, value) { + var _a2; + if (!__privateGet(this, _editorTypes)) { + return; + } + switch (type) { + case AnnotationEditorParamsType.CREATE: + this.currentLayer.addNewEditor(); + return; + case AnnotationEditorParamsType.HIGHLIGHT_DEFAULT_COLOR: + (_a2 = __privateGet(this, _mainHighlightColorPicker)) == null ? void 0 : _a2.updateColor(value); + break; + case AnnotationEditorParamsType.HIGHLIGHT_SHOW_ALL: + this._eventBus.dispatch("reporttelemetry", { + source: this, + details: { + type: "editing", + data: { + type: "highlight", + action: "toggle_visibility" + } + } + }); + (__privateGet(this, _showAllStates) || __privateSet(this, _showAllStates, /* @__PURE__ */ new Map())).set(type, value); + this.showAllEditors("highlight", value); + break; + } + for (const editor of __privateGet(this, _selectedEditors)) { + editor.updateParams(type, value); + } + for (const editorType of __privateGet(this, _editorTypes)) { + editorType.updateDefaultParams(type, value); + } + } + showAllEditors(type, visible, updateButton = false) { + var _a2, _b; + for (const editor of __privateGet(this, _allEditors).values()) { + if (editor.editorType === type) { + editor.show(visible); + } + } + const state = (_b = (_a2 = __privateGet(this, _showAllStates)) == null ? void 0 : _a2.get(AnnotationEditorParamsType.HIGHLIGHT_SHOW_ALL)) != null ? _b : true; + if (state !== visible) { + __privateMethod(this, _dispatchUpdateUI, dispatchUpdateUI_fn).call(this, [[AnnotationEditorParamsType.HIGHLIGHT_SHOW_ALL, visible]]); + } + } + enableWaiting(mustWait = false) { + if (__privateGet(this, _isWaiting) === mustWait) { + return; + } + __privateSet(this, _isWaiting, mustWait); + for (const layer of __privateGet(this, _allLayers).values()) { + if (mustWait) { + layer.disableClick(); + } else { + layer.enableClick(); + } + layer.div.classList.toggle("waiting", mustWait); + } + } + getEditors(pageIndex) { + const editors = []; + for (const editor of __privateGet(this, _allEditors).values()) { + if (editor.pageIndex === pageIndex) { + editors.push(editor); + } + } + return editors; + } + getEditor(id) { + return __privateGet(this, _allEditors).get(id); + } + addEditor(editor) { + __privateGet(this, _allEditors).set(editor.id, editor); + } + removeEditor(editor) { + var _a2; + if (editor.div.contains(document.activeElement)) { + if (__privateGet(this, _focusMainContainerTimeoutId)) { + clearTimeout(__privateGet(this, _focusMainContainerTimeoutId)); + } + __privateSet(this, _focusMainContainerTimeoutId, setTimeout(() => { + this.focusMainContainer(); + __privateSet(this, _focusMainContainerTimeoutId, null); + }, 0)); + } + __privateGet(this, _allEditors).delete(editor.id); + this.unselect(editor); + if (!editor.annotationElementId || !__privateGet(this, _deletedAnnotationsElementIds).has(editor.annotationElementId)) { + (_a2 = __privateGet(this, _annotationStorage)) == null ? void 0 : _a2.remove(editor.id); + } + } + addDeletedAnnotationElement(editor) { + __privateGet(this, _deletedAnnotationsElementIds).add(editor.annotationElementId); + this.addChangedExistingAnnotation(editor); + editor.deleted = true; + } + isDeletedAnnotationElement(annotationElementId) { + return __privateGet(this, _deletedAnnotationsElementIds).has(annotationElementId); + } + removeDeletedAnnotationElement(editor) { + __privateGet(this, _deletedAnnotationsElementIds).delete(editor.annotationElementId); + this.removeChangedExistingAnnotation(editor); + editor.deleted = false; + } + setActiveEditor(editor) { + if (__privateGet(this, _activeEditor) === editor) { + return; + } + __privateSet(this, _activeEditor, editor); + if (editor) { + __privateMethod(this, _dispatchUpdateUI, dispatchUpdateUI_fn).call(this, editor.propertiesToUpdate); + } + } + updateUI(editor) { + if (__privateGet(this, _lastSelectedEditor, lastSelectedEditor_get) === editor) { + __privateMethod(this, _dispatchUpdateUI, dispatchUpdateUI_fn).call(this, editor.propertiesToUpdate); + } + } + toggleSelected(editor) { + if (__privateGet(this, _selectedEditors).has(editor)) { + __privateGet(this, _selectedEditors).delete(editor); + editor.unselect(); + __privateMethod(this, _dispatchUpdateStates, dispatchUpdateStates_fn).call(this, { + hasSelectedEditor: this.hasSelection + }); + return; + } + __privateGet(this, _selectedEditors).add(editor); + editor.select(); + __privateMethod(this, _dispatchUpdateUI, dispatchUpdateUI_fn).call(this, editor.propertiesToUpdate); + __privateMethod(this, _dispatchUpdateStates, dispatchUpdateStates_fn).call(this, { + hasSelectedEditor: true + }); + } + setSelected(editor) { + for (const ed of __privateGet(this, _selectedEditors)) { + if (ed !== editor) { + ed.unselect(); + } + } + __privateGet(this, _selectedEditors).clear(); + __privateGet(this, _selectedEditors).add(editor); + editor.select(); + __privateMethod(this, _dispatchUpdateUI, dispatchUpdateUI_fn).call(this, editor.propertiesToUpdate); + __privateMethod(this, _dispatchUpdateStates, dispatchUpdateStates_fn).call(this, { + hasSelectedEditor: true + }); + } + isSelected(editor) { + return __privateGet(this, _selectedEditors).has(editor); + } + get firstSelectedEditor() { + return __privateGet(this, _selectedEditors).values().next().value; + } + unselect(editor) { + editor.unselect(); + __privateGet(this, _selectedEditors).delete(editor); + __privateMethod(this, _dispatchUpdateStates, dispatchUpdateStates_fn).call(this, { + hasSelectedEditor: this.hasSelection + }); + } + get hasSelection() { + return __privateGet(this, _selectedEditors).size !== 0; + } + get isEnterHandled() { + return __privateGet(this, _selectedEditors).size === 1 && this.firstSelectedEditor.isEnterHandled; + } + undo() { + __privateGet(this, _commandManager).undo(); + __privateMethod(this, _dispatchUpdateStates, dispatchUpdateStates_fn).call(this, { + hasSomethingToUndo: __privateGet(this, _commandManager).hasSomethingToUndo(), + hasSomethingToRedo: true, + isEmpty: __privateMethod(this, _isEmpty, isEmpty_fn).call(this) + }); + } + redo() { + __privateGet(this, _commandManager).redo(); + __privateMethod(this, _dispatchUpdateStates, dispatchUpdateStates_fn).call(this, { + hasSomethingToUndo: true, + hasSomethingToRedo: __privateGet(this, _commandManager).hasSomethingToRedo(), + isEmpty: __privateMethod(this, _isEmpty, isEmpty_fn).call(this) + }); + } + addCommands(params) { + __privateGet(this, _commandManager).add(params); + __privateMethod(this, _dispatchUpdateStates, dispatchUpdateStates_fn).call(this, { + hasSomethingToUndo: true, + hasSomethingToRedo: false, + isEmpty: __privateMethod(this, _isEmpty, isEmpty_fn).call(this) + }); + } + delete() { + this.commitOrRemove(); + if (!this.hasSelection) { + return; + } + const editors = [...__privateGet(this, _selectedEditors)]; + const cmd = () => { + for (const editor of editors) { + editor.remove(); + } + }; + const undo = () => { + for (const editor of editors) { + __privateMethod(this, _addEditorToLayer, addEditorToLayer_fn).call(this, editor); + } + }; + this.addCommands({ + cmd, + undo, + mustExec: true + }); + } + commitOrRemove() { + var _a2; + (_a2 = __privateGet(this, _activeEditor)) == null ? void 0 : _a2.commitOrRemove(); + } + hasSomethingToControl() { + return __privateGet(this, _activeEditor) || this.hasSelection; + } + selectAll() { + for (const editor of __privateGet(this, _selectedEditors)) { + editor.commit(); + } + __privateMethod(this, _selectEditors, selectEditors_fn).call(this, __privateGet(this, _allEditors).values()); + } + unselectAll() { + if (__privateGet(this, _activeEditor)) { + __privateGet(this, _activeEditor).commitOrRemove(); + if (__privateGet(this, _mode) !== AnnotationEditorType.NONE) { + return; + } + } + if (!this.hasSelection) { + return; + } + for (const editor of __privateGet(this, _selectedEditors)) { + editor.unselect(); + } + __privateGet(this, _selectedEditors).clear(); + __privateMethod(this, _dispatchUpdateStates, dispatchUpdateStates_fn).call(this, { + hasSelectedEditor: false + }); + } + translateSelectedEditors(x, y, noCommit = false) { + if (!noCommit) { + this.commitOrRemove(); + } + if (!this.hasSelection) { + return; + } + __privateGet(this, _translation)[0] += x; + __privateGet(this, _translation)[1] += y; + const [totalX, totalY] = __privateGet(this, _translation); + const editors = [...__privateGet(this, _selectedEditors)]; + const TIME_TO_WAIT = 1e3; + if (__privateGet(this, _translationTimeoutId)) { + clearTimeout(__privateGet(this, _translationTimeoutId)); + } + __privateSet(this, _translationTimeoutId, setTimeout(() => { + __privateSet(this, _translationTimeoutId, null); + __privateGet(this, _translation)[0] = __privateGet(this, _translation)[1] = 0; + this.addCommands({ + cmd: () => { + for (const editor of editors) { + if (__privateGet(this, _allEditors).has(editor.id)) { + editor.translateInPage(totalX, totalY); + } + } + }, + undo: () => { + for (const editor of editors) { + if (__privateGet(this, _allEditors).has(editor.id)) { + editor.translateInPage(-totalX, -totalY); + } + } + }, + mustExec: false + }); + }, TIME_TO_WAIT)); + for (const editor of editors) { + editor.translateInPage(x, y); + } + } + setUpDragSession() { + if (!this.hasSelection) { + return; + } + this.disableUserSelect(true); + __privateSet(this, _draggingEditors, /* @__PURE__ */ new Map()); + for (const editor of __privateGet(this, _selectedEditors)) { + __privateGet(this, _draggingEditors).set(editor, { + savedX: editor.x, + savedY: editor.y, + savedPageIndex: editor.pageIndex, + newX: 0, + newY: 0, + newPageIndex: -1 + }); + } + } + endDragSession() { + if (!__privateGet(this, _draggingEditors)) { + return false; + } + this.disableUserSelect(false); + const map = __privateGet(this, _draggingEditors); + __privateSet(this, _draggingEditors, null); + let mustBeAddedInUndoStack = false; + for (const [{ + x, + y, + pageIndex + }, value] of map) { + value.newX = x; + value.newY = y; + value.newPageIndex = pageIndex; + mustBeAddedInUndoStack || (mustBeAddedInUndoStack = x !== value.savedX || y !== value.savedY || pageIndex !== value.savedPageIndex); + } + if (!mustBeAddedInUndoStack) { + return false; + } + const move = (editor, x, y, pageIndex) => { + if (__privateGet(this, _allEditors).has(editor.id)) { + const parent = __privateGet(this, _allLayers).get(pageIndex); + if (parent) { + editor._setParentAndPosition(parent, x, y); + } else { + editor.pageIndex = pageIndex; + editor.x = x; + editor.y = y; + } + } + }; + this.addCommands({ + cmd: () => { + for (const [editor, { + newX, + newY, + newPageIndex + }] of map) { + move(editor, newX, newY, newPageIndex); + } + }, + undo: () => { + for (const [editor, { + savedX, + savedY, + savedPageIndex + }] of map) { + move(editor, savedX, savedY, savedPageIndex); + } + }, + mustExec: true + }); + return true; + } + dragSelectedEditors(tx, ty) { + if (!__privateGet(this, _draggingEditors)) { + return; + } + for (const editor of __privateGet(this, _draggingEditors).keys()) { + editor.drag(tx, ty); + } + } + rebuild(editor) { + if (editor.parent === null) { + const parent = this.getLayer(editor.pageIndex); + if (parent) { + parent.changeParent(editor); + parent.addOrRebuild(editor); + } else { + this.addEditor(editor); + this.addToAnnotationStorage(editor); + editor.rebuild(); + } + } else { + editor.parent.addOrRebuild(editor); + } + } + get isEditorHandlingKeyboard() { + var _a2; + return ((_a2 = this.getActive()) == null ? void 0 : _a2.shouldGetKeyboardEvents()) || __privateGet(this, _selectedEditors).size === 1 && this.firstSelectedEditor.shouldGetKeyboardEvents(); + } + isActive(editor) { + return __privateGet(this, _activeEditor) === editor; + } + getActive() { + return __privateGet(this, _activeEditor); + } + getMode() { + return __privateGet(this, _mode); + } + get imageManager() { + return shadow(this, "imageManager", new ImageManager()); + } + getSelectionBoxes(textLayer) { + if (!textLayer) { + return null; + } + const selection = document.getSelection(); + for (let i = 0, ii = selection.rangeCount; i < ii; i++) { + if (!textLayer.contains(selection.getRangeAt(i).commonAncestorContainer)) { + return null; + } + } + const { + x: layerX, + y: layerY, + width: parentWidth, + height: parentHeight + } = textLayer.getBoundingClientRect(); + let rotator; + switch (textLayer.getAttribute("data-main-rotation")) { + case "90": + rotator = (x, y, w, h) => ({ + x: (y - layerY) / parentHeight, + y: 1 - (x + w - layerX) / parentWidth, + width: h / parentHeight, + height: w / parentWidth + }); + break; + case "180": + rotator = (x, y, w, h) => ({ + x: 1 - (x + w - layerX) / parentWidth, + y: 1 - (y + h - layerY) / parentHeight, + width: w / parentWidth, + height: h / parentHeight + }); + break; + case "270": + rotator = (x, y, w, h) => ({ + x: 1 - (y + h - layerY) / parentHeight, + y: (x - layerX) / parentWidth, + width: h / parentHeight, + height: w / parentWidth + }); + break; + default: + rotator = (x, y, w, h) => ({ + x: (x - layerX) / parentWidth, + y: (y - layerY) / parentHeight, + width: w / parentWidth, + height: h / parentHeight + }); + break; + } + const boxes = []; + for (let i = 0, ii = selection.rangeCount; i < ii; i++) { + const range = selection.getRangeAt(i); + if (range.collapsed) { + continue; + } + for (const { + x, + y, + width, + height + } of range.getClientRects()) { + if (width === 0 || height === 0) { + continue; + } + boxes.push(rotator(x, y, width, height)); + } + } + return boxes.length === 0 ? null : boxes; + } + addChangedExistingAnnotation({ + annotationElementId, + id + }) { + (__privateGet(this, _changedExistingAnnotations) || __privateSet(this, _changedExistingAnnotations, /* @__PURE__ */ new Map())).set(annotationElementId, id); + } + removeChangedExistingAnnotation({ + annotationElementId + }) { + var _a2; + (_a2 = __privateGet(this, _changedExistingAnnotations)) == null ? void 0 : _a2.delete(annotationElementId); + } + renderAnnotationElement(annotation) { + var _a2; + const editorId = (_a2 = __privateGet(this, _changedExistingAnnotations)) == null ? void 0 : _a2.get(annotation.data.id); + if (!editorId) { + return; + } + const editor = __privateGet(this, _annotationStorage).getRawValue(editorId); + if (!editor) { + return; + } + if (__privateGet(this, _mode) === AnnotationEditorType.NONE && !editor.hasBeenModified) { + return; + } + editor.renderAnnotationElement(annotation); + } +}; +var AnnotationEditorUIManager = _AnnotationEditorUIManager; +_abortController = new WeakMap(); +_activeEditor = new WeakMap(); +_allEditors = new WeakMap(); +_allLayers = new WeakMap(); +_altTextManager = new WeakMap(); +_annotationStorage = new WeakMap(); +_changedExistingAnnotations = new WeakMap(); +_commandManager = new WeakMap(); +_copyPasteAC = new WeakMap(); +_currentPageIndex = new WeakMap(); +_deletedAnnotationsElementIds = new WeakMap(); +_draggingEditors = new WeakMap(); +_editorTypes = new WeakMap(); +_editorsToRescale = new WeakMap(); +_enableHighlightFloatingButton = new WeakMap(); +_enableUpdatedAddImage = new WeakMap(); +_enableNewAltTextWhenAddingImage = new WeakMap(); +_filterFactory = new WeakMap(); +_focusMainContainerTimeoutId = new WeakMap(); +_focusManagerAC = new WeakMap(); +_highlightColors = new WeakMap(); +_highlightWhenShiftUp = new WeakMap(); +_highlightToolbar = new WeakMap(); +_idManager = new WeakMap(); +_isEnabled = new WeakMap(); +_isWaiting = new WeakMap(); +_keyboardManagerAC = new WeakMap(); +_lastActiveElement = new WeakMap(); +_mainHighlightColorPicker = new WeakMap(); +_mlManager = new WeakMap(); +_mode = new WeakMap(); +_selectedEditors = new WeakMap(); +_selectedTextNode = new WeakMap(); +_pageColors = new WeakMap(); +_showAllStates = new WeakMap(); +_previousStates = new WeakMap(); +_translation = new WeakMap(); +_translationTimeoutId = new WeakMap(); +_container = new WeakMap(); +_viewer = new WeakMap(); +_getAnchorElementForSelection = new WeakSet(); +getAnchorElementForSelection_fn = function({ + anchorNode +}) { + return anchorNode.nodeType === Node.TEXT_NODE ? anchorNode.parentElement : anchorNode; +}; +_getLayerForTextLayer = new WeakSet(); +getLayerForTextLayer_fn = function(textLayer) { + const { + currentLayer + } = this; + if (currentLayer.hasTextLayer(textLayer)) { + return currentLayer; + } + for (const layer of __privateGet(this, _allLayers).values()) { + if (layer.hasTextLayer(textLayer)) { + return layer; + } + } + return null; +}; +_displayHighlightToolbar = new WeakSet(); +displayHighlightToolbar_fn = function() { + const selection = document.getSelection(); + if (!selection || selection.isCollapsed) { + return; + } + const anchorElement = __privateMethod(this, _getAnchorElementForSelection, getAnchorElementForSelection_fn).call(this, selection); + const textLayer = anchorElement.closest(".textLayer"); + const boxes = this.getSelectionBoxes(textLayer); + if (!boxes) { + return; + } + __privateGet(this, _highlightToolbar) || __privateSet(this, _highlightToolbar, new HighlightToolbar(this)); + __privateGet(this, _highlightToolbar).show(textLayer, boxes, this.direction === "ltr"); +}; +_selectionChange = new WeakSet(); +selectionChange_fn = function() { + var _a2, _b, _c; + const selection = document.getSelection(); + if (!selection || selection.isCollapsed) { + if (__privateGet(this, _selectedTextNode)) { + (_a2 = __privateGet(this, _highlightToolbar)) == null ? void 0 : _a2.hide(); + __privateSet(this, _selectedTextNode, null); + __privateMethod(this, _dispatchUpdateStates, dispatchUpdateStates_fn).call(this, { + hasSelectedText: false + }); + } + return; + } + const { + anchorNode + } = selection; + if (anchorNode === __privateGet(this, _selectedTextNode)) { + return; + } + const anchorElement = __privateMethod(this, _getAnchorElementForSelection, getAnchorElementForSelection_fn).call(this, selection); + const textLayer = anchorElement.closest(".textLayer"); + if (!textLayer) { + if (__privateGet(this, _selectedTextNode)) { + (_b = __privateGet(this, _highlightToolbar)) == null ? void 0 : _b.hide(); + __privateSet(this, _selectedTextNode, null); + __privateMethod(this, _dispatchUpdateStates, dispatchUpdateStates_fn).call(this, { + hasSelectedText: false + }); + } + return; + } + (_c = __privateGet(this, _highlightToolbar)) == null ? void 0 : _c.hide(); + __privateSet(this, _selectedTextNode, anchorNode); + __privateMethod(this, _dispatchUpdateStates, dispatchUpdateStates_fn).call(this, { + hasSelectedText: true + }); + if (__privateGet(this, _mode) !== AnnotationEditorType.HIGHLIGHT && __privateGet(this, _mode) !== AnnotationEditorType.NONE) { + return; + } + if (__privateGet(this, _mode) === AnnotationEditorType.HIGHLIGHT) { + this.showAllEditors("highlight", true, true); + } + __privateSet(this, _highlightWhenShiftUp, this.isShiftKeyDown); + if (!this.isShiftKeyDown) { + const activeLayer = __privateGet(this, _mode) === AnnotationEditorType.HIGHLIGHT ? __privateMethod(this, _getLayerForTextLayer, getLayerForTextLayer_fn).call(this, textLayer) : null; + activeLayer == null ? void 0 : activeLayer.toggleDrawing(); + const ac = new AbortController(); + const signal = this.combinedSignal(ac); + const pointerup = (e) => { + if (e.type === "pointerup" && e.button !== 0) { + return; + } + ac.abort(); + activeLayer == null ? void 0 : activeLayer.toggleDrawing(true); + if (e.type === "pointerup") { + __privateMethod(this, _onSelectEnd, onSelectEnd_fn).call(this, "main_toolbar"); + } + }; + window.addEventListener("pointerup", pointerup, { + signal + }); + window.addEventListener("blur", pointerup, { + signal + }); + } +}; +_onSelectEnd = new WeakSet(); +onSelectEnd_fn = function(methodOfCreation = "") { + if (__privateGet(this, _mode) === AnnotationEditorType.HIGHLIGHT) { + this.highlightSelection(methodOfCreation); + } else if (__privateGet(this, _enableHighlightFloatingButton)) { + __privateMethod(this, _displayHighlightToolbar, displayHighlightToolbar_fn).call(this); + } +}; +_addSelectionListener = new WeakSet(); +addSelectionListener_fn = function() { + document.addEventListener("selectionchange", __privateMethod(this, _selectionChange, selectionChange_fn).bind(this), { + signal: this._signal + }); +}; +_addFocusManager = new WeakSet(); +addFocusManager_fn = function() { + if (__privateGet(this, _focusManagerAC)) { + return; + } + __privateSet(this, _focusManagerAC, new AbortController()); + const signal = this.combinedSignal(__privateGet(this, _focusManagerAC)); + window.addEventListener("focus", this.focus.bind(this), { + signal + }); + window.addEventListener("blur", this.blur.bind(this), { + signal + }); +}; +_removeFocusManager = new WeakSet(); +removeFocusManager_fn = function() { + var _a2; + (_a2 = __privateGet(this, _focusManagerAC)) == null ? void 0 : _a2.abort(); + __privateSet(this, _focusManagerAC, null); +}; +_addKeyboardManager = new WeakSet(); +addKeyboardManager_fn = function() { + if (__privateGet(this, _keyboardManagerAC)) { + return; + } + __privateSet(this, _keyboardManagerAC, new AbortController()); + const signal = this.combinedSignal(__privateGet(this, _keyboardManagerAC)); + window.addEventListener("keydown", this.keydown.bind(this), { + signal + }); + window.addEventListener("keyup", this.keyup.bind(this), { + signal + }); +}; +_removeKeyboardManager = new WeakSet(); +removeKeyboardManager_fn = function() { + var _a2; + (_a2 = __privateGet(this, _keyboardManagerAC)) == null ? void 0 : _a2.abort(); + __privateSet(this, _keyboardManagerAC, null); +}; +_addCopyPasteListeners = new WeakSet(); +addCopyPasteListeners_fn = function() { + if (__privateGet(this, _copyPasteAC)) { + return; + } + __privateSet(this, _copyPasteAC, new AbortController()); + const signal = this.combinedSignal(__privateGet(this, _copyPasteAC)); + document.addEventListener("copy", this.copy.bind(this), { + signal + }); + document.addEventListener("cut", this.cut.bind(this), { + signal + }); + document.addEventListener("paste", this.paste.bind(this), { + signal + }); +}; +_removeCopyPasteListeners = new WeakSet(); +removeCopyPasteListeners_fn = function() { + var _a2; + (_a2 = __privateGet(this, _copyPasteAC)) == null ? void 0 : _a2.abort(); + __privateSet(this, _copyPasteAC, null); +}; +_addDragAndDropListeners = new WeakSet(); +addDragAndDropListeners_fn = function() { + const signal = this._signal; + document.addEventListener("dragover", this.dragOver.bind(this), { + signal + }); + document.addEventListener("drop", this.drop.bind(this), { + signal + }); +}; +_dispatchUpdateStates = new WeakSet(); +dispatchUpdateStates_fn = function(details) { + const hasChanged = Object.entries(details).some(([key, value]) => __privateGet(this, _previousStates)[key] !== value); + if (hasChanged) { + this._eventBus.dispatch("annotationeditorstateschanged", { + source: this, + details: Object.assign(__privateGet(this, _previousStates), details) + }); + if (__privateGet(this, _mode) === AnnotationEditorType.HIGHLIGHT && details.hasSelectedEditor === false) { + __privateMethod(this, _dispatchUpdateUI, dispatchUpdateUI_fn).call(this, [[AnnotationEditorParamsType.HIGHLIGHT_FREE, true]]); + } + } +}; +_dispatchUpdateUI = new WeakSet(); +dispatchUpdateUI_fn = function(details) { + this._eventBus.dispatch("annotationeditorparamschanged", { + source: this, + details + }); +}; +_enableAll = new WeakSet(); +enableAll_fn = function() { + if (!__privateGet(this, _isEnabled)) { + __privateSet(this, _isEnabled, true); + for (const layer of __privateGet(this, _allLayers).values()) { + layer.enable(); + } + for (const editor of __privateGet(this, _allEditors).values()) { + editor.enable(); + } + } +}; +_disableAll = new WeakSet(); +disableAll_fn = function() { + this.unselectAll(); + if (__privateGet(this, _isEnabled)) { + __privateSet(this, _isEnabled, false); + for (const layer of __privateGet(this, _allLayers).values()) { + layer.disable(); + } + for (const editor of __privateGet(this, _allEditors).values()) { + editor.disable(); + } + } +}; +_addEditorToLayer = new WeakSet(); +addEditorToLayer_fn = function(editor) { + const layer = __privateGet(this, _allLayers).get(editor.pageIndex); + if (layer) { + layer.addOrRebuild(editor); + } else { + this.addEditor(editor); + this.addToAnnotationStorage(editor); + } +}; +_lastSelectedEditor = new WeakSet(); +lastSelectedEditor_get = function() { + let ed = null; + for (ed of __privateGet(this, _selectedEditors)) { + } + return ed; +}; +_isEmpty = new WeakSet(); +isEmpty_fn = function() { + if (__privateGet(this, _allEditors).size === 0) { + return true; + } + if (__privateGet(this, _allEditors).size === 1) { + for (const editor of __privateGet(this, _allEditors).values()) { + return editor.isEmpty(); + } + } + return false; +}; +_selectEditors = new WeakSet(); +selectEditors_fn = function(editors) { + for (const editor of __privateGet(this, _selectedEditors)) { + editor.unselect(); + } + __privateGet(this, _selectedEditors).clear(); + for (const editor of editors) { + if (editor.isEmpty()) { + continue; + } + __privateGet(this, _selectedEditors).add(editor); + editor.select(); + } + __privateMethod(this, _dispatchUpdateStates, dispatchUpdateStates_fn).call(this, { + hasSelectedEditor: this.hasSelection + }); +}; +__publicField(AnnotationEditorUIManager, "TRANSLATE_SMALL", 1); +__publicField(AnnotationEditorUIManager, "TRANSLATE_BIG", 10); +var _altText2, _altTextDecorative, _altTextButton, _altTextTooltip, _altTextTooltipTimeout, _altTextWasFromKeyBoard, _badge, _editor2, _guessedText, _textWithDisclaimer, _useNewAltTextFlow, _label, label_get, _setState, setState_fn; +var _AltText = class { + constructor(editor) { + __privateAdd(this, _label); + __privateAdd(this, _setState); + __privateAdd(this, _altText2, null); + __privateAdd(this, _altTextDecorative, false); + __privateAdd(this, _altTextButton, null); + __privateAdd(this, _altTextTooltip, null); + __privateAdd(this, _altTextTooltipTimeout, null); + __privateAdd(this, _altTextWasFromKeyBoard, false); + __privateAdd(this, _badge, null); + __privateAdd(this, _editor2, null); + __privateAdd(this, _guessedText, null); + __privateAdd(this, _textWithDisclaimer, null); + __privateAdd(this, _useNewAltTextFlow, false); + __privateSet(this, _editor2, editor); + __privateSet(this, _useNewAltTextFlow, editor._uiManager.useNewAltTextFlow); + } + static initialize(l10nPromise) { + _AltText._l10nPromise || (_AltText._l10nPromise = l10nPromise); + } + async render() { + const altText = __privateSet(this, _altTextButton, document.createElement("button")); + altText.className = "altText"; + let msg; + if (__privateGet(this, _useNewAltTextFlow)) { + altText.classList.add("new"); + msg = await _AltText._l10nPromise.get("pdfjs-editor-new-alt-text-missing-button-label"); + } else { + msg = await _AltText._l10nPromise.get("pdfjs-editor-alt-text-button-label"); + } + altText.textContent = msg; + altText.setAttribute("aria-label", msg); + altText.tabIndex = "0"; + const signal = __privateGet(this, _editor2)._uiManager._signal; + altText.addEventListener("contextmenu", noContextMenu, { + signal + }); + altText.addEventListener("pointerdown", (event) => event.stopPropagation(), { + signal + }); + const onClick = (event) => { + event.preventDefault(); + __privateGet(this, _editor2)._uiManager.editAltText(__privateGet(this, _editor2)); + if (__privateGet(this, _useNewAltTextFlow)) { + __privateGet(this, _editor2)._reportTelemetry({ + action: "pdfjs.image.alt_text.image_status_label_clicked", + data: { + label: __privateGet(this, _label, label_get) + } + }); + } + }; + altText.addEventListener("click", onClick, { + capture: true, + signal + }); + altText.addEventListener("keydown", (event) => { + if (event.target === altText && event.key === "Enter") { + __privateSet(this, _altTextWasFromKeyBoard, true); + onClick(event); + } + }, { + signal + }); + await __privateMethod(this, _setState, setState_fn).call(this); + return altText; + } + finish() { + if (!__privateGet(this, _altTextButton)) { + return; + } + __privateGet(this, _altTextButton).focus({ + focusVisible: __privateGet(this, _altTextWasFromKeyBoard) + }); + __privateSet(this, _altTextWasFromKeyBoard, false); + } + isEmpty() { + if (__privateGet(this, _useNewAltTextFlow)) { + return __privateGet(this, _altText2) === null; + } + return !__privateGet(this, _altText2) && !__privateGet(this, _altTextDecorative); + } + hasData() { + if (__privateGet(this, _useNewAltTextFlow)) { + return __privateGet(this, _altText2) !== null || !!__privateGet(this, _guessedText); + } + return this.isEmpty(); + } + get guessedText() { + return __privateGet(this, _guessedText); + } + async setGuessedText(guessedText) { + if (__privateGet(this, _altText2) !== null) { + return; + } + __privateSet(this, _guessedText, guessedText); + __privateSet(this, _textWithDisclaimer, await _AltText._l10nPromise.get("pdfjs-editor-new-alt-text-generated-alt-text-with-disclaimer")({ + generatedAltText: guessedText + })); + __privateMethod(this, _setState, setState_fn).call(this); + } + toggleAltTextBadge(visibility = false) { + var _a2; + if (!__privateGet(this, _useNewAltTextFlow) || __privateGet(this, _altText2)) { + (_a2 = __privateGet(this, _badge)) == null ? void 0 : _a2.remove(); + __privateSet(this, _badge, null); + return; + } + if (!__privateGet(this, _badge)) { + const badge = __privateSet(this, _badge, document.createElement("div")); + badge.className = "noAltTextBadge"; + __privateGet(this, _editor2).div.append(badge); + } + __privateGet(this, _badge).classList.toggle("hidden", !visibility); + } + serialize(isForCopying) { + let altText = __privateGet(this, _altText2); + if (!isForCopying && __privateGet(this, _guessedText) === altText) { + altText = __privateGet(this, _textWithDisclaimer); + } + return { + altText, + decorative: __privateGet(this, _altTextDecorative), + guessedText: __privateGet(this, _guessedText), + textWithDisclaimer: __privateGet(this, _textWithDisclaimer) + }; + } + get data() { + return { + altText: __privateGet(this, _altText2), + decorative: __privateGet(this, _altTextDecorative) + }; + } + set data({ + altText, + decorative, + guessedText, + textWithDisclaimer, + cancel = false + }) { + if (guessedText) { + __privateSet(this, _guessedText, guessedText); + __privateSet(this, _textWithDisclaimer, textWithDisclaimer); + } + if (__privateGet(this, _altText2) === altText && __privateGet(this, _altTextDecorative) === decorative) { + return; + } + if (!cancel) { + __privateSet(this, _altText2, altText); + __privateSet(this, _altTextDecorative, decorative); + } + __privateMethod(this, _setState, setState_fn).call(this); + } + toggle(enabled = false) { + if (!__privateGet(this, _altTextButton)) { + return; + } + if (!enabled && __privateGet(this, _altTextTooltipTimeout)) { + clearTimeout(__privateGet(this, _altTextTooltipTimeout)); + __privateSet(this, _altTextTooltipTimeout, null); + } + __privateGet(this, _altTextButton).disabled = !enabled; + } + shown() { + __privateGet(this, _editor2)._reportTelemetry({ + action: "pdfjs.image.alt_text.image_status_label_displayed", + data: { + label: __privateGet(this, _label, label_get) + } + }); + } + destroy() { + var _a2, _b; + (_a2 = __privateGet(this, _altTextButton)) == null ? void 0 : _a2.remove(); + __privateSet(this, _altTextButton, null); + __privateSet(this, _altTextTooltip, null); + (_b = __privateGet(this, _badge)) == null ? void 0 : _b.remove(); + __privateSet(this, _badge, null); + } +}; +var AltText = _AltText; +_altText2 = new WeakMap(); +_altTextDecorative = new WeakMap(); +_altTextButton = new WeakMap(); +_altTextTooltip = new WeakMap(); +_altTextTooltipTimeout = new WeakMap(); +_altTextWasFromKeyBoard = new WeakMap(); +_badge = new WeakMap(); +_editor2 = new WeakMap(); +_guessedText = new WeakMap(); +_textWithDisclaimer = new WeakMap(); +_useNewAltTextFlow = new WeakMap(); +_label = new WeakSet(); +label_get = function() { + return __privateGet(this, _altText2) && "added" || __privateGet(this, _altText2) === null && this.guessedText && "review" || "missing"; +}; +_setState = new WeakSet(); +setState_fn = async function() { + var _a2, _b; + const button = __privateGet(this, _altTextButton); + if (!button) { + return; + } + if (__privateGet(this, _useNewAltTextFlow)) { + const label = __privateGet(this, _label, label_get); + const type = label === "review" ? "to-review" : label; + button.classList.toggle("done", !!__privateGet(this, _altText2)); + _AltText._l10nPromise.get(`pdfjs-editor-new-alt-text-${type}-button-label`).then((msg) => { + button.setAttribute("aria-label", msg); + for (const child of button.childNodes) { + if (child.nodeType === Node.TEXT_NODE) { + child.textContent = msg; + break; + } + } + }); + if (!__privateGet(this, _altText2)) { + (_a2 = __privateGet(this, _altTextTooltip)) == null ? void 0 : _a2.remove(); + return; + } + } else { + if (!__privateGet(this, _altText2) && !__privateGet(this, _altTextDecorative)) { + button.classList.remove("done"); + (_b = __privateGet(this, _altTextTooltip)) == null ? void 0 : _b.remove(); + return; + } + button.classList.add("done"); + _AltText._l10nPromise.get("pdfjs-editor-alt-text-edit-button-label").then((msg) => { + button.setAttribute("aria-label", msg); + }); + } + let tooltip = __privateGet(this, _altTextTooltip); + if (!tooltip) { + __privateSet(this, _altTextTooltip, tooltip = document.createElement("span")); + tooltip.className = "tooltip"; + tooltip.setAttribute("role", "tooltip"); + const id = tooltip.id = `alt-text-tooltip-${__privateGet(this, _editor2).id}`; + button.setAttribute("aria-describedby", id); + const DELAY_TO_SHOW_TOOLTIP = 100; + const signal = __privateGet(this, _editor2)._uiManager._signal; + signal.addEventListener("abort", () => { + clearTimeout(__privateGet(this, _altTextTooltipTimeout)); + __privateSet(this, _altTextTooltipTimeout, null); + }, { + once: true + }); + button.addEventListener("mouseenter", () => { + __privateSet(this, _altTextTooltipTimeout, setTimeout(() => { + __privateSet(this, _altTextTooltipTimeout, null); + __privateGet(this, _altTextTooltip).classList.add("show"); + __privateGet(this, _editor2)._reportTelemetry({ + action: "alt_text_tooltip" + }); + }, DELAY_TO_SHOW_TOOLTIP)); + }, { + signal + }); + button.addEventListener("mouseleave", () => { + var _a3; + if (__privateGet(this, _altTextTooltipTimeout)) { + clearTimeout(__privateGet(this, _altTextTooltipTimeout)); + __privateSet(this, _altTextTooltipTimeout, null); + } + (_a3 = __privateGet(this, _altTextTooltip)) == null ? void 0 : _a3.classList.remove("show"); + }, { + signal + }); + } + tooltip.innerText = __privateGet(this, _altTextDecorative) ? await _AltText._l10nPromise.get("pdfjs-editor-alt-text-decorative-tooltip") : __privateGet(this, _altText2); + if (!tooltip.parentNode) { + button.append(tooltip); + } + const element2 = __privateGet(this, _editor2).getImageForAltText(); + element2 == null ? void 0 : element2.setAttribute("aria-describedby", tooltip.id); +}; +__publicField(AltText, "_l10nPromise", null); +var _accessibilityData, _allResizerDivs, _altText3, _disabled, _keepAspectRatio, _resizersDiv, _savedDimensions, _focusAC, _focusedResizerName, _hasBeenClicked, _initialPosition, _isEditing, _isInEditMode, _isResizerEnabledForKeyboard, _moveInDOMTimeout, _prevDragX, _prevDragY, _telemetryTimeouts, _isDraggable, _zIndex, _translate, translate_fn, _rotatePoint, rotatePoint_fn, _getRotationMatrix, getRotationMatrix_fn, _createResizers, createResizers_fn, _resizerPointerdown, resizerPointerdown_fn, _addResizeToUndoStack, addResizeToUndoStack_fn, _resizerPointermove, resizerPointermove_fn, _selectOnPointerEvent, selectOnPointerEvent_fn, _setUpDragSession, setUpDragSession_fn, _addFocusListeners, addFocusListeners_fn, _resizerKeydown, resizerKeydown_fn, _resizerBlur, resizerBlur_fn, _resizerFocus, resizerFocus_fn, _setResizerTabIndex, setResizerTabIndex_fn, _stopResizing, stopResizing_fn; +var _AnnotationEditor = class { + constructor(parameters) { + __privateAdd(this, _translate); + __privateAdd(this, _getRotationMatrix); + __privateAdd(this, _createResizers); + __privateAdd(this, _resizerPointerdown); + __privateAdd(this, _addResizeToUndoStack); + __privateAdd(this, _resizerPointermove); + __privateAdd(this, _selectOnPointerEvent); + __privateAdd(this, _setUpDragSession); + __privateAdd(this, _addFocusListeners); + __privateAdd(this, _resizerKeydown); + __privateAdd(this, _resizerBlur); + __privateAdd(this, _resizerFocus); + __privateAdd(this, _setResizerTabIndex); + __privateAdd(this, _stopResizing); + __privateAdd(this, _accessibilityData, null); + __privateAdd(this, _allResizerDivs, null); + __privateAdd(this, _altText3, null); + __privateAdd(this, _disabled, false); + __privateAdd(this, _keepAspectRatio, false); + __privateAdd(this, _resizersDiv, null); + __privateAdd(this, _savedDimensions, null); + __privateAdd(this, _focusAC, null); + __privateAdd(this, _focusedResizerName, ""); + __privateAdd(this, _hasBeenClicked, false); + __privateAdd(this, _initialPosition, null); + __privateAdd(this, _isEditing, false); + __privateAdd(this, _isInEditMode, false); + __privateAdd(this, _isResizerEnabledForKeyboard, false); + __privateAdd(this, _moveInDOMTimeout, null); + __privateAdd(this, _prevDragX, 0); + __privateAdd(this, _prevDragY, 0); + __privateAdd(this, _telemetryTimeouts, null); + __publicField(this, "_editToolbar", null); + __publicField(this, "_initialOptions", /* @__PURE__ */ Object.create(null)); + __publicField(this, "_isVisible", true); + __publicField(this, "_uiManager", null); + __publicField(this, "_focusEventsAllowed", true); + __privateAdd(this, _isDraggable, false); + __privateAdd(this, _zIndex, _AnnotationEditor._zIndex++); + this.parent = parameters.parent; + this.id = parameters.id; + this.width = this.height = null; + this.pageIndex = parameters.parent.pageIndex; + this.name = parameters.name; + this.div = null; + this._uiManager = parameters.uiManager; + this.annotationElementId = null; + this._willKeepAspectRatio = false; + this._initialOptions.isCentered = parameters.isCentered; + this._structTreeParentId = null; + const { + rotation, + rawDims: { + pageWidth, + pageHeight, + pageX, + pageY + } + } = this.parent.viewport; + this.rotation = rotation; + this.pageRotation = (360 + rotation - this._uiManager.viewParameters.rotation) % 360; + this.pageDimensions = [pageWidth, pageHeight]; + this.pageTranslation = [pageX, pageY]; + const [width, height] = this.parentDimensions; + this.x = parameters.x / width; + this.y = parameters.y / height; + this.isAttachedToDOM = false; + this.deleted = false; + } + static get _resizerKeyboardManager() { + const resize = _AnnotationEditor.prototype._resizeWithKeyboard; + const small = AnnotationEditorUIManager.TRANSLATE_SMALL; + const big = AnnotationEditorUIManager.TRANSLATE_BIG; + return shadow(this, "_resizerKeyboardManager", new KeyboardManager([[["ArrowLeft", "mac+ArrowLeft"], resize, { + args: [-small, 0] + }], [["ctrl+ArrowLeft", "mac+shift+ArrowLeft"], resize, { + args: [-big, 0] + }], [["ArrowRight", "mac+ArrowRight"], resize, { + args: [small, 0] + }], [["ctrl+ArrowRight", "mac+shift+ArrowRight"], resize, { + args: [big, 0] + }], [["ArrowUp", "mac+ArrowUp"], resize, { + args: [0, -small] + }], [["ctrl+ArrowUp", "mac+shift+ArrowUp"], resize, { + args: [0, -big] + }], [["ArrowDown", "mac+ArrowDown"], resize, { + args: [0, small] + }], [["ctrl+ArrowDown", "mac+shift+ArrowDown"], resize, { + args: [0, big] + }], [["Escape", "mac+Escape"], _AnnotationEditor.prototype._stopResizingWithKeyboard]])); + } + get editorType() { + return Object.getPrototypeOf(this).constructor._type; + } + static get _defaultLineColor() { + return shadow(this, "_defaultLineColor", this._colorManager.getHexCode("CanvasText")); + } + static deleteAnnotationElement(editor) { + const fakeEditor = new FakeEditor({ + id: editor.parent.getNextId(), + parent: editor.parent, + uiManager: editor._uiManager + }); + fakeEditor.annotationElementId = editor.annotationElementId; + fakeEditor.deleted = true; + fakeEditor._uiManager.addToAnnotationStorage(fakeEditor); + } + static initialize(l10n, _uiManager4, options) { + _AnnotationEditor._l10nResizer || (_AnnotationEditor._l10nResizer = Object.freeze({ + topLeft: "pdfjs-editor-resizer-top-left", + topMiddle: "pdfjs-editor-resizer-top-middle", + topRight: "pdfjs-editor-resizer-top-right", + middleRight: "pdfjs-editor-resizer-middle-right", + bottomRight: "pdfjs-editor-resizer-bottom-right", + bottomMiddle: "pdfjs-editor-resizer-bottom-middle", + bottomLeft: "pdfjs-editor-resizer-bottom-left", + middleLeft: "pdfjs-editor-resizer-middle-left" + })); + _AnnotationEditor._l10nPromise || (_AnnotationEditor._l10nPromise = new Map([...["pdfjs-editor-alt-text-button-label", "pdfjs-editor-alt-text-edit-button-label", "pdfjs-editor-alt-text-decorative-tooltip", "pdfjs-editor-new-alt-text-added-button-label", "pdfjs-editor-new-alt-text-missing-button-label", "pdfjs-editor-new-alt-text-to-review-button-label"].map((str) => [str, l10n.get(str)]), ...["pdfjs-editor-new-alt-text-generated-alt-text-with-disclaimer"].map((str) => [str, l10n.get.bind(l10n, str)])])); + if (options == null ? void 0 : options.strings) { + for (const str of options.strings) { + _AnnotationEditor._l10nPromise.set(str, l10n.get(str)); + } + } + if (_AnnotationEditor._borderLineWidth !== -1) { + return; + } + const style = getComputedStyle(document.documentElement); + _AnnotationEditor._borderLineWidth = parseFloat(style.getPropertyValue("--outline-width")) || 0; + } + static updateDefaultParams(_type2, _value) { + } + static get defaultPropertiesToUpdate() { + return []; + } + static isHandlingMimeForPasting(mime) { + return false; + } + static paste(item, parent) { + unreachable("Not implemented"); + } + get propertiesToUpdate() { + return []; + } + get _isDraggable() { + return __privateGet(this, _isDraggable); + } + set _isDraggable(value) { + var _a2; + __privateSet(this, _isDraggable, value); + (_a2 = this.div) == null ? void 0 : _a2.classList.toggle("draggable", value); + } + get isEnterHandled() { + return true; + } + center() { + const [pageWidth, pageHeight] = this.pageDimensions; + switch (this.parentRotation) { + case 90: + this.x -= this.height * pageHeight / (pageWidth * 2); + this.y += this.width * pageWidth / (pageHeight * 2); + break; + case 180: + this.x += this.width / 2; + this.y += this.height / 2; + break; + case 270: + this.x += this.height * pageHeight / (pageWidth * 2); + this.y -= this.width * pageWidth / (pageHeight * 2); + break; + default: + this.x -= this.width / 2; + this.y -= this.height / 2; + break; + } + this.fixAndSetPosition(); + } + addCommands(params) { + this._uiManager.addCommands(params); + } + get currentLayer() { + return this._uiManager.currentLayer; + } + setInBackground() { + this.div.style.zIndex = 0; + } + setInForeground() { + this.div.style.zIndex = __privateGet(this, _zIndex); + } + setParent(parent) { + if (parent !== null) { + this.pageIndex = parent.pageIndex; + this.pageDimensions = parent.pageDimensions; + } else { + __privateMethod(this, _stopResizing, stopResizing_fn).call(this); + } + this.parent = parent; + } + focusin(event) { + if (!this._focusEventsAllowed) { + return; + } + if (!__privateGet(this, _hasBeenClicked)) { + this.parent.setSelected(this); + } else { + __privateSet(this, _hasBeenClicked, false); + } + } + focusout(event) { + var _a2; + if (!this._focusEventsAllowed) { + return; + } + if (!this.isAttachedToDOM) { + return; + } + const target = event.relatedTarget; + if (target == null ? void 0 : target.closest(`#${this.id}`)) { + return; + } + event.preventDefault(); + if (!((_a2 = this.parent) == null ? void 0 : _a2.isMultipleSelection)) { + this.commitOrRemove(); + } + } + commitOrRemove() { + if (this.isEmpty()) { + this.remove(); + } else { + this.commit(); + } + } + commit() { + this.addToAnnotationStorage(); + } + addToAnnotationStorage() { + this._uiManager.addToAnnotationStorage(this); + } + setAt(x, y, tx, ty) { + const [width, height] = this.parentDimensions; + [tx, ty] = this.screenToPageTranslation(tx, ty); + this.x = (x + tx) / width; + this.y = (y + ty) / height; + this.fixAndSetPosition(); + } + translate(x, y) { + __privateMethod(this, _translate, translate_fn).call(this, this.parentDimensions, x, y); + } + translateInPage(x, y) { + __privateGet(this, _initialPosition) || __privateSet(this, _initialPosition, [this.x, this.y]); + __privateMethod(this, _translate, translate_fn).call(this, this.pageDimensions, x, y); + this.div.scrollIntoView({ + block: "nearest" + }); + } + drag(tx, ty) { + __privateGet(this, _initialPosition) || __privateSet(this, _initialPosition, [this.x, this.y]); + const [parentWidth, parentHeight] = this.parentDimensions; + this.x += tx / parentWidth; + this.y += ty / parentHeight; + if (this.parent && (this.x < 0 || this.x > 1 || this.y < 0 || this.y > 1)) { + const { + x: x2, + y: y2 + } = this.div.getBoundingClientRect(); + if (this.parent.findNewParent(this, x2, y2)) { + this.x -= Math.floor(this.x); + this.y -= Math.floor(this.y); + } + } + let { + x, + y + } = this; + const [bx, by] = this.getBaseTranslation(); + x += bx; + y += by; + this.div.style.left = `${(100 * x).toFixed(2)}%`; + this.div.style.top = `${(100 * y).toFixed(2)}%`; + this.div.scrollIntoView({ + block: "nearest" + }); + } + get _hasBeenMoved() { + return !!__privateGet(this, _initialPosition) && (__privateGet(this, _initialPosition)[0] !== this.x || __privateGet(this, _initialPosition)[1] !== this.y); + } + getBaseTranslation() { + const [parentWidth, parentHeight] = this.parentDimensions; + const { + _borderLineWidth + } = _AnnotationEditor; + const x = _borderLineWidth / parentWidth; + const y = _borderLineWidth / parentHeight; + switch (this.rotation) { + case 90: + return [-x, y]; + case 180: + return [x, y]; + case 270: + return [x, -y]; + default: + return [-x, -y]; + } + } + get _mustFixPosition() { + return true; + } + fixAndSetPosition(rotation = this.rotation) { + const [pageWidth, pageHeight] = this.pageDimensions; + let { + x, + y, + width, + height + } = this; + width *= pageWidth; + height *= pageHeight; + x *= pageWidth; + y *= pageHeight; + if (this._mustFixPosition) { + switch (rotation) { + case 0: + x = Math.max(0, Math.min(pageWidth - width, x)); + y = Math.max(0, Math.min(pageHeight - height, y)); + break; + case 90: + x = Math.max(0, Math.min(pageWidth - height, x)); + y = Math.min(pageHeight, Math.max(width, y)); + break; + case 180: + x = Math.min(pageWidth, Math.max(width, x)); + y = Math.min(pageHeight, Math.max(height, y)); + break; + case 270: + x = Math.min(pageWidth, Math.max(height, x)); + y = Math.max(0, Math.min(pageHeight - width, y)); + break; + } + } + this.x = x /= pageWidth; + this.y = y /= pageHeight; + const [bx, by] = this.getBaseTranslation(); + x += bx; + y += by; + const { + style + } = this.div; + style.left = `${(100 * x).toFixed(2)}%`; + style.top = `${(100 * y).toFixed(2)}%`; + this.moveInDOM(); + } + screenToPageTranslation(x, y) { + var _a2; + return __privateMethod(_a2 = _AnnotationEditor, _rotatePoint, rotatePoint_fn).call(_a2, x, y, this.parentRotation); + } + pageTranslationToScreen(x, y) { + var _a2; + return __privateMethod(_a2 = _AnnotationEditor, _rotatePoint, rotatePoint_fn).call(_a2, x, y, 360 - this.parentRotation); + } + get parentScale() { + return this._uiManager.viewParameters.realScale; + } + get parentRotation() { + return (this._uiManager.viewParameters.rotation + this.pageRotation) % 360; + } + get parentDimensions() { + const { + parentScale, + pageDimensions: [pageWidth, pageHeight] + } = this; + const scaledWidth = pageWidth * parentScale; + const scaledHeight = pageHeight * parentScale; + return util_FeatureTest.isCSSRoundSupported ? [Math.round(scaledWidth), Math.round(scaledHeight)] : [scaledWidth, scaledHeight]; + } + setDims(width, height) { + const [parentWidth, parentHeight] = this.parentDimensions; + this.div.style.width = `${(100 * width / parentWidth).toFixed(2)}%`; + if (!__privateGet(this, _keepAspectRatio)) { + this.div.style.height = `${(100 * height / parentHeight).toFixed(2)}%`; + } + } + fixDims() { + const { + style + } = this.div; + const { + height, + width + } = style; + const widthPercent = width.endsWith("%"); + const heightPercent = !__privateGet(this, _keepAspectRatio) && height.endsWith("%"); + if (widthPercent && heightPercent) { + return; + } + const [parentWidth, parentHeight] = this.parentDimensions; + if (!widthPercent) { + style.width = `${(100 * parseFloat(width) / parentWidth).toFixed(2)}%`; + } + if (!__privateGet(this, _keepAspectRatio) && !heightPercent) { + style.height = `${(100 * parseFloat(height) / parentHeight).toFixed(2)}%`; + } + } + getInitialTranslation() { + return [0, 0]; + } + altTextFinish() { + var _a2; + (_a2 = __privateGet(this, _altText3)) == null ? void 0 : _a2.finish(); + } + async addEditToolbar() { + if (this._editToolbar || __privateGet(this, _isInEditMode)) { + return this._editToolbar; + } + this._editToolbar = new EditorToolbar(this); + this.div.append(this._editToolbar.render()); + if (__privateGet(this, _altText3)) { + await this._editToolbar.addAltText(__privateGet(this, _altText3)); + } + return this._editToolbar; + } + removeEditToolbar() { + var _a2; + if (!this._editToolbar) { + return; + } + this._editToolbar.remove(); + this._editToolbar = null; + (_a2 = __privateGet(this, _altText3)) == null ? void 0 : _a2.destroy(); + } + getClientDimensions() { + return this.div.getBoundingClientRect(); + } + async addAltTextButton() { + if (__privateGet(this, _altText3)) { + return; + } + AltText.initialize(_AnnotationEditor._l10nPromise); + __privateSet(this, _altText3, new AltText(this)); + if (__privateGet(this, _accessibilityData)) { + __privateGet(this, _altText3).data = __privateGet(this, _accessibilityData); + __privateSet(this, _accessibilityData, null); + } + await this.addEditToolbar(); + } + get altTextData() { + var _a2; + return (_a2 = __privateGet(this, _altText3)) == null ? void 0 : _a2.data; + } + set altTextData(data) { + if (!__privateGet(this, _altText3)) { + return; + } + __privateGet(this, _altText3).data = data; + } + get guessedAltText() { + var _a2; + return (_a2 = __privateGet(this, _altText3)) == null ? void 0 : _a2.guessedText; + } + async setGuessedAltText(text2) { + var _a2; + await ((_a2 = __privateGet(this, _altText3)) == null ? void 0 : _a2.setGuessedText(text2)); + } + serializeAltText(isForCopying) { + var _a2; + return (_a2 = __privateGet(this, _altText3)) == null ? void 0 : _a2.serialize(isForCopying); + } + hasAltText() { + return !!__privateGet(this, _altText3) && !__privateGet(this, _altText3).isEmpty(); + } + hasAltTextData() { + var _a2, _b; + return (_b = (_a2 = __privateGet(this, _altText3)) == null ? void 0 : _a2.hasData()) != null ? _b : false; + } + render() { + this.div = document.createElement("div"); + this.div.setAttribute("data-editor-rotation", (360 - this.rotation) % 360); + this.div.className = this.name; + this.div.setAttribute("id", this.id); + this.div.tabIndex = __privateGet(this, _disabled) ? -1 : 0; + if (!this._isVisible) { + this.div.classList.add("hidden"); + } + this.setInForeground(); + __privateMethod(this, _addFocusListeners, addFocusListeners_fn).call(this); + const [parentWidth, parentHeight] = this.parentDimensions; + if (this.parentRotation % 180 !== 0) { + this.div.style.maxWidth = `${(100 * parentHeight / parentWidth).toFixed(2)}%`; + this.div.style.maxHeight = `${(100 * parentWidth / parentHeight).toFixed(2)}%`; + } + const [tx, ty] = this.getInitialTranslation(); + this.translate(tx, ty); + bindEvents(this, this.div, ["pointerdown"]); + return this.div; + } + pointerdown(event) { + const { + isMac + } = util_FeatureTest.platform; + if (event.button !== 0 || event.ctrlKey && isMac) { + event.preventDefault(); + return; + } + __privateSet(this, _hasBeenClicked, true); + if (this._isDraggable) { + __privateMethod(this, _setUpDragSession, setUpDragSession_fn).call(this, event); + return; + } + __privateMethod(this, _selectOnPointerEvent, selectOnPointerEvent_fn).call(this, event); + } + moveInDOM() { + if (__privateGet(this, _moveInDOMTimeout)) { + clearTimeout(__privateGet(this, _moveInDOMTimeout)); + } + __privateSet(this, _moveInDOMTimeout, setTimeout(() => { + var _a2; + __privateSet(this, _moveInDOMTimeout, null); + (_a2 = this.parent) == null ? void 0 : _a2.moveEditorInDOM(this); + }, 0)); + } + _setParentAndPosition(parent, x, y) { + parent.changeParent(this); + this.x = x; + this.y = y; + this.fixAndSetPosition(); + } + getRect(tx, ty, rotation = this.rotation) { + const scale = this.parentScale; + const [pageWidth, pageHeight] = this.pageDimensions; + const [pageX, pageY] = this.pageTranslation; + const shiftX = tx / scale; + const shiftY = ty / scale; + const x = this.x * pageWidth; + const y = this.y * pageHeight; + const width = this.width * pageWidth; + const height = this.height * pageHeight; + switch (rotation) { + case 0: + return [x + shiftX + pageX, pageHeight - y - shiftY - height + pageY, x + shiftX + width + pageX, pageHeight - y - shiftY + pageY]; + case 90: + return [x + shiftY + pageX, pageHeight - y + shiftX + pageY, x + shiftY + height + pageX, pageHeight - y + shiftX + width + pageY]; + case 180: + return [x - shiftX - width + pageX, pageHeight - y + shiftY + pageY, x - shiftX + pageX, pageHeight - y + shiftY + height + pageY]; + case 270: + return [x - shiftY - height + pageX, pageHeight - y - shiftX - width + pageY, x - shiftY + pageX, pageHeight - y - shiftX + pageY]; + default: + throw new Error("Invalid rotation"); + } + } + getRectInCurrentCoords(rect, pageHeight) { + const [x1, y1, x2, y2] = rect; + const width = x2 - x1; + const height = y2 - y1; + switch (this.rotation) { + case 0: + return [x1, pageHeight - y2, width, height]; + case 90: + return [x1, pageHeight - y1, height, width]; + case 180: + return [x2, pageHeight - y1, width, height]; + case 270: + return [x2, pageHeight - y2, height, width]; + default: + throw new Error("Invalid rotation"); + } + } + onceAdded() { + } + isEmpty() { + return false; + } + enableEditMode() { + __privateSet(this, _isInEditMode, true); + } + disableEditMode() { + __privateSet(this, _isInEditMode, false); + } + isInEditMode() { + return __privateGet(this, _isInEditMode); + } + shouldGetKeyboardEvents() { + return __privateGet(this, _isResizerEnabledForKeyboard); + } + needsToBeRebuilt() { + return this.div && !this.isAttachedToDOM; + } + rebuild() { + __privateMethod(this, _addFocusListeners, addFocusListeners_fn).call(this); + } + rotate(_angle) { + } + serialize(isForCopying = false, context = null) { + unreachable("An editor must be serializable"); + } + static deserialize(data, parent, uiManager) { + const editor = new this.prototype.constructor({ + parent, + id: parent.getNextId(), + uiManager + }); + editor.rotation = data.rotation; + __privateSet(editor, _accessibilityData, data.accessibilityData); + const [pageWidth, pageHeight] = editor.pageDimensions; + const [x, y, width, height] = editor.getRectInCurrentCoords(data.rect, pageHeight); + editor.x = x / pageWidth; + editor.y = y / pageHeight; + editor.width = width / pageWidth; + editor.height = height / pageHeight; + return editor; + } + get hasBeenModified() { + return !!this.annotationElementId && (this.deleted || this.serialize() !== null); + } + remove() { + var _a2; + (_a2 = __privateGet(this, _focusAC)) == null ? void 0 : _a2.abort(); + __privateSet(this, _focusAC, null); + if (!this.isEmpty()) { + this.commit(); + } + if (this.parent) { + this.parent.remove(this); + } else { + this._uiManager.removeEditor(this); + } + if (__privateGet(this, _moveInDOMTimeout)) { + clearTimeout(__privateGet(this, _moveInDOMTimeout)); + __privateSet(this, _moveInDOMTimeout, null); + } + __privateMethod(this, _stopResizing, stopResizing_fn).call(this); + this.removeEditToolbar(); + if (__privateGet(this, _telemetryTimeouts)) { + for (const timeout of __privateGet(this, _telemetryTimeouts).values()) { + clearTimeout(timeout); + } + __privateSet(this, _telemetryTimeouts, null); + } + this.parent = null; + } + get isResizable() { + return false; + } + makeResizable() { + if (this.isResizable) { + __privateMethod(this, _createResizers, createResizers_fn).call(this); + __privateGet(this, _resizersDiv).classList.remove("hidden"); + bindEvents(this, this.div, ["keydown"]); + } + } + get toolbarPosition() { + return null; + } + keydown(event) { + if (!this.isResizable || event.target !== this.div || event.key !== "Enter") { + return; + } + this._uiManager.setSelected(this); + __privateSet(this, _savedDimensions, { + savedX: this.x, + savedY: this.y, + savedWidth: this.width, + savedHeight: this.height + }); + const children2 = __privateGet(this, _resizersDiv).children; + if (!__privateGet(this, _allResizerDivs)) { + __privateSet(this, _allResizerDivs, Array.from(children2)); + const boundResizerKeydown = __privateMethod(this, _resizerKeydown, resizerKeydown_fn).bind(this); + const boundResizerBlur = __privateMethod(this, _resizerBlur, resizerBlur_fn).bind(this); + const signal = this._uiManager._signal; + for (const div of __privateGet(this, _allResizerDivs)) { + const name = div.getAttribute("data-resizer-name"); + div.setAttribute("role", "spinbutton"); + div.addEventListener("keydown", boundResizerKeydown, { + signal + }); + div.addEventListener("blur", boundResizerBlur, { + signal + }); + div.addEventListener("focus", __privateMethod(this, _resizerFocus, resizerFocus_fn).bind(this, name), { + signal + }); + div.setAttribute("data-l10n-id", _AnnotationEditor._l10nResizer[name]); + } + } + const first = __privateGet(this, _allResizerDivs)[0]; + let firstPosition = 0; + for (const div of children2) { + if (div === first) { + break; + } + firstPosition++; + } + const nextFirstPosition = (360 - this.rotation + this.parentRotation) % 360 / 90 * (__privateGet(this, _allResizerDivs).length / 4); + if (nextFirstPosition !== firstPosition) { + if (nextFirstPosition < firstPosition) { + for (let i2 = 0; i2 < firstPosition - nextFirstPosition; i2++) { + __privateGet(this, _resizersDiv).append(__privateGet(this, _resizersDiv).firstChild); + } + } else if (nextFirstPosition > firstPosition) { + for (let i2 = 0; i2 < nextFirstPosition - firstPosition; i2++) { + __privateGet(this, _resizersDiv).firstChild.before(__privateGet(this, _resizersDiv).lastChild); + } + } + let i = 0; + for (const child of children2) { + const div = __privateGet(this, _allResizerDivs)[i++]; + const name = div.getAttribute("data-resizer-name"); + child.setAttribute("data-l10n-id", _AnnotationEditor._l10nResizer[name]); + } + } + __privateMethod(this, _setResizerTabIndex, setResizerTabIndex_fn).call(this, 0); + __privateSet(this, _isResizerEnabledForKeyboard, true); + __privateGet(this, _resizersDiv).firstChild.focus({ + focusVisible: true + }); + event.preventDefault(); + event.stopImmediatePropagation(); + } + _resizeWithKeyboard(x, y) { + if (!__privateGet(this, _isResizerEnabledForKeyboard)) { + return; + } + __privateMethod(this, _resizerPointermove, resizerPointermove_fn).call(this, __privateGet(this, _focusedResizerName), { + movementX: x, + movementY: y + }); + } + _stopResizingWithKeyboard() { + __privateMethod(this, _stopResizing, stopResizing_fn).call(this); + this.div.focus(); + } + select() { + var _a2, _b, _c; + this.makeResizable(); + (_a2 = this.div) == null ? void 0 : _a2.classList.add("selectedEditor"); + if (!this._editToolbar) { + this.addEditToolbar().then(() => { + var _a3, _b2; + if ((_a3 = this.div) == null ? void 0 : _a3.classList.contains("selectedEditor")) { + (_b2 = this._editToolbar) == null ? void 0 : _b2.show(); + } + }); + return; + } + (_b = this._editToolbar) == null ? void 0 : _b.show(); + (_c = __privateGet(this, _altText3)) == null ? void 0 : _c.toggleAltTextBadge(false); + } + unselect() { + var _a2, _b, _c, _d, _e; + (_a2 = __privateGet(this, _resizersDiv)) == null ? void 0 : _a2.classList.add("hidden"); + (_b = this.div) == null ? void 0 : _b.classList.remove("selectedEditor"); + if ((_c = this.div) == null ? void 0 : _c.contains(document.activeElement)) { + this._uiManager.currentLayer.div.focus({ + preventScroll: true + }); + } + (_d = this._editToolbar) == null ? void 0 : _d.hide(); + (_e = __privateGet(this, _altText3)) == null ? void 0 : _e.toggleAltTextBadge(true); + } + updateParams(type, value) { + } + disableEditing() { + } + enableEditing() { + } + enterInEditMode() { + } + getImageForAltText() { + return null; + } + get contentDiv() { + return this.div; + } + get isEditing() { + return __privateGet(this, _isEditing); + } + set isEditing(value) { + __privateSet(this, _isEditing, value); + if (!this.parent) { + return; + } + if (value) { + this.parent.setSelected(this); + this.parent.setActiveEditor(this); + } else { + this.parent.setActiveEditor(null); + } + } + setAspectRatio(width, height) { + __privateSet(this, _keepAspectRatio, true); + const aspectRatio = width / height; + const { + style + } = this.div; + style.aspectRatio = aspectRatio; + style.height = "auto"; + } + static get MIN_SIZE() { + return 16; + } + static canCreateNewEmptyEditor() { + return true; + } + get telemetryInitialData() { + return { + action: "added" + }; + } + get telemetryFinalData() { + return null; + } + _reportTelemetry(data, mustWait = false) { + if (mustWait) { + __privateGet(this, _telemetryTimeouts) || __privateSet(this, _telemetryTimeouts, /* @__PURE__ */ new Map()); + const { + action + } = data; + let timeout = __privateGet(this, _telemetryTimeouts).get(action); + if (timeout) { + clearTimeout(timeout); + } + timeout = setTimeout(() => { + this._reportTelemetry(data); + __privateGet(this, _telemetryTimeouts).delete(action); + if (__privateGet(this, _telemetryTimeouts).size === 0) { + __privateSet(this, _telemetryTimeouts, null); + } + }, _AnnotationEditor._telemetryTimeout); + __privateGet(this, _telemetryTimeouts).set(action, timeout); + return; + } + data.type || (data.type = this.editorType); + this._uiManager._eventBus.dispatch("reporttelemetry", { + source: this, + details: { + type: "editing", + data + } + }); + } + show(visible = this._isVisible) { + this.div.classList.toggle("hidden", !visible); + this._isVisible = visible; + } + enable() { + if (this.div) { + this.div.tabIndex = 0; + } + __privateSet(this, _disabled, false); + } + disable() { + if (this.div) { + this.div.tabIndex = -1; + } + __privateSet(this, _disabled, true); + } + renderAnnotationElement(annotation) { + let content = annotation.container.querySelector(".annotationContent"); + if (!content) { + content = document.createElement("div"); + content.classList.add("annotationContent", this.editorType); + annotation.container.prepend(content); + } else if (content.nodeName === "CANVAS") { + const canvas = content; + content = document.createElement("div"); + content.classList.add("annotationContent", this.editorType); + canvas.before(content); + } + return content; + } + resetAnnotationElement(annotation) { + const { + firstChild + } = annotation.container; + if (firstChild.nodeName === "DIV" && firstChild.classList.contains("annotationContent")) { + firstChild.remove(); + } + } +}; +var AnnotationEditor = _AnnotationEditor; +_accessibilityData = new WeakMap(); +_allResizerDivs = new WeakMap(); +_altText3 = new WeakMap(); +_disabled = new WeakMap(); +_keepAspectRatio = new WeakMap(); +_resizersDiv = new WeakMap(); +_savedDimensions = new WeakMap(); +_focusAC = new WeakMap(); +_focusedResizerName = new WeakMap(); +_hasBeenClicked = new WeakMap(); +_initialPosition = new WeakMap(); +_isEditing = new WeakMap(); +_isInEditMode = new WeakMap(); +_isResizerEnabledForKeyboard = new WeakMap(); +_moveInDOMTimeout = new WeakMap(); +_prevDragX = new WeakMap(); +_prevDragY = new WeakMap(); +_telemetryTimeouts = new WeakMap(); +_isDraggable = new WeakMap(); +_zIndex = new WeakMap(); +_translate = new WeakSet(); +translate_fn = function([width, height], x, y) { + [x, y] = this.screenToPageTranslation(x, y); + this.x += x / width; + this.y += y / height; + this.fixAndSetPosition(); +}; +_rotatePoint = new WeakSet(); +rotatePoint_fn = function(x, y, angle) { + switch (angle) { + case 90: + return [y, -x]; + case 180: + return [-x, -y]; + case 270: + return [-y, x]; + default: + return [x, y]; + } +}; +_getRotationMatrix = new WeakSet(); +getRotationMatrix_fn = function(rotation) { + switch (rotation) { + case 90: { + const [pageWidth, pageHeight] = this.pageDimensions; + return [0, -pageWidth / pageHeight, pageHeight / pageWidth, 0]; + } + case 180: + return [-1, 0, 0, -1]; + case 270: { + const [pageWidth, pageHeight] = this.pageDimensions; + return [0, pageWidth / pageHeight, -pageHeight / pageWidth, 0]; + } + default: + return [1, 0, 0, 1]; + } +}; +_createResizers = new WeakSet(); +createResizers_fn = function() { + if (__privateGet(this, _resizersDiv)) { + return; + } + __privateSet(this, _resizersDiv, document.createElement("div")); + __privateGet(this, _resizersDiv).classList.add("resizers"); + const classes = this._willKeepAspectRatio ? ["topLeft", "topRight", "bottomRight", "bottomLeft"] : ["topLeft", "topMiddle", "topRight", "middleRight", "bottomRight", "bottomMiddle", "bottomLeft", "middleLeft"]; + const signal = this._uiManager._signal; + for (const name of classes) { + const div = document.createElement("div"); + __privateGet(this, _resizersDiv).append(div); + div.classList.add("resizer", name); + div.setAttribute("data-resizer-name", name); + div.addEventListener("pointerdown", __privateMethod(this, _resizerPointerdown, resizerPointerdown_fn).bind(this, name), { + signal + }); + div.addEventListener("contextmenu", noContextMenu, { + signal + }); + div.tabIndex = -1; + } + this.div.prepend(__privateGet(this, _resizersDiv)); +}; +_resizerPointerdown = new WeakSet(); +resizerPointerdown_fn = function(name, event) { + var _a2; + event.preventDefault(); + const { + isMac + } = util_FeatureTest.platform; + if (event.button !== 0 || event.ctrlKey && isMac) { + return; + } + (_a2 = __privateGet(this, _altText3)) == null ? void 0 : _a2.toggle(false); + const savedDraggable = this._isDraggable; + this._isDraggable = false; + const ac = new AbortController(); + const signal = this._uiManager.combinedSignal(ac); + this.parent.togglePointerEvents(false); + window.addEventListener("pointermove", __privateMethod(this, _resizerPointermove, resizerPointermove_fn).bind(this, name), { + passive: true, + capture: true, + signal + }); + window.addEventListener("contextmenu", noContextMenu, { + signal + }); + const savedX = this.x; + const savedY = this.y; + const savedWidth = this.width; + const savedHeight = this.height; + const savedParentCursor = this.parent.div.style.cursor; + const savedCursor = this.div.style.cursor; + this.div.style.cursor = this.parent.div.style.cursor = window.getComputedStyle(event.target).cursor; + const pointerUpCallback = () => { + var _a3; + ac.abort(); + this.parent.togglePointerEvents(true); + (_a3 = __privateGet(this, _altText3)) == null ? void 0 : _a3.toggle(true); + this._isDraggable = savedDraggable; + this.parent.div.style.cursor = savedParentCursor; + this.div.style.cursor = savedCursor; + __privateMethod(this, _addResizeToUndoStack, addResizeToUndoStack_fn).call(this, savedX, savedY, savedWidth, savedHeight); + }; + window.addEventListener("pointerup", pointerUpCallback, { + signal + }); + window.addEventListener("blur", pointerUpCallback, { + signal + }); +}; +_addResizeToUndoStack = new WeakSet(); +addResizeToUndoStack_fn = function(savedX, savedY, savedWidth, savedHeight) { + const newX = this.x; + const newY = this.y; + const newWidth = this.width; + const newHeight = this.height; + if (newX === savedX && newY === savedY && newWidth === savedWidth && newHeight === savedHeight) { + return; + } + this.addCommands({ + cmd: () => { + this.width = newWidth; + this.height = newHeight; + this.x = newX; + this.y = newY; + const [parentWidth, parentHeight] = this.parentDimensions; + this.setDims(parentWidth * newWidth, parentHeight * newHeight); + this.fixAndSetPosition(); + }, + undo: () => { + this.width = savedWidth; + this.height = savedHeight; + this.x = savedX; + this.y = savedY; + const [parentWidth, parentHeight] = this.parentDimensions; + this.setDims(parentWidth * savedWidth, parentHeight * savedHeight); + this.fixAndSetPosition(); + }, + mustExec: true + }); +}; +_resizerPointermove = new WeakSet(); +resizerPointermove_fn = function(name, event) { + const [parentWidth, parentHeight] = this.parentDimensions; + const savedX = this.x; + const savedY = this.y; + const savedWidth = this.width; + const savedHeight = this.height; + const minWidth = _AnnotationEditor.MIN_SIZE / parentWidth; + const minHeight = _AnnotationEditor.MIN_SIZE / parentHeight; + const round = (x) => Math.round(x * 1e4) / 1e4; + const rotationMatrix = __privateMethod(this, _getRotationMatrix, getRotationMatrix_fn).call(this, this.rotation); + const transf = (x, y) => [rotationMatrix[0] * x + rotationMatrix[2] * y, rotationMatrix[1] * x + rotationMatrix[3] * y]; + const invRotationMatrix = __privateMethod(this, _getRotationMatrix, getRotationMatrix_fn).call(this, 360 - this.rotation); + const invTransf = (x, y) => [invRotationMatrix[0] * x + invRotationMatrix[2] * y, invRotationMatrix[1] * x + invRotationMatrix[3] * y]; + let getPoint; + let getOpposite; + let isDiagonal = false; + let isHorizontal = false; + switch (name) { + case "topLeft": + isDiagonal = true; + getPoint = (w, h) => [0, 0]; + getOpposite = (w, h) => [w, h]; + break; + case "topMiddle": + getPoint = (w, h) => [w / 2, 0]; + getOpposite = (w, h) => [w / 2, h]; + break; + case "topRight": + isDiagonal = true; + getPoint = (w, h) => [w, 0]; + getOpposite = (w, h) => [0, h]; + break; + case "middleRight": + isHorizontal = true; + getPoint = (w, h) => [w, h / 2]; + getOpposite = (w, h) => [0, h / 2]; + break; + case "bottomRight": + isDiagonal = true; + getPoint = (w, h) => [w, h]; + getOpposite = (w, h) => [0, 0]; + break; + case "bottomMiddle": + getPoint = (w, h) => [w / 2, h]; + getOpposite = (w, h) => [w / 2, 0]; + break; + case "bottomLeft": + isDiagonal = true; + getPoint = (w, h) => [0, h]; + getOpposite = (w, h) => [w, 0]; + break; + case "middleLeft": + isHorizontal = true; + getPoint = (w, h) => [0, h / 2]; + getOpposite = (w, h) => [w, h / 2]; + break; + } + const point = getPoint(savedWidth, savedHeight); + const oppositePoint = getOpposite(savedWidth, savedHeight); + let transfOppositePoint = transf(...oppositePoint); + const oppositeX = round(savedX + transfOppositePoint[0]); + const oppositeY = round(savedY + transfOppositePoint[1]); + let ratioX = 1; + let ratioY = 1; + let [deltaX, deltaY] = this.screenToPageTranslation(event.movementX, event.movementY); + [deltaX, deltaY] = invTransf(deltaX / parentWidth, deltaY / parentHeight); + if (isDiagonal) { + const oldDiag = Math.hypot(savedWidth, savedHeight); + ratioX = ratioY = Math.max(Math.min(Math.hypot(oppositePoint[0] - point[0] - deltaX, oppositePoint[1] - point[1] - deltaY) / oldDiag, 1 / savedWidth, 1 / savedHeight), minWidth / savedWidth, minHeight / savedHeight); + } else if (isHorizontal) { + ratioX = Math.max(minWidth, Math.min(1, Math.abs(oppositePoint[0] - point[0] - deltaX))) / savedWidth; + } else { + ratioY = Math.max(minHeight, Math.min(1, Math.abs(oppositePoint[1] - point[1] - deltaY))) / savedHeight; + } + const newWidth = round(savedWidth * ratioX); + const newHeight = round(savedHeight * ratioY); + transfOppositePoint = transf(...getOpposite(newWidth, newHeight)); + const newX = oppositeX - transfOppositePoint[0]; + const newY = oppositeY - transfOppositePoint[1]; + this.width = newWidth; + this.height = newHeight; + this.x = newX; + this.y = newY; + this.setDims(parentWidth * newWidth, parentHeight * newHeight); + this.fixAndSetPosition(); +}; +_selectOnPointerEvent = new WeakSet(); +selectOnPointerEvent_fn = function(event) { + const { + isMac + } = util_FeatureTest.platform; + if (event.ctrlKey && !isMac || event.shiftKey || event.metaKey && isMac) { + this.parent.toggleSelected(this); + } else { + this.parent.setSelected(this); + } +}; +_setUpDragSession = new WeakSet(); +setUpDragSession_fn = function(event) { + const isSelected = this._uiManager.isSelected(this); + this._uiManager.setUpDragSession(); + const ac = new AbortController(); + const signal = this._uiManager.combinedSignal(ac); + if (isSelected) { + this.div.classList.add("moving"); + __privateSet(this, _prevDragX, event.clientX); + __privateSet(this, _prevDragY, event.clientY); + const pointerMoveCallback = (e) => { + const { + clientX: x, + clientY: y + } = e; + const [tx, ty] = this.screenToPageTranslation(x - __privateGet(this, _prevDragX), y - __privateGet(this, _prevDragY)); + __privateSet(this, _prevDragX, x); + __privateSet(this, _prevDragY, y); + this._uiManager.dragSelectedEditors(tx, ty); + }; + window.addEventListener("pointermove", pointerMoveCallback, { + passive: true, + capture: true, + signal + }); + } + const pointerUpCallback = () => { + ac.abort(); + if (isSelected) { + this.div.classList.remove("moving"); + } + __privateSet(this, _hasBeenClicked, false); + if (!this._uiManager.endDragSession()) { + __privateMethod(this, _selectOnPointerEvent, selectOnPointerEvent_fn).call(this, event); + } + }; + window.addEventListener("pointerup", pointerUpCallback, { + signal + }); + window.addEventListener("blur", pointerUpCallback, { + signal + }); +}; +_addFocusListeners = new WeakSet(); +addFocusListeners_fn = function() { + if (__privateGet(this, _focusAC) || !this.div) { + return; + } + __privateSet(this, _focusAC, new AbortController()); + const signal = this._uiManager.combinedSignal(__privateGet(this, _focusAC)); + this.div.addEventListener("focusin", this.focusin.bind(this), { + signal + }); + this.div.addEventListener("focusout", this.focusout.bind(this), { + signal + }); +}; +_resizerKeydown = new WeakSet(); +resizerKeydown_fn = function(event) { + _AnnotationEditor._resizerKeyboardManager.exec(this, event); +}; +_resizerBlur = new WeakSet(); +resizerBlur_fn = function(event) { + var _a2; + if (__privateGet(this, _isResizerEnabledForKeyboard) && ((_a2 = event.relatedTarget) == null ? void 0 : _a2.parentNode) !== __privateGet(this, _resizersDiv)) { + __privateMethod(this, _stopResizing, stopResizing_fn).call(this); + } +}; +_resizerFocus = new WeakSet(); +resizerFocus_fn = function(name) { + __privateSet(this, _focusedResizerName, __privateGet(this, _isResizerEnabledForKeyboard) ? name : ""); +}; +_setResizerTabIndex = new WeakSet(); +setResizerTabIndex_fn = function(value) { + if (!__privateGet(this, _allResizerDivs)) { + return; + } + for (const div of __privateGet(this, _allResizerDivs)) { + div.tabIndex = value; + } +}; +_stopResizing = new WeakSet(); +stopResizing_fn = function() { + __privateSet(this, _isResizerEnabledForKeyboard, false); + __privateMethod(this, _setResizerTabIndex, setResizerTabIndex_fn).call(this, -1); + if (__privateGet(this, _savedDimensions)) { + const { + savedX, + savedY, + savedWidth, + savedHeight + } = __privateGet(this, _savedDimensions); + __privateMethod(this, _addResizeToUndoStack, addResizeToUndoStack_fn).call(this, savedX, savedY, savedWidth, savedHeight); + __privateSet(this, _savedDimensions, null); + } +}; +__privateAdd(AnnotationEditor, _rotatePoint); +__publicField(AnnotationEditor, "_l10nPromise", null); +__publicField(AnnotationEditor, "_l10nResizer", null); +__publicField(AnnotationEditor, "_borderLineWidth", -1); +__publicField(AnnotationEditor, "_colorManager", new ColorManager()); +__publicField(AnnotationEditor, "_zIndex", 1); +__publicField(AnnotationEditor, "_telemetryTimeout", 1e3); +var FakeEditor = class extends AnnotationEditor { + constructor(params) { + super(params); + this.annotationElementId = params.annotationElementId; + this.deleted = true; + } + serialize() { + return { + id: this.annotationElementId, + deleted: true, + pageIndex: this.pageIndex + }; + } +}; +var SEED = 3285377520; +var MASK_HIGH = 4294901760; +var MASK_LOW = 65535; +var MurmurHash3_64 = class { + constructor(seed) { + this.h1 = seed ? seed & 4294967295 : SEED; + this.h2 = seed ? seed & 4294967295 : SEED; + } + update(input) { + let data, length; + if (typeof input === "string") { + data = new Uint8Array(input.length * 2); + length = 0; + for (let i = 0, ii = input.length; i < ii; i++) { + const code = input.charCodeAt(i); + if (code <= 255) { + data[length++] = code; + } else { + data[length++] = code >>> 8; + data[length++] = code & 255; + } + } + } else if (ArrayBuffer.isView(input)) { + data = input.slice(); + length = data.byteLength; + } else { + throw new Error("Invalid data format, must be a string or TypedArray."); + } + const blockCounts = length >> 2; + const tailLength = length - blockCounts * 4; + const dataUint32 = new Uint32Array(data.buffer, 0, blockCounts); + let k1 = 0, k2 = 0; + let h1 = this.h1, h2 = this.h2; + const C1 = 3432918353, C2 = 461845907; + const C1_LOW = C1 & MASK_LOW, C2_LOW = C2 & MASK_LOW; + for (let i = 0; i < blockCounts; i++) { + if (i & 1) { + k1 = dataUint32[i]; + k1 = k1 * C1 & MASK_HIGH | k1 * C1_LOW & MASK_LOW; + k1 = k1 << 15 | k1 >>> 17; + k1 = k1 * C2 & MASK_HIGH | k1 * C2_LOW & MASK_LOW; + h1 ^= k1; + h1 = h1 << 13 | h1 >>> 19; + h1 = h1 * 5 + 3864292196; + } else { + k2 = dataUint32[i]; + k2 = k2 * C1 & MASK_HIGH | k2 * C1_LOW & MASK_LOW; + k2 = k2 << 15 | k2 >>> 17; + k2 = k2 * C2 & MASK_HIGH | k2 * C2_LOW & MASK_LOW; + h2 ^= k2; + h2 = h2 << 13 | h2 >>> 19; + h2 = h2 * 5 + 3864292196; + } + } + k1 = 0; + switch (tailLength) { + case 3: + k1 ^= data[blockCounts * 4 + 2] << 16; + case 2: + k1 ^= data[blockCounts * 4 + 1] << 8; + case 1: + k1 ^= data[blockCounts * 4]; + k1 = k1 * C1 & MASK_HIGH | k1 * C1_LOW & MASK_LOW; + k1 = k1 << 15 | k1 >>> 17; + k1 = k1 * C2 & MASK_HIGH | k1 * C2_LOW & MASK_LOW; + if (blockCounts & 1) { + h1 ^= k1; + } else { + h2 ^= k1; + } + } + this.h1 = h1; + this.h2 = h2; + } + hexdigest() { + let h1 = this.h1, h2 = this.h2; + h1 ^= h2 >>> 1; + h1 = h1 * 3981806797 & MASK_HIGH | h1 * 36045 & MASK_LOW; + h2 = h2 * 4283543511 & MASK_HIGH | ((h2 << 16 | h1 >>> 16) * 2950163797 & MASK_HIGH) >>> 16; + h1 ^= h2 >>> 1; + h1 = h1 * 444984403 & MASK_HIGH | h1 * 60499 & MASK_LOW; + h2 = h2 * 3301882366 & MASK_HIGH | ((h2 << 16 | h1 >>> 16) * 3120437893 & MASK_HIGH) >>> 16; + h1 ^= h2 >>> 1; + return (h1 >>> 0).toString(16).padStart(8, "0") + (h2 >>> 0).toString(16).padStart(8, "0"); + } +}; +var SerializableEmpty = Object.freeze({ + map: null, + hash: "", + transfer: void 0 +}); +var _modified, _modifiedIds, _storage, _setModified, setModified_fn; +var AnnotationStorage = class { + constructor() { + __privateAdd(this, _setModified); + __privateAdd(this, _modified, false); + __privateAdd(this, _modifiedIds, null); + __privateAdd(this, _storage, /* @__PURE__ */ new Map()); + this.onSetModified = null; + this.onResetModified = null; + this.onAnnotationEditor = null; + } + getValue(key, defaultValue) { + const value = __privateGet(this, _storage).get(key); + if (value === void 0) { + return defaultValue; + } + return Object.assign(defaultValue, value); + } + getRawValue(key) { + return __privateGet(this, _storage).get(key); + } + remove(key) { + __privateGet(this, _storage).delete(key); + if (__privateGet(this, _storage).size === 0) { + this.resetModified(); + } + if (typeof this.onAnnotationEditor === "function") { + for (const value of __privateGet(this, _storage).values()) { + if (value instanceof AnnotationEditor) { + return; + } + } + this.onAnnotationEditor(null); + } + } + setValue(key, value) { + const obj = __privateGet(this, _storage).get(key); + let modified = false; + if (obj !== void 0) { + for (const [entry, val] of Object.entries(value)) { + if (obj[entry] !== val) { + modified = true; + obj[entry] = val; + } + } + } else { + modified = true; + __privateGet(this, _storage).set(key, value); + } + if (modified) { + __privateMethod(this, _setModified, setModified_fn).call(this); + } + if (value instanceof AnnotationEditor && typeof this.onAnnotationEditor === "function") { + this.onAnnotationEditor(value.constructor._type); + } + } + has(key) { + return __privateGet(this, _storage).has(key); + } + getAll() { + return __privateGet(this, _storage).size > 0 ? objectFromMap(__privateGet(this, _storage)) : null; + } + setAll(obj) { + for (const [key, val] of Object.entries(obj)) { + this.setValue(key, val); + } + } + get size() { + return __privateGet(this, _storage).size; + } + resetModified() { + if (__privateGet(this, _modified)) { + __privateSet(this, _modified, false); + if (typeof this.onResetModified === "function") { + this.onResetModified(); + } + } + } + get print() { + return new PrintAnnotationStorage(this); + } + get serializable() { + if (__privateGet(this, _storage).size === 0) { + return SerializableEmpty; + } + const map = /* @__PURE__ */ new Map(), hash = new MurmurHash3_64(), transfer = []; + const context = /* @__PURE__ */ Object.create(null); + let hasBitmap = false; + for (const [key, val] of __privateGet(this, _storage)) { + const serialized = val instanceof AnnotationEditor ? val.serialize(false, context) : val; + if (serialized) { + map.set(key, serialized); + hash.update(`${key}:${JSON.stringify(serialized)}`); + hasBitmap || (hasBitmap = !!serialized.bitmap); + } + } + if (hasBitmap) { + for (const value of map.values()) { + if (value.bitmap) { + transfer.push(value.bitmap); + } + } + } + return map.size > 0 ? { + map, + hash: hash.hexdigest(), + transfer + } : SerializableEmpty; + } + get editorStats() { + var _a2; + let stats = null; + const typeToEditor = /* @__PURE__ */ new Map(); + for (const value of __privateGet(this, _storage).values()) { + if (!(value instanceof AnnotationEditor)) { + continue; + } + const editorStats = value.telemetryFinalData; + if (!editorStats) { + continue; + } + const { + type + } = editorStats; + if (!typeToEditor.has(type)) { + typeToEditor.set(type, Object.getPrototypeOf(value).constructor); + } + stats || (stats = /* @__PURE__ */ Object.create(null)); + const map = stats[type] || (stats[type] = /* @__PURE__ */ new Map()); + for (const [key, val] of Object.entries(editorStats)) { + if (key === "type") { + continue; + } + let counters = map.get(key); + if (!counters) { + counters = /* @__PURE__ */ new Map(); + map.set(key, counters); + } + const count = (_a2 = counters.get(val)) != null ? _a2 : 0; + counters.set(val, count + 1); + } + } + for (const [type, editor] of typeToEditor) { + stats[type] = editor.computeTelemetryFinalData(stats[type]); + } + return stats; + } + resetModifiedIds() { + __privateSet(this, _modifiedIds, null); + } + get modifiedIds() { + if (__privateGet(this, _modifiedIds)) { + return __privateGet(this, _modifiedIds); + } + const ids = []; + for (const value of __privateGet(this, _storage).values()) { + if (!(value instanceof AnnotationEditor) || !value.annotationElementId || !value.serialize()) { + continue; + } + ids.push(value.annotationElementId); + } + return __privateSet(this, _modifiedIds, { + ids: new Set(ids), + hash: ids.join(",") + }); + } +}; +_modified = new WeakMap(); +_modifiedIds = new WeakMap(); +_storage = new WeakMap(); +_setModified = new WeakSet(); +setModified_fn = function() { + if (!__privateGet(this, _modified)) { + __privateSet(this, _modified, true); + if (typeof this.onSetModified === "function") { + this.onSetModified(); + } + } +}; +var _serializable; +var PrintAnnotationStorage = class extends AnnotationStorage { + constructor(parent) { + super(); + __privateAdd(this, _serializable, void 0); + const { + map, + hash, + transfer + } = parent.serializable; + const clone = structuredClone(map, transfer ? { + transfer + } : null); + __privateSet(this, _serializable, { + map: clone, + hash, + transfer + }); + } + get print() { + unreachable("Should not call PrintAnnotationStorage.print"); + } + get serializable() { + return __privateGet(this, _serializable); + } + get modifiedIds() { + return shadow(this, "modifiedIds", { + ids: /* @__PURE__ */ new Set(), + hash: "" + }); + } +}; +_serializable = new WeakMap(); +var _systemFonts; +var FontLoader = class { + constructor({ + ownerDocument = globalThis.document, + styleElement = null + }) { + __privateAdd(this, _systemFonts, /* @__PURE__ */ new Set()); + this._document = ownerDocument; + this.nativeFontFaces = /* @__PURE__ */ new Set(); + this.styleElement = null; + this.loadingRequests = []; + this.loadTestFontId = 0; + } + addNativeFontFace(nativeFontFace) { + this.nativeFontFaces.add(nativeFontFace); + this._document.fonts.add(nativeFontFace); + } + removeNativeFontFace(nativeFontFace) { + this.nativeFontFaces.delete(nativeFontFace); + this._document.fonts.delete(nativeFontFace); + } + insertRule(rule) { + if (!this.styleElement) { + this.styleElement = this._document.createElement("style"); + this._document.documentElement.getElementsByTagName("head")[0].append(this.styleElement); + } + const styleSheet = this.styleElement.sheet; + styleSheet.insertRule(rule, styleSheet.cssRules.length); + } + clear() { + for (const nativeFontFace of this.nativeFontFaces) { + this._document.fonts.delete(nativeFontFace); + } + this.nativeFontFaces.clear(); + __privateGet(this, _systemFonts).clear(); + if (this.styleElement) { + this.styleElement.remove(); + this.styleElement = null; + } + } + async loadSystemFont({ + systemFontInfo: info2, + _inspectFont + }) { + if (!info2 || __privateGet(this, _systemFonts).has(info2.loadedName)) { + return; + } + assert(!this.disableFontFace, "loadSystemFont shouldn't be called when `disableFontFace` is set."); + if (this.isFontLoadingAPISupported) { + const { + loadedName, + src, + style + } = info2; + const fontFace = new FontFace(loadedName, src, style); + this.addNativeFontFace(fontFace); + try { + await fontFace.load(); + __privateGet(this, _systemFonts).add(loadedName); + _inspectFont == null ? void 0 : _inspectFont(info2); + } catch (e) { + warn(`Cannot load system font: ${info2.baseFontName}, installing it could help to improve PDF rendering.`); + this.removeNativeFontFace(fontFace); + } + return; + } + unreachable("Not implemented: loadSystemFont without the Font Loading API."); + } + async bind(font) { + if (font.attached || font.missingFile && !font.systemFontInfo) { + return; + } + font.attached = true; + if (font.systemFontInfo) { + await this.loadSystemFont(font); + return; + } + if (this.isFontLoadingAPISupported) { + const nativeFontFace = font.createNativeFontFace(); + if (nativeFontFace) { + this.addNativeFontFace(nativeFontFace); + try { + await nativeFontFace.loaded; + } catch (ex) { + warn(`Failed to load font '${nativeFontFace.family}': '${ex}'.`); + font.disableFontFace = true; + throw ex; + } + } + return; + } + const rule = font.createFontFaceRule(); + if (rule) { + this.insertRule(rule); + if (this.isSyncFontLoadingSupported) { + return; + } + await new Promise((resolve) => { + const request = this._queueLoadingCallback(resolve); + this._prepareFontLoadEvent(font, request); + }); + } + } + get isFontLoadingAPISupported() { + var _a2; + const hasFonts = !!((_a2 = this._document) == null ? void 0 : _a2.fonts); + return shadow(this, "isFontLoadingAPISupported", hasFonts); + } + get isSyncFontLoadingSupported() { + let supported = false; + if (isNodeJS) { + supported = true; + } else if (typeof navigator !== "undefined" && typeof (navigator == null ? void 0 : navigator.userAgent) === "string" && /Mozilla\/5.0.*?rv:\d+.*? Gecko/.test(navigator.userAgent)) { + supported = true; + } + return shadow(this, "isSyncFontLoadingSupported", supported); + } + _queueLoadingCallback(callback) { + function completeRequest() { + assert(!request.done, "completeRequest() cannot be called twice."); + request.done = true; + while (loadingRequests.length > 0 && loadingRequests[0].done) { + const otherRequest = loadingRequests.shift(); + setTimeout(otherRequest.callback, 0); + } + } + const { + loadingRequests + } = this; + const request = { + done: false, + complete: completeRequest, + callback + }; + loadingRequests.push(request); + return request; + } + get _loadTestFont() { + const testFont = atob("T1RUTwALAIAAAwAwQ0ZGIDHtZg4AAAOYAAAAgUZGVE1lkzZwAAAEHAAAABxHREVGABQAFQAABDgAAAAeT1MvMlYNYwkAAAEgAAAAYGNtYXABDQLUAAACNAAAAUJoZWFk/xVFDQAAALwAAAA2aGhlYQdkA+oAAAD0AAAAJGhtdHgD6AAAAAAEWAAAAAZtYXhwAAJQAAAAARgAAAAGbmFtZVjmdH4AAAGAAAAAsXBvc3T/hgAzAAADeAAAACAAAQAAAAEAALZRFsRfDzz1AAsD6AAAAADOBOTLAAAAAM4KHDwAAAAAA+gDIQAAAAgAAgAAAAAAAAABAAADIQAAAFoD6AAAAAAD6AABAAAAAAAAAAAAAAAAAAAAAQAAUAAAAgAAAAQD6AH0AAUAAAKKArwAAACMAooCvAAAAeAAMQECAAACAAYJAAAAAAAAAAAAAQAAAAAAAAAAAAAAAFBmRWQAwAAuAC4DIP84AFoDIQAAAAAAAQAAAAAAAAAAACAAIAABAAAADgCuAAEAAAAAAAAAAQAAAAEAAAAAAAEAAQAAAAEAAAAAAAIAAQAAAAEAAAAAAAMAAQAAAAEAAAAAAAQAAQAAAAEAAAAAAAUAAQAAAAEAAAAAAAYAAQAAAAMAAQQJAAAAAgABAAMAAQQJAAEAAgABAAMAAQQJAAIAAgABAAMAAQQJAAMAAgABAAMAAQQJAAQAAgABAAMAAQQJAAUAAgABAAMAAQQJAAYAAgABWABYAAAAAAAAAwAAAAMAAAAcAAEAAAAAADwAAwABAAAAHAAEACAAAAAEAAQAAQAAAC7//wAAAC7////TAAEAAAAAAAABBgAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAD/gwAyAAAAAQAAAAAAAAAAAAAAAAAAAAABAAQEAAEBAQJYAAEBASH4DwD4GwHEAvgcA/gXBIwMAYuL+nz5tQXkD5j3CBLnEQACAQEBIVhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYAAABAQAADwACAQEEE/t3Dov6fAH6fAT+fPp8+nwHDosMCvm1Cvm1DAz6fBQAAAAAAAABAAAAAMmJbzEAAAAAzgTjFQAAAADOBOQpAAEAAAAAAAAADAAUAAQAAAABAAAAAgABAAAAAAAAAAAD6AAAAAAAAA=="); + return shadow(this, "_loadTestFont", testFont); + } + _prepareFontLoadEvent(font, request) { + function int32(data2, offset) { + return data2.charCodeAt(offset) << 24 | data2.charCodeAt(offset + 1) << 16 | data2.charCodeAt(offset + 2) << 8 | data2.charCodeAt(offset + 3) & 255; + } + function spliceString(s, offset, remove, insert2) { + const chunk1 = s.substring(0, offset); + const chunk2 = s.substring(offset + remove); + return chunk1 + insert2 + chunk2; + } + let i, ii; + const canvas = this._document.createElement("canvas"); + canvas.width = 1; + canvas.height = 1; + const ctx = canvas.getContext("2d"); + let called = 0; + function isFontReady(name, callback) { + if (++called > 30) { + warn("Load test font never loaded."); + callback(); + return; + } + ctx.font = "30px " + name; + ctx.fillText(".", 0, 20); + const imageData = ctx.getImageData(0, 0, 1, 1); + if (imageData.data[3] > 0) { + callback(); + return; + } + setTimeout(isFontReady.bind(null, name, callback)); + } + const loadTestFontId = `lt${Date.now()}${this.loadTestFontId++}`; + let data = this._loadTestFont; + const COMMENT_OFFSET = 976; + data = spliceString(data, COMMENT_OFFSET, loadTestFontId.length, loadTestFontId); + const CFF_CHECKSUM_OFFSET = 16; + const XXXX_VALUE = 1482184792; + let checksum = int32(data, CFF_CHECKSUM_OFFSET); + for (i = 0, ii = loadTestFontId.length - 3; i < ii; i += 4) { + checksum = checksum - XXXX_VALUE + int32(loadTestFontId, i) | 0; + } + if (i < loadTestFontId.length) { + checksum = checksum - XXXX_VALUE + int32(loadTestFontId + "XXX", i) | 0; + } + data = spliceString(data, CFF_CHECKSUM_OFFSET, 4, string32(checksum)); + const url = `url(data:font/opentype;base64,${btoa(data)});`; + const rule = `@font-face {font-family:"${loadTestFontId}";src:${url}}`; + this.insertRule(rule); + const div = this._document.createElement("div"); + div.style.visibility = "hidden"; + div.style.width = div.style.height = "10px"; + div.style.position = "absolute"; + div.style.top = div.style.left = "0px"; + for (const name of [font.loadedName, loadTestFontId]) { + const span = this._document.createElement("span"); + span.textContent = "Hi"; + span.style.fontFamily = name; + div.append(span); + } + this._document.body.append(div); + isFontReady(loadTestFontId, () => { + div.remove(); + request.complete(); + }); + } +}; +_systemFonts = new WeakMap(); +var FontFaceObject = class { + constructor(translatedData, { + disableFontFace = false, + inspectFont = null + }) { + this.compiledGlyphs = /* @__PURE__ */ Object.create(null); + for (const i in translatedData) { + this[i] = translatedData[i]; + } + this.disableFontFace = disableFontFace === true; + this._inspectFont = inspectFont; + } + createNativeFontFace() { + var _a2; + if (!this.data || this.disableFontFace) { + return null; + } + let nativeFontFace; + if (!this.cssFontInfo) { + nativeFontFace = new FontFace(this.loadedName, this.data, {}); + } else { + const css = { + weight: this.cssFontInfo.fontWeight + }; + if (this.cssFontInfo.italicAngle) { + css.style = `oblique ${this.cssFontInfo.italicAngle}deg`; + } + nativeFontFace = new FontFace(this.cssFontInfo.fontFamily, this.data, css); + } + (_a2 = this._inspectFont) == null ? void 0 : _a2.call(this, this); + return nativeFontFace; + } + createFontFaceRule() { + var _a2; + if (!this.data || this.disableFontFace) { + return null; + } + const data = bytesToString(this.data); + const url = `url(data:${this.mimetype};base64,${btoa(data)});`; + let rule; + if (!this.cssFontInfo) { + rule = `@font-face {font-family:"${this.loadedName}";src:${url}}`; + } else { + let css = `font-weight: ${this.cssFontInfo.fontWeight};`; + if (this.cssFontInfo.italicAngle) { + css += `font-style: oblique ${this.cssFontInfo.italicAngle}deg;`; + } + rule = `@font-face {font-family:"${this.cssFontInfo.fontFamily}";${css}src:${url}}`; + } + (_a2 = this._inspectFont) == null ? void 0 : _a2.call(this, this, url); + return rule; + } + getPathGenerator(objs, character) { + if (this.compiledGlyphs[character] !== void 0) { + return this.compiledGlyphs[character]; + } + let cmds; + try { + cmds = objs.get(this.loadedName + "_path_" + character); + } catch (ex) { + warn(`getPathGenerator - ignoring character: "${ex}".`); + } + if (!Array.isArray(cmds) || cmds.length === 0) { + return this.compiledGlyphs[character] = function(c, size) { + }; + } + const commands = []; + for (let i = 0, ii = cmds.length; i < ii; ) { + switch (cmds[i++]) { + case FontRenderOps.BEZIER_CURVE_TO: + { + const [a, b, c, d, e, f] = cmds.slice(i, i + 6); + commands.push((ctx) => ctx.bezierCurveTo(a, b, c, d, e, f)); + i += 6; + } + break; + case FontRenderOps.MOVE_TO: + { + const [a, b] = cmds.slice(i, i + 2); + commands.push((ctx) => ctx.moveTo(a, b)); + i += 2; + } + break; + case FontRenderOps.LINE_TO: + { + const [a, b] = cmds.slice(i, i + 2); + commands.push((ctx) => ctx.lineTo(a, b)); + i += 2; + } + break; + case FontRenderOps.QUADRATIC_CURVE_TO: + { + const [a, b, c, d] = cmds.slice(i, i + 4); + commands.push((ctx) => ctx.quadraticCurveTo(a, b, c, d)); + i += 4; + } + break; + case FontRenderOps.RESTORE: + commands.push((ctx) => ctx.restore()); + break; + case FontRenderOps.SAVE: + commands.push((ctx) => ctx.save()); + break; + case FontRenderOps.SCALE: + assert(commands.length === 2, "Scale command is only valid at the third position."); + break; + case FontRenderOps.TRANSFORM: + { + const [a, b, c, d, e, f] = cmds.slice(i, i + 6); + commands.push((ctx) => ctx.transform(a, b, c, d, e, f)); + i += 6; + } + break; + case FontRenderOps.TRANSLATE: + { + const [a, b] = cmds.slice(i, i + 2); + commands.push((ctx) => ctx.translate(a, b)); + i += 2; + } + break; + } + } + return this.compiledGlyphs[character] = function glyphDrawer(ctx, size) { + commands[0](ctx); + commands[1](ctx); + ctx.scale(size, -size); + for (let i = 2, ii = commands.length; i < ii; i++) { + commands[i](ctx); + } + }; + } +}; +if (isNodeJS) { + packageCapability = Promise.withResolvers(); + packageMap = null; + const loadPackages = async () => { + const fs = await import( + /*webpackIgnore: true*/ + "fs" + ), http = await import( + /*webpackIgnore: true*/ + "http" + ), https = await import( + /*webpackIgnore: true*/ + "https" + ), url = await import( + /*webpackIgnore: true*/ + "url" + ); + let canvas, path2d; + return new Map(Object.entries({ + fs, + http, + https, + url, + canvas, + path2d + })); + }; + loadPackages().then((map) => { + packageMap = map; + packageCapability.resolve(); + }, (reason) => { + warn(`loadPackages: ${reason}`); + packageMap = /* @__PURE__ */ new Map(); + packageCapability.resolve(); + }); +} +var packageCapability; +var packageMap; +var NodePackages = class { + static get promise() { + return packageCapability.promise; + } + static get(name) { + return packageMap == null ? void 0 : packageMap.get(name); + } +}; +var node_utils_fetchData = function(url) { + const fs = NodePackages.get("fs"); + return fs.promises.readFile(url).then((data) => new Uint8Array(data)); +}; +var NodeFilterFactory = class extends BaseFilterFactory { +}; +var NodeCanvasFactory = class extends BaseCanvasFactory { + _createCanvas(width, height) { + const canvas = NodePackages.get("canvas"); + return canvas.createCanvas(width, height); + } +}; +var NodeCMapReaderFactory = class extends BaseCMapReaderFactory { + _fetchData(url, compressionType) { + return node_utils_fetchData(url).then((data) => ({ + cMapData: data, + compressionType + })); + } +}; +var NodeStandardFontDataFactory = class extends BaseStandardFontDataFactory { + _fetchData(url) { + return node_utils_fetchData(url); + } +}; +var PathType = { + FILL: "Fill", + STROKE: "Stroke", + SHADING: "Shading" +}; +function applyBoundingBox(ctx, bbox) { + if (!bbox) { + return; + } + const width = bbox[2] - bbox[0]; + const height = bbox[3] - bbox[1]; + const region = new Path2D(); + region.rect(bbox[0], bbox[1], width, height); + ctx.clip(region); +} +var BaseShadingPattern = class { + getPattern() { + unreachable("Abstract method `getPattern` called."); + } +}; +var RadialAxialShadingPattern = class extends BaseShadingPattern { + constructor(IR) { + super(); + this._type = IR[1]; + this._bbox = IR[2]; + this._colorStops = IR[3]; + this._p0 = IR[4]; + this._p1 = IR[5]; + this._r0 = IR[6]; + this._r1 = IR[7]; + this.matrix = null; + } + _createGradient(ctx) { + let grad; + if (this._type === "axial") { + grad = ctx.createLinearGradient(this._p0[0], this._p0[1], this._p1[0], this._p1[1]); + } else if (this._type === "radial") { + grad = ctx.createRadialGradient(this._p0[0], this._p0[1], this._r0, this._p1[0], this._p1[1], this._r1); + } + for (const colorStop of this._colorStops) { + grad.addColorStop(colorStop[0], colorStop[1]); + } + return grad; + } + getPattern(ctx, owner, inverse, pathType) { + let pattern; + if (pathType === PathType.STROKE || pathType === PathType.FILL) { + const ownerBBox = owner.current.getClippedPathBoundingBox(pathType, getCurrentTransform(ctx)) || [0, 0, 0, 0]; + const width = Math.ceil(ownerBBox[2] - ownerBBox[0]) || 1; + const height = Math.ceil(ownerBBox[3] - ownerBBox[1]) || 1; + const tmpCanvas = owner.cachedCanvases.getCanvas("pattern", width, height, true); + const tmpCtx = tmpCanvas.context; + tmpCtx.clearRect(0, 0, tmpCtx.canvas.width, tmpCtx.canvas.height); + tmpCtx.beginPath(); + tmpCtx.rect(0, 0, tmpCtx.canvas.width, tmpCtx.canvas.height); + tmpCtx.translate(-ownerBBox[0], -ownerBBox[1]); + inverse = Util.transform(inverse, [1, 0, 0, 1, ownerBBox[0], ownerBBox[1]]); + tmpCtx.transform(...owner.baseTransform); + if (this.matrix) { + tmpCtx.transform(...this.matrix); + } + applyBoundingBox(tmpCtx, this._bbox); + tmpCtx.fillStyle = this._createGradient(tmpCtx); + tmpCtx.fill(); + pattern = ctx.createPattern(tmpCanvas.canvas, "no-repeat"); + const domMatrix = new DOMMatrix(inverse); + pattern.setTransform(domMatrix); + } else { + applyBoundingBox(ctx, this._bbox); + pattern = this._createGradient(ctx); + } + return pattern; + } +}; +function drawTriangle(data, context, p1, p2, p3, c1, c2, c3) { + const coords = context.coords, colors = context.colors; + const bytes = data.data, rowSize = data.width * 4; + let tmp; + if (coords[p1 + 1] > coords[p2 + 1]) { + tmp = p1; + p1 = p2; + p2 = tmp; + tmp = c1; + c1 = c2; + c2 = tmp; + } + if (coords[p2 + 1] > coords[p3 + 1]) { + tmp = p2; + p2 = p3; + p3 = tmp; + tmp = c2; + c2 = c3; + c3 = tmp; + } + if (coords[p1 + 1] > coords[p2 + 1]) { + tmp = p1; + p1 = p2; + p2 = tmp; + tmp = c1; + c1 = c2; + c2 = tmp; + } + const x1 = (coords[p1] + context.offsetX) * context.scaleX; + const y1 = (coords[p1 + 1] + context.offsetY) * context.scaleY; + const x2 = (coords[p2] + context.offsetX) * context.scaleX; + const y2 = (coords[p2 + 1] + context.offsetY) * context.scaleY; + const x3 = (coords[p3] + context.offsetX) * context.scaleX; + const y3 = (coords[p3 + 1] + context.offsetY) * context.scaleY; + if (y1 >= y3) { + return; + } + const c1r = colors[c1], c1g = colors[c1 + 1], c1b = colors[c1 + 2]; + const c2r = colors[c2], c2g = colors[c2 + 1], c2b = colors[c2 + 2]; + const c3r = colors[c3], c3g = colors[c3 + 1], c3b = colors[c3 + 2]; + const minY = Math.round(y1), maxY = Math.round(y3); + let xa, car, cag, cab; + let xb, cbr, cbg, cbb; + for (let y = minY; y <= maxY; y++) { + if (y < y2) { + const k2 = y < y1 ? 0 : (y1 - y) / (y1 - y2); + xa = x1 - (x1 - x2) * k2; + car = c1r - (c1r - c2r) * k2; + cag = c1g - (c1g - c2g) * k2; + cab = c1b - (c1b - c2b) * k2; + } else { + let k2; + if (y > y3) { + k2 = 1; + } else if (y2 === y3) { + k2 = 0; + } else { + k2 = (y2 - y) / (y2 - y3); + } + xa = x2 - (x2 - x3) * k2; + car = c2r - (c2r - c3r) * k2; + cag = c2g - (c2g - c3g) * k2; + cab = c2b - (c2b - c3b) * k2; + } + let k; + if (y < y1) { + k = 0; + } else if (y > y3) { + k = 1; + } else { + k = (y1 - y) / (y1 - y3); + } + xb = x1 - (x1 - x3) * k; + cbr = c1r - (c1r - c3r) * k; + cbg = c1g - (c1g - c3g) * k; + cbb = c1b - (c1b - c3b) * k; + const x1_ = Math.round(Math.min(xa, xb)); + const x2_ = Math.round(Math.max(xa, xb)); + let j = rowSize * y + x1_ * 4; + for (let x = x1_; x <= x2_; x++) { + k = (xa - x) / (xa - xb); + if (k < 0) { + k = 0; + } else if (k > 1) { + k = 1; + } + bytes[j++] = car - (car - cbr) * k | 0; + bytes[j++] = cag - (cag - cbg) * k | 0; + bytes[j++] = cab - (cab - cbb) * k | 0; + bytes[j++] = 255; + } + } +} +function drawFigure(data, figure, context) { + const ps = figure.coords; + const cs = figure.colors; + let i, ii; + switch (figure.type) { + case "lattice": + const verticesPerRow = figure.verticesPerRow; + const rows = Math.floor(ps.length / verticesPerRow) - 1; + const cols = verticesPerRow - 1; + for (i = 0; i < rows; i++) { + let q = i * verticesPerRow; + for (let j = 0; j < cols; j++, q++) { + drawTriangle(data, context, ps[q], ps[q + 1], ps[q + verticesPerRow], cs[q], cs[q + 1], cs[q + verticesPerRow]); + drawTriangle(data, context, ps[q + verticesPerRow + 1], ps[q + 1], ps[q + verticesPerRow], cs[q + verticesPerRow + 1], cs[q + 1], cs[q + verticesPerRow]); + } + } + break; + case "triangles": + for (i = 0, ii = ps.length; i < ii; i += 3) { + drawTriangle(data, context, ps[i], ps[i + 1], ps[i + 2], cs[i], cs[i + 1], cs[i + 2]); + } + break; + default: + throw new Error("illegal figure"); + } +} +var MeshShadingPattern = class extends BaseShadingPattern { + constructor(IR) { + super(); + this._coords = IR[2]; + this._colors = IR[3]; + this._figures = IR[4]; + this._bounds = IR[5]; + this._bbox = IR[7]; + this._background = IR[8]; + this.matrix = null; + } + _createMeshCanvas(combinedScale, backgroundColor, cachedCanvases) { + const EXPECTED_SCALE = 1.1; + const MAX_PATTERN_SIZE = 3e3; + const BORDER_SIZE = 2; + const offsetX = Math.floor(this._bounds[0]); + const offsetY = Math.floor(this._bounds[1]); + const boundsWidth = Math.ceil(this._bounds[2]) - offsetX; + const boundsHeight = Math.ceil(this._bounds[3]) - offsetY; + const width = Math.min(Math.ceil(Math.abs(boundsWidth * combinedScale[0] * EXPECTED_SCALE)), MAX_PATTERN_SIZE); + const height = Math.min(Math.ceil(Math.abs(boundsHeight * combinedScale[1] * EXPECTED_SCALE)), MAX_PATTERN_SIZE); + const scaleX = boundsWidth / width; + const scaleY = boundsHeight / height; + const context = { + coords: this._coords, + colors: this._colors, + offsetX: -offsetX, + offsetY: -offsetY, + scaleX: 1 / scaleX, + scaleY: 1 / scaleY + }; + const paddedWidth = width + BORDER_SIZE * 2; + const paddedHeight = height + BORDER_SIZE * 2; + const tmpCanvas = cachedCanvases.getCanvas("mesh", paddedWidth, paddedHeight, false); + const tmpCtx = tmpCanvas.context; + const data = tmpCtx.createImageData(width, height); + if (backgroundColor) { + const bytes = data.data; + for (let i = 0, ii = bytes.length; i < ii; i += 4) { + bytes[i] = backgroundColor[0]; + bytes[i + 1] = backgroundColor[1]; + bytes[i + 2] = backgroundColor[2]; + bytes[i + 3] = 255; + } + } + for (const figure of this._figures) { + drawFigure(data, figure, context); + } + tmpCtx.putImageData(data, BORDER_SIZE, BORDER_SIZE); + const canvas = tmpCanvas.canvas; + return { + canvas, + offsetX: offsetX - BORDER_SIZE * scaleX, + offsetY: offsetY - BORDER_SIZE * scaleY, + scaleX, + scaleY + }; + } + getPattern(ctx, owner, inverse, pathType) { + applyBoundingBox(ctx, this._bbox); + let scale; + if (pathType === PathType.SHADING) { + scale = Util.singularValueDecompose2dScale(getCurrentTransform(ctx)); + } else { + scale = Util.singularValueDecompose2dScale(owner.baseTransform); + if (this.matrix) { + const matrixScale = Util.singularValueDecompose2dScale(this.matrix); + scale = [scale[0] * matrixScale[0], scale[1] * matrixScale[1]]; + } + } + const temporaryPatternCanvas = this._createMeshCanvas(scale, pathType === PathType.SHADING ? null : this._background, owner.cachedCanvases); + if (pathType !== PathType.SHADING) { + ctx.setTransform(...owner.baseTransform); + if (this.matrix) { + ctx.transform(...this.matrix); + } + } + ctx.translate(temporaryPatternCanvas.offsetX, temporaryPatternCanvas.offsetY); + ctx.scale(temporaryPatternCanvas.scaleX, temporaryPatternCanvas.scaleY); + return ctx.createPattern(temporaryPatternCanvas.canvas, "no-repeat"); + } +}; +var DummyShadingPattern = class extends BaseShadingPattern { + getPattern() { + return "hotpink"; + } +}; +function getShadingPattern(IR) { + switch (IR[0]) { + case "RadialAxial": + return new RadialAxialShadingPattern(IR); + case "Mesh": + return new MeshShadingPattern(IR); + case "Dummy": + return new DummyShadingPattern(); + } + throw new Error(`Unknown IR type: ${IR[0]}`); +} +var PaintType = { + COLORED: 1, + UNCOLORED: 2 +}; +var _TilingPattern = class { + constructor(IR, color, ctx, canvasGraphicsFactory, baseTransform) { + this.operatorList = IR[2]; + this.matrix = IR[3]; + this.bbox = IR[4]; + this.xstep = IR[5]; + this.ystep = IR[6]; + this.paintType = IR[7]; + this.tilingType = IR[8]; + this.color = color; + this.ctx = ctx; + this.canvasGraphicsFactory = canvasGraphicsFactory; + this.baseTransform = baseTransform; + } + createPatternCanvas(owner) { + const operatorList = this.operatorList; + const bbox = this.bbox; + const xstep = this.xstep; + const ystep = this.ystep; + const paintType = this.paintType; + const tilingType = this.tilingType; + const color = this.color; + const canvasGraphicsFactory = this.canvasGraphicsFactory; + info("TilingType: " + tilingType); + const x0 = bbox[0], y0 = bbox[1], x1 = bbox[2], y1 = bbox[3]; + const matrixScale = Util.singularValueDecompose2dScale(this.matrix); + const curMatrixScale = Util.singularValueDecompose2dScale(this.baseTransform); + const combinedScale = [matrixScale[0] * curMatrixScale[0], matrixScale[1] * curMatrixScale[1]]; + const dimx = this.getSizeAndScale(xstep, this.ctx.canvas.width, combinedScale[0]); + const dimy = this.getSizeAndScale(ystep, this.ctx.canvas.height, combinedScale[1]); + const tmpCanvas = owner.cachedCanvases.getCanvas("pattern", dimx.size, dimy.size, true); + const tmpCtx = tmpCanvas.context; + const graphics = canvasGraphicsFactory.createCanvasGraphics(tmpCtx); + graphics.groupLevel = owner.groupLevel; + this.setFillAndStrokeStyleToContext(graphics, paintType, color); + let adjustedX0 = x0; + let adjustedY0 = y0; + let adjustedX1 = x1; + let adjustedY1 = y1; + if (x0 < 0) { + adjustedX0 = 0; + adjustedX1 += Math.abs(x0); + } + if (y0 < 0) { + adjustedY0 = 0; + adjustedY1 += Math.abs(y0); + } + tmpCtx.translate(-(dimx.scale * adjustedX0), -(dimy.scale * adjustedY0)); + graphics.transform(dimx.scale, 0, 0, dimy.scale, 0, 0); + tmpCtx.save(); + this.clipBbox(graphics, adjustedX0, adjustedY0, adjustedX1, adjustedY1); + graphics.baseTransform = getCurrentTransform(graphics.ctx); + graphics.executeOperatorList(operatorList); + graphics.endDrawing(); + return { + canvas: tmpCanvas.canvas, + scaleX: dimx.scale, + scaleY: dimy.scale, + offsetX: adjustedX0, + offsetY: adjustedY0 + }; + } + getSizeAndScale(step, realOutputSize, scale) { + step = Math.abs(step); + const maxSize = Math.max(_TilingPattern.MAX_PATTERN_SIZE, realOutputSize); + let size = Math.ceil(step * scale); + if (size >= maxSize) { + size = maxSize; + } else { + scale = size / step; + } + return { + scale, + size + }; + } + clipBbox(graphics, x0, y0, x1, y1) { + const bboxWidth = x1 - x0; + const bboxHeight = y1 - y0; + graphics.ctx.rect(x0, y0, bboxWidth, bboxHeight); + graphics.current.updateRectMinMax(getCurrentTransform(graphics.ctx), [x0, y0, x1, y1]); + graphics.clip(); + graphics.endPath(); + } + setFillAndStrokeStyleToContext(graphics, paintType, color) { + const context = graphics.ctx, current = graphics.current; + switch (paintType) { + case PaintType.COLORED: + const ctx = this.ctx; + context.fillStyle = ctx.fillStyle; + context.strokeStyle = ctx.strokeStyle; + current.fillColor = ctx.fillStyle; + current.strokeColor = ctx.strokeStyle; + break; + case PaintType.UNCOLORED: + const cssColor = Util.makeHexColor(color[0], color[1], color[2]); + context.fillStyle = cssColor; + context.strokeStyle = cssColor; + current.fillColor = cssColor; + current.strokeColor = cssColor; + break; + default: + throw new FormatError(`Unsupported paint type: ${paintType}`); + } + } + getPattern(ctx, owner, inverse, pathType) { + let matrix = inverse; + if (pathType !== PathType.SHADING) { + matrix = Util.transform(matrix, owner.baseTransform); + if (this.matrix) { + matrix = Util.transform(matrix, this.matrix); + } + } + const temporaryPatternCanvas = this.createPatternCanvas(owner); + let domMatrix = new DOMMatrix(matrix); + domMatrix = domMatrix.translate(temporaryPatternCanvas.offsetX, temporaryPatternCanvas.offsetY); + domMatrix = domMatrix.scale(1 / temporaryPatternCanvas.scaleX, 1 / temporaryPatternCanvas.scaleY); + const pattern = ctx.createPattern(temporaryPatternCanvas.canvas, "repeat"); + pattern.setTransform(domMatrix); + return pattern; + } +}; +var TilingPattern = _TilingPattern; +__publicField(TilingPattern, "MAX_PATTERN_SIZE", 3e3); +function convertBlackAndWhiteToRGBA({ + src, + srcPos = 0, + dest, + width, + height, + nonBlackColor = 4294967295, + inverseDecode = false +}) { + const black = util_FeatureTest.isLittleEndian ? 4278190080 : 255; + const [zeroMapping, oneMapping] = inverseDecode ? [nonBlackColor, black] : [black, nonBlackColor]; + const widthInSource = width >> 3; + const widthRemainder = width & 7; + const srcLength = src.length; + dest = new Uint32Array(dest.buffer); + let destPos = 0; + for (let i = 0; i < height; i++) { + for (const max = srcPos + widthInSource; srcPos < max; srcPos++) { + const elem2 = srcPos < srcLength ? src[srcPos] : 255; + dest[destPos++] = elem2 & 128 ? oneMapping : zeroMapping; + dest[destPos++] = elem2 & 64 ? oneMapping : zeroMapping; + dest[destPos++] = elem2 & 32 ? oneMapping : zeroMapping; + dest[destPos++] = elem2 & 16 ? oneMapping : zeroMapping; + dest[destPos++] = elem2 & 8 ? oneMapping : zeroMapping; + dest[destPos++] = elem2 & 4 ? oneMapping : zeroMapping; + dest[destPos++] = elem2 & 2 ? oneMapping : zeroMapping; + dest[destPos++] = elem2 & 1 ? oneMapping : zeroMapping; + } + if (widthRemainder === 0) { + continue; + } + const elem = srcPos < srcLength ? src[srcPos++] : 255; + for (let j = 0; j < widthRemainder; j++) { + dest[destPos++] = elem & 1 << 7 - j ? oneMapping : zeroMapping; + } + } + return { + srcPos, + destPos + }; +} +var MIN_FONT_SIZE = 16; +var MAX_FONT_SIZE = 100; +var EXECUTION_TIME = 15; +var EXECUTION_STEPS = 10; +var MAX_SIZE_TO_COMPILE = 1e3; +var FULL_CHUNK_HEIGHT = 16; +function mirrorContextOperations(ctx, destCtx) { + if (ctx._removeMirroring) { + throw new Error("Context is already forwarding operations."); + } + ctx.__originalSave = ctx.save; + ctx.__originalRestore = ctx.restore; + ctx.__originalRotate = ctx.rotate; + ctx.__originalScale = ctx.scale; + ctx.__originalTranslate = ctx.translate; + ctx.__originalTransform = ctx.transform; + ctx.__originalSetTransform = ctx.setTransform; + ctx.__originalResetTransform = ctx.resetTransform; + ctx.__originalClip = ctx.clip; + ctx.__originalMoveTo = ctx.moveTo; + ctx.__originalLineTo = ctx.lineTo; + ctx.__originalBezierCurveTo = ctx.bezierCurveTo; + ctx.__originalRect = ctx.rect; + ctx.__originalClosePath = ctx.closePath; + ctx.__originalBeginPath = ctx.beginPath; + ctx._removeMirroring = () => { + ctx.save = ctx.__originalSave; + ctx.restore = ctx.__originalRestore; + ctx.rotate = ctx.__originalRotate; + ctx.scale = ctx.__originalScale; + ctx.translate = ctx.__originalTranslate; + ctx.transform = ctx.__originalTransform; + ctx.setTransform = ctx.__originalSetTransform; + ctx.resetTransform = ctx.__originalResetTransform; + ctx.clip = ctx.__originalClip; + ctx.moveTo = ctx.__originalMoveTo; + ctx.lineTo = ctx.__originalLineTo; + ctx.bezierCurveTo = ctx.__originalBezierCurveTo; + ctx.rect = ctx.__originalRect; + ctx.closePath = ctx.__originalClosePath; + ctx.beginPath = ctx.__originalBeginPath; + delete ctx._removeMirroring; + }; + ctx.save = function ctxSave() { + destCtx.save(); + this.__originalSave(); + }; + ctx.restore = function ctxRestore() { + destCtx.restore(); + this.__originalRestore(); + }; + ctx.translate = function ctxTranslate(x, y) { + destCtx.translate(x, y); + this.__originalTranslate(x, y); + }; + ctx.scale = function ctxScale(x, y) { + destCtx.scale(x, y); + this.__originalScale(x, y); + }; + ctx.transform = function ctxTransform(a, b, c, d, e, f) { + destCtx.transform(a, b, c, d, e, f); + this.__originalTransform(a, b, c, d, e, f); + }; + ctx.setTransform = function ctxSetTransform(a, b, c, d, e, f) { + destCtx.setTransform(a, b, c, d, e, f); + this.__originalSetTransform(a, b, c, d, e, f); + }; + ctx.resetTransform = function ctxResetTransform() { + destCtx.resetTransform(); + this.__originalResetTransform(); + }; + ctx.rotate = function ctxRotate(angle) { + destCtx.rotate(angle); + this.__originalRotate(angle); + }; + ctx.clip = function ctxRotate(rule) { + destCtx.clip(rule); + this.__originalClip(rule); + }; + ctx.moveTo = function(x, y) { + destCtx.moveTo(x, y); + this.__originalMoveTo(x, y); + }; + ctx.lineTo = function(x, y) { + destCtx.lineTo(x, y); + this.__originalLineTo(x, y); + }; + ctx.bezierCurveTo = function(cp1x, cp1y, cp2x, cp2y, x, y) { + destCtx.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y); + this.__originalBezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y); + }; + ctx.rect = function(x, y, width, height) { + destCtx.rect(x, y, width, height); + this.__originalRect(x, y, width, height); + }; + ctx.closePath = function() { + destCtx.closePath(); + this.__originalClosePath(); + }; + ctx.beginPath = function() { + destCtx.beginPath(); + this.__originalBeginPath(); + }; +} +var CachedCanvases = class { + constructor(canvasFactory) { + this.canvasFactory = canvasFactory; + this.cache = /* @__PURE__ */ Object.create(null); + } + getCanvas(id, width, height) { + let canvasEntry; + if (this.cache[id] !== void 0) { + canvasEntry = this.cache[id]; + this.canvasFactory.reset(canvasEntry, width, height); + } else { + canvasEntry = this.canvasFactory.create(width, height); + this.cache[id] = canvasEntry; + } + return canvasEntry; + } + delete(id) { + delete this.cache[id]; + } + clear() { + for (const id in this.cache) { + const canvasEntry = this.cache[id]; + this.canvasFactory.destroy(canvasEntry); + delete this.cache[id]; + } + } +}; +function drawImageAtIntegerCoords(ctx, srcImg, srcX, srcY, srcW, srcH, destX, destY, destW, destH) { + const [a, b, c, d, tx, ty] = getCurrentTransform(ctx); + if (b === 0 && c === 0) { + const tlX = destX * a + tx; + const rTlX = Math.round(tlX); + const tlY = destY * d + ty; + const rTlY = Math.round(tlY); + const brX = (destX + destW) * a + tx; + const rWidth = Math.abs(Math.round(brX) - rTlX) || 1; + const brY = (destY + destH) * d + ty; + const rHeight = Math.abs(Math.round(brY) - rTlY) || 1; + ctx.setTransform(Math.sign(a), 0, 0, Math.sign(d), rTlX, rTlY); + ctx.drawImage(srcImg, srcX, srcY, srcW, srcH, 0, 0, rWidth, rHeight); + ctx.setTransform(a, b, c, d, tx, ty); + return [rWidth, rHeight]; + } + if (a === 0 && d === 0) { + const tlX = destY * c + tx; + const rTlX = Math.round(tlX); + const tlY = destX * b + ty; + const rTlY = Math.round(tlY); + const brX = (destY + destH) * c + tx; + const rWidth = Math.abs(Math.round(brX) - rTlX) || 1; + const brY = (destX + destW) * b + ty; + const rHeight = Math.abs(Math.round(brY) - rTlY) || 1; + ctx.setTransform(0, Math.sign(b), Math.sign(c), 0, rTlX, rTlY); + ctx.drawImage(srcImg, srcX, srcY, srcW, srcH, 0, 0, rHeight, rWidth); + ctx.setTransform(a, b, c, d, tx, ty); + return [rHeight, rWidth]; + } + ctx.drawImage(srcImg, srcX, srcY, srcW, srcH, destX, destY, destW, destH); + const scaleX = Math.hypot(a, b); + const scaleY = Math.hypot(c, d); + return [scaleX * destW, scaleY * destH]; +} +function compileType3Glyph(imgData) { + const { + width, + height + } = imgData; + if (width > MAX_SIZE_TO_COMPILE || height > MAX_SIZE_TO_COMPILE) { + return null; + } + const POINT_TO_PROCESS_LIMIT = 1e3; + const POINT_TYPES = new Uint8Array([0, 2, 4, 0, 1, 0, 5, 4, 8, 10, 0, 8, 0, 2, 1, 0]); + const width1 = width + 1; + let points = new Uint8Array(width1 * (height + 1)); + let i, j, j0; + const lineSize = width + 7 & ~7; + let data = new Uint8Array(lineSize * height), pos = 0; + for (const elem of imgData.data) { + let mask = 128; + while (mask > 0) { + data[pos++] = elem & mask ? 0 : 255; + mask >>= 1; + } + } + let count = 0; + pos = 0; + if (data[pos] !== 0) { + points[0] = 1; + ++count; + } + for (j = 1; j < width; j++) { + if (data[pos] !== data[pos + 1]) { + points[j] = data[pos] ? 2 : 1; + ++count; + } + pos++; + } + if (data[pos] !== 0) { + points[j] = 2; + ++count; + } + for (i = 1; i < height; i++) { + pos = i * lineSize; + j0 = i * width1; + if (data[pos - lineSize] !== data[pos]) { + points[j0] = data[pos] ? 1 : 8; + ++count; + } + let sum = (data[pos] ? 4 : 0) + (data[pos - lineSize] ? 8 : 0); + for (j = 1; j < width; j++) { + sum = (sum >> 2) + (data[pos + 1] ? 4 : 0) + (data[pos - lineSize + 1] ? 8 : 0); + if (POINT_TYPES[sum]) { + points[j0 + j] = POINT_TYPES[sum]; + ++count; + } + pos++; + } + if (data[pos - lineSize] !== data[pos]) { + points[j0 + j] = data[pos] ? 2 : 4; + ++count; + } + if (count > POINT_TO_PROCESS_LIMIT) { + return null; + } + } + pos = lineSize * (height - 1); + j0 = i * width1; + if (data[pos] !== 0) { + points[j0] = 8; + ++count; + } + for (j = 1; j < width; j++) { + if (data[pos] !== data[pos + 1]) { + points[j0 + j] = data[pos] ? 4 : 8; + ++count; + } + pos++; + } + if (data[pos] !== 0) { + points[j0 + j] = 4; + ++count; + } + if (count > POINT_TO_PROCESS_LIMIT) { + return null; + } + const steps = new Int32Array([0, width1, -1, 0, -width1, 0, 0, 0, 1]); + const path = new Path2D(); + for (i = 0; count && i <= height; i++) { + let p = i * width1; + const end = p + width; + while (p < end && !points[p]) { + p++; + } + if (p === end) { + continue; + } + path.moveTo(p % width1, i); + const p0 = p; + let type = points[p]; + do { + const step = steps[type]; + do { + p += step; + } while (!points[p]); + const pp = points[p]; + if (pp !== 5 && pp !== 10) { + type = pp; + points[p] = 0; + } else { + type = pp & 51 * type >> 4; + points[p] &= type >> 2 | type << 2; + } + path.lineTo(p % width1, p / width1 | 0); + if (!points[p]) { + --count; + } + } while (p0 !== p); + --i; + } + data = null; + points = null; + const drawOutline = function(c) { + c.save(); + c.scale(1 / width, -1 / height); + c.translate(0, -height); + c.fill(path); + c.beginPath(); + c.restore(); + }; + return drawOutline; +} +var CanvasExtraState = class { + constructor(width, height) { + this.alphaIsShape = false; + this.fontSize = 0; + this.fontSizeScale = 1; + this.textMatrix = IDENTITY_MATRIX; + this.textMatrixScale = 1; + this.fontMatrix = FONT_IDENTITY_MATRIX; + this.leading = 0; + this.x = 0; + this.y = 0; + this.lineX = 0; + this.lineY = 0; + this.charSpacing = 0; + this.wordSpacing = 0; + this.textHScale = 1; + this.textRenderingMode = TextRenderingMode.FILL; + this.textRise = 0; + this.fillColor = "#000000"; + this.strokeColor = "#000000"; + this.patternFill = false; + this.fillAlpha = 1; + this.strokeAlpha = 1; + this.lineWidth = 1; + this.activeSMask = null; + this.transferMaps = "none"; + this.startNewPathAndClipBox([0, 0, width, height]); + } + clone() { + const clone = Object.create(this); + clone.clipBox = this.clipBox.slice(); + return clone; + } + setCurrentPoint(x, y) { + this.x = x; + this.y = y; + } + updatePathMinMax(transform, x, y) { + [x, y] = Util.applyTransform([x, y], transform); + this.minX = Math.min(this.minX, x); + this.minY = Math.min(this.minY, y); + this.maxX = Math.max(this.maxX, x); + this.maxY = Math.max(this.maxY, y); + } + updateRectMinMax(transform, rect) { + const p1 = Util.applyTransform(rect, transform); + const p2 = Util.applyTransform(rect.slice(2), transform); + const p3 = Util.applyTransform([rect[0], rect[3]], transform); + const p4 = Util.applyTransform([rect[2], rect[1]], transform); + this.minX = Math.min(this.minX, p1[0], p2[0], p3[0], p4[0]); + this.minY = Math.min(this.minY, p1[1], p2[1], p3[1], p4[1]); + this.maxX = Math.max(this.maxX, p1[0], p2[0], p3[0], p4[0]); + this.maxY = Math.max(this.maxY, p1[1], p2[1], p3[1], p4[1]); + } + updateScalingPathMinMax(transform, minMax) { + Util.scaleMinMax(transform, minMax); + this.minX = Math.min(this.minX, minMax[0]); + this.minY = Math.min(this.minY, minMax[1]); + this.maxX = Math.max(this.maxX, minMax[2]); + this.maxY = Math.max(this.maxY, minMax[3]); + } + updateCurvePathMinMax(transform, x0, y0, x1, y1, x2, y2, x3, y3, minMax) { + const box = Util.bezierBoundingBox(x0, y0, x1, y1, x2, y2, x3, y3, minMax); + if (minMax) { + return; + } + this.updateRectMinMax(transform, box); + } + getPathBoundingBox(pathType = PathType.FILL, transform = null) { + const box = [this.minX, this.minY, this.maxX, this.maxY]; + if (pathType === PathType.STROKE) { + if (!transform) { + unreachable("Stroke bounding box must include transform."); + } + const scale = Util.singularValueDecompose2dScale(transform); + const xStrokePad = scale[0] * this.lineWidth / 2; + const yStrokePad = scale[1] * this.lineWidth / 2; + box[0] -= xStrokePad; + box[1] -= yStrokePad; + box[2] += xStrokePad; + box[3] += yStrokePad; + } + return box; + } + updateClipFromPath() { + const intersect = Util.intersect(this.clipBox, this.getPathBoundingBox()); + this.startNewPathAndClipBox(intersect || [0, 0, 0, 0]); + } + isEmptyClip() { + return this.minX === Infinity; + } + startNewPathAndClipBox(box) { + this.clipBox = box; + this.minX = Infinity; + this.minY = Infinity; + this.maxX = 0; + this.maxY = 0; + } + getClippedPathBoundingBox(pathType = PathType.FILL, transform = null) { + return Util.intersect(this.clipBox, this.getPathBoundingBox(pathType, transform)); + } +}; +function putBinaryImageData(ctx, imgData) { + if (typeof ImageData !== "undefined" && imgData instanceof ImageData) { + ctx.putImageData(imgData, 0, 0); + return; + } + const height = imgData.height, width = imgData.width; + const partialChunkHeight = height % FULL_CHUNK_HEIGHT; + const fullChunks = (height - partialChunkHeight) / FULL_CHUNK_HEIGHT; + const totalChunks = partialChunkHeight === 0 ? fullChunks : fullChunks + 1; + const chunkImgData = ctx.createImageData(width, FULL_CHUNK_HEIGHT); + let srcPos = 0, destPos; + const src = imgData.data; + const dest = chunkImgData.data; + let i, j, thisChunkHeight, elemsInThisChunk; + if (imgData.kind === util_ImageKind.GRAYSCALE_1BPP) { + const srcLength = src.byteLength; + const dest32 = new Uint32Array(dest.buffer, 0, dest.byteLength >> 2); + const dest32DataLength = dest32.length; + const fullSrcDiff = width + 7 >> 3; + const white = 4294967295; + const black = util_FeatureTest.isLittleEndian ? 4278190080 : 255; + for (i = 0; i < totalChunks; i++) { + thisChunkHeight = i < fullChunks ? FULL_CHUNK_HEIGHT : partialChunkHeight; + destPos = 0; + for (j = 0; j < thisChunkHeight; j++) { + const srcDiff = srcLength - srcPos; + let k = 0; + const kEnd = srcDiff > fullSrcDiff ? width : srcDiff * 8 - 7; + const kEndUnrolled = kEnd & ~7; + let mask = 0; + let srcByte = 0; + for (; k < kEndUnrolled; k += 8) { + srcByte = src[srcPos++]; + dest32[destPos++] = srcByte & 128 ? white : black; + dest32[destPos++] = srcByte & 64 ? white : black; + dest32[destPos++] = srcByte & 32 ? white : black; + dest32[destPos++] = srcByte & 16 ? white : black; + dest32[destPos++] = srcByte & 8 ? white : black; + dest32[destPos++] = srcByte & 4 ? white : black; + dest32[destPos++] = srcByte & 2 ? white : black; + dest32[destPos++] = srcByte & 1 ? white : black; + } + for (; k < kEnd; k++) { + if (mask === 0) { + srcByte = src[srcPos++]; + mask = 128; + } + dest32[destPos++] = srcByte & mask ? white : black; + mask >>= 1; + } + } + while (destPos < dest32DataLength) { + dest32[destPos++] = 0; + } + ctx.putImageData(chunkImgData, 0, i * FULL_CHUNK_HEIGHT); + } + } else if (imgData.kind === util_ImageKind.RGBA_32BPP) { + j = 0; + elemsInThisChunk = width * FULL_CHUNK_HEIGHT * 4; + for (i = 0; i < fullChunks; i++) { + dest.set(src.subarray(srcPos, srcPos + elemsInThisChunk)); + srcPos += elemsInThisChunk; + ctx.putImageData(chunkImgData, 0, j); + j += FULL_CHUNK_HEIGHT; + } + if (i < totalChunks) { + elemsInThisChunk = width * partialChunkHeight * 4; + dest.set(src.subarray(srcPos, srcPos + elemsInThisChunk)); + ctx.putImageData(chunkImgData, 0, j); + } + } else if (imgData.kind === util_ImageKind.RGB_24BPP) { + thisChunkHeight = FULL_CHUNK_HEIGHT; + elemsInThisChunk = width * thisChunkHeight; + for (i = 0; i < totalChunks; i++) { + if (i >= fullChunks) { + thisChunkHeight = partialChunkHeight; + elemsInThisChunk = width * thisChunkHeight; + } + destPos = 0; + for (j = elemsInThisChunk; j--; ) { + dest[destPos++] = src[srcPos++]; + dest[destPos++] = src[srcPos++]; + dest[destPos++] = src[srcPos++]; + dest[destPos++] = 255; + } + ctx.putImageData(chunkImgData, 0, i * FULL_CHUNK_HEIGHT); + } + } else { + throw new Error(`bad image kind: ${imgData.kind}`); + } +} +function putBinaryImageMask(ctx, imgData) { + if (imgData.bitmap) { + ctx.drawImage(imgData.bitmap, 0, 0); + return; + } + const height = imgData.height, width = imgData.width; + const partialChunkHeight = height % FULL_CHUNK_HEIGHT; + const fullChunks = (height - partialChunkHeight) / FULL_CHUNK_HEIGHT; + const totalChunks = partialChunkHeight === 0 ? fullChunks : fullChunks + 1; + const chunkImgData = ctx.createImageData(width, FULL_CHUNK_HEIGHT); + let srcPos = 0; + const src = imgData.data; + const dest = chunkImgData.data; + for (let i = 0; i < totalChunks; i++) { + const thisChunkHeight = i < fullChunks ? FULL_CHUNK_HEIGHT : partialChunkHeight; + ({ + srcPos + } = convertBlackAndWhiteToRGBA({ + src, + srcPos, + dest, + width, + height: thisChunkHeight, + nonBlackColor: 0 + })); + ctx.putImageData(chunkImgData, 0, i * FULL_CHUNK_HEIGHT); + } +} +function copyCtxState(sourceCtx, destCtx) { + const properties = ["strokeStyle", "fillStyle", "fillRule", "globalAlpha", "lineWidth", "lineCap", "lineJoin", "miterLimit", "globalCompositeOperation", "font", "filter"]; + for (const property of properties) { + if (sourceCtx[property] !== void 0) { + destCtx[property] = sourceCtx[property]; + } + } + if (sourceCtx.setLineDash !== void 0) { + destCtx.setLineDash(sourceCtx.getLineDash()); + destCtx.lineDashOffset = sourceCtx.lineDashOffset; + } +} +function resetCtxToDefault(ctx) { + ctx.strokeStyle = ctx.fillStyle = "#000000"; + ctx.fillRule = "nonzero"; + ctx.globalAlpha = 1; + ctx.lineWidth = 1; + ctx.lineCap = "butt"; + ctx.lineJoin = "miter"; + ctx.miterLimit = 10; + ctx.globalCompositeOperation = "source-over"; + ctx.font = "10px sans-serif"; + if (ctx.setLineDash !== void 0) { + ctx.setLineDash([]); + ctx.lineDashOffset = 0; + } + if (!isNodeJS) { + const { + filter + } = ctx; + if (filter !== "none" && filter !== "") { + ctx.filter = "none"; + } + } +} +function getImageSmoothingEnabled(transform, interpolate) { + if (interpolate) { + return true; + } + const scale = Util.singularValueDecompose2dScale(transform); + scale[0] = Math.fround(scale[0]); + scale[1] = Math.fround(scale[1]); + const actualScale = Math.fround((globalThis.devicePixelRatio || 1) * PixelsPerInch.PDF_TO_CSS_UNITS); + return scale[0] <= actualScale && scale[1] <= actualScale; +} +var LINE_CAP_STYLES = ["butt", "round", "square"]; +var LINE_JOIN_STYLES = ["miter", "round", "bevel"]; +var NORMAL_CLIP = {}; +var EO_CLIP = {}; +var _restoreInitialState, restoreInitialState_fn, _drawFilter, drawFilter_fn; +var _CanvasGraphics = class { + constructor(canvasCtx, commonObjs, objs, canvasFactory, filterFactory, { + optionalContentConfig, + markedContentStack = null + }, annotationCanvasMap, pageColors) { + __privateAdd(this, _restoreInitialState); + __privateAdd(this, _drawFilter); + this.ctx = canvasCtx; + this.current = new CanvasExtraState(this.ctx.canvas.width, this.ctx.canvas.height); + this.stateStack = []; + this.pendingClip = null; + this.pendingEOFill = false; + this.res = null; + this.xobjs = null; + this.commonObjs = commonObjs; + this.objs = objs; + this.canvasFactory = canvasFactory; + this.filterFactory = filterFactory; + this.groupStack = []; + this.processingType3 = null; + this.baseTransform = null; + this.baseTransformStack = []; + this.groupLevel = 0; + this.smaskStack = []; + this.smaskCounter = 0; + this.tempSMask = null; + this.suspendedCtx = null; + this.contentVisible = true; + this.markedContentStack = markedContentStack || []; + this.optionalContentConfig = optionalContentConfig; + this.cachedCanvases = new CachedCanvases(this.canvasFactory); + this.cachedPatterns = /* @__PURE__ */ new Map(); + this.annotationCanvasMap = annotationCanvasMap; + this.viewportScale = 1; + this.outputScaleX = 1; + this.outputScaleY = 1; + this.pageColors = pageColors; + this._cachedScaleForStroking = [-1, 0]; + this._cachedGetSinglePixelWidth = null; + this._cachedBitmapsMap = /* @__PURE__ */ new Map(); + } + getObject(data, fallback = null) { + if (typeof data === "string") { + return data.startsWith("g_") ? this.commonObjs.get(data) : this.objs.get(data); + } + return fallback; + } + beginDrawing({ + transform, + viewport, + transparency = false, + background = null + }) { + const width = this.ctx.canvas.width; + const height = this.ctx.canvas.height; + const savedFillStyle = this.ctx.fillStyle; + this.ctx.fillStyle = background || "#ffffff"; + this.ctx.fillRect(0, 0, width, height); + this.ctx.fillStyle = savedFillStyle; + if (transparency) { + const transparentCanvas = this.cachedCanvases.getCanvas("transparent", width, height); + this.compositeCtx = this.ctx; + this.transparentCanvas = transparentCanvas.canvas; + this.ctx = transparentCanvas.context; + this.ctx.save(); + this.ctx.transform(...getCurrentTransform(this.compositeCtx)); + } + this.ctx.save(); + resetCtxToDefault(this.ctx); + if (transform) { + this.ctx.transform(...transform); + this.outputScaleX = transform[0]; + this.outputScaleY = transform[0]; + } + this.ctx.transform(...viewport.transform); + this.viewportScale = viewport.scale; + this.baseTransform = getCurrentTransform(this.ctx); + } + executeOperatorList(operatorList, executionStartIdx, continueCallback, stepper) { + const argsArray = operatorList.argsArray; + const fnArray = operatorList.fnArray; + let i = executionStartIdx || 0; + const argsArrayLen = argsArray.length; + if (argsArrayLen === i) { + return i; + } + const chunkOperations = argsArrayLen - i > EXECUTION_STEPS && typeof continueCallback === "function"; + const endTime = chunkOperations ? Date.now() + EXECUTION_TIME : 0; + let steps = 0; + const commonObjs = this.commonObjs; + const objs = this.objs; + let fnId; + while (true) { + if (stepper !== void 0 && i === stepper.nextBreakPoint) { + stepper.breakIt(i, continueCallback); + return i; + } + fnId = fnArray[i]; + if (fnId !== OPS.dependency) { + this[fnId].apply(this, argsArray[i]); + } else { + for (const depObjId of argsArray[i]) { + const objsPool = depObjId.startsWith("g_") ? commonObjs : objs; + if (!objsPool.has(depObjId)) { + objsPool.get(depObjId, continueCallback); + return i; + } + } + } + i++; + if (i === argsArrayLen) { + return i; + } + if (chunkOperations && ++steps > EXECUTION_STEPS) { + if (Date.now() > endTime) { + continueCallback(); + return i; + } + steps = 0; + } + } + } + endDrawing() { + __privateMethod(this, _restoreInitialState, restoreInitialState_fn).call(this); + this.cachedCanvases.clear(); + this.cachedPatterns.clear(); + for (const cache of this._cachedBitmapsMap.values()) { + for (const canvas of cache.values()) { + if (typeof HTMLCanvasElement !== "undefined" && canvas instanceof HTMLCanvasElement) { + canvas.width = canvas.height = 0; + } + } + cache.clear(); + } + this._cachedBitmapsMap.clear(); + __privateMethod(this, _drawFilter, drawFilter_fn).call(this); + } + _scaleImage(img, inverseTransform) { + const width = img.width; + const height = img.height; + let widthScale = Math.max(Math.hypot(inverseTransform[0], inverseTransform[1]), 1); + let heightScale = Math.max(Math.hypot(inverseTransform[2], inverseTransform[3]), 1); + let paintWidth = width, paintHeight = height; + let tmpCanvasId = "prescale1"; + let tmpCanvas, tmpCtx; + while (widthScale > 2 && paintWidth > 1 || heightScale > 2 && paintHeight > 1) { + let newWidth = paintWidth, newHeight = paintHeight; + if (widthScale > 2 && paintWidth > 1) { + newWidth = paintWidth >= 16384 ? Math.floor(paintWidth / 2) - 1 || 1 : Math.ceil(paintWidth / 2); + widthScale /= paintWidth / newWidth; + } + if (heightScale > 2 && paintHeight > 1) { + newHeight = paintHeight >= 16384 ? Math.floor(paintHeight / 2) - 1 || 1 : Math.ceil(paintHeight) / 2; + heightScale /= paintHeight / newHeight; + } + tmpCanvas = this.cachedCanvases.getCanvas(tmpCanvasId, newWidth, newHeight); + tmpCtx = tmpCanvas.context; + tmpCtx.clearRect(0, 0, newWidth, newHeight); + tmpCtx.drawImage(img, 0, 0, paintWidth, paintHeight, 0, 0, newWidth, newHeight); + img = tmpCanvas.canvas; + paintWidth = newWidth; + paintHeight = newHeight; + tmpCanvasId = tmpCanvasId === "prescale1" ? "prescale2" : "prescale1"; + } + return { + img, + paintWidth, + paintHeight + }; + } + _createMaskCanvas(img) { + const ctx = this.ctx; + const { + width, + height + } = img; + const fillColor = this.current.fillColor; + const isPatternFill = this.current.patternFill; + const currentTransform = getCurrentTransform(ctx); + let cache, cacheKey, scaled, maskCanvas; + if ((img.bitmap || img.data) && img.count > 1) { + const mainKey = img.bitmap || img.data.buffer; + cacheKey = JSON.stringify(isPatternFill ? currentTransform : [currentTransform.slice(0, 4), fillColor]); + cache = this._cachedBitmapsMap.get(mainKey); + if (!cache) { + cache = /* @__PURE__ */ new Map(); + this._cachedBitmapsMap.set(mainKey, cache); + } + const cachedImage = cache.get(cacheKey); + if (cachedImage && !isPatternFill) { + const offsetX2 = Math.round(Math.min(currentTransform[0], currentTransform[2]) + currentTransform[4]); + const offsetY2 = Math.round(Math.min(currentTransform[1], currentTransform[3]) + currentTransform[5]); + return { + canvas: cachedImage, + offsetX: offsetX2, + offsetY: offsetY2 + }; + } + scaled = cachedImage; + } + if (!scaled) { + maskCanvas = this.cachedCanvases.getCanvas("maskCanvas", width, height); + putBinaryImageMask(maskCanvas.context, img); + } + let maskToCanvas = Util.transform(currentTransform, [1 / width, 0, 0, -1 / height, 0, 0]); + maskToCanvas = Util.transform(maskToCanvas, [1, 0, 0, 1, 0, -height]); + const [minX, minY, maxX, maxY] = Util.getAxialAlignedBoundingBox([0, 0, width, height], maskToCanvas); + const drawnWidth = Math.round(maxX - minX) || 1; + const drawnHeight = Math.round(maxY - minY) || 1; + const fillCanvas = this.cachedCanvases.getCanvas("fillCanvas", drawnWidth, drawnHeight); + const fillCtx = fillCanvas.context; + const offsetX = minX; + const offsetY = minY; + fillCtx.translate(-offsetX, -offsetY); + fillCtx.transform(...maskToCanvas); + if (!scaled) { + scaled = this._scaleImage(maskCanvas.canvas, getCurrentTransformInverse(fillCtx)); + scaled = scaled.img; + if (cache && isPatternFill) { + cache.set(cacheKey, scaled); + } + } + fillCtx.imageSmoothingEnabled = getImageSmoothingEnabled(getCurrentTransform(fillCtx), img.interpolate); + drawImageAtIntegerCoords(fillCtx, scaled, 0, 0, scaled.width, scaled.height, 0, 0, width, height); + fillCtx.globalCompositeOperation = "source-in"; + const inverse = Util.transform(getCurrentTransformInverse(fillCtx), [1, 0, 0, 1, -offsetX, -offsetY]); + fillCtx.fillStyle = isPatternFill ? fillColor.getPattern(ctx, this, inverse, PathType.FILL) : fillColor; + fillCtx.fillRect(0, 0, width, height); + if (cache && !isPatternFill) { + this.cachedCanvases.delete("fillCanvas"); + cache.set(cacheKey, fillCanvas.canvas); + } + return { + canvas: fillCanvas.canvas, + offsetX: Math.round(offsetX), + offsetY: Math.round(offsetY) + }; + } + setLineWidth(width) { + if (width !== this.current.lineWidth) { + this._cachedScaleForStroking[0] = -1; + } + this.current.lineWidth = width; + this.ctx.lineWidth = width; + } + setLineCap(style) { + this.ctx.lineCap = LINE_CAP_STYLES[style]; + } + setLineJoin(style) { + this.ctx.lineJoin = LINE_JOIN_STYLES[style]; + } + setMiterLimit(limit) { + this.ctx.miterLimit = limit; + } + setDash(dashArray, dashPhase) { + const ctx = this.ctx; + if (ctx.setLineDash !== void 0) { + ctx.setLineDash(dashArray); + ctx.lineDashOffset = dashPhase; + } + } + setRenderingIntent(intent) { + } + setFlatness(flatness) { + } + setGState(states) { + for (const [key, value] of states) { + switch (key) { + case "LW": + this.setLineWidth(value); + break; + case "LC": + this.setLineCap(value); + break; + case "LJ": + this.setLineJoin(value); + break; + case "ML": + this.setMiterLimit(value); + break; + case "D": + this.setDash(value[0], value[1]); + break; + case "RI": + this.setRenderingIntent(value); + break; + case "FL": + this.setFlatness(value); + break; + case "Font": + this.setFont(value[0], value[1]); + break; + case "CA": + this.current.strokeAlpha = value; + break; + case "ca": + this.current.fillAlpha = value; + this.ctx.globalAlpha = value; + break; + case "BM": + this.ctx.globalCompositeOperation = value; + break; + case "SMask": + this.current.activeSMask = value ? this.tempSMask : null; + this.tempSMask = null; + this.checkSMaskState(); + break; + case "TR": + this.ctx.filter = this.current.transferMaps = this.filterFactory.addFilter(value); + break; + } + } + } + get inSMaskMode() { + return !!this.suspendedCtx; + } + checkSMaskState() { + const inSMaskMode = this.inSMaskMode; + if (this.current.activeSMask && !inSMaskMode) { + this.beginSMaskMode(); + } else if (!this.current.activeSMask && inSMaskMode) { + this.endSMaskMode(); + } + } + beginSMaskMode() { + if (this.inSMaskMode) { + throw new Error("beginSMaskMode called while already in smask mode"); + } + const drawnWidth = this.ctx.canvas.width; + const drawnHeight = this.ctx.canvas.height; + const cacheId = "smaskGroupAt" + this.groupLevel; + const scratchCanvas = this.cachedCanvases.getCanvas(cacheId, drawnWidth, drawnHeight); + this.suspendedCtx = this.ctx; + this.ctx = scratchCanvas.context; + const ctx = this.ctx; + ctx.setTransform(...getCurrentTransform(this.suspendedCtx)); + copyCtxState(this.suspendedCtx, ctx); + mirrorContextOperations(ctx, this.suspendedCtx); + this.setGState([["BM", "source-over"], ["ca", 1], ["CA", 1]]); + } + endSMaskMode() { + if (!this.inSMaskMode) { + throw new Error("endSMaskMode called while not in smask mode"); + } + this.ctx._removeMirroring(); + copyCtxState(this.ctx, this.suspendedCtx); + this.ctx = this.suspendedCtx; + this.suspendedCtx = null; + } + compose(dirtyBox) { + if (!this.current.activeSMask) { + return; + } + if (!dirtyBox) { + dirtyBox = [0, 0, this.ctx.canvas.width, this.ctx.canvas.height]; + } else { + dirtyBox[0] = Math.floor(dirtyBox[0]); + dirtyBox[1] = Math.floor(dirtyBox[1]); + dirtyBox[2] = Math.ceil(dirtyBox[2]); + dirtyBox[3] = Math.ceil(dirtyBox[3]); + } + const smask = this.current.activeSMask; + const suspendedCtx = this.suspendedCtx; + this.composeSMask(suspendedCtx, smask, this.ctx, dirtyBox); + this.ctx.save(); + this.ctx.setTransform(1, 0, 0, 1, 0, 0); + this.ctx.clearRect(0, 0, this.ctx.canvas.width, this.ctx.canvas.height); + this.ctx.restore(); + } + composeSMask(ctx, smask, layerCtx, layerBox) { + const layerOffsetX = layerBox[0]; + const layerOffsetY = layerBox[1]; + const layerWidth = layerBox[2] - layerOffsetX; + const layerHeight = layerBox[3] - layerOffsetY; + if (layerWidth === 0 || layerHeight === 0) { + return; + } + this.genericComposeSMask(smask.context, layerCtx, layerWidth, layerHeight, smask.subtype, smask.backdrop, smask.transferMap, layerOffsetX, layerOffsetY, smask.offsetX, smask.offsetY); + ctx.save(); + ctx.globalAlpha = 1; + ctx.globalCompositeOperation = "source-over"; + ctx.setTransform(1, 0, 0, 1, 0, 0); + ctx.drawImage(layerCtx.canvas, 0, 0); + ctx.restore(); + } + genericComposeSMask(maskCtx, layerCtx, width, height, subtype, backdrop, transferMap, layerOffsetX, layerOffsetY, maskOffsetX, maskOffsetY) { + let maskCanvas = maskCtx.canvas; + let maskX = layerOffsetX - maskOffsetX; + let maskY = layerOffsetY - maskOffsetY; + if (backdrop) { + if (maskX < 0 || maskY < 0 || maskX + width > maskCanvas.width || maskY + height > maskCanvas.height) { + const canvas = this.cachedCanvases.getCanvas("maskExtension", width, height); + const ctx = canvas.context; + ctx.drawImage(maskCanvas, -maskX, -maskY); + if (backdrop.some((c) => c !== 0)) { + ctx.globalCompositeOperation = "destination-atop"; + ctx.fillStyle = Util.makeHexColor(...backdrop); + ctx.fillRect(0, 0, width, height); + ctx.globalCompositeOperation = "source-over"; + } + maskCanvas = canvas.canvas; + maskX = maskY = 0; + } else if (backdrop.some((c) => c !== 0)) { + maskCtx.save(); + maskCtx.globalAlpha = 1; + maskCtx.setTransform(1, 0, 0, 1, 0, 0); + const clip2 = new Path2D(); + clip2.rect(maskX, maskY, width, height); + maskCtx.clip(clip2); + maskCtx.globalCompositeOperation = "destination-atop"; + maskCtx.fillStyle = Util.makeHexColor(...backdrop); + maskCtx.fillRect(maskX, maskY, width, height); + maskCtx.restore(); + } + } + layerCtx.save(); + layerCtx.globalAlpha = 1; + layerCtx.setTransform(1, 0, 0, 1, 0, 0); + if (subtype === "Alpha" && transferMap) { + layerCtx.filter = this.filterFactory.addAlphaFilter(transferMap); + } else if (subtype === "Luminosity") { + layerCtx.filter = this.filterFactory.addLuminosityFilter(transferMap); + } + const clip = new Path2D(); + clip.rect(layerOffsetX, layerOffsetY, width, height); + layerCtx.clip(clip); + layerCtx.globalCompositeOperation = "destination-in"; + layerCtx.drawImage(maskCanvas, maskX, maskY, width, height, layerOffsetX, layerOffsetY, width, height); + layerCtx.restore(); + } + save() { + if (this.inSMaskMode) { + copyCtxState(this.ctx, this.suspendedCtx); + this.suspendedCtx.save(); + } else { + this.ctx.save(); + } + const old = this.current; + this.stateStack.push(old); + this.current = old.clone(); + } + restore() { + if (this.stateStack.length === 0 && this.inSMaskMode) { + this.endSMaskMode(); + } + if (this.stateStack.length !== 0) { + this.current = this.stateStack.pop(); + if (this.inSMaskMode) { + this.suspendedCtx.restore(); + copyCtxState(this.suspendedCtx, this.ctx); + } else { + this.ctx.restore(); + } + this.checkSMaskState(); + this.pendingClip = null; + this._cachedScaleForStroking[0] = -1; + this._cachedGetSinglePixelWidth = null; + } + } + transform(a, b, c, d, e, f) { + this.ctx.transform(a, b, c, d, e, f); + this._cachedScaleForStroking[0] = -1; + this._cachedGetSinglePixelWidth = null; + } + constructPath(ops, args, minMax) { + const ctx = this.ctx; + const current = this.current; + let x = current.x, y = current.y; + let startX, startY; + const currentTransform = getCurrentTransform(ctx); + const isScalingMatrix = currentTransform[0] === 0 && currentTransform[3] === 0 || currentTransform[1] === 0 && currentTransform[2] === 0; + const minMaxForBezier = isScalingMatrix ? minMax.slice(0) : null; + for (let i = 0, j = 0, ii = ops.length; i < ii; i++) { + switch (ops[i] | 0) { + case OPS.rectangle: + x = args[j++]; + y = args[j++]; + const width = args[j++]; + const height = args[j++]; + const xw = x + width; + const yh = y + height; + ctx.moveTo(x, y); + if (width === 0 || height === 0) { + ctx.lineTo(xw, yh); + } else { + ctx.lineTo(xw, y); + ctx.lineTo(xw, yh); + ctx.lineTo(x, yh); + } + if (!isScalingMatrix) { + current.updateRectMinMax(currentTransform, [x, y, xw, yh]); + } + ctx.closePath(); + break; + case OPS.moveTo: + x = args[j++]; + y = args[j++]; + ctx.moveTo(x, y); + if (!isScalingMatrix) { + current.updatePathMinMax(currentTransform, x, y); + } + break; + case OPS.lineTo: + x = args[j++]; + y = args[j++]; + ctx.lineTo(x, y); + if (!isScalingMatrix) { + current.updatePathMinMax(currentTransform, x, y); + } + break; + case OPS.curveTo: + startX = x; + startY = y; + x = args[j + 4]; + y = args[j + 5]; + ctx.bezierCurveTo(args[j], args[j + 1], args[j + 2], args[j + 3], x, y); + current.updateCurvePathMinMax(currentTransform, startX, startY, args[j], args[j + 1], args[j + 2], args[j + 3], x, y, minMaxForBezier); + j += 6; + break; + case OPS.curveTo2: + startX = x; + startY = y; + ctx.bezierCurveTo(x, y, args[j], args[j + 1], args[j + 2], args[j + 3]); + current.updateCurvePathMinMax(currentTransform, startX, startY, x, y, args[j], args[j + 1], args[j + 2], args[j + 3], minMaxForBezier); + x = args[j + 2]; + y = args[j + 3]; + j += 4; + break; + case OPS.curveTo3: + startX = x; + startY = y; + x = args[j + 2]; + y = args[j + 3]; + ctx.bezierCurveTo(args[j], args[j + 1], x, y, x, y); + current.updateCurvePathMinMax(currentTransform, startX, startY, args[j], args[j + 1], x, y, x, y, minMaxForBezier); + j += 4; + break; + case OPS.closePath: + ctx.closePath(); + break; + } + } + if (isScalingMatrix) { + current.updateScalingPathMinMax(currentTransform, minMaxForBezier); + } + current.setCurrentPoint(x, y); + } + closePath() { + this.ctx.closePath(); + } + stroke(consumePath = true) { + const ctx = this.ctx; + const strokeColor = this.current.strokeColor; + ctx.globalAlpha = this.current.strokeAlpha; + if (this.contentVisible) { + if (typeof strokeColor === "object" && (strokeColor == null ? void 0 : strokeColor.getPattern)) { + ctx.save(); + ctx.strokeStyle = strokeColor.getPattern(ctx, this, getCurrentTransformInverse(ctx), PathType.STROKE); + this.rescaleAndStroke(false); + ctx.restore(); + } else { + this.rescaleAndStroke(true); + } + } + if (consumePath) { + this.consumePath(this.current.getClippedPathBoundingBox()); + } + ctx.globalAlpha = this.current.fillAlpha; + } + closeStroke() { + this.closePath(); + this.stroke(); + } + fill(consumePath = true) { + const ctx = this.ctx; + const fillColor = this.current.fillColor; + const isPatternFill = this.current.patternFill; + let needRestore = false; + if (isPatternFill) { + ctx.save(); + ctx.fillStyle = fillColor.getPattern(ctx, this, getCurrentTransformInverse(ctx), PathType.FILL); + needRestore = true; + } + const intersect = this.current.getClippedPathBoundingBox(); + if (this.contentVisible && intersect !== null) { + if (this.pendingEOFill) { + ctx.fill("evenodd"); + this.pendingEOFill = false; + } else { + ctx.fill(); + } + } + if (needRestore) { + ctx.restore(); + } + if (consumePath) { + this.consumePath(intersect); + } + } + eoFill() { + this.pendingEOFill = true; + this.fill(); + } + fillStroke() { + this.fill(false); + this.stroke(false); + this.consumePath(); + } + eoFillStroke() { + this.pendingEOFill = true; + this.fillStroke(); + } + closeFillStroke() { + this.closePath(); + this.fillStroke(); + } + closeEOFillStroke() { + this.pendingEOFill = true; + this.closePath(); + this.fillStroke(); + } + endPath() { + this.consumePath(); + } + clip() { + this.pendingClip = NORMAL_CLIP; + } + eoClip() { + this.pendingClip = EO_CLIP; + } + beginText() { + this.current.textMatrix = IDENTITY_MATRIX; + this.current.textMatrixScale = 1; + this.current.x = this.current.lineX = 0; + this.current.y = this.current.lineY = 0; + } + endText() { + const paths = this.pendingTextPaths; + const ctx = this.ctx; + if (paths === void 0) { + ctx.beginPath(); + return; + } + ctx.save(); + ctx.beginPath(); + for (const path of paths) { + ctx.setTransform(...path.transform); + ctx.translate(path.x, path.y); + path.addToPath(ctx, path.fontSize); + } + ctx.restore(); + ctx.clip(); + ctx.beginPath(); + delete this.pendingTextPaths; + } + setCharSpacing(spacing) { + this.current.charSpacing = spacing; + } + setWordSpacing(spacing) { + this.current.wordSpacing = spacing; + } + setHScale(scale) { + this.current.textHScale = scale / 100; + } + setLeading(leading) { + this.current.leading = -leading; + } + setFont(fontRefName, size) { + var _a2; + const fontObj = this.commonObjs.get(fontRefName); + const current = this.current; + if (!fontObj) { + throw new Error(`Can't find font for ${fontRefName}`); + } + current.fontMatrix = fontObj.fontMatrix || FONT_IDENTITY_MATRIX; + if (current.fontMatrix[0] === 0 || current.fontMatrix[3] === 0) { + warn("Invalid font matrix for font " + fontRefName); + } + if (size < 0) { + size = -size; + current.fontDirection = -1; + } else { + current.fontDirection = 1; + } + this.current.font = fontObj; + this.current.fontSize = size; + if (fontObj.isType3Font) { + return; + } + const name = fontObj.loadedName || "sans-serif"; + const typeface = ((_a2 = fontObj.systemFontInfo) == null ? void 0 : _a2.css) || `"${name}", ${fontObj.fallbackName}`; + let bold = "normal"; + if (fontObj.black) { + bold = "900"; + } else if (fontObj.bold) { + bold = "bold"; + } + const italic = fontObj.italic ? "italic" : "normal"; + let browserFontSize = size; + if (size < MIN_FONT_SIZE) { + browserFontSize = MIN_FONT_SIZE; + } else if (size > MAX_FONT_SIZE) { + browserFontSize = MAX_FONT_SIZE; + } + this.current.fontSizeScale = size / browserFontSize; + this.ctx.font = `${italic} ${bold} ${browserFontSize}px ${typeface}`; + } + setTextRenderingMode(mode) { + this.current.textRenderingMode = mode; + } + setTextRise(rise) { + this.current.textRise = rise; + } + moveText(x, y) { + this.current.x = this.current.lineX += x; + this.current.y = this.current.lineY += y; + } + setLeadingMoveText(x, y) { + this.setLeading(-y); + this.moveText(x, y); + } + setTextMatrix(a, b, c, d, e, f) { + this.current.textMatrix = [a, b, c, d, e, f]; + this.current.textMatrixScale = Math.hypot(a, b); + this.current.x = this.current.lineX = 0; + this.current.y = this.current.lineY = 0; + } + nextLine() { + this.moveText(0, this.current.leading); + } + paintChar(character, x, y, patternTransform) { + const ctx = this.ctx; + const current = this.current; + const font = current.font; + const textRenderingMode = current.textRenderingMode; + const fontSize = current.fontSize / current.fontSizeScale; + const fillStrokeMode = textRenderingMode & TextRenderingMode.FILL_STROKE_MASK; + const isAddToPathSet = !!(textRenderingMode & TextRenderingMode.ADD_TO_PATH_FLAG); + const patternFill = current.patternFill && !font.missingFile; + let addToPath; + if (font.disableFontFace || isAddToPathSet || patternFill) { + addToPath = font.getPathGenerator(this.commonObjs, character); + } + if (font.disableFontFace || patternFill) { + ctx.save(); + ctx.translate(x, y); + ctx.beginPath(); + addToPath(ctx, fontSize); + if (patternTransform) { + ctx.setTransform(...patternTransform); + } + if (fillStrokeMode === TextRenderingMode.FILL || fillStrokeMode === TextRenderingMode.FILL_STROKE) { + ctx.fill(); + } + if (fillStrokeMode === TextRenderingMode.STROKE || fillStrokeMode === TextRenderingMode.FILL_STROKE) { + ctx.stroke(); + } + ctx.restore(); + } else { + if (fillStrokeMode === TextRenderingMode.FILL || fillStrokeMode === TextRenderingMode.FILL_STROKE) { + ctx.fillText(character, x, y); + } + if (fillStrokeMode === TextRenderingMode.STROKE || fillStrokeMode === TextRenderingMode.FILL_STROKE) { + ctx.strokeText(character, x, y); + } + } + if (isAddToPathSet) { + const paths = this.pendingTextPaths || (this.pendingTextPaths = []); + paths.push({ + transform: getCurrentTransform(ctx), + x, + y, + fontSize, + addToPath + }); + } + } + get isFontSubpixelAAEnabled() { + const { + context: ctx + } = this.cachedCanvases.getCanvas("isFontSubpixelAAEnabled", 10, 10); + ctx.scale(1.5, 1); + ctx.fillText("I", 0, 10); + const data = ctx.getImageData(0, 0, 10, 10).data; + let enabled = false; + for (let i = 3; i < data.length; i += 4) { + if (data[i] > 0 && data[i] < 255) { + enabled = true; + break; + } + } + return shadow(this, "isFontSubpixelAAEnabled", enabled); + } + showText(glyphs) { + const current = this.current; + const font = current.font; + if (font.isType3Font) { + return this.showType3Text(glyphs); + } + const fontSize = current.fontSize; + if (fontSize === 0) { + return void 0; + } + const ctx = this.ctx; + const fontSizeScale = current.fontSizeScale; + const charSpacing = current.charSpacing; + const wordSpacing = current.wordSpacing; + const fontDirection = current.fontDirection; + const textHScale = current.textHScale * fontDirection; + const glyphsLength = glyphs.length; + const vertical = font.vertical; + const spacingDir = vertical ? 1 : -1; + const defaultVMetrics = font.defaultVMetrics; + const widthAdvanceScale = fontSize * current.fontMatrix[0]; + const simpleFillText = current.textRenderingMode === TextRenderingMode.FILL && !font.disableFontFace && !current.patternFill; + ctx.save(); + ctx.transform(...current.textMatrix); + ctx.translate(current.x, current.y + current.textRise); + if (fontDirection > 0) { + ctx.scale(textHScale, -1); + } else { + ctx.scale(textHScale, 1); + } + let patternTransform; + if (current.patternFill) { + ctx.save(); + const pattern = current.fillColor.getPattern(ctx, this, getCurrentTransformInverse(ctx), PathType.FILL); + patternTransform = getCurrentTransform(ctx); + ctx.restore(); + ctx.fillStyle = pattern; + } + let lineWidth = current.lineWidth; + const scale = current.textMatrixScale; + if (scale === 0 || lineWidth === 0) { + const fillStrokeMode = current.textRenderingMode & TextRenderingMode.FILL_STROKE_MASK; + if (fillStrokeMode === TextRenderingMode.STROKE || fillStrokeMode === TextRenderingMode.FILL_STROKE) { + lineWidth = this.getSinglePixelWidth(); + } + } else { + lineWidth /= scale; + } + if (fontSizeScale !== 1) { + ctx.scale(fontSizeScale, fontSizeScale); + lineWidth /= fontSizeScale; + } + ctx.lineWidth = lineWidth; + if (font.isInvalidPDFjsFont) { + const chars = []; + let width = 0; + for (const glyph of glyphs) { + chars.push(glyph.unicode); + width += glyph.width; + } + ctx.fillText(chars.join(""), 0, 0); + current.x += width * widthAdvanceScale * textHScale; + ctx.restore(); + this.compose(); + return void 0; + } + let x = 0, i; + for (i = 0; i < glyphsLength; ++i) { + const glyph = glyphs[i]; + if (typeof glyph === "number") { + x += spacingDir * glyph * fontSize / 1e3; + continue; + } + let restoreNeeded = false; + const spacing = (glyph.isSpace ? wordSpacing : 0) + charSpacing; + const character = glyph.fontChar; + const accent = glyph.accent; + let scaledX, scaledY; + let width = glyph.width; + if (vertical) { + const vmetric = glyph.vmetric || defaultVMetrics; + const vx = -(glyph.vmetric ? vmetric[1] : width * 0.5) * widthAdvanceScale; + const vy = vmetric[2] * widthAdvanceScale; + width = vmetric ? -vmetric[0] : width; + scaledX = vx / fontSizeScale; + scaledY = (x + vy) / fontSizeScale; + } else { + scaledX = x / fontSizeScale; + scaledY = 0; + } + if (font.remeasure && width > 0) { + const measuredWidth = ctx.measureText(character).width * 1e3 / fontSize * fontSizeScale; + if (width < measuredWidth && this.isFontSubpixelAAEnabled) { + const characterScaleX = width / measuredWidth; + restoreNeeded = true; + ctx.save(); + ctx.scale(characterScaleX, 1); + scaledX /= characterScaleX; + } else if (width !== measuredWidth) { + scaledX += (width - measuredWidth) / 2e3 * fontSize / fontSizeScale; + } + } + if (this.contentVisible && (glyph.isInFont || font.missingFile)) { + if (simpleFillText && !accent) { + ctx.fillText(character, scaledX, scaledY); + } else { + this.paintChar(character, scaledX, scaledY, patternTransform); + if (accent) { + const scaledAccentX = scaledX + fontSize * accent.offset.x / fontSizeScale; + const scaledAccentY = scaledY - fontSize * accent.offset.y / fontSizeScale; + this.paintChar(accent.fontChar, scaledAccentX, scaledAccentY, patternTransform); + } + } + } + const charWidth = vertical ? width * widthAdvanceScale - spacing * fontDirection : width * widthAdvanceScale + spacing * fontDirection; + x += charWidth; + if (restoreNeeded) { + ctx.restore(); + } + } + if (vertical) { + current.y -= x; + } else { + current.x += x * textHScale; + } + ctx.restore(); + this.compose(); + return void 0; + } + showType3Text(glyphs) { + const ctx = this.ctx; + const current = this.current; + const font = current.font; + const fontSize = current.fontSize; + const fontDirection = current.fontDirection; + const spacingDir = font.vertical ? 1 : -1; + const charSpacing = current.charSpacing; + const wordSpacing = current.wordSpacing; + const textHScale = current.textHScale * fontDirection; + const fontMatrix = current.fontMatrix || FONT_IDENTITY_MATRIX; + const glyphsLength = glyphs.length; + const isTextInvisible = current.textRenderingMode === TextRenderingMode.INVISIBLE; + let i, glyph, width, spacingLength; + if (isTextInvisible || fontSize === 0) { + return; + } + this._cachedScaleForStroking[0] = -1; + this._cachedGetSinglePixelWidth = null; + ctx.save(); + ctx.transform(...current.textMatrix); + ctx.translate(current.x, current.y); + ctx.scale(textHScale, fontDirection); + for (i = 0; i < glyphsLength; ++i) { + glyph = glyphs[i]; + if (typeof glyph === "number") { + spacingLength = spacingDir * glyph * fontSize / 1e3; + this.ctx.translate(spacingLength, 0); + current.x += spacingLength * textHScale; + continue; + } + const spacing = (glyph.isSpace ? wordSpacing : 0) + charSpacing; + const operatorList = font.charProcOperatorList[glyph.operatorListId]; + if (!operatorList) { + warn(`Type3 character "${glyph.operatorListId}" is not available.`); + continue; + } + if (this.contentVisible) { + this.processingType3 = glyph; + this.save(); + ctx.scale(fontSize, fontSize); + ctx.transform(...fontMatrix); + this.executeOperatorList(operatorList); + this.restore(); + } + const transformed = Util.applyTransform([glyph.width, 0], fontMatrix); + width = transformed[0] * fontSize + spacing; + ctx.translate(width, 0); + current.x += width * textHScale; + } + ctx.restore(); + this.processingType3 = null; + } + setCharWidth(xWidth, yWidth) { + } + setCharWidthAndBounds(xWidth, yWidth, llx, lly, urx, ury) { + this.ctx.rect(llx, lly, urx - llx, ury - lly); + this.ctx.clip(); + this.endPath(); + } + getColorN_Pattern(IR) { + let pattern; + if (IR[0] === "TilingPattern") { + const color = IR[1]; + const baseTransform = this.baseTransform || getCurrentTransform(this.ctx); + const canvasGraphicsFactory = { + createCanvasGraphics: (ctx) => new _CanvasGraphics(ctx, this.commonObjs, this.objs, this.canvasFactory, this.filterFactory, { + optionalContentConfig: this.optionalContentConfig, + markedContentStack: this.markedContentStack + }) + }; + pattern = new TilingPattern(IR, color, this.ctx, canvasGraphicsFactory, baseTransform); + } else { + pattern = this._getPattern(IR[1], IR[2]); + } + return pattern; + } + setStrokeColorN() { + this.current.strokeColor = this.getColorN_Pattern(arguments); + } + setFillColorN() { + this.current.fillColor = this.getColorN_Pattern(arguments); + this.current.patternFill = true; + } + setStrokeRGBColor(r, g, b) { + this.ctx.strokeStyle = this.current.strokeColor = Util.makeHexColor(r, g, b); + } + setStrokeTransparent() { + this.ctx.strokeStyle = this.current.strokeColor = "transparent"; + } + setFillRGBColor(r, g, b) { + this.ctx.fillStyle = this.current.fillColor = Util.makeHexColor(r, g, b); + this.current.patternFill = false; + } + setFillTransparent() { + this.ctx.fillStyle = this.current.fillColor = "transparent"; + this.current.patternFill = false; + } + _getPattern(objId, matrix = null) { + let pattern; + if (this.cachedPatterns.has(objId)) { + pattern = this.cachedPatterns.get(objId); + } else { + pattern = getShadingPattern(this.getObject(objId)); + this.cachedPatterns.set(objId, pattern); + } + if (matrix) { + pattern.matrix = matrix; + } + return pattern; + } + shadingFill(objId) { + if (!this.contentVisible) { + return; + } + const ctx = this.ctx; + this.save(); + const pattern = this._getPattern(objId); + ctx.fillStyle = pattern.getPattern(ctx, this, getCurrentTransformInverse(ctx), PathType.SHADING); + const inv = getCurrentTransformInverse(ctx); + if (inv) { + const { + width, + height + } = ctx.canvas; + const [x0, y0, x1, y1] = Util.getAxialAlignedBoundingBox([0, 0, width, height], inv); + this.ctx.fillRect(x0, y0, x1 - x0, y1 - y0); + } else { + this.ctx.fillRect(-1e10, -1e10, 2e10, 2e10); + } + this.compose(this.current.getClippedPathBoundingBox()); + this.restore(); + } + beginInlineImage() { + unreachable("Should not call beginInlineImage"); + } + beginImageData() { + unreachable("Should not call beginImageData"); + } + paintFormXObjectBegin(matrix, bbox) { + if (!this.contentVisible) { + return; + } + this.save(); + this.baseTransformStack.push(this.baseTransform); + if (matrix) { + this.transform(...matrix); + } + this.baseTransform = getCurrentTransform(this.ctx); + if (bbox) { + const width = bbox[2] - bbox[0]; + const height = bbox[3] - bbox[1]; + this.ctx.rect(bbox[0], bbox[1], width, height); + this.current.updateRectMinMax(getCurrentTransform(this.ctx), bbox); + this.clip(); + this.endPath(); + } + } + paintFormXObjectEnd() { + if (!this.contentVisible) { + return; + } + this.restore(); + this.baseTransform = this.baseTransformStack.pop(); + } + beginGroup(group) { + if (!this.contentVisible) { + return; + } + this.save(); + if (this.inSMaskMode) { + this.endSMaskMode(); + this.current.activeSMask = null; + } + const currentCtx = this.ctx; + if (!group.isolated) { + info("TODO: Support non-isolated groups."); + } + if (group.knockout) { + warn("Knockout groups not supported."); + } + const currentTransform = getCurrentTransform(currentCtx); + if (group.matrix) { + currentCtx.transform(...group.matrix); + } + if (!group.bbox) { + throw new Error("Bounding box is required."); + } + let bounds = Util.getAxialAlignedBoundingBox(group.bbox, getCurrentTransform(currentCtx)); + const canvasBounds = [0, 0, currentCtx.canvas.width, currentCtx.canvas.height]; + bounds = Util.intersect(bounds, canvasBounds) || [0, 0, 0, 0]; + const offsetX = Math.floor(bounds[0]); + const offsetY = Math.floor(bounds[1]); + const drawnWidth = Math.max(Math.ceil(bounds[2]) - offsetX, 1); + const drawnHeight = Math.max(Math.ceil(bounds[3]) - offsetY, 1); + this.current.startNewPathAndClipBox([0, 0, drawnWidth, drawnHeight]); + let cacheId = "groupAt" + this.groupLevel; + if (group.smask) { + cacheId += "_smask_" + this.smaskCounter++ % 2; + } + const scratchCanvas = this.cachedCanvases.getCanvas(cacheId, drawnWidth, drawnHeight); + const groupCtx = scratchCanvas.context; + groupCtx.translate(-offsetX, -offsetY); + groupCtx.transform(...currentTransform); + if (group.smask) { + this.smaskStack.push({ + canvas: scratchCanvas.canvas, + context: groupCtx, + offsetX, + offsetY, + subtype: group.smask.subtype, + backdrop: group.smask.backdrop, + transferMap: group.smask.transferMap || null, + startTransformInverse: null + }); + } else { + currentCtx.setTransform(1, 0, 0, 1, 0, 0); + currentCtx.translate(offsetX, offsetY); + currentCtx.save(); + } + copyCtxState(currentCtx, groupCtx); + this.ctx = groupCtx; + this.setGState([["BM", "source-over"], ["ca", 1], ["CA", 1]]); + this.groupStack.push(currentCtx); + this.groupLevel++; + } + endGroup(group) { + if (!this.contentVisible) { + return; + } + this.groupLevel--; + const groupCtx = this.ctx; + const ctx = this.groupStack.pop(); + this.ctx = ctx; + this.ctx.imageSmoothingEnabled = false; + if (group.smask) { + this.tempSMask = this.smaskStack.pop(); + this.restore(); + } else { + this.ctx.restore(); + const currentMtx = getCurrentTransform(this.ctx); + this.restore(); + this.ctx.save(); + this.ctx.setTransform(...currentMtx); + const dirtyBox = Util.getAxialAlignedBoundingBox([0, 0, groupCtx.canvas.width, groupCtx.canvas.height], currentMtx); + this.ctx.drawImage(groupCtx.canvas, 0, 0); + this.ctx.restore(); + this.compose(dirtyBox); + } + } + beginAnnotation(id, rect, transform, matrix, hasOwnCanvas) { + __privateMethod(this, _restoreInitialState, restoreInitialState_fn).call(this); + resetCtxToDefault(this.ctx); + this.ctx.save(); + this.save(); + if (this.baseTransform) { + this.ctx.setTransform(...this.baseTransform); + } + if (rect) { + const width = rect[2] - rect[0]; + const height = rect[3] - rect[1]; + if (hasOwnCanvas && this.annotationCanvasMap) { + transform = transform.slice(); + transform[4] -= rect[0]; + transform[5] -= rect[1]; + rect = rect.slice(); + rect[0] = rect[1] = 0; + rect[2] = width; + rect[3] = height; + const [scaleX, scaleY] = Util.singularValueDecompose2dScale(getCurrentTransform(this.ctx)); + const { + viewportScale + } = this; + const canvasWidth = Math.ceil(width * this.outputScaleX * viewportScale); + const canvasHeight = Math.ceil(height * this.outputScaleY * viewportScale); + this.annotationCanvas = this.canvasFactory.create(canvasWidth, canvasHeight); + const { + canvas, + context + } = this.annotationCanvas; + this.annotationCanvasMap.set(id, canvas); + this.annotationCanvas.savedCtx = this.ctx; + this.ctx = context; + this.ctx.save(); + this.ctx.setTransform(scaleX, 0, 0, -scaleY, 0, height * scaleY); + resetCtxToDefault(this.ctx); + } else { + resetCtxToDefault(this.ctx); + this.ctx.rect(rect[0], rect[1], width, height); + this.ctx.clip(); + this.endPath(); + } + } + this.current = new CanvasExtraState(this.ctx.canvas.width, this.ctx.canvas.height); + this.transform(...transform); + this.transform(...matrix); + } + endAnnotation() { + if (this.annotationCanvas) { + this.ctx.restore(); + __privateMethod(this, _drawFilter, drawFilter_fn).call(this); + this.ctx = this.annotationCanvas.savedCtx; + delete this.annotationCanvas.savedCtx; + delete this.annotationCanvas; + } + } + paintImageMaskXObject(img) { + if (!this.contentVisible) { + return; + } + const count = img.count; + img = this.getObject(img.data, img); + img.count = count; + const ctx = this.ctx; + const glyph = this.processingType3; + if (glyph) { + if (glyph.compiled === void 0) { + glyph.compiled = compileType3Glyph(img); + } + if (glyph.compiled) { + glyph.compiled(ctx); + return; + } + } + const mask = this._createMaskCanvas(img); + const maskCanvas = mask.canvas; + ctx.save(); + ctx.setTransform(1, 0, 0, 1, 0, 0); + ctx.drawImage(maskCanvas, mask.offsetX, mask.offsetY); + ctx.restore(); + this.compose(); + } + paintImageMaskXObjectRepeat(img, scaleX, skewX = 0, skewY = 0, scaleY, positions) { + if (!this.contentVisible) { + return; + } + img = this.getObject(img.data, img); + const ctx = this.ctx; + ctx.save(); + const currentTransform = getCurrentTransform(ctx); + ctx.transform(scaleX, skewX, skewY, scaleY, 0, 0); + const mask = this._createMaskCanvas(img); + ctx.setTransform(1, 0, 0, 1, mask.offsetX - currentTransform[4], mask.offsetY - currentTransform[5]); + for (let i = 0, ii = positions.length; i < ii; i += 2) { + const trans = Util.transform(currentTransform, [scaleX, skewX, skewY, scaleY, positions[i], positions[i + 1]]); + const [x, y] = Util.applyTransform([0, 0], trans); + ctx.drawImage(mask.canvas, x, y); + } + ctx.restore(); + this.compose(); + } + paintImageMaskXObjectGroup(images) { + if (!this.contentVisible) { + return; + } + const ctx = this.ctx; + const fillColor = this.current.fillColor; + const isPatternFill = this.current.patternFill; + for (const image of images) { + const { + data, + width, + height, + transform + } = image; + const maskCanvas = this.cachedCanvases.getCanvas("maskCanvas", width, height); + const maskCtx = maskCanvas.context; + maskCtx.save(); + const img = this.getObject(data, image); + putBinaryImageMask(maskCtx, img); + maskCtx.globalCompositeOperation = "source-in"; + maskCtx.fillStyle = isPatternFill ? fillColor.getPattern(maskCtx, this, getCurrentTransformInverse(ctx), PathType.FILL) : fillColor; + maskCtx.fillRect(0, 0, width, height); + maskCtx.restore(); + ctx.save(); + ctx.transform(...transform); + ctx.scale(1, -1); + drawImageAtIntegerCoords(ctx, maskCanvas.canvas, 0, 0, width, height, 0, -1, 1, 1); + ctx.restore(); + } + this.compose(); + } + paintImageXObject(objId) { + if (!this.contentVisible) { + return; + } + const imgData = this.getObject(objId); + if (!imgData) { + warn("Dependent image isn't ready yet"); + return; + } + this.paintInlineImageXObject(imgData); + } + paintImageXObjectRepeat(objId, scaleX, scaleY, positions) { + if (!this.contentVisible) { + return; + } + const imgData = this.getObject(objId); + if (!imgData) { + warn("Dependent image isn't ready yet"); + return; + } + const width = imgData.width; + const height = imgData.height; + const map = []; + for (let i = 0, ii = positions.length; i < ii; i += 2) { + map.push({ + transform: [scaleX, 0, 0, scaleY, positions[i], positions[i + 1]], + x: 0, + y: 0, + w: width, + h: height + }); + } + this.paintInlineImageXObjectGroup(imgData, map); + } + applyTransferMapsToCanvas(ctx) { + if (this.current.transferMaps !== "none") { + ctx.filter = this.current.transferMaps; + ctx.drawImage(ctx.canvas, 0, 0); + ctx.filter = "none"; + } + return ctx.canvas; + } + applyTransferMapsToBitmap(imgData) { + if (this.current.transferMaps === "none") { + return imgData.bitmap; + } + const { + bitmap, + width, + height + } = imgData; + const tmpCanvas = this.cachedCanvases.getCanvas("inlineImage", width, height); + const tmpCtx = tmpCanvas.context; + tmpCtx.filter = this.current.transferMaps; + tmpCtx.drawImage(bitmap, 0, 0); + tmpCtx.filter = "none"; + return tmpCanvas.canvas; + } + paintInlineImageXObject(imgData) { + if (!this.contentVisible) { + return; + } + const width = imgData.width; + const height = imgData.height; + const ctx = this.ctx; + this.save(); + if (!isNodeJS) { + const { + filter + } = ctx; + if (filter !== "none" && filter !== "") { + ctx.filter = "none"; + } + } + ctx.scale(1 / width, -1 / height); + let imgToPaint; + if (imgData.bitmap) { + imgToPaint = this.applyTransferMapsToBitmap(imgData); + } else if (typeof HTMLElement === "function" && imgData instanceof HTMLElement || !imgData.data) { + imgToPaint = imgData; + } else { + const tmpCanvas = this.cachedCanvases.getCanvas("inlineImage", width, height); + const tmpCtx = tmpCanvas.context; + putBinaryImageData(tmpCtx, imgData); + imgToPaint = this.applyTransferMapsToCanvas(tmpCtx); + } + const scaled = this._scaleImage(imgToPaint, getCurrentTransformInverse(ctx)); + ctx.imageSmoothingEnabled = getImageSmoothingEnabled(getCurrentTransform(ctx), imgData.interpolate); + drawImageAtIntegerCoords(ctx, scaled.img, 0, 0, scaled.paintWidth, scaled.paintHeight, 0, -height, width, height); + this.compose(); + this.restore(); + } + paintInlineImageXObjectGroup(imgData, map) { + if (!this.contentVisible) { + return; + } + const ctx = this.ctx; + let imgToPaint; + if (imgData.bitmap) { + imgToPaint = imgData.bitmap; + } else { + const w = imgData.width; + const h = imgData.height; + const tmpCanvas = this.cachedCanvases.getCanvas("inlineImage", w, h); + const tmpCtx = tmpCanvas.context; + putBinaryImageData(tmpCtx, imgData); + imgToPaint = this.applyTransferMapsToCanvas(tmpCtx); + } + for (const entry of map) { + ctx.save(); + ctx.transform(...entry.transform); + ctx.scale(1, -1); + drawImageAtIntegerCoords(ctx, imgToPaint, entry.x, entry.y, entry.w, entry.h, 0, -1, 1, 1); + ctx.restore(); + } + this.compose(); + } + paintSolidColorImageMask() { + if (!this.contentVisible) { + return; + } + this.ctx.fillRect(0, 0, 1, 1); + this.compose(); + } + markPoint(tag) { + } + markPointProps(tag, properties) { + } + beginMarkedContent(tag) { + this.markedContentStack.push({ + visible: true + }); + } + beginMarkedContentProps(tag, properties) { + if (tag === "OC") { + this.markedContentStack.push({ + visible: this.optionalContentConfig.isVisible(properties) + }); + } else { + this.markedContentStack.push({ + visible: true + }); + } + this.contentVisible = this.isContentVisible(); + } + endMarkedContent() { + this.markedContentStack.pop(); + this.contentVisible = this.isContentVisible(); + } + beginCompat() { + } + endCompat() { + } + consumePath(clipBox) { + const isEmpty = this.current.isEmptyClip(); + if (this.pendingClip) { + this.current.updateClipFromPath(); + } + if (!this.pendingClip) { + this.compose(clipBox); + } + const ctx = this.ctx; + if (this.pendingClip) { + if (!isEmpty) { + if (this.pendingClip === EO_CLIP) { + ctx.clip("evenodd"); + } else { + ctx.clip(); + } + } + this.pendingClip = null; + } + this.current.startNewPathAndClipBox(this.current.clipBox); + ctx.beginPath(); + } + getSinglePixelWidth() { + if (!this._cachedGetSinglePixelWidth) { + const m = getCurrentTransform(this.ctx); + if (m[1] === 0 && m[2] === 0) { + this._cachedGetSinglePixelWidth = 1 / Math.min(Math.abs(m[0]), Math.abs(m[3])); + } else { + const absDet = Math.abs(m[0] * m[3] - m[2] * m[1]); + const normX = Math.hypot(m[0], m[2]); + const normY = Math.hypot(m[1], m[3]); + this._cachedGetSinglePixelWidth = Math.max(normX, normY) / absDet; + } + } + return this._cachedGetSinglePixelWidth; + } + getScaleForStroking() { + if (this._cachedScaleForStroking[0] === -1) { + const { + lineWidth + } = this.current; + const { + a, + b, + c, + d + } = this.ctx.getTransform(); + let scaleX, scaleY; + if (b === 0 && c === 0) { + const normX = Math.abs(a); + const normY = Math.abs(d); + if (normX === normY) { + if (lineWidth === 0) { + scaleX = scaleY = 1 / normX; + } else { + const scaledLineWidth = normX * lineWidth; + scaleX = scaleY = scaledLineWidth < 1 ? 1 / scaledLineWidth : 1; + } + } else if (lineWidth === 0) { + scaleX = 1 / normX; + scaleY = 1 / normY; + } else { + const scaledXLineWidth = normX * lineWidth; + const scaledYLineWidth = normY * lineWidth; + scaleX = scaledXLineWidth < 1 ? 1 / scaledXLineWidth : 1; + scaleY = scaledYLineWidth < 1 ? 1 / scaledYLineWidth : 1; + } + } else { + const absDet = Math.abs(a * d - b * c); + const normX = Math.hypot(a, b); + const normY = Math.hypot(c, d); + if (lineWidth === 0) { + scaleX = normY / absDet; + scaleY = normX / absDet; + } else { + const baseArea = lineWidth * absDet; + scaleX = normY > baseArea ? normY / baseArea : 1; + scaleY = normX > baseArea ? normX / baseArea : 1; + } + } + this._cachedScaleForStroking[0] = scaleX; + this._cachedScaleForStroking[1] = scaleY; + } + return this._cachedScaleForStroking; + } + rescaleAndStroke(saveRestore) { + const { + ctx + } = this; + const { + lineWidth + } = this.current; + const [scaleX, scaleY] = this.getScaleForStroking(); + ctx.lineWidth = lineWidth || 1; + if (scaleX === 1 && scaleY === 1) { + ctx.stroke(); + return; + } + const dashes = ctx.getLineDash(); + if (saveRestore) { + ctx.save(); + } + ctx.scale(scaleX, scaleY); + if (dashes.length > 0) { + const scale = Math.max(scaleX, scaleY); + ctx.setLineDash(dashes.map((x) => x / scale)); + ctx.lineDashOffset /= scale; + } + ctx.stroke(); + if (saveRestore) { + ctx.restore(); + } + } + isContentVisible() { + for (let i = this.markedContentStack.length - 1; i >= 0; i--) { + if (!this.markedContentStack[i].visible) { + return false; + } + } + return true; + } +}; +var CanvasGraphics = _CanvasGraphics; +_restoreInitialState = new WeakSet(); +restoreInitialState_fn = function() { + while (this.stateStack.length || this.inSMaskMode) { + this.restore(); + } + this.current.activeSMask = null; + this.ctx.restore(); + if (this.transparentCanvas) { + this.ctx = this.compositeCtx; + this.ctx.save(); + this.ctx.setTransform(1, 0, 0, 1, 0, 0); + this.ctx.drawImage(this.transparentCanvas, 0, 0); + this.ctx.restore(); + this.transparentCanvas = null; + } +}; +_drawFilter = new WeakSet(); +drawFilter_fn = function() { + if (this.pageColors) { + const hcmFilterId = this.filterFactory.addHCMFilter(this.pageColors.foreground, this.pageColors.background); + if (hcmFilterId !== "none") { + const savedFilter = this.ctx.filter; + this.ctx.filter = hcmFilterId; + this.ctx.drawImage(this.ctx.canvas, 0, 0); + this.ctx.filter = savedFilter; + } + } +}; +for (const op in OPS) { + if (CanvasGraphics.prototype[op] !== void 0) { + CanvasGraphics.prototype[OPS[op]] = CanvasGraphics.prototype[op]; + } +} +var _port, _src; +var GlobalWorkerOptions = class { + static get workerPort() { + return __privateGet(this, _port); + } + static set workerPort(val) { + if (!(typeof Worker !== "undefined" && val instanceof Worker) && val !== null) { + throw new Error("Invalid `workerPort` type."); + } + __privateSet(this, _port, val); + } + static get workerSrc() { + return __privateGet(this, _src); + } + static set workerSrc(val) { + if (typeof val !== "string") { + throw new Error("Invalid `workerSrc` type."); + } + __privateSet(this, _src, val); + } +}; +_port = new WeakMap(); +_src = new WeakMap(); +__privateAdd(GlobalWorkerOptions, _port, null); +__privateAdd(GlobalWorkerOptions, _src, ""); +var CallbackKind = { + UNKNOWN: 0, + DATA: 1, + ERROR: 2 +}; +var StreamKind = { + UNKNOWN: 0, + CANCEL: 1, + CANCEL_COMPLETE: 2, + CLOSE: 3, + ENQUEUE: 4, + ERROR: 5, + PULL: 6, + PULL_COMPLETE: 7, + START_COMPLETE: 8 +}; +function wrapReason(reason) { + if (!(reason instanceof Error || typeof reason === "object" && reason !== null)) { + unreachable('wrapReason: Expected "reason" to be a (possibly cloned) Error.'); + } + switch (reason.name) { + case "AbortException": + return new AbortException(reason.message); + case "MissingPDFException": + return new MissingPDFException(reason.message); + case "PasswordException": + return new PasswordException(reason.message, reason.code); + case "UnexpectedResponseException": + return new UnexpectedResponseException(reason.message, reason.status); + case "UnknownErrorException": + return new UnknownErrorException(reason.message, reason.details); + default: + return new UnknownErrorException(reason.message, reason.toString()); + } +} +var _createStreamSink, createStreamSink_fn, _processStreamMessage, processStreamMessage_fn, _deleteStreamController, deleteStreamController_fn; +var MessageHandler = class { + constructor(sourceName, targetName, comObj) { + __privateAdd(this, _createStreamSink); + __privateAdd(this, _processStreamMessage); + __privateAdd(this, _deleteStreamController); + this.sourceName = sourceName; + this.targetName = targetName; + this.comObj = comObj; + this.callbackId = 1; + this.streamId = 1; + this.streamSinks = /* @__PURE__ */ Object.create(null); + this.streamControllers = /* @__PURE__ */ Object.create(null); + this.callbackCapabilities = /* @__PURE__ */ Object.create(null); + this.actionHandler = /* @__PURE__ */ Object.create(null); + this._onComObjOnMessage = (event) => { + const data = event.data; + if (data.targetName !== this.sourceName) { + return; + } + if (data.stream) { + __privateMethod(this, _processStreamMessage, processStreamMessage_fn).call(this, data); + return; + } + if (data.callback) { + const callbackId = data.callbackId; + const capability = this.callbackCapabilities[callbackId]; + if (!capability) { + throw new Error(`Cannot resolve callback ${callbackId}`); + } + delete this.callbackCapabilities[callbackId]; + if (data.callback === CallbackKind.DATA) { + capability.resolve(data.data); + } else if (data.callback === CallbackKind.ERROR) { + capability.reject(wrapReason(data.reason)); + } else { + throw new Error("Unexpected callback case"); + } + return; + } + const action = this.actionHandler[data.action]; + if (!action) { + throw new Error(`Unknown action from worker: ${data.action}`); + } + if (data.callbackId) { + const cbSourceName = this.sourceName; + const cbTargetName = data.sourceName; + new Promise(function(resolve) { + resolve(action(data.data)); + }).then(function(result) { + comObj.postMessage({ + sourceName: cbSourceName, + targetName: cbTargetName, + callback: CallbackKind.DATA, + callbackId: data.callbackId, + data: result + }); + }, function(reason) { + comObj.postMessage({ + sourceName: cbSourceName, + targetName: cbTargetName, + callback: CallbackKind.ERROR, + callbackId: data.callbackId, + reason: wrapReason(reason) + }); + }); + return; + } + if (data.streamId) { + __privateMethod(this, _createStreamSink, createStreamSink_fn).call(this, data); + return; + } + action(data.data); + }; + comObj.addEventListener("message", this._onComObjOnMessage); + } + on(actionName, handler) { + const ah = this.actionHandler; + if (ah[actionName]) { + throw new Error(`There is already an actionName called "${actionName}"`); + } + ah[actionName] = handler; + } + send(actionName, data, transfers) { + this.comObj.postMessage({ + sourceName: this.sourceName, + targetName: this.targetName, + action: actionName, + data + }, transfers); + } + sendWithPromise(actionName, data, transfers) { + const callbackId = this.callbackId++; + const capability = Promise.withResolvers(); + this.callbackCapabilities[callbackId] = capability; + try { + this.comObj.postMessage({ + sourceName: this.sourceName, + targetName: this.targetName, + action: actionName, + callbackId, + data + }, transfers); + } catch (ex) { + capability.reject(ex); + } + return capability.promise; + } + sendWithStream(actionName, data, queueingStrategy, transfers) { + const streamId = this.streamId++, sourceName = this.sourceName, targetName = this.targetName, comObj = this.comObj; + return new ReadableStream({ + start: (controller) => { + const startCapability = Promise.withResolvers(); + this.streamControllers[streamId] = { + controller, + startCall: startCapability, + pullCall: null, + cancelCall: null, + isClosed: false + }; + comObj.postMessage({ + sourceName, + targetName, + action: actionName, + streamId, + data, + desiredSize: controller.desiredSize + }, transfers); + return startCapability.promise; + }, + pull: (controller) => { + const pullCapability = Promise.withResolvers(); + this.streamControllers[streamId].pullCall = pullCapability; + comObj.postMessage({ + sourceName, + targetName, + stream: StreamKind.PULL, + streamId, + desiredSize: controller.desiredSize + }); + return pullCapability.promise; + }, + cancel: (reason) => { + assert(reason instanceof Error, "cancel must have a valid reason"); + const cancelCapability = Promise.withResolvers(); + this.streamControllers[streamId].cancelCall = cancelCapability; + this.streamControllers[streamId].isClosed = true; + comObj.postMessage({ + sourceName, + targetName, + stream: StreamKind.CANCEL, + streamId, + reason: wrapReason(reason) + }); + return cancelCapability.promise; + } + }, queueingStrategy); + } + destroy() { + this.comObj.removeEventListener("message", this._onComObjOnMessage); + } +}; +_createStreamSink = new WeakSet(); +createStreamSink_fn = function(data) { + const streamId = data.streamId, sourceName = this.sourceName, targetName = data.sourceName, comObj = this.comObj; + const self = this, action = this.actionHandler[data.action]; + const streamSink = { + enqueue(chunk, size = 1, transfers) { + if (this.isCancelled) { + return; + } + const lastDesiredSize = this.desiredSize; + this.desiredSize -= size; + if (lastDesiredSize > 0 && this.desiredSize <= 0) { + this.sinkCapability = Promise.withResolvers(); + this.ready = this.sinkCapability.promise; + } + comObj.postMessage({ + sourceName, + targetName, + stream: StreamKind.ENQUEUE, + streamId, + chunk + }, transfers); + }, + close() { + if (this.isCancelled) { + return; + } + this.isCancelled = true; + comObj.postMessage({ + sourceName, + targetName, + stream: StreamKind.CLOSE, + streamId + }); + delete self.streamSinks[streamId]; + }, + error(reason) { + assert(reason instanceof Error, "error must have a valid reason"); + if (this.isCancelled) { + return; + } + this.isCancelled = true; + comObj.postMessage({ + sourceName, + targetName, + stream: StreamKind.ERROR, + streamId, + reason: wrapReason(reason) + }); + }, + sinkCapability: Promise.withResolvers(), + onPull: null, + onCancel: null, + isCancelled: false, + desiredSize: data.desiredSize, + ready: null + }; + streamSink.sinkCapability.resolve(); + streamSink.ready = streamSink.sinkCapability.promise; + this.streamSinks[streamId] = streamSink; + new Promise(function(resolve) { + resolve(action(data.data, streamSink)); + }).then(function() { + comObj.postMessage({ + sourceName, + targetName, + stream: StreamKind.START_COMPLETE, + streamId, + success: true + }); + }, function(reason) { + comObj.postMessage({ + sourceName, + targetName, + stream: StreamKind.START_COMPLETE, + streamId, + reason: wrapReason(reason) + }); + }); +}; +_processStreamMessage = new WeakSet(); +processStreamMessage_fn = function(data) { + const streamId = data.streamId, sourceName = this.sourceName, targetName = data.sourceName, comObj = this.comObj; + const streamController = this.streamControllers[streamId], streamSink = this.streamSinks[streamId]; + switch (data.stream) { + case StreamKind.START_COMPLETE: + if (data.success) { + streamController.startCall.resolve(); + } else { + streamController.startCall.reject(wrapReason(data.reason)); + } + break; + case StreamKind.PULL_COMPLETE: + if (data.success) { + streamController.pullCall.resolve(); + } else { + streamController.pullCall.reject(wrapReason(data.reason)); + } + break; + case StreamKind.PULL: + if (!streamSink) { + comObj.postMessage({ + sourceName, + targetName, + stream: StreamKind.PULL_COMPLETE, + streamId, + success: true + }); + break; + } + if (streamSink.desiredSize <= 0 && data.desiredSize > 0) { + streamSink.sinkCapability.resolve(); + } + streamSink.desiredSize = data.desiredSize; + new Promise(function(resolve) { + var _a2; + resolve((_a2 = streamSink.onPull) == null ? void 0 : _a2.call(streamSink)); + }).then(function() { + comObj.postMessage({ + sourceName, + targetName, + stream: StreamKind.PULL_COMPLETE, + streamId, + success: true + }); + }, function(reason) { + comObj.postMessage({ + sourceName, + targetName, + stream: StreamKind.PULL_COMPLETE, + streamId, + reason: wrapReason(reason) + }); + }); + break; + case StreamKind.ENQUEUE: + assert(streamController, "enqueue should have stream controller"); + if (streamController.isClosed) { + break; + } + streamController.controller.enqueue(data.chunk); + break; + case StreamKind.CLOSE: + assert(streamController, "close should have stream controller"); + if (streamController.isClosed) { + break; + } + streamController.isClosed = true; + streamController.controller.close(); + __privateMethod(this, _deleteStreamController, deleteStreamController_fn).call(this, streamController, streamId); + break; + case StreamKind.ERROR: + assert(streamController, "error should have stream controller"); + streamController.controller.error(wrapReason(data.reason)); + __privateMethod(this, _deleteStreamController, deleteStreamController_fn).call(this, streamController, streamId); + break; + case StreamKind.CANCEL_COMPLETE: + if (data.success) { + streamController.cancelCall.resolve(); + } else { + streamController.cancelCall.reject(wrapReason(data.reason)); + } + __privateMethod(this, _deleteStreamController, deleteStreamController_fn).call(this, streamController, streamId); + break; + case StreamKind.CANCEL: + if (!streamSink) { + break; + } + new Promise(function(resolve) { + var _a2; + resolve((_a2 = streamSink.onCancel) == null ? void 0 : _a2.call(streamSink, wrapReason(data.reason))); + }).then(function() { + comObj.postMessage({ + sourceName, + targetName, + stream: StreamKind.CANCEL_COMPLETE, + streamId, + success: true + }); + }, function(reason) { + comObj.postMessage({ + sourceName, + targetName, + stream: StreamKind.CANCEL_COMPLETE, + streamId, + reason: wrapReason(reason) + }); + }); + streamSink.sinkCapability.reject(wrapReason(data.reason)); + streamSink.isCancelled = true; + delete this.streamSinks[streamId]; + break; + default: + throw new Error("Unexpected stream case"); + } +}; +_deleteStreamController = new WeakSet(); +deleteStreamController_fn = async function(streamController, streamId) { + var _a2, _b, _c; + await Promise.allSettled([(_a2 = streamController.startCall) == null ? void 0 : _a2.promise, (_b = streamController.pullCall) == null ? void 0 : _b.promise, (_c = streamController.cancelCall) == null ? void 0 : _c.promise]); + delete this.streamControllers[streamId]; +}; +var _metadataMap, _data; +var Metadata = class { + constructor({ + parsedData, + rawData + }) { + __privateAdd(this, _metadataMap, void 0); + __privateAdd(this, _data, void 0); + __privateSet(this, _metadataMap, parsedData); + __privateSet(this, _data, rawData); + } + getRaw() { + return __privateGet(this, _data); + } + get(name) { + var _a2; + return (_a2 = __privateGet(this, _metadataMap).get(name)) != null ? _a2 : null; + } + getAll() { + return objectFromMap(__privateGet(this, _metadataMap)); + } + has(name) { + return __privateGet(this, _metadataMap).has(name); + } +}; +_metadataMap = new WeakMap(); +_data = new WeakMap(); +var INTERNAL = Symbol("INTERNAL"); +var _isDisplay, _isPrint, _userSet, _visible; +var OptionalContentGroup = class { + constructor(renderingIntent, { + name, + intent, + usage + }) { + __privateAdd(this, _isDisplay, false); + __privateAdd(this, _isPrint, false); + __privateAdd(this, _userSet, false); + __privateAdd(this, _visible, true); + __privateSet(this, _isDisplay, !!(renderingIntent & RenderingIntentFlag.DISPLAY)); + __privateSet(this, _isPrint, !!(renderingIntent & RenderingIntentFlag.PRINT)); + this.name = name; + this.intent = intent; + this.usage = usage; + } + get visible() { + if (__privateGet(this, _userSet)) { + return __privateGet(this, _visible); + } + if (!__privateGet(this, _visible)) { + return false; + } + const { + print, + view + } = this.usage; + if (__privateGet(this, _isDisplay)) { + return (view == null ? void 0 : view.viewState) !== "OFF"; + } else if (__privateGet(this, _isPrint)) { + return (print == null ? void 0 : print.printState) !== "OFF"; + } + return true; + } + _setVisible(internal, visible, userSet = false) { + if (internal !== INTERNAL) { + unreachable("Internal method `_setVisible` called."); + } + __privateSet(this, _userSet, userSet); + __privateSet(this, _visible, visible); + } +}; +_isDisplay = new WeakMap(); +_isPrint = new WeakMap(); +_userSet = new WeakMap(); +_visible = new WeakMap(); +var _cachedGetHash, _groups, _initialHash, _order, _evaluateVisibilityExpression, evaluateVisibilityExpression_fn; +var OptionalContentConfig = class { + constructor(data, renderingIntent = RenderingIntentFlag.DISPLAY) { + __privateAdd(this, _evaluateVisibilityExpression); + __privateAdd(this, _cachedGetHash, null); + __privateAdd(this, _groups, /* @__PURE__ */ new Map()); + __privateAdd(this, _initialHash, null); + __privateAdd(this, _order, null); + this.renderingIntent = renderingIntent; + this.name = null; + this.creator = null; + if (data === null) { + return; + } + this.name = data.name; + this.creator = data.creator; + __privateSet(this, _order, data.order); + for (const group of data.groups) { + __privateGet(this, _groups).set(group.id, new OptionalContentGroup(renderingIntent, group)); + } + if (data.baseState === "OFF") { + for (const group of __privateGet(this, _groups).values()) { + group._setVisible(INTERNAL, false); + } + } + for (const on of data.on) { + __privateGet(this, _groups).get(on)._setVisible(INTERNAL, true); + } + for (const off of data.off) { + __privateGet(this, _groups).get(off)._setVisible(INTERNAL, false); + } + __privateSet(this, _initialHash, this.getHash()); + } + isVisible(group) { + if (__privateGet(this, _groups).size === 0) { + return true; + } + if (!group) { + info("Optional content group not defined."); + return true; + } + if (group.type === "OCG") { + if (!__privateGet(this, _groups).has(group.id)) { + warn(`Optional content group not found: ${group.id}`); + return true; + } + return __privateGet(this, _groups).get(group.id).visible; + } else if (group.type === "OCMD") { + if (group.expression) { + return __privateMethod(this, _evaluateVisibilityExpression, evaluateVisibilityExpression_fn).call(this, group.expression); + } + if (!group.policy || group.policy === "AnyOn") { + for (const id of group.ids) { + if (!__privateGet(this, _groups).has(id)) { + warn(`Optional content group not found: ${id}`); + return true; + } + if (__privateGet(this, _groups).get(id).visible) { + return true; + } + } + return false; + } else if (group.policy === "AllOn") { + for (const id of group.ids) { + if (!__privateGet(this, _groups).has(id)) { + warn(`Optional content group not found: ${id}`); + return true; + } + if (!__privateGet(this, _groups).get(id).visible) { + return false; + } + } + return true; + } else if (group.policy === "AnyOff") { + for (const id of group.ids) { + if (!__privateGet(this, _groups).has(id)) { + warn(`Optional content group not found: ${id}`); + return true; + } + if (!__privateGet(this, _groups).get(id).visible) { + return true; + } + } + return false; + } else if (group.policy === "AllOff") { + for (const id of group.ids) { + if (!__privateGet(this, _groups).has(id)) { + warn(`Optional content group not found: ${id}`); + return true; + } + if (__privateGet(this, _groups).get(id).visible) { + return false; + } + } + return true; + } + warn(`Unknown optional content policy ${group.policy}.`); + return true; + } + warn(`Unknown group type ${group.type}.`); + return true; + } + setVisibility(id, visible = true) { + const group = __privateGet(this, _groups).get(id); + if (!group) { + warn(`Optional content group not found: ${id}`); + return; + } + group._setVisible(INTERNAL, !!visible, true); + __privateSet(this, _cachedGetHash, null); + } + setOCGState({ + state, + preserveRB + }) { + let operator; + for (const elem of state) { + switch (elem) { + case "ON": + case "OFF": + case "Toggle": + operator = elem; + continue; + } + const group = __privateGet(this, _groups).get(elem); + if (!group) { + continue; + } + switch (operator) { + case "ON": + group._setVisible(INTERNAL, true); + break; + case "OFF": + group._setVisible(INTERNAL, false); + break; + case "Toggle": + group._setVisible(INTERNAL, !group.visible); + break; + } + } + __privateSet(this, _cachedGetHash, null); + } + get hasInitialVisibility() { + return __privateGet(this, _initialHash) === null || this.getHash() === __privateGet(this, _initialHash); + } + getOrder() { + if (!__privateGet(this, _groups).size) { + return null; + } + if (__privateGet(this, _order)) { + return __privateGet(this, _order).slice(); + } + return [...__privateGet(this, _groups).keys()]; + } + getGroups() { + return __privateGet(this, _groups).size > 0 ? objectFromMap(__privateGet(this, _groups)) : null; + } + getGroup(id) { + return __privateGet(this, _groups).get(id) || null; + } + getHash() { + if (__privateGet(this, _cachedGetHash) !== null) { + return __privateGet(this, _cachedGetHash); + } + const hash = new MurmurHash3_64(); + for (const [id, group] of __privateGet(this, _groups)) { + hash.update(`${id}:${group.visible}`); + } + return __privateSet(this, _cachedGetHash, hash.hexdigest()); + } +}; +_cachedGetHash = new WeakMap(); +_groups = new WeakMap(); +_initialHash = new WeakMap(); +_order = new WeakMap(); +_evaluateVisibilityExpression = new WeakSet(); +evaluateVisibilityExpression_fn = function(array) { + const length = array.length; + if (length < 2) { + return true; + } + const operator = array[0]; + for (let i = 1; i < length; i++) { + const element2 = array[i]; + let state; + if (Array.isArray(element2)) { + state = __privateMethod(this, _evaluateVisibilityExpression, evaluateVisibilityExpression_fn).call(this, element2); + } else if (__privateGet(this, _groups).has(element2)) { + state = __privateGet(this, _groups).get(element2).visible; + } else { + warn(`Optional content group not found: ${element2}`); + return true; + } + switch (operator) { + case "And": + if (!state) { + return false; + } + break; + case "Or": + if (state) { + return true; + } + break; + case "Not": + return !state; + default: + return true; + } + } + return operator === "And"; +}; +var PDFDataTransportStream = class { + constructor(pdfDataRangeTransport, { + disableRange = false, + disableStream = false + }) { + assert(pdfDataRangeTransport, 'PDFDataTransportStream - missing required "pdfDataRangeTransport" argument.'); + const { + length, + initialData, + progressiveDone, + contentDispositionFilename + } = pdfDataRangeTransport; + this._queuedChunks = []; + this._progressiveDone = progressiveDone; + this._contentDispositionFilename = contentDispositionFilename; + if ((initialData == null ? void 0 : initialData.length) > 0) { + const buffer = initialData instanceof Uint8Array && initialData.byteLength === initialData.buffer.byteLength ? initialData.buffer : new Uint8Array(initialData).buffer; + this._queuedChunks.push(buffer); + } + this._pdfDataRangeTransport = pdfDataRangeTransport; + this._isStreamingSupported = !disableStream; + this._isRangeSupported = !disableRange; + this._contentLength = length; + this._fullRequestReader = null; + this._rangeReaders = []; + pdfDataRangeTransport.addRangeListener((begin, chunk) => { + this._onReceiveData({ + begin, + chunk + }); + }); + pdfDataRangeTransport.addProgressListener((loaded, total) => { + this._onProgress({ + loaded, + total + }); + }); + pdfDataRangeTransport.addProgressiveReadListener((chunk) => { + this._onReceiveData({ + chunk + }); + }); + pdfDataRangeTransport.addProgressiveDoneListener(() => { + this._onProgressiveDone(); + }); + pdfDataRangeTransport.transportReady(); + } + _onReceiveData({ + begin, + chunk + }) { + const buffer = chunk instanceof Uint8Array && chunk.byteLength === chunk.buffer.byteLength ? chunk.buffer : new Uint8Array(chunk).buffer; + if (begin === void 0) { + if (this._fullRequestReader) { + this._fullRequestReader._enqueue(buffer); + } else { + this._queuedChunks.push(buffer); + } + } else { + const found = this._rangeReaders.some(function(rangeReader) { + if (rangeReader._begin !== begin) { + return false; + } + rangeReader._enqueue(buffer); + return true; + }); + assert(found, "_onReceiveData - no `PDFDataTransportStreamRangeReader` instance found."); + } + } + get _progressiveDataLength() { + var _a2, _b; + return (_b = (_a2 = this._fullRequestReader) == null ? void 0 : _a2._loaded) != null ? _b : 0; + } + _onProgress(evt) { + var _a2, _b, _c, _d; + if (evt.total === void 0) { + (_b = (_a2 = this._rangeReaders[0]) == null ? void 0 : _a2.onProgress) == null ? void 0 : _b.call(_a2, { + loaded: evt.loaded + }); + } else { + (_d = (_c = this._fullRequestReader) == null ? void 0 : _c.onProgress) == null ? void 0 : _d.call(_c, { + loaded: evt.loaded, + total: evt.total + }); + } + } + _onProgressiveDone() { + var _a2; + (_a2 = this._fullRequestReader) == null ? void 0 : _a2.progressiveDone(); + this._progressiveDone = true; + } + _removeRangeReader(reader) { + const i = this._rangeReaders.indexOf(reader); + if (i >= 0) { + this._rangeReaders.splice(i, 1); + } + } + getFullReader() { + assert(!this._fullRequestReader, "PDFDataTransportStream.getFullReader can only be called once."); + const queuedChunks = this._queuedChunks; + this._queuedChunks = null; + return new PDFDataTransportStreamReader(this, queuedChunks, this._progressiveDone, this._contentDispositionFilename); + } + getRangeReader(begin, end) { + if (end <= this._progressiveDataLength) { + return null; + } + const reader = new PDFDataTransportStreamRangeReader(this, begin, end); + this._pdfDataRangeTransport.requestDataRange(begin, end); + this._rangeReaders.push(reader); + return reader; + } + cancelAllRequests(reason) { + var _a2; + (_a2 = this._fullRequestReader) == null ? void 0 : _a2.cancel(reason); + for (const reader of this._rangeReaders.slice(0)) { + reader.cancel(reason); + } + this._pdfDataRangeTransport.abort(); + } +}; +var PDFDataTransportStreamReader = class { + constructor(stream, queuedChunks, progressiveDone = false, contentDispositionFilename = null) { + this._stream = stream; + this._done = progressiveDone || false; + this._filename = isPdfFile(contentDispositionFilename) ? contentDispositionFilename : null; + this._queuedChunks = queuedChunks || []; + this._loaded = 0; + for (const chunk of this._queuedChunks) { + this._loaded += chunk.byteLength; + } + this._requests = []; + this._headersReady = Promise.resolve(); + stream._fullRequestReader = this; + this.onProgress = null; + } + _enqueue(chunk) { + if (this._done) { + return; + } + if (this._requests.length > 0) { + const requestCapability = this._requests.shift(); + requestCapability.resolve({ + value: chunk, + done: false + }); + } else { + this._queuedChunks.push(chunk); + } + this._loaded += chunk.byteLength; + } + get headersReady() { + return this._headersReady; + } + get filename() { + return this._filename; + } + get isRangeSupported() { + return this._stream._isRangeSupported; + } + get isStreamingSupported() { + return this._stream._isStreamingSupported; + } + get contentLength() { + return this._stream._contentLength; + } + async read() { + if (this._queuedChunks.length > 0) { + const chunk = this._queuedChunks.shift(); + return { + value: chunk, + done: false + }; + } + if (this._done) { + return { + value: void 0, + done: true + }; + } + const requestCapability = Promise.withResolvers(); + this._requests.push(requestCapability); + return requestCapability.promise; + } + cancel(reason) { + this._done = true; + for (const requestCapability of this._requests) { + requestCapability.resolve({ + value: void 0, + done: true + }); + } + this._requests.length = 0; + } + progressiveDone() { + if (this._done) { + return; + } + this._done = true; + } +}; +var PDFDataTransportStreamRangeReader = class { + constructor(stream, begin, end) { + this._stream = stream; + this._begin = begin; + this._end = end; + this._queuedChunk = null; + this._requests = []; + this._done = false; + this.onProgress = null; + } + _enqueue(chunk) { + if (this._done) { + return; + } + if (this._requests.length === 0) { + this._queuedChunk = chunk; + } else { + const requestsCapability = this._requests.shift(); + requestsCapability.resolve({ + value: chunk, + done: false + }); + for (const requestCapability of this._requests) { + requestCapability.resolve({ + value: void 0, + done: true + }); + } + this._requests.length = 0; + } + this._done = true; + this._stream._removeRangeReader(this); + } + get isStreamingSupported() { + return false; + } + async read() { + if (this._queuedChunk) { + const chunk = this._queuedChunk; + this._queuedChunk = null; + return { + value: chunk, + done: false + }; + } + if (this._done) { + return { + value: void 0, + done: true + }; + } + const requestCapability = Promise.withResolvers(); + this._requests.push(requestCapability); + return requestCapability.promise; + } + cancel(reason) { + this._done = true; + for (const requestCapability of this._requests) { + requestCapability.resolve({ + value: void 0, + done: true + }); + } + this._requests.length = 0; + this._stream._removeRangeReader(this); + } +}; +function getFilenameFromContentDispositionHeader(contentDisposition) { + let needsEncodingFixup = true; + let tmp = toParamRegExp("filename\\*", "i").exec(contentDisposition); + if (tmp) { + tmp = tmp[1]; + let filename = rfc2616unquote(tmp); + filename = unescape(filename); + filename = rfc5987decode(filename); + filename = rfc2047decode(filename); + return fixupEncoding(filename); + } + tmp = rfc2231getparam(contentDisposition); + if (tmp) { + const filename = rfc2047decode(tmp); + return fixupEncoding(filename); + } + tmp = toParamRegExp("filename", "i").exec(contentDisposition); + if (tmp) { + tmp = tmp[1]; + let filename = rfc2616unquote(tmp); + filename = rfc2047decode(filename); + return fixupEncoding(filename); + } + function toParamRegExp(attributePattern, flags) { + return new RegExp("(?:^|;)\\s*" + attributePattern + '\\s*=\\s*([^";\\s][^;\\s]*|"(?:[^"\\\\]|\\\\"?)+"?)', flags); + } + function textdecode(encoding, value) { + if (encoding) { + if (!/^[\x00-\xFF]+$/.test(value)) { + return value; + } + try { + const decoder = new TextDecoder(encoding, { + fatal: true + }); + const buffer = stringToBytes(value); + value = decoder.decode(buffer); + needsEncodingFixup = false; + } catch (e) { + } + } + return value; + } + function fixupEncoding(value) { + if (needsEncodingFixup && /[\x80-\xff]/.test(value)) { + value = textdecode("utf-8", value); + if (needsEncodingFixup) { + value = textdecode("iso-8859-1", value); + } + } + return value; + } + function rfc2231getparam(contentDispositionStr) { + const matches = []; + let match; + const iter = toParamRegExp("filename\\*((?!0\\d)\\d+)(\\*?)", "ig"); + while ((match = iter.exec(contentDispositionStr)) !== null) { + let [, n, quot, part] = match; + n = parseInt(n, 10); + if (n in matches) { + if (n === 0) { + break; + } + continue; + } + matches[n] = [quot, part]; + } + const parts = []; + for (let n = 0; n < matches.length; ++n) { + if (!(n in matches)) { + break; + } + let [quot, part] = matches[n]; + part = rfc2616unquote(part); + if (quot) { + part = unescape(part); + if (n === 0) { + part = rfc5987decode(part); + } + } + parts.push(part); + } + return parts.join(""); + } + function rfc2616unquote(value) { + if (value.startsWith('"')) { + const parts = value.slice(1).split('\\"'); + for (let i = 0; i < parts.length; ++i) { + const quotindex = parts[i].indexOf('"'); + if (quotindex !== -1) { + parts[i] = parts[i].slice(0, quotindex); + parts.length = i + 1; + } + parts[i] = parts[i].replaceAll(/\\(.)/g, "$1"); + } + value = parts.join('"'); + } + return value; + } + function rfc5987decode(extvalue) { + const encodingend = extvalue.indexOf("'"); + if (encodingend === -1) { + return extvalue; + } + const encoding = extvalue.slice(0, encodingend); + const langvalue = extvalue.slice(encodingend + 1); + const value = langvalue.replace(/^[^']*'/, ""); + return textdecode(encoding, value); + } + function rfc2047decode(value) { + if (!value.startsWith("=?") || /[\x00-\x19\x80-\xff]/.test(value)) { + return value; + } + return value.replaceAll(/=\?([\w-]*)\?([QqBb])\?((?:[^?]|\?(?!=))*)\?=/g, function(matches, charset, encoding, text2) { + if (encoding === "q" || encoding === "Q") { + text2 = text2.replaceAll("_", " "); + text2 = text2.replaceAll(/=([0-9a-fA-F]{2})/g, function(match, hex) { + return String.fromCharCode(parseInt(hex, 16)); + }); + return textdecode(charset, text2); + } + try { + text2 = atob(text2); + } catch (e) { + } + return textdecode(charset, text2); + }); + } + return ""; +} +function validateRangeRequestCapabilities({ + getResponseHeader, + isHttp, + rangeChunkSize, + disableRange +}) { + const returnValues = { + allowRangeRequests: false, + suggestedLength: void 0 + }; + const length = parseInt(getResponseHeader("Content-Length"), 10); + if (!Number.isInteger(length)) { + return returnValues; + } + returnValues.suggestedLength = length; + if (length <= 2 * rangeChunkSize) { + return returnValues; + } + if (disableRange || !isHttp) { + return returnValues; + } + if (getResponseHeader("Accept-Ranges") !== "bytes") { + return returnValues; + } + const contentEncoding = getResponseHeader("Content-Encoding") || "identity"; + if (contentEncoding !== "identity") { + return returnValues; + } + returnValues.allowRangeRequests = true; + return returnValues; +} +function extractFilenameFromHeader(getResponseHeader) { + const contentDisposition = getResponseHeader("Content-Disposition"); + if (contentDisposition) { + let filename = getFilenameFromContentDispositionHeader(contentDisposition); + if (filename.includes("%")) { + try { + filename = decodeURIComponent(filename); + } catch (e) { + } + } + if (isPdfFile(filename)) { + return filename; + } + } + return null; +} +function createResponseStatusError(status, url) { + if (status === 404 || status === 0 && url.startsWith("file:")) { + return new MissingPDFException('Missing PDF "' + url + '".'); + } + return new UnexpectedResponseException(`Unexpected server response (${status}) while retrieving PDF "${url}".`, status); +} +function validateResponseStatus(status) { + return status === 200 || status === 206; +} +function createFetchOptions(headers, withCredentials, abortController) { + return { + method: "GET", + headers, + signal: abortController.signal, + mode: "cors", + credentials: withCredentials ? "include" : "same-origin", + redirect: "follow" + }; +} +function createHeaders(httpHeaders) { + const headers = new Headers(); + for (const property in httpHeaders) { + const value = httpHeaders[property]; + if (value === void 0) { + continue; + } + headers.append(property, value); + } + return headers; +} +function getArrayBuffer(val) { + if (val instanceof Uint8Array) { + return val.buffer; + } + if (val instanceof ArrayBuffer) { + return val; + } + warn(`getArrayBuffer - unexpected data format: ${val}`); + return new Uint8Array(val).buffer; +} +var PDFFetchStream = class { + constructor(source) { + this.source = source; + this.isHttp = /^https?:/i.test(source.url); + this.httpHeaders = this.isHttp && source.httpHeaders || {}; + this._fullRequestReader = null; + this._rangeRequestReaders = []; + } + get _progressiveDataLength() { + var _a2, _b; + return (_b = (_a2 = this._fullRequestReader) == null ? void 0 : _a2._loaded) != null ? _b : 0; + } + getFullReader() { + assert(!this._fullRequestReader, "PDFFetchStream.getFullReader can only be called once."); + this._fullRequestReader = new PDFFetchStreamReader(this); + return this._fullRequestReader; + } + getRangeReader(begin, end) { + if (end <= this._progressiveDataLength) { + return null; + } + const reader = new PDFFetchStreamRangeReader(this, begin, end); + this._rangeRequestReaders.push(reader); + return reader; + } + cancelAllRequests(reason) { + var _a2; + (_a2 = this._fullRequestReader) == null ? void 0 : _a2.cancel(reason); + for (const reader of this._rangeRequestReaders.slice(0)) { + reader.cancel(reason); + } + } +}; +var PDFFetchStreamReader = class { + constructor(stream) { + this._stream = stream; + this._reader = null; + this._loaded = 0; + this._filename = null; + const source = stream.source; + this._withCredentials = source.withCredentials || false; + this._contentLength = source.length; + this._headersCapability = Promise.withResolvers(); + this._disableRange = source.disableRange || false; + this._rangeChunkSize = source.rangeChunkSize; + if (!this._rangeChunkSize && !this._disableRange) { + this._disableRange = true; + } + this._abortController = new AbortController(); + this._isStreamingSupported = !source.disableStream; + this._isRangeSupported = !source.disableRange; + this._headers = createHeaders(this._stream.httpHeaders); + const url = source.url; + fetch(url, createFetchOptions(this._headers, this._withCredentials, this._abortController)).then((response) => { + if (!validateResponseStatus(response.status)) { + throw createResponseStatusError(response.status, url); + } + this._reader = response.body.getReader(); + this._headersCapability.resolve(); + const getResponseHeader = (name) => response.headers.get(name); + const { + allowRangeRequests, + suggestedLength + } = validateRangeRequestCapabilities({ + getResponseHeader, + isHttp: this._stream.isHttp, + rangeChunkSize: this._rangeChunkSize, + disableRange: this._disableRange + }); + this._isRangeSupported = allowRangeRequests; + this._contentLength = suggestedLength || this._contentLength; + this._filename = extractFilenameFromHeader(getResponseHeader); + if (!this._isStreamingSupported && this._isRangeSupported) { + this.cancel(new AbortException("Streaming is disabled.")); + } + }).catch(this._headersCapability.reject); + this.onProgress = null; + } + get headersReady() { + return this._headersCapability.promise; + } + get filename() { + return this._filename; + } + get contentLength() { + return this._contentLength; + } + get isRangeSupported() { + return this._isRangeSupported; + } + get isStreamingSupported() { + return this._isStreamingSupported; + } + async read() { + var _a2; + await this._headersCapability.promise; + const { + value, + done + } = await this._reader.read(); + if (done) { + return { + value, + done + }; + } + this._loaded += value.byteLength; + (_a2 = this.onProgress) == null ? void 0 : _a2.call(this, { + loaded: this._loaded, + total: this._contentLength + }); + return { + value: getArrayBuffer(value), + done: false + }; + } + cancel(reason) { + var _a2; + (_a2 = this._reader) == null ? void 0 : _a2.cancel(reason); + this._abortController.abort(); + } +}; +var PDFFetchStreamRangeReader = class { + constructor(stream, begin, end) { + this._stream = stream; + this._reader = null; + this._loaded = 0; + const source = stream.source; + this._withCredentials = source.withCredentials || false; + this._readCapability = Promise.withResolvers(); + this._isStreamingSupported = !source.disableStream; + this._abortController = new AbortController(); + this._headers = createHeaders(this._stream.httpHeaders); + this._headers.append("Range", `bytes=${begin}-${end - 1}`); + const url = source.url; + fetch(url, createFetchOptions(this._headers, this._withCredentials, this._abortController)).then((response) => { + if (!validateResponseStatus(response.status)) { + throw createResponseStatusError(response.status, url); + } + this._readCapability.resolve(); + this._reader = response.body.getReader(); + }).catch(this._readCapability.reject); + this.onProgress = null; + } + get isStreamingSupported() { + return this._isStreamingSupported; + } + async read() { + var _a2; + await this._readCapability.promise; + const { + value, + done + } = await this._reader.read(); + if (done) { + return { + value, + done + }; + } + this._loaded += value.byteLength; + (_a2 = this.onProgress) == null ? void 0 : _a2.call(this, { + loaded: this._loaded + }); + return { + value: getArrayBuffer(value), + done: false + }; + } + cancel(reason) { + var _a2; + (_a2 = this._reader) == null ? void 0 : _a2.cancel(reason); + this._abortController.abort(); + } +}; +var OK_RESPONSE = 200; +var PARTIAL_CONTENT_RESPONSE = 206; +function network_getArrayBuffer(xhr) { + const data = xhr.response; + if (typeof data !== "string") { + return data; + } + return stringToBytes(data).buffer; +} +var NetworkManager = class { + constructor(url, args = {}) { + this.url = url; + this.isHttp = /^https?:/i.test(url); + this.httpHeaders = this.isHttp && args.httpHeaders || /* @__PURE__ */ Object.create(null); + this.withCredentials = args.withCredentials || false; + this.currXhrId = 0; + this.pendingRequests = /* @__PURE__ */ Object.create(null); + } + requestRange(begin, end, listeners) { + const args = { + begin, + end + }; + for (const prop in listeners) { + args[prop] = listeners[prop]; + } + return this.request(args); + } + requestFull(listeners) { + return this.request(listeners); + } + request(args) { + const xhr = new XMLHttpRequest(); + const xhrId = this.currXhrId++; + const pendingRequest = this.pendingRequests[xhrId] = { + xhr + }; + xhr.open("GET", this.url); + xhr.withCredentials = this.withCredentials; + for (const property in this.httpHeaders) { + const value = this.httpHeaders[property]; + if (value === void 0) { + continue; + } + xhr.setRequestHeader(property, value); + } + if (this.isHttp && "begin" in args && "end" in args) { + xhr.setRequestHeader("Range", `bytes=${args.begin}-${args.end - 1}`); + pendingRequest.expectedStatus = PARTIAL_CONTENT_RESPONSE; + } else { + pendingRequest.expectedStatus = OK_RESPONSE; + } + xhr.responseType = "arraybuffer"; + if (args.onError) { + xhr.onerror = function(evt) { + args.onError(xhr.status); + }; + } + xhr.onreadystatechange = this.onStateChange.bind(this, xhrId); + xhr.onprogress = this.onProgress.bind(this, xhrId); + pendingRequest.onHeadersReceived = args.onHeadersReceived; + pendingRequest.onDone = args.onDone; + pendingRequest.onError = args.onError; + pendingRequest.onProgress = args.onProgress; + xhr.send(null); + return xhrId; + } + onProgress(xhrId, evt) { + var _a2; + const pendingRequest = this.pendingRequests[xhrId]; + if (!pendingRequest) { + return; + } + (_a2 = pendingRequest.onProgress) == null ? void 0 : _a2.call(pendingRequest, evt); + } + onStateChange(xhrId, evt) { + var _a2, _b, _c; + const pendingRequest = this.pendingRequests[xhrId]; + if (!pendingRequest) { + return; + } + const xhr = pendingRequest.xhr; + if (xhr.readyState >= 2 && pendingRequest.onHeadersReceived) { + pendingRequest.onHeadersReceived(); + delete pendingRequest.onHeadersReceived; + } + if (xhr.readyState !== 4) { + return; + } + if (!(xhrId in this.pendingRequests)) { + return; + } + delete this.pendingRequests[xhrId]; + if (xhr.status === 0 && this.isHttp) { + (_a2 = pendingRequest.onError) == null ? void 0 : _a2.call(pendingRequest, xhr.status); + return; + } + const xhrStatus = xhr.status || OK_RESPONSE; + const ok_response_on_range_request = xhrStatus === OK_RESPONSE && pendingRequest.expectedStatus === PARTIAL_CONTENT_RESPONSE; + if (!ok_response_on_range_request && xhrStatus !== pendingRequest.expectedStatus) { + (_b = pendingRequest.onError) == null ? void 0 : _b.call(pendingRequest, xhr.status); + return; + } + const chunk = network_getArrayBuffer(xhr); + if (xhrStatus === PARTIAL_CONTENT_RESPONSE) { + const rangeHeader = xhr.getResponseHeader("Content-Range"); + const matches = /bytes (\d+)-(\d+)\/(\d+)/.exec(rangeHeader); + pendingRequest.onDone({ + begin: parseInt(matches[1], 10), + chunk + }); + } else if (chunk) { + pendingRequest.onDone({ + begin: 0, + chunk + }); + } else { + (_c = pendingRequest.onError) == null ? void 0 : _c.call(pendingRequest, xhr.status); + } + } + getRequestXhr(xhrId) { + return this.pendingRequests[xhrId].xhr; + } + isPendingRequest(xhrId) { + return xhrId in this.pendingRequests; + } + abortRequest(xhrId) { + const xhr = this.pendingRequests[xhrId].xhr; + delete this.pendingRequests[xhrId]; + xhr.abort(); + } +}; +var PDFNetworkStream = class { + constructor(source) { + this._source = source; + this._manager = new NetworkManager(source.url, { + httpHeaders: source.httpHeaders, + withCredentials: source.withCredentials + }); + this._rangeChunkSize = source.rangeChunkSize; + this._fullRequestReader = null; + this._rangeRequestReaders = []; + } + _onRangeRequestReaderClosed(reader) { + const i = this._rangeRequestReaders.indexOf(reader); + if (i >= 0) { + this._rangeRequestReaders.splice(i, 1); + } + } + getFullReader() { + assert(!this._fullRequestReader, "PDFNetworkStream.getFullReader can only be called once."); + this._fullRequestReader = new PDFNetworkStreamFullRequestReader(this._manager, this._source); + return this._fullRequestReader; + } + getRangeReader(begin, end) { + const reader = new PDFNetworkStreamRangeRequestReader(this._manager, begin, end); + reader.onClosed = this._onRangeRequestReaderClosed.bind(this); + this._rangeRequestReaders.push(reader); + return reader; + } + cancelAllRequests(reason) { + var _a2; + (_a2 = this._fullRequestReader) == null ? void 0 : _a2.cancel(reason); + for (const reader of this._rangeRequestReaders.slice(0)) { + reader.cancel(reason); + } + } +}; +var PDFNetworkStreamFullRequestReader = class { + constructor(manager, source) { + this._manager = manager; + const args = { + onHeadersReceived: this._onHeadersReceived.bind(this), + onDone: this._onDone.bind(this), + onError: this._onError.bind(this), + onProgress: this._onProgress.bind(this) + }; + this._url = source.url; + this._fullRequestId = manager.requestFull(args); + this._headersReceivedCapability = Promise.withResolvers(); + this._disableRange = source.disableRange || false; + this._contentLength = source.length; + this._rangeChunkSize = source.rangeChunkSize; + if (!this._rangeChunkSize && !this._disableRange) { + this._disableRange = true; + } + this._isStreamingSupported = false; + this._isRangeSupported = false; + this._cachedChunks = []; + this._requests = []; + this._done = false; + this._storedError = void 0; + this._filename = null; + this.onProgress = null; + } + _onHeadersReceived() { + const fullRequestXhrId = this._fullRequestId; + const fullRequestXhr = this._manager.getRequestXhr(fullRequestXhrId); + const getResponseHeader = (name) => fullRequestXhr.getResponseHeader(name); + const { + allowRangeRequests, + suggestedLength + } = validateRangeRequestCapabilities({ + getResponseHeader, + isHttp: this._manager.isHttp, + rangeChunkSize: this._rangeChunkSize, + disableRange: this._disableRange + }); + if (allowRangeRequests) { + this._isRangeSupported = true; + } + this._contentLength = suggestedLength || this._contentLength; + this._filename = extractFilenameFromHeader(getResponseHeader); + if (this._isRangeSupported) { + this._manager.abortRequest(fullRequestXhrId); + } + this._headersReceivedCapability.resolve(); + } + _onDone(data) { + if (data) { + if (this._requests.length > 0) { + const requestCapability = this._requests.shift(); + requestCapability.resolve({ + value: data.chunk, + done: false + }); + } else { + this._cachedChunks.push(data.chunk); + } + } + this._done = true; + if (this._cachedChunks.length > 0) { + return; + } + for (const requestCapability of this._requests) { + requestCapability.resolve({ + value: void 0, + done: true + }); + } + this._requests.length = 0; + } + _onError(status) { + this._storedError = createResponseStatusError(status, this._url); + this._headersReceivedCapability.reject(this._storedError); + for (const requestCapability of this._requests) { + requestCapability.reject(this._storedError); + } + this._requests.length = 0; + this._cachedChunks.length = 0; + } + _onProgress(evt) { + var _a2; + (_a2 = this.onProgress) == null ? void 0 : _a2.call(this, { + loaded: evt.loaded, + total: evt.lengthComputable ? evt.total : this._contentLength + }); + } + get filename() { + return this._filename; + } + get isRangeSupported() { + return this._isRangeSupported; + } + get isStreamingSupported() { + return this._isStreamingSupported; + } + get contentLength() { + return this._contentLength; + } + get headersReady() { + return this._headersReceivedCapability.promise; + } + async read() { + if (this._storedError) { + throw this._storedError; + } + if (this._cachedChunks.length > 0) { + const chunk = this._cachedChunks.shift(); + return { + value: chunk, + done: false + }; + } + if (this._done) { + return { + value: void 0, + done: true + }; + } + const requestCapability = Promise.withResolvers(); + this._requests.push(requestCapability); + return requestCapability.promise; + } + cancel(reason) { + this._done = true; + this._headersReceivedCapability.reject(reason); + for (const requestCapability of this._requests) { + requestCapability.resolve({ + value: void 0, + done: true + }); + } + this._requests.length = 0; + if (this._manager.isPendingRequest(this._fullRequestId)) { + this._manager.abortRequest(this._fullRequestId); + } + this._fullRequestReader = null; + } +}; +var PDFNetworkStreamRangeRequestReader = class { + constructor(manager, begin, end) { + this._manager = manager; + const args = { + onDone: this._onDone.bind(this), + onError: this._onError.bind(this), + onProgress: this._onProgress.bind(this) + }; + this._url = manager.url; + this._requestId = manager.requestRange(begin, end, args); + this._requests = []; + this._queuedChunk = null; + this._done = false; + this._storedError = void 0; + this.onProgress = null; + this.onClosed = null; + } + _close() { + var _a2; + (_a2 = this.onClosed) == null ? void 0 : _a2.call(this, this); + } + _onDone(data) { + const chunk = data.chunk; + if (this._requests.length > 0) { + const requestCapability = this._requests.shift(); + requestCapability.resolve({ + value: chunk, + done: false + }); + } else { + this._queuedChunk = chunk; + } + this._done = true; + for (const requestCapability of this._requests) { + requestCapability.resolve({ + value: void 0, + done: true + }); + } + this._requests.length = 0; + this._close(); + } + _onError(status) { + this._storedError = createResponseStatusError(status, this._url); + for (const requestCapability of this._requests) { + requestCapability.reject(this._storedError); + } + this._requests.length = 0; + this._queuedChunk = null; + } + _onProgress(evt) { + var _a2; + if (!this.isStreamingSupported) { + (_a2 = this.onProgress) == null ? void 0 : _a2.call(this, { + loaded: evt.loaded + }); + } + } + get isStreamingSupported() { + return false; + } + async read() { + if (this._storedError) { + throw this._storedError; + } + if (this._queuedChunk !== null) { + const chunk = this._queuedChunk; + this._queuedChunk = null; + return { + value: chunk, + done: false + }; + } + if (this._done) { + return { + value: void 0, + done: true + }; + } + const requestCapability = Promise.withResolvers(); + this._requests.push(requestCapability); + return requestCapability.promise; + } + cancel(reason) { + this._done = true; + for (const requestCapability of this._requests) { + requestCapability.resolve({ + value: void 0, + done: true + }); + } + this._requests.length = 0; + if (this._manager.isPendingRequest(this._requestId)) { + this._manager.abortRequest(this._requestId); + } + this._close(); + } +}; +var urlRegex = /^[a-z][a-z0-9\-+.]+:/i; +function parseUrlOrPath(sourceUrl) { + if (urlRegex.test(sourceUrl)) { + return new URL(sourceUrl); + } + const url = NodePackages.get("url"); + return new URL(url.pathToFileURL(sourceUrl)); +} +function createRequest(url, headers, callback) { + if (url.protocol === "http:") { + const http = NodePackages.get("http"); + return http.request(url, { + headers + }, callback); + } + const https = NodePackages.get("https"); + return https.request(url, { + headers + }, callback); +} +var PDFNodeStream = class { + constructor(source) { + this.source = source; + this.url = parseUrlOrPath(source.url); + this.isHttp = this.url.protocol === "http:" || this.url.protocol === "https:"; + this.isFsUrl = this.url.protocol === "file:"; + this.httpHeaders = this.isHttp && source.httpHeaders || {}; + this._fullRequestReader = null; + this._rangeRequestReaders = []; + } + get _progressiveDataLength() { + var _a2, _b; + return (_b = (_a2 = this._fullRequestReader) == null ? void 0 : _a2._loaded) != null ? _b : 0; + } + getFullReader() { + assert(!this._fullRequestReader, "PDFNodeStream.getFullReader can only be called once."); + this._fullRequestReader = this.isFsUrl ? new PDFNodeStreamFsFullReader(this) : new PDFNodeStreamFullReader(this); + return this._fullRequestReader; + } + getRangeReader(start, end) { + if (end <= this._progressiveDataLength) { + return null; + } + const rangeReader = this.isFsUrl ? new PDFNodeStreamFsRangeReader(this, start, end) : new PDFNodeStreamRangeReader(this, start, end); + this._rangeRequestReaders.push(rangeReader); + return rangeReader; + } + cancelAllRequests(reason) { + var _a2; + (_a2 = this._fullRequestReader) == null ? void 0 : _a2.cancel(reason); + for (const reader of this._rangeRequestReaders.slice(0)) { + reader.cancel(reason); + } + } +}; +var BaseFullReader = class { + constructor(stream) { + this._url = stream.url; + this._done = false; + this._storedError = null; + this.onProgress = null; + const source = stream.source; + this._contentLength = source.length; + this._loaded = 0; + this._filename = null; + this._disableRange = source.disableRange || false; + this._rangeChunkSize = source.rangeChunkSize; + if (!this._rangeChunkSize && !this._disableRange) { + this._disableRange = true; + } + this._isStreamingSupported = !source.disableStream; + this._isRangeSupported = !source.disableRange; + this._readableStream = null; + this._readCapability = Promise.withResolvers(); + this._headersCapability = Promise.withResolvers(); + } + get headersReady() { + return this._headersCapability.promise; + } + get filename() { + return this._filename; + } + get contentLength() { + return this._contentLength; + } + get isRangeSupported() { + return this._isRangeSupported; + } + get isStreamingSupported() { + return this._isStreamingSupported; + } + async read() { + var _a2; + await this._readCapability.promise; + if (this._done) { + return { + value: void 0, + done: true + }; + } + if (this._storedError) { + throw this._storedError; + } + const chunk = this._readableStream.read(); + if (chunk === null) { + this._readCapability = Promise.withResolvers(); + return this.read(); + } + this._loaded += chunk.length; + (_a2 = this.onProgress) == null ? void 0 : _a2.call(this, { + loaded: this._loaded, + total: this._contentLength + }); + const buffer = new Uint8Array(chunk).buffer; + return { + value: buffer, + done: false + }; + } + cancel(reason) { + if (!this._readableStream) { + this._error(reason); + return; + } + this._readableStream.destroy(reason); + } + _error(reason) { + this._storedError = reason; + this._readCapability.resolve(); + } + _setReadableStream(readableStream) { + this._readableStream = readableStream; + readableStream.on("readable", () => { + this._readCapability.resolve(); + }); + readableStream.on("end", () => { + readableStream.destroy(); + this._done = true; + this._readCapability.resolve(); + }); + readableStream.on("error", (reason) => { + this._error(reason); + }); + if (!this._isStreamingSupported && this._isRangeSupported) { + this._error(new AbortException("streaming is disabled")); + } + if (this._storedError) { + this._readableStream.destroy(this._storedError); + } + } +}; +var BaseRangeReader = class { + constructor(stream) { + this._url = stream.url; + this._done = false; + this._storedError = null; + this.onProgress = null; + this._loaded = 0; + this._readableStream = null; + this._readCapability = Promise.withResolvers(); + const source = stream.source; + this._isStreamingSupported = !source.disableStream; + } + get isStreamingSupported() { + return this._isStreamingSupported; + } + async read() { + var _a2; + await this._readCapability.promise; + if (this._done) { + return { + value: void 0, + done: true + }; + } + if (this._storedError) { + throw this._storedError; + } + const chunk = this._readableStream.read(); + if (chunk === null) { + this._readCapability = Promise.withResolvers(); + return this.read(); + } + this._loaded += chunk.length; + (_a2 = this.onProgress) == null ? void 0 : _a2.call(this, { + loaded: this._loaded + }); + const buffer = new Uint8Array(chunk).buffer; + return { + value: buffer, + done: false + }; + } + cancel(reason) { + if (!this._readableStream) { + this._error(reason); + return; + } + this._readableStream.destroy(reason); + } + _error(reason) { + this._storedError = reason; + this._readCapability.resolve(); + } + _setReadableStream(readableStream) { + this._readableStream = readableStream; + readableStream.on("readable", () => { + this._readCapability.resolve(); + }); + readableStream.on("end", () => { + readableStream.destroy(); + this._done = true; + this._readCapability.resolve(); + }); + readableStream.on("error", (reason) => { + this._error(reason); + }); + if (this._storedError) { + this._readableStream.destroy(this._storedError); + } + } +}; +var PDFNodeStreamFullReader = class extends BaseFullReader { + constructor(stream) { + super(stream); + const handleResponse = (response) => { + if (response.statusCode === 404) { + const error = new MissingPDFException(`Missing PDF "${this._url}".`); + this._storedError = error; + this._headersCapability.reject(error); + return; + } + this._headersCapability.resolve(); + this._setReadableStream(response); + const getResponseHeader = (name) => this._readableStream.headers[name.toLowerCase()]; + const { + allowRangeRequests, + suggestedLength + } = validateRangeRequestCapabilities({ + getResponseHeader, + isHttp: stream.isHttp, + rangeChunkSize: this._rangeChunkSize, + disableRange: this._disableRange + }); + this._isRangeSupported = allowRangeRequests; + this._contentLength = suggestedLength || this._contentLength; + this._filename = extractFilenameFromHeader(getResponseHeader); + }; + this._request = createRequest(this._url, stream.httpHeaders, handleResponse); + this._request.on("error", (reason) => { + this._storedError = reason; + this._headersCapability.reject(reason); + }); + this._request.end(); + } +}; +var PDFNodeStreamRangeReader = class extends BaseRangeReader { + constructor(stream, start, end) { + super(stream); + this._httpHeaders = {}; + for (const property in stream.httpHeaders) { + const value = stream.httpHeaders[property]; + if (value === void 0) { + continue; + } + this._httpHeaders[property] = value; + } + this._httpHeaders.Range = `bytes=${start}-${end - 1}`; + const handleResponse = (response) => { + if (response.statusCode === 404) { + const error = new MissingPDFException(`Missing PDF "${this._url}".`); + this._storedError = error; + return; + } + this._setReadableStream(response); + }; + this._request = createRequest(this._url, this._httpHeaders, handleResponse); + this._request.on("error", (reason) => { + this._storedError = reason; + }); + this._request.end(); + } +}; +var PDFNodeStreamFsFullReader = class extends BaseFullReader { + constructor(stream) { + super(stream); + const fs = NodePackages.get("fs"); + fs.promises.lstat(this._url).then((stat) => { + this._contentLength = stat.size; + this._setReadableStream(fs.createReadStream(this._url)); + this._headersCapability.resolve(); + }, (error) => { + if (error.code === "ENOENT") { + error = new MissingPDFException(`Missing PDF "${this._url}".`); + } + this._storedError = error; + this._headersCapability.reject(error); + }); + } +}; +var PDFNodeStreamFsRangeReader = class extends BaseRangeReader { + constructor(stream, start, end) { + super(stream); + const fs = NodePackages.get("fs"); + this._setReadableStream(fs.createReadStream(this._url, { + start, + end: end - 1 + })); + } +}; +var MAX_TEXT_DIVS_TO_RENDER = 1e5; +var DEFAULT_FONT_SIZE = 30; +var DEFAULT_FONT_ASCENT = 0.8; +var _a, _capability, _container2, _disableProcessItems, _fontInspectorEnabled, _lang, _layoutTextParams, _pageHeight, _pageWidth, _reader, _rootContainer, _rotation, _scale, _styleCache, _textContentItemsStr, _textContentSource, _textDivs, _textDivProperties, _transform, _ascentCache, _canvasContexts, _minFontSize, _pendingTextLayers, _processItems, processItems_fn, _appendText, appendText_fn, _layout, layout_fn, _getCtx, getCtx_fn, _ensureMinFontSizeComputed, ensureMinFontSizeComputed_fn, _getAscent, getAscent_fn; +var _TextLayer = class { + constructor({ + textContentSource, + container, + viewport + }) { + __privateAdd(this, _processItems); + __privateAdd(this, _appendText); + __privateAdd(this, _layout); + __privateAdd(this, _capability, Promise.withResolvers()); + __privateAdd(this, _container2, null); + __privateAdd(this, _disableProcessItems, false); + __privateAdd(this, _fontInspectorEnabled, !!((_a = globalThis.FontInspector) == null ? void 0 : _a.enabled)); + __privateAdd(this, _lang, null); + __privateAdd(this, _layoutTextParams, null); + __privateAdd(this, _pageHeight, 0); + __privateAdd(this, _pageWidth, 0); + __privateAdd(this, _reader, null); + __privateAdd(this, _rootContainer, null); + __privateAdd(this, _rotation, 0); + __privateAdd(this, _scale, 0); + __privateAdd(this, _styleCache, /* @__PURE__ */ Object.create(null)); + __privateAdd(this, _textContentItemsStr, []); + __privateAdd(this, _textContentSource, null); + __privateAdd(this, _textDivs, []); + __privateAdd(this, _textDivProperties, /* @__PURE__ */ new WeakMap()); + __privateAdd(this, _transform, null); + var _a2; + if (textContentSource instanceof ReadableStream) { + __privateSet(this, _textContentSource, textContentSource); + } else if (typeof textContentSource === "object") { + __privateSet(this, _textContentSource, new ReadableStream({ + start(controller) { + controller.enqueue(textContentSource); + controller.close(); + } + })); + } else { + throw new Error('No "textContentSource" parameter specified.'); + } + __privateSet(this, _container2, __privateSet(this, _rootContainer, container)); + __privateSet(this, _scale, viewport.scale * (globalThis.devicePixelRatio || 1)); + __privateSet(this, _rotation, viewport.rotation); + __privateSet(this, _layoutTextParams, { + prevFontSize: null, + prevFontFamily: null, + div: null, + properties: null, + ctx: null + }); + const { + pageWidth, + pageHeight, + pageX, + pageY + } = viewport.rawDims; + __privateSet(this, _transform, [1, 0, 0, -1, -pageX, pageY + pageHeight]); + __privateSet(this, _pageWidth, pageWidth); + __privateSet(this, _pageHeight, pageHeight); + __privateMethod(_a2 = _TextLayer, _ensureMinFontSizeComputed, ensureMinFontSizeComputed_fn).call(_a2); + setLayerDimensions(container, viewport); + __privateGet(this, _capability).promise.catch(() => { + }).then(() => { + __privateGet(_TextLayer, _pendingTextLayers).delete(this); + __privateSet(this, _layoutTextParams, null); + __privateSet(this, _styleCache, null); + }); + } + render() { + const pump = () => { + __privateGet(this, _reader).read().then(({ + value, + done + }) => { + var _a2; + if (done) { + __privateGet(this, _capability).resolve(); + return; + } + (_a2 = __privateGet(this, _lang)) != null ? _a2 : __privateSet(this, _lang, value.lang); + Object.assign(__privateGet(this, _styleCache), value.styles); + __privateMethod(this, _processItems, processItems_fn).call(this, value.items); + pump(); + }, __privateGet(this, _capability).reject); + }; + __privateSet(this, _reader, __privateGet(this, _textContentSource).getReader()); + __privateGet(_TextLayer, _pendingTextLayers).add(this); + pump(); + return __privateGet(this, _capability).promise; + } + update({ + viewport, + onBefore = null + }) { + var _a2; + const scale = viewport.scale * (globalThis.devicePixelRatio || 1); + const rotation = viewport.rotation; + if (rotation !== __privateGet(this, _rotation)) { + onBefore == null ? void 0 : onBefore(); + __privateSet(this, _rotation, rotation); + setLayerDimensions(__privateGet(this, _rootContainer), { + rotation + }); + } + if (scale !== __privateGet(this, _scale)) { + onBefore == null ? void 0 : onBefore(); + __privateSet(this, _scale, scale); + const params = { + prevFontSize: null, + prevFontFamily: null, + div: null, + properties: null, + ctx: __privateMethod(_a2 = _TextLayer, _getCtx, getCtx_fn).call(_a2, __privateGet(this, _lang)) + }; + for (const div of __privateGet(this, _textDivs)) { + params.properties = __privateGet(this, _textDivProperties).get(div); + params.div = div; + __privateMethod(this, _layout, layout_fn).call(this, params); + } + } + } + cancel() { + var _a2; + const abortEx = new AbortException("TextLayer task cancelled."); + (_a2 = __privateGet(this, _reader)) == null ? void 0 : _a2.cancel(abortEx).catch(() => { + }); + __privateSet(this, _reader, null); + __privateGet(this, _capability).reject(abortEx); + } + get textDivs() { + return __privateGet(this, _textDivs); + } + get textContentItemsStr() { + return __privateGet(this, _textContentItemsStr); + } + static cleanup() { + if (__privateGet(this, _pendingTextLayers).size > 0) { + return; + } + __privateGet(this, _ascentCache).clear(); + for (const { + canvas + } of __privateGet(this, _canvasContexts).values()) { + canvas.remove(); + } + __privateGet(this, _canvasContexts).clear(); + } +}; +var TextLayer = _TextLayer; +_capability = new WeakMap(); +_container2 = new WeakMap(); +_disableProcessItems = new WeakMap(); +_fontInspectorEnabled = new WeakMap(); +_lang = new WeakMap(); +_layoutTextParams = new WeakMap(); +_pageHeight = new WeakMap(); +_pageWidth = new WeakMap(); +_reader = new WeakMap(); +_rootContainer = new WeakMap(); +_rotation = new WeakMap(); +_scale = new WeakMap(); +_styleCache = new WeakMap(); +_textContentItemsStr = new WeakMap(); +_textContentSource = new WeakMap(); +_textDivs = new WeakMap(); +_textDivProperties = new WeakMap(); +_transform = new WeakMap(); +_ascentCache = new WeakMap(); +_canvasContexts = new WeakMap(); +_minFontSize = new WeakMap(); +_pendingTextLayers = new WeakMap(); +_processItems = new WeakSet(); +processItems_fn = function(items) { + var _a2, _b, _c; + if (__privateGet(this, _disableProcessItems)) { + return; + } + (_c = (_b = __privateGet(this, _layoutTextParams)).ctx) != null ? _c : _b.ctx = __privateMethod(_a2 = _TextLayer, _getCtx, getCtx_fn).call(_a2, __privateGet(this, _lang)); + const textDivs = __privateGet(this, _textDivs), textContentItemsStr = __privateGet(this, _textContentItemsStr); + for (const item of items) { + if (textDivs.length > MAX_TEXT_DIVS_TO_RENDER) { + warn("Ignoring additional textDivs for performance reasons."); + __privateSet(this, _disableProcessItems, true); + return; + } + if (item.str === void 0) { + if (item.type === "beginMarkedContentProps" || item.type === "beginMarkedContent") { + const parent = __privateGet(this, _container2); + __privateSet(this, _container2, document.createElement("span")); + __privateGet(this, _container2).classList.add("markedContent"); + if (item.id !== null) { + __privateGet(this, _container2).setAttribute("id", `${item.id}`); + } + parent.append(__privateGet(this, _container2)); + } else if (item.type === "endMarkedContent") { + __privateSet(this, _container2, __privateGet(this, _container2).parentNode); + } + continue; + } + textContentItemsStr.push(item.str); + __privateMethod(this, _appendText, appendText_fn).call(this, item); + } +}; +_appendText = new WeakSet(); +appendText_fn = function(geom) { + var _a2; + const textDiv = document.createElement("span"); + const textDivProperties = { + angle: 0, + canvasWidth: 0, + hasText: geom.str !== "", + hasEOL: geom.hasEOL, + fontSize: 0 + }; + __privateGet(this, _textDivs).push(textDiv); + const tx = Util.transform(__privateGet(this, _transform), geom.transform); + let angle = Math.atan2(tx[1], tx[0]); + const style = __privateGet(this, _styleCache)[geom.fontName]; + if (style.vertical) { + angle += Math.PI / 2; + } + const fontFamily = __privateGet(this, _fontInspectorEnabled) && style.fontSubstitution || style.fontFamily; + const fontHeight = Math.hypot(tx[2], tx[3]); + const fontAscent = fontHeight * __privateMethod(_a2 = _TextLayer, _getAscent, getAscent_fn).call(_a2, fontFamily, __privateGet(this, _lang)); + let left, top; + if (angle === 0) { + left = tx[4]; + top = tx[5] - fontAscent; + } else { + left = tx[4] + fontAscent * Math.sin(angle); + top = tx[5] - fontAscent * Math.cos(angle); + } + const scaleFactorStr = "calc(var(--scale-factor)*"; + const divStyle = textDiv.style; + if (__privateGet(this, _container2) === __privateGet(this, _rootContainer)) { + divStyle.left = `${(100 * left / __privateGet(this, _pageWidth)).toFixed(2)}%`; + divStyle.top = `${(100 * top / __privateGet(this, _pageHeight)).toFixed(2)}%`; + } else { + divStyle.left = `${scaleFactorStr}${left.toFixed(2)}px)`; + divStyle.top = `${scaleFactorStr}${top.toFixed(2)}px)`; + } + divStyle.fontSize = `${scaleFactorStr}${(__privateGet(_TextLayer, _minFontSize) * fontHeight).toFixed(2)}px)`; + divStyle.fontFamily = fontFamily; + textDivProperties.fontSize = fontHeight; + textDiv.setAttribute("role", "presentation"); + textDiv.textContent = geom.str; + textDiv.dir = geom.dir; + if (__privateGet(this, _fontInspectorEnabled)) { + textDiv.dataset.fontName = style.fontSubstitutionLoadedName || geom.fontName; + } + if (angle !== 0) { + textDivProperties.angle = angle * (180 / Math.PI); + } + let shouldScaleText = false; + if (geom.str.length > 1) { + shouldScaleText = true; + } else if (geom.str !== " " && geom.transform[0] !== geom.transform[3]) { + const absScaleX = Math.abs(geom.transform[0]), absScaleY = Math.abs(geom.transform[3]); + if (absScaleX !== absScaleY && Math.max(absScaleX, absScaleY) / Math.min(absScaleX, absScaleY) > 1.5) { + shouldScaleText = true; + } + } + if (shouldScaleText) { + textDivProperties.canvasWidth = style.vertical ? geom.height : geom.width; + } + __privateGet(this, _textDivProperties).set(textDiv, textDivProperties); + __privateGet(this, _layoutTextParams).div = textDiv; + __privateGet(this, _layoutTextParams).properties = textDivProperties; + __privateMethod(this, _layout, layout_fn).call(this, __privateGet(this, _layoutTextParams)); + if (textDivProperties.hasText) { + __privateGet(this, _container2).append(textDiv); + } + if (textDivProperties.hasEOL) { + const br = document.createElement("br"); + br.setAttribute("role", "presentation"); + __privateGet(this, _container2).append(br); + } +}; +_layout = new WeakSet(); +layout_fn = function(params) { + const { + div, + properties, + ctx, + prevFontSize, + prevFontFamily + } = params; + const { + style + } = div; + let transform = ""; + if (__privateGet(_TextLayer, _minFontSize) > 1) { + transform = `scale(${1 / __privateGet(_TextLayer, _minFontSize)})`; + } + if (properties.canvasWidth !== 0 && properties.hasText) { + const { + fontFamily + } = style; + const { + canvasWidth, + fontSize + } = properties; + if (prevFontSize !== fontSize || prevFontFamily !== fontFamily) { + ctx.font = `${fontSize * __privateGet(this, _scale)}px ${fontFamily}`; + params.prevFontSize = fontSize; + params.prevFontFamily = fontFamily; + } + const { + width + } = ctx.measureText(div.textContent); + if (width > 0) { + transform = `scaleX(${canvasWidth * __privateGet(this, _scale) / width}) ${transform}`; + } + } + if (properties.angle !== 0) { + transform = `rotate(${properties.angle}deg) ${transform}`; + } + if (transform.length > 0) { + style.transform = transform; + } +}; +_getCtx = new WeakSet(); +getCtx_fn = function(lang = null) { + let canvasContext = __privateGet(this, _canvasContexts).get(lang || (lang = "")); + if (!canvasContext) { + const canvas = document.createElement("canvas"); + canvas.className = "hiddenCanvasElement"; + canvas.lang = lang; + document.body.append(canvas); + canvasContext = canvas.getContext("2d", { + alpha: false, + willReadFrequently: true + }); + __privateGet(this, _canvasContexts).set(lang, canvasContext); + } + return canvasContext; +}; +_ensureMinFontSizeComputed = new WeakSet(); +ensureMinFontSizeComputed_fn = function() { + if (__privateGet(this, _minFontSize) !== null) { + return; + } + const div = document.createElement("div"); + div.style.opacity = 0; + div.style.lineHeight = 1; + div.style.fontSize = "1px"; + div.style.position = "absolute"; + div.textContent = "X"; + document.body.append(div); + __privateSet(this, _minFontSize, div.getBoundingClientRect().height); + div.remove(); +}; +_getAscent = new WeakSet(); +getAscent_fn = function(fontFamily, lang) { + const cachedAscent = __privateGet(this, _ascentCache).get(fontFamily); + if (cachedAscent) { + return cachedAscent; + } + const ctx = __privateMethod(this, _getCtx, getCtx_fn).call(this, lang); + const savedFont = ctx.font; + ctx.canvas.width = ctx.canvas.height = DEFAULT_FONT_SIZE; + ctx.font = `${DEFAULT_FONT_SIZE}px ${fontFamily}`; + const metrics = ctx.measureText(""); + let ascent = metrics.fontBoundingBoxAscent; + let descent = Math.abs(metrics.fontBoundingBoxDescent); + if (ascent) { + const ratio2 = ascent / (ascent + descent); + __privateGet(this, _ascentCache).set(fontFamily, ratio2); + ctx.canvas.width = ctx.canvas.height = 0; + ctx.font = savedFont; + return ratio2; + } + ctx.strokeStyle = "red"; + ctx.clearRect(0, 0, DEFAULT_FONT_SIZE, DEFAULT_FONT_SIZE); + ctx.strokeText("g", 0, 0); + let pixels = ctx.getImageData(0, 0, DEFAULT_FONT_SIZE, DEFAULT_FONT_SIZE).data; + descent = 0; + for (let i = pixels.length - 1 - 3; i >= 0; i -= 4) { + if (pixels[i] > 0) { + descent = Math.ceil(i / 4 / DEFAULT_FONT_SIZE); + break; + } + } + ctx.clearRect(0, 0, DEFAULT_FONT_SIZE, DEFAULT_FONT_SIZE); + ctx.strokeText("A", 0, DEFAULT_FONT_SIZE); + pixels = ctx.getImageData(0, 0, DEFAULT_FONT_SIZE, DEFAULT_FONT_SIZE).data; + ascent = 0; + for (let i = 0, ii = pixels.length; i < ii; i += 4) { + if (pixels[i] > 0) { + ascent = DEFAULT_FONT_SIZE - Math.floor(i / 4 / DEFAULT_FONT_SIZE); + break; + } + } + ctx.canvas.width = ctx.canvas.height = 0; + ctx.font = savedFont; + const ratio = ascent ? ascent / (ascent + descent) : DEFAULT_FONT_ASCENT; + __privateGet(this, _ascentCache).set(fontFamily, ratio); + return ratio; +}; +__privateAdd(TextLayer, _getCtx); +__privateAdd(TextLayer, _ensureMinFontSizeComputed); +__privateAdd(TextLayer, _getAscent); +__privateAdd(TextLayer, _ascentCache, /* @__PURE__ */ new Map()); +__privateAdd(TextLayer, _canvasContexts, /* @__PURE__ */ new Map()); +__privateAdd(TextLayer, _minFontSize, null); +__privateAdd(TextLayer, _pendingTextLayers, /* @__PURE__ */ new Set()); +var XfaText = class { + static textContent(xfa) { + const items = []; + const output = { + items, + styles: /* @__PURE__ */ Object.create(null) + }; + function walk(node) { + var _a2; + if (!node) { + return; + } + let str = null; + const name = node.name; + if (name === "#text") { + str = node.value; + } else if (!XfaText.shouldBuildText(name)) { + return; + } else if ((_a2 = node == null ? void 0 : node.attributes) == null ? void 0 : _a2.textContent) { + str = node.attributes.textContent; + } else if (node.value) { + str = node.value; + } + if (str !== null) { + items.push({ + str + }); + } + if (!node.children) { + return; + } + for (const child of node.children) { + walk(child); + } + } + walk(xfa); + return output; + } + static shouldBuildText(name) { + return !(name === "textarea" || name === "input" || name === "option" || name === "select"); + } +}; +var DEFAULT_RANGE_CHUNK_SIZE = 65536; +var RENDERING_CANCELLED_TIMEOUT = 100; +var DELAYED_CLEANUP_TIMEOUT = 5e3; +var DefaultCanvasFactory = isNodeJS ? NodeCanvasFactory : DOMCanvasFactory; +var DefaultCMapReaderFactory = isNodeJS ? NodeCMapReaderFactory : DOMCMapReaderFactory; +var DefaultFilterFactory = isNodeJS ? NodeFilterFactory : DOMFilterFactory; +var DefaultStandardFontDataFactory = isNodeJS ? NodeStandardFontDataFactory : DOMStandardFontDataFactory; +function getDocument(src = {}) { + var _a2, _b; + if (typeof src === "string" || src instanceof URL) { + src = { + url: src + }; + } else if (src instanceof ArrayBuffer || ArrayBuffer.isView(src)) { + src = { + data: src + }; + } + const task = new PDFDocumentLoadingTask(); + const { + docId + } = task; + const url = src.url ? getUrlProp(src.url) : null; + const data = src.data ? getDataProp(src.data) : null; + const httpHeaders = src.httpHeaders || null; + const withCredentials = src.withCredentials === true; + const password = (_a2 = src.password) != null ? _a2 : null; + const rangeTransport = src.range instanceof PDFDataRangeTransport ? src.range : null; + const rangeChunkSize = Number.isInteger(src.rangeChunkSize) && src.rangeChunkSize > 0 ? src.rangeChunkSize : DEFAULT_RANGE_CHUNK_SIZE; + let worker = src.worker instanceof PDFWorker ? src.worker : null; + const verbosity2 = src.verbosity; + const docBaseUrl = typeof src.docBaseUrl === "string" && !isDataScheme(src.docBaseUrl) ? src.docBaseUrl : null; + const cMapUrl = typeof src.cMapUrl === "string" ? src.cMapUrl : null; + const cMapPacked = src.cMapPacked !== false; + const CMapReaderFactory = src.CMapReaderFactory || DefaultCMapReaderFactory; + const standardFontDataUrl = typeof src.standardFontDataUrl === "string" ? src.standardFontDataUrl : null; + const StandardFontDataFactory = src.StandardFontDataFactory || DefaultStandardFontDataFactory; + const ignoreErrors = src.stopAtErrors !== true; + const maxImageSize = Number.isInteger(src.maxImageSize) && src.maxImageSize > -1 ? src.maxImageSize : -1; + const isEvalSupported2 = src.isEvalSupported !== false; + const isOffscreenCanvasSupported = typeof src.isOffscreenCanvasSupported === "boolean" ? src.isOffscreenCanvasSupported : !isNodeJS; + const canvasMaxAreaInBytes = Number.isInteger(src.canvasMaxAreaInBytes) ? src.canvasMaxAreaInBytes : -1; + const disableFontFace = typeof src.disableFontFace === "boolean" ? src.disableFontFace : isNodeJS; + const fontExtraProperties = src.fontExtraProperties === true; + const enableXfa = src.enableXfa === true; + const ownerDocument = src.ownerDocument || globalThis.document; + const disableRange = src.disableRange === true; + const disableStream = src.disableStream === true; + const disableAutoFetch = src.disableAutoFetch === true; + const pdfBug = src.pdfBug === true; + const enableHWA = src.enableHWA === true; + const length = rangeTransport ? rangeTransport.length : (_b = src.length) != null ? _b : NaN; + const useSystemFonts = typeof src.useSystemFonts === "boolean" ? src.useSystemFonts : !isNodeJS && !disableFontFace; + const useWorkerFetch = typeof src.useWorkerFetch === "boolean" ? src.useWorkerFetch : CMapReaderFactory === DOMCMapReaderFactory && StandardFontDataFactory === DOMStandardFontDataFactory && cMapUrl && standardFontDataUrl && isValidFetchUrl(cMapUrl, document.baseURI) && isValidFetchUrl(standardFontDataUrl, document.baseURI); + const canvasFactory = src.canvasFactory || new DefaultCanvasFactory({ + ownerDocument, + enableHWA + }); + const filterFactory = src.filterFactory || new DefaultFilterFactory({ + docId, + ownerDocument + }); + const styleElement = null; + setVerbosityLevel(verbosity2); + const transportFactory = { + canvasFactory, + filterFactory + }; + if (!useWorkerFetch) { + transportFactory.cMapReaderFactory = new CMapReaderFactory({ + baseUrl: cMapUrl, + isCompressed: cMapPacked + }); + transportFactory.standardFontDataFactory = new StandardFontDataFactory({ + baseUrl: standardFontDataUrl + }); + } + if (!worker) { + const workerParams = { + verbosity: verbosity2, + port: GlobalWorkerOptions.workerPort + }; + worker = workerParams.port ? PDFWorker.fromPort(workerParams) : new PDFWorker(workerParams); + task._worker = worker; + } + const docParams = { + docId, + apiVersion: "4.6.82", + data, + password, + disableAutoFetch, + rangeChunkSize, + length, + docBaseUrl, + enableXfa, + evaluatorOptions: { + maxImageSize, + disableFontFace, + ignoreErrors, + isEvalSupported: isEvalSupported2, + isOffscreenCanvasSupported, + canvasMaxAreaInBytes, + fontExtraProperties, + useSystemFonts, + cMapUrl: useWorkerFetch ? cMapUrl : null, + standardFontDataUrl: useWorkerFetch ? standardFontDataUrl : null + } + }; + const transportParams = { + disableFontFace, + fontExtraProperties, + ownerDocument, + pdfBug, + styleElement, + loadingParams: { + disableAutoFetch, + enableXfa + } + }; + worker.promise.then(function() { + if (task.destroyed) { + throw new Error("Loading aborted"); + } + if (worker.destroyed) { + throw new Error("Worker was destroyed"); + } + const workerIdPromise = worker.messageHandler.sendWithPromise("GetDocRequest", docParams, data ? [data.buffer] : null); + let networkStream; + if (rangeTransport) { + networkStream = new PDFDataTransportStream(rangeTransport, { + disableRange, + disableStream + }); + } else if (!data) { + if (!url) { + throw new Error("getDocument - no `url` parameter provided."); + } + const createPDFNetworkStream = (params) => { + if (isNodeJS) { + const isFetchSupported = function() { + return typeof fetch !== "undefined" && typeof Response !== "undefined" && "body" in Response.prototype; + }; + return isFetchSupported() && isValidFetchUrl(params.url) ? new PDFFetchStream(params) : new PDFNodeStream(params); + } + return isValidFetchUrl(params.url) ? new PDFFetchStream(params) : new PDFNetworkStream(params); + }; + networkStream = createPDFNetworkStream({ + url, + length, + httpHeaders, + withCredentials, + rangeChunkSize, + disableRange, + disableStream + }); + } + return workerIdPromise.then((workerId) => { + if (task.destroyed) { + throw new Error("Loading aborted"); + } + if (worker.destroyed) { + throw new Error("Worker was destroyed"); + } + const messageHandler = new MessageHandler(docId, workerId, worker.port); + const transport = new WorkerTransport(messageHandler, task, networkStream, transportParams, transportFactory); + task._transport = transport; + messageHandler.send("Ready", null); + }); + }).catch(task._capability.reject); + return task; +} +function getUrlProp(val) { + if (val instanceof URL) { + return val.href; + } + try { + return new URL(val, window.location).href; + } catch (e) { + if (isNodeJS && typeof val === "string") { + return val; + } + } + throw new Error("Invalid PDF url data: either string or URL-object is expected in the url property."); +} +function getDataProp(val) { + if (isNodeJS && typeof Buffer !== "undefined" && val instanceof Buffer) { + throw new Error("Please provide binary data as `Uint8Array`, rather than `Buffer`."); + } + if (val instanceof Uint8Array && val.byteLength === val.buffer.byteLength) { + return val; + } + if (typeof val === "string") { + return stringToBytes(val); + } + if (val instanceof ArrayBuffer || ArrayBuffer.isView(val) || typeof val === "object" && !isNaN(val == null ? void 0 : val.length)) { + return new Uint8Array(val); + } + throw new Error("Invalid PDF binary data: either TypedArray, string, or array-like object is expected in the data property."); +} +function isRefProxy(ref) { + return typeof ref === "object" && Number.isInteger(ref == null ? void 0 : ref.num) && ref.num >= 0 && Number.isInteger(ref == null ? void 0 : ref.gen) && ref.gen >= 0; +} +var _docId2; +var _PDFDocumentLoadingTask = class { + constructor() { + this._capability = Promise.withResolvers(); + this._transport = null; + this._worker = null; + this.docId = `d${__privateWrapper(_PDFDocumentLoadingTask, _docId2)._++}`; + this.destroyed = false; + this.onPassword = null; + this.onProgress = null; + } + get promise() { + return this._capability.promise; + } + async destroy() { + var _a2, _b, _c; + this.destroyed = true; + try { + if ((_a2 = this._worker) == null ? void 0 : _a2.port) { + this._worker._pendingDestroy = true; + } + await ((_b = this._transport) == null ? void 0 : _b.destroy()); + } catch (ex) { + if ((_c = this._worker) == null ? void 0 : _c.port) { + delete this._worker._pendingDestroy; + } + throw ex; + } + this._transport = null; + if (this._worker) { + this._worker.destroy(); + this._worker = null; + } + } +}; +var PDFDocumentLoadingTask = _PDFDocumentLoadingTask; +_docId2 = new WeakMap(); +__privateAdd(PDFDocumentLoadingTask, _docId2, 0); +var PDFDataRangeTransport = class { + constructor(length, initialData, progressiveDone = false, contentDispositionFilename = null) { + this.length = length; + this.initialData = initialData; + this.progressiveDone = progressiveDone; + this.contentDispositionFilename = contentDispositionFilename; + this._rangeListeners = []; + this._progressListeners = []; + this._progressiveReadListeners = []; + this._progressiveDoneListeners = []; + this._readyCapability = Promise.withResolvers(); + } + addRangeListener(listener) { + this._rangeListeners.push(listener); + } + addProgressListener(listener) { + this._progressListeners.push(listener); + } + addProgressiveReadListener(listener) { + this._progressiveReadListeners.push(listener); + } + addProgressiveDoneListener(listener) { + this._progressiveDoneListeners.push(listener); + } + onDataRange(begin, chunk) { + for (const listener of this._rangeListeners) { + listener(begin, chunk); + } + } + onDataProgress(loaded, total) { + this._readyCapability.promise.then(() => { + for (const listener of this._progressListeners) { + listener(loaded, total); + } + }); + } + onDataProgressiveRead(chunk) { + this._readyCapability.promise.then(() => { + for (const listener of this._progressiveReadListeners) { + listener(chunk); + } + }); + } + onDataProgressiveDone() { + this._readyCapability.promise.then(() => { + for (const listener of this._progressiveDoneListeners) { + listener(); + } + }); + } + transportReady() { + this._readyCapability.resolve(); + } + requestDataRange(begin, end) { + unreachable("Abstract method PDFDataRangeTransport.requestDataRange"); + } + abort() { + } +}; +var PDFDocumentProxy = class { + constructor(pdfInfo, transport) { + this._pdfInfo = pdfInfo; + this._transport = transport; + } + get annotationStorage() { + return this._transport.annotationStorage; + } + get filterFactory() { + return this._transport.filterFactory; + } + get numPages() { + return this._pdfInfo.numPages; + } + get fingerprints() { + return this._pdfInfo.fingerprints; + } + get isPureXfa() { + return shadow(this, "isPureXfa", !!this._transport._htmlForXfa); + } + get allXfaHtml() { + return this._transport._htmlForXfa; + } + getPage(pageNumber) { + return this._transport.getPage(pageNumber); + } + getPageIndex(ref) { + return this._transport.getPageIndex(ref); + } + getDestinations() { + return this._transport.getDestinations(); + } + getDestination(id) { + return this._transport.getDestination(id); + } + getPageLabels() { + return this._transport.getPageLabels(); + } + getPageLayout() { + return this._transport.getPageLayout(); + } + getPageMode() { + return this._transport.getPageMode(); + } + getViewerPreferences() { + return this._transport.getViewerPreferences(); + } + getOpenAction() { + return this._transport.getOpenAction(); + } + getAttachments() { + return this._transport.getAttachments(); + } + getJSActions() { + return this._transport.getDocJSActions(); + } + getOutline() { + return this._transport.getOutline(); + } + getOptionalContentConfig({ + intent = "display" + } = {}) { + const { + renderingIntent + } = this._transport.getRenderingIntent(intent); + return this._transport.getOptionalContentConfig(renderingIntent); + } + getPermissions() { + return this._transport.getPermissions(); + } + getMetadata() { + return this._transport.getMetadata(); + } + getMarkInfo() { + return this._transport.getMarkInfo(); + } + getData() { + return this._transport.getData(); + } + saveDocument() { + return this._transport.saveDocument(); + } + getDownloadInfo() { + return this._transport.downloadInfoCapability.promise; + } + cleanup(keepLoadedFonts = false) { + return this._transport.startCleanup(keepLoadedFonts || this.isPureXfa); + } + destroy() { + return this.loadingTask.destroy(); + } + cachedPageNumber(ref) { + return this._transport.cachedPageNumber(ref); + } + get loadingParams() { + return this._transport.loadingParams; + } + get loadingTask() { + return this._transport.loadingTask; + } + getFieldObjects() { + return this._transport.getFieldObjects(); + } + hasJSActions() { + return this._transport.hasJSActions(); + } + getCalculationOrderIds() { + return this._transport.getCalculationOrderIds(); + } +}; +var _delayedCleanupTimeout, _pendingCleanup, _tryCleanup, tryCleanup_fn, _abortDelayedCleanup, abortDelayedCleanup_fn; +var PDFPageProxy = class { + constructor(pageIndex, pageInfo, transport, pdfBug = false) { + __privateAdd(this, _tryCleanup); + __privateAdd(this, _abortDelayedCleanup); + __privateAdd(this, _delayedCleanupTimeout, null); + __privateAdd(this, _pendingCleanup, false); + this._pageIndex = pageIndex; + this._pageInfo = pageInfo; + this._transport = transport; + this._stats = pdfBug ? new StatTimer() : null; + this._pdfBug = pdfBug; + this.commonObjs = transport.commonObjs; + this.objs = new PDFObjects(); + this._maybeCleanupAfterRender = false; + this._intentStates = /* @__PURE__ */ new Map(); + this.destroyed = false; + } + get pageNumber() { + return this._pageIndex + 1; + } + get rotate() { + return this._pageInfo.rotate; + } + get ref() { + return this._pageInfo.ref; + } + get userUnit() { + return this._pageInfo.userUnit; + } + get view() { + return this._pageInfo.view; + } + getViewport({ + scale, + rotation = this.rotate, + offsetX = 0, + offsetY = 0, + dontFlip = false + } = {}) { + return new PageViewport({ + viewBox: this.view, + scale, + rotation, + offsetX, + offsetY, + dontFlip + }); + } + getAnnotations({ + intent = "display" + } = {}) { + const { + renderingIntent + } = this._transport.getRenderingIntent(intent); + return this._transport.getAnnotations(this._pageIndex, renderingIntent); + } + getJSActions() { + return this._transport.getPageJSActions(this._pageIndex); + } + get filterFactory() { + return this._transport.filterFactory; + } + get isPureXfa() { + return shadow(this, "isPureXfa", !!this._transport._htmlForXfa); + } + async getXfa() { + var _a2; + return ((_a2 = this._transport._htmlForXfa) == null ? void 0 : _a2.children[this._pageIndex]) || null; + } + render({ + canvasContext, + viewport, + intent = "display", + annotationMode = AnnotationMode.ENABLE, + transform = null, + background = null, + optionalContentConfigPromise = null, + annotationCanvasMap = null, + pageColors = null, + printAnnotationStorage = null, + isEditing = false + }) { + var _a2, _b; + (_a2 = this._stats) == null ? void 0 : _a2.time("Overall"); + const intentArgs = this._transport.getRenderingIntent(intent, annotationMode, printAnnotationStorage, isEditing); + const { + renderingIntent, + cacheKey + } = intentArgs; + __privateSet(this, _pendingCleanup, false); + __privateMethod(this, _abortDelayedCleanup, abortDelayedCleanup_fn).call(this); + optionalContentConfigPromise || (optionalContentConfigPromise = this._transport.getOptionalContentConfig(renderingIntent)); + let intentState = this._intentStates.get(cacheKey); + if (!intentState) { + intentState = /* @__PURE__ */ Object.create(null); + this._intentStates.set(cacheKey, intentState); + } + if (intentState.streamReaderCancelTimeout) { + clearTimeout(intentState.streamReaderCancelTimeout); + intentState.streamReaderCancelTimeout = null; + } + const intentPrint = !!(renderingIntent & RenderingIntentFlag.PRINT); + if (!intentState.displayReadyCapability) { + intentState.displayReadyCapability = Promise.withResolvers(); + intentState.operatorList = { + fnArray: [], + argsArray: [], + lastChunk: false, + separateAnnots: null + }; + (_b = this._stats) == null ? void 0 : _b.time("Page Request"); + this._pumpOperatorList(intentArgs); + } + const complete = (error) => { + var _a3; + intentState.renderTasks.delete(internalRenderTask); + if (this._maybeCleanupAfterRender || intentPrint) { + __privateSet(this, _pendingCleanup, true); + } + __privateMethod(this, _tryCleanup, tryCleanup_fn).call(this, !intentPrint); + if (error) { + internalRenderTask.capability.reject(error); + this._abortOperatorList({ + intentState, + reason: error instanceof Error ? error : new Error(error) + }); + } else { + internalRenderTask.capability.resolve(); + } + if (this._stats) { + this._stats.timeEnd("Rendering"); + this._stats.timeEnd("Overall"); + if ((_a3 = globalThis.Stats) == null ? void 0 : _a3.enabled) { + globalThis.Stats.add(this.pageNumber, this._stats); + } + } + }; + const internalRenderTask = new InternalRenderTask({ + callback: complete, + params: { + canvasContext, + viewport, + transform, + background + }, + objs: this.objs, + commonObjs: this.commonObjs, + annotationCanvasMap, + operatorList: intentState.operatorList, + pageIndex: this._pageIndex, + canvasFactory: this._transport.canvasFactory, + filterFactory: this._transport.filterFactory, + useRequestAnimationFrame: !intentPrint, + pdfBug: this._pdfBug, + pageColors + }); + (intentState.renderTasks || (intentState.renderTasks = /* @__PURE__ */ new Set())).add(internalRenderTask); + const renderTask = internalRenderTask.task; + Promise.all([intentState.displayReadyCapability.promise, optionalContentConfigPromise]).then(([transparency, optionalContentConfig]) => { + var _a3; + if (this.destroyed) { + complete(); + return; + } + (_a3 = this._stats) == null ? void 0 : _a3.time("Rendering"); + if (!(optionalContentConfig.renderingIntent & renderingIntent)) { + throw new Error("Must use the same `intent`-argument when calling the `PDFPageProxy.render` and `PDFDocumentProxy.getOptionalContentConfig` methods."); + } + internalRenderTask.initializeGraphics({ + transparency, + optionalContentConfig + }); + internalRenderTask.operatorListChanged(); + }).catch(complete); + return renderTask; + } + getOperatorList({ + intent = "display", + annotationMode = AnnotationMode.ENABLE, + printAnnotationStorage = null, + isEditing = false + } = {}) { + var _a2; + function operatorListChanged() { + if (intentState.operatorList.lastChunk) { + intentState.opListReadCapability.resolve(intentState.operatorList); + intentState.renderTasks.delete(opListTask); + } + } + const intentArgs = this._transport.getRenderingIntent(intent, annotationMode, printAnnotationStorage, isEditing, true); + let intentState = this._intentStates.get(intentArgs.cacheKey); + if (!intentState) { + intentState = /* @__PURE__ */ Object.create(null); + this._intentStates.set(intentArgs.cacheKey, intentState); + } + let opListTask; + if (!intentState.opListReadCapability) { + opListTask = /* @__PURE__ */ Object.create(null); + opListTask.operatorListChanged = operatorListChanged; + intentState.opListReadCapability = Promise.withResolvers(); + (intentState.renderTasks || (intentState.renderTasks = /* @__PURE__ */ new Set())).add(opListTask); + intentState.operatorList = { + fnArray: [], + argsArray: [], + lastChunk: false, + separateAnnots: null + }; + (_a2 = this._stats) == null ? void 0 : _a2.time("Page Request"); + this._pumpOperatorList(intentArgs); + } + return intentState.opListReadCapability.promise; + } + streamTextContent({ + includeMarkedContent = false, + disableNormalization = false + } = {}) { + const TEXT_CONTENT_CHUNK_SIZE = 100; + return this._transport.messageHandler.sendWithStream("GetTextContent", { + pageIndex: this._pageIndex, + includeMarkedContent: includeMarkedContent === true, + disableNormalization: disableNormalization === true + }, { + highWaterMark: TEXT_CONTENT_CHUNK_SIZE, + size(textContent) { + return textContent.items.length; + } + }); + } + getTextContent(params = {}) { + if (this._transport._htmlForXfa) { + return this.getXfa().then((xfa) => XfaText.textContent(xfa)); + } + const readableStream = this.streamTextContent(params); + return new Promise(function(resolve, reject) { + function pump() { + reader.read().then(function({ + value, + done + }) { + var _a2; + if (done) { + resolve(textContent); + return; + } + (_a2 = textContent.lang) != null ? _a2 : textContent.lang = value.lang; + Object.assign(textContent.styles, value.styles); + textContent.items.push(...value.items); + pump(); + }, reject); + } + const reader = readableStream.getReader(); + const textContent = { + items: [], + styles: /* @__PURE__ */ Object.create(null), + lang: null + }; + pump(); + }); + } + getStructTree() { + return this._transport.getStructTree(this._pageIndex); + } + _destroy() { + this.destroyed = true; + const waitOn = []; + for (const intentState of this._intentStates.values()) { + this._abortOperatorList({ + intentState, + reason: new Error("Page was destroyed."), + force: true + }); + if (intentState.opListReadCapability) { + continue; + } + for (const internalRenderTask of intentState.renderTasks) { + waitOn.push(internalRenderTask.completed); + internalRenderTask.cancel(); + } + } + this.objs.clear(); + __privateSet(this, _pendingCleanup, false); + __privateMethod(this, _abortDelayedCleanup, abortDelayedCleanup_fn).call(this); + return Promise.all(waitOn); + } + cleanup(resetStats = false) { + __privateSet(this, _pendingCleanup, true); + const success = __privateMethod(this, _tryCleanup, tryCleanup_fn).call(this, false); + if (resetStats && success) { + this._stats && (this._stats = new StatTimer()); + } + return success; + } + _startRenderPage(transparency, cacheKey) { + var _a2, _b; + const intentState = this._intentStates.get(cacheKey); + if (!intentState) { + return; + } + (_a2 = this._stats) == null ? void 0 : _a2.timeEnd("Page Request"); + (_b = intentState.displayReadyCapability) == null ? void 0 : _b.resolve(transparency); + } + _renderPageChunk(operatorListChunk, intentState) { + for (let i = 0, ii = operatorListChunk.length; i < ii; i++) { + intentState.operatorList.fnArray.push(operatorListChunk.fnArray[i]); + intentState.operatorList.argsArray.push(operatorListChunk.argsArray[i]); + } + intentState.operatorList.lastChunk = operatorListChunk.lastChunk; + intentState.operatorList.separateAnnots = operatorListChunk.separateAnnots; + for (const internalRenderTask of intentState.renderTasks) { + internalRenderTask.operatorListChanged(); + } + if (operatorListChunk.lastChunk) { + __privateMethod(this, _tryCleanup, tryCleanup_fn).call(this, true); + } + } + _pumpOperatorList({ + renderingIntent, + cacheKey, + annotationStorageSerializable, + modifiedIds + }) { + const { + map, + transfer + } = annotationStorageSerializable; + const readableStream = this._transport.messageHandler.sendWithStream("GetOperatorList", { + pageIndex: this._pageIndex, + intent: renderingIntent, + cacheKey, + annotationStorage: map, + modifiedIds + }, transfer); + const reader = readableStream.getReader(); + const intentState = this._intentStates.get(cacheKey); + intentState.streamReader = reader; + const pump = () => { + reader.read().then(({ + value, + done + }) => { + if (done) { + intentState.streamReader = null; + return; + } + if (this._transport.destroyed) { + return; + } + this._renderPageChunk(value, intentState); + pump(); + }, (reason) => { + intentState.streamReader = null; + if (this._transport.destroyed) { + return; + } + if (intentState.operatorList) { + intentState.operatorList.lastChunk = true; + for (const internalRenderTask of intentState.renderTasks) { + internalRenderTask.operatorListChanged(); + } + __privateMethod(this, _tryCleanup, tryCleanup_fn).call(this, true); + } + if (intentState.displayReadyCapability) { + intentState.displayReadyCapability.reject(reason); + } else if (intentState.opListReadCapability) { + intentState.opListReadCapability.reject(reason); + } else { + throw reason; + } + }); + }; + pump(); + } + _abortOperatorList({ + intentState, + reason, + force = false + }) { + if (!intentState.streamReader) { + return; + } + if (intentState.streamReaderCancelTimeout) { + clearTimeout(intentState.streamReaderCancelTimeout); + intentState.streamReaderCancelTimeout = null; + } + if (!force) { + if (intentState.renderTasks.size > 0) { + return; + } + if (reason instanceof RenderingCancelledException) { + let delay = RENDERING_CANCELLED_TIMEOUT; + if (reason.extraDelay > 0 && reason.extraDelay < 1e3) { + delay += reason.extraDelay; + } + intentState.streamReaderCancelTimeout = setTimeout(() => { + intentState.streamReaderCancelTimeout = null; + this._abortOperatorList({ + intentState, + reason, + force: true + }); + }, delay); + return; + } + } + intentState.streamReader.cancel(new AbortException(reason.message)).catch(() => { + }); + intentState.streamReader = null; + if (this._transport.destroyed) { + return; + } + for (const [curCacheKey, curIntentState] of this._intentStates) { + if (curIntentState === intentState) { + this._intentStates.delete(curCacheKey); + break; + } + } + this.cleanup(); + } + get stats() { + return this._stats; + } +}; +_delayedCleanupTimeout = new WeakMap(); +_pendingCleanup = new WeakMap(); +_tryCleanup = new WeakSet(); +tryCleanup_fn = function(delayed = false) { + __privateMethod(this, _abortDelayedCleanup, abortDelayedCleanup_fn).call(this); + if (!__privateGet(this, _pendingCleanup) || this.destroyed) { + return false; + } + if (delayed) { + __privateSet(this, _delayedCleanupTimeout, setTimeout(() => { + __privateSet(this, _delayedCleanupTimeout, null); + __privateMethod(this, _tryCleanup, tryCleanup_fn).call(this, false); + }, DELAYED_CLEANUP_TIMEOUT)); + return false; + } + for (const { + renderTasks, + operatorList + } of this._intentStates.values()) { + if (renderTasks.size > 0 || !operatorList.lastChunk) { + return false; + } + } + this._intentStates.clear(); + this.objs.clear(); + __privateSet(this, _pendingCleanup, false); + return true; +}; +_abortDelayedCleanup = new WeakSet(); +abortDelayedCleanup_fn = function() { + if (__privateGet(this, _delayedCleanupTimeout)) { + clearTimeout(__privateGet(this, _delayedCleanupTimeout)); + __privateSet(this, _delayedCleanupTimeout, null); + } +}; +var _listeners, _deferred; +var LoopbackPort = class { + constructor() { + __privateAdd(this, _listeners, /* @__PURE__ */ new Set()); + __privateAdd(this, _deferred, Promise.resolve()); + } + postMessage(obj, transfer) { + const event = { + data: structuredClone(obj, transfer ? { + transfer + } : null) + }; + __privateGet(this, _deferred).then(() => { + for (const listener of __privateGet(this, _listeners)) { + listener.call(this, event); + } + }); + } + addEventListener(name, listener) { + __privateGet(this, _listeners).add(listener); + } + removeEventListener(name, listener) { + __privateGet(this, _listeners).delete(listener); + } + terminate() { + __privateGet(this, _listeners).clear(); + } +}; +_listeners = new WeakMap(); +_deferred = new WeakMap(); +var _fakeWorkerId, _isWorkerDisabled, _workerPorts, _resolve, resolve_fn, _mainThreadWorkerMessageHandler, mainThreadWorkerMessageHandler_get; +var _PDFWorker = class { + constructor({ + name = null, + port = null, + verbosity: verbosity2 = getVerbosityLevel() + } = {}) { + __privateAdd(this, _resolve); + var _a2; + this.name = name; + this.destroyed = false; + this.verbosity = verbosity2; + this._readyCapability = Promise.withResolvers(); + this._port = null; + this._webWorker = null; + this._messageHandler = null; + if (port) { + if ((_a2 = __privateGet(_PDFWorker, _workerPorts)) == null ? void 0 : _a2.has(port)) { + throw new Error("Cannot use more than one PDFWorker per port."); + } + (__privateGet(_PDFWorker, _workerPorts) || __privateSet(_PDFWorker, _workerPorts, /* @__PURE__ */ new WeakMap())).set(port, this); + this._initializeFromPort(port); + return; + } + this._initialize(); + } + get promise() { + if (isNodeJS) { + return Promise.all([NodePackages.promise, this._readyCapability.promise]); + } + return this._readyCapability.promise; + } + get port() { + return this._port; + } + get messageHandler() { + return this._messageHandler; + } + _initializeFromPort(port) { + this._port = port; + this._messageHandler = new MessageHandler("main", "worker", port); + this._messageHandler.on("ready", function() { + }); + __privateMethod(this, _resolve, resolve_fn).call(this); + } + _initialize() { + if (__privateGet(_PDFWorker, _isWorkerDisabled) || __privateGet(_PDFWorker, _mainThreadWorkerMessageHandler, mainThreadWorkerMessageHandler_get)) { + this._setupFakeWorker(); + return; + } + let { + workerSrc + } = _PDFWorker; + try { + if (!_PDFWorker._isSameOrigin(window.location.href, workerSrc)) { + workerSrc = _PDFWorker._createCDNWrapper(new URL(workerSrc, window.location).href); + } + const worker = new Worker(workerSrc, { + type: "module" + }); + const messageHandler = new MessageHandler("main", "worker", worker); + const terminateEarly = () => { + ac.abort(); + messageHandler.destroy(); + worker.terminate(); + if (this.destroyed) { + this._readyCapability.reject(new Error("Worker was destroyed")); + } else { + this._setupFakeWorker(); + } + }; + const ac = new AbortController(); + worker.addEventListener("error", () => { + if (!this._webWorker) { + terminateEarly(); + } + }, { + signal: ac.signal + }); + messageHandler.on("test", (data) => { + ac.abort(); + if (this.destroyed || !data) { + terminateEarly(); + return; + } + this._messageHandler = messageHandler; + this._port = worker; + this._webWorker = worker; + __privateMethod(this, _resolve, resolve_fn).call(this); + }); + messageHandler.on("ready", (data) => { + ac.abort(); + if (this.destroyed) { + terminateEarly(); + return; + } + try { + sendTest(); + } catch (e) { + this._setupFakeWorker(); + } + }); + const sendTest = () => { + const testObj = new Uint8Array(); + messageHandler.send("test", testObj, [testObj.buffer]); + }; + sendTest(); + return; + } catch (e) { + info("The worker has been disabled."); + } + this._setupFakeWorker(); + } + _setupFakeWorker() { + if (!__privateGet(_PDFWorker, _isWorkerDisabled)) { + warn("Setting up fake worker."); + __privateSet(_PDFWorker, _isWorkerDisabled, true); + } + _PDFWorker._setupFakeWorkerGlobal.then((WorkerMessageHandler) => { + if (this.destroyed) { + this._readyCapability.reject(new Error("Worker was destroyed")); + return; + } + const port = new LoopbackPort(); + this._port = port; + const id = `fake${__privateWrapper(_PDFWorker, _fakeWorkerId)._++}`; + const workerHandler = new MessageHandler(id + "_worker", id, port); + WorkerMessageHandler.setup(workerHandler, port); + this._messageHandler = new MessageHandler(id, id + "_worker", port); + __privateMethod(this, _resolve, resolve_fn).call(this); + }).catch((reason) => { + this._readyCapability.reject(new Error(`Setting up fake worker failed: "${reason.message}".`)); + }); + } + destroy() { + var _a2; + this.destroyed = true; + if (this._webWorker) { + this._webWorker.terminate(); + this._webWorker = null; + } + (_a2 = __privateGet(_PDFWorker, _workerPorts)) == null ? void 0 : _a2.delete(this._port); + this._port = null; + if (this._messageHandler) { + this._messageHandler.destroy(); + this._messageHandler = null; + } + } + static fromPort(params) { + var _a2; + if (!(params == null ? void 0 : params.port)) { + throw new Error("PDFWorker.fromPort - invalid method signature."); + } + const cachedPort = (_a2 = __privateGet(this, _workerPorts)) == null ? void 0 : _a2.get(params.port); + if (cachedPort) { + if (cachedPort._pendingDestroy) { + throw new Error("PDFWorker.fromPort - the worker is being destroyed.\nPlease remember to await `PDFDocumentLoadingTask.destroy()`-calls."); + } + return cachedPort; + } + return new _PDFWorker(params); + } + static get workerSrc() { + if (GlobalWorkerOptions.workerSrc) { + return GlobalWorkerOptions.workerSrc; + } + throw new Error('No "GlobalWorkerOptions.workerSrc" specified.'); + } + static get _setupFakeWorkerGlobal() { + const loader = async () => { + if (__privateGet(this, _mainThreadWorkerMessageHandler, mainThreadWorkerMessageHandler_get)) { + return __privateGet(this, _mainThreadWorkerMessageHandler, mainThreadWorkerMessageHandler_get); + } + const worker = await import( + /*webpackIgnore: true*/ + this.workerSrc + ); + return worker.WorkerMessageHandler; + }; + return shadow(this, "_setupFakeWorkerGlobal", loader()); + } +}; +var PDFWorker = _PDFWorker; +_fakeWorkerId = new WeakMap(); +_isWorkerDisabled = new WeakMap(); +_workerPorts = new WeakMap(); +_resolve = new WeakSet(); +resolve_fn = function() { + this._readyCapability.resolve(); + this._messageHandler.send("configure", { + verbosity: this.verbosity + }); +}; +_mainThreadWorkerMessageHandler = new WeakSet(); +mainThreadWorkerMessageHandler_get = function() { + var _a2; + try { + return ((_a2 = globalThis.pdfjsWorker) == null ? void 0 : _a2.WorkerMessageHandler) || null; + } catch (e) { + return null; + } +}; +__privateAdd(PDFWorker, _mainThreadWorkerMessageHandler); +__privateAdd(PDFWorker, _fakeWorkerId, 0); +__privateAdd(PDFWorker, _isWorkerDisabled, false); +__privateAdd(PDFWorker, _workerPorts, void 0); +(() => { + if (isNodeJS) { + __privateSet(_PDFWorker, _isWorkerDisabled, true); + GlobalWorkerOptions.workerSrc || (GlobalWorkerOptions.workerSrc = "./pdf.worker.mjs"); + } + _PDFWorker._isSameOrigin = (baseUrl, otherUrl) => { + let base; + try { + base = new URL(baseUrl); + if (!base.origin || base.origin === "null") { + return false; + } + } catch (e) { + return false; + } + const other = new URL(otherUrl, base); + return base.origin === other.origin; + }; + _PDFWorker._createCDNWrapper = (url) => { + const wrapper = `await import("${url}");`; + return URL.createObjectURL(new Blob([wrapper], { + type: "text/javascript" + })); + }; +})(); +var _methodPromises, _pageCache, _pagePromises, _pageRefCache, _passwordCapability, _cacheSimpleMethod, cacheSimpleMethod_fn; +var WorkerTransport = class { + constructor(messageHandler, loadingTask, networkStream, params, factory) { + __privateAdd(this, _cacheSimpleMethod); + __privateAdd(this, _methodPromises, /* @__PURE__ */ new Map()); + __privateAdd(this, _pageCache, /* @__PURE__ */ new Map()); + __privateAdd(this, _pagePromises, /* @__PURE__ */ new Map()); + __privateAdd(this, _pageRefCache, /* @__PURE__ */ new Map()); + __privateAdd(this, _passwordCapability, null); + this.messageHandler = messageHandler; + this.loadingTask = loadingTask; + this.commonObjs = new PDFObjects(); + this.fontLoader = new FontLoader({ + ownerDocument: params.ownerDocument, + styleElement: params.styleElement + }); + this.loadingParams = params.loadingParams; + this._params = params; + this.canvasFactory = factory.canvasFactory; + this.filterFactory = factory.filterFactory; + this.cMapReaderFactory = factory.cMapReaderFactory; + this.standardFontDataFactory = factory.standardFontDataFactory; + this.destroyed = false; + this.destroyCapability = null; + this._networkStream = networkStream; + this._fullReader = null; + this._lastProgress = null; + this.downloadInfoCapability = Promise.withResolvers(); + this.setupMessageHandler(); + } + get annotationStorage() { + return shadow(this, "annotationStorage", new AnnotationStorage()); + } + getRenderingIntent(intent, annotationMode = AnnotationMode.ENABLE, printAnnotationStorage = null, isEditing = false, isOpList = false) { + let renderingIntent = RenderingIntentFlag.DISPLAY; + let annotationStorageSerializable = SerializableEmpty; + switch (intent) { + case "any": + renderingIntent = RenderingIntentFlag.ANY; + break; + case "display": + break; + case "print": + renderingIntent = RenderingIntentFlag.PRINT; + break; + default: + warn(`getRenderingIntent - invalid intent: ${intent}`); + } + const annotationStorage = renderingIntent & RenderingIntentFlag.PRINT && printAnnotationStorage instanceof PrintAnnotationStorage ? printAnnotationStorage : this.annotationStorage; + switch (annotationMode) { + case AnnotationMode.DISABLE: + renderingIntent += RenderingIntentFlag.ANNOTATIONS_DISABLE; + break; + case AnnotationMode.ENABLE: + break; + case AnnotationMode.ENABLE_FORMS: + renderingIntent += RenderingIntentFlag.ANNOTATIONS_FORMS; + break; + case AnnotationMode.ENABLE_STORAGE: + renderingIntent += RenderingIntentFlag.ANNOTATIONS_STORAGE; + annotationStorageSerializable = annotationStorage.serializable; + break; + default: + warn(`getRenderingIntent - invalid annotationMode: ${annotationMode}`); + } + if (isEditing) { + renderingIntent += RenderingIntentFlag.IS_EDITING; + } + if (isOpList) { + renderingIntent += RenderingIntentFlag.OPLIST; + } + const { + ids: modifiedIds, + hash: modifiedIdsHash + } = annotationStorage.modifiedIds; + const cacheKeyBuf = [renderingIntent, annotationStorageSerializable.hash, modifiedIdsHash]; + return { + renderingIntent, + cacheKey: cacheKeyBuf.join("_"), + annotationStorageSerializable, + modifiedIds + }; + } + destroy() { + var _a2; + if (this.destroyCapability) { + return this.destroyCapability.promise; + } + this.destroyed = true; + this.destroyCapability = Promise.withResolvers(); + (_a2 = __privateGet(this, _passwordCapability)) == null ? void 0 : _a2.reject(new Error("Worker was destroyed during onPassword callback")); + const waitOn = []; + for (const page of __privateGet(this, _pageCache).values()) { + waitOn.push(page._destroy()); + } + __privateGet(this, _pageCache).clear(); + __privateGet(this, _pagePromises).clear(); + __privateGet(this, _pageRefCache).clear(); + if (this.hasOwnProperty("annotationStorage")) { + this.annotationStorage.resetModified(); + } + const terminated = this.messageHandler.sendWithPromise("Terminate", null); + waitOn.push(terminated); + Promise.all(waitOn).then(() => { + var _a3; + this.commonObjs.clear(); + this.fontLoader.clear(); + __privateGet(this, _methodPromises).clear(); + this.filterFactory.destroy(); + TextLayer.cleanup(); + (_a3 = this._networkStream) == null ? void 0 : _a3.cancelAllRequests(new AbortException("Worker was terminated.")); + if (this.messageHandler) { + this.messageHandler.destroy(); + this.messageHandler = null; + } + this.destroyCapability.resolve(); + }, this.destroyCapability.reject); + return this.destroyCapability.promise; + } + setupMessageHandler() { + const { + messageHandler, + loadingTask + } = this; + messageHandler.on("GetReader", (data, sink) => { + assert(this._networkStream, "GetReader - no `IPDFStream` instance available."); + this._fullReader = this._networkStream.getFullReader(); + this._fullReader.onProgress = (evt) => { + this._lastProgress = { + loaded: evt.loaded, + total: evt.total + }; + }; + sink.onPull = () => { + this._fullReader.read().then(function({ + value, + done + }) { + if (done) { + sink.close(); + return; + } + assert(value instanceof ArrayBuffer, "GetReader - expected an ArrayBuffer."); + sink.enqueue(new Uint8Array(value), 1, [value]); + }).catch((reason) => { + sink.error(reason); + }); + }; + sink.onCancel = (reason) => { + this._fullReader.cancel(reason); + sink.ready.catch((readyReason) => { + if (this.destroyed) { + return; + } + throw readyReason; + }); + }; + }); + messageHandler.on("ReaderHeadersReady", (data) => { + const headersCapability = Promise.withResolvers(); + const fullReader = this._fullReader; + fullReader.headersReady.then(() => { + var _a2; + if (!fullReader.isStreamingSupported || !fullReader.isRangeSupported) { + if (this._lastProgress) { + (_a2 = loadingTask.onProgress) == null ? void 0 : _a2.call(loadingTask, this._lastProgress); + } + fullReader.onProgress = (evt) => { + var _a3; + (_a3 = loadingTask.onProgress) == null ? void 0 : _a3.call(loadingTask, { + loaded: evt.loaded, + total: evt.total + }); + }; + } + headersCapability.resolve({ + isStreamingSupported: fullReader.isStreamingSupported, + isRangeSupported: fullReader.isRangeSupported, + contentLength: fullReader.contentLength + }); + }, headersCapability.reject); + return headersCapability.promise; + }); + messageHandler.on("GetRangeReader", (data, sink) => { + assert(this._networkStream, "GetRangeReader - no `IPDFStream` instance available."); + const rangeReader = this._networkStream.getRangeReader(data.begin, data.end); + if (!rangeReader) { + sink.close(); + return; + } + sink.onPull = () => { + rangeReader.read().then(function({ + value, + done + }) { + if (done) { + sink.close(); + return; + } + assert(value instanceof ArrayBuffer, "GetRangeReader - expected an ArrayBuffer."); + sink.enqueue(new Uint8Array(value), 1, [value]); + }).catch((reason) => { + sink.error(reason); + }); + }; + sink.onCancel = (reason) => { + rangeReader.cancel(reason); + sink.ready.catch((readyReason) => { + if (this.destroyed) { + return; + } + throw readyReason; + }); + }; + }); + messageHandler.on("GetDoc", ({ + pdfInfo + }) => { + this._numPages = pdfInfo.numPages; + this._htmlForXfa = pdfInfo.htmlForXfa; + delete pdfInfo.htmlForXfa; + loadingTask._capability.resolve(new PDFDocumentProxy(pdfInfo, this)); + }); + messageHandler.on("DocException", function(ex) { + let reason; + switch (ex.name) { + case "PasswordException": + reason = new PasswordException(ex.message, ex.code); + break; + case "InvalidPDFException": + reason = new InvalidPDFException(ex.message); + break; + case "MissingPDFException": + reason = new MissingPDFException(ex.message); + break; + case "UnexpectedResponseException": + reason = new UnexpectedResponseException(ex.message, ex.status); + break; + case "UnknownErrorException": + reason = new UnknownErrorException(ex.message, ex.details); + break; + default: + unreachable("DocException - expected a valid Error."); + } + loadingTask._capability.reject(reason); + }); + messageHandler.on("PasswordRequest", (exception) => { + __privateSet(this, _passwordCapability, Promise.withResolvers()); + if (loadingTask.onPassword) { + const updatePassword = (password) => { + if (password instanceof Error) { + __privateGet(this, _passwordCapability).reject(password); + } else { + __privateGet(this, _passwordCapability).resolve({ + password + }); + } + }; + try { + loadingTask.onPassword(updatePassword, exception.code); + } catch (ex) { + __privateGet(this, _passwordCapability).reject(ex); + } + } else { + __privateGet(this, _passwordCapability).reject(new PasswordException(exception.message, exception.code)); + } + return __privateGet(this, _passwordCapability).promise; + }); + messageHandler.on("DataLoaded", (data) => { + var _a2; + (_a2 = loadingTask.onProgress) == null ? void 0 : _a2.call(loadingTask, { + loaded: data.length, + total: data.length + }); + this.downloadInfoCapability.resolve(data); + }); + messageHandler.on("StartRenderPage", (data) => { + if (this.destroyed) { + return; + } + const page = __privateGet(this, _pageCache).get(data.pageIndex); + page._startRenderPage(data.transparency, data.cacheKey); + }); + messageHandler.on("commonobj", ([id, type, exportedData]) => { + var _a2; + if (this.destroyed) { + return null; + } + if (this.commonObjs.has(id)) { + return null; + } + switch (type) { + case "Font": + const { + disableFontFace, + fontExtraProperties, + pdfBug + } = this._params; + if ("error" in exportedData) { + const exportedError = exportedData.error; + warn(`Error during font loading: ${exportedError}`); + this.commonObjs.resolve(id, exportedError); + break; + } + const inspectFont = pdfBug && ((_a2 = globalThis.FontInspector) == null ? void 0 : _a2.enabled) ? (font2, url) => globalThis.FontInspector.fontAdded(font2, url) : null; + const font = new FontFaceObject(exportedData, { + disableFontFace, + inspectFont + }); + this.fontLoader.bind(font).catch(() => messageHandler.sendWithPromise("FontFallback", { + id + })).finally(() => { + if (!fontExtraProperties && font.data) { + font.data = null; + } + this.commonObjs.resolve(id, font); + }); + break; + case "CopyLocalImage": + const { + imageRef + } = exportedData; + assert(imageRef, "The imageRef must be defined."); + for (const pageProxy of __privateGet(this, _pageCache).values()) { + for (const [, data] of pageProxy.objs) { + if ((data == null ? void 0 : data.ref) !== imageRef) { + continue; + } + if (!data.dataLen) { + return null; + } + this.commonObjs.resolve(id, structuredClone(data)); + return data.dataLen; + } + } + break; + case "FontPath": + case "Image": + case "Pattern": + this.commonObjs.resolve(id, exportedData); + break; + default: + throw new Error(`Got unknown common object type ${type}`); + } + return null; + }); + messageHandler.on("obj", ([id, pageIndex, type, imageData]) => { + var _a2; + if (this.destroyed) { + return; + } + const pageProxy = __privateGet(this, _pageCache).get(pageIndex); + if (pageProxy.objs.has(id)) { + return; + } + if (pageProxy._intentStates.size === 0) { + (_a2 = imageData == null ? void 0 : imageData.bitmap) == null ? void 0 : _a2.close(); + return; + } + switch (type) { + case "Image": + pageProxy.objs.resolve(id, imageData); + if ((imageData == null ? void 0 : imageData.dataLen) > MAX_IMAGE_SIZE_TO_CACHE) { + pageProxy._maybeCleanupAfterRender = true; + } + break; + case "Pattern": + pageProxy.objs.resolve(id, imageData); + break; + default: + throw new Error(`Got unknown object type ${type}`); + } + }); + messageHandler.on("DocProgress", (data) => { + var _a2; + if (this.destroyed) { + return; + } + (_a2 = loadingTask.onProgress) == null ? void 0 : _a2.call(loadingTask, { + loaded: data.loaded, + total: data.total + }); + }); + messageHandler.on("FetchBuiltInCMap", (data) => { + if (this.destroyed) { + return Promise.reject(new Error("Worker was destroyed.")); + } + if (!this.cMapReaderFactory) { + return Promise.reject(new Error("CMapReaderFactory not initialized, see the `useWorkerFetch` parameter.")); + } + return this.cMapReaderFactory.fetch(data); + }); + messageHandler.on("FetchStandardFontData", (data) => { + if (this.destroyed) { + return Promise.reject(new Error("Worker was destroyed.")); + } + if (!this.standardFontDataFactory) { + return Promise.reject(new Error("StandardFontDataFactory not initialized, see the `useWorkerFetch` parameter.")); + } + return this.standardFontDataFactory.fetch(data); + }); + } + getData() { + return this.messageHandler.sendWithPromise("GetData", null); + } + saveDocument() { + var _a2, _b; + if (this.annotationStorage.size <= 0) { + warn("saveDocument called while `annotationStorage` is empty, please use the getData-method instead."); + } + const { + map, + transfer + } = this.annotationStorage.serializable; + return this.messageHandler.sendWithPromise("SaveDocument", { + isPureXfa: !!this._htmlForXfa, + numPages: this._numPages, + annotationStorage: map, + filename: (_b = (_a2 = this._fullReader) == null ? void 0 : _a2.filename) != null ? _b : null + }, transfer).finally(() => { + this.annotationStorage.resetModified(); + }); + } + getPage(pageNumber) { + if (!Number.isInteger(pageNumber) || pageNumber <= 0 || pageNumber > this._numPages) { + return Promise.reject(new Error("Invalid page request.")); + } + const pageIndex = pageNumber - 1, cachedPromise = __privateGet(this, _pagePromises).get(pageIndex); + if (cachedPromise) { + return cachedPromise; + } + const promise = this.messageHandler.sendWithPromise("GetPage", { + pageIndex + }).then((pageInfo) => { + if (this.destroyed) { + throw new Error("Transport destroyed"); + } + if (pageInfo.refStr) { + __privateGet(this, _pageRefCache).set(pageInfo.refStr, pageNumber); + } + const page = new PDFPageProxy(pageIndex, pageInfo, this, this._params.pdfBug); + __privateGet(this, _pageCache).set(pageIndex, page); + return page; + }); + __privateGet(this, _pagePromises).set(pageIndex, promise); + return promise; + } + getPageIndex(ref) { + if (!isRefProxy(ref)) { + return Promise.reject(new Error("Invalid pageIndex request.")); + } + return this.messageHandler.sendWithPromise("GetPageIndex", { + num: ref.num, + gen: ref.gen + }); + } + getAnnotations(pageIndex, intent) { + return this.messageHandler.sendWithPromise("GetAnnotations", { + pageIndex, + intent + }); + } + getFieldObjects() { + return __privateMethod(this, _cacheSimpleMethod, cacheSimpleMethod_fn).call(this, "GetFieldObjects"); + } + hasJSActions() { + return __privateMethod(this, _cacheSimpleMethod, cacheSimpleMethod_fn).call(this, "HasJSActions"); + } + getCalculationOrderIds() { + return this.messageHandler.sendWithPromise("GetCalculationOrderIds", null); + } + getDestinations() { + return this.messageHandler.sendWithPromise("GetDestinations", null); + } + getDestination(id) { + if (typeof id !== "string") { + return Promise.reject(new Error("Invalid destination request.")); + } + return this.messageHandler.sendWithPromise("GetDestination", { + id + }); + } + getPageLabels() { + return this.messageHandler.sendWithPromise("GetPageLabels", null); + } + getPageLayout() { + return this.messageHandler.sendWithPromise("GetPageLayout", null); + } + getPageMode() { + return this.messageHandler.sendWithPromise("GetPageMode", null); + } + getViewerPreferences() { + return this.messageHandler.sendWithPromise("GetViewerPreferences", null); + } + getOpenAction() { + return this.messageHandler.sendWithPromise("GetOpenAction", null); + } + getAttachments() { + return this.messageHandler.sendWithPromise("GetAttachments", null); + } + getDocJSActions() { + return __privateMethod(this, _cacheSimpleMethod, cacheSimpleMethod_fn).call(this, "GetDocJSActions"); + } + getPageJSActions(pageIndex) { + return this.messageHandler.sendWithPromise("GetPageJSActions", { + pageIndex + }); + } + getStructTree(pageIndex) { + return this.messageHandler.sendWithPromise("GetStructTree", { + pageIndex + }); + } + getOutline() { + return this.messageHandler.sendWithPromise("GetOutline", null); + } + getOptionalContentConfig(renderingIntent) { + return __privateMethod(this, _cacheSimpleMethod, cacheSimpleMethod_fn).call(this, "GetOptionalContentConfig").then((data) => new OptionalContentConfig(data, renderingIntent)); + } + getPermissions() { + return this.messageHandler.sendWithPromise("GetPermissions", null); + } + getMetadata() { + const name = "GetMetadata", cachedPromise = __privateGet(this, _methodPromises).get(name); + if (cachedPromise) { + return cachedPromise; + } + const promise = this.messageHandler.sendWithPromise(name, null).then((results) => { + var _a2, _b, _c, _d; + return { + info: results[0], + metadata: results[1] ? new Metadata(results[1]) : null, + contentDispositionFilename: (_b = (_a2 = this._fullReader) == null ? void 0 : _a2.filename) != null ? _b : null, + contentLength: (_d = (_c = this._fullReader) == null ? void 0 : _c.contentLength) != null ? _d : null + }; + }); + __privateGet(this, _methodPromises).set(name, promise); + return promise; + } + getMarkInfo() { + return this.messageHandler.sendWithPromise("GetMarkInfo", null); + } + async startCleanup(keepLoadedFonts = false) { + if (this.destroyed) { + return; + } + await this.messageHandler.sendWithPromise("Cleanup", null); + for (const page of __privateGet(this, _pageCache).values()) { + const cleanupSuccessful = page.cleanup(); + if (!cleanupSuccessful) { + throw new Error(`startCleanup: Page ${page.pageNumber} is currently rendering.`); + } + } + this.commonObjs.clear(); + if (!keepLoadedFonts) { + this.fontLoader.clear(); + } + __privateGet(this, _methodPromises).clear(); + this.filterFactory.destroy(true); + TextLayer.cleanup(); + } + cachedPageNumber(ref) { + var _a2; + if (!isRefProxy(ref)) { + return null; + } + const refStr = ref.gen === 0 ? `${ref.num}R` : `${ref.num}R${ref.gen}`; + return (_a2 = __privateGet(this, _pageRefCache).get(refStr)) != null ? _a2 : null; + } +}; +_methodPromises = new WeakMap(); +_pageCache = new WeakMap(); +_pagePromises = new WeakMap(); +_pageRefCache = new WeakMap(); +_passwordCapability = new WeakMap(); +_cacheSimpleMethod = new WeakSet(); +cacheSimpleMethod_fn = function(name, data = null) { + const cachedPromise = __privateGet(this, _methodPromises).get(name); + if (cachedPromise) { + return cachedPromise; + } + const promise = this.messageHandler.sendWithPromise(name, data); + __privateGet(this, _methodPromises).set(name, promise); + return promise; +}; +var INITIAL_DATA = Symbol("INITIAL_DATA"); +var _objs, _ensureObj, ensureObj_fn; +var PDFObjects = class { + constructor() { + __privateAdd(this, _ensureObj); + __privateAdd(this, _objs, /* @__PURE__ */ Object.create(null)); + } + get(objId, callback = null) { + if (callback) { + const obj2 = __privateMethod(this, _ensureObj, ensureObj_fn).call(this, objId); + obj2.promise.then(() => callback(obj2.data)); + return null; + } + const obj = __privateGet(this, _objs)[objId]; + if (!obj || obj.data === INITIAL_DATA) { + throw new Error(`Requesting object that isn't resolved yet ${objId}.`); + } + return obj.data; + } + has(objId) { + const obj = __privateGet(this, _objs)[objId]; + return !!obj && obj.data !== INITIAL_DATA; + } + resolve(objId, data = null) { + const obj = __privateMethod(this, _ensureObj, ensureObj_fn).call(this, objId); + obj.data = data; + obj.resolve(); + } + clear() { + var _a2; + for (const objId in __privateGet(this, _objs)) { + const { + data + } = __privateGet(this, _objs)[objId]; + (_a2 = data == null ? void 0 : data.bitmap) == null ? void 0 : _a2.close(); + } + __privateSet(this, _objs, /* @__PURE__ */ Object.create(null)); + } + *[Symbol.iterator]() { + for (const objId in __privateGet(this, _objs)) { + const { + data + } = __privateGet(this, _objs)[objId]; + if (data === INITIAL_DATA) { + continue; + } + yield [objId, data]; + } + } +}; +_objs = new WeakMap(); +_ensureObj = new WeakSet(); +ensureObj_fn = function(objId) { + var _a2; + return (_a2 = __privateGet(this, _objs))[objId] || (_a2[objId] = { + ...Promise.withResolvers(), + data: INITIAL_DATA + }); +}; +var _internalRenderTask; +var RenderTask = class { + constructor(internalRenderTask) { + __privateAdd(this, _internalRenderTask, null); + __privateSet(this, _internalRenderTask, internalRenderTask); + this.onContinue = null; + } + get promise() { + return __privateGet(this, _internalRenderTask).capability.promise; + } + cancel(extraDelay = 0) { + __privateGet(this, _internalRenderTask).cancel(null, extraDelay); + } + get separateAnnots() { + const { + separateAnnots + } = __privateGet(this, _internalRenderTask).operatorList; + if (!separateAnnots) { + return false; + } + const { + annotationCanvasMap + } = __privateGet(this, _internalRenderTask); + return separateAnnots.form || separateAnnots.canvas && (annotationCanvasMap == null ? void 0 : annotationCanvasMap.size) > 0; + } +}; +_internalRenderTask = new WeakMap(); +var _rAF, _canvasInUse; +var _InternalRenderTask = class { + constructor({ + callback, + params, + objs, + commonObjs, + annotationCanvasMap, + operatorList, + pageIndex, + canvasFactory, + filterFactory, + useRequestAnimationFrame = false, + pdfBug = false, + pageColors = null + }) { + __privateAdd(this, _rAF, null); + this.callback = callback; + this.params = params; + this.objs = objs; + this.commonObjs = commonObjs; + this.annotationCanvasMap = annotationCanvasMap; + this.operatorListIdx = null; + this.operatorList = operatorList; + this._pageIndex = pageIndex; + this.canvasFactory = canvasFactory; + this.filterFactory = filterFactory; + this._pdfBug = pdfBug; + this.pageColors = pageColors; + this.running = false; + this.graphicsReadyCallback = null; + this.graphicsReady = false; + this._useRequestAnimationFrame = useRequestAnimationFrame === true && typeof window !== "undefined"; + this.cancelled = false; + this.capability = Promise.withResolvers(); + this.task = new RenderTask(this); + this._cancelBound = this.cancel.bind(this); + this._continueBound = this._continue.bind(this); + this._scheduleNextBound = this._scheduleNext.bind(this); + this._nextBound = this._next.bind(this); + this._canvas = params.canvasContext.canvas; + } + get completed() { + return this.capability.promise.catch(function() { + }); + } + initializeGraphics({ + transparency = false, + optionalContentConfig + }) { + var _a2, _b; + if (this.cancelled) { + return; + } + if (this._canvas) { + if (__privateGet(_InternalRenderTask, _canvasInUse).has(this._canvas)) { + throw new Error("Cannot use the same canvas during multiple render() operations. Use different canvas or ensure previous operations were cancelled or completed."); + } + __privateGet(_InternalRenderTask, _canvasInUse).add(this._canvas); + } + if (this._pdfBug && ((_a2 = globalThis.StepperManager) == null ? void 0 : _a2.enabled)) { + this.stepper = globalThis.StepperManager.create(this._pageIndex); + this.stepper.init(this.operatorList); + this.stepper.nextBreakPoint = this.stepper.getNextBreakPoint(); + } + const { + canvasContext, + viewport, + transform, + background + } = this.params; + this.gfx = new CanvasGraphics(canvasContext, this.commonObjs, this.objs, this.canvasFactory, this.filterFactory, { + optionalContentConfig + }, this.annotationCanvasMap, this.pageColors); + this.gfx.beginDrawing({ + transform, + viewport, + transparency, + background + }); + this.operatorListIdx = 0; + this.graphicsReady = true; + (_b = this.graphicsReadyCallback) == null ? void 0 : _b.call(this); + } + cancel(error = null, extraDelay = 0) { + var _a2; + this.running = false; + this.cancelled = true; + (_a2 = this.gfx) == null ? void 0 : _a2.endDrawing(); + if (__privateGet(this, _rAF)) { + window.cancelAnimationFrame(__privateGet(this, _rAF)); + __privateSet(this, _rAF, null); + } + __privateGet(_InternalRenderTask, _canvasInUse).delete(this._canvas); + this.callback(error || new RenderingCancelledException(`Rendering cancelled, page ${this._pageIndex + 1}`, extraDelay)); + } + operatorListChanged() { + var _a2; + if (!this.graphicsReady) { + this.graphicsReadyCallback || (this.graphicsReadyCallback = this._continueBound); + return; + } + (_a2 = this.stepper) == null ? void 0 : _a2.updateOperatorList(this.operatorList); + if (this.running) { + return; + } + this._continue(); + } + _continue() { + this.running = true; + if (this.cancelled) { + return; + } + if (this.task.onContinue) { + this.task.onContinue(this._scheduleNextBound); + } else { + this._scheduleNext(); + } + } + _scheduleNext() { + if (this._useRequestAnimationFrame) { + __privateSet(this, _rAF, window.requestAnimationFrame(() => { + __privateSet(this, _rAF, null); + this._nextBound().catch(this._cancelBound); + })); + } else { + Promise.resolve().then(this._nextBound).catch(this._cancelBound); + } + } + async _next() { + if (this.cancelled) { + return; + } + this.operatorListIdx = this.gfx.executeOperatorList(this.operatorList, this.operatorListIdx, this._continueBound, this.stepper); + if (this.operatorListIdx === this.operatorList.argsArray.length) { + this.running = false; + if (this.operatorList.lastChunk) { + this.gfx.endDrawing(); + __privateGet(_InternalRenderTask, _canvasInUse).delete(this._canvas); + this.callback(); + } + } + } +}; +var InternalRenderTask = _InternalRenderTask; +_rAF = new WeakMap(); +_canvasInUse = new WeakMap(); +__privateAdd(InternalRenderTask, _canvasInUse, /* @__PURE__ */ new WeakSet()); +var version = "4.6.82"; +var build = "9b541910f"; +function makeColorComp(n) { + return Math.floor(Math.max(0, Math.min(1, n)) * 255).toString(16).padStart(2, "0"); +} +function scaleAndClamp(x) { + return Math.max(0, Math.min(255, 255 * x)); +} +var ColorConverters = class { + static CMYK_G([c, y, m, k]) { + return ["G", 1 - Math.min(1, 0.3 * c + 0.59 * m + 0.11 * y + k)]; + } + static G_CMYK([g]) { + return ["CMYK", 0, 0, 0, 1 - g]; + } + static G_RGB([g]) { + return ["RGB", g, g, g]; + } + static G_rgb([g]) { + g = scaleAndClamp(g); + return [g, g, g]; + } + static G_HTML([g]) { + const G = makeColorComp(g); + return `#${G}${G}${G}`; + } + static RGB_G([r, g, b]) { + return ["G", 0.3 * r + 0.59 * g + 0.11 * b]; + } + static RGB_rgb(color) { + return color.map(scaleAndClamp); + } + static RGB_HTML(color) { + return `#${color.map(makeColorComp).join("")}`; + } + static T_HTML() { + return "#00000000"; + } + static T_rgb() { + return [null]; + } + static CMYK_RGB([c, y, m, k]) { + return ["RGB", 1 - Math.min(1, c + k), 1 - Math.min(1, m + k), 1 - Math.min(1, y + k)]; + } + static CMYK_rgb([c, y, m, k]) { + return [scaleAndClamp(1 - Math.min(1, c + k)), scaleAndClamp(1 - Math.min(1, m + k)), scaleAndClamp(1 - Math.min(1, y + k))]; + } + static CMYK_HTML(components) { + const rgb = this.CMYK_RGB(components).slice(1); + return this.RGB_HTML(rgb); + } + static RGB_CMYK([r, g, b]) { + const c = 1 - r; + const m = 1 - g; + const y = 1 - b; + const k = Math.min(c, m, y); + return ["CMYK", c, m, y, k]; + } +}; +var XfaLayer = class { + static setupStorage(html, id, element2, storage, intent) { + const storedData = storage.getValue(id, { + value: null + }); + switch (element2.name) { + case "textarea": + if (storedData.value !== null) { + html.textContent = storedData.value; + } + if (intent === "print") { + break; + } + html.addEventListener("input", (event) => { + storage.setValue(id, { + value: event.target.value + }); + }); + break; + case "input": + if (element2.attributes.type === "radio" || element2.attributes.type === "checkbox") { + if (storedData.value === element2.attributes.xfaOn) { + html.setAttribute("checked", true); + } else if (storedData.value === element2.attributes.xfaOff) { + html.removeAttribute("checked"); + } + if (intent === "print") { + break; + } + html.addEventListener("change", (event) => { + storage.setValue(id, { + value: event.target.checked ? event.target.getAttribute("xfaOn") : event.target.getAttribute("xfaOff") + }); + }); + } else { + if (storedData.value !== null) { + html.setAttribute("value", storedData.value); + } + if (intent === "print") { + break; + } + html.addEventListener("input", (event) => { + storage.setValue(id, { + value: event.target.value + }); + }); + } + break; + case "select": + if (storedData.value !== null) { + html.setAttribute("value", storedData.value); + for (const option of element2.children) { + if (option.attributes.value === storedData.value) { + option.attributes.selected = true; + } else if (option.attributes.hasOwnProperty("selected")) { + delete option.attributes.selected; + } + } + } + html.addEventListener("input", (event) => { + const options = event.target.options; + const value = options.selectedIndex === -1 ? "" : options[options.selectedIndex].value; + storage.setValue(id, { + value + }); + }); + break; + } + } + static setAttributes({ + html, + element: element2, + storage = null, + intent, + linkService + }) { + const { + attributes + } = element2; + const isHTMLAnchorElement = html instanceof HTMLAnchorElement; + if (attributes.type === "radio") { + attributes.name = `${attributes.name}-${intent}`; + } + for (const [key, value] of Object.entries(attributes)) { + if (value === null || value === void 0) { + continue; + } + switch (key) { + case "class": + if (value.length) { + html.setAttribute(key, value.join(" ")); + } + break; + case "dataId": + break; + case "id": + html.setAttribute("data-element-id", value); + break; + case "style": + Object.assign(html.style, value); + break; + case "textContent": + html.textContent = value; + break; + default: + if (!isHTMLAnchorElement || key !== "href" && key !== "newWindow") { + html.setAttribute(key, value); + } + } + } + if (isHTMLAnchorElement) { + linkService.addLinkAttributes(html, attributes.href, attributes.newWindow); + } + if (storage && attributes.dataId) { + this.setupStorage(html, attributes.dataId, element2, storage); + } + } + static render(parameters) { + var _a2, _b; + const storage = parameters.annotationStorage; + const linkService = parameters.linkService; + const root = parameters.xfaHtml; + const intent = parameters.intent || "display"; + const rootHtml = document.createElement(root.name); + if (root.attributes) { + this.setAttributes({ + html: rootHtml, + element: root, + intent, + linkService + }); + } + const isNotForRichText = intent !== "richText"; + const rootDiv = parameters.div; + rootDiv.append(rootHtml); + if (parameters.viewport) { + const transform = `matrix(${parameters.viewport.transform.join(",")})`; + rootDiv.style.transform = transform; + } + if (isNotForRichText) { + rootDiv.setAttribute("class", "xfaLayer xfaFont"); + } + const textDivs = []; + if (root.children.length === 0) { + if (root.value) { + const node = document.createTextNode(root.value); + rootHtml.append(node); + if (isNotForRichText && XfaText.shouldBuildText(root.name)) { + textDivs.push(node); + } + } + return { + textDivs + }; + } + const stack = [[root, -1, rootHtml]]; + while (stack.length > 0) { + const [parent, i, html] = stack.at(-1); + if (i + 1 === parent.children.length) { + stack.pop(); + continue; + } + const child = parent.children[++stack.at(-1)[1]]; + if (child === null) { + continue; + } + const { + name + } = child; + if (name === "#text") { + const node = document.createTextNode(child.value); + textDivs.push(node); + html.append(node); + continue; + } + const childHtml = ((_a2 = child == null ? void 0 : child.attributes) == null ? void 0 : _a2.xmlns) ? document.createElementNS(child.attributes.xmlns, name) : document.createElement(name); + html.append(childHtml); + if (child.attributes) { + this.setAttributes({ + html: childHtml, + element: child, + storage, + intent, + linkService + }); + } + if (((_b = child.children) == null ? void 0 : _b.length) > 0) { + stack.push([child, -1, childHtml]); + } else if (child.value) { + const node = document.createTextNode(child.value); + if (isNotForRichText && XfaText.shouldBuildText(name)) { + textDivs.push(node); + } + childHtml.append(node); + } + } + for (const el of rootDiv.querySelectorAll(".xfaNonInteractive input, .xfaNonInteractive textarea")) { + el.setAttribute("readOnly", true); + } + return { + textDivs + }; + } + static update(parameters) { + const transform = `matrix(${parameters.viewport.transform.join(",")})`; + parameters.div.style.transform = transform; + parameters.div.hidden = false; + } +}; +var DEFAULT_TAB_INDEX = 1e3; +var annotation_layer_DEFAULT_FONT_SIZE = 9; +var GetElementsByNameSet = /* @__PURE__ */ new WeakSet(); +function getRectDims(rect) { + return { + width: rect[2] - rect[0], + height: rect[3] - rect[1] + }; +} +var AnnotationElementFactory = class { + static create(parameters) { + const subtype = parameters.data.annotationType; + switch (subtype) { + case AnnotationType.LINK: + return new LinkAnnotationElement(parameters); + case AnnotationType.TEXT: + return new TextAnnotationElement(parameters); + case AnnotationType.WIDGET: + const fieldType = parameters.data.fieldType; + switch (fieldType) { + case "Tx": + return new TextWidgetAnnotationElement(parameters); + case "Btn": + if (parameters.data.radioButton) { + return new RadioButtonWidgetAnnotationElement(parameters); + } else if (parameters.data.checkBox) { + return new CheckboxWidgetAnnotationElement(parameters); + } + return new PushButtonWidgetAnnotationElement(parameters); + case "Ch": + return new ChoiceWidgetAnnotationElement(parameters); + case "Sig": + return new SignatureWidgetAnnotationElement(parameters); + } + return new WidgetAnnotationElement(parameters); + case AnnotationType.POPUP: + return new PopupAnnotationElement(parameters); + case AnnotationType.FREETEXT: + return new FreeTextAnnotationElement(parameters); + case AnnotationType.LINE: + return new LineAnnotationElement(parameters); + case AnnotationType.SQUARE: + return new SquareAnnotationElement(parameters); + case AnnotationType.CIRCLE: + return new CircleAnnotationElement(parameters); + case AnnotationType.POLYLINE: + return new PolylineAnnotationElement(parameters); + case AnnotationType.CARET: + return new CaretAnnotationElement(parameters); + case AnnotationType.INK: + return new InkAnnotationElement(parameters); + case AnnotationType.POLYGON: + return new PolygonAnnotationElement(parameters); + case AnnotationType.HIGHLIGHT: + return new HighlightAnnotationElement(parameters); + case AnnotationType.UNDERLINE: + return new UnderlineAnnotationElement(parameters); + case AnnotationType.SQUIGGLY: + return new SquigglyAnnotationElement(parameters); + case AnnotationType.STRIKEOUT: + return new StrikeOutAnnotationElement(parameters); + case AnnotationType.STAMP: + return new StampAnnotationElement(parameters); + case AnnotationType.FILEATTACHMENT: + return new FileAttachmentAnnotationElement(parameters); + default: + return new AnnotationElement(parameters); + } + } +}; +var _updates, _hasBorder, _popupElement, _setRectEdited, setRectEdited_fn; +var _AnnotationElement = class { + constructor(parameters, { + isRenderable = false, + ignoreBorder = false, + createQuadrilaterals = false + } = {}) { + __privateAdd(this, _setRectEdited); + __privateAdd(this, _updates, null); + __privateAdd(this, _hasBorder, false); + __privateAdd(this, _popupElement, null); + this.isRenderable = isRenderable; + this.data = parameters.data; + this.layer = parameters.layer; + this.linkService = parameters.linkService; + this.downloadManager = parameters.downloadManager; + this.imageResourcesPath = parameters.imageResourcesPath; + this.renderForms = parameters.renderForms; + this.svgFactory = parameters.svgFactory; + this.annotationStorage = parameters.annotationStorage; + this.enableScripting = parameters.enableScripting; + this.hasJSActions = parameters.hasJSActions; + this._fieldObjects = parameters.fieldObjects; + this.parent = parameters.parent; + if (isRenderable) { + this.container = this._createContainer(ignoreBorder); + } + if (createQuadrilaterals) { + this._createQuadrilaterals(); + } + } + static _hasPopupData({ + titleObj, + contentsObj, + richText + }) { + return !!((titleObj == null ? void 0 : titleObj.str) || (contentsObj == null ? void 0 : contentsObj.str) || (richText == null ? void 0 : richText.str)); + } + get _isEditable() { + return this.data.isEditable; + } + get hasPopupData() { + return _AnnotationElement._hasPopupData(this.data); + } + updateEdited(params) { + var _a2; + if (!this.container) { + return; + } + __privateGet(this, _updates) || __privateSet(this, _updates, { + rect: this.data.rect.slice(0) + }); + const { + rect + } = params; + if (rect) { + __privateMethod(this, _setRectEdited, setRectEdited_fn).call(this, rect); + } + (_a2 = __privateGet(this, _popupElement)) == null ? void 0 : _a2.popup.updateEdited(params); + } + resetEdited() { + var _a2; + if (!__privateGet(this, _updates)) { + return; + } + __privateMethod(this, _setRectEdited, setRectEdited_fn).call(this, __privateGet(this, _updates).rect); + (_a2 = __privateGet(this, _popupElement)) == null ? void 0 : _a2.popup.resetEdited(); + __privateSet(this, _updates, null); + } + _createContainer(ignoreBorder) { + const { + data, + parent: { + page, + viewport + } + } = this; + const container = document.createElement("section"); + container.setAttribute("data-annotation-id", data.id); + if (!(this instanceof WidgetAnnotationElement)) { + container.tabIndex = DEFAULT_TAB_INDEX; + } + const { + style + } = container; + style.zIndex = this.parent.zIndex++; + if (data.popupRef) { + container.setAttribute("aria-haspopup", "dialog"); + } + if (data.alternativeText) { + container.title = data.alternativeText; + } + if (data.noRotate) { + container.classList.add("norotate"); + } + if (!data.rect || this instanceof PopupAnnotationElement) { + const { + rotation: rotation2 + } = data; + if (!data.hasOwnCanvas && rotation2 !== 0) { + this.setRotation(rotation2, container); + } + return container; + } + const { + width, + height + } = getRectDims(data.rect); + if (!ignoreBorder && data.borderStyle.width > 0) { + style.borderWidth = `${data.borderStyle.width}px`; + const horizontalRadius = data.borderStyle.horizontalCornerRadius; + const verticalRadius = data.borderStyle.verticalCornerRadius; + if (horizontalRadius > 0 || verticalRadius > 0) { + const radius = `calc(${horizontalRadius}px * var(--scale-factor)) / calc(${verticalRadius}px * var(--scale-factor))`; + style.borderRadius = radius; + } else if (this instanceof RadioButtonWidgetAnnotationElement) { + const radius = `calc(${width}px * var(--scale-factor)) / calc(${height}px * var(--scale-factor))`; + style.borderRadius = radius; + } + switch (data.borderStyle.style) { + case AnnotationBorderStyleType.SOLID: + style.borderStyle = "solid"; + break; + case AnnotationBorderStyleType.DASHED: + style.borderStyle = "dashed"; + break; + case AnnotationBorderStyleType.BEVELED: + warn("Unimplemented border style: beveled"); + break; + case AnnotationBorderStyleType.INSET: + warn("Unimplemented border style: inset"); + break; + case AnnotationBorderStyleType.UNDERLINE: + style.borderBottomStyle = "solid"; + break; + default: + break; + } + const borderColor = data.borderColor || null; + if (borderColor) { + __privateSet(this, _hasBorder, true); + style.borderColor = Util.makeHexColor(borderColor[0] | 0, borderColor[1] | 0, borderColor[2] | 0); + } else { + style.borderWidth = 0; + } + } + const rect = Util.normalizeRect([data.rect[0], page.view[3] - data.rect[1] + page.view[1], data.rect[2], page.view[3] - data.rect[3] + page.view[1]]); + const { + pageWidth, + pageHeight, + pageX, + pageY + } = viewport.rawDims; + style.left = `${100 * (rect[0] - pageX) / pageWidth}%`; + style.top = `${100 * (rect[1] - pageY) / pageHeight}%`; + const { + rotation + } = data; + if (data.hasOwnCanvas || rotation === 0) { + style.width = `${100 * width / pageWidth}%`; + style.height = `${100 * height / pageHeight}%`; + } else { + this.setRotation(rotation, container); + } + return container; + } + setRotation(angle, container = this.container) { + if (!this.data.rect) { + return; + } + const { + pageWidth, + pageHeight + } = this.parent.viewport.rawDims; + const { + width, + height + } = getRectDims(this.data.rect); + let elementWidth, elementHeight; + if (angle % 180 === 0) { + elementWidth = 100 * width / pageWidth; + elementHeight = 100 * height / pageHeight; + } else { + elementWidth = 100 * height / pageWidth; + elementHeight = 100 * width / pageHeight; + } + container.style.width = `${elementWidth}%`; + container.style.height = `${elementHeight}%`; + container.setAttribute("data-main-rotation", (360 - angle) % 360); + } + get _commonActions() { + const setColor = (jsName, styleName, event) => { + const color = event.detail[jsName]; + const colorType = color[0]; + const colorArray = color.slice(1); + event.target.style[styleName] = ColorConverters[`${colorType}_HTML`](colorArray); + this.annotationStorage.setValue(this.data.id, { + [styleName]: ColorConverters[`${colorType}_rgb`](colorArray) + }); + }; + return shadow(this, "_commonActions", { + display: (event) => { + const { + display + } = event.detail; + const hidden = display % 2 === 1; + this.container.style.visibility = hidden ? "hidden" : "visible"; + this.annotationStorage.setValue(this.data.id, { + noView: hidden, + noPrint: display === 1 || display === 2 + }); + }, + print: (event) => { + this.annotationStorage.setValue(this.data.id, { + noPrint: !event.detail.print + }); + }, + hidden: (event) => { + const { + hidden + } = event.detail; + this.container.style.visibility = hidden ? "hidden" : "visible"; + this.annotationStorage.setValue(this.data.id, { + noPrint: hidden, + noView: hidden + }); + }, + focus: (event) => { + setTimeout(() => event.target.focus({ + preventScroll: false + }), 0); + }, + userName: (event) => { + event.target.title = event.detail.userName; + }, + readonly: (event) => { + event.target.disabled = event.detail.readonly; + }, + required: (event) => { + this._setRequired(event.target, event.detail.required); + }, + bgColor: (event) => { + setColor("bgColor", "backgroundColor", event); + }, + fillColor: (event) => { + setColor("fillColor", "backgroundColor", event); + }, + fgColor: (event) => { + setColor("fgColor", "color", event); + }, + textColor: (event) => { + setColor("textColor", "color", event); + }, + borderColor: (event) => { + setColor("borderColor", "borderColor", event); + }, + strokeColor: (event) => { + setColor("strokeColor", "borderColor", event); + }, + rotation: (event) => { + const angle = event.detail.rotation; + this.setRotation(angle); + this.annotationStorage.setValue(this.data.id, { + rotation: angle + }); + } + }); + } + _dispatchEventFromSandbox(actions, jsEvent) { + const commonActions = this._commonActions; + for (const name of Object.keys(jsEvent.detail)) { + const action = actions[name] || commonActions[name]; + action == null ? void 0 : action(jsEvent); + } + } + _setDefaultPropertiesFromJS(element2) { + if (!this.enableScripting) { + return; + } + const storedData = this.annotationStorage.getRawValue(this.data.id); + if (!storedData) { + return; + } + const commonActions = this._commonActions; + for (const [actionName, detail] of Object.entries(storedData)) { + const action = commonActions[actionName]; + if (action) { + const eventProxy = { + detail: { + [actionName]: detail + }, + target: element2 + }; + action(eventProxy); + delete storedData[actionName]; + } + } + } + _createQuadrilaterals() { + if (!this.container) { + return; + } + const { + quadPoints + } = this.data; + if (!quadPoints) { + return; + } + const [rectBlX, rectBlY, rectTrX, rectTrY] = this.data.rect.map((x) => Math.fround(x)); + if (quadPoints.length === 8) { + const [trX, trY, blX, blY] = quadPoints.subarray(2, 6); + if (rectTrX === trX && rectTrY === trY && rectBlX === blX && rectBlY === blY) { + return; + } + } + const { + style + } = this.container; + let svgBuffer; + if (__privateGet(this, _hasBorder)) { + const { + borderColor, + borderWidth + } = style; + style.borderWidth = 0; + svgBuffer = ["url('data:image/svg+xml;utf8,", ``, ``]; + this.container.classList.add("hasBorder"); + } + const width = rectTrX - rectBlX; + const height = rectTrY - rectBlY; + const { + svgFactory + } = this; + const svg = svgFactory.createElement("svg"); + svg.classList.add("quadrilateralsContainer"); + svg.setAttribute("width", 0); + svg.setAttribute("height", 0); + const defs = svgFactory.createElement("defs"); + svg.append(defs); + const clipPath = svgFactory.createElement("clipPath"); + const id = `clippath_${this.data.id}`; + clipPath.setAttribute("id", id); + clipPath.setAttribute("clipPathUnits", "objectBoundingBox"); + defs.append(clipPath); + for (let i = 2, ii = quadPoints.length; i < ii; i += 8) { + const trX = quadPoints[i]; + const trY = quadPoints[i + 1]; + const blX = quadPoints[i + 2]; + const blY = quadPoints[i + 3]; + const rect = svgFactory.createElement("rect"); + const x = (blX - rectBlX) / width; + const y = (rectTrY - trY) / height; + const rectWidth = (trX - blX) / width; + const rectHeight = (trY - blY) / height; + rect.setAttribute("x", x); + rect.setAttribute("y", y); + rect.setAttribute("width", rectWidth); + rect.setAttribute("height", rectHeight); + clipPath.append(rect); + svgBuffer == null ? void 0 : svgBuffer.push(``); + } + if (__privateGet(this, _hasBorder)) { + svgBuffer.push(`')`); + style.backgroundImage = svgBuffer.join(""); + } + this.container.append(svg); + this.container.style.clipPath = `url(#${id})`; + } + _createPopup() { + const { + container, + data + } = this; + container.setAttribute("aria-haspopup", "dialog"); + const popup = __privateSet(this, _popupElement, new PopupAnnotationElement({ + data: { + color: data.color, + titleObj: data.titleObj, + modificationDate: data.modificationDate, + contentsObj: data.contentsObj, + richText: data.richText, + parentRect: data.rect, + borderStyle: 0, + id: `popup_${data.id}`, + rotation: data.rotation + }, + parent: this.parent, + elements: [this] + })); + this.parent.div.append(popup.render()); + } + render() { + unreachable("Abstract method `AnnotationElement.render` called"); + } + _getElementsByName(name, skipId = null) { + const fields = []; + if (this._fieldObjects) { + const fieldObj = this._fieldObjects[name]; + if (fieldObj) { + for (const { + page, + id, + exportValues + } of fieldObj) { + if (page === -1) { + continue; + } + if (id === skipId) { + continue; + } + const exportValue = typeof exportValues === "string" ? exportValues : null; + const domElement = document.querySelector(`[data-element-id="${id}"]`); + if (domElement && !GetElementsByNameSet.has(domElement)) { + warn(`_getElementsByName - element not allowed: ${id}`); + continue; + } + fields.push({ + id, + exportValue, + domElement + }); + } + } + return fields; + } + for (const domElement of document.getElementsByName(name)) { + const { + exportValue + } = domElement; + const id = domElement.getAttribute("data-element-id"); + if (id === skipId) { + continue; + } + if (!GetElementsByNameSet.has(domElement)) { + continue; + } + fields.push({ + id, + exportValue, + domElement + }); + } + return fields; + } + show() { + var _a2; + if (this.container) { + this.container.hidden = false; + } + (_a2 = this.popup) == null ? void 0 : _a2.maybeShow(); + } + hide() { + var _a2; + if (this.container) { + this.container.hidden = true; + } + (_a2 = this.popup) == null ? void 0 : _a2.forceHide(); + } + getElementsToTriggerPopup() { + return this.container; + } + addHighlightArea() { + const triggers = this.getElementsToTriggerPopup(); + if (Array.isArray(triggers)) { + for (const element2 of triggers) { + element2.classList.add("highlightArea"); + } + } else { + triggers.classList.add("highlightArea"); + } + } + _editOnDoubleClick() { + if (!this._isEditable) { + return; + } + const { + annotationEditorType: mode, + data: { + id: editId + } + } = this; + this.container.addEventListener("dblclick", () => { + var _a2; + (_a2 = this.linkService.eventBus) == null ? void 0 : _a2.dispatch("switchannotationeditormode", { + source: this, + mode, + editId + }); + }); + } +}; +var AnnotationElement = _AnnotationElement; +_updates = new WeakMap(); +_hasBorder = new WeakMap(); +_popupElement = new WeakMap(); +_setRectEdited = new WeakSet(); +setRectEdited_fn = function(rect) { + const { + container: { + style + }, + data: { + rect: currentRect, + rotation + }, + parent: { + viewport: { + rawDims: { + pageWidth, + pageHeight, + pageX, + pageY + } + } + } + } = this; + currentRect == null ? void 0 : currentRect.splice(0, 4, ...rect); + const { + width, + height + } = getRectDims(rect); + style.left = `${100 * (rect[0] - pageX) / pageWidth}%`; + style.top = `${100 * (pageHeight - rect[3] + pageY) / pageHeight}%`; + if (rotation === 0) { + style.width = `${100 * width / pageWidth}%`; + style.height = `${100 * height / pageHeight}%`; + } else { + this.setRotation(rotation); + } +}; +var _setInternalLink, setInternalLink_fn, _bindAttachment, bindAttachment_fn, _bindSetOCGState, bindSetOCGState_fn; +var LinkAnnotationElement = class extends AnnotationElement { + constructor(parameters, options = null) { + super(parameters, { + isRenderable: true, + ignoreBorder: !!(options == null ? void 0 : options.ignoreBorder), + createQuadrilaterals: true + }); + __privateAdd(this, _setInternalLink); + __privateAdd(this, _bindAttachment); + __privateAdd(this, _bindSetOCGState); + this.isTooltipOnly = parameters.data.isTooltipOnly; + } + render() { + const { + data, + linkService + } = this; + const link = document.createElement("a"); + link.setAttribute("data-element-id", data.id); + let isBound = false; + if (data.url) { + linkService.addLinkAttributes(link, data.url, data.newWindow); + isBound = true; + } else if (data.action) { + this._bindNamedAction(link, data.action); + isBound = true; + } else if (data.attachment) { + __privateMethod(this, _bindAttachment, bindAttachment_fn).call(this, link, data.attachment, data.attachmentDest); + isBound = true; + } else if (data.setOCGState) { + __privateMethod(this, _bindSetOCGState, bindSetOCGState_fn).call(this, link, data.setOCGState); + isBound = true; + } else if (data.dest) { + this._bindLink(link, data.dest); + isBound = true; + } else { + if (data.actions && (data.actions.Action || data.actions["Mouse Up"] || data.actions["Mouse Down"]) && this.enableScripting && this.hasJSActions) { + this._bindJSAction(link, data); + isBound = true; + } + if (data.resetForm) { + this._bindResetFormAction(link, data.resetForm); + isBound = true; + } else if (this.isTooltipOnly && !isBound) { + this._bindLink(link, ""); + isBound = true; + } + } + this.container.classList.add("linkAnnotation"); + if (isBound) { + this.container.append(link); + } + return this.container; + } + _bindLink(link, destination) { + link.href = this.linkService.getDestinationHash(destination); + link.onclick = () => { + if (destination) { + this.linkService.goToDestination(destination); + } + return false; + }; + if (destination || destination === "") { + __privateMethod(this, _setInternalLink, setInternalLink_fn).call(this); + } + } + _bindNamedAction(link, action) { + link.href = this.linkService.getAnchorUrl(""); + link.onclick = () => { + this.linkService.executeNamedAction(action); + return false; + }; + __privateMethod(this, _setInternalLink, setInternalLink_fn).call(this); + } + _bindJSAction(link, data) { + link.href = this.linkService.getAnchorUrl(""); + const map = /* @__PURE__ */ new Map([["Action", "onclick"], ["Mouse Up", "onmouseup"], ["Mouse Down", "onmousedown"]]); + for (const name of Object.keys(data.actions)) { + const jsName = map.get(name); + if (!jsName) { + continue; + } + link[jsName] = () => { + var _a2; + (_a2 = this.linkService.eventBus) == null ? void 0 : _a2.dispatch("dispatcheventinsandbox", { + source: this, + detail: { + id: data.id, + name + } + }); + return false; + }; + } + if (!link.onclick) { + link.onclick = () => false; + } + __privateMethod(this, _setInternalLink, setInternalLink_fn).call(this); + } + _bindResetFormAction(link, resetForm) { + const otherClickAction = link.onclick; + if (!otherClickAction) { + link.href = this.linkService.getAnchorUrl(""); + } + __privateMethod(this, _setInternalLink, setInternalLink_fn).call(this); + if (!this._fieldObjects) { + warn(`_bindResetFormAction - "resetForm" action not supported, ensure that the \`fieldObjects\` parameter is provided.`); + if (!otherClickAction) { + link.onclick = () => false; + } + return; + } + link.onclick = () => { + var _a2; + otherClickAction == null ? void 0 : otherClickAction(); + const { + fields: resetFormFields, + refs: resetFormRefs, + include + } = resetForm; + const allFields = []; + if (resetFormFields.length !== 0 || resetFormRefs.length !== 0) { + const fieldIds = new Set(resetFormRefs); + for (const fieldName of resetFormFields) { + const fields = this._fieldObjects[fieldName] || []; + for (const { + id + } of fields) { + fieldIds.add(id); + } + } + for (const fields of Object.values(this._fieldObjects)) { + for (const field of fields) { + if (fieldIds.has(field.id) === include) { + allFields.push(field); + } + } + } + } else { + for (const fields of Object.values(this._fieldObjects)) { + allFields.push(...fields); + } + } + const storage = this.annotationStorage; + const allIds = []; + for (const field of allFields) { + const { + id + } = field; + allIds.push(id); + switch (field.type) { + case "text": { + const value = field.defaultValue || ""; + storage.setValue(id, { + value + }); + break; + } + case "checkbox": + case "radiobutton": { + const value = field.defaultValue === field.exportValues; + storage.setValue(id, { + value + }); + break; + } + case "combobox": + case "listbox": { + const value = field.defaultValue || ""; + storage.setValue(id, { + value + }); + break; + } + default: + continue; + } + const domElement = document.querySelector(`[data-element-id="${id}"]`); + if (!domElement) { + continue; + } else if (!GetElementsByNameSet.has(domElement)) { + warn(`_bindResetFormAction - element not allowed: ${id}`); + continue; + } + domElement.dispatchEvent(new Event("resetform")); + } + if (this.enableScripting) { + (_a2 = this.linkService.eventBus) == null ? void 0 : _a2.dispatch("dispatcheventinsandbox", { + source: this, + detail: { + id: "app", + ids: allIds, + name: "ResetForm" + } + }); + } + return false; + }; + } +}; +_setInternalLink = new WeakSet(); +setInternalLink_fn = function() { + this.container.setAttribute("data-internal-link", ""); +}; +_bindAttachment = new WeakSet(); +bindAttachment_fn = function(link, attachment, dest = null) { + link.href = this.linkService.getAnchorUrl(""); + if (attachment.description) { + link.title = attachment.description; + } + link.onclick = () => { + var _a2; + (_a2 = this.downloadManager) == null ? void 0 : _a2.openOrDownloadData(attachment.content, attachment.filename, dest); + return false; + }; + __privateMethod(this, _setInternalLink, setInternalLink_fn).call(this); +}; +_bindSetOCGState = new WeakSet(); +bindSetOCGState_fn = function(link, action) { + link.href = this.linkService.getAnchorUrl(""); + link.onclick = () => { + this.linkService.executeSetOCGState(action); + return false; + }; + __privateMethod(this, _setInternalLink, setInternalLink_fn).call(this); +}; +var TextAnnotationElement = class extends AnnotationElement { + constructor(parameters) { + super(parameters, { + isRenderable: true + }); + } + render() { + this.container.classList.add("textAnnotation"); + const image = document.createElement("img"); + image.src = this.imageResourcesPath + "annotation-" + this.data.name.toLowerCase() + ".svg"; + image.setAttribute("data-l10n-id", "pdfjs-text-annotation-type"); + image.setAttribute("data-l10n-args", JSON.stringify({ + type: this.data.name + })); + if (!this.data.popupRef && this.hasPopupData) { + this._createPopup(); + } + this.container.append(image); + return this.container; + } +}; +var WidgetAnnotationElement = class extends AnnotationElement { + render() { + return this.container; + } + showElementAndHideCanvas(element2) { + var _a2; + if (this.data.hasOwnCanvas) { + if (((_a2 = element2.previousSibling) == null ? void 0 : _a2.nodeName) === "CANVAS") { + element2.previousSibling.hidden = true; + } + element2.hidden = false; + } + } + _getKeyModifier(event) { + return util_FeatureTest.platform.isMac ? event.metaKey : event.ctrlKey; + } + _setEventListener(element2, elementData, baseName, eventName, valueGetter) { + if (baseName.includes("mouse")) { + element2.addEventListener(baseName, (event) => { + var _a2; + (_a2 = this.linkService.eventBus) == null ? void 0 : _a2.dispatch("dispatcheventinsandbox", { + source: this, + detail: { + id: this.data.id, + name: eventName, + value: valueGetter(event), + shift: event.shiftKey, + modifier: this._getKeyModifier(event) + } + }); + }); + } else { + element2.addEventListener(baseName, (event) => { + var _a2; + if (baseName === "blur") { + if (!elementData.focused || !event.relatedTarget) { + return; + } + elementData.focused = false; + } else if (baseName === "focus") { + if (elementData.focused) { + return; + } + elementData.focused = true; + } + if (!valueGetter) { + return; + } + (_a2 = this.linkService.eventBus) == null ? void 0 : _a2.dispatch("dispatcheventinsandbox", { + source: this, + detail: { + id: this.data.id, + name: eventName, + value: valueGetter(event) + } + }); + }); + } + } + _setEventListeners(element2, elementData, names, getter) { + var _a2, _b, _c; + for (const [baseName, eventName] of names) { + if (eventName === "Action" || ((_a2 = this.data.actions) == null ? void 0 : _a2[eventName])) { + if (eventName === "Focus" || eventName === "Blur") { + elementData || (elementData = { + focused: false + }); + } + this._setEventListener(element2, elementData, baseName, eventName, getter); + if (eventName === "Focus" && !((_b = this.data.actions) == null ? void 0 : _b.Blur)) { + this._setEventListener(element2, elementData, "blur", "Blur", null); + } else if (eventName === "Blur" && !((_c = this.data.actions) == null ? void 0 : _c.Focus)) { + this._setEventListener(element2, elementData, "focus", "Focus", null); + } + } + } + } + _setBackgroundColor(element2) { + const color = this.data.backgroundColor || null; + element2.style.backgroundColor = color === null ? "transparent" : Util.makeHexColor(color[0], color[1], color[2]); + } + _setTextStyle(element2) { + const TEXT_ALIGNMENT = ["left", "center", "right"]; + const { + fontColor + } = this.data.defaultAppearanceData; + const fontSize = this.data.defaultAppearanceData.fontSize || annotation_layer_DEFAULT_FONT_SIZE; + const style = element2.style; + let computedFontSize; + const BORDER_SIZE = 2; + const roundToOneDecimal = (x) => Math.round(10 * x) / 10; + if (this.data.multiLine) { + const height = Math.abs(this.data.rect[3] - this.data.rect[1] - BORDER_SIZE); + const numberOfLines = Math.round(height / (LINE_FACTOR * fontSize)) || 1; + const lineHeight = height / numberOfLines; + computedFontSize = Math.min(fontSize, roundToOneDecimal(lineHeight / LINE_FACTOR)); + } else { + const height = Math.abs(this.data.rect[3] - this.data.rect[1] - BORDER_SIZE); + computedFontSize = Math.min(fontSize, roundToOneDecimal(height / LINE_FACTOR)); + } + style.fontSize = `calc(${computedFontSize}px * var(--scale-factor))`; + style.color = Util.makeHexColor(fontColor[0], fontColor[1], fontColor[2]); + if (this.data.textAlignment !== null) { + style.textAlign = TEXT_ALIGNMENT[this.data.textAlignment]; + } + } + _setRequired(element2, isRequired) { + if (isRequired) { + element2.setAttribute("required", true); + } else { + element2.removeAttribute("required"); + } + element2.setAttribute("aria-required", isRequired); + } +}; +var TextWidgetAnnotationElement = class extends WidgetAnnotationElement { + constructor(parameters) { + const isRenderable = parameters.renderForms || parameters.data.hasOwnCanvas || !parameters.data.hasAppearance && !!parameters.data.fieldValue; + super(parameters, { + isRenderable + }); + } + setPropertyOnSiblings(base, key, value, keyInStorage) { + const storage = this.annotationStorage; + for (const element2 of this._getElementsByName(base.name, base.id)) { + if (element2.domElement) { + element2.domElement[key] = value; + } + storage.setValue(element2.id, { + [keyInStorage]: value + }); + } + } + render() { + var _a2, _b; + const storage = this.annotationStorage; + const id = this.data.id; + this.container.classList.add("textWidgetAnnotation"); + let element2 = null; + if (this.renderForms) { + const storedData = storage.getValue(id, { + value: this.data.fieldValue + }); + let textContent = storedData.value || ""; + const maxLen = storage.getValue(id, { + charLimit: this.data.maxLen + }).charLimit; + if (maxLen && textContent.length > maxLen) { + textContent = textContent.slice(0, maxLen); + } + let fieldFormattedValues = storedData.formattedValue || ((_a2 = this.data.textContent) == null ? void 0 : _a2.join("\n")) || null; + if (fieldFormattedValues && this.data.comb) { + fieldFormattedValues = fieldFormattedValues.replaceAll(/\s+/g, ""); + } + const elementData = { + userValue: textContent, + formattedValue: fieldFormattedValues, + lastCommittedValue: null, + commitKey: 1, + focused: false + }; + if (this.data.multiLine) { + element2 = document.createElement("textarea"); + element2.textContent = fieldFormattedValues != null ? fieldFormattedValues : textContent; + if (this.data.doNotScroll) { + element2.style.overflowY = "hidden"; + } + } else { + element2 = document.createElement("input"); + element2.type = "text"; + element2.setAttribute("value", fieldFormattedValues != null ? fieldFormattedValues : textContent); + if (this.data.doNotScroll) { + element2.style.overflowX = "hidden"; + } + } + if (this.data.hasOwnCanvas) { + element2.hidden = true; + } + GetElementsByNameSet.add(element2); + element2.setAttribute("data-element-id", id); + element2.disabled = this.data.readOnly; + element2.name = this.data.fieldName; + element2.tabIndex = DEFAULT_TAB_INDEX; + this._setRequired(element2, this.data.required); + if (maxLen) { + element2.maxLength = maxLen; + } + element2.addEventListener("input", (event) => { + storage.setValue(id, { + value: event.target.value + }); + this.setPropertyOnSiblings(element2, "value", event.target.value, "value"); + elementData.formattedValue = null; + }); + element2.addEventListener("resetform", (event) => { + var _a3; + const defaultValue = (_a3 = this.data.defaultFieldValue) != null ? _a3 : ""; + element2.value = elementData.userValue = defaultValue; + elementData.formattedValue = null; + }); + let blurListener = (event) => { + const { + formattedValue + } = elementData; + if (formattedValue !== null && formattedValue !== void 0) { + event.target.value = formattedValue; + } + event.target.scrollLeft = 0; + }; + if (this.enableScripting && this.hasJSActions) { + element2.addEventListener("focus", (event) => { + var _a3; + if (elementData.focused) { + return; + } + const { + target + } = event; + if (elementData.userValue) { + target.value = elementData.userValue; + } + elementData.lastCommittedValue = target.value; + elementData.commitKey = 1; + if (!((_a3 = this.data.actions) == null ? void 0 : _a3.Focus)) { + elementData.focused = true; + } + }); + element2.addEventListener("updatefromsandbox", (jsEvent) => { + this.showElementAndHideCanvas(jsEvent.target); + const actions = { + value(event) { + var _a3; + elementData.userValue = (_a3 = event.detail.value) != null ? _a3 : ""; + storage.setValue(id, { + value: elementData.userValue.toString() + }); + event.target.value = elementData.userValue; + }, + formattedValue(event) { + const { + formattedValue + } = event.detail; + elementData.formattedValue = formattedValue; + if (formattedValue !== null && formattedValue !== void 0 && event.target !== document.activeElement) { + event.target.value = formattedValue; + } + storage.setValue(id, { + formattedValue + }); + }, + selRange(event) { + event.target.setSelectionRange(...event.detail.selRange); + }, + charLimit: (event) => { + var _a3; + const { + charLimit + } = event.detail; + const { + target + } = event; + if (charLimit === 0) { + target.removeAttribute("maxLength"); + return; + } + target.setAttribute("maxLength", charLimit); + let value = elementData.userValue; + if (!value || value.length <= charLimit) { + return; + } + value = value.slice(0, charLimit); + target.value = elementData.userValue = value; + storage.setValue(id, { + value + }); + (_a3 = this.linkService.eventBus) == null ? void 0 : _a3.dispatch("dispatcheventinsandbox", { + source: this, + detail: { + id, + name: "Keystroke", + value, + willCommit: true, + commitKey: 1, + selStart: target.selectionStart, + selEnd: target.selectionEnd + } + }); + } + }; + this._dispatchEventFromSandbox(actions, jsEvent); + }); + element2.addEventListener("keydown", (event) => { + var _a3; + elementData.commitKey = 1; + let commitKey = -1; + if (event.key === "Escape") { + commitKey = 0; + } else if (event.key === "Enter" && !this.data.multiLine) { + commitKey = 2; + } else if (event.key === "Tab") { + elementData.commitKey = 3; + } + if (commitKey === -1) { + return; + } + const { + value + } = event.target; + if (elementData.lastCommittedValue === value) { + return; + } + elementData.lastCommittedValue = value; + elementData.userValue = value; + (_a3 = this.linkService.eventBus) == null ? void 0 : _a3.dispatch("dispatcheventinsandbox", { + source: this, + detail: { + id, + name: "Keystroke", + value, + willCommit: true, + commitKey, + selStart: event.target.selectionStart, + selEnd: event.target.selectionEnd + } + }); + }); + const _blurListener = blurListener; + blurListener = null; + element2.addEventListener("blur", (event) => { + var _a3, _b2; + if (!elementData.focused || !event.relatedTarget) { + return; + } + if (!((_a3 = this.data.actions) == null ? void 0 : _a3.Blur)) { + elementData.focused = false; + } + const { + value + } = event.target; + elementData.userValue = value; + if (elementData.lastCommittedValue !== value) { + (_b2 = this.linkService.eventBus) == null ? void 0 : _b2.dispatch("dispatcheventinsandbox", { + source: this, + detail: { + id, + name: "Keystroke", + value, + willCommit: true, + commitKey: elementData.commitKey, + selStart: event.target.selectionStart, + selEnd: event.target.selectionEnd + } + }); + } + _blurListener(event); + }); + if ((_b = this.data.actions) == null ? void 0 : _b.Keystroke) { + element2.addEventListener("beforeinput", (event) => { + var _a3; + elementData.lastCommittedValue = null; + const { + data, + target + } = event; + const { + value, + selectionStart, + selectionEnd + } = target; + let selStart = selectionStart, selEnd = selectionEnd; + switch (event.inputType) { + case "deleteWordBackward": { + const match = value.substring(0, selectionStart).match(/\w*[^\w]*$/); + if (match) { + selStart -= match[0].length; + } + break; + } + case "deleteWordForward": { + const match = value.substring(selectionStart).match(/^[^\w]*\w*/); + if (match) { + selEnd += match[0].length; + } + break; + } + case "deleteContentBackward": + if (selectionStart === selectionEnd) { + selStart -= 1; + } + break; + case "deleteContentForward": + if (selectionStart === selectionEnd) { + selEnd += 1; + } + break; + } + event.preventDefault(); + (_a3 = this.linkService.eventBus) == null ? void 0 : _a3.dispatch("dispatcheventinsandbox", { + source: this, + detail: { + id, + name: "Keystroke", + value, + change: data || "", + willCommit: false, + selStart, + selEnd + } + }); + }); + } + this._setEventListeners(element2, elementData, [["focus", "Focus"], ["blur", "Blur"], ["mousedown", "Mouse Down"], ["mouseenter", "Mouse Enter"], ["mouseleave", "Mouse Exit"], ["mouseup", "Mouse Up"]], (event) => event.target.value); + } + if (blurListener) { + element2.addEventListener("blur", blurListener); + } + if (this.data.comb) { + const fieldWidth = this.data.rect[2] - this.data.rect[0]; + const combWidth = fieldWidth / maxLen; + element2.classList.add("comb"); + element2.style.letterSpacing = `calc(${combWidth}px * var(--scale-factor) - 1ch)`; + } + } else { + element2 = document.createElement("div"); + element2.textContent = this.data.fieldValue; + element2.style.verticalAlign = "middle"; + element2.style.display = "table-cell"; + if (this.data.hasOwnCanvas) { + element2.hidden = true; + } + } + this._setTextStyle(element2); + this._setBackgroundColor(element2); + this._setDefaultPropertiesFromJS(element2); + this.container.append(element2); + return this.container; + } +}; +var SignatureWidgetAnnotationElement = class extends WidgetAnnotationElement { + constructor(parameters) { + super(parameters, { + isRenderable: !!parameters.data.hasOwnCanvas + }); + } +}; +var CheckboxWidgetAnnotationElement = class extends WidgetAnnotationElement { + constructor(parameters) { + super(parameters, { + isRenderable: parameters.renderForms + }); + } + render() { + const storage = this.annotationStorage; + const data = this.data; + const id = data.id; + let value = storage.getValue(id, { + value: data.exportValue === data.fieldValue + }).value; + if (typeof value === "string") { + value = value !== "Off"; + storage.setValue(id, { + value + }); + } + this.container.classList.add("buttonWidgetAnnotation", "checkBox"); + const element2 = document.createElement("input"); + GetElementsByNameSet.add(element2); + element2.setAttribute("data-element-id", id); + element2.disabled = data.readOnly; + this._setRequired(element2, this.data.required); + element2.type = "checkbox"; + element2.name = data.fieldName; + if (value) { + element2.setAttribute("checked", true); + } + element2.setAttribute("exportValue", data.exportValue); + element2.tabIndex = DEFAULT_TAB_INDEX; + element2.addEventListener("change", (event) => { + const { + name, + checked + } = event.target; + for (const checkbox of this._getElementsByName(name, id)) { + const curChecked = checked && checkbox.exportValue === data.exportValue; + if (checkbox.domElement) { + checkbox.domElement.checked = curChecked; + } + storage.setValue(checkbox.id, { + value: curChecked + }); + } + storage.setValue(id, { + value: checked + }); + }); + element2.addEventListener("resetform", (event) => { + const defaultValue = data.defaultFieldValue || "Off"; + event.target.checked = defaultValue === data.exportValue; + }); + if (this.enableScripting && this.hasJSActions) { + element2.addEventListener("updatefromsandbox", (jsEvent) => { + const actions = { + value(event) { + event.target.checked = event.detail.value !== "Off"; + storage.setValue(id, { + value: event.target.checked + }); + } + }; + this._dispatchEventFromSandbox(actions, jsEvent); + }); + this._setEventListeners(element2, null, [["change", "Validate"], ["change", "Action"], ["focus", "Focus"], ["blur", "Blur"], ["mousedown", "Mouse Down"], ["mouseenter", "Mouse Enter"], ["mouseleave", "Mouse Exit"], ["mouseup", "Mouse Up"]], (event) => event.target.checked); + } + this._setBackgroundColor(element2); + this._setDefaultPropertiesFromJS(element2); + this.container.append(element2); + return this.container; + } +}; +var RadioButtonWidgetAnnotationElement = class extends WidgetAnnotationElement { + constructor(parameters) { + super(parameters, { + isRenderable: parameters.renderForms + }); + } + render() { + this.container.classList.add("buttonWidgetAnnotation", "radioButton"); + const storage = this.annotationStorage; + const data = this.data; + const id = data.id; + let value = storage.getValue(id, { + value: data.fieldValue === data.buttonValue + }).value; + if (typeof value === "string") { + value = value !== data.buttonValue; + storage.setValue(id, { + value + }); + } + if (value) { + for (const radio of this._getElementsByName(data.fieldName, id)) { + storage.setValue(radio.id, { + value: false + }); + } + } + const element2 = document.createElement("input"); + GetElementsByNameSet.add(element2); + element2.setAttribute("data-element-id", id); + element2.disabled = data.readOnly; + this._setRequired(element2, this.data.required); + element2.type = "radio"; + element2.name = data.fieldName; + if (value) { + element2.setAttribute("checked", true); + } + element2.tabIndex = DEFAULT_TAB_INDEX; + element2.addEventListener("change", (event) => { + const { + name, + checked + } = event.target; + for (const radio of this._getElementsByName(name, id)) { + storage.setValue(radio.id, { + value: false + }); + } + storage.setValue(id, { + value: checked + }); + }); + element2.addEventListener("resetform", (event) => { + const defaultValue = data.defaultFieldValue; + event.target.checked = defaultValue !== null && defaultValue !== void 0 && defaultValue === data.buttonValue; + }); + if (this.enableScripting && this.hasJSActions) { + const pdfButtonValue = data.buttonValue; + element2.addEventListener("updatefromsandbox", (jsEvent) => { + const actions = { + value: (event) => { + const checked = pdfButtonValue === event.detail.value; + for (const radio of this._getElementsByName(event.target.name)) { + const curChecked = checked && radio.id === id; + if (radio.domElement) { + radio.domElement.checked = curChecked; + } + storage.setValue(radio.id, { + value: curChecked + }); + } + } + }; + this._dispatchEventFromSandbox(actions, jsEvent); + }); + this._setEventListeners(element2, null, [["change", "Validate"], ["change", "Action"], ["focus", "Focus"], ["blur", "Blur"], ["mousedown", "Mouse Down"], ["mouseenter", "Mouse Enter"], ["mouseleave", "Mouse Exit"], ["mouseup", "Mouse Up"]], (event) => event.target.checked); + } + this._setBackgroundColor(element2); + this._setDefaultPropertiesFromJS(element2); + this.container.append(element2); + return this.container; + } +}; +var PushButtonWidgetAnnotationElement = class extends LinkAnnotationElement { + constructor(parameters) { + super(parameters, { + ignoreBorder: parameters.data.hasAppearance + }); + } + render() { + const container = super.render(); + container.classList.add("buttonWidgetAnnotation", "pushButton"); + const linkElement = container.lastChild; + if (this.enableScripting && this.hasJSActions && linkElement) { + this._setDefaultPropertiesFromJS(linkElement); + linkElement.addEventListener("updatefromsandbox", (jsEvent) => { + this._dispatchEventFromSandbox({}, jsEvent); + }); + } + return container; + } +}; +var ChoiceWidgetAnnotationElement = class extends WidgetAnnotationElement { + constructor(parameters) { + super(parameters, { + isRenderable: parameters.renderForms + }); + } + render() { + this.container.classList.add("choiceWidgetAnnotation"); + const storage = this.annotationStorage; + const id = this.data.id; + const storedData = storage.getValue(id, { + value: this.data.fieldValue + }); + const selectElement = document.createElement("select"); + GetElementsByNameSet.add(selectElement); + selectElement.setAttribute("data-element-id", id); + selectElement.disabled = this.data.readOnly; + this._setRequired(selectElement, this.data.required); + selectElement.name = this.data.fieldName; + selectElement.tabIndex = DEFAULT_TAB_INDEX; + let addAnEmptyEntry = this.data.combo && this.data.options.length > 0; + if (!this.data.combo) { + selectElement.size = this.data.options.length; + if (this.data.multiSelect) { + selectElement.multiple = true; + } + } + selectElement.addEventListener("resetform", (event) => { + const defaultValue = this.data.defaultFieldValue; + for (const option of selectElement.options) { + option.selected = option.value === defaultValue; + } + }); + for (const option of this.data.options) { + const optionElement = document.createElement("option"); + optionElement.textContent = option.displayValue; + optionElement.value = option.exportValue; + if (storedData.value.includes(option.exportValue)) { + optionElement.setAttribute("selected", true); + addAnEmptyEntry = false; + } + selectElement.append(optionElement); + } + let removeEmptyEntry = null; + if (addAnEmptyEntry) { + const noneOptionElement = document.createElement("option"); + noneOptionElement.value = " "; + noneOptionElement.setAttribute("hidden", true); + noneOptionElement.setAttribute("selected", true); + selectElement.prepend(noneOptionElement); + removeEmptyEntry = () => { + noneOptionElement.remove(); + selectElement.removeEventListener("input", removeEmptyEntry); + removeEmptyEntry = null; + }; + selectElement.addEventListener("input", removeEmptyEntry); + } + const getValue = (isExport) => { + const name = isExport ? "value" : "textContent"; + const { + options, + multiple + } = selectElement; + if (!multiple) { + return options.selectedIndex === -1 ? null : options[options.selectedIndex][name]; + } + return Array.prototype.filter.call(options, (option) => option.selected).map((option) => option[name]); + }; + let selectedValues = getValue(false); + const getItems = (event) => { + const options = event.target.options; + return Array.prototype.map.call(options, (option) => ({ + displayValue: option.textContent, + exportValue: option.value + })); + }; + if (this.enableScripting && this.hasJSActions) { + selectElement.addEventListener("updatefromsandbox", (jsEvent) => { + const actions = { + value(event) { + removeEmptyEntry == null ? void 0 : removeEmptyEntry(); + const value = event.detail.value; + const values = new Set(Array.isArray(value) ? value : [value]); + for (const option of selectElement.options) { + option.selected = values.has(option.value); + } + storage.setValue(id, { + value: getValue(true) + }); + selectedValues = getValue(false); + }, + multipleSelection(event) { + selectElement.multiple = true; + }, + remove(event) { + const options = selectElement.options; + const index = event.detail.remove; + options[index].selected = false; + selectElement.remove(index); + if (options.length > 0) { + const i = Array.prototype.findIndex.call(options, (option) => option.selected); + if (i === -1) { + options[0].selected = true; + } + } + storage.setValue(id, { + value: getValue(true), + items: getItems(event) + }); + selectedValues = getValue(false); + }, + clear(event) { + while (selectElement.length !== 0) { + selectElement.remove(0); + } + storage.setValue(id, { + value: null, + items: [] + }); + selectedValues = getValue(false); + }, + insert(event) { + const { + index, + displayValue, + exportValue + } = event.detail.insert; + const selectChild = selectElement.children[index]; + const optionElement = document.createElement("option"); + optionElement.textContent = displayValue; + optionElement.value = exportValue; + if (selectChild) { + selectChild.before(optionElement); + } else { + selectElement.append(optionElement); + } + storage.setValue(id, { + value: getValue(true), + items: getItems(event) + }); + selectedValues = getValue(false); + }, + items(event) { + const { + items + } = event.detail; + while (selectElement.length !== 0) { + selectElement.remove(0); + } + for (const item of items) { + const { + displayValue, + exportValue + } = item; + const optionElement = document.createElement("option"); + optionElement.textContent = displayValue; + optionElement.value = exportValue; + selectElement.append(optionElement); + } + if (selectElement.options.length > 0) { + selectElement.options[0].selected = true; + } + storage.setValue(id, { + value: getValue(true), + items: getItems(event) + }); + selectedValues = getValue(false); + }, + indices(event) { + const indices = new Set(event.detail.indices); + for (const option of event.target.options) { + option.selected = indices.has(option.index); + } + storage.setValue(id, { + value: getValue(true) + }); + selectedValues = getValue(false); + }, + editable(event) { + event.target.disabled = !event.detail.editable; + } + }; + this._dispatchEventFromSandbox(actions, jsEvent); + }); + selectElement.addEventListener("input", (event) => { + var _a2; + const exportValue = getValue(true); + const change = getValue(false); + storage.setValue(id, { + value: exportValue + }); + event.preventDefault(); + (_a2 = this.linkService.eventBus) == null ? void 0 : _a2.dispatch("dispatcheventinsandbox", { + source: this, + detail: { + id, + name: "Keystroke", + value: selectedValues, + change, + changeEx: exportValue, + willCommit: false, + commitKey: 1, + keyDown: false + } + }); + }); + this._setEventListeners(selectElement, null, [["focus", "Focus"], ["blur", "Blur"], ["mousedown", "Mouse Down"], ["mouseenter", "Mouse Enter"], ["mouseleave", "Mouse Exit"], ["mouseup", "Mouse Up"], ["input", "Action"], ["input", "Validate"]], (event) => event.target.value); + } else { + selectElement.addEventListener("input", function(event) { + storage.setValue(id, { + value: getValue(true) + }); + }); + } + if (this.data.combo) { + this._setTextStyle(selectElement); + } else { + } + this._setBackgroundColor(selectElement); + this._setDefaultPropertiesFromJS(selectElement); + this.container.append(selectElement); + return this.container; + } +}; +var PopupAnnotationElement = class extends AnnotationElement { + constructor(parameters) { + const { + data, + elements + } = parameters; + super(parameters, { + isRenderable: AnnotationElement._hasPopupData(data) + }); + this.elements = elements; + this.popup = null; + } + render() { + this.container.classList.add("popupAnnotation"); + const popup = this.popup = new PopupElement({ + container: this.container, + color: this.data.color, + titleObj: this.data.titleObj, + modificationDate: this.data.modificationDate, + contentsObj: this.data.contentsObj, + richText: this.data.richText, + rect: this.data.rect, + parentRect: this.data.parentRect || null, + parent: this.parent, + elements: this.elements, + open: this.data.open + }); + const elementIds = []; + for (const element2 of this.elements) { + element2.popup = popup; + elementIds.push(element2.data.id); + element2.addHighlightArea(); + } + this.container.setAttribute("aria-controls", elementIds.map((id) => `${AnnotationPrefix}${id}`).join(",")); + return this.container; + } +}; +var _boundKeyDown, _boundHide, _boundShow, _boundToggle, _color, _container3, _contentsObj, _dateObj, _elements, _parent, _parentRect, _pinned, _popup, _position2, _rect, _richText, _titleObj, _updates2, _wasVisible, _html, html_get, _fontSize, fontSize_get, _fontColor, fontColor_get, _makePopupContent, makePopupContent_fn, _keyDown, keyDown_fn, _setPosition, setPosition_fn, _toggle, toggle_fn, _show, show_fn, _hide, hide_fn; +var PopupElement = class { + constructor({ + container, + color, + elements, + titleObj, + modificationDate, + contentsObj, + richText, + parent, + rect, + parentRect, + open + }) { + __privateAdd(this, _html); + __privateAdd(this, _fontSize); + __privateAdd(this, _fontColor); + __privateAdd(this, _makePopupContent); + __privateAdd(this, _keyDown); + __privateAdd(this, _setPosition); + __privateAdd(this, _toggle); + __privateAdd(this, _show); + __privateAdd(this, _hide); + __privateAdd(this, _boundKeyDown, __privateMethod(this, _keyDown, keyDown_fn).bind(this)); + __privateAdd(this, _boundHide, __privateMethod(this, _hide, hide_fn).bind(this)); + __privateAdd(this, _boundShow, __privateMethod(this, _show, show_fn).bind(this)); + __privateAdd(this, _boundToggle, __privateMethod(this, _toggle, toggle_fn).bind(this)); + __privateAdd(this, _color, null); + __privateAdd(this, _container3, null); + __privateAdd(this, _contentsObj, null); + __privateAdd(this, _dateObj, null); + __privateAdd(this, _elements, null); + __privateAdd(this, _parent, null); + __privateAdd(this, _parentRect, null); + __privateAdd(this, _pinned, false); + __privateAdd(this, _popup, null); + __privateAdd(this, _position2, null); + __privateAdd(this, _rect, null); + __privateAdd(this, _richText, null); + __privateAdd(this, _titleObj, null); + __privateAdd(this, _updates2, null); + __privateAdd(this, _wasVisible, false); + var _a2; + __privateSet(this, _container3, container); + __privateSet(this, _titleObj, titleObj); + __privateSet(this, _contentsObj, contentsObj); + __privateSet(this, _richText, richText); + __privateSet(this, _parent, parent); + __privateSet(this, _color, color); + __privateSet(this, _rect, rect); + __privateSet(this, _parentRect, parentRect); + __privateSet(this, _elements, elements); + __privateSet(this, _dateObj, PDFDateString.toDateObject(modificationDate)); + this.trigger = elements.flatMap((e) => e.getElementsToTriggerPopup()); + for (const element2 of this.trigger) { + element2.addEventListener("click", __privateGet(this, _boundToggle)); + element2.addEventListener("mouseenter", __privateGet(this, _boundShow)); + element2.addEventListener("mouseleave", __privateGet(this, _boundHide)); + element2.classList.add("popupTriggerArea"); + } + for (const element2 of elements) { + (_a2 = element2.container) == null ? void 0 : _a2.addEventListener("keydown", __privateGet(this, _boundKeyDown)); + } + __privateGet(this, _container3).hidden = true; + if (open) { + __privateMethod(this, _toggle, toggle_fn).call(this); + } + } + render() { + if (__privateGet(this, _popup)) { + return; + } + const popup = __privateSet(this, _popup, document.createElement("div")); + popup.className = "popup"; + if (__privateGet(this, _color)) { + const baseColor = popup.style.outlineColor = Util.makeHexColor(...__privateGet(this, _color)); + if (CSS.supports("background-color", "color-mix(in srgb, red 30%, white)")) { + popup.style.backgroundColor = `color-mix(in srgb, ${baseColor} 30%, white)`; + } else { + const BACKGROUND_ENLIGHT = 0.7; + popup.style.backgroundColor = Util.makeHexColor(...__privateGet(this, _color).map((c) => Math.floor(BACKGROUND_ENLIGHT * (255 - c) + c))); + } + } + const header = document.createElement("span"); + header.className = "header"; + const title = document.createElement("h1"); + header.append(title); + ({ + dir: title.dir, + str: title.textContent + } = __privateGet(this, _titleObj)); + popup.append(header); + if (__privateGet(this, _dateObj)) { + const modificationDate = document.createElement("span"); + modificationDate.classList.add("popupDate"); + modificationDate.setAttribute("data-l10n-id", "pdfjs-annotation-date-time-string"); + modificationDate.setAttribute("data-l10n-args", JSON.stringify({ + dateObj: __privateGet(this, _dateObj).valueOf() + })); + header.append(modificationDate); + } + const html = __privateGet(this, _html, html_get); + if (html) { + XfaLayer.render({ + xfaHtml: html, + intent: "richText", + div: popup + }); + popup.lastChild.classList.add("richText", "popupContent"); + } else { + const contents = this._formatContents(__privateGet(this, _contentsObj)); + popup.append(contents); + } + __privateGet(this, _container3).append(popup); + } + _formatContents({ + str, + dir + }) { + const p = document.createElement("p"); + p.classList.add("popupContent"); + p.dir = dir; + const lines = str.split(/(?:\r\n?|\n)/); + for (let i = 0, ii = lines.length; i < ii; ++i) { + const line = lines[i]; + p.append(document.createTextNode(line)); + if (i < ii - 1) { + p.append(document.createElement("br")); + } + } + return p; + } + updateEdited({ + rect, + popupContent + }) { + var _a2; + __privateGet(this, _updates2) || __privateSet(this, _updates2, { + contentsObj: __privateGet(this, _contentsObj), + richText: __privateGet(this, _richText) + }); + if (rect) { + __privateSet(this, _position2, null); + } + if (popupContent) { + __privateSet(this, _richText, __privateMethod(this, _makePopupContent, makePopupContent_fn).call(this, popupContent)); + __privateSet(this, _contentsObj, null); + } + (_a2 = __privateGet(this, _popup)) == null ? void 0 : _a2.remove(); + __privateSet(this, _popup, null); + } + resetEdited() { + var _a2; + if (!__privateGet(this, _updates2)) { + return; + } + ({ + contentsObj: __privateWrapper(this, _contentsObj)._, + richText: __privateWrapper(this, _richText)._ + } = __privateGet(this, _updates2)); + __privateSet(this, _updates2, null); + (_a2 = __privateGet(this, _popup)) == null ? void 0 : _a2.remove(); + __privateSet(this, _popup, null); + __privateSet(this, _position2, null); + } + forceHide() { + __privateSet(this, _wasVisible, this.isVisible); + if (!__privateGet(this, _wasVisible)) { + return; + } + __privateGet(this, _container3).hidden = true; + } + maybeShow() { + if (!__privateGet(this, _wasVisible)) { + return; + } + if (!__privateGet(this, _popup)) { + __privateMethod(this, _show, show_fn).call(this); + } + __privateSet(this, _wasVisible, false); + __privateGet(this, _container3).hidden = false; + } + get isVisible() { + return __privateGet(this, _container3).hidden === false; + } +}; +_boundKeyDown = new WeakMap(); +_boundHide = new WeakMap(); +_boundShow = new WeakMap(); +_boundToggle = new WeakMap(); +_color = new WeakMap(); +_container3 = new WeakMap(); +_contentsObj = new WeakMap(); +_dateObj = new WeakMap(); +_elements = new WeakMap(); +_parent = new WeakMap(); +_parentRect = new WeakMap(); +_pinned = new WeakMap(); +_popup = new WeakMap(); +_position2 = new WeakMap(); +_rect = new WeakMap(); +_richText = new WeakMap(); +_titleObj = new WeakMap(); +_updates2 = new WeakMap(); +_wasVisible = new WeakMap(); +_html = new WeakSet(); +html_get = function() { + const richText = __privateGet(this, _richText); + const contentsObj = __privateGet(this, _contentsObj); + if ((richText == null ? void 0 : richText.str) && (!(contentsObj == null ? void 0 : contentsObj.str) || contentsObj.str === richText.str)) { + return __privateGet(this, _richText).html || null; + } + return null; +}; +_fontSize = new WeakSet(); +fontSize_get = function() { + var _a2, _b, _c; + return ((_c = (_b = (_a2 = __privateGet(this, _html, html_get)) == null ? void 0 : _a2.attributes) == null ? void 0 : _b.style) == null ? void 0 : _c.fontSize) || 0; +}; +_fontColor = new WeakSet(); +fontColor_get = function() { + var _a2, _b, _c; + return ((_c = (_b = (_a2 = __privateGet(this, _html, html_get)) == null ? void 0 : _a2.attributes) == null ? void 0 : _b.style) == null ? void 0 : _c.color) || null; +}; +_makePopupContent = new WeakSet(); +makePopupContent_fn = function(text2) { + const popupLines = []; + const popupContent = { + str: text2, + html: { + name: "div", + attributes: { + dir: "auto" + }, + children: [{ + name: "p", + children: popupLines + }] + } + }; + const lineAttributes = { + style: { + color: __privateGet(this, _fontColor, fontColor_get), + fontSize: __privateGet(this, _fontSize, fontSize_get) ? `calc(${__privateGet(this, _fontSize, fontSize_get)}px * var(--scale-factor))` : "" + } + }; + for (const line of text2.split("\n")) { + popupLines.push({ + name: "span", + value: line, + attributes: lineAttributes + }); + } + return popupContent; +}; +_keyDown = new WeakSet(); +keyDown_fn = function(event) { + if (event.altKey || event.shiftKey || event.ctrlKey || event.metaKey) { + return; + } + if (event.key === "Enter" || event.key === "Escape" && __privateGet(this, _pinned)) { + __privateMethod(this, _toggle, toggle_fn).call(this); + } +}; +_setPosition = new WeakSet(); +setPosition_fn = function() { + if (__privateGet(this, _position2) !== null) { + return; + } + const { + page: { + view + }, + viewport: { + rawDims: { + pageWidth, + pageHeight, + pageX, + pageY + } + } + } = __privateGet(this, _parent); + let useParentRect = !!__privateGet(this, _parentRect); + let rect = useParentRect ? __privateGet(this, _parentRect) : __privateGet(this, _rect); + for (const element2 of __privateGet(this, _elements)) { + if (!rect || Util.intersect(element2.data.rect, rect) !== null) { + rect = element2.data.rect; + useParentRect = true; + break; + } + } + const normalizedRect = Util.normalizeRect([rect[0], view[3] - rect[1] + view[1], rect[2], view[3] - rect[3] + view[1]]); + const HORIZONTAL_SPACE_AFTER_ANNOTATION = 5; + const parentWidth = useParentRect ? rect[2] - rect[0] + HORIZONTAL_SPACE_AFTER_ANNOTATION : 0; + const popupLeft = normalizedRect[0] + parentWidth; + const popupTop = normalizedRect[1]; + __privateSet(this, _position2, [100 * (popupLeft - pageX) / pageWidth, 100 * (popupTop - pageY) / pageHeight]); + const { + style + } = __privateGet(this, _container3); + style.left = `${__privateGet(this, _position2)[0]}%`; + style.top = `${__privateGet(this, _position2)[1]}%`; +}; +_toggle = new WeakSet(); +toggle_fn = function() { + __privateSet(this, _pinned, !__privateGet(this, _pinned)); + if (__privateGet(this, _pinned)) { + __privateMethod(this, _show, show_fn).call(this); + __privateGet(this, _container3).addEventListener("click", __privateGet(this, _boundToggle)); + __privateGet(this, _container3).addEventListener("keydown", __privateGet(this, _boundKeyDown)); + } else { + __privateMethod(this, _hide, hide_fn).call(this); + __privateGet(this, _container3).removeEventListener("click", __privateGet(this, _boundToggle)); + __privateGet(this, _container3).removeEventListener("keydown", __privateGet(this, _boundKeyDown)); + } +}; +_show = new WeakSet(); +show_fn = function() { + if (!__privateGet(this, _popup)) { + this.render(); + } + if (!this.isVisible) { + __privateMethod(this, _setPosition, setPosition_fn).call(this); + __privateGet(this, _container3).hidden = false; + __privateGet(this, _container3).style.zIndex = parseInt(__privateGet(this, _container3).style.zIndex) + 1e3; + } else if (__privateGet(this, _pinned)) { + __privateGet(this, _container3).classList.add("focused"); + } +}; +_hide = new WeakSet(); +hide_fn = function() { + __privateGet(this, _container3).classList.remove("focused"); + if (__privateGet(this, _pinned) || !this.isVisible) { + return; + } + __privateGet(this, _container3).hidden = true; + __privateGet(this, _container3).style.zIndex = parseInt(__privateGet(this, _container3).style.zIndex) - 1e3; +}; +var FreeTextAnnotationElement = class extends AnnotationElement { + constructor(parameters) { + super(parameters, { + isRenderable: true, + ignoreBorder: true + }); + this.textContent = parameters.data.textContent; + this.textPosition = parameters.data.textPosition; + this.annotationEditorType = AnnotationEditorType.FREETEXT; + } + render() { + this.container.classList.add("freeTextAnnotation"); + if (this.textContent) { + const content = document.createElement("div"); + content.classList.add("annotationTextContent"); + content.setAttribute("role", "comment"); + for (const line of this.textContent) { + const lineSpan = document.createElement("span"); + lineSpan.textContent = line; + content.append(lineSpan); + } + this.container.append(content); + } + if (!this.data.popupRef && this.hasPopupData) { + this._createPopup(); + } + this._editOnDoubleClick(); + return this.container; + } +}; +var _line; +var LineAnnotationElement = class extends AnnotationElement { + constructor(parameters) { + super(parameters, { + isRenderable: true, + ignoreBorder: true + }); + __privateAdd(this, _line, null); + } + render() { + this.container.classList.add("lineAnnotation"); + const data = this.data; + const { + width, + height + } = getRectDims(data.rect); + const svg = this.svgFactory.create(width, height, true); + const line = __privateSet(this, _line, this.svgFactory.createElement("svg:line")); + line.setAttribute("x1", data.rect[2] - data.lineCoordinates[0]); + line.setAttribute("y1", data.rect[3] - data.lineCoordinates[1]); + line.setAttribute("x2", data.rect[2] - data.lineCoordinates[2]); + line.setAttribute("y2", data.rect[3] - data.lineCoordinates[3]); + line.setAttribute("stroke-width", data.borderStyle.width || 1); + line.setAttribute("stroke", "transparent"); + line.setAttribute("fill", "transparent"); + svg.append(line); + this.container.append(svg); + if (!data.popupRef && this.hasPopupData) { + this._createPopup(); + } + return this.container; + } + getElementsToTriggerPopup() { + return __privateGet(this, _line); + } + addHighlightArea() { + this.container.classList.add("highlightArea"); + } +}; +_line = new WeakMap(); +var _square; +var SquareAnnotationElement = class extends AnnotationElement { + constructor(parameters) { + super(parameters, { + isRenderable: true, + ignoreBorder: true + }); + __privateAdd(this, _square, null); + } + render() { + this.container.classList.add("squareAnnotation"); + const data = this.data; + const { + width, + height + } = getRectDims(data.rect); + const svg = this.svgFactory.create(width, height, true); + const borderWidth = data.borderStyle.width; + const square = __privateSet(this, _square, this.svgFactory.createElement("svg:rect")); + square.setAttribute("x", borderWidth / 2); + square.setAttribute("y", borderWidth / 2); + square.setAttribute("width", width - borderWidth); + square.setAttribute("height", height - borderWidth); + square.setAttribute("stroke-width", borderWidth || 1); + square.setAttribute("stroke", "transparent"); + square.setAttribute("fill", "transparent"); + svg.append(square); + this.container.append(svg); + if (!data.popupRef && this.hasPopupData) { + this._createPopup(); + } + return this.container; + } + getElementsToTriggerPopup() { + return __privateGet(this, _square); + } + addHighlightArea() { + this.container.classList.add("highlightArea"); + } +}; +_square = new WeakMap(); +var _circle; +var CircleAnnotationElement = class extends AnnotationElement { + constructor(parameters) { + super(parameters, { + isRenderable: true, + ignoreBorder: true + }); + __privateAdd(this, _circle, null); + } + render() { + this.container.classList.add("circleAnnotation"); + const data = this.data; + const { + width, + height + } = getRectDims(data.rect); + const svg = this.svgFactory.create(width, height, true); + const borderWidth = data.borderStyle.width; + const circle = __privateSet(this, _circle, this.svgFactory.createElement("svg:ellipse")); + circle.setAttribute("cx", width / 2); + circle.setAttribute("cy", height / 2); + circle.setAttribute("rx", width / 2 - borderWidth / 2); + circle.setAttribute("ry", height / 2 - borderWidth / 2); + circle.setAttribute("stroke-width", borderWidth || 1); + circle.setAttribute("stroke", "transparent"); + circle.setAttribute("fill", "transparent"); + svg.append(circle); + this.container.append(svg); + if (!data.popupRef && this.hasPopupData) { + this._createPopup(); + } + return this.container; + } + getElementsToTriggerPopup() { + return __privateGet(this, _circle); + } + addHighlightArea() { + this.container.classList.add("highlightArea"); + } +}; +_circle = new WeakMap(); +var _polyline; +var PolylineAnnotationElement = class extends AnnotationElement { + constructor(parameters) { + super(parameters, { + isRenderable: true, + ignoreBorder: true + }); + __privateAdd(this, _polyline, null); + this.containerClassName = "polylineAnnotation"; + this.svgElementName = "svg:polyline"; + } + render() { + this.container.classList.add(this.containerClassName); + const { + data: { + rect, + vertices, + borderStyle, + popupRef + } + } = this; + if (!vertices) { + return this.container; + } + const { + width, + height + } = getRectDims(rect); + const svg = this.svgFactory.create(width, height, true); + let points = []; + for (let i = 0, ii = vertices.length; i < ii; i += 2) { + const x = vertices[i] - rect[0]; + const y = rect[3] - vertices[i + 1]; + points.push(`${x},${y}`); + } + points = points.join(" "); + const polyline = __privateSet(this, _polyline, this.svgFactory.createElement(this.svgElementName)); + polyline.setAttribute("points", points); + polyline.setAttribute("stroke-width", borderStyle.width || 1); + polyline.setAttribute("stroke", "transparent"); + polyline.setAttribute("fill", "transparent"); + svg.append(polyline); + this.container.append(svg); + if (!popupRef && this.hasPopupData) { + this._createPopup(); + } + return this.container; + } + getElementsToTriggerPopup() { + return __privateGet(this, _polyline); + } + addHighlightArea() { + this.container.classList.add("highlightArea"); + } +}; +_polyline = new WeakMap(); +var PolygonAnnotationElement = class extends PolylineAnnotationElement { + constructor(parameters) { + super(parameters); + this.containerClassName = "polygonAnnotation"; + this.svgElementName = "svg:polygon"; + } +}; +var CaretAnnotationElement = class extends AnnotationElement { + constructor(parameters) { + super(parameters, { + isRenderable: true, + ignoreBorder: true + }); + } + render() { + this.container.classList.add("caretAnnotation"); + if (!this.data.popupRef && this.hasPopupData) { + this._createPopup(); + } + return this.container; + } +}; +var _polylines; +var InkAnnotationElement = class extends AnnotationElement { + constructor(parameters) { + super(parameters, { + isRenderable: true, + ignoreBorder: true + }); + __privateAdd(this, _polylines, []); + this.containerClassName = "inkAnnotation"; + this.svgElementName = "svg:polyline"; + this.annotationEditorType = AnnotationEditorType.INK; + } + render() { + this.container.classList.add(this.containerClassName); + const { + data: { + rect, + inkLists, + borderStyle, + popupRef + } + } = this; + const { + width, + height + } = getRectDims(rect); + const svg = this.svgFactory.create(width, height, true); + for (const inkList of inkLists) { + let points = []; + for (let i = 0, ii = inkList.length; i < ii; i += 2) { + const x = inkList[i] - rect[0]; + const y = rect[3] - inkList[i + 1]; + points.push(`${x},${y}`); + } + points = points.join(" "); + const polyline = this.svgFactory.createElement(this.svgElementName); + __privateGet(this, _polylines).push(polyline); + polyline.setAttribute("points", points); + polyline.setAttribute("stroke-width", borderStyle.width || 1); + polyline.setAttribute("stroke", "transparent"); + polyline.setAttribute("fill", "transparent"); + if (!popupRef && this.hasPopupData) { + this._createPopup(); + } + svg.append(polyline); + } + this.container.append(svg); + return this.container; + } + getElementsToTriggerPopup() { + return __privateGet(this, _polylines); + } + addHighlightArea() { + this.container.classList.add("highlightArea"); + } +}; +_polylines = new WeakMap(); +var HighlightAnnotationElement = class extends AnnotationElement { + constructor(parameters) { + super(parameters, { + isRenderable: true, + ignoreBorder: true, + createQuadrilaterals: true + }); + } + render() { + if (!this.data.popupRef && this.hasPopupData) { + this._createPopup(); + } + this.container.classList.add("highlightAnnotation"); + return this.container; + } +}; +var UnderlineAnnotationElement = class extends AnnotationElement { + constructor(parameters) { + super(parameters, { + isRenderable: true, + ignoreBorder: true, + createQuadrilaterals: true + }); + } + render() { + if (!this.data.popupRef && this.hasPopupData) { + this._createPopup(); + } + this.container.classList.add("underlineAnnotation"); + return this.container; + } +}; +var SquigglyAnnotationElement = class extends AnnotationElement { + constructor(parameters) { + super(parameters, { + isRenderable: true, + ignoreBorder: true, + createQuadrilaterals: true + }); + } + render() { + if (!this.data.popupRef && this.hasPopupData) { + this._createPopup(); + } + this.container.classList.add("squigglyAnnotation"); + return this.container; + } +}; +var StrikeOutAnnotationElement = class extends AnnotationElement { + constructor(parameters) { + super(parameters, { + isRenderable: true, + ignoreBorder: true, + createQuadrilaterals: true + }); + } + render() { + if (!this.data.popupRef && this.hasPopupData) { + this._createPopup(); + } + this.container.classList.add("strikeoutAnnotation"); + return this.container; + } +}; +var StampAnnotationElement = class extends AnnotationElement { + constructor(parameters) { + super(parameters, { + isRenderable: true, + ignoreBorder: true + }); + } + render() { + this.container.classList.add("stampAnnotation"); + if (!this.data.popupRef && this.hasPopupData) { + this._createPopup(); + } + return this.container; + } +}; +var _trigger, _download, download_fn; +var FileAttachmentAnnotationElement = class extends AnnotationElement { + constructor(parameters) { + var _a2; + super(parameters, { + isRenderable: true + }); + __privateAdd(this, _download); + __privateAdd(this, _trigger, null); + const { + file + } = this.data; + this.filename = file.filename; + this.content = file.content; + (_a2 = this.linkService.eventBus) == null ? void 0 : _a2.dispatch("fileattachmentannotation", { + source: this, + ...file + }); + } + render() { + this.container.classList.add("fileAttachmentAnnotation"); + const { + container, + data + } = this; + let trigger; + if (data.hasAppearance || data.fillAlpha === 0) { + trigger = document.createElement("div"); + } else { + trigger = document.createElement("img"); + trigger.src = `${this.imageResourcesPath}annotation-${/paperclip/i.test(data.name) ? "paperclip" : "pushpin"}.svg`; + if (data.fillAlpha && data.fillAlpha < 1) { + trigger.style = `filter: opacity(${Math.round(data.fillAlpha * 100)}%);`; + } + } + trigger.addEventListener("dblclick", __privateMethod(this, _download, download_fn).bind(this)); + __privateSet(this, _trigger, trigger); + const { + isMac + } = util_FeatureTest.platform; + container.addEventListener("keydown", (evt) => { + if (evt.key === "Enter" && (isMac ? evt.metaKey : evt.ctrlKey)) { + __privateMethod(this, _download, download_fn).call(this); + } + }); + if (!data.popupRef && this.hasPopupData) { + this._createPopup(); + } else { + trigger.classList.add("popupTriggerArea"); + } + container.append(trigger); + return container; + } + getElementsToTriggerPopup() { + return __privateGet(this, _trigger); + } + addHighlightArea() { + this.container.classList.add("highlightArea"); + } +}; +_trigger = new WeakMap(); +_download = new WeakSet(); +download_fn = function() { + var _a2; + (_a2 = this.downloadManager) == null ? void 0 : _a2.openOrDownloadData(this.content, this.filename); +}; +var _accessibilityManager, _annotationCanvasMap, _editableAnnotations, _appendElement, appendElement_fn, _setAnnotationCanvasMap, setAnnotationCanvasMap_fn; +var AnnotationLayer = class { + constructor({ + div, + accessibilityManager, + annotationCanvasMap, + annotationEditorUIManager, + page, + viewport + }) { + __privateAdd(this, _appendElement); + __privateAdd(this, _setAnnotationCanvasMap); + __privateAdd(this, _accessibilityManager, null); + __privateAdd(this, _annotationCanvasMap, null); + __privateAdd(this, _editableAnnotations, /* @__PURE__ */ new Map()); + this.div = div; + __privateSet(this, _accessibilityManager, accessibilityManager); + __privateSet(this, _annotationCanvasMap, annotationCanvasMap); + this.page = page; + this.viewport = viewport; + this.zIndex = 0; + this._annotationEditorUIManager = annotationEditorUIManager; + } + hasEditableAnnotations() { + return __privateGet(this, _editableAnnotations).size > 0; + } + async render(params) { + var _a2; + const { + annotations + } = params; + const layer = this.div; + setLayerDimensions(layer, this.viewport); + const popupToElements = /* @__PURE__ */ new Map(); + const elementParams = { + data: null, + layer, + linkService: params.linkService, + downloadManager: params.downloadManager, + imageResourcesPath: params.imageResourcesPath || "", + renderForms: params.renderForms !== false, + svgFactory: new DOMSVGFactory(), + annotationStorage: params.annotationStorage || new AnnotationStorage(), + enableScripting: params.enableScripting === true, + hasJSActions: params.hasJSActions, + fieldObjects: params.fieldObjects, + parent: this, + elements: null + }; + for (const data of annotations) { + if (data.noHTML) { + continue; + } + const isPopupAnnotation = data.annotationType === AnnotationType.POPUP; + if (!isPopupAnnotation) { + const { + width, + height + } = getRectDims(data.rect); + if (width <= 0 || height <= 0) { + continue; + } + } else { + const elements = popupToElements.get(data.id); + if (!elements) { + continue; + } + elementParams.elements = elements; + } + elementParams.data = data; + const element2 = AnnotationElementFactory.create(elementParams); + if (!element2.isRenderable) { + continue; + } + if (!isPopupAnnotation && data.popupRef) { + const elements = popupToElements.get(data.popupRef); + if (!elements) { + popupToElements.set(data.popupRef, [element2]); + } else { + elements.push(element2); + } + } + const rendered = element2.render(); + if (data.hidden) { + rendered.style.visibility = "hidden"; + } + __privateMethod(this, _appendElement, appendElement_fn).call(this, rendered, data.id); + if (element2._isEditable) { + __privateGet(this, _editableAnnotations).set(element2.data.id, element2); + (_a2 = this._annotationEditorUIManager) == null ? void 0 : _a2.renderAnnotationElement(element2); + } + } + __privateMethod(this, _setAnnotationCanvasMap, setAnnotationCanvasMap_fn).call(this); + } + update({ + viewport + }) { + const layer = this.div; + this.viewport = viewport; + setLayerDimensions(layer, { + rotation: viewport.rotation + }); + __privateMethod(this, _setAnnotationCanvasMap, setAnnotationCanvasMap_fn).call(this); + layer.hidden = false; + } + getEditableAnnotations() { + return Array.from(__privateGet(this, _editableAnnotations).values()); + } + getEditableAnnotation(id) { + return __privateGet(this, _editableAnnotations).get(id); + } +}; +_accessibilityManager = new WeakMap(); +_annotationCanvasMap = new WeakMap(); +_editableAnnotations = new WeakMap(); +_appendElement = new WeakSet(); +appendElement_fn = function(element2, id) { + var _a2; + const contentElement = element2.firstChild || element2; + contentElement.id = `${AnnotationPrefix}${id}`; + this.div.append(element2); + (_a2 = __privateGet(this, _accessibilityManager)) == null ? void 0 : _a2.moveElementInDOM(this.div, element2, contentElement, false); +}; +_setAnnotationCanvasMap = new WeakSet(); +setAnnotationCanvasMap_fn = function() { + if (!__privateGet(this, _annotationCanvasMap)) { + return; + } + const layer = this.div; + for (const [id, canvas] of __privateGet(this, _annotationCanvasMap)) { + const element2 = layer.querySelector(`[data-annotation-id="${id}"]`); + if (!element2) { + continue; + } + canvas.className = "annotationContent"; + const { + firstChild + } = element2; + if (!firstChild) { + element2.append(canvas); + } else if (firstChild.nodeName === "CANVAS") { + firstChild.replaceWith(canvas); + } else if (!firstChild.classList.contains("annotationContent")) { + firstChild.before(canvas); + } else { + firstChild.after(canvas); + } + } + __privateGet(this, _annotationCanvasMap).clear(); +}; +var EOL_PATTERN = /\r\n?|\n/g; +var _color2, _content, _editorDivId, _editModeAC, _fontSize2, _initialData, _updateFontSize, updateFontSize_fn, _updateColor, updateColor_fn, _extractText, extractText_fn, _setEditorDimensions, setEditorDimensions_fn, _getNodeContent, getNodeContent_fn, _setContent, setContent_fn, _serializeContent, serializeContent_fn, _deserializeContent, deserializeContent_fn, _hasElementChanged, hasElementChanged_fn; +var _FreeTextEditor = class extends AnnotationEditor { + constructor(params) { + super({ + ...params, + name: "freeTextEditor" + }); + __privateAdd(this, _updateFontSize); + __privateAdd(this, _updateColor); + __privateAdd(this, _extractText); + __privateAdd(this, _setEditorDimensions); + __privateAdd(this, _setContent); + __privateAdd(this, _serializeContent); + __privateAdd(this, _hasElementChanged); + __privateAdd(this, _color2, void 0); + __privateAdd(this, _content, ""); + __privateAdd(this, _editorDivId, `${this.id}-editor`); + __privateAdd(this, _editModeAC, null); + __privateAdd(this, _fontSize2, void 0); + __privateAdd(this, _initialData, null); + __privateSet(this, _color2, params.color || _FreeTextEditor._defaultColor || AnnotationEditor._defaultLineColor); + __privateSet(this, _fontSize2, params.fontSize || _FreeTextEditor._defaultFontSize); + } + static get _keyboardManager() { + const proto = _FreeTextEditor.prototype; + const arrowChecker = (self) => self.isEmpty(); + const small = AnnotationEditorUIManager.TRANSLATE_SMALL; + const big = AnnotationEditorUIManager.TRANSLATE_BIG; + return shadow(this, "_keyboardManager", new KeyboardManager([[["ctrl+s", "mac+meta+s", "ctrl+p", "mac+meta+p"], proto.commitOrRemove, { + bubbles: true + }], [["ctrl+Enter", "mac+meta+Enter", "Escape", "mac+Escape"], proto.commitOrRemove], [["ArrowLeft", "mac+ArrowLeft"], proto._translateEmpty, { + args: [-small, 0], + checker: arrowChecker + }], [["ctrl+ArrowLeft", "mac+shift+ArrowLeft"], proto._translateEmpty, { + args: [-big, 0], + checker: arrowChecker + }], [["ArrowRight", "mac+ArrowRight"], proto._translateEmpty, { + args: [small, 0], + checker: arrowChecker + }], [["ctrl+ArrowRight", "mac+shift+ArrowRight"], proto._translateEmpty, { + args: [big, 0], + checker: arrowChecker + }], [["ArrowUp", "mac+ArrowUp"], proto._translateEmpty, { + args: [0, -small], + checker: arrowChecker + }], [["ctrl+ArrowUp", "mac+shift+ArrowUp"], proto._translateEmpty, { + args: [0, -big], + checker: arrowChecker + }], [["ArrowDown", "mac+ArrowDown"], proto._translateEmpty, { + args: [0, small], + checker: arrowChecker + }], [["ctrl+ArrowDown", "mac+shift+ArrowDown"], proto._translateEmpty, { + args: [0, big], + checker: arrowChecker + }]])); + } + static initialize(l10n, uiManager) { + AnnotationEditor.initialize(l10n, uiManager, { + strings: ["pdfjs-free-text-default-content"] + }); + const style = getComputedStyle(document.documentElement); + this._internalPadding = parseFloat(style.getPropertyValue("--freetext-padding")); + } + static updateDefaultParams(type, value) { + switch (type) { + case AnnotationEditorParamsType.FREETEXT_SIZE: + _FreeTextEditor._defaultFontSize = value; + break; + case AnnotationEditorParamsType.FREETEXT_COLOR: + _FreeTextEditor._defaultColor = value; + break; + } + } + updateParams(type, value) { + switch (type) { + case AnnotationEditorParamsType.FREETEXT_SIZE: + __privateMethod(this, _updateFontSize, updateFontSize_fn).call(this, value); + break; + case AnnotationEditorParamsType.FREETEXT_COLOR: + __privateMethod(this, _updateColor, updateColor_fn).call(this, value); + break; + } + } + static get defaultPropertiesToUpdate() { + return [[AnnotationEditorParamsType.FREETEXT_SIZE, _FreeTextEditor._defaultFontSize], [AnnotationEditorParamsType.FREETEXT_COLOR, _FreeTextEditor._defaultColor || AnnotationEditor._defaultLineColor]]; + } + get propertiesToUpdate() { + return [[AnnotationEditorParamsType.FREETEXT_SIZE, __privateGet(this, _fontSize2)], [AnnotationEditorParamsType.FREETEXT_COLOR, __privateGet(this, _color2)]]; + } + _translateEmpty(x, y) { + this._uiManager.translateSelectedEditors(x, y, true); + } + getInitialTranslation() { + const scale = this.parentScale; + return [-_FreeTextEditor._internalPadding * scale, -(_FreeTextEditor._internalPadding + __privateGet(this, _fontSize2)) * scale]; + } + rebuild() { + if (!this.parent) { + return; + } + super.rebuild(); + if (this.div === null) { + return; + } + if (!this.isAttachedToDOM) { + this.parent.add(this); + } + } + enableEditMode() { + if (this.isInEditMode()) { + return; + } + this.parent.setEditingState(false); + this.parent.updateToolbar(AnnotationEditorType.FREETEXT); + super.enableEditMode(); + this.overlayDiv.classList.remove("enabled"); + this.editorDiv.contentEditable = true; + this._isDraggable = false; + this.div.removeAttribute("aria-activedescendant"); + __privateSet(this, _editModeAC, new AbortController()); + const signal = this._uiManager.combinedSignal(__privateGet(this, _editModeAC)); + this.editorDiv.addEventListener("keydown", this.editorDivKeydown.bind(this), { + signal + }); + this.editorDiv.addEventListener("focus", this.editorDivFocus.bind(this), { + signal + }); + this.editorDiv.addEventListener("blur", this.editorDivBlur.bind(this), { + signal + }); + this.editorDiv.addEventListener("input", this.editorDivInput.bind(this), { + signal + }); + this.editorDiv.addEventListener("paste", this.editorDivPaste.bind(this), { + signal + }); + } + disableEditMode() { + var _a2; + if (!this.isInEditMode()) { + return; + } + this.parent.setEditingState(true); + super.disableEditMode(); + this.overlayDiv.classList.add("enabled"); + this.editorDiv.contentEditable = false; + this.div.setAttribute("aria-activedescendant", __privateGet(this, _editorDivId)); + this._isDraggable = true; + (_a2 = __privateGet(this, _editModeAC)) == null ? void 0 : _a2.abort(); + __privateSet(this, _editModeAC, null); + this.div.focus({ + preventScroll: true + }); + this.isEditing = false; + this.parent.div.classList.add("freetextEditing"); + } + focusin(event) { + if (!this._focusEventsAllowed) { + return; + } + super.focusin(event); + if (event.target !== this.editorDiv) { + this.editorDiv.focus(); + } + } + onceAdded() { + var _a2; + if (this.width) { + return; + } + this.enableEditMode(); + this.editorDiv.focus(); + if ((_a2 = this._initialOptions) == null ? void 0 : _a2.isCentered) { + this.center(); + } + this._initialOptions = null; + } + isEmpty() { + return !this.editorDiv || this.editorDiv.innerText.trim() === ""; + } + remove() { + this.isEditing = false; + if (this.parent) { + this.parent.setEditingState(true); + this.parent.div.classList.add("freetextEditing"); + } + super.remove(); + } + commit() { + if (!this.isInEditMode()) { + return; + } + super.commit(); + this.disableEditMode(); + const savedText = __privateGet(this, _content); + const newText = __privateSet(this, _content, __privateMethod(this, _extractText, extractText_fn).call(this).trimEnd()); + if (savedText === newText) { + return; + } + const setText = (text2) => { + __privateSet(this, _content, text2); + if (!text2) { + this.remove(); + return; + } + __privateMethod(this, _setContent, setContent_fn).call(this); + this._uiManager.rebuild(this); + __privateMethod(this, _setEditorDimensions, setEditorDimensions_fn).call(this); + }; + this.addCommands({ + cmd: () => { + setText(newText); + }, + undo: () => { + setText(savedText); + }, + mustExec: false + }); + __privateMethod(this, _setEditorDimensions, setEditorDimensions_fn).call(this); + } + shouldGetKeyboardEvents() { + return this.isInEditMode(); + } + enterInEditMode() { + this.enableEditMode(); + this.editorDiv.focus(); + } + dblclick(event) { + this.enterInEditMode(); + } + keydown(event) { + if (event.target === this.div && event.key === "Enter") { + this.enterInEditMode(); + event.preventDefault(); + } + } + editorDivKeydown(event) { + _FreeTextEditor._keyboardManager.exec(this, event); + } + editorDivFocus(event) { + this.isEditing = true; + } + editorDivBlur(event) { + this.isEditing = false; + } + editorDivInput(event) { + this.parent.div.classList.toggle("freetextEditing", this.isEmpty()); + } + disableEditing() { + this.editorDiv.setAttribute("role", "comment"); + this.editorDiv.removeAttribute("aria-multiline"); + } + enableEditing() { + this.editorDiv.setAttribute("role", "textbox"); + this.editorDiv.setAttribute("aria-multiline", true); + } + render() { + if (this.div) { + return this.div; + } + let baseX, baseY; + if (this.width) { + baseX = this.x; + baseY = this.y; + } + super.render(); + this.editorDiv = document.createElement("div"); + this.editorDiv.className = "internal"; + this.editorDiv.setAttribute("id", __privateGet(this, _editorDivId)); + this.editorDiv.setAttribute("data-l10n-id", "pdfjs-free-text"); + this.enableEditing(); + AnnotationEditor._l10nPromise.get("pdfjs-free-text-default-content").then((msg) => { + var _a2; + return (_a2 = this.editorDiv) == null ? void 0 : _a2.setAttribute("default-content", msg); + }); + this.editorDiv.contentEditable = true; + const { + style + } = this.editorDiv; + style.fontSize = `calc(${__privateGet(this, _fontSize2)}px * var(--scale-factor))`; + style.color = __privateGet(this, _color2); + this.div.append(this.editorDiv); + this.overlayDiv = document.createElement("div"); + this.overlayDiv.classList.add("overlay", "enabled"); + this.div.append(this.overlayDiv); + bindEvents(this, this.div, ["dblclick", "keydown"]); + if (this.width) { + const [parentWidth, parentHeight] = this.parentDimensions; + if (this.annotationElementId) { + const { + position + } = __privateGet(this, _initialData); + let [tx, ty] = this.getInitialTranslation(); + [tx, ty] = this.pageTranslationToScreen(tx, ty); + const [pageWidth, pageHeight] = this.pageDimensions; + const [pageX, pageY] = this.pageTranslation; + let posX, posY; + switch (this.rotation) { + case 0: + posX = baseX + (position[0] - pageX) / pageWidth; + posY = baseY + this.height - (position[1] - pageY) / pageHeight; + break; + case 90: + posX = baseX + (position[0] - pageX) / pageWidth; + posY = baseY - (position[1] - pageY) / pageHeight; + [tx, ty] = [ty, -tx]; + break; + case 180: + posX = baseX - this.width + (position[0] - pageX) / pageWidth; + posY = baseY - (position[1] - pageY) / pageHeight; + [tx, ty] = [-tx, -ty]; + break; + case 270: + posX = baseX + (position[0] - pageX - this.height * pageHeight) / pageWidth; + posY = baseY + (position[1] - pageY - this.width * pageWidth) / pageHeight; + [tx, ty] = [-ty, tx]; + break; + } + this.setAt(posX * parentWidth, posY * parentHeight, tx, ty); + } else { + this.setAt(baseX * parentWidth, baseY * parentHeight, this.width * parentWidth, this.height * parentHeight); + } + __privateMethod(this, _setContent, setContent_fn).call(this); + this._isDraggable = true; + this.editorDiv.contentEditable = false; + } else { + this._isDraggable = false; + this.editorDiv.contentEditable = true; + } + return this.div; + } + editorDivPaste(event) { + var _a2, _b, _c; + const clipboardData = event.clipboardData || window.clipboardData; + const { + types + } = clipboardData; + if (types.length === 1 && types[0] === "text/plain") { + return; + } + event.preventDefault(); + const paste = __privateMethod(_a2 = _FreeTextEditor, _deserializeContent, deserializeContent_fn).call(_a2, clipboardData.getData("text") || "").replaceAll(EOL_PATTERN, "\n"); + if (!paste) { + return; + } + const selection = window.getSelection(); + if (!selection.rangeCount) { + return; + } + this.editorDiv.normalize(); + selection.deleteFromDocument(); + const range = selection.getRangeAt(0); + if (!paste.includes("\n")) { + range.insertNode(document.createTextNode(paste)); + this.editorDiv.normalize(); + selection.collapseToStart(); + return; + } + const { + startContainer, + startOffset + } = range; + const bufferBefore = []; + const bufferAfter = []; + if (startContainer.nodeType === Node.TEXT_NODE) { + const parent = startContainer.parentElement; + bufferAfter.push(startContainer.nodeValue.slice(startOffset).replaceAll(EOL_PATTERN, "")); + if (parent !== this.editorDiv) { + let buffer = bufferBefore; + for (const child of this.editorDiv.childNodes) { + if (child === parent) { + buffer = bufferAfter; + continue; + } + buffer.push(__privateMethod(_b = _FreeTextEditor, _getNodeContent, getNodeContent_fn).call(_b, child)); + } + } + bufferBefore.push(startContainer.nodeValue.slice(0, startOffset).replaceAll(EOL_PATTERN, "")); + } else if (startContainer === this.editorDiv) { + let buffer = bufferBefore; + let i = 0; + for (const child of this.editorDiv.childNodes) { + if (i++ === startOffset) { + buffer = bufferAfter; + } + buffer.push(__privateMethod(_c = _FreeTextEditor, _getNodeContent, getNodeContent_fn).call(_c, child)); + } + } + __privateSet(this, _content, `${bufferBefore.join("\n")}${paste}${bufferAfter.join("\n")}`); + __privateMethod(this, _setContent, setContent_fn).call(this); + const newRange = new Range(); + let beforeLength = bufferBefore.reduce((acc, line) => acc + line.length, 0); + for (const { + firstChild + } of this.editorDiv.childNodes) { + if (firstChild.nodeType === Node.TEXT_NODE) { + const length = firstChild.nodeValue.length; + if (beforeLength <= length) { + newRange.setStart(firstChild, beforeLength); + newRange.setEnd(firstChild, beforeLength); + break; + } + beforeLength -= length; + } + } + selection.removeAllRanges(); + selection.addRange(newRange); + } + get contentDiv() { + return this.editorDiv; + } + static deserialize(data, parent, uiManager) { + var _a2; + let initialData = null; + if (data instanceof FreeTextAnnotationElement) { + const { + data: { + defaultAppearanceData: { + fontSize, + fontColor + }, + rect, + rotation, + id + }, + textContent, + textPosition, + parent: { + page: { + pageNumber + } + } + } = data; + if (!textContent || textContent.length === 0) { + return null; + } + initialData = data = { + annotationType: AnnotationEditorType.FREETEXT, + color: Array.from(fontColor), + fontSize, + value: textContent.join("\n"), + position: textPosition, + pageIndex: pageNumber - 1, + rect: rect.slice(0), + rotation, + id, + deleted: false + }; + } + const editor = super.deserialize(data, parent, uiManager); + __privateSet(editor, _fontSize2, data.fontSize); + __privateSet(editor, _color2, Util.makeHexColor(...data.color)); + __privateSet(editor, _content, __privateMethod(_a2 = _FreeTextEditor, _deserializeContent, deserializeContent_fn).call(_a2, data.value)); + editor.annotationElementId = data.id || null; + __privateSet(editor, _initialData, initialData); + return editor; + } + serialize(isForCopying = false) { + if (this.isEmpty()) { + return null; + } + if (this.deleted) { + return { + pageIndex: this.pageIndex, + id: this.annotationElementId, + deleted: true + }; + } + const padding = _FreeTextEditor._internalPadding * this.parentScale; + const rect = this.getRect(padding, padding); + const color = AnnotationEditor._colorManager.convert(this.isAttachedToDOM ? getComputedStyle(this.editorDiv).color : __privateGet(this, _color2)); + const serialized = { + annotationType: AnnotationEditorType.FREETEXT, + color, + fontSize: __privateGet(this, _fontSize2), + value: __privateMethod(this, _serializeContent, serializeContent_fn).call(this), + pageIndex: this.pageIndex, + rect, + rotation: this.rotation, + structTreeParentId: this._structTreeParentId + }; + if (isForCopying) { + return serialized; + } + if (this.annotationElementId && !__privateMethod(this, _hasElementChanged, hasElementChanged_fn).call(this, serialized)) { + return null; + } + serialized.id = this.annotationElementId; + return serialized; + } + renderAnnotationElement(annotation) { + const content = super.renderAnnotationElement(annotation); + if (this.deleted) { + return content; + } + const { + style + } = content; + style.fontSize = `calc(${__privateGet(this, _fontSize2)}px * var(--scale-factor))`; + style.color = __privateGet(this, _color2); + content.replaceChildren(); + for (const line of __privateGet(this, _content).split("\n")) { + const div = document.createElement("div"); + div.append(line ? document.createTextNode(line) : document.createElement("br")); + content.append(div); + } + const padding = _FreeTextEditor._internalPadding * this.parentScale; + annotation.updateEdited({ + rect: this.getRect(padding, padding), + popupContent: __privateGet(this, _content) + }); + return content; + } + resetAnnotationElement(annotation) { + super.resetAnnotationElement(annotation); + annotation.resetEdited(); + } +}; +var FreeTextEditor = _FreeTextEditor; +_color2 = new WeakMap(); +_content = new WeakMap(); +_editorDivId = new WeakMap(); +_editModeAC = new WeakMap(); +_fontSize2 = new WeakMap(); +_initialData = new WeakMap(); +_updateFontSize = new WeakSet(); +updateFontSize_fn = function(fontSize) { + const setFontsize = (size) => { + this.editorDiv.style.fontSize = `calc(${size}px * var(--scale-factor))`; + this.translate(0, -(size - __privateGet(this, _fontSize2)) * this.parentScale); + __privateSet(this, _fontSize2, size); + __privateMethod(this, _setEditorDimensions, setEditorDimensions_fn).call(this); + }; + const savedFontsize = __privateGet(this, _fontSize2); + this.addCommands({ + cmd: setFontsize.bind(this, fontSize), + undo: setFontsize.bind(this, savedFontsize), + post: this._uiManager.updateUI.bind(this._uiManager, this), + mustExec: true, + type: AnnotationEditorParamsType.FREETEXT_SIZE, + overwriteIfSameType: true, + keepUndo: true + }); +}; +_updateColor = new WeakSet(); +updateColor_fn = function(color) { + const setColor = (col) => { + __privateSet(this, _color2, this.editorDiv.style.color = col); + }; + const savedColor = __privateGet(this, _color2); + this.addCommands({ + cmd: setColor.bind(this, color), + undo: setColor.bind(this, savedColor), + post: this._uiManager.updateUI.bind(this._uiManager, this), + mustExec: true, + type: AnnotationEditorParamsType.FREETEXT_COLOR, + overwriteIfSameType: true, + keepUndo: true + }); +}; +_extractText = new WeakSet(); +extractText_fn = function() { + var _a2; + const buffer = []; + this.editorDiv.normalize(); + for (const child of this.editorDiv.childNodes) { + buffer.push(__privateMethod(_a2 = _FreeTextEditor, _getNodeContent, getNodeContent_fn).call(_a2, child)); + } + return buffer.join("\n"); +}; +_setEditorDimensions = new WeakSet(); +setEditorDimensions_fn = function() { + const [parentWidth, parentHeight] = this.parentDimensions; + let rect; + if (this.isAttachedToDOM) { + rect = this.div.getBoundingClientRect(); + } else { + const { + currentLayer, + div + } = this; + const savedDisplay = div.style.display; + const savedVisibility = div.classList.contains("hidden"); + div.classList.remove("hidden"); + div.style.display = "hidden"; + currentLayer.div.append(this.div); + rect = div.getBoundingClientRect(); + div.remove(); + div.style.display = savedDisplay; + div.classList.toggle("hidden", savedVisibility); + } + if (this.rotation % 180 === this.parentRotation % 180) { + this.width = rect.width / parentWidth; + this.height = rect.height / parentHeight; + } else { + this.width = rect.height / parentWidth; + this.height = rect.width / parentHeight; + } + this.fixAndSetPosition(); +}; +_getNodeContent = new WeakSet(); +getNodeContent_fn = function(node) { + return (node.nodeType === Node.TEXT_NODE ? node.nodeValue : node.innerText).replaceAll(EOL_PATTERN, ""); +}; +_setContent = new WeakSet(); +setContent_fn = function() { + this.editorDiv.replaceChildren(); + if (!__privateGet(this, _content)) { + return; + } + for (const line of __privateGet(this, _content).split("\n")) { + const div = document.createElement("div"); + div.append(line ? document.createTextNode(line) : document.createElement("br")); + this.editorDiv.append(div); + } +}; +_serializeContent = new WeakSet(); +serializeContent_fn = function() { + return __privateGet(this, _content).replaceAll("\xA0", " "); +}; +_deserializeContent = new WeakSet(); +deserializeContent_fn = function(content) { + return content.replaceAll(" ", "\xA0"); +}; +_hasElementChanged = new WeakSet(); +hasElementChanged_fn = function(serialized) { + const { + value, + fontSize, + color, + pageIndex + } = __privateGet(this, _initialData); + return this._hasBeenMoved || serialized.value !== value || serialized.fontSize !== fontSize || serialized.color.some((c, i) => c !== color[i]) || serialized.pageIndex !== pageIndex; +}; +__privateAdd(FreeTextEditor, _getNodeContent); +__privateAdd(FreeTextEditor, _deserializeContent); +__publicField(FreeTextEditor, "_freeTextDefaultContent", ""); +__publicField(FreeTextEditor, "_internalPadding", 0); +__publicField(FreeTextEditor, "_defaultColor", null); +__publicField(FreeTextEditor, "_defaultFontSize", 10); +__publicField(FreeTextEditor, "_type", "freetext"); +__publicField(FreeTextEditor, "_editorType", AnnotationEditorType.FREETEXT); +var _box, _verticalEdges, _intervals, _getOutlines, getOutlines_fn, _binarySearch, binarySearch_fn, _insert, insert_fn, _remove, remove_fn, _breakEdge, breakEdge_fn; +var Outliner = class { + constructor(boxes, borderWidth = 0, innerMargin = 0, isLTR = true) { + __privateAdd(this, _getOutlines); + __privateAdd(this, _binarySearch); + __privateAdd(this, _insert); + __privateAdd(this, _remove); + __privateAdd(this, _breakEdge); + __privateAdd(this, _box, void 0); + __privateAdd(this, _verticalEdges, []); + __privateAdd(this, _intervals, []); + let minX = Infinity; + let maxX = -Infinity; + let minY = Infinity; + let maxY = -Infinity; + const NUMBER_OF_DIGITS = 4; + const EPSILON = 10 ** -NUMBER_OF_DIGITS; + for (const { + x, + y, + width, + height + } of boxes) { + const x1 = Math.floor((x - borderWidth) / EPSILON) * EPSILON; + const x2 = Math.ceil((x + width + borderWidth) / EPSILON) * EPSILON; + const y1 = Math.floor((y - borderWidth) / EPSILON) * EPSILON; + const y2 = Math.ceil((y + height + borderWidth) / EPSILON) * EPSILON; + const left = [x1, y1, y2, true]; + const right = [x2, y1, y2, false]; + __privateGet(this, _verticalEdges).push(left, right); + minX = Math.min(minX, x1); + maxX = Math.max(maxX, x2); + minY = Math.min(minY, y1); + maxY = Math.max(maxY, y2); + } + const bboxWidth = maxX - minX + 2 * innerMargin; + const bboxHeight = maxY - minY + 2 * innerMargin; + const shiftedMinX = minX - innerMargin; + const shiftedMinY = minY - innerMargin; + const lastEdge = __privateGet(this, _verticalEdges).at(isLTR ? -1 : -2); + const lastPoint = [lastEdge[0], lastEdge[2]]; + for (const edge of __privateGet(this, _verticalEdges)) { + const [x, y1, y2] = edge; + edge[0] = (x - shiftedMinX) / bboxWidth; + edge[1] = (y1 - shiftedMinY) / bboxHeight; + edge[2] = (y2 - shiftedMinY) / bboxHeight; + } + __privateSet(this, _box, { + x: shiftedMinX, + y: shiftedMinY, + width: bboxWidth, + height: bboxHeight, + lastPoint + }); + } + getOutlines() { + __privateGet(this, _verticalEdges).sort((a, b) => a[0] - b[0] || a[1] - b[1] || a[2] - b[2]); + const outlineVerticalEdges = []; + for (const edge of __privateGet(this, _verticalEdges)) { + if (edge[3]) { + outlineVerticalEdges.push(...__privateMethod(this, _breakEdge, breakEdge_fn).call(this, edge)); + __privateMethod(this, _insert, insert_fn).call(this, edge); + } else { + __privateMethod(this, _remove, remove_fn).call(this, edge); + outlineVerticalEdges.push(...__privateMethod(this, _breakEdge, breakEdge_fn).call(this, edge)); + } + } + return __privateMethod(this, _getOutlines, getOutlines_fn).call(this, outlineVerticalEdges); + } +}; +_box = new WeakMap(); +_verticalEdges = new WeakMap(); +_intervals = new WeakMap(); +_getOutlines = new WeakSet(); +getOutlines_fn = function(outlineVerticalEdges) { + const edges = []; + const allEdges = /* @__PURE__ */ new Set(); + for (const edge of outlineVerticalEdges) { + const [x, y1, y2] = edge; + edges.push([x, y1, edge], [x, y2, edge]); + } + edges.sort((a, b) => a[1] - b[1] || a[0] - b[0]); + for (let i = 0, ii = edges.length; i < ii; i += 2) { + const edge1 = edges[i][2]; + const edge2 = edges[i + 1][2]; + edge1.push(edge2); + edge2.push(edge1); + allEdges.add(edge1); + allEdges.add(edge2); + } + const outlines = []; + let outline; + while (allEdges.size > 0) { + const edge = allEdges.values().next().value; + let [x, y1, y2, edge1, edge2] = edge; + allEdges.delete(edge); + let lastPointX = x; + let lastPointY = y1; + outline = [x, y2]; + outlines.push(outline); + while (true) { + let e; + if (allEdges.has(edge1)) { + e = edge1; + } else if (allEdges.has(edge2)) { + e = edge2; + } else { + break; + } + allEdges.delete(e); + [x, y1, y2, edge1, edge2] = e; + if (lastPointX !== x) { + outline.push(lastPointX, lastPointY, x, lastPointY === y1 ? y1 : y2); + lastPointX = x; + } + lastPointY = lastPointY === y1 ? y2 : y1; + } + outline.push(lastPointX, lastPointY); + } + return new HighlightOutline(outlines, __privateGet(this, _box)); +}; +_binarySearch = new WeakSet(); +binarySearch_fn = function(y) { + const array = __privateGet(this, _intervals); + let start = 0; + let end = array.length - 1; + while (start <= end) { + const middle = start + end >> 1; + const y1 = array[middle][0]; + if (y1 === y) { + return middle; + } + if (y1 < y) { + start = middle + 1; + } else { + end = middle - 1; + } + } + return end + 1; +}; +_insert = new WeakSet(); +insert_fn = function([, y1, y2]) { + const index = __privateMethod(this, _binarySearch, binarySearch_fn).call(this, y1); + __privateGet(this, _intervals).splice(index, 0, [y1, y2]); +}; +_remove = new WeakSet(); +remove_fn = function([, y1, y2]) { + const index = __privateMethod(this, _binarySearch, binarySearch_fn).call(this, y1); + for (let i = index; i < __privateGet(this, _intervals).length; i++) { + const [start, end] = __privateGet(this, _intervals)[i]; + if (start !== y1) { + break; + } + if (start === y1 && end === y2) { + __privateGet(this, _intervals).splice(i, 1); + return; + } + } + for (let i = index - 1; i >= 0; i--) { + const [start, end] = __privateGet(this, _intervals)[i]; + if (start !== y1) { + break; + } + if (start === y1 && end === y2) { + __privateGet(this, _intervals).splice(i, 1); + return; + } + } +}; +_breakEdge = new WeakSet(); +breakEdge_fn = function(edge) { + const [x, y1, y2] = edge; + const results = [[x, y1, y2]]; + const index = __privateMethod(this, _binarySearch, binarySearch_fn).call(this, y2); + for (let i = 0; i < index; i++) { + const [start, end] = __privateGet(this, _intervals)[i]; + for (let j = 0, jj = results.length; j < jj; j++) { + const [, y3, y4] = results[j]; + if (end <= y3 || y4 <= start) { + continue; + } + if (y3 >= start) { + if (y4 > end) { + results[j][1] = end; + } else { + if (jj === 1) { + return []; + } + results.splice(j, 1); + j--; + jj--; + } + continue; + } + results[j][2] = start; + if (y4 > end) { + results.push([x, end, y4]); + } + } + } + return results; +}; +var Outline = class { + toSVGPath() { + throw new Error("Abstract method `toSVGPath` must be implemented."); + } + get box() { + throw new Error("Abstract getter `box` must be implemented."); + } + serialize(_bbox2, _rotation2) { + throw new Error("Abstract method `serialize` must be implemented."); + } + get free() { + return this instanceof FreeHighlightOutline; + } +}; +var _box2, _outlines; +var HighlightOutline = class extends Outline { + constructor(outlines, box) { + super(); + __privateAdd(this, _box2, void 0); + __privateAdd(this, _outlines, void 0); + __privateSet(this, _outlines, outlines); + __privateSet(this, _box2, box); + } + toSVGPath() { + const buffer = []; + for (const polygon of __privateGet(this, _outlines)) { + let [prevX, prevY] = polygon; + buffer.push(`M${prevX} ${prevY}`); + for (let i = 2; i < polygon.length; i += 2) { + const x = polygon[i]; + const y = polygon[i + 1]; + if (x === prevX) { + buffer.push(`V${y}`); + prevY = y; + } else if (y === prevY) { + buffer.push(`H${x}`); + prevX = x; + } + } + buffer.push("Z"); + } + return buffer.join(" "); + } + serialize([blX, blY, trX, trY], _rotation2) { + const outlines = []; + const width = trX - blX; + const height = trY - blY; + for (const outline of __privateGet(this, _outlines)) { + const points = new Array(outline.length); + for (let i = 0; i < outline.length; i += 2) { + points[i] = blX + outline[i] * width; + points[i + 1] = trY - outline[i + 1] * height; + } + outlines.push(points); + } + return outlines; + } + get box() { + return __privateGet(this, _box2); + } +}; +_box2 = new WeakMap(); +_outlines = new WeakMap(); +var _box3, _bottom, _innerMargin, _isLTR, _top, _last, _lastX, _lastY, _min, _min_dist, _scaleFactor, _thickness, _points, _MIN_DIST, _MIN_DIFF, _MIN, _getLastCoords, getLastCoords_fn; +var _FreeOutliner = class { + constructor({ + x, + y + }, box, scaleFactor, thickness, isLTR, innerMargin = 0) { + __privateAdd(this, _getLastCoords); + __privateAdd(this, _box3, void 0); + __privateAdd(this, _bottom, []); + __privateAdd(this, _innerMargin, void 0); + __privateAdd(this, _isLTR, void 0); + __privateAdd(this, _top, []); + __privateAdd(this, _last, new Float64Array(18)); + __privateAdd(this, _lastX, void 0); + __privateAdd(this, _lastY, void 0); + __privateAdd(this, _min, void 0); + __privateAdd(this, _min_dist, void 0); + __privateAdd(this, _scaleFactor, void 0); + __privateAdd(this, _thickness, void 0); + __privateAdd(this, _points, []); + __privateSet(this, _box3, box); + __privateSet(this, _thickness, thickness * scaleFactor); + __privateSet(this, _isLTR, isLTR); + __privateGet(this, _last).set([NaN, NaN, NaN, NaN, x, y], 6); + __privateSet(this, _innerMargin, innerMargin); + __privateSet(this, _min_dist, __privateGet(_FreeOutliner, _MIN_DIST) * scaleFactor); + __privateSet(this, _min, __privateGet(_FreeOutliner, _MIN) * scaleFactor); + __privateSet(this, _scaleFactor, scaleFactor); + __privateGet(this, _points).push(x, y); + } + get free() { + return true; + } + isEmpty() { + return isNaN(__privateGet(this, _last)[8]); + } + add({ + x, + y + }) { + var _a2; + __privateSet(this, _lastX, x); + __privateSet(this, _lastY, y); + const [layerX, layerY, layerWidth, layerHeight] = __privateGet(this, _box3); + let [x1, y1, x2, y2] = __privateGet(this, _last).subarray(8, 12); + const diffX = x - x2; + const diffY = y - y2; + const d = Math.hypot(diffX, diffY); + if (d < __privateGet(this, _min)) { + return false; + } + const diffD = d - __privateGet(this, _min_dist); + const K = diffD / d; + const shiftX = K * diffX; + const shiftY = K * diffY; + let x0 = x1; + let y0 = y1; + x1 = x2; + y1 = y2; + x2 += shiftX; + y2 += shiftY; + (_a2 = __privateGet(this, _points)) == null ? void 0 : _a2.push(x, y); + const nX = -shiftY / diffD; + const nY = shiftX / diffD; + const thX = nX * __privateGet(this, _thickness); + const thY = nY * __privateGet(this, _thickness); + __privateGet(this, _last).set(__privateGet(this, _last).subarray(2, 8), 0); + __privateGet(this, _last).set([x2 + thX, y2 + thY], 4); + __privateGet(this, _last).set(__privateGet(this, _last).subarray(14, 18), 12); + __privateGet(this, _last).set([x2 - thX, y2 - thY], 16); + if (isNaN(__privateGet(this, _last)[6])) { + if (__privateGet(this, _top).length === 0) { + __privateGet(this, _last).set([x1 + thX, y1 + thY], 2); + __privateGet(this, _top).push(NaN, NaN, NaN, NaN, (x1 + thX - layerX) / layerWidth, (y1 + thY - layerY) / layerHeight); + __privateGet(this, _last).set([x1 - thX, y1 - thY], 14); + __privateGet(this, _bottom).push(NaN, NaN, NaN, NaN, (x1 - thX - layerX) / layerWidth, (y1 - thY - layerY) / layerHeight); + } + __privateGet(this, _last).set([x0, y0, x1, y1, x2, y2], 6); + return !this.isEmpty(); + } + __privateGet(this, _last).set([x0, y0, x1, y1, x2, y2], 6); + const angle = Math.abs(Math.atan2(y0 - y1, x0 - x1) - Math.atan2(shiftY, shiftX)); + if (angle < Math.PI / 2) { + [x1, y1, x2, y2] = __privateGet(this, _last).subarray(2, 6); + __privateGet(this, _top).push(NaN, NaN, NaN, NaN, ((x1 + x2) / 2 - layerX) / layerWidth, ((y1 + y2) / 2 - layerY) / layerHeight); + [x1, y1, x0, y0] = __privateGet(this, _last).subarray(14, 18); + __privateGet(this, _bottom).push(NaN, NaN, NaN, NaN, ((x0 + x1) / 2 - layerX) / layerWidth, ((y0 + y1) / 2 - layerY) / layerHeight); + return true; + } + [x0, y0, x1, y1, x2, y2] = __privateGet(this, _last).subarray(0, 6); + __privateGet(this, _top).push(((x0 + 5 * x1) / 6 - layerX) / layerWidth, ((y0 + 5 * y1) / 6 - layerY) / layerHeight, ((5 * x1 + x2) / 6 - layerX) / layerWidth, ((5 * y1 + y2) / 6 - layerY) / layerHeight, ((x1 + x2) / 2 - layerX) / layerWidth, ((y1 + y2) / 2 - layerY) / layerHeight); + [x2, y2, x1, y1, x0, y0] = __privateGet(this, _last).subarray(12, 18); + __privateGet(this, _bottom).push(((x0 + 5 * x1) / 6 - layerX) / layerWidth, ((y0 + 5 * y1) / 6 - layerY) / layerHeight, ((5 * x1 + x2) / 6 - layerX) / layerWidth, ((5 * y1 + y2) / 6 - layerY) / layerHeight, ((x1 + x2) / 2 - layerX) / layerWidth, ((y1 + y2) / 2 - layerY) / layerHeight); + return true; + } + toSVGPath() { + if (this.isEmpty()) { + return ""; + } + const top = __privateGet(this, _top); + const bottom = __privateGet(this, _bottom); + const lastTop = __privateGet(this, _last).subarray(4, 6); + const lastBottom = __privateGet(this, _last).subarray(16, 18); + const [x, y, width, height] = __privateGet(this, _box3); + const [lastTopX, lastTopY, lastBottomX, lastBottomY] = __privateMethod(this, _getLastCoords, getLastCoords_fn).call(this); + if (isNaN(__privateGet(this, _last)[6]) && !this.isEmpty()) { + return `M${(__privateGet(this, _last)[2] - x) / width} ${(__privateGet(this, _last)[3] - y) / height} L${(__privateGet(this, _last)[4] - x) / width} ${(__privateGet(this, _last)[5] - y) / height} L${lastTopX} ${lastTopY} L${lastBottomX} ${lastBottomY} L${(__privateGet(this, _last)[16] - x) / width} ${(__privateGet(this, _last)[17] - y) / height} L${(__privateGet(this, _last)[14] - x) / width} ${(__privateGet(this, _last)[15] - y) / height} Z`; + } + const buffer = []; + buffer.push(`M${top[4]} ${top[5]}`); + for (let i = 6; i < top.length; i += 6) { + if (isNaN(top[i])) { + buffer.push(`L${top[i + 4]} ${top[i + 5]}`); + } else { + buffer.push(`C${top[i]} ${top[i + 1]} ${top[i + 2]} ${top[i + 3]} ${top[i + 4]} ${top[i + 5]}`); + } + } + buffer.push(`L${(lastTop[0] - x) / width} ${(lastTop[1] - y) / height} L${lastTopX} ${lastTopY} L${lastBottomX} ${lastBottomY} L${(lastBottom[0] - x) / width} ${(lastBottom[1] - y) / height}`); + for (let i = bottom.length - 6; i >= 6; i -= 6) { + if (isNaN(bottom[i])) { + buffer.push(`L${bottom[i + 4]} ${bottom[i + 5]}`); + } else { + buffer.push(`C${bottom[i]} ${bottom[i + 1]} ${bottom[i + 2]} ${bottom[i + 3]} ${bottom[i + 4]} ${bottom[i + 5]}`); + } + } + buffer.push(`L${bottom[4]} ${bottom[5]} Z`); + return buffer.join(" "); + } + getOutlines() { + var _a2, _b; + const top = __privateGet(this, _top); + const bottom = __privateGet(this, _bottom); + const last = __privateGet(this, _last); + const lastTop = last.subarray(4, 6); + const lastBottom = last.subarray(16, 18); + const [layerX, layerY, layerWidth, layerHeight] = __privateGet(this, _box3); + const points = new Float64Array(((_b = (_a2 = __privateGet(this, _points)) == null ? void 0 : _a2.length) != null ? _b : 0) + 2); + for (let i = 0, ii = points.length - 2; i < ii; i += 2) { + points[i] = (__privateGet(this, _points)[i] - layerX) / layerWidth; + points[i + 1] = (__privateGet(this, _points)[i + 1] - layerY) / layerHeight; + } + points[points.length - 2] = (__privateGet(this, _lastX) - layerX) / layerWidth; + points[points.length - 1] = (__privateGet(this, _lastY) - layerY) / layerHeight; + const [lastTopX, lastTopY, lastBottomX, lastBottomY] = __privateMethod(this, _getLastCoords, getLastCoords_fn).call(this); + if (isNaN(last[6]) && !this.isEmpty()) { + const outline2 = new Float64Array(36); + outline2.set([NaN, NaN, NaN, NaN, (last[2] - layerX) / layerWidth, (last[3] - layerY) / layerHeight, NaN, NaN, NaN, NaN, (last[4] - layerX) / layerWidth, (last[5] - layerY) / layerHeight, NaN, NaN, NaN, NaN, lastTopX, lastTopY, NaN, NaN, NaN, NaN, lastBottomX, lastBottomY, NaN, NaN, NaN, NaN, (last[16] - layerX) / layerWidth, (last[17] - layerY) / layerHeight, NaN, NaN, NaN, NaN, (last[14] - layerX) / layerWidth, (last[15] - layerY) / layerHeight], 0); + return new FreeHighlightOutline(outline2, points, __privateGet(this, _box3), __privateGet(this, _scaleFactor), __privateGet(this, _innerMargin), __privateGet(this, _isLTR)); + } + const outline = new Float64Array(__privateGet(this, _top).length + 24 + __privateGet(this, _bottom).length); + let N = top.length; + for (let i = 0; i < N; i += 2) { + if (isNaN(top[i])) { + outline[i] = outline[i + 1] = NaN; + continue; + } + outline[i] = top[i]; + outline[i + 1] = top[i + 1]; + } + outline.set([NaN, NaN, NaN, NaN, (lastTop[0] - layerX) / layerWidth, (lastTop[1] - layerY) / layerHeight, NaN, NaN, NaN, NaN, lastTopX, lastTopY, NaN, NaN, NaN, NaN, lastBottomX, lastBottomY, NaN, NaN, NaN, NaN, (lastBottom[0] - layerX) / layerWidth, (lastBottom[1] - layerY) / layerHeight], N); + N += 24; + for (let i = bottom.length - 6; i >= 6; i -= 6) { + for (let j = 0; j < 6; j += 2) { + if (isNaN(bottom[i + j])) { + outline[N] = outline[N + 1] = NaN; + N += 2; + continue; + } + outline[N] = bottom[i + j]; + outline[N + 1] = bottom[i + j + 1]; + N += 2; + } + } + outline.set([NaN, NaN, NaN, NaN, bottom[4], bottom[5]], N); + return new FreeHighlightOutline(outline, points, __privateGet(this, _box3), __privateGet(this, _scaleFactor), __privateGet(this, _innerMargin), __privateGet(this, _isLTR)); + } +}; +var FreeOutliner = _FreeOutliner; +_box3 = new WeakMap(); +_bottom = new WeakMap(); +_innerMargin = new WeakMap(); +_isLTR = new WeakMap(); +_top = new WeakMap(); +_last = new WeakMap(); +_lastX = new WeakMap(); +_lastY = new WeakMap(); +_min = new WeakMap(); +_min_dist = new WeakMap(); +_scaleFactor = new WeakMap(); +_thickness = new WeakMap(); +_points = new WeakMap(); +_MIN_DIST = new WeakMap(); +_MIN_DIFF = new WeakMap(); +_MIN = new WeakMap(); +_getLastCoords = new WeakSet(); +getLastCoords_fn = function() { + const lastTop = __privateGet(this, _last).subarray(4, 6); + const lastBottom = __privateGet(this, _last).subarray(16, 18); + const [x, y, width, height] = __privateGet(this, _box3); + return [(__privateGet(this, _lastX) + (lastTop[0] - lastBottom[0]) / 2 - x) / width, (__privateGet(this, _lastY) + (lastTop[1] - lastBottom[1]) / 2 - y) / height, (__privateGet(this, _lastX) + (lastBottom[0] - lastTop[0]) / 2 - x) / width, (__privateGet(this, _lastY) + (lastBottom[1] - lastTop[1]) / 2 - y) / height]; +}; +__privateAdd(FreeOutliner, _MIN_DIST, 8); +__privateAdd(FreeOutliner, _MIN_DIFF, 2); +__privateAdd(FreeOutliner, _MIN, __privateGet(_FreeOutliner, _MIN_DIST) + __privateGet(_FreeOutliner, _MIN_DIFF)); +var _box4, _bbox, _innerMargin2, _isLTR2, _points2, _scaleFactor2, _outline, _rescale, rescale_fn, _rescaleAndSwap, rescaleAndSwap_fn, _computeMinMax, computeMinMax_fn; +var FreeHighlightOutline = class extends Outline { + constructor(outline, points, box, scaleFactor, innerMargin, isLTR) { + super(); + __privateAdd(this, _rescale); + __privateAdd(this, _rescaleAndSwap); + __privateAdd(this, _computeMinMax); + __privateAdd(this, _box4, void 0); + __privateAdd(this, _bbox, null); + __privateAdd(this, _innerMargin2, void 0); + __privateAdd(this, _isLTR2, void 0); + __privateAdd(this, _points2, void 0); + __privateAdd(this, _scaleFactor2, void 0); + __privateAdd(this, _outline, void 0); + __privateSet(this, _outline, outline); + __privateSet(this, _points2, points); + __privateSet(this, _box4, box); + __privateSet(this, _scaleFactor2, scaleFactor); + __privateSet(this, _innerMargin2, innerMargin); + __privateSet(this, _isLTR2, isLTR); + __privateMethod(this, _computeMinMax, computeMinMax_fn).call(this, isLTR); + const { + x, + y, + width, + height + } = __privateGet(this, _bbox); + for (let i = 0, ii = outline.length; i < ii; i += 2) { + outline[i] = (outline[i] - x) / width; + outline[i + 1] = (outline[i + 1] - y) / height; + } + for (let i = 0, ii = points.length; i < ii; i += 2) { + points[i] = (points[i] - x) / width; + points[i + 1] = (points[i + 1] - y) / height; + } + } + toSVGPath() { + const buffer = [`M${__privateGet(this, _outline)[4]} ${__privateGet(this, _outline)[5]}`]; + for (let i = 6, ii = __privateGet(this, _outline).length; i < ii; i += 6) { + if (isNaN(__privateGet(this, _outline)[i])) { + buffer.push(`L${__privateGet(this, _outline)[i + 4]} ${__privateGet(this, _outline)[i + 5]}`); + continue; + } + buffer.push(`C${__privateGet(this, _outline)[i]} ${__privateGet(this, _outline)[i + 1]} ${__privateGet(this, _outline)[i + 2]} ${__privateGet(this, _outline)[i + 3]} ${__privateGet(this, _outline)[i + 4]} ${__privateGet(this, _outline)[i + 5]}`); + } + buffer.push("Z"); + return buffer.join(" "); + } + serialize([blX, blY, trX, trY], rotation) { + const width = trX - blX; + const height = trY - blY; + let outline; + let points; + switch (rotation) { + case 0: + outline = __privateMethod(this, _rescale, rescale_fn).call(this, __privateGet(this, _outline), blX, trY, width, -height); + points = __privateMethod(this, _rescale, rescale_fn).call(this, __privateGet(this, _points2), blX, trY, width, -height); + break; + case 90: + outline = __privateMethod(this, _rescaleAndSwap, rescaleAndSwap_fn).call(this, __privateGet(this, _outline), blX, blY, width, height); + points = __privateMethod(this, _rescaleAndSwap, rescaleAndSwap_fn).call(this, __privateGet(this, _points2), blX, blY, width, height); + break; + case 180: + outline = __privateMethod(this, _rescale, rescale_fn).call(this, __privateGet(this, _outline), trX, blY, -width, height); + points = __privateMethod(this, _rescale, rescale_fn).call(this, __privateGet(this, _points2), trX, blY, -width, height); + break; + case 270: + outline = __privateMethod(this, _rescaleAndSwap, rescaleAndSwap_fn).call(this, __privateGet(this, _outline), trX, trY, -width, -height); + points = __privateMethod(this, _rescaleAndSwap, rescaleAndSwap_fn).call(this, __privateGet(this, _points2), trX, trY, -width, -height); + break; + } + return { + outline: Array.from(outline), + points: [Array.from(points)] + }; + } + get box() { + return __privateGet(this, _bbox); + } + getNewOutline(thickness, innerMargin) { + const { + x, + y, + width, + height + } = __privateGet(this, _bbox); + const [layerX, layerY, layerWidth, layerHeight] = __privateGet(this, _box4); + const sx = width * layerWidth; + const sy = height * layerHeight; + const tx = x * layerWidth + layerX; + const ty = y * layerHeight + layerY; + const outliner = new FreeOutliner({ + x: __privateGet(this, _points2)[0] * sx + tx, + y: __privateGet(this, _points2)[1] * sy + ty + }, __privateGet(this, _box4), __privateGet(this, _scaleFactor2), thickness, __privateGet(this, _isLTR2), innerMargin != null ? innerMargin : __privateGet(this, _innerMargin2)); + for (let i = 2; i < __privateGet(this, _points2).length; i += 2) { + outliner.add({ + x: __privateGet(this, _points2)[i] * sx + tx, + y: __privateGet(this, _points2)[i + 1] * sy + ty + }); + } + return outliner.getOutlines(); + } +}; +_box4 = new WeakMap(); +_bbox = new WeakMap(); +_innerMargin2 = new WeakMap(); +_isLTR2 = new WeakMap(); +_points2 = new WeakMap(); +_scaleFactor2 = new WeakMap(); +_outline = new WeakMap(); +_rescale = new WeakSet(); +rescale_fn = function(src, tx, ty, sx, sy) { + const dest = new Float64Array(src.length); + for (let i = 0, ii = src.length; i < ii; i += 2) { + dest[i] = tx + src[i] * sx; + dest[i + 1] = ty + src[i + 1] * sy; + } + return dest; +}; +_rescaleAndSwap = new WeakSet(); +rescaleAndSwap_fn = function(src, tx, ty, sx, sy) { + const dest = new Float64Array(src.length); + for (let i = 0, ii = src.length; i < ii; i += 2) { + dest[i] = tx + src[i + 1] * sx; + dest[i + 1] = ty + src[i] * sy; + } + return dest; +}; +_computeMinMax = new WeakSet(); +computeMinMax_fn = function(isLTR) { + const outline = __privateGet(this, _outline); + let lastX = outline[4]; + let lastY = outline[5]; + let minX = lastX; + let minY = lastY; + let maxX = lastX; + let maxY = lastY; + let lastPointX = lastX; + let lastPointY = lastY; + const ltrCallback = isLTR ? Math.max : Math.min; + for (let i = 6, ii = outline.length; i < ii; i += 6) { + if (isNaN(outline[i])) { + minX = Math.min(minX, outline[i + 4]); + minY = Math.min(minY, outline[i + 5]); + maxX = Math.max(maxX, outline[i + 4]); + maxY = Math.max(maxY, outline[i + 5]); + if (lastPointY < outline[i + 5]) { + lastPointX = outline[i + 4]; + lastPointY = outline[i + 5]; + } else if (lastPointY === outline[i + 5]) { + lastPointX = ltrCallback(lastPointX, outline[i + 4]); + } + } else { + const bbox = Util.bezierBoundingBox(lastX, lastY, ...outline.slice(i, i + 6)); + minX = Math.min(minX, bbox[0]); + minY = Math.min(minY, bbox[1]); + maxX = Math.max(maxX, bbox[2]); + maxY = Math.max(maxY, bbox[3]); + if (lastPointY < bbox[3]) { + lastPointX = bbox[2]; + lastPointY = bbox[3]; + } else if (lastPointY === bbox[3]) { + lastPointX = ltrCallback(lastPointX, bbox[2]); + } + } + lastX = outline[i + 4]; + lastY = outline[i + 5]; + } + const x = minX - __privateGet(this, _innerMargin2), y = minY - __privateGet(this, _innerMargin2), width = maxX - minX + 2 * __privateGet(this, _innerMargin2), height = maxY - minY + 2 * __privateGet(this, _innerMargin2); + __privateSet(this, _bbox, { + x, + y, + width, + height, + lastPoint: [lastPointX, lastPointY] + }); +}; +var _boundKeyDown2, _boundPointerDown, _button, _buttonSwatch, _defaultColor, _dropdown, _dropdownWasFromKeyboard, _isMainColorPicker, _editor3, _eventBus, _uiManager2, _type, _getDropdownRoot, getDropdownRoot_fn, _colorSelect, colorSelect_fn, _keyDown2, keyDown_fn2, _openDropdown, openDropdown_fn, _pointerDown2, pointerDown_fn2, _isDropdownVisible, isDropdownVisible_get; +var _ColorPicker = class { + constructor({ + editor = null, + uiManager = null + }) { + __privateAdd(this, _getDropdownRoot); + __privateAdd(this, _colorSelect); + __privateAdd(this, _keyDown2); + __privateAdd(this, _openDropdown); + __privateAdd(this, _pointerDown2); + __privateAdd(this, _isDropdownVisible); + __privateAdd(this, _boundKeyDown2, __privateMethod(this, _keyDown2, keyDown_fn2).bind(this)); + __privateAdd(this, _boundPointerDown, __privateMethod(this, _pointerDown2, pointerDown_fn2).bind(this)); + __privateAdd(this, _button, null); + __privateAdd(this, _buttonSwatch, null); + __privateAdd(this, _defaultColor, void 0); + __privateAdd(this, _dropdown, null); + __privateAdd(this, _dropdownWasFromKeyboard, false); + __privateAdd(this, _isMainColorPicker, false); + __privateAdd(this, _editor3, null); + __privateAdd(this, _eventBus, void 0); + __privateAdd(this, _uiManager2, null); + __privateAdd(this, _type, void 0); + var _a2; + if (editor) { + __privateSet(this, _isMainColorPicker, false); + __privateSet(this, _type, AnnotationEditorParamsType.HIGHLIGHT_COLOR); + __privateSet(this, _editor3, editor); + } else { + __privateSet(this, _isMainColorPicker, true); + __privateSet(this, _type, AnnotationEditorParamsType.HIGHLIGHT_DEFAULT_COLOR); + } + __privateSet(this, _uiManager2, (editor == null ? void 0 : editor._uiManager) || uiManager); + __privateSet(this, _eventBus, __privateGet(this, _uiManager2)._eventBus); + __privateSet(this, _defaultColor, (editor == null ? void 0 : editor.color) || ((_a2 = __privateGet(this, _uiManager2)) == null ? void 0 : _a2.highlightColors.values().next().value) || "#FFFF98"); + } + static get _keyboardManager() { + return shadow(this, "_keyboardManager", new KeyboardManager([[["Escape", "mac+Escape"], _ColorPicker.prototype._hideDropdownFromKeyboard], [[" ", "mac+ "], _ColorPicker.prototype._colorSelectFromKeyboard], [["ArrowDown", "ArrowRight", "mac+ArrowDown", "mac+ArrowRight"], _ColorPicker.prototype._moveToNext], [["ArrowUp", "ArrowLeft", "mac+ArrowUp", "mac+ArrowLeft"], _ColorPicker.prototype._moveToPrevious], [["Home", "mac+Home"], _ColorPicker.prototype._moveToBeginning], [["End", "mac+End"], _ColorPicker.prototype._moveToEnd]])); + } + renderButton() { + const button = __privateSet(this, _button, document.createElement("button")); + button.className = "colorPicker"; + button.tabIndex = "0"; + button.setAttribute("data-l10n-id", "pdfjs-editor-colorpicker-button"); + button.setAttribute("aria-haspopup", true); + const signal = __privateGet(this, _uiManager2)._signal; + button.addEventListener("click", __privateMethod(this, _openDropdown, openDropdown_fn).bind(this), { + signal + }); + button.addEventListener("keydown", __privateGet(this, _boundKeyDown2), { + signal + }); + const swatch = __privateSet(this, _buttonSwatch, document.createElement("span")); + swatch.className = "swatch"; + swatch.setAttribute("aria-hidden", true); + swatch.style.backgroundColor = __privateGet(this, _defaultColor); + button.append(swatch); + return button; + } + renderMainDropdown() { + const dropdown = __privateSet(this, _dropdown, __privateMethod(this, _getDropdownRoot, getDropdownRoot_fn).call(this)); + dropdown.setAttribute("aria-orientation", "horizontal"); + dropdown.setAttribute("aria-labelledby", "highlightColorPickerLabel"); + return dropdown; + } + _colorSelectFromKeyboard(event) { + if (event.target === __privateGet(this, _button)) { + __privateMethod(this, _openDropdown, openDropdown_fn).call(this, event); + return; + } + const color = event.target.getAttribute("data-color"); + if (!color) { + return; + } + __privateMethod(this, _colorSelect, colorSelect_fn).call(this, color, event); + } + _moveToNext(event) { + var _a2, _b; + if (!__privateGet(this, _isDropdownVisible, isDropdownVisible_get)) { + __privateMethod(this, _openDropdown, openDropdown_fn).call(this, event); + return; + } + if (event.target === __privateGet(this, _button)) { + (_a2 = __privateGet(this, _dropdown).firstChild) == null ? void 0 : _a2.focus(); + return; + } + (_b = event.target.nextSibling) == null ? void 0 : _b.focus(); + } + _moveToPrevious(event) { + var _a2, _b; + if (event.target === ((_a2 = __privateGet(this, _dropdown)) == null ? void 0 : _a2.firstChild) || event.target === __privateGet(this, _button)) { + if (__privateGet(this, _isDropdownVisible, isDropdownVisible_get)) { + this._hideDropdownFromKeyboard(); + } + return; + } + if (!__privateGet(this, _isDropdownVisible, isDropdownVisible_get)) { + __privateMethod(this, _openDropdown, openDropdown_fn).call(this, event); + } + (_b = event.target.previousSibling) == null ? void 0 : _b.focus(); + } + _moveToBeginning(event) { + var _a2; + if (!__privateGet(this, _isDropdownVisible, isDropdownVisible_get)) { + __privateMethod(this, _openDropdown, openDropdown_fn).call(this, event); + return; + } + (_a2 = __privateGet(this, _dropdown).firstChild) == null ? void 0 : _a2.focus(); + } + _moveToEnd(event) { + var _a2; + if (!__privateGet(this, _isDropdownVisible, isDropdownVisible_get)) { + __privateMethod(this, _openDropdown, openDropdown_fn).call(this, event); + return; + } + (_a2 = __privateGet(this, _dropdown).lastChild) == null ? void 0 : _a2.focus(); + } + hideDropdown() { + var _a2; + (_a2 = __privateGet(this, _dropdown)) == null ? void 0 : _a2.classList.add("hidden"); + window.removeEventListener("pointerdown", __privateGet(this, _boundPointerDown)); + } + _hideDropdownFromKeyboard() { + var _a2; + if (__privateGet(this, _isMainColorPicker)) { + return; + } + if (!__privateGet(this, _isDropdownVisible, isDropdownVisible_get)) { + (_a2 = __privateGet(this, _editor3)) == null ? void 0 : _a2.unselect(); + return; + } + this.hideDropdown(); + __privateGet(this, _button).focus({ + preventScroll: true, + focusVisible: __privateGet(this, _dropdownWasFromKeyboard) + }); + } + updateColor(color) { + if (__privateGet(this, _buttonSwatch)) { + __privateGet(this, _buttonSwatch).style.backgroundColor = color; + } + if (!__privateGet(this, _dropdown)) { + return; + } + const i = __privateGet(this, _uiManager2).highlightColors.values(); + for (const child of __privateGet(this, _dropdown).children) { + child.setAttribute("aria-selected", i.next().value === color); + } + } + destroy() { + var _a2, _b; + (_a2 = __privateGet(this, _button)) == null ? void 0 : _a2.remove(); + __privateSet(this, _button, null); + __privateSet(this, _buttonSwatch, null); + (_b = __privateGet(this, _dropdown)) == null ? void 0 : _b.remove(); + __privateSet(this, _dropdown, null); + } +}; +var ColorPicker = _ColorPicker; +_boundKeyDown2 = new WeakMap(); +_boundPointerDown = new WeakMap(); +_button = new WeakMap(); +_buttonSwatch = new WeakMap(); +_defaultColor = new WeakMap(); +_dropdown = new WeakMap(); +_dropdownWasFromKeyboard = new WeakMap(); +_isMainColorPicker = new WeakMap(); +_editor3 = new WeakMap(); +_eventBus = new WeakMap(); +_uiManager2 = new WeakMap(); +_type = new WeakMap(); +_getDropdownRoot = new WeakSet(); +getDropdownRoot_fn = function() { + const div = document.createElement("div"); + const signal = __privateGet(this, _uiManager2)._signal; + div.addEventListener("contextmenu", noContextMenu, { + signal + }); + div.className = "dropdown"; + div.role = "listbox"; + div.setAttribute("aria-multiselectable", false); + div.setAttribute("aria-orientation", "vertical"); + div.setAttribute("data-l10n-id", "pdfjs-editor-colorpicker-dropdown"); + for (const [name, color] of __privateGet(this, _uiManager2).highlightColors) { + const button = document.createElement("button"); + button.tabIndex = "0"; + button.role = "option"; + button.setAttribute("data-color", color); + button.title = name; + button.setAttribute("data-l10n-id", `pdfjs-editor-colorpicker-${name}`); + const swatch = document.createElement("span"); + button.append(swatch); + swatch.className = "swatch"; + swatch.style.backgroundColor = color; + button.setAttribute("aria-selected", color === __privateGet(this, _defaultColor)); + button.addEventListener("click", __privateMethod(this, _colorSelect, colorSelect_fn).bind(this, color), { + signal + }); + div.append(button); + } + div.addEventListener("keydown", __privateGet(this, _boundKeyDown2), { + signal + }); + return div; +}; +_colorSelect = new WeakSet(); +colorSelect_fn = function(color, event) { + event.stopPropagation(); + __privateGet(this, _eventBus).dispatch("switchannotationeditorparams", { + source: this, + type: __privateGet(this, _type), + value: color + }); +}; +_keyDown2 = new WeakSet(); +keyDown_fn2 = function(event) { + _ColorPicker._keyboardManager.exec(this, event); +}; +_openDropdown = new WeakSet(); +openDropdown_fn = function(event) { + if (__privateGet(this, _isDropdownVisible, isDropdownVisible_get)) { + this.hideDropdown(); + return; + } + __privateSet(this, _dropdownWasFromKeyboard, event.detail === 0); + window.addEventListener("pointerdown", __privateGet(this, _boundPointerDown), { + signal: __privateGet(this, _uiManager2)._signal + }); + if (__privateGet(this, _dropdown)) { + __privateGet(this, _dropdown).classList.remove("hidden"); + return; + } + const root = __privateSet(this, _dropdown, __privateMethod(this, _getDropdownRoot, getDropdownRoot_fn).call(this)); + __privateGet(this, _button).append(root); +}; +_pointerDown2 = new WeakSet(); +pointerDown_fn2 = function(event) { + var _a2; + if ((_a2 = __privateGet(this, _dropdown)) == null ? void 0 : _a2.contains(event.target)) { + return; + } + this.hideDropdown(); +}; +_isDropdownVisible = new WeakSet(); +isDropdownVisible_get = function() { + return __privateGet(this, _dropdown) && !__privateGet(this, _dropdown).classList.contains("hidden"); +}; +var _anchorNode, _anchorOffset, _boxes, _clipPathId, _colorPicker2, _focusOutlines, _focusNode, _focusOffset, _highlightDiv, _highlightOutlines, _id4, _isFreeHighlight, _lastPoint, _opacity, _outlineId, _text, _thickness2, _methodOfCreation, _createOutlines, createOutlines_fn, _createFreeOutlines, createFreeOutlines_fn, _updateColor2, updateColor_fn2, _updateThickness, updateThickness_fn, _changeThickness, changeThickness_fn, _cleanDrawLayer, cleanDrawLayer_fn, _addToDrawLayer, addToDrawLayer_fn, _rotateBbox, rotateBbox_fn, _keydown, keydown_fn, _setCaret, setCaret_fn, _getRotation, getRotation_fn, _serializeBoxes, serializeBoxes_fn, _serializeOutlines, serializeOutlines_fn, _highlightMove, highlightMove_fn, _endHighlight, endHighlight_fn; +var _HighlightEditor = class extends AnnotationEditor { + constructor(params) { + super({ + ...params, + name: "highlightEditor" + }); + __privateAdd(this, _createOutlines); + __privateAdd(this, _createFreeOutlines); + __privateAdd(this, _updateColor2); + __privateAdd(this, _updateThickness); + __privateAdd(this, _changeThickness); + __privateAdd(this, _cleanDrawLayer); + __privateAdd(this, _addToDrawLayer); + __privateAdd(this, _keydown); + __privateAdd(this, _setCaret); + __privateAdd(this, _getRotation); + __privateAdd(this, _serializeBoxes); + __privateAdd(this, _serializeOutlines); + __privateAdd(this, _anchorNode, null); + __privateAdd(this, _anchorOffset, 0); + __privateAdd(this, _boxes, void 0); + __privateAdd(this, _clipPathId, null); + __privateAdd(this, _colorPicker2, null); + __privateAdd(this, _focusOutlines, null); + __privateAdd(this, _focusNode, null); + __privateAdd(this, _focusOffset, 0); + __privateAdd(this, _highlightDiv, null); + __privateAdd(this, _highlightOutlines, null); + __privateAdd(this, _id4, null); + __privateAdd(this, _isFreeHighlight, false); + __privateAdd(this, _lastPoint, null); + __privateAdd(this, _opacity, void 0); + __privateAdd(this, _outlineId, null); + __privateAdd(this, _text, ""); + __privateAdd(this, _thickness2, void 0); + __privateAdd(this, _methodOfCreation, ""); + this.color = params.color || _HighlightEditor._defaultColor; + __privateSet(this, _thickness2, params.thickness || _HighlightEditor._defaultThickness); + __privateSet(this, _opacity, params.opacity || _HighlightEditor._defaultOpacity); + __privateSet(this, _boxes, params.boxes || null); + __privateSet(this, _methodOfCreation, params.methodOfCreation || ""); + __privateSet(this, _text, params.text || ""); + this._isDraggable = false; + if (params.highlightId > -1) { + __privateSet(this, _isFreeHighlight, true); + __privateMethod(this, _createFreeOutlines, createFreeOutlines_fn).call(this, params); + __privateMethod(this, _addToDrawLayer, addToDrawLayer_fn).call(this); + } else { + __privateSet(this, _anchorNode, params.anchorNode); + __privateSet(this, _anchorOffset, params.anchorOffset); + __privateSet(this, _focusNode, params.focusNode); + __privateSet(this, _focusOffset, params.focusOffset); + __privateMethod(this, _createOutlines, createOutlines_fn).call(this); + __privateMethod(this, _addToDrawLayer, addToDrawLayer_fn).call(this); + this.rotate(this.rotation); + } + } + static get _keyboardManager() { + const proto = _HighlightEditor.prototype; + return shadow(this, "_keyboardManager", new KeyboardManager([[["ArrowLeft", "mac+ArrowLeft"], proto._moveCaret, { + args: [0] + }], [["ArrowRight", "mac+ArrowRight"], proto._moveCaret, { + args: [1] + }], [["ArrowUp", "mac+ArrowUp"], proto._moveCaret, { + args: [2] + }], [["ArrowDown", "mac+ArrowDown"], proto._moveCaret, { + args: [3] + }]])); + } + get telemetryInitialData() { + return { + action: "added", + type: __privateGet(this, _isFreeHighlight) ? "free_highlight" : "highlight", + color: this._uiManager.highlightColorNames.get(this.color), + thickness: __privateGet(this, _thickness2), + methodOfCreation: __privateGet(this, _methodOfCreation) + }; + } + get telemetryFinalData() { + return { + type: "highlight", + color: this._uiManager.highlightColorNames.get(this.color) + }; + } + static computeTelemetryFinalData(data) { + return { + numberOfColors: data.get("color").size + }; + } + static initialize(l10n, uiManager) { + var _a2; + AnnotationEditor.initialize(l10n, uiManager); + _HighlightEditor._defaultColor || (_HighlightEditor._defaultColor = ((_a2 = uiManager.highlightColors) == null ? void 0 : _a2.values().next().value) || "#fff066"); + } + static updateDefaultParams(type, value) { + switch (type) { + case AnnotationEditorParamsType.HIGHLIGHT_DEFAULT_COLOR: + _HighlightEditor._defaultColor = value; + break; + case AnnotationEditorParamsType.HIGHLIGHT_THICKNESS: + _HighlightEditor._defaultThickness = value; + break; + } + } + translateInPage(x, y) { + } + get toolbarPosition() { + return __privateGet(this, _lastPoint); + } + updateParams(type, value) { + switch (type) { + case AnnotationEditorParamsType.HIGHLIGHT_COLOR: + __privateMethod(this, _updateColor2, updateColor_fn2).call(this, value); + break; + case AnnotationEditorParamsType.HIGHLIGHT_THICKNESS: + __privateMethod(this, _updateThickness, updateThickness_fn).call(this, value); + break; + } + } + static get defaultPropertiesToUpdate() { + return [[AnnotationEditorParamsType.HIGHLIGHT_DEFAULT_COLOR, _HighlightEditor._defaultColor], [AnnotationEditorParamsType.HIGHLIGHT_THICKNESS, _HighlightEditor._defaultThickness]]; + } + get propertiesToUpdate() { + return [[AnnotationEditorParamsType.HIGHLIGHT_COLOR, this.color || _HighlightEditor._defaultColor], [AnnotationEditorParamsType.HIGHLIGHT_THICKNESS, __privateGet(this, _thickness2) || _HighlightEditor._defaultThickness], [AnnotationEditorParamsType.HIGHLIGHT_FREE, __privateGet(this, _isFreeHighlight)]]; + } + async addEditToolbar() { + const toolbar = await super.addEditToolbar(); + if (!toolbar) { + return null; + } + if (this._uiManager.highlightColors) { + __privateSet(this, _colorPicker2, new ColorPicker({ + editor: this + })); + toolbar.addColorPicker(__privateGet(this, _colorPicker2)); + } + return toolbar; + } + disableEditing() { + super.disableEditing(); + this.div.classList.toggle("disabled", true); + } + enableEditing() { + super.enableEditing(); + this.div.classList.toggle("disabled", false); + } + fixAndSetPosition() { + return super.fixAndSetPosition(__privateMethod(this, _getRotation, getRotation_fn).call(this)); + } + getBaseTranslation() { + return [0, 0]; + } + getRect(tx, ty) { + return super.getRect(tx, ty, __privateMethod(this, _getRotation, getRotation_fn).call(this)); + } + onceAdded() { + this.parent.addUndoableEditor(this); + this.div.focus(); + } + remove() { + __privateMethod(this, _cleanDrawLayer, cleanDrawLayer_fn).call(this); + this._reportTelemetry({ + action: "deleted" + }); + super.remove(); + } + rebuild() { + if (!this.parent) { + return; + } + super.rebuild(); + if (this.div === null) { + return; + } + __privateMethod(this, _addToDrawLayer, addToDrawLayer_fn).call(this); + if (!this.isAttachedToDOM) { + this.parent.add(this); + } + } + setParent(parent) { + var _a2; + let mustBeSelected = false; + if (this.parent && !parent) { + __privateMethod(this, _cleanDrawLayer, cleanDrawLayer_fn).call(this); + } else if (parent) { + __privateMethod(this, _addToDrawLayer, addToDrawLayer_fn).call(this, parent); + mustBeSelected = !this.parent && ((_a2 = this.div) == null ? void 0 : _a2.classList.contains("selectedEditor")); + } + super.setParent(parent); + this.show(this._isVisible); + if (mustBeSelected) { + this.select(); + } + } + rotate(angle) { + var _a2, _b, _c; + const { + drawLayer + } = this.parent; + let box; + if (__privateGet(this, _isFreeHighlight)) { + angle = (angle - this.rotation + 360) % 360; + box = __privateMethod(_a2 = _HighlightEditor, _rotateBbox, rotateBbox_fn).call(_a2, __privateGet(this, _highlightOutlines).box, angle); + } else { + box = __privateMethod(_b = _HighlightEditor, _rotateBbox, rotateBbox_fn).call(_b, this, angle); + } + drawLayer.rotate(__privateGet(this, _id4), angle); + drawLayer.rotate(__privateGet(this, _outlineId), angle); + drawLayer.updateBox(__privateGet(this, _id4), box); + drawLayer.updateBox(__privateGet(this, _outlineId), __privateMethod(_c = _HighlightEditor, _rotateBbox, rotateBbox_fn).call(_c, __privateGet(this, _focusOutlines).box, angle)); + } + render() { + if (this.div) { + return this.div; + } + const div = super.render(); + if (__privateGet(this, _text)) { + div.setAttribute("aria-label", __privateGet(this, _text)); + div.setAttribute("role", "mark"); + } + if (__privateGet(this, _isFreeHighlight)) { + div.classList.add("free"); + } else { + this.div.addEventListener("keydown", __privateMethod(this, _keydown, keydown_fn).bind(this), { + signal: this._uiManager._signal + }); + } + const highlightDiv = __privateSet(this, _highlightDiv, document.createElement("div")); + div.append(highlightDiv); + highlightDiv.setAttribute("aria-hidden", "true"); + highlightDiv.className = "internal"; + highlightDiv.style.clipPath = __privateGet(this, _clipPathId); + const [parentWidth, parentHeight] = this.parentDimensions; + this.setDims(this.width * parentWidth, this.height * parentHeight); + bindEvents(this, __privateGet(this, _highlightDiv), ["pointerover", "pointerleave"]); + this.enableEditing(); + return div; + } + pointerover() { + this.parent.drawLayer.addClass(__privateGet(this, _outlineId), "hovered"); + } + pointerleave() { + this.parent.drawLayer.removeClass(__privateGet(this, _outlineId), "hovered"); + } + _moveCaret(direction) { + this.parent.unselect(this); + switch (direction) { + case 0: + case 2: + __privateMethod(this, _setCaret, setCaret_fn).call(this, true); + break; + case 1: + case 3: + __privateMethod(this, _setCaret, setCaret_fn).call(this, false); + break; + } + } + select() { + var _a2, _b; + super.select(); + if (!__privateGet(this, _outlineId)) { + return; + } + (_a2 = this.parent) == null ? void 0 : _a2.drawLayer.removeClass(__privateGet(this, _outlineId), "hovered"); + (_b = this.parent) == null ? void 0 : _b.drawLayer.addClass(__privateGet(this, _outlineId), "selected"); + } + unselect() { + var _a2; + super.unselect(); + if (!__privateGet(this, _outlineId)) { + return; + } + (_a2 = this.parent) == null ? void 0 : _a2.drawLayer.removeClass(__privateGet(this, _outlineId), "selected"); + if (!__privateGet(this, _isFreeHighlight)) { + __privateMethod(this, _setCaret, setCaret_fn).call(this, false); + } + } + get _mustFixPosition() { + return !__privateGet(this, _isFreeHighlight); + } + show(visible = this._isVisible) { + super.show(visible); + if (this.parent) { + this.parent.drawLayer.show(__privateGet(this, _id4), visible); + this.parent.drawLayer.show(__privateGet(this, _outlineId), visible); + } + } + static startHighlighting(parent, isLTR, { + target: textLayer, + x, + y + }) { + const { + x: layerX, + y: layerY, + width: parentWidth, + height: parentHeight + } = textLayer.getBoundingClientRect(); + const ac = new AbortController(); + const signal = parent.combinedSignal(ac); + const pointerDown = (e) => { + e.preventDefault(); + e.stopPropagation(); + }; + const pointerUpCallback = (e) => { + ac.abort(); + __privateMethod(this, _endHighlight, endHighlight_fn).call(this, parent, e); + }; + window.addEventListener("blur", pointerUpCallback, { + signal + }); + window.addEventListener("pointerup", pointerUpCallback, { + signal + }); + window.addEventListener("pointerdown", pointerDown, { + capture: true, + passive: false, + signal + }); + window.addEventListener("contextmenu", noContextMenu, { + signal + }); + textLayer.addEventListener("pointermove", __privateMethod(this, _highlightMove, highlightMove_fn).bind(this, parent), { + signal + }); + this._freeHighlight = new FreeOutliner({ + x, + y + }, [layerX, layerY, parentWidth, parentHeight], parent.scale, this._defaultThickness / 2, isLTR, 1e-3); + ({ + id: this._freeHighlightId, + clipPathId: this._freeHighlightClipId + } = parent.drawLayer.highlight(this._freeHighlight, this._defaultColor, this._defaultOpacity, true)); + } + static deserialize(data, parent, uiManager) { + var _a2; + const editor = super.deserialize(data, parent, uiManager); + const { + rect: [blX, blY, trX, trY], + color, + quadPoints + } = data; + editor.color = Util.makeHexColor(...color); + __privateSet(editor, _opacity, data.opacity); + const [pageWidth, pageHeight] = editor.pageDimensions; + editor.width = (trX - blX) / pageWidth; + editor.height = (trY - blY) / pageHeight; + const boxes = __privateSet(editor, _boxes, []); + for (let i = 0; i < quadPoints.length; i += 8) { + boxes.push({ + x: (quadPoints[4] - trX) / pageWidth, + y: (trY - (1 - quadPoints[i + 5])) / pageHeight, + width: (quadPoints[i + 2] - quadPoints[i]) / pageWidth, + height: (quadPoints[i + 5] - quadPoints[i + 1]) / pageHeight + }); + } + __privateMethod(_a2 = editor, _createOutlines, createOutlines_fn).call(_a2); + return editor; + } + serialize(isForCopying = false) { + if (this.isEmpty() || isForCopying) { + return null; + } + const rect = this.getRect(0, 0); + const color = AnnotationEditor._colorManager.convert(this.color); + return { + annotationType: AnnotationEditorType.HIGHLIGHT, + color, + opacity: __privateGet(this, _opacity), + thickness: __privateGet(this, _thickness2), + quadPoints: __privateMethod(this, _serializeBoxes, serializeBoxes_fn).call(this), + outlines: __privateMethod(this, _serializeOutlines, serializeOutlines_fn).call(this, rect), + pageIndex: this.pageIndex, + rect, + rotation: __privateMethod(this, _getRotation, getRotation_fn).call(this), + structTreeParentId: this._structTreeParentId + }; + } + static canCreateNewEmptyEditor() { + return false; + } +}; +var HighlightEditor = _HighlightEditor; +_anchorNode = new WeakMap(); +_anchorOffset = new WeakMap(); +_boxes = new WeakMap(); +_clipPathId = new WeakMap(); +_colorPicker2 = new WeakMap(); +_focusOutlines = new WeakMap(); +_focusNode = new WeakMap(); +_focusOffset = new WeakMap(); +_highlightDiv = new WeakMap(); +_highlightOutlines = new WeakMap(); +_id4 = new WeakMap(); +_isFreeHighlight = new WeakMap(); +_lastPoint = new WeakMap(); +_opacity = new WeakMap(); +_outlineId = new WeakMap(); +_text = new WeakMap(); +_thickness2 = new WeakMap(); +_methodOfCreation = new WeakMap(); +_createOutlines = new WeakSet(); +createOutlines_fn = function() { + const outliner = new Outliner(__privateGet(this, _boxes), 1e-3); + __privateSet(this, _highlightOutlines, outliner.getOutlines()); + ({ + x: this.x, + y: this.y, + width: this.width, + height: this.height + } = __privateGet(this, _highlightOutlines).box); + const outlinerForOutline = new Outliner(__privateGet(this, _boxes), 25e-4, 1e-3, this._uiManager.direction === "ltr"); + __privateSet(this, _focusOutlines, outlinerForOutline.getOutlines()); + const { + lastPoint + } = __privateGet(this, _focusOutlines).box; + __privateSet(this, _lastPoint, [(lastPoint[0] - this.x) / this.width, (lastPoint[1] - this.y) / this.height]); +}; +_createFreeOutlines = new WeakSet(); +createFreeOutlines_fn = function({ + highlightOutlines, + highlightId, + clipPathId +}) { + var _a2, _b; + __privateSet(this, _highlightOutlines, highlightOutlines); + const extraThickness = 1.5; + __privateSet(this, _focusOutlines, highlightOutlines.getNewOutline(__privateGet(this, _thickness2) / 2 + extraThickness, 25e-4)); + if (highlightId >= 0) { + __privateSet(this, _id4, highlightId); + __privateSet(this, _clipPathId, clipPathId); + this.parent.drawLayer.finalizeLine(highlightId, highlightOutlines); + __privateSet(this, _outlineId, this.parent.drawLayer.highlightOutline(__privateGet(this, _focusOutlines))); + } else if (this.parent) { + const angle = this.parent.viewport.rotation; + this.parent.drawLayer.updateLine(__privateGet(this, _id4), highlightOutlines); + this.parent.drawLayer.updateBox(__privateGet(this, _id4), __privateMethod(_a2 = _HighlightEditor, _rotateBbox, rotateBbox_fn).call(_a2, __privateGet(this, _highlightOutlines).box, (angle - this.rotation + 360) % 360)); + this.parent.drawLayer.updateLine(__privateGet(this, _outlineId), __privateGet(this, _focusOutlines)); + this.parent.drawLayer.updateBox(__privateGet(this, _outlineId), __privateMethod(_b = _HighlightEditor, _rotateBbox, rotateBbox_fn).call(_b, __privateGet(this, _focusOutlines).box, angle)); + } + const { + x, + y, + width, + height + } = highlightOutlines.box; + switch (this.rotation) { + case 0: + this.x = x; + this.y = y; + this.width = width; + this.height = height; + break; + case 90: { + const [pageWidth, pageHeight] = this.parentDimensions; + this.x = y; + this.y = 1 - x; + this.width = width * pageHeight / pageWidth; + this.height = height * pageWidth / pageHeight; + break; + } + case 180: + this.x = 1 - x; + this.y = 1 - y; + this.width = width; + this.height = height; + break; + case 270: { + const [pageWidth, pageHeight] = this.parentDimensions; + this.x = 1 - y; + this.y = x; + this.width = width * pageHeight / pageWidth; + this.height = height * pageWidth / pageHeight; + break; + } + } + const { + lastPoint + } = __privateGet(this, _focusOutlines).box; + __privateSet(this, _lastPoint, [(lastPoint[0] - x) / width, (lastPoint[1] - y) / height]); +}; +_updateColor2 = new WeakSet(); +updateColor_fn2 = function(color) { + const setColor = (col) => { + var _a2, _b; + this.color = col; + (_a2 = this.parent) == null ? void 0 : _a2.drawLayer.changeColor(__privateGet(this, _id4), col); + (_b = __privateGet(this, _colorPicker2)) == null ? void 0 : _b.updateColor(col); + }; + const savedColor = this.color; + this.addCommands({ + cmd: setColor.bind(this, color), + undo: setColor.bind(this, savedColor), + post: this._uiManager.updateUI.bind(this._uiManager, this), + mustExec: true, + type: AnnotationEditorParamsType.HIGHLIGHT_COLOR, + overwriteIfSameType: true, + keepUndo: true + }); + this._reportTelemetry({ + action: "color_changed", + color: this._uiManager.highlightColorNames.get(color) + }, true); +}; +_updateThickness = new WeakSet(); +updateThickness_fn = function(thickness) { + const savedThickness = __privateGet(this, _thickness2); + const setThickness = (th) => { + __privateSet(this, _thickness2, th); + __privateMethod(this, _changeThickness, changeThickness_fn).call(this, th); + }; + this.addCommands({ + cmd: setThickness.bind(this, thickness), + undo: setThickness.bind(this, savedThickness), + post: this._uiManager.updateUI.bind(this._uiManager, this), + mustExec: true, + type: AnnotationEditorParamsType.INK_THICKNESS, + overwriteIfSameType: true, + keepUndo: true + }); + this._reportTelemetry({ + action: "thickness_changed", + thickness + }, true); +}; +_changeThickness = new WeakSet(); +changeThickness_fn = function(thickness) { + if (!__privateGet(this, _isFreeHighlight)) { + return; + } + __privateMethod(this, _createFreeOutlines, createFreeOutlines_fn).call(this, { + highlightOutlines: __privateGet(this, _highlightOutlines).getNewOutline(thickness / 2) + }); + this.fixAndSetPosition(); + const [parentWidth, parentHeight] = this.parentDimensions; + this.setDims(this.width * parentWidth, this.height * parentHeight); +}; +_cleanDrawLayer = new WeakSet(); +cleanDrawLayer_fn = function() { + if (__privateGet(this, _id4) === null || !this.parent) { + return; + } + this.parent.drawLayer.remove(__privateGet(this, _id4)); + __privateSet(this, _id4, null); + this.parent.drawLayer.remove(__privateGet(this, _outlineId)); + __privateSet(this, _outlineId, null); +}; +_addToDrawLayer = new WeakSet(); +addToDrawLayer_fn = function(parent = this.parent) { + if (__privateGet(this, _id4) !== null) { + return; + } + ({ + id: __privateWrapper(this, _id4)._, + clipPathId: __privateWrapper(this, _clipPathId)._ + } = parent.drawLayer.highlight(__privateGet(this, _highlightOutlines), this.color, __privateGet(this, _opacity))); + __privateSet(this, _outlineId, parent.drawLayer.highlightOutline(__privateGet(this, _focusOutlines))); + if (__privateGet(this, _highlightDiv)) { + __privateGet(this, _highlightDiv).style.clipPath = __privateGet(this, _clipPathId); + } +}; +_rotateBbox = new WeakSet(); +rotateBbox_fn = function({ + x, + y, + width, + height +}, angle) { + switch (angle) { + case 90: + return { + x: 1 - y - height, + y: x, + width: height, + height: width + }; + case 180: + return { + x: 1 - x - width, + y: 1 - y - height, + width, + height + }; + case 270: + return { + x: y, + y: 1 - x - width, + width: height, + height: width + }; + } + return { + x, + y, + width, + height + }; +}; +_keydown = new WeakSet(); +keydown_fn = function(event) { + _HighlightEditor._keyboardManager.exec(this, event); +}; +_setCaret = new WeakSet(); +setCaret_fn = function(start) { + if (!__privateGet(this, _anchorNode)) { + return; + } + const selection = window.getSelection(); + if (start) { + selection.setPosition(__privateGet(this, _anchorNode), __privateGet(this, _anchorOffset)); + } else { + selection.setPosition(__privateGet(this, _focusNode), __privateGet(this, _focusOffset)); + } +}; +_getRotation = new WeakSet(); +getRotation_fn = function() { + return __privateGet(this, _isFreeHighlight) ? this.rotation : 0; +}; +_serializeBoxes = new WeakSet(); +serializeBoxes_fn = function() { + if (__privateGet(this, _isFreeHighlight)) { + return null; + } + const [pageWidth, pageHeight] = this.pageDimensions; + const [pageX, pageY] = this.pageTranslation; + const boxes = __privateGet(this, _boxes); + const quadPoints = new Float32Array(boxes.length * 8); + let i = 0; + for (const { + x, + y, + width, + height + } of boxes) { + const sx = x * pageWidth + pageX; + const sy = (1 - y - height) * pageHeight + pageY; + quadPoints[i] = quadPoints[i + 4] = sx; + quadPoints[i + 1] = quadPoints[i + 3] = sy; + quadPoints[i + 2] = quadPoints[i + 6] = sx + width * pageWidth; + quadPoints[i + 5] = quadPoints[i + 7] = sy + height * pageHeight; + i += 8; + } + return quadPoints; +}; +_serializeOutlines = new WeakSet(); +serializeOutlines_fn = function(rect) { + return __privateGet(this, _highlightOutlines).serialize(rect, __privateMethod(this, _getRotation, getRotation_fn).call(this)); +}; +_highlightMove = new WeakSet(); +highlightMove_fn = function(parent, event) { + if (this._freeHighlight.add(event)) { + parent.drawLayer.updatePath(this._freeHighlightId, this._freeHighlight); + } +}; +_endHighlight = new WeakSet(); +endHighlight_fn = function(parent, event) { + if (!this._freeHighlight.isEmpty()) { + parent.createAndAddNewEditor(event, false, { + highlightId: this._freeHighlightId, + highlightOutlines: this._freeHighlight.getOutlines(), + clipPathId: this._freeHighlightClipId, + methodOfCreation: "main_toolbar" + }); + } else { + parent.drawLayer.removeFreeHighlight(this._freeHighlightId); + } + this._freeHighlightId = -1; + this._freeHighlight = null; + this._freeHighlightClipId = ""; +}; +__privateAdd(HighlightEditor, _rotateBbox); +__privateAdd(HighlightEditor, _highlightMove); +__privateAdd(HighlightEditor, _endHighlight); +__publicField(HighlightEditor, "_defaultColor", null); +__publicField(HighlightEditor, "_defaultOpacity", 1); +__publicField(HighlightEditor, "_defaultThickness", 12); +__publicField(HighlightEditor, "_l10nPromise"); +__publicField(HighlightEditor, "_type", "highlight"); +__publicField(HighlightEditor, "_editorType", AnnotationEditorType.HIGHLIGHT); +__publicField(HighlightEditor, "_freeHighlightId", -1); +__publicField(HighlightEditor, "_freeHighlight", null); +__publicField(HighlightEditor, "_freeHighlightClipId", ""); +var _baseHeight, _baseWidth, _canvasContextMenuTimeoutId, _currentPath2D, _disableEditing, _drawingAC, _hasSomethingToDraw, _isCanvasInitialized, _observer, _pointerdownAC, _realWidth, _realHeight, _requestFrameCallback, _updateThickness2, updateThickness_fn2, _updateColor3, updateColor_fn3, _updateOpacity, updateOpacity_fn, _getInitialBBox, getInitialBBox_fn, _setStroke, setStroke_fn, _startDrawing, startDrawing_fn, _draw, draw_fn, _endPath, endPath_fn, _stopDrawing, stopDrawing_fn, _drawPoints, drawPoints_fn, _makeBezierCurve, makeBezierCurve_fn, _generateBezierPoints, generateBezierPoints_fn, _redraw, redraw_fn, _addPointerdownListener, addPointerdownListener_fn, _removePointerdownListener, removePointerdownListener_fn, _endDrawing, endDrawing_fn, _createCanvas, createCanvas_fn, _createObserver, createObserver_fn, _setCanvasDims, setCanvasDims_fn, _setScaleFactor, setScaleFactor_fn, _updateTransform, updateTransform_fn, _buildPath2D, buildPath2D_fn, _toPDFCoordinates, toPDFCoordinates_fn, _fromPDFCoordinates, fromPDFCoordinates_fn, _serializePaths, serializePaths_fn, _getBbox, getBbox_fn, _getPadding, getPadding_fn, _fitToContent, fitToContent_fn; +var _InkEditor = class extends AnnotationEditor { + constructor(params) { + super({ + ...params, + name: "inkEditor" + }); + __privateAdd(this, _updateThickness2); + __privateAdd(this, _updateColor3); + __privateAdd(this, _updateOpacity); + __privateAdd(this, _getInitialBBox); + __privateAdd(this, _setStroke); + __privateAdd(this, _startDrawing); + __privateAdd(this, _draw); + __privateAdd(this, _endPath); + __privateAdd(this, _stopDrawing); + __privateAdd(this, _drawPoints); + __privateAdd(this, _makeBezierCurve); + __privateAdd(this, _generateBezierPoints); + __privateAdd(this, _redraw); + __privateAdd(this, _addPointerdownListener); + __privateAdd(this, _removePointerdownListener); + __privateAdd(this, _endDrawing); + __privateAdd(this, _createCanvas); + __privateAdd(this, _createObserver); + __privateAdd(this, _setCanvasDims); + __privateAdd(this, _setScaleFactor); + __privateAdd(this, _updateTransform); + __privateAdd(this, _serializePaths); + __privateAdd(this, _getBbox); + __privateAdd(this, _getPadding); + __privateAdd(this, _fitToContent); + __privateAdd(this, _baseHeight, 0); + __privateAdd(this, _baseWidth, 0); + __privateAdd(this, _canvasContextMenuTimeoutId, null); + __privateAdd(this, _currentPath2D, new Path2D()); + __privateAdd(this, _disableEditing, false); + __privateAdd(this, _drawingAC, null); + __privateAdd(this, _hasSomethingToDraw, false); + __privateAdd(this, _isCanvasInitialized, false); + __privateAdd(this, _observer, null); + __privateAdd(this, _pointerdownAC, null); + __privateAdd(this, _realWidth, 0); + __privateAdd(this, _realHeight, 0); + __privateAdd(this, _requestFrameCallback, null); + this.color = params.color || null; + this.thickness = params.thickness || null; + this.opacity = params.opacity || null; + this.paths = []; + this.bezierPath2D = []; + this.allRawPaths = []; + this.currentPath = []; + this.scaleFactor = 1; + this.translationX = this.translationY = 0; + this.x = 0; + this.y = 0; + this._willKeepAspectRatio = true; + } + static initialize(l10n, uiManager) { + AnnotationEditor.initialize(l10n, uiManager); + } + static updateDefaultParams(type, value) { + switch (type) { + case AnnotationEditorParamsType.INK_THICKNESS: + _InkEditor._defaultThickness = value; + break; + case AnnotationEditorParamsType.INK_COLOR: + _InkEditor._defaultColor = value; + break; + case AnnotationEditorParamsType.INK_OPACITY: + _InkEditor._defaultOpacity = value / 100; + break; + } + } + updateParams(type, value) { + switch (type) { + case AnnotationEditorParamsType.INK_THICKNESS: + __privateMethod(this, _updateThickness2, updateThickness_fn2).call(this, value); + break; + case AnnotationEditorParamsType.INK_COLOR: + __privateMethod(this, _updateColor3, updateColor_fn3).call(this, value); + break; + case AnnotationEditorParamsType.INK_OPACITY: + __privateMethod(this, _updateOpacity, updateOpacity_fn).call(this, value); + break; + } + } + static get defaultPropertiesToUpdate() { + return [[AnnotationEditorParamsType.INK_THICKNESS, _InkEditor._defaultThickness], [AnnotationEditorParamsType.INK_COLOR, _InkEditor._defaultColor || AnnotationEditor._defaultLineColor], [AnnotationEditorParamsType.INK_OPACITY, Math.round(_InkEditor._defaultOpacity * 100)]]; + } + get propertiesToUpdate() { + var _a2; + return [[AnnotationEditorParamsType.INK_THICKNESS, this.thickness || _InkEditor._defaultThickness], [AnnotationEditorParamsType.INK_COLOR, this.color || _InkEditor._defaultColor || AnnotationEditor._defaultLineColor], [AnnotationEditorParamsType.INK_OPACITY, Math.round(100 * ((_a2 = this.opacity) != null ? _a2 : _InkEditor._defaultOpacity))]]; + } + rebuild() { + if (!this.parent) { + return; + } + super.rebuild(); + if (this.div === null) { + return; + } + if (!this.canvas) { + __privateMethod(this, _createCanvas, createCanvas_fn).call(this); + __privateMethod(this, _createObserver, createObserver_fn).call(this); + } + if (!this.isAttachedToDOM) { + this.parent.add(this); + __privateMethod(this, _setCanvasDims, setCanvasDims_fn).call(this); + } + __privateMethod(this, _fitToContent, fitToContent_fn).call(this); + } + remove() { + var _a2; + if (this.canvas === null) { + return; + } + if (!this.isEmpty()) { + this.commit(); + } + this.canvas.width = this.canvas.height = 0; + this.canvas.remove(); + this.canvas = null; + if (__privateGet(this, _canvasContextMenuTimeoutId)) { + clearTimeout(__privateGet(this, _canvasContextMenuTimeoutId)); + __privateSet(this, _canvasContextMenuTimeoutId, null); + } + (_a2 = __privateGet(this, _observer)) == null ? void 0 : _a2.disconnect(); + __privateSet(this, _observer, null); + super.remove(); + } + setParent(parent) { + if (!this.parent && parent) { + this._uiManager.removeShouldRescale(this); + } else if (this.parent && parent === null) { + this._uiManager.addShouldRescale(this); + } + super.setParent(parent); + } + onScaleChanging() { + const [parentWidth, parentHeight] = this.parentDimensions; + const width = this.width * parentWidth; + const height = this.height * parentHeight; + this.setDimensions(width, height); + } + enableEditMode() { + if (__privateGet(this, _disableEditing) || this.canvas === null) { + return; + } + super.enableEditMode(); + this._isDraggable = false; + __privateMethod(this, _addPointerdownListener, addPointerdownListener_fn).call(this); + } + disableEditMode() { + if (!this.isInEditMode() || this.canvas === null) { + return; + } + super.disableEditMode(); + this._isDraggable = !this.isEmpty(); + this.div.classList.remove("editing"); + __privateMethod(this, _removePointerdownListener, removePointerdownListener_fn).call(this); + } + onceAdded() { + this._isDraggable = !this.isEmpty(); + } + isEmpty() { + return this.paths.length === 0 || this.paths.length === 1 && this.paths[0].length === 0; + } + commit() { + if (__privateGet(this, _disableEditing)) { + return; + } + super.commit(); + this.isEditing = false; + this.disableEditMode(); + this.setInForeground(); + __privateSet(this, _disableEditing, true); + this.div.classList.add("disabled"); + __privateMethod(this, _fitToContent, fitToContent_fn).call(this, true); + this.select(); + this.parent.addInkEditorIfNeeded(true); + this.moveInDOM(); + this.div.focus({ + preventScroll: true + }); + } + focusin(event) { + if (!this._focusEventsAllowed) { + return; + } + super.focusin(event); + this.enableEditMode(); + } + canvasPointerdown(event) { + if (event.button !== 0 || !this.isInEditMode() || __privateGet(this, _disableEditing)) { + return; + } + this.setInForeground(); + event.preventDefault(); + if (!this.div.contains(document.activeElement)) { + this.div.focus({ + preventScroll: true + }); + } + __privateMethod(this, _startDrawing, startDrawing_fn).call(this, event.offsetX, event.offsetY); + } + canvasPointermove(event) { + event.preventDefault(); + __privateMethod(this, _draw, draw_fn).call(this, event.offsetX, event.offsetY); + } + canvasPointerup(event) { + event.preventDefault(); + __privateMethod(this, _endDrawing, endDrawing_fn).call(this, event); + } + canvasPointerleave(event) { + __privateMethod(this, _endDrawing, endDrawing_fn).call(this, event); + } + get isResizable() { + return !this.isEmpty() && __privateGet(this, _disableEditing); + } + render() { + if (this.div) { + return this.div; + } + let baseX, baseY; + if (this.width) { + baseX = this.x; + baseY = this.y; + } + super.render(); + this.div.setAttribute("data-l10n-id", "pdfjs-ink"); + const [x, y, w, h] = __privateMethod(this, _getInitialBBox, getInitialBBox_fn).call(this); + this.setAt(x, y, 0, 0); + this.setDims(w, h); + __privateMethod(this, _createCanvas, createCanvas_fn).call(this); + if (this.width) { + const [parentWidth, parentHeight] = this.parentDimensions; + this.setAspectRatio(this.width * parentWidth, this.height * parentHeight); + this.setAt(baseX * parentWidth, baseY * parentHeight, this.width * parentWidth, this.height * parentHeight); + __privateSet(this, _isCanvasInitialized, true); + __privateMethod(this, _setCanvasDims, setCanvasDims_fn).call(this); + this.setDims(this.width * parentWidth, this.height * parentHeight); + __privateMethod(this, _redraw, redraw_fn).call(this); + this.div.classList.add("disabled"); + } else { + this.div.classList.add("editing"); + this.enableEditMode(); + } + __privateMethod(this, _createObserver, createObserver_fn).call(this); + return this.div; + } + setDimensions(width, height) { + const roundedWidth = Math.round(width); + const roundedHeight = Math.round(height); + if (__privateGet(this, _realWidth) === roundedWidth && __privateGet(this, _realHeight) === roundedHeight) { + return; + } + __privateSet(this, _realWidth, roundedWidth); + __privateSet(this, _realHeight, roundedHeight); + this.canvas.style.visibility = "hidden"; + const [parentWidth, parentHeight] = this.parentDimensions; + this.width = width / parentWidth; + this.height = height / parentHeight; + this.fixAndSetPosition(); + if (__privateGet(this, _disableEditing)) { + __privateMethod(this, _setScaleFactor, setScaleFactor_fn).call(this, width, height); + } + __privateMethod(this, _setCanvasDims, setCanvasDims_fn).call(this); + __privateMethod(this, _redraw, redraw_fn).call(this); + this.canvas.style.visibility = "visible"; + this.fixDims(); + } + static deserialize(data, parent, uiManager) { + var _a2, _b, _c; + if (data instanceof InkAnnotationElement) { + return null; + } + const editor = super.deserialize(data, parent, uiManager); + editor.thickness = data.thickness; + editor.color = Util.makeHexColor(...data.color); + editor.opacity = data.opacity; + const [pageWidth, pageHeight] = editor.pageDimensions; + const width = editor.width * pageWidth; + const height = editor.height * pageHeight; + const scaleFactor = editor.parentScale; + const padding = data.thickness / 2; + __privateSet(editor, _disableEditing, true); + __privateSet(editor, _realWidth, Math.round(width)); + __privateSet(editor, _realHeight, Math.round(height)); + const { + paths, + rect, + rotation + } = data; + for (let { + bezier + } of paths) { + bezier = __privateMethod(_a2 = _InkEditor, _fromPDFCoordinates, fromPDFCoordinates_fn).call(_a2, bezier, rect, rotation); + const path = []; + editor.paths.push(path); + let p0 = scaleFactor * (bezier[0] - padding); + let p1 = scaleFactor * (bezier[1] - padding); + for (let i = 2, ii = bezier.length; i < ii; i += 6) { + const p10 = scaleFactor * (bezier[i] - padding); + const p11 = scaleFactor * (bezier[i + 1] - padding); + const p20 = scaleFactor * (bezier[i + 2] - padding); + const p21 = scaleFactor * (bezier[i + 3] - padding); + const p30 = scaleFactor * (bezier[i + 4] - padding); + const p31 = scaleFactor * (bezier[i + 5] - padding); + path.push([[p0, p1], [p10, p11], [p20, p21], [p30, p31]]); + p0 = p30; + p1 = p31; + } + const path2D = __privateMethod(this, _buildPath2D, buildPath2D_fn).call(this, path); + editor.bezierPath2D.push(path2D); + } + const bbox = __privateMethod(_b = editor, _getBbox, getBbox_fn).call(_b); + __privateSet(editor, _baseWidth, Math.max(AnnotationEditor.MIN_SIZE, bbox[2] - bbox[0])); + __privateSet(editor, _baseHeight, Math.max(AnnotationEditor.MIN_SIZE, bbox[3] - bbox[1])); + __privateMethod(_c = editor, _setScaleFactor, setScaleFactor_fn).call(_c, width, height); + return editor; + } + serialize() { + if (this.isEmpty()) { + return null; + } + const rect = this.getRect(0, 0); + const color = AnnotationEditor._colorManager.convert(this.ctx.strokeStyle); + return { + annotationType: AnnotationEditorType.INK, + color, + thickness: this.thickness, + opacity: this.opacity, + paths: __privateMethod(this, _serializePaths, serializePaths_fn).call(this, this.scaleFactor / this.parentScale, this.translationX, this.translationY, rect), + pageIndex: this.pageIndex, + rect, + rotation: this.rotation, + structTreeParentId: this._structTreeParentId + }; + } +}; +var InkEditor = _InkEditor; +_baseHeight = new WeakMap(); +_baseWidth = new WeakMap(); +_canvasContextMenuTimeoutId = new WeakMap(); +_currentPath2D = new WeakMap(); +_disableEditing = new WeakMap(); +_drawingAC = new WeakMap(); +_hasSomethingToDraw = new WeakMap(); +_isCanvasInitialized = new WeakMap(); +_observer = new WeakMap(); +_pointerdownAC = new WeakMap(); +_realWidth = new WeakMap(); +_realHeight = new WeakMap(); +_requestFrameCallback = new WeakMap(); +_updateThickness2 = new WeakSet(); +updateThickness_fn2 = function(thickness) { + const setThickness = (th) => { + this.thickness = th; + __privateMethod(this, _fitToContent, fitToContent_fn).call(this); + }; + const savedThickness = this.thickness; + this.addCommands({ + cmd: setThickness.bind(this, thickness), + undo: setThickness.bind(this, savedThickness), + post: this._uiManager.updateUI.bind(this._uiManager, this), + mustExec: true, + type: AnnotationEditorParamsType.INK_THICKNESS, + overwriteIfSameType: true, + keepUndo: true + }); +}; +_updateColor3 = new WeakSet(); +updateColor_fn3 = function(color) { + const setColor = (col) => { + this.color = col; + __privateMethod(this, _redraw, redraw_fn).call(this); + }; + const savedColor = this.color; + this.addCommands({ + cmd: setColor.bind(this, color), + undo: setColor.bind(this, savedColor), + post: this._uiManager.updateUI.bind(this._uiManager, this), + mustExec: true, + type: AnnotationEditorParamsType.INK_COLOR, + overwriteIfSameType: true, + keepUndo: true + }); +}; +_updateOpacity = new WeakSet(); +updateOpacity_fn = function(opacity) { + const setOpacity = (op) => { + this.opacity = op; + __privateMethod(this, _redraw, redraw_fn).call(this); + }; + opacity /= 100; + const savedOpacity = this.opacity; + this.addCommands({ + cmd: setOpacity.bind(this, opacity), + undo: setOpacity.bind(this, savedOpacity), + post: this._uiManager.updateUI.bind(this._uiManager, this), + mustExec: true, + type: AnnotationEditorParamsType.INK_OPACITY, + overwriteIfSameType: true, + keepUndo: true + }); +}; +_getInitialBBox = new WeakSet(); +getInitialBBox_fn = function() { + const { + parentRotation, + parentDimensions: [width, height] + } = this; + switch (parentRotation) { + case 90: + return [0, height, height, width]; + case 180: + return [width, height, width, height]; + case 270: + return [width, 0, height, width]; + default: + return [0, 0, width, height]; + } +}; +_setStroke = new WeakSet(); +setStroke_fn = function() { + const { + ctx, + color, + opacity, + thickness, + parentScale, + scaleFactor + } = this; + ctx.lineWidth = thickness * parentScale / scaleFactor; + ctx.lineCap = "round"; + ctx.lineJoin = "round"; + ctx.miterLimit = 10; + ctx.strokeStyle = `${color}${opacityToHex(opacity)}`; +}; +_startDrawing = new WeakSet(); +startDrawing_fn = function(x, y) { + var _a2; + this.canvas.addEventListener("contextmenu", noContextMenu, { + signal: this._uiManager._signal + }); + __privateMethod(this, _removePointerdownListener, removePointerdownListener_fn).call(this); + __privateSet(this, _drawingAC, new AbortController()); + const signal = this._uiManager.combinedSignal(__privateGet(this, _drawingAC)); + this.canvas.addEventListener("pointerleave", this.canvasPointerleave.bind(this), { + signal + }); + this.canvas.addEventListener("pointermove", this.canvasPointermove.bind(this), { + signal + }); + this.canvas.addEventListener("pointerup", this.canvasPointerup.bind(this), { + signal + }); + this.isEditing = true; + if (!__privateGet(this, _isCanvasInitialized)) { + __privateSet(this, _isCanvasInitialized, true); + __privateMethod(this, _setCanvasDims, setCanvasDims_fn).call(this); + this.thickness || (this.thickness = _InkEditor._defaultThickness); + this.color || (this.color = _InkEditor._defaultColor || AnnotationEditor._defaultLineColor); + (_a2 = this.opacity) != null ? _a2 : this.opacity = _InkEditor._defaultOpacity; + } + this.currentPath.push([x, y]); + __privateSet(this, _hasSomethingToDraw, false); + __privateMethod(this, _setStroke, setStroke_fn).call(this); + __privateSet(this, _requestFrameCallback, () => { + __privateMethod(this, _drawPoints, drawPoints_fn).call(this); + if (__privateGet(this, _requestFrameCallback)) { + window.requestAnimationFrame(__privateGet(this, _requestFrameCallback)); + } + }); + window.requestAnimationFrame(__privateGet(this, _requestFrameCallback)); +}; +_draw = new WeakSet(); +draw_fn = function(x, y) { + const [lastX, lastY] = this.currentPath.at(-1); + if (this.currentPath.length > 1 && x === lastX && y === lastY) { + return; + } + const currentPath = this.currentPath; + let path2D = __privateGet(this, _currentPath2D); + currentPath.push([x, y]); + __privateSet(this, _hasSomethingToDraw, true); + if (currentPath.length <= 2) { + path2D.moveTo(...currentPath[0]); + path2D.lineTo(x, y); + return; + } + if (currentPath.length === 3) { + __privateSet(this, _currentPath2D, path2D = new Path2D()); + path2D.moveTo(...currentPath[0]); + } + __privateMethod(this, _makeBezierCurve, makeBezierCurve_fn).call(this, path2D, ...currentPath.at(-3), ...currentPath.at(-2), x, y); +}; +_endPath = new WeakSet(); +endPath_fn = function() { + if (this.currentPath.length === 0) { + return; + } + const lastPoint = this.currentPath.at(-1); + __privateGet(this, _currentPath2D).lineTo(...lastPoint); +}; +_stopDrawing = new WeakSet(); +stopDrawing_fn = function(x, y) { + __privateSet(this, _requestFrameCallback, null); + x = Math.min(Math.max(x, 0), this.canvas.width); + y = Math.min(Math.max(y, 0), this.canvas.height); + __privateMethod(this, _draw, draw_fn).call(this, x, y); + __privateMethod(this, _endPath, endPath_fn).call(this); + let bezier; + if (this.currentPath.length !== 1) { + bezier = __privateMethod(this, _generateBezierPoints, generateBezierPoints_fn).call(this); + } else { + const xy = [x, y]; + bezier = [[xy, xy.slice(), xy.slice(), xy]]; + } + const path2D = __privateGet(this, _currentPath2D); + const currentPath = this.currentPath; + this.currentPath = []; + __privateSet(this, _currentPath2D, new Path2D()); + const cmd = () => { + this.allRawPaths.push(currentPath); + this.paths.push(bezier); + this.bezierPath2D.push(path2D); + this._uiManager.rebuild(this); + }; + const undo = () => { + this.allRawPaths.pop(); + this.paths.pop(); + this.bezierPath2D.pop(); + if (this.paths.length === 0) { + this.remove(); + } else { + if (!this.canvas) { + __privateMethod(this, _createCanvas, createCanvas_fn).call(this); + __privateMethod(this, _createObserver, createObserver_fn).call(this); + } + __privateMethod(this, _fitToContent, fitToContent_fn).call(this); + } + }; + this.addCommands({ + cmd, + undo, + mustExec: true + }); +}; +_drawPoints = new WeakSet(); +drawPoints_fn = function() { + if (!__privateGet(this, _hasSomethingToDraw)) { + return; + } + __privateSet(this, _hasSomethingToDraw, false); + const thickness = Math.ceil(this.thickness * this.parentScale); + const lastPoints = this.currentPath.slice(-3); + const x = lastPoints.map((xy) => xy[0]); + const y = lastPoints.map((xy) => xy[1]); + const xMin = Math.min(...x) - thickness; + const xMax = Math.max(...x) + thickness; + const yMin = Math.min(...y) - thickness; + const yMax = Math.max(...y) + thickness; + const { + ctx + } = this; + ctx.save(); + ctx.clearRect(0, 0, this.canvas.width, this.canvas.height); + for (const path of this.bezierPath2D) { + ctx.stroke(path); + } + ctx.stroke(__privateGet(this, _currentPath2D)); + ctx.restore(); +}; +_makeBezierCurve = new WeakSet(); +makeBezierCurve_fn = function(path2D, x0, y0, x1, y1, x2, y2) { + const prevX = (x0 + x1) / 2; + const prevY = (y0 + y1) / 2; + const x3 = (x1 + x2) / 2; + const y3 = (y1 + y2) / 2; + path2D.bezierCurveTo(prevX + 2 * (x1 - prevX) / 3, prevY + 2 * (y1 - prevY) / 3, x3 + 2 * (x1 - x3) / 3, y3 + 2 * (y1 - y3) / 3, x3, y3); +}; +_generateBezierPoints = new WeakSet(); +generateBezierPoints_fn = function() { + const path = this.currentPath; + if (path.length <= 2) { + return [[path[0], path[0], path.at(-1), path.at(-1)]]; + } + const bezierPoints = []; + let i; + let [x0, y0] = path[0]; + for (i = 1; i < path.length - 2; i++) { + const [x12, y12] = path[i]; + const [x22, y22] = path[i + 1]; + const x3 = (x12 + x22) / 2; + const y3 = (y12 + y22) / 2; + const control12 = [x0 + 2 * (x12 - x0) / 3, y0 + 2 * (y12 - y0) / 3]; + const control22 = [x3 + 2 * (x12 - x3) / 3, y3 + 2 * (y12 - y3) / 3]; + bezierPoints.push([[x0, y0], control12, control22, [x3, y3]]); + [x0, y0] = [x3, y3]; + } + const [x1, y1] = path[i]; + const [x2, y2] = path[i + 1]; + const control1 = [x0 + 2 * (x1 - x0) / 3, y0 + 2 * (y1 - y0) / 3]; + const control2 = [x2 + 2 * (x1 - x2) / 3, y2 + 2 * (y1 - y2) / 3]; + bezierPoints.push([[x0, y0], control1, control2, [x2, y2]]); + return bezierPoints; +}; +_redraw = new WeakSet(); +redraw_fn = function() { + if (this.isEmpty()) { + __privateMethod(this, _updateTransform, updateTransform_fn).call(this); + return; + } + __privateMethod(this, _setStroke, setStroke_fn).call(this); + const { + canvas, + ctx + } = this; + ctx.setTransform(1, 0, 0, 1, 0, 0); + ctx.clearRect(0, 0, canvas.width, canvas.height); + __privateMethod(this, _updateTransform, updateTransform_fn).call(this); + for (const path of this.bezierPath2D) { + ctx.stroke(path); + } +}; +_addPointerdownListener = new WeakSet(); +addPointerdownListener_fn = function() { + if (__privateGet(this, _pointerdownAC)) { + return; + } + __privateSet(this, _pointerdownAC, new AbortController()); + const signal = this._uiManager.combinedSignal(__privateGet(this, _pointerdownAC)); + this.canvas.addEventListener("pointerdown", this.canvasPointerdown.bind(this), { + signal + }); +}; +_removePointerdownListener = new WeakSet(); +removePointerdownListener_fn = function() { + var _a2; + (_a2 = this.pointerdownAC) == null ? void 0 : _a2.abort(); + this.pointerdownAC = null; +}; +_endDrawing = new WeakSet(); +endDrawing_fn = function(event) { + var _a2; + (_a2 = __privateGet(this, _drawingAC)) == null ? void 0 : _a2.abort(); + __privateSet(this, _drawingAC, null); + __privateMethod(this, _addPointerdownListener, addPointerdownListener_fn).call(this); + if (__privateGet(this, _canvasContextMenuTimeoutId)) { + clearTimeout(__privateGet(this, _canvasContextMenuTimeoutId)); + } + __privateSet(this, _canvasContextMenuTimeoutId, setTimeout(() => { + __privateSet(this, _canvasContextMenuTimeoutId, null); + this.canvas.removeEventListener("contextmenu", noContextMenu); + }, 10)); + __privateMethod(this, _stopDrawing, stopDrawing_fn).call(this, event.offsetX, event.offsetY); + this.addToAnnotationStorage(); + this.setInBackground(); +}; +_createCanvas = new WeakSet(); +createCanvas_fn = function() { + this.canvas = document.createElement("canvas"); + this.canvas.width = this.canvas.height = 0; + this.canvas.className = "inkEditorCanvas"; + this.canvas.setAttribute("data-l10n-id", "pdfjs-ink-canvas"); + this.div.append(this.canvas); + this.ctx = this.canvas.getContext("2d"); +}; +_createObserver = new WeakSet(); +createObserver_fn = function() { + __privateSet(this, _observer, new ResizeObserver((entries) => { + const rect = entries[0].contentRect; + if (rect.width && rect.height) { + this.setDimensions(rect.width, rect.height); + } + })); + __privateGet(this, _observer).observe(this.div); + this._uiManager._signal.addEventListener("abort", () => { + var _a2; + (_a2 = __privateGet(this, _observer)) == null ? void 0 : _a2.disconnect(); + __privateSet(this, _observer, null); + }, { + once: true + }); +}; +_setCanvasDims = new WeakSet(); +setCanvasDims_fn = function() { + if (!__privateGet(this, _isCanvasInitialized)) { + return; + } + const [parentWidth, parentHeight] = this.parentDimensions; + this.canvas.width = Math.ceil(this.width * parentWidth); + this.canvas.height = Math.ceil(this.height * parentHeight); + __privateMethod(this, _updateTransform, updateTransform_fn).call(this); +}; +_setScaleFactor = new WeakSet(); +setScaleFactor_fn = function(width, height) { + const padding = __privateMethod(this, _getPadding, getPadding_fn).call(this); + const scaleFactorW = (width - padding) / __privateGet(this, _baseWidth); + const scaleFactorH = (height - padding) / __privateGet(this, _baseHeight); + this.scaleFactor = Math.min(scaleFactorW, scaleFactorH); +}; +_updateTransform = new WeakSet(); +updateTransform_fn = function() { + const padding = __privateMethod(this, _getPadding, getPadding_fn).call(this) / 2; + this.ctx.setTransform(this.scaleFactor, 0, 0, this.scaleFactor, this.translationX * this.scaleFactor + padding, this.translationY * this.scaleFactor + padding); +}; +_buildPath2D = new WeakSet(); +buildPath2D_fn = function(bezier) { + const path2D = new Path2D(); + for (let i = 0, ii = bezier.length; i < ii; i++) { + const [first, control1, control2, second] = bezier[i]; + if (i === 0) { + path2D.moveTo(...first); + } + path2D.bezierCurveTo(control1[0], control1[1], control2[0], control2[1], second[0], second[1]); + } + return path2D; +}; +_toPDFCoordinates = new WeakSet(); +toPDFCoordinates_fn = function(points, rect, rotation) { + const [blX, blY, trX, trY] = rect; + switch (rotation) { + case 0: + for (let i = 0, ii = points.length; i < ii; i += 2) { + points[i] += blX; + points[i + 1] = trY - points[i + 1]; + } + break; + case 90: + for (let i = 0, ii = points.length; i < ii; i += 2) { + const x = points[i]; + points[i] = points[i + 1] + blX; + points[i + 1] = x + blY; + } + break; + case 180: + for (let i = 0, ii = points.length; i < ii; i += 2) { + points[i] = trX - points[i]; + points[i + 1] += blY; + } + break; + case 270: + for (let i = 0, ii = points.length; i < ii; i += 2) { + const x = points[i]; + points[i] = trX - points[i + 1]; + points[i + 1] = trY - x; + } + break; + default: + throw new Error("Invalid rotation"); + } + return points; +}; +_fromPDFCoordinates = new WeakSet(); +fromPDFCoordinates_fn = function(points, rect, rotation) { + const [blX, blY, trX, trY] = rect; + switch (rotation) { + case 0: + for (let i = 0, ii = points.length; i < ii; i += 2) { + points[i] -= blX; + points[i + 1] = trY - points[i + 1]; + } + break; + case 90: + for (let i = 0, ii = points.length; i < ii; i += 2) { + const x = points[i]; + points[i] = points[i + 1] - blY; + points[i + 1] = x - blX; + } + break; + case 180: + for (let i = 0, ii = points.length; i < ii; i += 2) { + points[i] = trX - points[i]; + points[i + 1] -= blY; + } + break; + case 270: + for (let i = 0, ii = points.length; i < ii; i += 2) { + const x = points[i]; + points[i] = trY - points[i + 1]; + points[i + 1] = trX - x; + } + break; + default: + throw new Error("Invalid rotation"); + } + return points; +}; +_serializePaths = new WeakSet(); +serializePaths_fn = function(s, tx, ty, rect) { + var _a2, _b; + const paths = []; + const padding = this.thickness / 2; + const shiftX = s * tx + padding; + const shiftY = s * ty + padding; + for (const bezier of this.paths) { + const buffer = []; + const points = []; + for (let j = 0, jj = bezier.length; j < jj; j++) { + const [first, control1, control2, second] = bezier[j]; + if (first[0] === second[0] && first[1] === second[1] && jj === 1) { + const p0 = s * first[0] + shiftX; + const p1 = s * first[1] + shiftY; + buffer.push(p0, p1); + points.push(p0, p1); + break; + } + const p10 = s * first[0] + shiftX; + const p11 = s * first[1] + shiftY; + const p20 = s * control1[0] + shiftX; + const p21 = s * control1[1] + shiftY; + const p30 = s * control2[0] + shiftX; + const p31 = s * control2[1] + shiftY; + const p40 = s * second[0] + shiftX; + const p41 = s * second[1] + shiftY; + if (j === 0) { + buffer.push(p10, p11); + points.push(p10, p11); + } + buffer.push(p20, p21, p30, p31, p40, p41); + points.push(p20, p21); + if (j === jj - 1) { + points.push(p40, p41); + } + } + paths.push({ + bezier: __privateMethod(_a2 = _InkEditor, _toPDFCoordinates, toPDFCoordinates_fn).call(_a2, buffer, rect, this.rotation), + points: __privateMethod(_b = _InkEditor, _toPDFCoordinates, toPDFCoordinates_fn).call(_b, points, rect, this.rotation) + }); + } + return paths; +}; +_getBbox = new WeakSet(); +getBbox_fn = function() { + let xMin = Infinity; + let xMax = -Infinity; + let yMin = Infinity; + let yMax = -Infinity; + for (const path of this.paths) { + for (const [first, control1, control2, second] of path) { + const bbox = Util.bezierBoundingBox(...first, ...control1, ...control2, ...second); + xMin = Math.min(xMin, bbox[0]); + yMin = Math.min(yMin, bbox[1]); + xMax = Math.max(xMax, bbox[2]); + yMax = Math.max(yMax, bbox[3]); + } + } + return [xMin, yMin, xMax, yMax]; +}; +_getPadding = new WeakSet(); +getPadding_fn = function() { + return __privateGet(this, _disableEditing) ? Math.ceil(this.thickness * this.parentScale) : 0; +}; +_fitToContent = new WeakSet(); +fitToContent_fn = function(firstTime = false) { + if (this.isEmpty()) { + return; + } + if (!__privateGet(this, _disableEditing)) { + __privateMethod(this, _redraw, redraw_fn).call(this); + return; + } + const bbox = __privateMethod(this, _getBbox, getBbox_fn).call(this); + const padding = __privateMethod(this, _getPadding, getPadding_fn).call(this); + __privateSet(this, _baseWidth, Math.max(AnnotationEditor.MIN_SIZE, bbox[2] - bbox[0])); + __privateSet(this, _baseHeight, Math.max(AnnotationEditor.MIN_SIZE, bbox[3] - bbox[1])); + const width = Math.ceil(padding + __privateGet(this, _baseWidth) * this.scaleFactor); + const height = Math.ceil(padding + __privateGet(this, _baseHeight) * this.scaleFactor); + const [parentWidth, parentHeight] = this.parentDimensions; + this.width = width / parentWidth; + this.height = height / parentHeight; + this.setAspectRatio(width, height); + const prevTranslationX = this.translationX; + const prevTranslationY = this.translationY; + this.translationX = -bbox[0]; + this.translationY = -bbox[1]; + __privateMethod(this, _setCanvasDims, setCanvasDims_fn).call(this); + __privateMethod(this, _redraw, redraw_fn).call(this); + __privateSet(this, _realWidth, width); + __privateSet(this, _realHeight, height); + this.setDims(width, height); + const unscaledPadding = firstTime ? padding / this.scaleFactor / 2 : 0; + this.translate(prevTranslationX - this.translationX - unscaledPadding, prevTranslationY - this.translationY - unscaledPadding); +}; +__privateAdd(InkEditor, _buildPath2D); +__privateAdd(InkEditor, _toPDFCoordinates); +__privateAdd(InkEditor, _fromPDFCoordinates); +__publicField(InkEditor, "_defaultColor", null); +__publicField(InkEditor, "_defaultOpacity", 1); +__publicField(InkEditor, "_defaultThickness", 1); +__publicField(InkEditor, "_type", "ink"); +__publicField(InkEditor, "_editorType", AnnotationEditorType.INK); +var _bitmap, _bitmapId, _bitmapPromise, _bitmapUrl, _bitmapFile, _bitmapFileName, _canvas, _observer2, _resizeTimeoutId, _isSvg, _hasBeenAddedInUndoStack, _getBitmapFetched, getBitmapFetched_fn, _getBitmapDone, getBitmapDone_fn, _getBitmap, getBitmap_fn, _createCanvas2, createCanvas_fn2, _setDimensions, setDimensions_fn, _scaleBitmap, scaleBitmap_fn, _drawBitmap, drawBitmap_fn, _serializeBitmap, serializeBitmap_fn, _createObserver2, createObserver_fn2; +var _StampEditor = class extends AnnotationEditor { + constructor(params) { + super({ + ...params, + name: "stampEditor" + }); + __privateAdd(this, _getBitmapFetched); + __privateAdd(this, _getBitmapDone); + __privateAdd(this, _getBitmap); + __privateAdd(this, _createCanvas2); + __privateAdd(this, _setDimensions); + __privateAdd(this, _scaleBitmap); + __privateAdd(this, _drawBitmap); + __privateAdd(this, _serializeBitmap); + __privateAdd(this, _createObserver2); + __privateAdd(this, _bitmap, null); + __privateAdd(this, _bitmapId, null); + __privateAdd(this, _bitmapPromise, null); + __privateAdd(this, _bitmapUrl, null); + __privateAdd(this, _bitmapFile, null); + __privateAdd(this, _bitmapFileName, ""); + __privateAdd(this, _canvas, null); + __privateAdd(this, _observer2, null); + __privateAdd(this, _resizeTimeoutId, null); + __privateAdd(this, _isSvg, false); + __privateAdd(this, _hasBeenAddedInUndoStack, false); + __privateSet(this, _bitmapUrl, params.bitmapUrl); + __privateSet(this, _bitmapFile, params.bitmapFile); + } + static initialize(l10n, uiManager) { + AnnotationEditor.initialize(l10n, uiManager); + } + static get supportedTypes() { + const types = ["apng", "avif", "bmp", "gif", "jpeg", "png", "svg+xml", "webp", "x-icon"]; + return shadow(this, "supportedTypes", types.map((type) => `image/${type}`)); + } + static get supportedTypesStr() { + return shadow(this, "supportedTypesStr", this.supportedTypes.join(",")); + } + static isHandlingMimeForPasting(mime) { + return this.supportedTypes.includes(mime); + } + static paste(item, parent) { + parent.pasteEditor(AnnotationEditorType.STAMP, { + bitmapFile: item.getAsFile() + }); + } + altTextFinish() { + if (this._uiManager.useNewAltTextFlow) { + this.div.hidden = false; + } + super.altTextFinish(); + } + get telemetryFinalData() { + var _a2; + return { + type: "stamp", + hasAltText: !!((_a2 = this.altTextData) == null ? void 0 : _a2.altText) + }; + } + static computeTelemetryFinalData(data) { + var _a2, _b; + const hasAltTextStats = data.get("hasAltText"); + return { + hasAltText: (_a2 = hasAltTextStats.get(true)) != null ? _a2 : 0, + hasNoAltText: (_b = hasAltTextStats.get(false)) != null ? _b : 0 + }; + } + async mlGuessAltText(imageData = null, updateAltTextData = true) { + if (this.hasAltTextData()) { + return null; + } + const { + mlManager + } = this._uiManager; + if (!mlManager) { + throw new Error("No ML."); + } + if (!await mlManager.isEnabledFor("altText")) { + throw new Error("ML isn't enabled for alt text."); + } + const { + data, + width, + height + } = imageData || this.copyCanvas(null, true).imageData; + const response = await mlManager.guess({ + name: "altText", + request: { + data, + width, + height, + channels: data.length / (width * height) + } + }); + if (!response) { + throw new Error("No response from the AI service."); + } + if (response.error) { + throw new Error("Error from the AI service."); + } + if (response.cancel) { + return null; + } + if (!response.output) { + throw new Error("No valid response from the AI service."); + } + const altText = response.output; + await this.setGuessedAltText(altText); + if (updateAltTextData && !this.hasAltTextData()) { + this.altTextData = { + alt: altText, + decorative: false + }; + } + return altText; + } + remove() { + var _a2, _b; + if (__privateGet(this, _bitmapId)) { + __privateSet(this, _bitmap, null); + this._uiManager.imageManager.deleteId(__privateGet(this, _bitmapId)); + (_a2 = __privateGet(this, _canvas)) == null ? void 0 : _a2.remove(); + __privateSet(this, _canvas, null); + (_b = __privateGet(this, _observer2)) == null ? void 0 : _b.disconnect(); + __privateSet(this, _observer2, null); + if (__privateGet(this, _resizeTimeoutId)) { + clearTimeout(__privateGet(this, _resizeTimeoutId)); + __privateSet(this, _resizeTimeoutId, null); + } + } + super.remove(); + } + rebuild() { + if (!this.parent) { + if (__privateGet(this, _bitmapId)) { + __privateMethod(this, _getBitmap, getBitmap_fn).call(this); + } + return; + } + super.rebuild(); + if (this.div === null) { + return; + } + if (__privateGet(this, _bitmapId) && __privateGet(this, _canvas) === null) { + __privateMethod(this, _getBitmap, getBitmap_fn).call(this); + } + if (!this.isAttachedToDOM) { + this.parent.add(this); + } + } + onceAdded() { + this._isDraggable = true; + this.div.focus(); + } + isEmpty() { + return !(__privateGet(this, _bitmapPromise) || __privateGet(this, _bitmap) || __privateGet(this, _bitmapUrl) || __privateGet(this, _bitmapFile) || __privateGet(this, _bitmapId)); + } + get isResizable() { + return true; + } + render() { + if (this.div) { + return this.div; + } + let baseX, baseY; + if (this.width) { + baseX = this.x; + baseY = this.y; + } + super.render(); + this.div.hidden = true; + this.addAltTextButton(); + if (__privateGet(this, _bitmap)) { + __privateMethod(this, _createCanvas2, createCanvas_fn2).call(this); + } else { + __privateMethod(this, _getBitmap, getBitmap_fn).call(this); + } + if (this.width) { + const [parentWidth, parentHeight] = this.parentDimensions; + this.setAt(baseX * parentWidth, baseY * parentHeight, this.width * parentWidth, this.height * parentHeight); + } + return this.div; + } + copyCanvas(maxDimension, createImageData = false) { + var _a2; + if (!maxDimension) { + maxDimension = 224; + } + const { + width: bitmapWidth, + height: bitmapHeight + } = __privateGet(this, _bitmap); + const canvas = document.createElement("canvas"); + let bitmap = __privateGet(this, _bitmap); + let width = bitmapWidth, height = bitmapHeight; + if (bitmapWidth > maxDimension || bitmapHeight > maxDimension) { + const ratio = Math.min(maxDimension / bitmapWidth, maxDimension / bitmapHeight); + width = Math.floor(bitmapWidth * ratio); + height = Math.floor(bitmapHeight * ratio); + if (!__privateGet(this, _isSvg)) { + bitmap = __privateMethod(this, _scaleBitmap, scaleBitmap_fn).call(this, width, height); + } + } + canvas.width = width; + canvas.height = height; + const ctx = canvas.getContext("2d"); + ctx.filter = this._uiManager.hcmFilter; + let white = "white", black = "#cfcfd8"; + if (this._uiManager.hcmFilter !== "none") { + black = "black"; + } else if ((_a2 = window.matchMedia) == null ? void 0 : _a2.call(window, "(prefers-color-scheme: dark)").matches) { + white = "#8f8f9d"; + black = "#42414d"; + } + const boxDim = 15; + const pattern = new OffscreenCanvas(boxDim * 2, boxDim * 2); + const patternCtx = pattern.getContext("2d"); + patternCtx.fillStyle = white; + patternCtx.fillRect(0, 0, boxDim * 2, boxDim * 2); + patternCtx.fillStyle = black; + patternCtx.fillRect(0, 0, boxDim, boxDim); + patternCtx.fillRect(boxDim, boxDim, boxDim, boxDim); + ctx.fillStyle = ctx.createPattern(pattern, "repeat"); + ctx.fillRect(0, 0, width, height); + if (createImageData) { + const offscreen = new OffscreenCanvas(width, height); + const offscreenCtx = offscreen.getContext("2d", { + willReadFrequently: true + }); + offscreenCtx.drawImage(bitmap, 0, 0, bitmap.width, bitmap.height, 0, 0, width, height); + const data = offscreenCtx.getImageData(0, 0, width, height).data; + ctx.drawImage(offscreen, 0, 0); + return { + canvas, + imageData: { + width, + height, + data + } + }; + } + ctx.drawImage(bitmap, 0, 0, bitmap.width, bitmap.height, 0, 0, width, height); + return { + canvas, + imageData: null + }; + } + getImageForAltText() { + return __privateGet(this, _canvas); + } + static deserialize(data, parent, uiManager) { + if (data instanceof StampAnnotationElement) { + return null; + } + const editor = super.deserialize(data, parent, uiManager); + const { + rect, + bitmapUrl, + bitmapId, + isSvg, + accessibilityData + } = data; + if (bitmapId && uiManager.imageManager.isValidId(bitmapId)) { + __privateSet(editor, _bitmapId, bitmapId); + } else { + __privateSet(editor, _bitmapUrl, bitmapUrl); + } + __privateSet(editor, _isSvg, isSvg); + const [parentWidth, parentHeight] = editor.pageDimensions; + editor.width = (rect[2] - rect[0]) / parentWidth; + editor.height = (rect[3] - rect[1]) / parentHeight; + if (accessibilityData) { + editor.altTextData = accessibilityData; + } + return editor; + } + serialize(isForCopying = false, context = null) { + if (this.isEmpty()) { + return null; + } + const serialized = { + annotationType: AnnotationEditorType.STAMP, + bitmapId: __privateGet(this, _bitmapId), + pageIndex: this.pageIndex, + rect: this.getRect(0, 0), + rotation: this.rotation, + isSvg: __privateGet(this, _isSvg), + structTreeParentId: this._structTreeParentId + }; + if (isForCopying) { + serialized.bitmapUrl = __privateMethod(this, _serializeBitmap, serializeBitmap_fn).call(this, true); + serialized.accessibilityData = this.serializeAltText(true); + return serialized; + } + const { + decorative, + altText + } = this.serializeAltText(false); + if (!decorative && altText) { + serialized.accessibilityData = { + type: "Figure", + alt: altText + }; + } + if (context === null) { + return serialized; + } + context.stamps || (context.stamps = /* @__PURE__ */ new Map()); + const area = __privateGet(this, _isSvg) ? (serialized.rect[2] - serialized.rect[0]) * (serialized.rect[3] - serialized.rect[1]) : null; + if (!context.stamps.has(__privateGet(this, _bitmapId))) { + context.stamps.set(__privateGet(this, _bitmapId), { + area, + serialized + }); + serialized.bitmap = __privateMethod(this, _serializeBitmap, serializeBitmap_fn).call(this, false); + } else if (__privateGet(this, _isSvg)) { + const prevData = context.stamps.get(__privateGet(this, _bitmapId)); + if (area > prevData.area) { + prevData.area = area; + prevData.serialized.bitmap.close(); + prevData.serialized.bitmap = __privateMethod(this, _serializeBitmap, serializeBitmap_fn).call(this, false); + } + } + return serialized; + } +}; +var StampEditor = _StampEditor; +_bitmap = new WeakMap(); +_bitmapId = new WeakMap(); +_bitmapPromise = new WeakMap(); +_bitmapUrl = new WeakMap(); +_bitmapFile = new WeakMap(); +_bitmapFileName = new WeakMap(); +_canvas = new WeakMap(); +_observer2 = new WeakMap(); +_resizeTimeoutId = new WeakMap(); +_isSvg = new WeakMap(); +_hasBeenAddedInUndoStack = new WeakMap(); +_getBitmapFetched = new WeakSet(); +getBitmapFetched_fn = function(data, fromId = false) { + if (!data) { + this.remove(); + return; + } + __privateSet(this, _bitmap, data.bitmap); + if (!fromId) { + __privateSet(this, _bitmapId, data.id); + __privateSet(this, _isSvg, data.isSvg); + } + if (data.file) { + __privateSet(this, _bitmapFileName, data.file.name); + } + __privateMethod(this, _createCanvas2, createCanvas_fn2).call(this); +}; +_getBitmapDone = new WeakSet(); +getBitmapDone_fn = function() { + __privateSet(this, _bitmapPromise, null); + this._uiManager.enableWaiting(false); + if (!__privateGet(this, _canvas)) { + return; + } + if (this._uiManager.useNewAltTextWhenAddingImage && this._uiManager.useNewAltTextFlow && __privateGet(this, _bitmap)) { + this._editToolbar.hide(); + this._uiManager.editAltText(this, true); + return; + } + if (!this._uiManager.useNewAltTextWhenAddingImage && this._uiManager.useNewAltTextFlow && __privateGet(this, _bitmap)) { + this._reportTelemetry({ + action: "pdfjs.image.image_added", + data: { + alt_text_modal: false, + alt_text_type: "empty" + } + }); + try { + this.mlGuessAltText(); + } catch (e) { + } + } + this.div.focus(); +}; +_getBitmap = new WeakSet(); +getBitmap_fn = function() { + if (__privateGet(this, _bitmapId)) { + this._uiManager.enableWaiting(true); + this._uiManager.imageManager.getFromId(__privateGet(this, _bitmapId)).then((data) => __privateMethod(this, _getBitmapFetched, getBitmapFetched_fn).call(this, data, true)).finally(() => __privateMethod(this, _getBitmapDone, getBitmapDone_fn).call(this)); + return; + } + if (__privateGet(this, _bitmapUrl)) { + const url = __privateGet(this, _bitmapUrl); + __privateSet(this, _bitmapUrl, null); + this._uiManager.enableWaiting(true); + __privateSet(this, _bitmapPromise, this._uiManager.imageManager.getFromUrl(url).then((data) => __privateMethod(this, _getBitmapFetched, getBitmapFetched_fn).call(this, data)).finally(() => __privateMethod(this, _getBitmapDone, getBitmapDone_fn).call(this))); + return; + } + if (__privateGet(this, _bitmapFile)) { + const file = __privateGet(this, _bitmapFile); + __privateSet(this, _bitmapFile, null); + this._uiManager.enableWaiting(true); + __privateSet(this, _bitmapPromise, this._uiManager.imageManager.getFromFile(file).then((data) => __privateMethod(this, _getBitmapFetched, getBitmapFetched_fn).call(this, data)).finally(() => __privateMethod(this, _getBitmapDone, getBitmapDone_fn).call(this))); + return; + } + const input = document.createElement("input"); + input.type = "file"; + input.accept = _StampEditor.supportedTypesStr; + const signal = this._uiManager._signal; + __privateSet(this, _bitmapPromise, new Promise((resolve) => { + input.addEventListener("change", async () => { + if (!input.files || input.files.length === 0) { + this.remove(); + } else { + this._uiManager.enableWaiting(true); + const data = await this._uiManager.imageManager.getFromFile(input.files[0]); + this._reportTelemetry({ + action: "pdfjs.image.image_selected", + data: { + alt_text_modal: this._uiManager.useNewAltTextFlow + } + }); + __privateMethod(this, _getBitmapFetched, getBitmapFetched_fn).call(this, data); + } + resolve(); + }, { + signal + }); + input.addEventListener("cancel", () => { + this.remove(); + resolve(); + }, { + signal + }); + }).finally(() => __privateMethod(this, _getBitmapDone, getBitmapDone_fn).call(this))); + input.click(); +}; +_createCanvas2 = new WeakSet(); +createCanvas_fn2 = function() { + const { + div + } = this; + let { + width, + height + } = __privateGet(this, _bitmap); + const [pageWidth, pageHeight] = this.pageDimensions; + const MAX_RATIO = 0.75; + if (this.width) { + width = this.width * pageWidth; + height = this.height * pageHeight; + } else if (width > MAX_RATIO * pageWidth || height > MAX_RATIO * pageHeight) { + const factor = Math.min(MAX_RATIO * pageWidth / width, MAX_RATIO * pageHeight / height); + width *= factor; + height *= factor; + } + const [parentWidth, parentHeight] = this.parentDimensions; + this.setDims(width * parentWidth / pageWidth, height * parentHeight / pageHeight); + this._uiManager.enableWaiting(false); + const canvas = __privateSet(this, _canvas, document.createElement("canvas")); + div.append(canvas); + if (!this._uiManager.useNewAltTextWhenAddingImage || !this._uiManager.useNewAltTextFlow) { + div.hidden = false; + } + __privateMethod(this, _drawBitmap, drawBitmap_fn).call(this, width, height); + __privateMethod(this, _createObserver2, createObserver_fn2).call(this); + if (!__privateGet(this, _hasBeenAddedInUndoStack)) { + this.parent.addUndoableEditor(this); + __privateSet(this, _hasBeenAddedInUndoStack, true); + } + this._reportTelemetry({ + action: "inserted_image" + }); + if (__privateGet(this, _bitmapFileName)) { + canvas.setAttribute("aria-label", __privateGet(this, _bitmapFileName)); + } +}; +_setDimensions = new WeakSet(); +setDimensions_fn = function(width, height) { + var _a2; + const [parentWidth, parentHeight] = this.parentDimensions; + this.width = width / parentWidth; + this.height = height / parentHeight; + this.setDims(width, height); + if ((_a2 = this._initialOptions) == null ? void 0 : _a2.isCentered) { + this.center(); + } else { + this.fixAndSetPosition(); + } + this._initialOptions = null; + if (__privateGet(this, _resizeTimeoutId) !== null) { + clearTimeout(__privateGet(this, _resizeTimeoutId)); + } + const TIME_TO_WAIT = 200; + __privateSet(this, _resizeTimeoutId, setTimeout(() => { + __privateSet(this, _resizeTimeoutId, null); + __privateMethod(this, _drawBitmap, drawBitmap_fn).call(this, width, height); + }, TIME_TO_WAIT)); +}; +_scaleBitmap = new WeakSet(); +scaleBitmap_fn = function(width, height) { + const { + width: bitmapWidth, + height: bitmapHeight + } = __privateGet(this, _bitmap); + let newWidth = bitmapWidth; + let newHeight = bitmapHeight; + let bitmap = __privateGet(this, _bitmap); + while (newWidth > 2 * width || newHeight > 2 * height) { + const prevWidth = newWidth; + const prevHeight = newHeight; + if (newWidth > 2 * width) { + newWidth = newWidth >= 16384 ? Math.floor(newWidth / 2) - 1 : Math.ceil(newWidth / 2); + } + if (newHeight > 2 * height) { + newHeight = newHeight >= 16384 ? Math.floor(newHeight / 2) - 1 : Math.ceil(newHeight / 2); + } + const offscreen = new OffscreenCanvas(newWidth, newHeight); + const ctx = offscreen.getContext("2d"); + ctx.drawImage(bitmap, 0, 0, prevWidth, prevHeight, 0, 0, newWidth, newHeight); + bitmap = offscreen.transferToImageBitmap(); + } + return bitmap; +}; +_drawBitmap = new WeakSet(); +drawBitmap_fn = function(width, height) { + width = Math.ceil(width); + height = Math.ceil(height); + const canvas = __privateGet(this, _canvas); + if (!canvas || canvas.width === width && canvas.height === height) { + return; + } + canvas.width = width; + canvas.height = height; + const bitmap = __privateGet(this, _isSvg) ? __privateGet(this, _bitmap) : __privateMethod(this, _scaleBitmap, scaleBitmap_fn).call(this, width, height); + const ctx = canvas.getContext("2d"); + ctx.filter = this._uiManager.hcmFilter; + ctx.drawImage(bitmap, 0, 0, bitmap.width, bitmap.height, 0, 0, width, height); +}; +_serializeBitmap = new WeakSet(); +serializeBitmap_fn = function(toUrl) { + if (toUrl) { + if (__privateGet(this, _isSvg)) { + const url = this._uiManager.imageManager.getSvgUrl(__privateGet(this, _bitmapId)); + if (url) { + return url; + } + } + const canvas = document.createElement("canvas"); + ({ + width: canvas.width, + height: canvas.height + } = __privateGet(this, _bitmap)); + const ctx = canvas.getContext("2d"); + ctx.drawImage(__privateGet(this, _bitmap), 0, 0); + return canvas.toDataURL(); + } + if (__privateGet(this, _isSvg)) { + const [pageWidth, pageHeight] = this.pageDimensions; + const width = Math.round(this.width * pageWidth * PixelsPerInch.PDF_TO_CSS_UNITS); + const height = Math.round(this.height * pageHeight * PixelsPerInch.PDF_TO_CSS_UNITS); + const offscreen = new OffscreenCanvas(width, height); + const ctx = offscreen.getContext("2d"); + ctx.drawImage(__privateGet(this, _bitmap), 0, 0, __privateGet(this, _bitmap).width, __privateGet(this, _bitmap).height, 0, 0, width, height); + return offscreen.transferToImageBitmap(); + } + return structuredClone(__privateGet(this, _bitmap)); +}; +_createObserver2 = new WeakSet(); +createObserver_fn2 = function() { + if (!this._uiManager._signal) { + return; + } + __privateSet(this, _observer2, new ResizeObserver((entries) => { + const rect = entries[0].contentRect; + if (rect.width && rect.height) { + __privateMethod(this, _setDimensions, setDimensions_fn).call(this, rect.width, rect.height); + } + })); + __privateGet(this, _observer2).observe(this.div); + this._uiManager._signal.addEventListener("abort", () => { + var _a2; + (_a2 = __privateGet(this, _observer2)) == null ? void 0 : _a2.disconnect(); + __privateSet(this, _observer2, null); + }, { + once: true + }); +}; +__publicField(StampEditor, "_type", "stamp"); +__publicField(StampEditor, "_editorType", AnnotationEditorType.STAMP); +var _accessibilityManager2, _allowClick, _annotationLayer, _clickAC, _editorFocusTimeoutId, _editors, _hadPointerDown, _isCleaningUp, _isDisabling, _textLayer, _textSelectionAC, _uiManager3, _editorTypes2, _textLayerPointerDown, textLayerPointerDown_fn, _currentEditorType, currentEditorType_get, _createNewEditor, createNewEditor_fn, _getCenterPoint, getCenterPoint_fn, _cleanup, cleanup_fn; +var _AnnotationEditorLayer = class { + constructor({ + uiManager, + pageIndex, + div, + accessibilityManager, + annotationLayer, + drawLayer, + textLayer, + viewport, + l10n + }) { + __privateAdd(this, _textLayerPointerDown); + __privateAdd(this, _currentEditorType); + __privateAdd(this, _createNewEditor); + __privateAdd(this, _getCenterPoint); + __privateAdd(this, _cleanup); + __privateAdd(this, _accessibilityManager2, void 0); + __privateAdd(this, _allowClick, false); + __privateAdd(this, _annotationLayer, null); + __privateAdd(this, _clickAC, null); + __privateAdd(this, _editorFocusTimeoutId, null); + __privateAdd(this, _editors, /* @__PURE__ */ new Map()); + __privateAdd(this, _hadPointerDown, false); + __privateAdd(this, _isCleaningUp, false); + __privateAdd(this, _isDisabling, false); + __privateAdd(this, _textLayer, null); + __privateAdd(this, _textSelectionAC, null); + __privateAdd(this, _uiManager3, void 0); + const editorTypes = [...__privateGet(_AnnotationEditorLayer, _editorTypes2).values()]; + if (!_AnnotationEditorLayer._initialized) { + _AnnotationEditorLayer._initialized = true; + for (const editorType of editorTypes) { + editorType.initialize(l10n, uiManager); + } + } + uiManager.registerEditorTypes(editorTypes); + __privateSet(this, _uiManager3, uiManager); + this.pageIndex = pageIndex; + this.div = div; + __privateSet(this, _accessibilityManager2, accessibilityManager); + __privateSet(this, _annotationLayer, annotationLayer); + this.viewport = viewport; + __privateSet(this, _textLayer, textLayer); + this.drawLayer = drawLayer; + __privateGet(this, _uiManager3).addLayer(this); + } + get isEmpty() { + return __privateGet(this, _editors).size === 0; + } + get isInvisible() { + return this.isEmpty && __privateGet(this, _uiManager3).getMode() === AnnotationEditorType.NONE; + } + updateToolbar(mode) { + __privateGet(this, _uiManager3).updateToolbar(mode); + } + updateMode(mode = __privateGet(this, _uiManager3).getMode()) { + __privateMethod(this, _cleanup, cleanup_fn).call(this); + switch (mode) { + case AnnotationEditorType.NONE: + this.disableTextSelection(); + this.togglePointerEvents(false); + this.toggleAnnotationLayerPointerEvents(true); + this.disableClick(); + return; + case AnnotationEditorType.INK: + this.addInkEditorIfNeeded(false); + this.disableTextSelection(); + this.togglePointerEvents(true); + this.disableClick(); + break; + case AnnotationEditorType.HIGHLIGHT: + this.enableTextSelection(); + this.togglePointerEvents(false); + this.disableClick(); + break; + default: + this.disableTextSelection(); + this.togglePointerEvents(true); + this.enableClick(); + } + this.toggleAnnotationLayerPointerEvents(false); + const { + classList + } = this.div; + for (const editorType of __privateGet(_AnnotationEditorLayer, _editorTypes2).values()) { + classList.toggle(`${editorType._type}Editing`, mode === editorType._editorType); + } + this.div.hidden = false; + } + hasTextLayer(textLayer) { + var _a2; + return textLayer === ((_a2 = __privateGet(this, _textLayer)) == null ? void 0 : _a2.div); + } + addInkEditorIfNeeded(isCommitting) { + if (__privateGet(this, _uiManager3).getMode() !== AnnotationEditorType.INK) { + return; + } + if (!isCommitting) { + for (const editor2 of __privateGet(this, _editors).values()) { + if (editor2.isEmpty()) { + editor2.setInBackground(); + return; + } + } + } + const editor = this.createAndAddNewEditor({ + offsetX: 0, + offsetY: 0 + }, false); + editor.setInBackground(); + } + setEditingState(isEditing) { + __privateGet(this, _uiManager3).setEditingState(isEditing); + } + addCommands(params) { + __privateGet(this, _uiManager3).addCommands(params); + } + toggleDrawing(enabled = false) { + this.div.classList.toggle("drawing", !enabled); + } + togglePointerEvents(enabled = false) { + this.div.classList.toggle("disabled", !enabled); + } + toggleAnnotationLayerPointerEvents(enabled = false) { + var _a2; + (_a2 = __privateGet(this, _annotationLayer)) == null ? void 0 : _a2.div.classList.toggle("disabled", !enabled); + } + enable() { + this.div.tabIndex = 0; + this.togglePointerEvents(true); + const annotationElementIds = /* @__PURE__ */ new Set(); + for (const editor of __privateGet(this, _editors).values()) { + editor.enableEditing(); + editor.show(true); + if (editor.annotationElementId) { + __privateGet(this, _uiManager3).removeChangedExistingAnnotation(editor); + annotationElementIds.add(editor.annotationElementId); + } + } + if (!__privateGet(this, _annotationLayer)) { + return; + } + const editables = __privateGet(this, _annotationLayer).getEditableAnnotations(); + for (const editable of editables) { + editable.hide(); + if (__privateGet(this, _uiManager3).isDeletedAnnotationElement(editable.data.id)) { + continue; + } + if (annotationElementIds.has(editable.data.id)) { + continue; + } + const editor = this.deserialize(editable); + if (!editor) { + continue; + } + this.addOrRebuild(editor); + editor.enableEditing(); + } + } + disable() { + var _a2; + __privateSet(this, _isDisabling, true); + this.div.tabIndex = -1; + this.togglePointerEvents(false); + const changedAnnotations = /* @__PURE__ */ new Map(); + const resetAnnotations = /* @__PURE__ */ new Map(); + for (const editor of __privateGet(this, _editors).values()) { + editor.disableEditing(); + if (!editor.annotationElementId) { + continue; + } + if (editor.serialize() !== null) { + changedAnnotations.set(editor.annotationElementId, editor); + continue; + } else { + resetAnnotations.set(editor.annotationElementId, editor); + } + (_a2 = this.getEditableAnnotation(editor.annotationElementId)) == null ? void 0 : _a2.show(); + editor.remove(); + } + if (__privateGet(this, _annotationLayer)) { + const editables = __privateGet(this, _annotationLayer).getEditableAnnotations(); + for (const editable of editables) { + const { + id + } = editable.data; + if (__privateGet(this, _uiManager3).isDeletedAnnotationElement(id)) { + continue; + } + let editor = resetAnnotations.get(id); + if (editor) { + editor.resetAnnotationElement(editable); + editor.show(false); + editable.show(); + continue; + } + editor = changedAnnotations.get(id); + if (editor) { + __privateGet(this, _uiManager3).addChangedExistingAnnotation(editor); + editor.renderAnnotationElement(editable); + editor.show(false); + } + editable.show(); + } + } + __privateMethod(this, _cleanup, cleanup_fn).call(this); + if (this.isEmpty) { + this.div.hidden = true; + } + const { + classList + } = this.div; + for (const editorType of __privateGet(_AnnotationEditorLayer, _editorTypes2).values()) { + classList.remove(`${editorType._type}Editing`); + } + this.disableTextSelection(); + this.toggleAnnotationLayerPointerEvents(true); + __privateSet(this, _isDisabling, false); + } + getEditableAnnotation(id) { + var _a2; + return ((_a2 = __privateGet(this, _annotationLayer)) == null ? void 0 : _a2.getEditableAnnotation(id)) || null; + } + setActiveEditor(editor) { + const currentActive = __privateGet(this, _uiManager3).getActive(); + if (currentActive === editor) { + return; + } + __privateGet(this, _uiManager3).setActiveEditor(editor); + } + enableTextSelection() { + var _a2; + this.div.tabIndex = -1; + if (((_a2 = __privateGet(this, _textLayer)) == null ? void 0 : _a2.div) && !__privateGet(this, _textSelectionAC)) { + __privateSet(this, _textSelectionAC, new AbortController()); + const signal = __privateGet(this, _uiManager3).combinedSignal(__privateGet(this, _textSelectionAC)); + __privateGet(this, _textLayer).div.addEventListener("pointerdown", __privateMethod(this, _textLayerPointerDown, textLayerPointerDown_fn).bind(this), { + signal + }); + __privateGet(this, _textLayer).div.classList.add("highlighting"); + } + } + disableTextSelection() { + var _a2; + this.div.tabIndex = 0; + if (((_a2 = __privateGet(this, _textLayer)) == null ? void 0 : _a2.div) && __privateGet(this, _textSelectionAC)) { + __privateGet(this, _textSelectionAC).abort(); + __privateSet(this, _textSelectionAC, null); + __privateGet(this, _textLayer).div.classList.remove("highlighting"); + } + } + enableClick() { + if (__privateGet(this, _clickAC)) { + return; + } + __privateSet(this, _clickAC, new AbortController()); + const signal = __privateGet(this, _uiManager3).combinedSignal(__privateGet(this, _clickAC)); + this.div.addEventListener("pointerdown", this.pointerdown.bind(this), { + signal + }); + this.div.addEventListener("pointerup", this.pointerup.bind(this), { + signal + }); + } + disableClick() { + var _a2; + (_a2 = __privateGet(this, _clickAC)) == null ? void 0 : _a2.abort(); + __privateSet(this, _clickAC, null); + } + attach(editor) { + __privateGet(this, _editors).set(editor.id, editor); + const { + annotationElementId + } = editor; + if (annotationElementId && __privateGet(this, _uiManager3).isDeletedAnnotationElement(annotationElementId)) { + __privateGet(this, _uiManager3).removeDeletedAnnotationElement(editor); + } + } + detach(editor) { + var _a2; + __privateGet(this, _editors).delete(editor.id); + (_a2 = __privateGet(this, _accessibilityManager2)) == null ? void 0 : _a2.removePointerInTextLayer(editor.contentDiv); + if (!__privateGet(this, _isDisabling) && editor.annotationElementId) { + __privateGet(this, _uiManager3).addDeletedAnnotationElement(editor); + } + } + remove(editor) { + this.detach(editor); + __privateGet(this, _uiManager3).removeEditor(editor); + editor.div.remove(); + editor.isAttachedToDOM = false; + if (!__privateGet(this, _isCleaningUp)) { + this.addInkEditorIfNeeded(false); + } + } + changeParent(editor) { + var _a2; + if (editor.parent === this) { + return; + } + if (editor.parent && editor.annotationElementId) { + __privateGet(this, _uiManager3).addDeletedAnnotationElement(editor.annotationElementId); + AnnotationEditor.deleteAnnotationElement(editor); + editor.annotationElementId = null; + } + this.attach(editor); + (_a2 = editor.parent) == null ? void 0 : _a2.detach(editor); + editor.setParent(this); + if (editor.div && editor.isAttachedToDOM) { + editor.div.remove(); + this.div.append(editor.div); + } + } + add(editor) { + if (editor.parent === this && editor.isAttachedToDOM) { + return; + } + this.changeParent(editor); + __privateGet(this, _uiManager3).addEditor(editor); + this.attach(editor); + if (!editor.isAttachedToDOM) { + const div = editor.render(); + this.div.append(div); + editor.isAttachedToDOM = true; + } + editor.fixAndSetPosition(); + editor.onceAdded(); + __privateGet(this, _uiManager3).addToAnnotationStorage(editor); + editor._reportTelemetry(editor.telemetryInitialData); + } + moveEditorInDOM(editor) { + var _a2; + if (!editor.isAttachedToDOM) { + return; + } + const { + activeElement + } = document; + if (editor.div.contains(activeElement) && !__privateGet(this, _editorFocusTimeoutId)) { + editor._focusEventsAllowed = false; + __privateSet(this, _editorFocusTimeoutId, setTimeout(() => { + __privateSet(this, _editorFocusTimeoutId, null); + if (!editor.div.contains(document.activeElement)) { + editor.div.addEventListener("focusin", () => { + editor._focusEventsAllowed = true; + }, { + once: true, + signal: __privateGet(this, _uiManager3)._signal + }); + activeElement.focus(); + } else { + editor._focusEventsAllowed = true; + } + }, 0)); + } + editor._structTreeParentId = (_a2 = __privateGet(this, _accessibilityManager2)) == null ? void 0 : _a2.moveElementInDOM(this.div, editor.div, editor.contentDiv, true); + } + addOrRebuild(editor) { + if (editor.needsToBeRebuilt()) { + editor.parent || (editor.parent = this); + editor.rebuild(); + editor.show(); + } else { + this.add(editor); + } + } + addUndoableEditor(editor) { + const cmd = () => editor._uiManager.rebuild(editor); + const undo = () => { + editor.remove(); + }; + this.addCommands({ + cmd, + undo, + mustExec: false + }); + } + getNextId() { + return __privateGet(this, _uiManager3).getId(); + } + combinedSignal(ac) { + return __privateGet(this, _uiManager3).combinedSignal(ac); + } + canCreateNewEmptyEditor() { + var _a2; + return (_a2 = __privateGet(this, _currentEditorType, currentEditorType_get)) == null ? void 0 : _a2.canCreateNewEmptyEditor(); + } + pasteEditor(mode, params) { + __privateGet(this, _uiManager3).updateToolbar(mode); + __privateGet(this, _uiManager3).updateMode(mode); + const { + offsetX, + offsetY + } = __privateMethod(this, _getCenterPoint, getCenterPoint_fn).call(this); + const id = this.getNextId(); + const editor = __privateMethod(this, _createNewEditor, createNewEditor_fn).call(this, { + parent: this, + id, + x: offsetX, + y: offsetY, + uiManager: __privateGet(this, _uiManager3), + isCentered: true, + ...params + }); + if (editor) { + this.add(editor); + } + } + deserialize(data) { + var _a2, _b; + return ((_b = __privateGet(_AnnotationEditorLayer, _editorTypes2).get((_a2 = data.annotationType) != null ? _a2 : data.annotationEditorType)) == null ? void 0 : _b.deserialize(data, this, __privateGet(this, _uiManager3))) || null; + } + createAndAddNewEditor(event, isCentered, data = {}) { + const id = this.getNextId(); + const editor = __privateMethod(this, _createNewEditor, createNewEditor_fn).call(this, { + parent: this, + id, + x: event.offsetX, + y: event.offsetY, + uiManager: __privateGet(this, _uiManager3), + isCentered, + ...data + }); + if (editor) { + this.add(editor); + } + return editor; + } + addNewEditor() { + this.createAndAddNewEditor(__privateMethod(this, _getCenterPoint, getCenterPoint_fn).call(this), true); + } + setSelected(editor) { + __privateGet(this, _uiManager3).setSelected(editor); + } + toggleSelected(editor) { + __privateGet(this, _uiManager3).toggleSelected(editor); + } + isSelected(editor) { + return __privateGet(this, _uiManager3).isSelected(editor); + } + unselect(editor) { + __privateGet(this, _uiManager3).unselect(editor); + } + pointerup(event) { + const { + isMac + } = util_FeatureTest.platform; + if (event.button !== 0 || event.ctrlKey && isMac) { + return; + } + if (event.target !== this.div) { + return; + } + if (!__privateGet(this, _hadPointerDown)) { + return; + } + __privateSet(this, _hadPointerDown, false); + if (!__privateGet(this, _allowClick)) { + __privateSet(this, _allowClick, true); + return; + } + if (__privateGet(this, _uiManager3).getMode() === AnnotationEditorType.STAMP) { + __privateGet(this, _uiManager3).unselectAll(); + return; + } + this.createAndAddNewEditor(event, false); + } + pointerdown(event) { + if (__privateGet(this, _uiManager3).getMode() === AnnotationEditorType.HIGHLIGHT) { + this.enableTextSelection(); + } + if (__privateGet(this, _hadPointerDown)) { + __privateSet(this, _hadPointerDown, false); + return; + } + const { + isMac + } = util_FeatureTest.platform; + if (event.button !== 0 || event.ctrlKey && isMac) { + return; + } + if (event.target !== this.div) { + return; + } + __privateSet(this, _hadPointerDown, true); + const editor = __privateGet(this, _uiManager3).getActive(); + __privateSet(this, _allowClick, !editor || editor.isEmpty()); + } + findNewParent(editor, x, y) { + const layer = __privateGet(this, _uiManager3).findParent(x, y); + if (layer === null || layer === this) { + return false; + } + layer.changeParent(editor); + return true; + } + destroy() { + var _a2, _b; + if (((_a2 = __privateGet(this, _uiManager3).getActive()) == null ? void 0 : _a2.parent) === this) { + __privateGet(this, _uiManager3).commitOrRemove(); + __privateGet(this, _uiManager3).setActiveEditor(null); + } + if (__privateGet(this, _editorFocusTimeoutId)) { + clearTimeout(__privateGet(this, _editorFocusTimeoutId)); + __privateSet(this, _editorFocusTimeoutId, null); + } + for (const editor of __privateGet(this, _editors).values()) { + (_b = __privateGet(this, _accessibilityManager2)) == null ? void 0 : _b.removePointerInTextLayer(editor.contentDiv); + editor.setParent(null); + editor.isAttachedToDOM = false; + editor.div.remove(); + } + this.div = null; + __privateGet(this, _editors).clear(); + __privateGet(this, _uiManager3).removeLayer(this); + } + render({ + viewport + }) { + this.viewport = viewport; + setLayerDimensions(this.div, viewport); + for (const editor of __privateGet(this, _uiManager3).getEditors(this.pageIndex)) { + this.add(editor); + editor.rebuild(); + } + this.updateMode(); + } + update({ + viewport + }) { + __privateGet(this, _uiManager3).commitOrRemove(); + __privateMethod(this, _cleanup, cleanup_fn).call(this); + const oldRotation = this.viewport.rotation; + const rotation = viewport.rotation; + this.viewport = viewport; + setLayerDimensions(this.div, { + rotation + }); + if (oldRotation !== rotation) { + for (const editor of __privateGet(this, _editors).values()) { + editor.rotate(rotation); + } + } + this.addInkEditorIfNeeded(false); + } + get pageDimensions() { + const { + pageWidth, + pageHeight + } = this.viewport.rawDims; + return [pageWidth, pageHeight]; + } + get scale() { + return __privateGet(this, _uiManager3).viewParameters.realScale; + } +}; +var AnnotationEditorLayer = _AnnotationEditorLayer; +_accessibilityManager2 = new WeakMap(); +_allowClick = new WeakMap(); +_annotationLayer = new WeakMap(); +_clickAC = new WeakMap(); +_editorFocusTimeoutId = new WeakMap(); +_editors = new WeakMap(); +_hadPointerDown = new WeakMap(); +_isCleaningUp = new WeakMap(); +_isDisabling = new WeakMap(); +_textLayer = new WeakMap(); +_textSelectionAC = new WeakMap(); +_uiManager3 = new WeakMap(); +_editorTypes2 = new WeakMap(); +_textLayerPointerDown = new WeakSet(); +textLayerPointerDown_fn = function(event) { + __privateGet(this, _uiManager3).unselectAll(); + const { + target + } = event; + if (target === __privateGet(this, _textLayer).div || target.classList.contains("endOfContent") && __privateGet(this, _textLayer).div.contains(target)) { + const { + isMac + } = util_FeatureTest.platform; + if (event.button !== 0 || event.ctrlKey && isMac) { + return; + } + __privateGet(this, _uiManager3).showAllEditors("highlight", true, true); + __privateGet(this, _textLayer).div.classList.add("free"); + this.toggleDrawing(); + HighlightEditor.startHighlighting(this, __privateGet(this, _uiManager3).direction === "ltr", event); + __privateGet(this, _textLayer).div.addEventListener("pointerup", () => { + __privateGet(this, _textLayer).div.classList.remove("free"); + this.toggleDrawing(true); + }, { + once: true, + signal: __privateGet(this, _uiManager3)._signal + }); + event.preventDefault(); + } +}; +_currentEditorType = new WeakSet(); +currentEditorType_get = function() { + return __privateGet(_AnnotationEditorLayer, _editorTypes2).get(__privateGet(this, _uiManager3).getMode()); +}; +_createNewEditor = new WeakSet(); +createNewEditor_fn = function(params) { + const editorType = __privateGet(this, _currentEditorType, currentEditorType_get); + return editorType ? new editorType.prototype.constructor(params) : null; +}; +_getCenterPoint = new WeakSet(); +getCenterPoint_fn = function() { + const { + x, + y, + width, + height + } = this.div.getBoundingClientRect(); + const tlX = Math.max(0, x); + const tlY = Math.max(0, y); + const brX = Math.min(window.innerWidth, x + width); + const brY = Math.min(window.innerHeight, y + height); + const centerX = (tlX + brX) / 2 - x; + const centerY = (tlY + brY) / 2 - y; + const [offsetX, offsetY] = this.viewport.rotation % 180 === 0 ? [centerX, centerY] : [centerY, centerX]; + return { + offsetX, + offsetY + }; +}; +_cleanup = new WeakSet(); +cleanup_fn = function() { + __privateSet(this, _isCleaningUp, true); + for (const editor of __privateGet(this, _editors).values()) { + if (editor.isEmpty()) { + editor.remove(); + } + } + __privateSet(this, _isCleaningUp, false); +}; +__publicField(AnnotationEditorLayer, "_initialized", false); +__privateAdd(AnnotationEditorLayer, _editorTypes2, new Map([FreeTextEditor, InkEditor, StampEditor, HighlightEditor].map((type) => [type._editorType, type]))); +var _parent2, _id5, _mapping, _toUpdate, _setBox, setBox_fn, _createSVG, createSVG_fn, _createClipPath, createClipPath_fn; +var _DrawLayer = class { + constructor({ + pageIndex + }) { + __privateAdd(this, _createSVG); + __privateAdd(this, _createClipPath); + __privateAdd(this, _parent2, null); + __privateAdd(this, _id5, 0); + __privateAdd(this, _mapping, /* @__PURE__ */ new Map()); + __privateAdd(this, _toUpdate, /* @__PURE__ */ new Map()); + this.pageIndex = pageIndex; + } + setParent(parent) { + if (!__privateGet(this, _parent2)) { + __privateSet(this, _parent2, parent); + return; + } + if (__privateGet(this, _parent2) !== parent) { + if (__privateGet(this, _mapping).size > 0) { + for (const root of __privateGet(this, _mapping).values()) { + root.remove(); + parent.append(root); + } + } + __privateSet(this, _parent2, parent); + } + } + static get _svgFactory() { + return shadow(this, "_svgFactory", new DOMSVGFactory()); + } + highlight(outlines, color, opacity, isPathUpdatable = false) { + const id = __privateWrapper(this, _id5)._++; + const root = __privateMethod(this, _createSVG, createSVG_fn).call(this, outlines.box); + root.classList.add("highlight"); + if (outlines.free) { + root.classList.add("free"); + } + const defs = _DrawLayer._svgFactory.createElement("defs"); + root.append(defs); + const path = _DrawLayer._svgFactory.createElement("path"); + defs.append(path); + const pathId = `path_p${this.pageIndex}_${id}`; + path.setAttribute("id", pathId); + path.setAttribute("d", outlines.toSVGPath()); + if (isPathUpdatable) { + __privateGet(this, _toUpdate).set(id, path); + } + const clipPathId = __privateMethod(this, _createClipPath, createClipPath_fn).call(this, defs, pathId); + const use = _DrawLayer._svgFactory.createElement("use"); + root.append(use); + root.setAttribute("fill", color); + root.setAttribute("fill-opacity", opacity); + use.setAttribute("href", `#${pathId}`); + __privateGet(this, _mapping).set(id, root); + return { + id, + clipPathId: `url(#${clipPathId})` + }; + } + highlightOutline(outlines) { + const id = __privateWrapper(this, _id5)._++; + const root = __privateMethod(this, _createSVG, createSVG_fn).call(this, outlines.box); + root.classList.add("highlightOutline"); + const defs = _DrawLayer._svgFactory.createElement("defs"); + root.append(defs); + const path = _DrawLayer._svgFactory.createElement("path"); + defs.append(path); + const pathId = `path_p${this.pageIndex}_${id}`; + path.setAttribute("id", pathId); + path.setAttribute("d", outlines.toSVGPath()); + path.setAttribute("vector-effect", "non-scaling-stroke"); + let maskId; + if (outlines.free) { + root.classList.add("free"); + const mask = _DrawLayer._svgFactory.createElement("mask"); + defs.append(mask); + maskId = `mask_p${this.pageIndex}_${id}`; + mask.setAttribute("id", maskId); + mask.setAttribute("maskUnits", "objectBoundingBox"); + const rect = _DrawLayer._svgFactory.createElement("rect"); + mask.append(rect); + rect.setAttribute("width", "1"); + rect.setAttribute("height", "1"); + rect.setAttribute("fill", "white"); + const use = _DrawLayer._svgFactory.createElement("use"); + mask.append(use); + use.setAttribute("href", `#${pathId}`); + use.setAttribute("stroke", "none"); + use.setAttribute("fill", "black"); + use.setAttribute("fill-rule", "nonzero"); + use.classList.add("mask"); + } + const use1 = _DrawLayer._svgFactory.createElement("use"); + root.append(use1); + use1.setAttribute("href", `#${pathId}`); + if (maskId) { + use1.setAttribute("mask", `url(#${maskId})`); + } + const use2 = use1.cloneNode(); + root.append(use2); + use1.classList.add("mainOutline"); + use2.classList.add("secondaryOutline"); + __privateGet(this, _mapping).set(id, root); + return id; + } + finalizeLine(id, line) { + const path = __privateGet(this, _toUpdate).get(id); + __privateGet(this, _toUpdate).delete(id); + this.updateBox(id, line.box); + path.setAttribute("d", line.toSVGPath()); + } + updateLine(id, line) { + const root = __privateGet(this, _mapping).get(id); + const defs = root.firstChild; + const path = defs.firstChild; + path.setAttribute("d", line.toSVGPath()); + } + removeFreeHighlight(id) { + this.remove(id); + __privateGet(this, _toUpdate).delete(id); + } + updatePath(id, line) { + __privateGet(this, _toUpdate).get(id).setAttribute("d", line.toSVGPath()); + } + updateBox(id, box) { + var _a2; + __privateMethod(_a2 = _DrawLayer, _setBox, setBox_fn).call(_a2, __privateGet(this, _mapping).get(id), box); + } + show(id, visible) { + __privateGet(this, _mapping).get(id).classList.toggle("hidden", !visible); + } + rotate(id, angle) { + __privateGet(this, _mapping).get(id).setAttribute("data-main-rotation", angle); + } + changeColor(id, color) { + __privateGet(this, _mapping).get(id).setAttribute("fill", color); + } + changeOpacity(id, opacity) { + __privateGet(this, _mapping).get(id).setAttribute("fill-opacity", opacity); + } + addClass(id, className) { + __privateGet(this, _mapping).get(id).classList.add(className); + } + removeClass(id, className) { + __privateGet(this, _mapping).get(id).classList.remove(className); + } + remove(id) { + if (__privateGet(this, _parent2) === null) { + return; + } + __privateGet(this, _mapping).get(id).remove(); + __privateGet(this, _mapping).delete(id); + } + destroy() { + __privateSet(this, _parent2, null); + for (const root of __privateGet(this, _mapping).values()) { + root.remove(); + } + __privateGet(this, _mapping).clear(); + } +}; +var DrawLayer = _DrawLayer; +_parent2 = new WeakMap(); +_id5 = new WeakMap(); +_mapping = new WeakMap(); +_toUpdate = new WeakMap(); +_setBox = new WeakSet(); +setBox_fn = function(element2, { + x = 0, + y = 0, + width = 1, + height = 1 +} = {}) { + const { + style + } = element2; + style.top = `${100 * y}%`; + style.left = `${100 * x}%`; + style.width = `${100 * width}%`; + style.height = `${100 * height}%`; +}; +_createSVG = new WeakSet(); +createSVG_fn = function(box) { + var _a2; + const svg = _DrawLayer._svgFactory.create(1, 1, true); + __privateGet(this, _parent2).append(svg); + svg.setAttribute("aria-hidden", true); + __privateMethod(_a2 = _DrawLayer, _setBox, setBox_fn).call(_a2, svg, box); + return svg; +}; +_createClipPath = new WeakSet(); +createClipPath_fn = function(defs, pathId) { + const clipPath = _DrawLayer._svgFactory.createElement("clipPath"); + defs.append(clipPath); + const clipPathId = `clip_${pathId}`; + clipPath.setAttribute("id", clipPathId); + clipPath.setAttribute("clipPathUnits", "objectBoundingBox"); + const clipPathUse = _DrawLayer._svgFactory.createElement("use"); + clipPath.append(clipPathUse); + clipPathUse.setAttribute("href", `#${pathId}`); + clipPathUse.classList.add("clip"); + return clipPathId; +}; +__privateAdd(DrawLayer, _setBox); +var __webpack_exports__AbortException = __webpack_exports__.AbortException; +var __webpack_exports__AnnotationEditorLayer = __webpack_exports__.AnnotationEditorLayer; +var __webpack_exports__AnnotationEditorParamsType = __webpack_exports__.AnnotationEditorParamsType; +var __webpack_exports__AnnotationEditorType = __webpack_exports__.AnnotationEditorType; +var __webpack_exports__AnnotationEditorUIManager = __webpack_exports__.AnnotationEditorUIManager; +var __webpack_exports__AnnotationLayer = __webpack_exports__.AnnotationLayer; +var __webpack_exports__AnnotationMode = __webpack_exports__.AnnotationMode; +var __webpack_exports__CMapCompressionType = __webpack_exports__.CMapCompressionType; +var __webpack_exports__ColorPicker = __webpack_exports__.ColorPicker; +var __webpack_exports__DOMSVGFactory = __webpack_exports__.DOMSVGFactory; +var __webpack_exports__DrawLayer = __webpack_exports__.DrawLayer; +var __webpack_exports__FeatureTest = __webpack_exports__.FeatureTest; +var __webpack_exports__GlobalWorkerOptions = __webpack_exports__.GlobalWorkerOptions; +var __webpack_exports__ImageKind = __webpack_exports__.ImageKind; +var __webpack_exports__InvalidPDFException = __webpack_exports__.InvalidPDFException; +var __webpack_exports__MissingPDFException = __webpack_exports__.MissingPDFException; +var __webpack_exports__OPS = __webpack_exports__.OPS; +var __webpack_exports__PDFDataRangeTransport = __webpack_exports__.PDFDataRangeTransport; +var __webpack_exports__PDFDateString = __webpack_exports__.PDFDateString; +var __webpack_exports__PDFWorker = __webpack_exports__.PDFWorker; +var __webpack_exports__PasswordResponses = __webpack_exports__.PasswordResponses; +var __webpack_exports__PermissionFlag = __webpack_exports__.PermissionFlag; +var __webpack_exports__PixelsPerInch = __webpack_exports__.PixelsPerInch; +var __webpack_exports__RenderingCancelledException = __webpack_exports__.RenderingCancelledException; +var __webpack_exports__TextLayer = __webpack_exports__.TextLayer; +var __webpack_exports__UnexpectedResponseException = __webpack_exports__.UnexpectedResponseException; +var __webpack_exports__Util = __webpack_exports__.Util; +var __webpack_exports__VerbosityLevel = __webpack_exports__.VerbosityLevel; +var __webpack_exports__XfaLayer = __webpack_exports__.XfaLayer; +var __webpack_exports__build = __webpack_exports__.build; +var __webpack_exports__createValidAbsoluteUrl = __webpack_exports__.createValidAbsoluteUrl; +var __webpack_exports__fetchData = __webpack_exports__.fetchData; +var __webpack_exports__getDocument = __webpack_exports__.getDocument; +var __webpack_exports__getFilenameFromUrl = __webpack_exports__.getFilenameFromUrl; +var __webpack_exports__getPdfFilenameFromUrl = __webpack_exports__.getPdfFilenameFromUrl; +var __webpack_exports__getXfaPageViewport = __webpack_exports__.getXfaPageViewport; +var __webpack_exports__isDataScheme = __webpack_exports__.isDataScheme; +var __webpack_exports__isPdfFile = __webpack_exports__.isPdfFile; +var __webpack_exports__noContextMenu = __webpack_exports__.noContextMenu; +var __webpack_exports__normalizeUnicode = __webpack_exports__.normalizeUnicode; +var __webpack_exports__setLayerDimensions = __webpack_exports__.setLayerDimensions; +var __webpack_exports__shadow = __webpack_exports__.shadow; +var __webpack_exports__version = __webpack_exports__.version; + +// inline-worker:__inline-worker +function inlineWorker(scriptText) { + let blob = new Blob([scriptText], { type: "text/javascript" }); + let url = URL.createObjectURL(blob); + let worker = new Worker(url); + URL.revokeObjectURL(url); + return worker; +} + +// src/processors/pdf.worker.js +function Worker2() { + return inlineWorker('var Rn=Object.defineProperty;var xu=Object.getOwnPropertyDescriptor;var mu=Object.getOwnPropertyNames;var pu=Object.prototype.hasOwnProperty;var wu=(e,A,t)=>A in e?Rn(e,A,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[A]=t;var yu=(e,A)=>{for(var t in A)Rn(e,t,{get:A[t],enumerable:!0})},bu=(e,A,t,i)=>{if(A&&typeof A=="object"||typeof A=="function")for(let s of mu(A))!pu.call(e,s)&&s!==t&&Rn(e,s,{get:()=>A[s],enumerable:!(i=xu(A,s))||i.enumerable});return e};var Du=e=>bu(Rn({},"__esModule",{value:!0}),e);var et=(e,A,t)=>(wu(e,typeof A!="symbol"?A+"":A,t),t),lo=(e,A,t)=>{if(!A.has(e))throw TypeError("Cannot "+t)};var ne=(e,A,t)=>(lo(e,A,"read from private field"),t?t.call(e):A.get(e)),HA=(e,A,t)=>{if(A.has(e))throw TypeError("Cannot add the same private member more than once");A instanceof WeakSet?A.add(e):A.set(e,t)},_s=(e,A,t,i)=>(lo(e,A,"write to private field"),i?i.call(e,t):A.set(e,t),t);var mA=(e,A,t)=>(lo(e,A,"access private method"),t);var Dx={};yu(Dx,{WorkerMessageHandler:()=>bx});module.exports=Du(Dx);var Ba={};Ba.d=(e,A)=>{for(var t in A)Ba.o(A,t)&&!Ba.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:A[t]})};Ba.o=(e,A)=>Object.prototype.hasOwnProperty.call(e,A);var qE=globalThis.pdfjsWorker={};Ba.d(qE,{WorkerMessageHandler:()=>H0});var ku=typeof process=="object"&&process+""=="[object process]"&&!process.versions.nw&&!(process.versions.electron&&process.type&&process.type!=="browser"),Wt=[1,0,0,1,0,0],E0=[.001,0,0,.001,0,0],Su=1e7,Qi=1.35,Cr=.35,R1=Cr/Qi,st={ANY:1,DISPLAY:2,PRINT:4,SAVE:8,ANNOTATIONS_FORMS:16,ANNOTATIONS_STORAGE:32,ANNOTATIONS_DISABLE:64,IS_EDITING:128,OPLIST:256};var TE="pdfjs_internal_editor_",bi={DISABLE:-1,NONE:0,FREETEXT:3,HIGHLIGHT:9,STAMP:13,INK:15};var N1={PRINT:4,MODIFY_CONTENTS:8,COPY:16,MODIFY_ANNOTATIONS:32,FILL_INTERACTIVE_FORMS:256,COPY_FOR_ACCESSIBILITY:512,ASSEMBLE:1024,PRINT_HIGH_QUALITY:2048},PE={FILL:0,STROKE:1,FILL_STROKE:2,INVISIBLE:3,FILL_ADD_TO_PATH:4,STROKE_ADD_TO_PATH:5,FILL_STROKE_ADD_TO_PATH:6,ADD_TO_PATH:7,FILL_STROKE_MASK:3,ADD_TO_PATH_FLAG:4},Ke={GRAYSCALE_1BPP:1,RGB_24BPP:2,RGBA_32BPP:3},Le={TEXT:1,LINK:2,FREETEXT:3,LINE:4,SQUARE:5,CIRCLE:6,POLYGON:7,POLYLINE:8,HIGHLIGHT:9,UNDERLINE:10,SQUIGGLY:11,STRIKEOUT:12,STAMP:13,CARET:14,INK:15,POPUP:16,FILEATTACHMENT:17,SOUND:18,MOVIE:19,WIDGET:20,SCREEN:21,PRINTERMARK:22,TRAPNET:23,WATERMARK:24,THREED:25,REDACT:26},Ho={GROUP:"Group",REPLY:"R"},it={INVISIBLE:1,HIDDEN:2,PRINT:4,NOZOOM:8,NOROTATE:16,NOVIEW:32,READONLY:64,LOCKED:128,TOGGLENOVIEW:256,LOCKEDCONTENTS:512},Te={READONLY:1,REQUIRED:2,NOEXPORT:4,MULTILINE:4096,PASSWORD:8192,NOTOGGLETOOFF:16384,RADIO:32768,PUSHBUTTON:65536,COMBO:131072,EDIT:262144,SORT:524288,FILESELECT:1048576,MULTISELECT:2097152,DONOTSPELLCHECK:4194304,DONOTSCROLL:8388608,COMB:16777216,RICHTEXT:33554432,RADIOSINUNISON:33554432,COMMITONSELCHANGE:67108864},Y0={SOLID:1,DASHED:2,BEVELED:3,INSET:4,UNDERLINE:5},WE={E:"Mouse Enter",X:"Mouse Exit",D:"Mouse Down",U:"Mouse Up",Fo:"Focus",Bl:"Blur",PO:"PageOpen",PC:"PageClose",PV:"PageVisible",PI:"PageInvisible",K:"Keystroke",F:"Format",V:"Validate",C:"Calculate"},Fu={WC:"WillClose",WS:"WillSave",DS:"DidSave",WP:"WillPrint",DP:"DidPrint"},Ru={O:"PageOpen",C:"PageClose"},Da={ERRORS:0,WARNINGS:1,INFOS:5},Br={NONE:0,BINARY:1},y={dependency:1,setLineWidth:2,setLineCap:3,setLineJoin:4,setMiterLimit:5,setDash:6,setRenderingIntent:7,setFlatness:8,setGState:9,save:10,restore:11,transform:12,moveTo:13,lineTo:14,curveTo:15,curveTo2:16,curveTo3:17,closePath:18,rectangle:19,stroke:20,closeStroke:21,fill:22,eoFill:23,fillStroke:24,eoFillStroke:25,closeFillStroke:26,closeEOFillStroke:27,endPath:28,clip:29,eoClip:30,beginText:31,endText:32,setCharSpacing:33,setWordSpacing:34,setHScale:35,setLeading:36,setFont:37,setTextRenderingMode:38,setTextRise:39,moveText:40,setLeadingMoveText:41,setTextMatrix:42,nextLine:43,showText:44,showSpacedText:45,nextLineShowText:46,nextLineSetSpacingShowText:47,setCharWidth:48,setCharWidthAndBounds:49,setStrokeColorSpace:50,setFillColorSpace:51,setStrokeColor:52,setStrokeColorN:53,setFillColor:54,setFillColorN:55,setStrokeGray:56,setFillGray:57,setStrokeRGBColor:58,setFillRGBColor:59,setStrokeCMYKColor:60,setFillCMYKColor:61,shadingFill:62,beginInlineImage:63,beginImageData:64,endInlineImage:65,paintXObject:66,markPoint:67,markPointProps:68,beginMarkedContent:69,beginMarkedContentProps:70,endMarkedContent:71,beginCompat:72,endCompat:73,paintFormXObjectBegin:74,paintFormXObjectEnd:75,beginGroup:76,endGroup:77,beginAnnotation:80,endAnnotation:81,paintImageMaskXObject:83,paintImageMaskXObjectGroup:84,paintImageXObject:85,paintInlineImageXObject:86,paintInlineImageXObjectGroup:87,paintImageXObjectRepeat:88,paintImageMaskXObjectRepeat:89,paintSolidColorImageMask:90,constructPath:91,setStrokeTransparent:92,setFillTransparent:93},G1={NEED_PASSWORD:1,INCORRECT_PASSWORD:2},Xg=Da.WARNINGS;function Nu(e){Number.isInteger(e)&&(Xg=e)}function Gu(){return Xg}function PA(e){Xg>=Da.INFOS&&console.log(`Info: ${e}`)}function k(e){Xg>=Da.WARNINGS&&console.log(`Warning: ${e}`)}function OA(e){throw new Error(e)}function gt(e,A){e||OA(A)}function Uu(e){switch(e==null?void 0:e.protocol){case"http:":case"https:":case"ftp:":case"mailto:":case"tel:":return!0;default:return!1}}function Qr(e,A=null,t=null){if(!e)return null;try{if(t&&typeof e=="string"){if(t.addDefaultProtocol&&e.startsWith("www.")){let s=e.match(/\\./g);(s==null?void 0:s.length)>=2&&(e=`http://${e}`)}if(t.tryConvertEncoding)try{e=ka(e)}catch(s){}}let i=A?new URL(e,A):new URL(e);if(Uu(i))return i}catch(i){}return null}function nA(e,A,t,i=!1){return Object.defineProperty(e,A,{value:t,enumerable:!i,configurable:!0,writable:!1}),t}var At=function(){function A(t,i){this.message=t,this.name=i}return A.prototype=new Error,A.constructor=A,A}(),bs=class extends At{constructor(A,t){super(A,"PasswordException"),this.code=t}},Ds=class extends At{constructor(A,t){super(A,"UnknownErrorException"),this.details=t}},ks=class extends At{constructor(A){super(A,"InvalidPDFException")}},Er=class extends At{constructor(A){super(A,"MissingPDFException")}},fr=class extends At{constructor(A,t){super(A,"UnexpectedResponseException"),this.status=t}},v=class extends At{constructor(A){super(A,"FormatError")}},ve=class extends At{constructor(A){super(A,"AbortException")}};function Qt(e){(typeof e!="object"||(e==null?void 0:e.length)===void 0)&&OA("Invalid argument for bytesToString");let A=e.length,t=8192;if(A>24&255,e>>16&255,e>>8&255,e&255)}function OE(e){return Object.keys(e).length}function Mu(){let e=new Uint8Array(4);return e[0]=1,new Uint32Array(e.buffer,0,1)[0]===1}function Lu(){try{return new Function(""),!0}catch(e){return!1}}var Ot=class{static get isLittleEndian(){return nA(this,"isLittleEndian",Mu())}static get isEvalSupported(){return nA(this,"isEvalSupported",Lu())}static get isOffscreenCanvasSupported(){return nA(this,"isOffscreenCanvasSupported",typeof OffscreenCanvas!="undefined")}static get platform(){return typeof navigator!="undefined"&&typeof(navigator==null?void 0:navigator.platform)=="string"?nA(this,"platform",{isMac:navigator.platform.includes("Mac")}):nA(this,"platform",{isMac:!1})}static get isCSSRoundSupported(){var A,t;return nA(this,"isCSSRoundSupported",(t=(A=globalThis.CSS)==null?void 0:A.supports)==null?void 0:t.call(A,"width: round(1.5px, 1px)"))}},ho=Array.from(Array(256).keys(),e=>e.toString(16).padStart(2,"0")),Es,zn,nn,Jo,Ce=class{static makeHexColor(A,t,i){return`#${ho[A]}${ho[t]}${ho[i]}`}static scaleMinMax(A,t){let i;A[0]?(A[0]<0&&(i=t[0],t[0]=t[2],t[2]=i),t[0]*=A[0],t[2]*=A[0],A[3]<0&&(i=t[1],t[1]=t[3],t[3]=i),t[1]*=A[3],t[3]*=A[3]):(i=t[0],t[0]=t[1],t[1]=i,i=t[2],t[2]=t[3],t[3]=i,A[1]<0&&(i=t[1],t[1]=t[3],t[3]=i),t[1]*=A[1],t[3]*=A[1],A[2]<0&&(i=t[0],t[0]=t[2],t[2]=i),t[0]*=A[2],t[2]*=A[2]),t[0]+=A[4],t[1]+=A[5],t[2]+=A[4],t[3]+=A[5]}static transform(A,t){return[A[0]*t[0]+A[2]*t[1],A[1]*t[0]+A[3]*t[1],A[0]*t[2]+A[2]*t[3],A[1]*t[2]+A[3]*t[3],A[0]*t[4]+A[2]*t[5]+A[4],A[1]*t[4]+A[3]*t[5]+A[5]]}static applyTransform(A,t){let i=A[0]*t[0]+A[1]*t[2]+t[4],s=A[0]*t[1]+A[1]*t[3]+t[5];return[i,s]}static applyInverseTransform(A,t){let i=t[0]*t[3]-t[1]*t[2],s=(A[0]*t[3]-A[1]*t[2]+t[2]*t[5]-t[4]*t[3])/i,a=(-A[0]*t[1]+A[1]*t[0]+t[4]*t[1]-t[5]*t[0])/i;return[s,a]}static getAxialAlignedBoundingBox(A,t){let i=this.applyTransform(A,t),s=this.applyTransform(A.slice(2,4),t),a=this.applyTransform([A[0],A[3]],t),n=this.applyTransform([A[2],A[1]],t);return[Math.min(i[0],s[0],a[0],n[0]),Math.min(i[1],s[1],a[1],n[1]),Math.max(i[0],s[0],a[0],n[0]),Math.max(i[1],s[1],a[1],n[1])]}static inverseTransform(A){let t=A[0]*A[3]-A[1]*A[2];return[A[3]/t,-A[1]/t,-A[2]/t,A[0]/t,(A[2]*A[5]-A[4]*A[3])/t,(A[4]*A[1]-A[5]*A[0])/t]}static singularValueDecompose2dScale(A){let t=[A[0],A[2],A[1],A[3]],i=A[0]*t[0]+A[1]*t[2],s=A[0]*t[1]+A[1]*t[3],a=A[2]*t[0]+A[3]*t[2],n=A[2]*t[1]+A[3]*t[3],r=(i+n)/2,g=Math.sqrt((i+n)**2-4*(i*n-a*s))/2,o=r+g||1,I=r-g||1;return[Math.sqrt(o),Math.sqrt(I)]}static normalizeRect(A){let t=A.slice(0);return A[0]>A[2]&&(t[0]=A[2],t[2]=A[0]),A[1]>A[3]&&(t[1]=A[3],t[3]=A[1]),t}static intersect(A,t){let i=Math.max(Math.min(A[0],A[2]),Math.min(t[0],t[2])),s=Math.min(Math.max(A[0],A[2]),Math.max(t[0],t[2]));if(i>s)return null;let a=Math.max(Math.min(A[1],A[3]),Math.min(t[1],t[3])),n=Math.min(Math.max(A[1],A[3]),Math.max(t[1],t[3]));return a>n?null:[i,a,s,n]}static bezierBoundingBox(A,t,i,s,a,n,r,g,o){return o?(o[0]=Math.min(o[0],A,r),o[1]=Math.min(o[1],t,g),o[2]=Math.max(o[2],A,r),o[3]=Math.max(o[3],t,g)):o=[Math.min(A,r),Math.min(t,g),Math.max(A,r),Math.max(t,g)],mA(this,nn,Jo).call(this,A,i,a,r,t,s,n,g,3*(-A+3*(i-a)+r),6*(A-2*i+a),3*(i-A),o),mA(this,nn,Jo).call(this,A,i,a,r,t,s,n,g,3*(-t+3*(s-n)+g),6*(t-2*s+n),3*(s-t),o),o}};Es=new WeakSet,zn=function(A,t,i,s,a,n,r,g,o,I){if(o<=0||o>=1)return;let c=1-o,l=o*o,h=l*o,C=c*(c*(c*A+3*o*t)+3*l*i)+h*s,B=c*(c*(c*a+3*o*n)+3*l*r)+h*g;I[0]=Math.min(I[0],C),I[1]=Math.min(I[1],B),I[2]=Math.max(I[2],C),I[3]=Math.max(I[3],B)},nn=new WeakSet,Jo=function(A,t,i,s,a,n,r,g,o,I,c,l){if(Math.abs(o)<1e-12){Math.abs(I)>=1e-12&&mA(this,Es,zn).call(this,A,t,i,s,a,n,r,g,-c/I,l);return}let h=I**2-4*c*o;if(h<0)return;let C=Math.sqrt(h),B=2*o;mA(this,Es,zn).call(this,A,t,i,s,a,n,r,g,(-I+C)/B,l),mA(this,Es,zn).call(this,A,t,i,s,a,n,r,g,(-I-C)/B,l)},HA(Ce,Es),HA(Ce,nn);var Hu=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,728,711,710,729,733,731,730,732,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8226,8224,8225,8230,8212,8211,402,8260,8249,8250,8722,8240,8222,8220,8221,8216,8217,8218,8482,64257,64258,321,338,352,376,381,305,322,339,353,382,0,8364];function jA(e){if(e[0]>="\\xEF"){let t;if(e[0]==="\\xFE"&&e[1]==="\\xFF"?(t="utf-16be",e.length%2===1&&(e=e.slice(0,-1))):e[0]==="\\xFF"&&e[1]==="\\xFE"?(t="utf-16le",e.length%2===1&&(e=e.slice(0,-1))):e[0]==="\\xEF"&&e[1]==="\\xBB"&&e[2]==="\\xBF"&&(t="utf-8"),t)try{let i=new TextDecoder(t,{fatal:!0}),s=Pe(e),a=i.decode(s);return a.includes("\\x1B")?a.replaceAll(/\\x1b[^\\x1b]*(?:\\x1b|$)/g,""):a}catch(i){k(`stringToPDFString: "${i}".`)}}let A=[];for(let t=0,i=e.length;tt?t.normalize("NFKC"):U1.get(i))}var Yu="pdfjs_internal_id_",_e={BEZIER_CURVE_TO:0,MOVE_TO:1,LINE_TO:2,QUADRATIC_CURVE_TO:3,RESTORE:4,SAVE:5,SCALE:6,TRANSFORM:7,TRANSLATE:8},Ku=Symbol("CIRCULAR_REF"),Ge=Symbol("EOF"),$n=Object.create(null),Ar=Object.create(null),W0=Object.create(null);function vu(){$n=Object.create(null),Ar=Object.create(null),W0=Object.create(null)}var M=class{constructor(A){this.name=A}static get(A){return Ar[A]||(Ar[A]=new M(A))}},fe=class{constructor(A){this.cmd=A}static get(A){return $n[A]||($n[A]=new fe(A))}},ZE=function(){return ZE},F=class{constructor(A=null){this._map=Object.create(null),this.xref=A,this.objId=null,this.suppressEncryption=!1,this.__nonSerializable__=ZE}assignXref(A){this.xref=A}get size(){return Object.keys(this._map).length}get(A,t,i){let s=this._map[A];return s===void 0&&t!==void 0&&(s=this._map[t],s===void 0&&i!==void 0&&(s=this._map[i])),s instanceof oA&&this.xref?this.xref.fetch(s,this.suppressEncryption):s}async getAsync(A,t,i){let s=this._map[A];return s===void 0&&t!==void 0&&(s=this._map[t],s===void 0&&i!==void 0&&(s=this._map[i])),s instanceof oA&&this.xref?this.xref.fetchAsync(s,this.suppressEncryption):s}getArray(A,t,i){let s=this._map[A];if(s===void 0&&t!==void 0&&(s=this._map[t],s===void 0&&i!==void 0&&(s=this._map[i])),s instanceof oA&&this.xref&&(s=this.xref.fetch(s,this.suppressEncryption)),Array.isArray(s)){s=s.slice();for(let a=0,n=s.length;a{OA("Should not call `set` on the empty dictionary.")},nA(this,"empty",A)}static merge({xref:A,dictArray:t,mergeSubDicts:i=!1}){let s=new F(A),a=new Map;for(let n of t)if(n instanceof F)for(let[r,g]of Object.entries(n._map)){let o=a.get(r);if(o===void 0)o=[],a.set(r,o);else if(!i||!(g instanceof F))continue;o.push(g)}for(let[n,r]of a){if(r.length===1||!(r[0]instanceof F)){s._map[n]=r[0];continue}let g=new F(A);for(let o of r)for(let[I,c]of Object.entries(o._map))g._map[I]===void 0&&(g._map[I]=c);g.size>0&&(s._map[n]=g)}return a.clear(),s.size>0?s:F.empty}clone(){let A=new F(this.xref);for(let t of this.getKeys())A.set(t,this.getRaw(t));return A}delete(A){delete this._map[A]}},oA=class{constructor(A,t){this.num=A,this.gen=t}toString(){return this.gen===0?`${this.num}R`:`${this.num}R${this.gen}`}static fromString(A){let t=W0[A];if(t)return t;let i=/^(\\d+)R(\\d*)$/.exec(A);return!i||i[1]==="0"?null:W0[A]=new oA(parseInt(i[1]),i[2]?parseInt(i[2]):0)}static get(A,t){let i=t===0?`${A}R`:`${A}R${t}`;return W0[i]||(W0[i]=new oA(A,t))}},be=class{constructor(A=null){this._set=new Set(A==null?void 0:A._set)}has(A){return this._set.has(A.toString())}put(A){this._set.add(A.toString())}remove(A){this._set.delete(A.toString())}[Symbol.iterator](){return this._set.values()}clear(){this._set.clear()}},mt=class{constructor(){this._map=new Map}get size(){return this._map.size}get(A){return this._map.get(A.toString())}has(A){return this._map.has(A.toString())}put(A,t){this._map.set(A.toString(),t)}putAlias(A,t){this._map.set(A.toString(),this.get(t))}[Symbol.iterator](){return this._map.values()}clear(){this._map.clear()}*items(){for(let[A,t]of this._map)yield[oA.fromString(A),t]}};function ye(e,A){return e instanceof M&&(A===void 0||e.name===A)}function Ne(e,A){return e instanceof fe&&(A===void 0||e.cmd===A)}function jE(e,A){return e instanceof F&&(A===void 0||ye(e.get("Type"),A))}function ur(e,A){return e.num===A.num&&e.gen===A.gen}var KA=class{get length(){OA("Abstract getter `length` accessed")}get isEmpty(){OA("Abstract getter `isEmpty` accessed")}get isDataLoaded(){return nA(this,"isDataLoaded",!0)}getByte(){OA("Abstract method `getByte` called")}getBytes(A){OA("Abstract method `getBytes` called")}async getImageData(A,t){return this.getBytes(A,t)}async asyncGetBytes(){OA("Abstract method `asyncGetBytes` called")}get isAsync(){return!1}get canAsyncDecodeImageFromBuffer(){return!1}peekByte(){let A=this.getByte();return A!==-1&&this.pos--,A}peekBytes(A){let t=this.getBytes(A);return this.pos-=t.length,t}getUint16(){let A=this.getByte(),t=this.getByte();return A===-1||t===-1?-1:(A<<8)+t}getInt32(){let A=this.getByte(),t=this.getByte(),i=this.getByte(),s=this.getByte();return(A<<24)+(t<<16)+(i<<8)+s}getByteRange(A,t){OA("Abstract method `getByteRange` called")}getString(A){return Qt(this.getBytes(A))}skip(A){this.pos+=A||1}reset(){OA("Abstract method `reset` called")}moveStart(){OA("Abstract method `moveStart` called")}makeSubStream(A,t,i=null){OA("Abstract method `makeSubStream` called")}getBaseStreams(){return null}},XE=/^[1-9]\\.\\d$/;function he(e){let A;return function(){return e&&(A=Object.create(null),e(A),e=null),A}}var ge=class extends At{constructor(A,t){super(`Missing data [${A}, ${t})`,"MissingDataException"),this.begin=A,this.end=t}},Sa=class extends At{constructor(A){super(A,"ParserEOFException")}},ti=class extends At{constructor(A){super(A,"XRefEntryException")}},Pi=class extends At{constructor(A){super(A,"XRefParseException")}};function VE(e){let A=e.length;if(A===0)return new Uint8Array(0);if(A===1)return new Uint8Array(e[0]);let t=0;for(let a=0;a0,"The number should be a positive integer.");let t=[],i;for(;e>=1e3;)e-=1e3,t.push("M");i=e/100|0,e%=100,t.push(Bo[i]),i=e/10|0,e%=10,t.push(Bo[10+i]),t.push(Bo[20+e]);let s=t.join("");return A?s.toLowerCase():s}function g1(e){return e<=0?0:Math.ceil(Math.log2(e))}function Di(e,A){return e[A]<<24>>24}function we(e,A){return e[A]<<8|e[A+1]}function le(e,A){return(e[A]<<24|e[A+1]<<16|e[A+2]<<8|e[A+3])>>>0}function pt(e){return e===32||e===9||e===13||e===10}function Tu(e,A){return Array.isArray(e)&&(A===null||e.length===A)&&e.every(t=>typeof t=="boolean")}function wt(e,A){return Array.isArray(e)?(A===null||e.length===A)&&e.every(t=>typeof t=="number"):ArrayBuffer.isView(e)&&(e.length===0||typeof e[0]=="number")&&(A===null||e.length===A)}function Ki(e,A){return wt(e,6)?e:A}function Ko(e,A){return wt(e,4)?e:A}function Ei(e,A){return wt(e,4)?Ce.normalizeRect(e):A}function _E(e){let A=/(.+)\\[(\\d+)\\]$/;return e.split(".").map(t=>{let i=t.match(A);return i?{name:i[1],pos:parseInt(i[2],10)}:{name:t,pos:0}})}function o1(e){let A=[],t=0;for(let i=0,s=e.length;i126||a===35||a===40||a===41||a===60||a===62||a===91||a===93||a===123||a===125||a===47||a===37)&&(tA===`\n`?"\\\\n":A==="\\r"?"\\\\r":`\\\\${A}`)}function dr(e,A,t,i){if(!e)return;let s=null;if(e instanceof oA){if(i.has(e))return;s=e,i.put(s),e=A.fetch(e)}if(Array.isArray(e))for(let a of e)dr(a,A,t,i);else if(e instanceof F){if(ye(e.get("S"),"JavaScript")){let a=e.get("JS"),n;a instanceof KA?n=a.getString():typeof a=="string"&&(n=a),n&&(n=jA(n).replaceAll("\\0","")),n&&t.push(n)}dr(e.getRaw("Next"),A,t,i)}s&&i.remove(s)}function Vg(e,A,t){let i=Object.create(null),s=Mt({dict:A,key:"AA",stopWhenFound:!1});if(s)for(let a=s.length-1;a>=0;a--){let n=s[a];if(n instanceof F)for(let r of n.getKeys()){let g=t[r];if(!g)continue;let o=n.getRaw(r),I=new be,c=[];dr(o,e,c,I),c.length>0&&(i[g]=c)}}if(A.has("A")){let a=A.get("A"),n=new be,r=[];dr(a,e,r,n),r.length>0&&(i.Action=r)}return OE(i)>0?i:null}var Pu={60:"<",62:">",38:"&",34:""",39:"'"};function*Wu(e){for(let A=0,t=e.length;A55295&&(i<57344||i>65533)&&A++,yield i}}function ls(e){let A=[],t=0;for(let i=0,s=e.length;i55295&&(a<57344||a>65533)&&i++,t=i+1}return A.length===0?e:(t: ${e}.`),!1;return!0}function Ou(e){let A="14",t="400",i=new Set(["100","200","300","400","500","600","700","800","900","1000","normal","bold","bolder","lighter"]),{fontFamily:s,fontWeight:a,italicAngle:n}=e;if(!vo(s,!0))return!1;let r=a?a.toString():"";e.fontWeight=i.has(r)?r:t;let g=parseFloat(n);return e.italicAngle=isNaN(g)||g<-90||g>90?A:n.toString(),!0}function zE(e){let A=["app.launchURL","window.open","xfa.host.gotoURL"],i=new RegExp("^\\\\s*("+A.join("|").replaceAll(".","\\\\.")+`)\\\\((?:\'|")([^\'"]*)(?:\'|")(?:,\\\\s*(\\\\w+)\\\\)|\\\\))`,"i").exec(e);if(i!=null&&i[2]){let s=i[2],a=!1;return i[3]==="true"&&i[1]==="app.launchURL"&&(a=!0),{url:s,newWindow:a}}return null}function Ae(e){if(Number.isInteger(e))return e.toString();let A=Math.round(e*100);return A%100===0?(A/100).toString():A%10===0?e.toFixed(1):e.toFixed(2)}function $E(e){if(!e)return null;let A=new Map;for(let[t,i]of e){if(!t.startsWith(TE))continue;let s=A.get(i.pageIndex);s||(s=[],A.set(i.pageIndex,s)),s.push(i)}return A.size>0?A:null}function ii(e){return Zu(e)?e:Af(e,!0)}function Zu(e){return/^[\\x00-\\x7F]*$/.test(e)}function ju(e){let A=[];for(let t=0,i=e.length;t>8&255).toString(16).padStart(2,"0"),(s&255).toString(16).padStart(2,"0"))}return A.join("")}function Af(e,A=!1){let t=[];A&&t.push("\\xFE\\xFF");for(let i=0,s=e.length;i>8&255),String.fromCharCode(a&255))}return t.join("")}function xr(e,A,t){switch(e){case 90:return[0,1,-1,0,A,0];case 180:return[-1,0,0,-1,A,t];case 270:return[0,-1,1,0,0,t];default:throw new Error("Invalid rotation")}}function M1(e){return Math.ceil(Math.ceil(Math.log2(1+e))/8)}var Ie=class extends KA{constructor(A,t,i,s){super(),this.bytes=A instanceof Uint8Array?A:new Uint8Array(A),this.start=t||0,this.pos=this.start,this.end=t+i||this.bytes.length,this.dict=s}get length(){return this.end-this.start}get isEmpty(){return this.length===0}getByte(){return this.pos>=this.end?-1:this.bytes[this.pos++]}getBytes(A){let t=this.bytes,i=this.pos,s=this.end;if(!A)return t.subarray(i,s);let a=i+A;return a>s&&(a=s),this.pos=a,t.subarray(i,a)}getByteRange(A,t){return A<0&&(A=0),t>this.end&&(t=this.end),this.bytes.subarray(A,t)}reset(){this.pos=this.start}moveStart(){this.start=this.pos}makeSubStream(A,t,i=null){return new Ie(this.bytes.buffer,A,t,i)}},It=class extends Ie{constructor(A){super(Pe(A))}},Rs=class extends Ie{constructor(){super(new Uint8Array(0))}},qo=class extends Ie{constructor(A,t,i){super(new Uint8Array(A),0,A,null),this.chunkSize=t,this._loadedChunks=new Set,this.numChunks=Math.ceil(A/t),this.manager=i,this.progressiveDataLength=0,this.lastSuccessfulEnsureByteChunk=-1}getMissingChunks(){let A=[];for(let t=0,i=this.numChunks;t=this.end?this.numChunks:Math.floor(t/this.chunkSize);for(let a=i;athis.numChunks)&&t!==this.lastSuccessfulEnsureByteChunk){if(!this._loadedChunks.has(t))throw new ge(A,A+1);this.lastSuccessfulEnsureByteChunk=t}}ensureRange(A,t){if(A>=t||t<=this.progressiveDataLength)return;let i=Math.floor(A/this.chunkSize);if(i>this.numChunks)return;let s=Math.min(Math.floor((t-1)/this.chunkSize)+1,this.numChunks);for(let a=i;a=this.end?-1:(A>=this.progressiveDataLength&&this.ensureByte(A),this.bytes[this.pos++])}getBytes(A){let t=this.bytes,i=this.pos,s=this.end;if(!A)return s>this.progressiveDataLength&&this.ensureRange(i,s),t.subarray(i,s);let a=i+A;return a>s&&(a=s),a>this.progressiveDataLength&&this.ensureRange(i,a),this.pos=a,t.subarray(i,a)}getByteRange(A,t){return A<0&&(A=0),t>this.end&&(t=this.end),t>this.progressiveDataLength&&this.ensureRange(A,t),this.bytes.subarray(A,t)}makeSubStream(A,t,i=null){t?A+t>this.progressiveDataLength&&this.ensureRange(A,A+t):A>=this.progressiveDataLength&&this.ensureByte(A);function s(){}s.prototype=Object.create(this),s.prototype.getMissingChunks=function(){let n=this.chunkSize,r=Math.floor(this.start/n),g=Math.floor((this.end-1)/n)+1,o=[];for(let I=r;I{let g=({value:o,done:I})=>{try{if(I){let c=VE(s);s=null,n(c);return}a+=o.byteLength,i.isStreamingSupported&&this.onProgress({loaded:a}),s.push(o),i.read().then(g,r)}catch(c){r(c)}};i.read().then(g,r)}).then(n=>{this.aborted||this.onReceiveData({chunk:n,begin:A})})}requestAllChunks(A=!1){if(!A){let t=this.stream.getMissingChunks();this._requestChunks(t)}return this._loadedStreamCapability.promise}_requestChunks(A){let t=this.currRequestId++,i=new Set;this._chunksNeededByRequest.set(t,i);for(let n of A)this.stream.hasChunk(n)||i.add(n);if(i.size===0)return Promise.resolve();let s=Promise.withResolvers();this._promisesByRequest.set(t,s);let a=[];for(let n of i){let r=this._requestsByChunk.get(n);r||(r=[],this._requestsByChunk.set(n,r),a.push(n)),r.push(t)}if(a.length>0){let n=this.groupChunks(a);for(let r of n){let g=r.beginChunk*this.chunkSize,o=Math.min(r.endChunk*this.chunkSize,this.length);this.sendRequest(g,o).catch(s.reject)}}return s.promise.catch(n=>{if(!this.aborted)throw n})}getStream(){return this.stream}requestRange(A,t){t=Math.min(t,this.length);let i=this.getBeginChunk(A),s=this.getEndChunk(t),a=[];for(let n=i;n=0&&s+1!==r&&(t.push({beginChunk:i,endChunk:s+1}),i=r),a+1===A.length&&t.push({beginChunk:i,endChunk:r+1}),s=r}return t}onProgress(A){this.msgHandler.send("DocProgress",{loaded:this.stream.numChunksLoaded*this.chunkSize+A.loaded,total:this.length})}onReceiveData(A){let t=A.chunk,i=A.begin===void 0,s=i?this.progressiveDataLength:A.begin,a=s+t.byteLength,n=Math.floor(s/this.chunkSize),r=a0)&&g.push(c)}}}if(!this.disableAutoFetch&&this._requestsByChunk.size===0){let o;if(this.stream.numChunksLoaded===1){let I=this.stream.numChunks-1;this.stream.hasChunk(I)||(o=I)}else o=this.stream.nextEmptyChunk(r);Number.isInteger(o)&&this._requestChunks([o])}for(let o of g){let I=this._promisesByRequest.get(o);this._promisesByRequest.delete(o),I.resolve()}this.msgHandler.send("DocProgress",{loaded:this.stream.numChunksLoaded*this.chunkSize,total:this.length})}onError(A){this._loadedStreamCapability.reject(A)}getBeginChunk(A){return Math.floor(A/this.chunkSize)}getEndChunk(A){return Math.floor((A-1)/this.chunkSize)+1}abort(A){var t;this.aborted=!0,(t=this.pdfNetworkStream)==null||t.cancelAllRequests(A);for(let i of this._promisesByRequest.values())i.reject(A)}};function Xu(e,A,t,i,s,a,n){n=n!==1?0:n;let g=t/s,o=i/a,I=0,c,l=new Uint16Array(s),h=t*3;for(let C=0;Cl&&this.name!=="DeviceGray"&&this.name!=="DeviceRGB"){let C=r<=8?new Uint8Array(l):new Uint16Array(l);for(let Q=0;Q=.99554525?1:mA(this,Hi,Z0).call(this,0,1,(1+.055)*t**(1/2.4)-.055)},Hi=new WeakSet,Z0=function(t,i,s){return Math.max(t,Math.min(i,s))},Ji=new WeakSet,j0=function(t){return t<0?-mA(this,Ji,j0).call(this,-t):t>8?((t+16)/116)**3:t*ne(je,kg)},Rg=new WeakSet,sf=function(t,i,s){if(t[0]===0&&t[1]===0&&t[2]===0){s[0]=i[0],s[1]=i[1],s[2]=i[2];return}let a=mA(this,Ji,j0).call(this,0),n=a,r=mA(this,Ji,j0).call(this,t[0]),g=a,o=mA(this,Ji,j0).call(this,t[1]),I=a,c=mA(this,Ji,j0).call(this,t[2]),l=(1-n)/(1-r),h=1-l,C=(1-g)/(1-o),B=1-C,Q=(1-I)/(1-c),E=1-Q;s[0]=i[0]*l+h,s[1]=i[1]*C+B,s[2]=i[2]*Q+E},Ng=new WeakSet,af=function(t,i,s){if(t[0]===1&&t[2]===1){s[0]=i[0],s[1]=i[1],s[2]=i[2];return}let a=s;mA(this,Li,O0).call(this,ne(je,on),i,a);let n=ne(je,cn);mA(this,Sg,ef).call(this,t,a,n),mA(this,Li,O0).call(this,ne(je,In),n,s)},Gg=new WeakSet,nf=function(t,i,s){let a=s;mA(this,Li,O0).call(this,ne(je,on),i,a);let n=ne(je,cn);mA(this,Fg,tf).call(this,t,a,n),mA(this,Li,O0).call(this,ne(je,In),n,s)},hn=new WeakSet,$o=function(t,i,s,a,n){let r=mA(this,Hi,Z0).call(this,0,1,t[i]*n),g=mA(this,Hi,Z0).call(this,0,1,t[i+1]*n),o=mA(this,Hi,Z0).call(this,0,1,t[i+2]*n),I=r===1?1:r**this.GR,c=g===1?1:g**this.GG,l=o===1?1:o**this.GB,h=this.MXA*I+this.MXB*c+this.MXC*l,C=this.MYA*I+this.MYB*c+this.MYC*l,B=this.MZA*I+this.MZB*c+this.MZC*l,Q=ne(je,fs);Q[0]=h,Q[1]=C,Q[2]=B;let E=ne(je,ln);mA(this,Ng,af).call(this,this.whitePoint,Q,E);let f=ne(je,fs);mA(this,Rg,sf).call(this,this.blackPoint,E,f);let u=ne(je,ln);mA(this,Gg,nf).call(this,ne(je,Dg),f,u);let d=ne(je,fs);mA(this,Li,O0).call(this,ne(je,bg),u,d),s[a]=mA(this,us,er).call(this,d[0])*255,s[a+1]=mA(this,us,er).call(this,d[1])*255,s[a+2]=mA(this,us,er).call(this,d[2])*255},HA(vt,on,new Float32Array([.8951,.2664,-.1614,-.7502,1.7135,.0367,.0389,-.0685,1.0296])),HA(vt,In,new Float32Array([.9869929,-.1470543,.1599627,.4323053,.5183603,.0492912,-.0085287,.0400428,.9684867])),HA(vt,bg,new Float32Array([3.2404542,-1.5371385,-.4985314,-.969266,1.8760108,.041556,.0556434,-.2040259,1.0572252])),HA(vt,Dg,new Float32Array([1,1,1])),HA(vt,cn,new Float32Array(3)),HA(vt,fs,new Float32Array(3)),HA(vt,ln,new Float32Array(3)),HA(vt,kg,((8+16)/116)**3/8);var ds,tr,xs,ir,Cn,eI,AI=class extends JA{constructor(t,i,s){super("Lab",3);HA(this,ds);HA(this,xs);HA(this,Cn);if(!t)throw new v("WhitePoint missing - required for color space Lab");if([this.XW,this.YW,this.ZW]=t,[this.amin,this.amax,this.bmin,this.bmax]=s||[-100,100,-100,100],[this.XB,this.YB,this.ZB]=i||[0,0,0],this.XW<0||this.ZW<0||this.YW!==1)throw new v("Invalid WhitePoint components, no fallback available");(this.XB<0||this.YB<0||this.ZB<0)&&(PA("Invalid BlackPoint, falling back to default"),this.XB=this.YB=this.ZB=0),(this.amin>this.amax||this.bmin>this.bmax)&&(PA("Invalid Range, falling back to defaults"),this.amin=-100,this.amax=100,this.bmin=-100,this.bmax=100)}getRgbItem(t,i,s,a){mA(this,Cn,eI).call(this,t,i,!1,s,a)}getRgbBuffer(t,i,s,a,n,r,g){let o=(1<=6/29?t**3:108/841*(t-4/29)},xs=new WeakSet,ir=function(t,i,s,a){return s+t*(a-s)/i},Cn=new WeakSet,eI=function(t,i,s,a,n){let r=t[i],g=t[i+1],o=t[i+2];s!==!1&&(r=mA(this,xs,ir).call(this,r,s,0,100),g=mA(this,xs,ir).call(this,g,s,this.amin,this.amax),o=mA(this,xs,ir).call(this,o,s,this.bmin,this.bmax)),g>this.amax?g=this.amax:gthis.bmax?o=this.bmax:o>>0}function Nn(e,A){return A===1?String.fromCharCode(e[0],e[1]):A===3?String.fromCharCode(e[0],e[1],e[2],e[3]):String.fromCharCode(...e.subarray(0,A+1))}function tt(e,A,t){let i=0;for(let s=t;s>=0;s--)i+=e[s]+A[s],e[s]=i&255,i>>=8}function e0(e,A){let t=1;for(let i=A;i>=0&&t>0;i--)t+=e[i],e[i]=t&255,t>>=8}var K0=16,Vu=19,tI=class{constructor(A){this.buffer=A,this.pos=0,this.end=A.length,this.tmpBuf=new Uint8Array(Vu)}readByte(){return this.pos>=this.end?-1:this.buffer[this.pos++]}readNumber(){let A=0,t;do{let i=this.readByte();if(i<0)throw new v("unexpected EOF in bcmap");t=!(i&128),A=A<<7|i&127}while(!t);return A}readSigned(){let A=this.readNumber();return A&1?~(A>>>1):A>>>1}readHex(A,t){A.set(this.buffer.subarray(this.pos,this.pos+t+1)),this.pos+=t+1}readHexNumber(A,t){let i,s=this.tmpBuf,a=0;do{let o=this.readByte();if(o<0)throw new v("unexpected EOF in bcmap");i=!(o&128),s[a++]=o&127}while(!i);let n=t,r=0,g=0;for(;n>=0;){for(;g<8&&s.length>0;)r|=s[--a]<>=8,g-=8}}readHexSigned(A,t){this.readHexNumber(A,t);let i=A[t]&1?255:0,s=0;for(let a=0;a<=t;a++)s=(s&1)<<8|A[a],A[a]=s>>1^i}readString(){let A=this.readNumber(),t=new Array(A);for(let i=0;i=0;){let C=h>>5;if(C===7){switch(h&31){case 0:s.readString();break;case 1:n=s.readString();break}continue}let B=!!(h&16),Q=h&15;if(Q+1>K0)throw new Error("BinaryCMapReader.process: Invalid dataSize.");let E=1,f=s.readNumber();switch(C){case 0:s.readHex(r,Q),s.readHexNumber(g,Q),tt(g,r,Q),t.addCodespaceRange(Q+1,Ze(r,Q),Ze(g,Q));for(let u=1;ua&&(s=a)}else{for(;!this.eof;)this.readBlock(t);s=this.bufferLength}return this.pos=s,this.buffer.subarray(i,s)}async getImageData(A,t=null){if(!this.canAsyncDecodeImageFromBuffer)return this.getBytes(A,t);let i=await this.stream.asyncGetBytes();return this.decodeImage(i,t)}reset(){this.pos=0}makeSubStream(A,t,i=null){if(t===void 0)for(;!this.eof;)this.readBlock();else{let s=A+t;for(;this.bufferLength<=s&&!this.eof;)this.readBlock()}return new Ie(this.buffer,A,t,i)}getBaseStreams(){return this.str?this.str.getBaseStreams():null}},sI=class extends Me{constructor(A,t=null){let i=0;for(let s of A)i+=s instanceof Me?s._rawMinBufferLength:s.length;super(i),this.streams=A,this._onError=t}readBlock(){var r;let A=this.streams;if(A.length===0){this.eof=!0;return}let t=A.shift(),i;try{i=t.getBytes()}catch(g){if(this._onError){this._onError(g,(r=t.dict)==null?void 0:r.objId);return}throw g}let s=this.bufferLength,a=s+i.length;this.ensureBuffer(a).set(i,s),this.bufferLength=a}getBaseStreams(){let A=[];for(let t of this.streams){let i=t.getBaseStreams();i&&A.push(...i)}return A.length>0?A:null}},aI=class extends Me{constructor(A,t){t&&(t*=.8),super(t),this.str=A,this.dict=A.dict,this.input=new Uint8Array(5)}readBlock(){let s=this.str,a=s.getByte();for(;pt(a);)a=s.getByte();if(a===-1||a===126){this.eof=!0;return}let n=this.bufferLength,r,g;if(a===122){for(r=this.ensureBuffer(n+4),g=0;g<4;++g)r[n+g]=0;this.bufferLength+=4}else{let o=this.input;for(o[0]=a,g=1;g<5;++g){for(a=s.getByte();pt(a);)a=s.getByte();if(o[g]=a,a===-1||a===126)break}if(r=this.ensureBuffer(n+g-1),this.bufferLength+=g-1,g<5){for(;g<5;++g)o[g]=33+84;this.eof=!0}let I=0;for(g=0;g<5;++g)I=I*85+(o[g]-33);for(g=3;g>=0;--g)r[n+g]=I&255,I>>=8}}},nI=class extends Me{constructor(A,t){t&&(t*=.5),super(t),this.str=A,this.dict=A.dict,this.firstDigit=-1}readBlock(){let t=this.str.getBytes(8e3);if(!t.length){this.eof=!0;return}let i=t.length+1>>1,s=this.ensureBuffer(this.bufferLength+i),a=this.bufferLength,n=this.firstDigit;for(let r of t){let g;if(r>=48&&r<=57)g=r&15;else if(r>=65&&r<=70||r>=97&&r<=102)g=(r&15)+9;else if(r===62){this.eof=!0;break}else continue;n<0?n=g:(s[a++]=n<<4|g,n=-1)}n>=0&&this.eof&&(s[a++]=n<<4,n=-1),this.firstDigit=n,this.bufferLength=a}},rI=-2,gi=-1,Ii=0,He=1,kA=2,Je=3,Ye=4,gI=5,oI=6,rf=7,gf=8,L1=[[-1,-1],[-1,-1],[7,gf],[7,rf],[6,oI],[6,oI],[6,gI],[6,gI],[4,Ii],[4,Ii],[4,Ii],[4,Ii],[4,Ii],[4,Ii],[4,Ii],[4,Ii],[3,He],[3,He],[3,He],[3,He],[3,He],[3,He],[3,He],[3,He],[3,He],[3,He],[3,He],[3,He],[3,He],[3,He],[3,He],[3,He],[3,Ye],[3,Ye],[3,Ye],[3,Ye],[3,Ye],[3,Ye],[3,Ye],[3,Ye],[3,Ye],[3,Ye],[3,Ye],[3,Ye],[3,Ye],[3,Ye],[3,Ye],[3,Ye],[3,Je],[3,Je],[3,Je],[3,Je],[3,Je],[3,Je],[3,Je],[3,Je],[3,Je],[3,Je],[3,Je],[3,Je],[3,Je],[3,Je],[3,Je],[3,Je],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA]],H1=[[-1,-1],[12,rI],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[11,1792],[11,1792],[12,1984],[12,2048],[12,2112],[12,2176],[12,2240],[12,2304],[11,1856],[11,1856],[11,1920],[11,1920],[12,2368],[12,2432],[12,2496],[12,2560]],J1=[[-1,-1],[-1,-1],[-1,-1],[-1,-1],[8,29],[8,29],[8,30],[8,30],[8,45],[8,45],[8,46],[8,46],[7,22],[7,22],[7,22],[7,22],[7,23],[7,23],[7,23],[7,23],[8,47],[8,47],[8,48],[8,48],[6,13],[6,13],[6,13],[6,13],[6,13],[6,13],[6,13],[6,13],[7,20],[7,20],[7,20],[7,20],[8,33],[8,33],[8,34],[8,34],[8,35],[8,35],[8,36],[8,36],[8,37],[8,37],[8,38],[8,38],[7,19],[7,19],[7,19],[7,19],[8,31],[8,31],[8,32],[8,32],[6,1],[6,1],[6,1],[6,1],[6,1],[6,1],[6,1],[6,1],[6,12],[6,12],[6,12],[6,12],[6,12],[6,12],[6,12],[6,12],[8,53],[8,53],[8,54],[8,54],[7,26],[7,26],[7,26],[7,26],[8,39],[8,39],[8,40],[8,40],[8,41],[8,41],[8,42],[8,42],[8,43],[8,43],[8,44],[8,44],[7,21],[7,21],[7,21],[7,21],[7,28],[7,28],[7,28],[7,28],[8,61],[8,61],[8,62],[8,62],[8,63],[8,63],[8,0],[8,0],[8,320],[8,320],[8,384],[8,384],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[7,27],[7,27],[7,27],[7,27],[8,59],[8,59],[8,60],[8,60],[9,1472],[9,1536],[9,1600],[9,1728],[7,18],[7,18],[7,18],[7,18],[7,24],[7,24],[7,24],[7,24],[8,49],[8,49],[8,50],[8,50],[8,51],[8,51],[8,52],[8,52],[7,25],[7,25],[7,25],[7,25],[8,55],[8,55],[8,56],[8,56],[8,57],[8,57],[8,58],[8,58],[6,192],[6,192],[6,192],[6,192],[6,192],[6,192],[6,192],[6,192],[6,1664],[6,1664],[6,1664],[6,1664],[6,1664],[6,1664],[6,1664],[6,1664],[8,448],[8,448],[8,512],[8,512],[9,704],[9,768],[8,640],[8,640],[8,576],[8,576],[9,832],[9,896],[9,960],[9,1024],[9,1088],[9,1152],[9,1216],[9,1280],[9,1344],[9,1408],[7,256],[7,256],[7,256],[7,256],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[6,16],[6,16],[6,16],[6,16],[6,16],[6,16],[6,16],[6,16],[6,17],[6,17],[6,17],[6,17],[6,17],[6,17],[6,17],[6,17],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[6,14],[6,14],[6,14],[6,14],[6,14],[6,14],[6,14],[6,14],[6,15],[6,15],[6,15],[6,15],[6,15],[6,15],[6,15],[6,15],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7]],Y1=[[-1,-1],[-1,-1],[12,rI],[12,rI],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[11,1792],[11,1792],[11,1792],[11,1792],[12,1984],[12,1984],[12,2048],[12,2048],[12,2112],[12,2112],[12,2176],[12,2176],[12,2240],[12,2240],[12,2304],[12,2304],[11,1856],[11,1856],[11,1856],[11,1856],[11,1920],[11,1920],[11,1920],[11,1920],[12,2368],[12,2368],[12,2432],[12,2432],[12,2496],[12,2496],[12,2560],[12,2560],[10,18],[10,18],[10,18],[10,18],[10,18],[10,18],[10,18],[10,18],[12,52],[12,52],[13,640],[13,704],[13,768],[13,832],[12,55],[12,55],[12,56],[12,56],[13,1280],[13,1344],[13,1408],[13,1472],[12,59],[12,59],[12,60],[12,60],[13,1536],[13,1600],[11,24],[11,24],[11,24],[11,24],[11,25],[11,25],[11,25],[11,25],[13,1664],[13,1728],[12,320],[12,320],[12,384],[12,384],[12,448],[12,448],[13,512],[13,576],[12,53],[12,53],[12,54],[12,54],[13,896],[13,960],[13,1024],[13,1088],[13,1152],[13,1216],[10,64],[10,64],[10,64],[10,64],[10,64],[10,64],[10,64],[10,64]],K1=[[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[11,23],[11,23],[12,50],[12,51],[12,44],[12,45],[12,46],[12,47],[12,57],[12,58],[12,61],[12,256],[10,16],[10,16],[10,16],[10,16],[10,17],[10,17],[10,17],[10,17],[12,48],[12,49],[12,62],[12,63],[12,30],[12,31],[12,32],[12,33],[12,40],[12,41],[11,22],[11,22],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[9,15],[9,15],[9,15],[9,15],[9,15],[9,15],[9,15],[9,15],[12,128],[12,192],[12,26],[12,27],[12,28],[12,29],[11,19],[11,19],[11,20],[11,20],[12,34],[12,35],[12,36],[12,37],[12,38],[12,39],[11,21],[11,21],[12,42],[12,43],[10,0],[10,0],[10,0],[10,0],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12]],v1=[[-1,-1],[-1,-1],[-1,-1],[-1,-1],[6,9],[6,8],[5,7],[5,7],[4,6],[4,6],[4,6],[4,6],[4,5],[4,5],[4,5],[4,5],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2]],pr=class{constructor(A,t={}){var s;if(!A||typeof A.next!="function")throw new Error(\'CCITTFaxDecoder - invalid "source" parameter.\');this.source=A,this.eof=!1,this.encoding=t.K||0,this.eoline=t.EndOfLine||!1,this.byteAlign=t.EncodedByteAlign||!1,this.columns=t.Columns||1728,this.rows=t.Rows||0,this.eoblock=(s=t.EndOfBlock)!=null?s:!0,this.black=t.BlackIs1||!1,this.codingLine=new Uint32Array(this.columns+1),this.refLine=new Uint32Array(this.columns+2),this.codingLine[0]=this.columns,this.codingPos=0,this.row=0,this.nextLine2D=this.encoding<0,this.inputBits=0,this.inputBuf=0,this.outputBits=0,this.rowsDone=!1;let i;for(;(i=this._lookBits(12))===0;)this._eatBits(1);i===1&&this._eatBits(12),this.encoding>0&&(this.nextLine2D=!this._lookBits(1),this._eatBits(1))}readNextChar(){if(this.eof)return-1;let A=this.refLine,t=this.codingLine,i=this.columns,s,a,n,r;if(this.outputBits===0){if(this.rowsDone&&(this.eof=!0),this.eof)return-1;this.err=!1;let o,I,c;if(this.nextLine2D){for(r=0;t[r]=64);do I+=c=this._getWhiteCode();while(c>=64)}else{do o+=c=this._getWhiteCode();while(c>=64);do I+=c=this._getBlackCode();while(c>=64)}for(this._addPixels(t[this.codingPos]+o,a),t[this.codingPos]0?--s:++s;A[s]<=t[this.codingPos]&&A[s]0?--s:++s;A[s]<=t[this.codingPos]&&A[s]0?--s:++s;A[s]<=t[this.codingPos]&&A[s]=64);else do o+=c=this._getWhiteCode();while(c>=64);this._addPixels(t[this.codingPos]+o,a),a^=1}let l=!1;if(this.byteAlign&&(this.inputBits&=-8),!this.eoblock&&this.row===this.rows-1)this.rowsDone=!0;else{if(o=this._lookBits(12),this.eoline)for(;o!==gi&&o!==1;)this._eatBits(1),o=this._lookBits(12);else for(;o===0;)this._eatBits(1),o=this._lookBits(12);o===1?(this._eatBits(12),l=!0):o===gi&&(this.eof=!0)}if(!this.eof&&this.encoding>0&&!this.rowsDone&&(this.nextLine2D=!this._lookBits(1),this._eatBits(1)),this.eoblock&&l&&this.byteAlign){if(o=this._lookBits(12),o===1){if(this._eatBits(12),this.encoding>0&&(this._lookBits(1),this._eatBits(1)),this.encoding>=0)for(r=0;r<4;++r)o=this._lookBits(12),o!==1&&PA("bad rtc code: "+o),this._eatBits(12),this.encoding>0&&(this._lookBits(1),this._eatBits(1));this.eof=!0}}else if(this.err&&this.eoline){for(;;){if(o=this._lookBits(13),o===gi)return this.eof=!0,-1;if(o>>1===1)break;this._eatBits(1)}this._eatBits(12),this.encoding>0&&(this._eatBits(1),this.nextLine2D=!(o&1))}this.outputBits=t[0]>0?t[this.codingPos=0]:t[this.codingPos=1],this.row++}let g;if(this.outputBits>=8)g=this.codingPos&1?0:255,this.outputBits-=8,this.outputBits===0&&t[this.codingPos]n?(g<<=n,this.codingPos&1||(g|=255>>8-n),this.outputBits-=n,n=0):(g<<=this.outputBits,this.codingPos&1||(g|=255>>8-this.outputBits),n-=this.outputBits,this.outputBits=0,t[this.codingPos]0&&(g<<=n,n=0))}while(n)}return this.black&&(g^=255),g}_addPixels(A,t){let i=this.codingLine,s=this.codingPos;A>i[s]&&(A>this.columns&&(PA("row is wrong length"),this.err=!0,A=this.columns),s&1^t&&++s,i[s]=A),this.codingPos=s}_addPixelsNeg(A,t){let i=this.codingLine,s=this.codingPos;if(A>i[s])A>this.columns&&(PA("row is wrong length"),this.err=!0,A=this.columns),s&1^t&&++s,i[s]=A;else if(A0&&A=a){let g=i[r-a];if(g[0]===n)return this._eatBits(n),[!0,g[1],!0]}}return[!1,0,!1]}_getTwoDimCode(){let A=0,t;if(this.eoblock){if(A=this._lookBits(7),t=L1[A],(t==null?void 0:t[0])>0)return this._eatBits(t[0]),t[1]}else{let i=this._findTableCode(1,7,L1);if(i[0]&&i[2])return i[1]}return PA("Bad two dim code"),gi}_getWhiteCode(){let A=0,t;if(this.eoblock){if(A=this._lookBits(12),A===gi)return 1;if(t=A>>5?J1[A>>3]:H1[A],t[0]>0)return this._eatBits(t[0]),t[1]}else{let i=this._findTableCode(1,9,J1);if(i[0]||(i=this._findTableCode(11,12,H1),i[0]))return i[1]}return PA("bad white code"),this._eatBits(1),1}_getBlackCode(){let A,t;if(this.eoblock){if(A=this._lookBits(13),A===gi)return 1;if(A>>7?!(A>>9)&&A>>7?t=K1[(A>>1)-64]:t=v1[A>>7]:t=Y1[A],t[0]>0)return this._eatBits(t[0]),t[1]}else{let i=this._findTableCode(2,6,v1);if(i[0]||(i=this._findTableCode(7,12,K1,64),i[0])||(i=this._findTableCode(10,13,Y1),i[0]))return i[1]}return PA("bad black code"),this._eatBits(1),1}_lookBits(A){let t;for(;this.inputBits>16-A;this.inputBuf=this.inputBuf<<8|t,this.inputBits+=8}return this.inputBuf>>this.inputBits-A&65535>>16-A}_eatBits(A){(this.inputBits-=A)<0&&(this.inputBits=0)}},II=class extends Me{constructor(A,t,i){super(t),this.str=A,this.dict=A.dict,i instanceof F||(i=F.empty);let s={next(){return A.getByte()}};this.ccittFaxDecoder=new pr(s,{K:i.get("K"),EndOfLine:i.get("EndOfLine"),EncodedByteAlign:i.get("EncodedByteAlign"),Columns:i.get("Columns"),Rows:i.get("Rows"),EndOfBlock:i.get("EndOfBlock"),BlackIs1:i.get("BlackIs1")})}readBlock(){for(;!this.eof;){let A=this.ccittFaxDecoder.readNextChar();if(A===-1){this.eof=!0;return}this.ensureBuffer(this.bufferLength+1),this.buffer[this.bufferLength++]=A}}},q1=new Int32Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),zu=new Int32Array([3,4,5,6,7,8,9,10,65547,65549,65551,65553,131091,131095,131099,131103,196643,196651,196659,196667,262211,262227,262243,262259,327811,327843,327875,327907,258,258,258]),$u=new Int32Array([1,2,3,4,65541,65543,131081,131085,196625,196633,262177,262193,327745,327777,393345,393409,459009,459137,524801,525057,590849,591361,657409,658433,724993,727041,794625,798721,868353,876545]),Ad=[new Int32Array([459008,524368,524304,524568,459024,524400,524336,590016,459016,524384,524320,589984,524288,524416,524352,590048,459012,524376,524312,589968,459028,524408,524344,590032,459020,524392,524328,59e4,524296,524424,524360,590064,459010,524372,524308,524572,459026,524404,524340,590024,459018,524388,524324,589992,524292,524420,524356,590056,459014,524380,524316,589976,459030,524412,524348,590040,459022,524396,524332,590008,524300,524428,524364,590072,459009,524370,524306,524570,459025,524402,524338,590020,459017,524386,524322,589988,524290,524418,524354,590052,459013,524378,524314,589972,459029,524410,524346,590036,459021,524394,524330,590004,524298,524426,524362,590068,459011,524374,524310,524574,459027,524406,524342,590028,459019,524390,524326,589996,524294,524422,524358,590060,459015,524382,524318,589980,459031,524414,524350,590044,459023,524398,524334,590012,524302,524430,524366,590076,459008,524369,524305,524569,459024,524401,524337,590018,459016,524385,524321,589986,524289,524417,524353,590050,459012,524377,524313,589970,459028,524409,524345,590034,459020,524393,524329,590002,524297,524425,524361,590066,459010,524373,524309,524573,459026,524405,524341,590026,459018,524389,524325,589994,524293,524421,524357,590058,459014,524381,524317,589978,459030,524413,524349,590042,459022,524397,524333,590010,524301,524429,524365,590074,459009,524371,524307,524571,459025,524403,524339,590022,459017,524387,524323,589990,524291,524419,524355,590054,459013,524379,524315,589974,459029,524411,524347,590038,459021,524395,524331,590006,524299,524427,524363,590070,459011,524375,524311,524575,459027,524407,524343,590030,459019,524391,524327,589998,524295,524423,524359,590062,459015,524383,524319,589982,459031,524415,524351,590046,459023,524399,524335,590014,524303,524431,524367,590078,459008,524368,524304,524568,459024,524400,524336,590017,459016,524384,524320,589985,524288,524416,524352,590049,459012,524376,524312,589969,459028,524408,524344,590033,459020,524392,524328,590001,524296,524424,524360,590065,459010,524372,524308,524572,459026,524404,524340,590025,459018,524388,524324,589993,524292,524420,524356,590057,459014,524380,524316,589977,459030,524412,524348,590041,459022,524396,524332,590009,524300,524428,524364,590073,459009,524370,524306,524570,459025,524402,524338,590021,459017,524386,524322,589989,524290,524418,524354,590053,459013,524378,524314,589973,459029,524410,524346,590037,459021,524394,524330,590005,524298,524426,524362,590069,459011,524374,524310,524574,459027,524406,524342,590029,459019,524390,524326,589997,524294,524422,524358,590061,459015,524382,524318,589981,459031,524414,524350,590045,459023,524398,524334,590013,524302,524430,524366,590077,459008,524369,524305,524569,459024,524401,524337,590019,459016,524385,524321,589987,524289,524417,524353,590051,459012,524377,524313,589971,459028,524409,524345,590035,459020,524393,524329,590003,524297,524425,524361,590067,459010,524373,524309,524573,459026,524405,524341,590027,459018,524389,524325,589995,524293,524421,524357,590059,459014,524381,524317,589979,459030,524413,524349,590043,459022,524397,524333,590011,524301,524429,524365,590075,459009,524371,524307,524571,459025,524403,524339,590023,459017,524387,524323,589991,524291,524419,524355,590055,459013,524379,524315,589975,459029,524411,524347,590039,459021,524395,524331,590007,524299,524427,524363,590071,459011,524375,524311,524575,459027,524407,524343,590031,459019,524391,524327,589999,524295,524423,524359,590063,459015,524383,524319,589983,459031,524415,524351,590047,459023,524399,524335,590015,524303,524431,524367,590079]),9],ed=[new Int32Array([327680,327696,327688,327704,327684,327700,327692,327708,327682,327698,327690,327706,327686,327702,327694,0,327681,327697,327689,327705,327685,327701,327693,327709,327683,327699,327691,327707,327687,327703,327695,0]),5],Yi,X0,wr=class extends Me{constructor(t,i){super(i);HA(this,Yi);this.str=t,this.dict=t.dict;let s=t.getByte(),a=t.getByte();if(s===-1||a===-1)throw new v(`Invalid header in flate stream: ${s}, ${a}`);if((s&15)!==8)throw new v(`Unknown compression method in flate stream: ${s}, ${a}`);if(((s<<8)+a)%31!==0)throw new v(`Bad FCHECK in flate stream: ${s}, ${a}`);if(a&32)throw new v(`FDICT bit set in flate stream: ${s}, ${a}`);this.codeSize=0,this.codeBuf=0}async getImageData(t,i){let s=await this.asyncGetBytes();return(s==null?void 0:s.subarray(0,t))||this.getBytes(t)}async asyncGetBytes(){this.str.reset();let t=this.str.getBytes();try{let{readable:i,writable:s}=new DecompressionStream("deflate"),a=s.getWriter();a.write(t),a.close();let n=[],r=0;for await(let I of i)n.push(I),r+=I.byteLength;let g=new Uint8Array(r),o=0;for(let I of n)g.set(I,o),o+=I.byteLength;return g}catch(i){return this.str=new Ie(t,2,t.length,this.str.dict),this.reset(),null}}get isAsync(){return!0}getBits(t){let i=this.str,s=this.codeSize,a=this.codeBuf,n;for(;s>t,this.codeSize=s-=t,n}getCode(t){let i=this.str,s=t[0],a=t[1],n=this.codeSize,r=this.codeBuf,g;for(;n>16,c=o&65535;if(I<1||n>I,this.codeSize=n-I,c}generateHuffmanTable(t){let i=t.length,s=0,a;for(a=0;as&&(s=t[a]);let n=1<>=1;for(a=l;a>=1,i===0){let I;if((I=a.getByte())===-1){mA(this,Yi,X0).call(this,"Bad block header in flate stream");return}let c=I;if((I=a.getByte())===-1){mA(this,Yi,X0).call(this,"Bad block header in flate stream");return}if(c|=I<<8,(I=a.getByte())===-1){mA(this,Yi,X0).call(this,"Bad block header in flate stream");return}let l=I;if((I=a.getByte())===-1){mA(this,Yi,X0).call(this,"Bad block header in flate stream");return}if(l|=I<<8,l!==(~c&65535)&&(c!==0||l!==0))throw new v("Bad uncompressed block length in flate stream");this.codeBuf=0,this.codeSize=0;let h=this.bufferLength,C=h+c;if(t=this.ensureBuffer(C),this.bufferLength=C,c===0)a.peekByte()===-1&&(this.eof=!0);else{let B=a.getBytes(c);t.set(B,h),B.length0;)E[C++]=d}n=this.generateHuffmanTable(E.subarray(0,I)),r=this.generateHuffmanTable(E.subarray(I,Q))}else throw new v("Unknown block type in flate stream");t=this.buffer;let g=t?t.length:0,o=this.bufferLength;for(;;){let I=this.getCode(n);if(I<256){o+1>=g&&(t=this.ensureBuffer(o+1),g=t.length),t[o++]=I;continue}if(I===256){this.bufferLength=o;return}I-=257,I=zu[I];let c=I>>16;c>0&&(c=this.getBits(c)),s=(I&65535)+c,I=this.getCode(r),I=$u[I],c=I>>16,c>0&&(c=this.getBits(c));let l=(I&65535)+c;o+s>=g&&(t=this.ensureBuffer(o+s),g=t.length);for(let h=0;h>9&127,this.clow=this.clow<<7&65535,this.ct-=7,this.a=32768}byteIn(){let A=this.data,t=this.bp;A[t]===255?A[t+1]>143?(this.clow+=65280,this.ct=8):(t++,this.clow+=A[t]<<9,this.ct=7,this.bp=t):(t++,this.clow+=t65535&&(this.chigh+=this.clow>>16,this.clow&=65535)}readBit(A,t){let i=A[t]>>1,s=A[t]&1,a=td[i],n=a.qe,r,g=this.a-n;if(this.chigh>15&1,this.clow=this.clow<<1&65535,this.ct--;while(!(g&32768));return this.a=g,A[t]=i<<1|s,r}},oe=class extends At{constructor(A){super(A,"Jbig2Error")}},lI=class{getContexts(A){return A in this?this[A]:this[A]=new Int8Array(1<<16)}},g0=class{constructor(A,t,i){this.data=A,this.start=t,this.end=i}get decoder(){let A=new cI(this.data,this.start,this.end);return nA(this,"decoder",A)}get contextCache(){let A=new lI;return nA(this,"contextCache",A)}},id=2**31-1,sd=-(2**31);function Xe(e,A,t){let i=e.getContexts(A),s=1;function a(o){let I=0;for(let c=0;c>>0}let n=a(1),r=a(1)?a(1)?a(1)?a(1)?a(1)?a(32)+4436:a(12)+340:a(8)+84:a(6)+20:a(4)+4:a(2),g;return n===0?g=r:r>0&&(g=-r),g>=sd&&g<=id?g:null}function of(e,A,t){let i=e.getContexts("IAID"),s=1;for(let a=0;a=D&&R=S)for(IA=IA<<1&C,u=0;u=0&&tA=0&&(QA=K[_][tA],QA&&(IA|=QA<=e?Z<<=1:Z=Z<<1|x[U][K];for(h=0;h=u||K<0||K>=f?Z<<=1:Z=Z<<1|i[U][K];let AA=p.readBit(m,Z);w[Y]=AA}}return x}function od(e,A,t,i,s,a,n,r,g,o,I,c){if(e&&A)throw new oe("symbol refinement with Huffman is not supported");let l=[],h=0,C=g1(t.length+i),B=I.decoder,Q=I.contextCache,E,f;for(e&&(E=vi(1),f=[],C=Math.max(C,1));l.length1)Z=cf(e,A,w,h,0,AA,1,t.concat(l),C,0,0,1,0,a,g,o,I,0,c);else{let gA=of(Q,B,C),R=Xe(Q,"IARDX",B),_=Xe(Q,"IARDY",B),tA=gA1&&(K=e?f.readBits(E):Xe(m,"IAIT",p));let Z=n*D+K,AA=e?h.symbolIDTable.decode(f):of(m,p,g),gA=A&&(e?f.readBit():Xe(m,"IARI",p)),R=r[AA],_=R[0].length,tA=R.length;if(gA){let N=Xe(m,"IARDW",p),H=Xe(m,"IARDH",p),q=Xe(m,"IARDX",p),T=Xe(m,"IARDY",p);_+=N,tA+=H,R=If(_,tA,C,R,(N>>1)+q,(H>>1)+T,!1,B,Q)}let IA=0;o?c&1?IA=tA-1:U+=tA-1:c>1?U+=_-1:IA=_-1;let QA=Z-(c&1?0:tA-1),V=U-(c&2?_-1:0),lA,EA,fA;if(o)for(lA=0;lA=0;E--)e?U=I1(Y,g,o,!0):U=_g(!1,g,o,t,!1,null,S,C),w[E]=U;let K,Z,AA,gA,R,_,tA,IA,QA;for(K=0;K=0;f--)AA^=w[f][K][Z],gA|=AA<>8,tA=c+K*l-Z*h>>8,_>=0&&_+p<=i&&tA>=0&&tA+m<=s)for(E=0;E=s))for(QA=Q[lA],IA=R[E],f=0;f=0&&V>5&7,g=[n&31],o=A+6;if(n===7){r=le(e,o-1)&536870911,o+=3;let C=r+7>>3;for(g[0]=e[o++];--C>0;)g.push(e[o++])}else if(n===5||n===6)throw new oe("invalid referred-to flags");t.retainBits=g;let I=4;t.number<=256?I=1:t.number<=65536&&(I=2);let c=[],l,h;for(l=0;l>>24&255,f[3]=C.height>>16&255,f[4]=C.height>>8&255,f[5]=C.height&255,l=o,h=e.length;l>2&3,c.huffmanDWSelector=l>>4&3,c.bitmapSizeSelector=l>>6&1,c.aggregationInstancesSelector=l>>7&1,c.bitmapCodingContextUsed=!!(l&256),c.bitmapCodingContextRetained=!!(l&512),c.template=l>>10&3,c.refinementTemplate=l>>12&1,a+=2,!c.huffman){for(o=c.template===0?4:1,r=[],g=0;g>2&3,h.stripSize=1<>4&3,h.transposed=!!(C&64),h.combinationOperator=C>>7&3,h.defaultPixelValue=C>>9&1,h.dsOffset=C<<17>>27,h.refinementTemplate=C>>15&1,h.huffman){let m=we(i,a);a+=2,h.huffmanFS=m&3,h.huffmanDS=m>>2&3,h.huffmanDT=m>>4&3,h.huffmanRefinementDW=m>>6&3,h.huffmanRefinementDH=m>>8&3,h.huffmanRefinementDX=m>>10&3,h.huffmanRefinementDY=m>>12&3,h.huffmanRefinementSizeSelector=!!(m&16384)}if(h.refinement&&!h.refinementTemplate){for(r=[],g=0;g<2;g++)r.push({x:Di(i,a),y:Di(i,a+1)}),a+=2;h.refinementAt=r}h.numberOfSymbolInstances=le(i,a),a+=4,n=[h,t.referredTo,i,a,s];break;case 16:let B={},Q=i[a++];B.mmr=!!(Q&1),B.template=Q>>1&3,B.patternWidth=i[a++],B.patternHeight=i[a++],B.maxPatternIndex=le(i,a),a+=4,n=[B,t.number,i,a,s];break;case 22:case 23:let E={};E.info=sr(i,a),a+=ar;let f=i[a++];E.mmr=!!(f&1),E.template=f>>1&3,E.enableSkip=!!(f&8),E.combinationOperator=f>>4&7,E.defaultPixelValue=f>>7&1,E.gridWidth=le(i,a),a+=4,E.gridHeight=le(i,a),a+=4,E.gridOffsetX=le(i,a)&4294967295,a+=4,E.gridOffsetY=le(i,a)&4294967295,a+=4,E.gridVectorX=we(i,a),a+=2,E.gridVectorY=we(i,a),a+=2,n=[E,t.referredTo,i,a,s];break;case 38:case 39:let u={};u.info=sr(i,a),a+=ar;let d=i[a++];if(u.mmr=!!(d&1),u.template=d>>1&3,u.prediction=!!(d&8),!u.mmr){for(o=u.template===0?4:1,r=[],g=0;g>2&1,x.combinationOperator=p>>3&3,x.requiresBuffer=!!(p&32),x.combinationOperatorOverride=!!(p&64),n=[x];break;case 49:break;case 50:break;case 51:break;case 53:n=[t.number,i,a,s];break;case 62:break;default:throw new oe(`segment type ${t.typeName}(${t.type}) is not implemented`)}let I="on"+t.typeName;I in A&&A[I].apply(A,n)}function Bd(e,A){for(let t=0,i=e.length;t>3,i=new Uint8ClampedArray(t*A.height);A.defaultPixelValue&&i.fill(255),this.buffer=i}drawBitmap(A,t){let i=this.currentPageInfo,s=A.width,a=A.height,n=i.width+7>>3,r=i.combinationOperatorOverride?A.combinationOperator:i.combinationOperator,g=this.buffer,o=128>>(A.x&7),I=A.y*n+(A.x>>3),c,l,h,C;switch(r){case 0:for(c=0;c>=1,h||(h=128,C++);I+=n}break;case 2:for(c=0;c>=1,h||(h=128,C++);I+=n}break;default:throw new oe(`operator ${r} is not supported`)}}onImmediateGenericRegion(A,t,i,s){let a=A.info,n=new g0(t,i,s),r=_g(A.mmr,a.width,a.height,A.template,A.prediction,null,A.at,n);this.drawBitmap(a,r)}onImmediateLosslessGenericRegion(){this.onImmediateGenericRegion(...arguments)}onSymbolDictionary(A,t,i,s,a,n){let r,g;A.huffman&&(r=ud(A,i,this.customTables),g=new w0(s,a,n));let o=this.symbols;o||(this.symbols=o={});let I=[];for(let l of i){let h=o[l];h&&I.push(...h)}let c=new g0(s,a,n);o[t]=od(A.huffman,A.refinement,I,A.numberOfNewSymbols,A.numberOfExportedSymbols,r,A.template,A.at,A.refinementTemplate,A.refinementAt,c,g)}onImmediateTextRegion(A,t,i,s,a){let n=A.info,r,g,o=this.symbols,I=[];for(let C of t){let B=o[C];B&&I.push(...B)}let c=g1(I.length);A.huffman&&(g=new w0(i,s,a),r=fd(A,t,this.customTables,I.length,g));let l=new g0(i,s,a),h=cf(A.huffman,A.refinement,n.width,n.height,A.defaultPixelValue,A.numberOfSymbolInstances,A.stripSize,I,c,A.transposed,A.dsOffset,A.referenceCorner,A.combinationOperator,r,A.refinementTemplate,A.refinementAt,l,A.logStripSize,g);this.drawBitmap(n,h)}onImmediateLosslessTextRegion(){this.onImmediateTextRegion(...arguments)}onPatternDictionary(A,t,i,s,a){let n=this.patterns;n||(this.patterns=n={});let r=new g0(i,s,a);n[t]=Id(A.mmr,A.patternWidth,A.patternHeight,A.maxPatternIndex,A.template,r)}onImmediateHalftoneRegion(A,t,i,s,a){let n=this.patterns[t[0]],r=A.info,g=new g0(i,s,a),o=cd(A.mmr,n,A.template,r.width,r.height,A.defaultPixelValue,A.enableSkip,A.combinationOperator,A.gridWidth,A.gridHeight,A.gridOffsetX,A.gridOffsetY,A.gridVectorX,A.gridVectorY,g);this.drawBitmap(r,o)}onImmediateLosslessHalftoneRegion(){this.onImmediateHalftoneRegion(...arguments)}onTables(A,t,i,s){let a=this.customTables;a||(this.customTables=a={}),a[A]=Ed(t,i,s)}},si=class{constructor(A){A.length===2?(this.isOOB=!0,this.rangeLow=0,this.prefixLength=A[0],this.rangeLength=0,this.prefixCode=A[1],this.isLowerRange=!1):(this.isOOB=!1,this.rangeLow=A[0],this.prefixLength=A[1],this.rangeLength=A[2],this.prefixCode=A[3],this.isLowerRange=A[4]==="lower")}},Ns=class{constructor(A){this.children=[],A?(this.isLeaf=!0,this.rangeLength=A.rangeLength,this.rangeLow=A.rangeLow,this.isLowerRange=A.isLowerRange,this.isOOB=A.isOOB):this.isLeaf=!1}buildTree(A,t){let i=A.prefixCode>>t&1;if(t<=0)this.children[i]=new Ns(A);else{let s=this.children[i];s||(this.children[i]=s=new Ns(null)),s.buildTree(A,t-1)}}decodeNode(A){if(this.isLeaf){if(this.isOOB)return null;let i=A.readBits(this.rangeLength);return this.rangeLow+(this.isLowerRange?-i:i)}let t=this.children[A.readBit()];if(!t)throw new oe("invalid Huffman data");return t.decodeNode(A)}},Gs=class{constructor(A,t){t||this.assignPrefixCodes(A),this.rootNode=new Ns(null);for(let i=0,s=A.length;i0&&this.rootNode.buildTree(a,a.prefixLength-1)}}decode(A){return this.rootNode.decodeNode(A)}assignPrefixCodes(A){let t=A.length,i=0;for(let I=0;I>1&7)+1,g=(i>>4&7)+1,o=[],I,c,l=s;do I=n.readBits(r),c=n.readBits(g),o.push(new si([l,I,c,0])),l+=1<=this.end)throw new oe("end of data while reading bit");this.currentByte=this.data[this.position++],this.shift=7}let A=this.currentByte>>this.shift&1;return this.shift--,A}readBits(A){let t=0,i;for(i=A-1;i>=0;i--)t|=this.readBit()<=this.end?-1:this.data[this.position++]}};function h0(e,A,t){let i=0;for(let s=0,a=A.length;s=32){let C,B,Q;switch(h){case 32:if(l===0)throw new oe("no previous value in symbol ID table");B=s.readBits(2)+3,C=a[l-1].prefixLength;break;case 33:B=s.readBits(3)+3,C=0;break;case 34:B=s.readBits(7)+11,C=0;break;default:throw new oe("invalid code length in symbol ID table")}for(Q=0;Q>c&1,c--}if(i&&!g)for(let I=0;I<5&&a.readNextChar()!==-1;I++);return n}var CI=class{parseChunks(A){return Qd(A)}parse(A){throw new Error("Not implemented: Jbig2Image.parse")}},BI=class extends Me{constructor(A,t,i){super(t),this.stream=A,this.dict=A.dict,this.maybeLength=t,this.params=i}get bytes(){return nA(this,"bytes",this.stream.getBytes(this.maybeLength))}ensureBuffer(A){}readBlock(){this.decodeImage()}decodeImage(A){if(this.eof)return this.buffer;A||(A=this.bytes);let t=new CI,i=[];if(this.params instanceof F){let n=this.params.get("JBIG2Globals");if(n instanceof KA){let r=n.getBytes();i.push({data:r,start:0,end:r.length})}}i.push({data:A,start:0,end:A.length});let s=t.parseChunks(i),a=s.length;for(let n=0;n>3,c=i&7,l=e.length;t=new Uint32Array(t.buffer);let h=0;for(let C=0;C>2,g=new Uint32Array(e.buffer,A,r);if(Ot.isLittleEndian){for(;n>>24|I<<8|4278190080,t[i+2]=I>>>16|c<<16|4278190080,t[i+3]=c>>>8|4278190080}for(let o=n*4,I=e.length;o>>8|255,t[i+2]=I<<16|c>>>16|255,t[i+3]=c<<8|255}for(let o=n*4,I=e.length;o0&&!e[a-1];)a--;let n=[{children:[],index:0}],r=n[0],g;for(i=0;i0;)r=n.pop();for(r.index++,n.push(r);n.length<=i;)n.push(g={children:[],index:0}),r.children[r.index]=g.children,r=g;t++}i+10)return C--,h>>C&1;if(h=e[A++],h===255){let CA=e[A++];if(CA){if(CA===220&&o){A+=2;let N=we(e,A);if(A+=2,N>0&&N!==t.scanLines)throw new Fa("Found DNL marker (0xFFDC) while parsing scan data",N)}else if(CA===217){if(o){let N=Y*(t.precision===8?8:0);if(N>0&&Math.round(t.scanLines/N)>=5)throw new Fa("Found EOI marker (0xFFD9) while parsing scan data, possibly caused by incorrect `scanLines` parameter",N)}throw new yr("Found EOI marker (0xFFD9) while parsing scan data")}throw new Gt(`unexpected marker ${(h<<8|CA).toString(16)}`)}}return C=7,h>>>7}function Q(CA){let N=CA;for(;;){switch(N=N[B()],typeof N){case"number":return N;case"object":continue}throw new Gt("invalid huffman sequence")}}function E(CA){let N=0;for(;CA>0;)N=N<<1|B(),CA--;return N}function f(CA){if(CA===1)return B()===1?1:-1;let N=E(CA);return N>=1<>4;if(X===0){if(W<15)break;T+=16;continue}T+=W;let G=Qa[T];CA.blockData[N+G]=f(X),T++}}function d(CA,N){let H=Q(CA.huffmanTableDC),q=H===0?0:f(H)<0){p--;return}let H=a,q=n;for(;H<=q;){let T=Q(CA.huffmanTableAC),$=T&15,X=T>>4;if($===0){if(X<15){p=E(X)+(1<>4,$===0)T<15?(p=E(T)+(1<0){for(gA=0;gA0?"unexpected":"excessive";k(`decodeScan - ${N} MCU data, current marker is: ${V.invalid}`),A=V.offset}if(V.marker>=65488&&V.marker<=65495)A+=2;else break}return A-l}function bd(e,A,t){let i=e.quantizationTable,s=e.blockData,a,n,r,g,o,I,c,l,h,C,B,Q,E,f,u,d,x;if(!i)throw new Gt("missing required Quantization Table.");for(let p=0;p<64;p+=8){if(h=s[A+p],C=s[A+p+1],B=s[A+p+2],Q=s[A+p+3],E=s[A+p+4],f=s[A+p+5],u=s[A+p+6],d=s[A+p+7],h*=i[p],!(C|B|Q|E|f|u|d)){x=v0*h+512>>10,t[p]=x,t[p+1]=x,t[p+2]=x,t[p+3]=x,t[p+4]=x,t[p+5]=x,t[p+6]=x,t[p+7]=x;continue}C*=i[p+1],B*=i[p+2],Q*=i[p+3],E*=i[p+4],f*=i[p+5],u*=i[p+6],d*=i[p+7],a=v0*h+128>>8,n=v0*E+128>>8,r=B,g=u,o=Yn*(C-d)+128>>8,l=Yn*(C+d)+128>>8,I=Q<<4,c=f<<4,a=a+n+1>>1,n=a-n,x=r*Jn+g*Hn+128>>8,r=r*Hn-g*Jn+128>>8,g=x,o=o+c+1>>1,c=o-c,l=l+I+1>>1,I=l-I,a=a+g+1>>1,g=a-g,n=n+r+1>>1,r=n-r,x=o*Ln+l*Mn+2048>>12,o=o*Mn-l*Ln+2048>>12,l=x,x=I*Un+c*Gn+2048>>12,I=I*Gn-c*Un+2048>>12,c=x,t[p]=a+l,t[p+7]=a-l,t[p+1]=n+c,t[p+6]=n-c,t[p+2]=r+I,t[p+5]=r-I,t[p+3]=g+o,t[p+4]=g-o}for(let p=0;p<8;++p){if(h=t[p],C=t[p+8],B=t[p+16],Q=t[p+24],E=t[p+32],f=t[p+40],u=t[p+48],d=t[p+56],!(C|B|Q|E|f|u|d)){x=v0*h+8192>>14,x<-2040?x=0:x>=2024?x=255:x=x+2056>>4,s[A+p]=x,s[A+p+8]=x,s[A+p+16]=x,s[A+p+24]=x,s[A+p+32]=x,s[A+p+40]=x,s[A+p+48]=x,s[A+p+56]=x;continue}a=v0*h+2048>>12,n=v0*E+2048>>12,r=B,g=u,o=Yn*(C-d)+2048>>12,l=Yn*(C+d)+2048>>12,I=Q,c=f,a=(a+n+1>>1)+4112,n=a-n,x=r*Jn+g*Hn+2048>>12,r=r*Hn-g*Jn+2048>>12,g=x,o=o+c+1>>1,c=o-c,l=l+I+1>>1,I=l-I,a=a+g+1>>1,g=a-g,n=n+r+1>>1,r=n-r,x=o*Ln+l*Mn+2048>>12,o=o*Mn-l*Ln+2048>>12,l=x,x=I*Un+c*Gn+2048>>12,I=I*Gn-c*Un+2048>>12,c=x,h=a+l,d=a-l,C=n+c,u=n-c,B=r+I,f=r-I,Q=g+o,E=g-o,h<16?h=0:h>=4080?h=255:h>>=4,C<16?C=0:C>=4080?C=255:C>>=4,B<16?B=0:B>=4080?B=255:B>>=4,Q<16?Q=0:Q>=4080?Q=255:Q>>=4,E<16?E=0:E>=4080?E=255:E>>=4,f<16?f=0:f>=4080?f=255:f>>=4,u<16?u=0:u>=4080?u=255:u>>=4,d<16?d=0:d>=4080?d=255:d>>=4,s[A+p]=h,s[A+p+8]=C,s[A+p+16]=B,s[A+p+24]=Q,s[A+p+32]=E,s[A+p+40]=f,s[A+p+48]=u,s[A+p+56]=d}}function Dd(e,A){let t=A.blocksPerLine,i=A.blocksPerColumn,s=new Int16Array(64);for(let a=0;a=i)return null;let a=we(e,A);if(a>=65472&&a<=65534)return{invalid:null,marker:a,offset:A};let n=we(e,s);for(;!(n>=65472&&n<=65534);){if(++s>=i)return null;n=we(e,s)}return{invalid:a.toString(16),marker:n,offset:s}}var uI=class{constructor({decodeTransform:A=null,colorTransform:t=-1}={}){this._decodeTransform=A,this._colorTransform=t}parse(A,{dnlScanLines:t=null}={}){function i(){let B=we(A,a);a+=2;let Q=a+B-2,E=fI(A,Q,a);E!=null&&E.invalid&&(k("readDataBlock - incorrect length, current marker is: "+E.invalid),Q=E.offset);let f=A.subarray(a,Q);return a+=f.length,f}function s(B){let Q=Math.ceil(B.samplesPerLine/8/B.maxH),E=Math.ceil(B.scanLines/8/B.maxV);for(let f of B.components){let u=Math.ceil(Math.ceil(B.samplesPerLine/8)*f.h/B.maxH),d=Math.ceil(Math.ceil(B.scanLines/8)*f.v/B.maxV),x=Q*f.h,m=64*(E*f.v)*(x+1);f.blockData=new Int16Array(m),f.blocksPerLine=u,f.blocksPerColumn=d}B.mcusPerLine=Q,B.mcusPerColumn=E}let a=0,n=null,r=null,g,o,I=0,c=[],l=[],h=[],C=we(A,a);if(a+=2,C!==65496)throw new Gt("SOI not found");C=we(A,a),a+=2;A:for(;C!==65497;){let B,Q,E;switch(C){case 65504:case 65505:case 65506:case 65507:case 65508:case 65509:case 65510:case 65511:case 65512:case 65513:case 65514:case 65515:case 65516:case 65517:case 65518:case 65519:case 65534:let f=i();C===65504&&f[0]===74&&f[1]===70&&f[2]===73&&f[3]===70&&f[4]===0&&(n={version:{major:f[5],minor:f[6]},densityUnits:f[7],xDensity:f[8]<<8|f[9],yDensity:f[10]<<8|f[11],thumbWidth:f[12],thumbHeight:f[13],thumbData:f.subarray(14,14+3*f[12]*f[13])}),C===65518&&f[0]===65&&f[1]===100&&f[2]===111&&f[3]===98&&f[4]===101&&(r={version:f[5]<<8|f[6],flags0:f[7]<<8|f[8],flags1:f[9]<<8|f[10],transformCode:f[11]});break;case 65499:let u=we(A,a);a+=2;let d=u+a-2,x;for(;a>4)if(_>>4===1)for(Q=0;Q<64;Q++)x=Qa[Q],tA[x]=we(A,a),a+=2;else throw new Gt("DQT - invalid table spec");else for(Q=0;Q<64;Q++)x=Qa[Q],tA[x]=A[a++];c[_&15]=tA}break;case 65472:case 65473:case 65474:if(g)throw new Gt("Only single frame JPEGs supported");a+=2,g={},g.extended=C===65473,g.progressive=C===65474,g.precision=A[a++];let p=we(A,a);a+=2,g.scanLines=t||p,g.samplesPerLine=we(A,a),a+=2,g.components=[],g.componentIds={};let m=A[a++],D=0,S=0;for(B=0;B>4,IA=A[a+1]&15;D>4?l:h)[_&15]=wd(tA,QA)}break;case 65501:a+=2,o=we(A,a),a+=2;break;case 65498:let Y=++I===1&&!t;a+=2;let U=A[a++],K=[];for(B=0;B>4],IA.huffmanTableAC=l[QA&15],K.push(IA)}let Z=A[a++],AA=A[a++],gA=A[a++];try{let _=yd(A,a,g,K,o,Z,AA,gA>>4,gA&15,Y);a+=_}catch(_){if(_ instanceof Fa)return k(`${_.message} -- attempting to re-parse the JPEG image.`),this.parse(A,{dnlScanLines:_.scanLines});if(_ instanceof yr){k(`${_.message} -- ignoring the rest of the image data.`);break A}throw _}break;case 65500:a+=4;break;case 65535:A[a]!==255&&a--;break;default:let R=fI(A,a-2,a-3);if(R!=null&&R.invalid){k("JpegImage.parse - unexpected data, current marker is: "+R.invalid),a=R.offset;break}if(!R||a>=A.length-1){k("JpegImage.parse - reached the end of the image data without finding an EOI marker (0xFFD9).");break A}throw new Gt("JpegImage.parse - unknown marker: "+C.toString(16))}C=we(A,a),a+=2}if(!g)throw new Gt("JpegImage.parse - no frame data found.");this.width=g.samplesPerLine,this.height=g.scanLines,this.jfif=n,this.adobe=r,this.components=[];for(let B of g.components){let Q=c[B.quantizationId];Q&&(B.quantizationTable=Q),this.components.push({index:B.index,output:Dd(g,B),scaleX:B.h/g.maxH,scaleY:B.v/g.maxV,blocksPerLine:B.blocksPerLine,blocksPerColumn:B.blocksPerColumn})}this.numComponents=this.components.length}_getLinearizedBlockData(A,t,i=!1){let s=this.width/A,a=this.height/t,n,r,g,o,I,c,l,h,C,B,Q=0,E,f=this.components.length,u=A*t*f,d=new Uint8ClampedArray(u),x=new Uint32Array(A),p=4294967288,m;for(l=0;l>8)+D[C+1];return d}get _isColorConversionNeeded(){return this.adobe?!!this.adobe.transformCode:this.numComponents===3?this._colorTransform===0?!1:!(this.components[0].index===82&&this.components[1].index===71&&this.components[2].index===66):this._colorTransform===1}_convertYccToRgb(A){let t,i,s;for(let a=0,n=A.length;a4)throw new Gt("Unsupported color mode");let n=this._getLinearizedBlockData(A,t,a);if(this.numComponents===1&&(i||s)){let r=n.length*(i?4:3),g=new Uint8ClampedArray(r),o=0;if(i)pd(n,new Uint32Array(g.buffer));else for(let I of n)g[o++]=I,g[o++]=I,g[o++]=I;return g}else if(this.numComponents===3&&this._isColorConversionNeeded){if(i){let r=new Uint8ClampedArray(n.length/3*4);return this._convertYccToRgba(n,r)}return this._convertYccToRgb(n)}else if(this.numComponents===4){if(this._isColorConversionNeeded)return i?this._convertYcckToRgba(n):s?this._convertYcckToRgb(n):this._convertYcckToCmyk(n);if(i)return this._convertCmykToRgba(n);if(s)return this._convertCmykToRgb(n)}return n}},Ra=class extends Me{constructor(A,t,i){super(t),this.stream=A,this.dict=A.dict,this.maybeLength=t,this.params=i}get bytes(){return nA(this,"bytes",this.stream.getBytes(this.maybeLength))}ensureBuffer(A){}readBlock(){this.decodeImage()}decodeImage(A){if(this.eof)return this.buffer;A||(A=this.bytes);for(let n=0,r=A.length-1;n0&&(A=A.subarray(n));break}let t={decodeTransform:void 0,colorTransform:void 0},i=this.dict.getArray("D","Decode");if((this.forceRGBA||this.forceRGB)&&Array.isArray(i)){let n=this.dict.get("BPC","BitsPerComponent")||8,r=i.length,g=new Int32Array(r),o=!1,I=(1<{var A;var e=typeof document!="undefined"?(A=document.currentScript)==null?void 0:A.src:void 0;return function(t={}){var i,s=t,a,n,r=new Promise((z,rA)=>{a=z,n=rA}),g=!0,o=!1;s.decode=function(z,{numComponents:rA=4,isIndexedColormap:xA=!1,smaskInData:RA=!1}){let YA=z.length,ae=s._malloc(YA);s.HEAPU8.set(z,ae);let ee=s._jp2_decode(ae,YA,rA>0?rA:0,!!xA,!!RA);if(s._free(ae),ee){let{errorMessages:te}=s;return te?(delete s.errorMessages,te):"Unknown error"}let{imageData:Oe}=s;return s.imageData=null,Oe};var I=Object.assign({},s),c=[],l="./this.program",h=(z,rA)=>{throw rA},C="",B,Q,E;(g||o)&&(o?C=self.location.href:typeof document!="undefined"&&document.currentScript&&(C=document.currentScript.src),e&&(C=e),C.startsWith("blob:")?C="":C=C.substr(0,C.replace(/[?#].*/,"").lastIndexOf("/")+1),B=z=>{var rA=new XMLHttpRequest;return rA.open("GET",z,!1),rA.send(null),rA.responseText},o&&(E=z=>{var rA=new XMLHttpRequest;return rA.open("GET",z,!1),rA.responseType="arraybuffer",rA.send(null),new Uint8Array(rA.response)}),Q=(z,rA,xA)=>{fetch(z,{credentials:"same-origin"}).then(RA=>RA.ok?RA.arrayBuffer():Promise.reject(new Error(RA.status+" : "+RA.url))).then(rA,xA)});var f=s.print||console.log.bind(console),u=s.printErr||console.error.bind(console);Object.assign(s,I),I=null,s.arguments&&(c=s.arguments),s.thisProgram&&(l=s.thisProgram),s.quit&&(h=s.quit);var d;s.wasmBinary&&(d=s.wasmBinary);function x(z){for(var rA=atob(z),xA=new Uint8Array(rA.length),RA=0;RAz.startsWith(W);function BA(){var z="data:application/octet-stream;base64,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A0kNAAsLAkAgA0F8cSIEQcAASQ0AIAIgBEFAaiIFSw0AA0AgAiABKAIANgIAIAIgASgCBDYCBCACIAEoAgg2AgggAiABKAIMNgIMIAIgASgCEDYCECACIAEoAhQ2AhQgAiABKAIYNgIYIAIgASgCHDYCHCACIAEoAiA2AiAgAiABKAIkNgIkIAIgASgCKDYCKCACIAEoAiw2AiwgAiABKAIwNgIwIAIgASgCNDYCNCACIAEoAjg2AjggAiABKAI8NgI8IAFBQGshASACQUBrIgIgBU0NAAsLIAIgBE8NAQNAIAIgASgCADYCACABQQRqIQEgAkEEaiICIARJDQALDAELIANBBEkEQCAAIQIMAQsgACADQQRrIgRLBEAgACECDAELIAAhAgNAIAIgAS0AADoAACACIAEtAAE6AAEgAiABLQACOgACIAIgAS0AAzoAAyABQQRqIQEgAkEEaiICIARNDQALCyACIANJBEADQCACIAEtAAA6AAAgAUEBaiEBIAJBAWoiAiADRw0ACwsgAAswAQF/AkAgAEUNACABRQ0AQQggACABbCIBECUiAARAIABBACABEBUaCyAAIQILIAILEQAgAEUEQEEADwtBCCAAECUL8gICAn8BfgJAIAJFDQAgACABOgAAIAAgAmoiA0EBayABOgAAIAJBA0kNACAAIAE6AAIgACABOgABIANBA2sgAToAACADQQJrIAE6AAAgAkEHSQ0AIAAgAToAAyADQQRrIAE6AAAgAkEJSQ0AIABBACAAa0EDcSIEaiIDIAFB/wFxQYGChAhsIgE2AgAgAyACIARrQXxxIgRqIgJBBGsgATYCACAEQQlJDQAgAyABNgIIIAMgATYCBCACQQhrIAE2AgAgAkEMayABNgIAIARBGUkNACADIAE2AhggAyABNgIUIAMgATYCECADIAE2AgwgAkEQayABNgIAIAJBFGsgATYCACACQRhrIAE2AgAgAkEcayABNgIAIAQgA0EEcUEYciIEayICQSBJDQAgAa1CgYCAgBB+IQUgAyAEaiEBA0AgASAFNwMYIAEgBTcDECABIAU3AwggASAFNwMAIAFBIGohASACQSBrIgJBH0sNAAsLIAALJwEBfyMAQRBrIgMkACADIAI2AgwgACABIAJBAEEAEGsgA0EQaiQAC+gFAQl/IAFFBEBBAA8LAn8gAEUE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ACAEIE5BCmpBAiAFEBpBAkcEQCAFQQFBAiAAKAK4ARtBlhJBABAPIAAoArgBRSFnDAELIE5BCmogTkEMakECEBEgTigCDCIBQZD/A0YNACABQdn/A0YEQCAAQYACNgIIIABBADYCzAEMAQsgBCkDCCKGAVAEfkIABSCGASAEKQM4fQtQBEAgAEHAADYCCCAFQQJBrD9BABAPDAELQQAhZyAFQQFB7D5BABAPCyBOQRBqJAAgZwsLACAABEAgABAQCwu0AQEBfyAAKAIMRQRAIAIgACgCJCABEQMADwsCQEEIEBQiA0UNACADIAI2AgQgAyABNgIAQQgQFCIBRQRAIAMQEA8LIAEgAzYCACAAIAAoAgRB5ABsIgI2AigDQCAAKAIYIAJKDQALIAEgACgCFDYCBCAAIAE2AhQgACAAKAIYQQFqNgIYIAAoAhwiAUUNACABKAIAQQA2AgggACABKAIENgIcIAAgACgCIEEBazYCICABEBALC/oCAQR/AkAgAEUNACAAKAKsKCIBBEAgACgCqCgiAgRAQQAhAQNAIAAoAqwoIAFBA3RqKAIAIgMEQCADEBAgACgCqCghAgsgAUEBaiIBIAJJDQALIAAoAqwoIQELIABBADYCqCggARAQIABBADYCrCgLIAAoArQoIgEEQCABEBAgAEEANgK0KAsgACgC0CsiAQRAIAEQECAAQQA2AtArCyAAKALsKyIBBEAgARAQIABBADYC7CsLIAAoAugrIgEEQCABEBAgAEEANgLoKwsgACgC/CsiAQRAIAEQECAAQQA2AoQsIABCADcC/CsLIAAoAvArIgEEQCAAKAL0KyIDBH9BACECA0AgASgCDCIEBEAgBBAQIAFBADYCDCAAKAL0KyEDCyABQRRqIQEgAkEBaiICIANJDQALIAAoAvArBSABCxAQIABBADYC8CsLIAAoAuQrIgEEQCABEBAgAEEANgLkKwsgACgC3CsiAUUNACABEBAgAEIANwLcKwsLyAcCEX8BfiAAKAIQIghBIE8EQCAAKQMIpw8LAkAgACgCFCIDQQROBEAgACgCACICQQNrKAIAIQEgACADQQRrIgM2AhQgACACQQRrNgIADAELIANBAEwEQAwBCyADQQFxIQ0gACgCACECAkAgA0EBRgRAQRghBAwBCyADQf7///8HcSEJQRghBANAIAAgAkEB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IABBADYCiAEgACgCZBAQIABBADYCZCAALQC8AUECcUUEQCAAKAKoARAQCyAAQdAAakEAQfAAEBUaIAAoAsABEDIgAEEANgLAASAAKALEARAyIABBADYCwAEgACgCyAEiAQRAIAEoAhwiAgRAIAIQECABQQA2AhwLIAEoAigiAgRAIAEoAiQEQANAIAIgBUEobCIDaigCJCIEBEAgBBAQIAEoAigiAiADakEANgIkCyACIANqKAIQIgQEQCAEEBAgASgCKCICIANqQQA2AhALIAIgA2ooAhgiBARAIAQQECABKAIoIgIgA2pBADYCGAsgBUEBaiIFIAEoAiRJDQALCyACEBAgAUEANgIoCyABEBALIABBADYCyAEgACgCSBAhIABBADYCSCAAKAJMECEgAEEANgJMIAAoAtQBIgMEQAJAIAMoAghFDQAgAygCDARAIANBADYCKANAIAMoAhhBAEoNAAsLIANBATYCECADKAIAEBAgAygCHCICRQ0AA0AgAigCBCEBIAIQECADIAE2AhwgASICDQALCyADKAIkIgIEQCACKAIEIgVBAEoEQEEAIQEDQCACKAIAIAFBDGxqIgQoAggiBgRAIAQoAgQgBhECACACKAIEIQULIAFBAWoiASAFSA0ACwsgAigCABAQIAIQEAsgAxAQCyAAQQA2AtQBIAAQEAsL5gMCCH8EfiAAKAIUKAIAKAIUIAFBzABsaiIJKAIMIgggACgCGCgCGCABQTRsaiIKNQIEIhBCAX0iEiAANQI8fCAQgKciCyAIIAtJGyEMIAkoAggiCCAKNQIAIhFCAX0iEyAANQI4fCARgKciCiAIIApJGyEKIAkoAgQiCCASIAA1AjR8IBCApyILIAggC0sbIQsgCSgCACIIIBMgADUCMHwgEYCnIg0gCCANSxshDUEAIQggACgCICgC0CsgAUG4CGxqKAIUIQ4CQCAJKAIUQQAgAmtBfyACG2oiAkUEQCAKIQAgDSEIIAshAQwBCyADQQFxIAJBAWsiD3QiCSANSQRAIA0gCWutQn8gAq0iEIZCf4V8IBCIpyEIC0EAIQBBACEBIANBAXYgD3QiAyALSQRAIAsgA2utQn8gAq0iEIZCf4V8IBCIpyEBCyAJIApJBEAgCiAJa61CfyACrSIQhkJ/hXwgEIinIQALIAMgDE8EQEEAIQwMAQsgDCAD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IABBADYCPCAAQucHNwI0IABBADYCLCAAQucHNwIkIABBADYCHCAAQucHNwIUIABBADYCDCAAQucHNwIEIABBQGshACACQQRqIgIgA0cNAAsLIAFBA3EiAUUNAEEAIQIDQCAAQQA2AgwgAELnBzcCBCAAQRBqIQAgAkEBaiICIAFHDQALCwv7BQEQfyMAQYACayIIJAACf0EBQRQQEyIGRQRAIAJBAUH0MEEAEA9BAAwBCyAGIAE2AgQgBiAANgIAIAggATYCACAIIAA2AoABA0AgCCAFIg1BAWoiBUECdCIHaiABQQFqQQJtIgM2AgAgCEGAAWogB2ogAEEBakECbSIHNgIAIAQgACABbCIJaiEEIAMhASAHIQAgCUEBSw0ACyAGIAQ2AgggBEUEQCAGEBBBAAwBCyAGIARBEBATIgM2AgwgA0UEQCACQQFB2hpBABAPIAYQEEEADAELIAYgBigCCCILQQR0NgIQIAMhACANBEAgAyAGKAIEIAYoAgBsQQR0aiIEIQEDQAJAIAggDkECdCICaigCACIJQQBMDQAgCUEBayEMQQAhBwJAIAhBgAFqIAJqKAIAIgJBAEwEQEEAIQUgCUEBRwRAIAlB/v///wdxIQoDQCAFIAxGIQ8gBUECaiEFIAEgBCAPGyIEIQEgB0ECaiIHIApHDQALCyAJQQFxDQEgBCEBDAILA0AgBCEFIAIhBANAAkAgACABNgIAIARBAUYEQCAAQRBqIQAgAUEQaiEBDAELIAAgATYCECABQRBqIQEgAEEgaiEAIARBAkohECAEQQJrIQQgEA0BCwsgASAFIAJBBHRqIAcgByAMRnJBAXEiChshBCABIAUgChshASAHQQFqIgcgCUcNAAsMAQsgASAEIAJBBHRqIAUgBSAMRnJBAXEiBRshESABIAQgBRshASARIQQLIA5BAWoiDiANRw0ACwsgAEEANgIAAkAgC0UNACALQQRPBEAgC0F8cSEAQQAhAQNAIANBADYCPCADQucHNwI0IANBADYCLCADQucHNwIkIANBADYCHCADQucHNwIUIANBADYCDCADQucHNwIEIANBQGshAyABQQRqIgEgAEcNAAsLIAtBA3EiAEUNAEEAIQEDQCADQQA2AgwgA0LnBzcCBCADQRBqIQMgAUEBaiIBIABHDQALCyAGCyESIAhBgAJqJAAgEgtTAQF/An8gAC0ADEH/AUYEQCAAQoD+g4DwADcCDEEAIAAoAggiASAAKAIETw0BGiAAIAFBAWo2AgggACABLQAAQYD+A3I2AgwLIABBADYCEEEBCwt+AgF/AX4gAL0iA0I0iKdB/w9xIgJB/w9HBHwgAkUEQCABIABEAAAAAAAAAABhBH9BAAUgAEQAAAAAAADwQ6IgARBlIQAgASgCAEFAags2AgAgAA8LIAEgAkH+B2s2AgAgA0L/////////h4B/g0KAgICAgICA8D+EvwUgAAsLSQEBfwJAQQFBLBATIgEEQCABQQA2AhACQCAAQQBMBEAgAUEBQQgQEyIANgIkIABFDQEMAwsgAUEANgIMCyABEBALQQAhAQsgAQuRAgAgAEUEQEEADwsCfwJAIAFB/wBNDQACQEGU0AEoAgAoAgBFBEAgAUGAf3FBgL8DRg0CDAELIAFB/w9NBEAgACABQT9xQYABcjoAASAAIAFBBnZBwAFyOgAAQQIMAwsgAUGAQHFBgMADRyABQYCwA09xRQRAIAAgAUE/cUGAAXI6AAIgACABQQx2QeABcjoAACAAIAFBBnZBP3FBgAFyOgABQQMMAwsgAUGAgARrQf//P00EQCAAIAFBP3FBgAFyOgADIAAgAUESdkHwAXI6AAAgACABQQZ2QT9xQYABcjoAAiAAIAFBDHZBP3FBgAFyOgABQQQMAwsLQZTHAUEZNgIAQX8MAQsgACABOgAAQQELC7wCAAJAAkACQAJAAkACQAJAAkACQAJAAkAgAUEJaw4SAAgJCggJAQIDBAoJCgoICQUGBwsgAiACKAIAIgFBBGo2AgAgACABKAIANgIADwsgAiACKAIAIgFBBGo2AgAgACABMgEANwMADwsgAiACKAIAIgFBBGo2AgAgACABMwEANwMADwsgAiACKAIAIgFBBGo2AgAgACABMAAANwMADwsgAiACKAIAIgFBBGo2AgAgACABMQAANwMADwsgAiACKAIAQQdqQXhxIgFBCGo2AgAgACABKwMAOQMADwsgACACIAMRAwALDwsgAiACKAIAIgFBBGo2AgAgACABNAIANwMADwsgAiACKAIAIgFBBGo2AgAgACABNQIANwMADwsgAiACKAIAQQdqQXhxIgFBCGo2AgAgACABKQMANwMAC3MBBn8gACgCACIDLAAAQTBrIgFBCUsE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AyAAQRh2NgIUIAMgBDYCECADIABBCHZB/wFxNgIcIAMgAEEQdkH/AXE2AhggAkEBQc31ACADQRBqEA8MBwsgBSAITQRAIAYhBAwECyAFIQggBiAFEBciBA0DIAYQECACQQFB/w9BABAPQQAMBwsgBEECcUUEQCACQQFBwg9BABAPIAYQEEEADAcLIAAgBEH/////B3I2AmQgASAHIAVrrSINIAIgASgCKBEIACANUQ0DIAAtAGRBCHFFDQEgAkECQZIcQQAQDwsgBhAQQQEMBQsgAkEBQZIcQQAQDyAGEBBBAAwECyABIAQgBSACEBogBUcEQCACQQFBxBxBABAPIAQQEEEADAQLIAAgBCIGIAUgAiAKKAIEEQEADQALIAQQEEEADAILIAJBAUGiJUEAEA9BAAwBCyAGEBBBAAshDCADQfAAaiQAIAwL5gEBBn8gACgCCEE1IAIQJARAAkAgACgCCCIGKAIAIQMgBigCCCEFAkACQAJ/AkAgAwRAQQEhBCADQQFxIQcgA0EBRw0BQQAMAgsgBkEANgIADAILIANBfnEhAwNAAn9BACAERQ0AGkEAIAAgASACIAUoAgARAABFDQAaIAAgASACIAUoAgQRAABBAEcLIQQgBUEIaiEFIAhBAmoiCCADRw0ACyAERQshAyAHBEAgAw0CIAAgASACIAUoAgARAABBAEchBAsgBkEANgIAIARFDQILIAAoAgAaQQEPCyAGQQA2AgALC0EACwoAIAAoAgAaQQALFAAgACgCACIABEAgACABNgK4AQsLIQAgACgCACABEFMgAEEAOgB8IAAgASgCuEBBAXE2AoABCzIAIAJFBEBBAA8LIAAoAgAgASACIAMQSEUEQCADQQFBqS9BABAPQQAPCyAAIAIgAxBxC2kCAn8BfCMAQRBrIgMkACACBEADQCAAIANBCGoQRCABAn8gAysDCCIFmUQAAAAAAADgQWMEQCAFqgwBC0GAgICAeAs2AgAgAUEEaiEBIABBCGohACAEQQFqIgQgAkcNAAsLIANBEGokAAuEAQICfwF9IwBBEGsiAyQAIAIEQANAIAMgAC0AADoADyADIAAtAAE6AA4gAyAALQACOgANIAMgAC0AAzoADCABAn8gAyoCDCIFi0MAAABPXQRAIAWoDAELQYCAgIB4CzYCACABQQRqIQEgAEEEaiEAIARBAWoiBCACRw0ACwsgA0EQaiQAC0sBAn8jAEEQayIDJAAgAgRAA0AgACADQQxqQQQQESABIAMoAgw2AgAgAUEEaiEBIABBBGohACAEQQFqIgQgAkcNAAsLIANBEGokAAtLAQJ/IwBBEGsiAyQAIAIEQANAIAAgA0EMakECEBEgASADKAIMNgIAIAFBBGohASAAQQJqIQAgBEEBaiIEIAJHDQALCyADQRBqJAALSgECfyMAQRBrIgMkACACBEADQCAAIANBCGoQRCABIAMrAwi2OAIAIAFBBGohASAAQQhqIQAgBEEBaiIEIAJHDQALCyADQRBqJAALaAECfyMAQRBrIgMkACACBEADQCADIAAtAAA6AA8gAyAALQABOgAOIAMgAC0AAjoADSADIAAtAAM6AAwgASADKgIMOAIAIAFBBGohASAAQQRqIQAgBEEBaiIEIAJHDQALCyADQRBqJAALTAECfyMAQRBrIgMkACACBEADQCAAIANBDGpBBBARIAEgAygCDLM4AgAgAUEEaiEBIABBBGohACAEQQFqIgQgAkcNAAsLIANBEGokAAtMAQJ/IwBBEGsiAyQAIAIEQANAIAAgA0EMakECEBEgASADKAIMszgCACABQQRqIQEgAEECaiEAIARBAWoiBCACRw0ACwsgA0EQaiQAC6oIAg1/AXsjAEEQayIIJAACfyAAKAIIQRBGBEAgACgCnAEgACgCzAFBjCxsagwBCyAAKAIMCyEJAkAgAkUEQCADQQFB8B9BABAPDAELIAAoAkghBkEBIQQgASAIQQhqQQEQESAIKAIIIgVBAk8EQCADQQJBxsgAQQAQDwwBCyACIAVBAWpHBEBBACEEIANBAkHwH0EAEA8MAQsCQCAGKAIQIgNFDQAgCSgC0CshBCADQQhPBEAgA0F4cSEGQQAhAgNAIARBADYCvEMgBEEANgKEOyAEQQA2AswyIARBADYClCogBEEANgLcISAEQQA2AqQZIARBADYC7BAgBEEANgK0CCAEQcDDAGohBCACQQhqIgIgBkcNAAsLIANBB3EiA0UNAEEAIQIDQCAEQQA2ArQIIARBuAhqIQQgAkEBaiICIANHDQALCyAJKALoKyICBH8gAhAQIAlBADYC6CsgCCgCCAUgBQtFBEBBASEEDAELA0AgAUEBaiIBIAhBDGpBARARAkAgCSgCgCxF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KT0ALgAobnVsbCkAKCVkLCVkKSAAJXN9CgAJCSB9CgBbREVWXSBEdW1wIGFuIGltYWdlX2NvbXBfaGVhZGVyIHN0cnVjdCB7CgBbREVWXSBEdW1wIGFuIGltYWdlX2hlYWRlciBzdHJ1Y3QgewoASW1hZ2UgaW5mbyB7CgAJIGRlZmF1bHQgdGlsZSB7CgAlcwkgY29tcG9uZW50ICVkIHsKAAkJIGNvbXAgJWQgewoACSBUaWxlIGluZGV4OiB7CgAJIE1hcmtlciBsaXN0OiB7CgBDb2Rlc3RyZWFtIGluZGV4IGZyb20gbWFpbiBoZWFkZXI6IHsKAENvZGVzdHJlYW0gaW5mbyBmcm9tIG1haW4gaGVhZGVyOiB7CgBTdHJlYW0gZXJyb3Igd2hpbGUgcmVhZGluZyBKUDIgSGVhZGVyIGJveAoARm91bmQgYSBtaXNwbGFjZWQgJyVjJWMlYyVjJyBib3ggb3V0c2lkZSBqcDJoIGJveAoATWFsZm9ybWVkIEpQMiBmaWxlIGZvcm1hdDogZmlyc3QgYm94IG11c3QgYmUgSlBFRyAyMDAwIHNpZ25hdHVyZSBib3gKAE1hbGZvcm1lZCBKUDIgZmlsZSBmb3JtYXQ6IHNlY29uZCBib3ggbXVzdCBiZSBmaWxlIHR5cGUgYm94CgBOb3QgZW5vdWdoIG1lbW9yeSB0byBoYW5kbGUganBlZzIwMDAgYm94CgBOb3QgZW5vdWdoIG1lbW9yeSB3aXRoIEZUWVAgQm94CgBBIG1hcmtlciBJRCB3YXMgZXhwZWN0ZWQgKDB4ZmYtLSkgaW5zdGVhZCBvZiAlLjh4CgAJCSBtY3Q9JXgKAAkJCSBjYmxrc3R5PSUjeAoACQkJIGNzdHk9JSN4CgAJCSBwcmc9JSN4CgBJbnRlZ2VyIG92ZXJmbG93CgAJIHRkeD0ldSwgdGR5PSV1CgAJIHR3PSV1LCB0aD0ldQoACSB0eDA9JXUsIHR5MD0ldQoASW52YWxpZCBjb21wb25lbnQgaW5kZXg6ICV1CgBTdHJlYW0gdG9vIHNob3J0CgBNYXJrZXIgaGFuZGxlciBmdW5jdGlvbiBmYWlsZWQgdG8gcmVhZCB0aGUgbWFya2VyIHNlZ21lbnQKAE5vdCBlbm91Z2ggbWVtb3J5IGZvciBjdXJyZW50IHByZWNpbmN0IGNvZGVibG9jayBlbGVtZW50CgBFcnJvciByZWFkaW5nIFNQQ29kIFNQQ29jIGVsZW1lbnQKAEVycm9yIHJlYWRpbmcgU1FjZCBvciBTUWNjIGVsZW1lbnQKAEEgQlBDQyBoZWFkZXIgYm94IGlzIGF2YWlsYWJsZSBhbHRob3VnaCBCUEMgZ2l2ZW4gYnkgdGhlIElIRFIgYm94ICglZCkgaW5kaWNhdGUgY29tcG9uZW50cyBiaXQgZGVwdGggaXMgY29uc3RhbnQKAEVycm9yIHdpdGggU0laIG1hcmtlcjogaWxsZWdhbCB0aWxlIG9mZnNldAoASW52YWxpZCBwcmVjaW5jdAoATm90IGVub3VnaCBtZW1vcnkgdG8gaGFuZGxlIGJhbmQgcHJlY2ludHMKAEZhaWxlZCB0byBkZWNvZGUgYWxsIHVzZWQgY29tcG9uZW50cwoAU2l6ZSBvZiBjb2RlIGJsb2NrIGRhdGEgZXhjZWVkcyBzeXN0ZW0gbGltaXRzCgBTaXplIG9mIHRpbGUgZGF0YSBleGNlZWRzIHN5c3RlbSBsaW1pdHMKAENhbm5vdCB0YWtlIGluIGNoYXJnZSBtdWx0aXBsZSBNQ1QgbWFya2VycwoAQ29ycnVwdGVkIFBQTSBtYXJrZXJzCgBOb3QgZW5vdWdoIG1lbW9yeSBmb3IgdGlsZSByZXNvbHV0aW9ucwoAQ2Fubm90IHRha2UgaW4gY2hhcmdlIG11bHRpcGxlIGNvbGxlY3Rpb25zCgBJbnZhbGlkIFBDTFIgYm94LiBSZXBvcnRzIDAgcGFsZXR0ZSBjb2x1bW5zCgBXZSBkbyBub3Qgc3VwcG9ydCBST0kgaW4gZGVjb2RpbmcgSFQgY29kZWJsb2NrcwoAQ2Fubm90IGhhbmRsZSBib3ggb2YgdW5kZWZpbmVkIHNpemVzCgBDYW5ub3QgdGFrZSBpbiBjaGFyZ2UgY29sbGVjdGlvbnMgd2l0aG91dCBzYW1lIG51bWJlciBvZiBpbmRpeGVzCgBJbnZhbGlkIHRpbGVjLT53aW5feHh4IHZhbHVlcwoAQ2Fubm90IGhhbmRsZSBib3ggb2YgbGVzcyB0aGFuIDggYnl0ZXMKAENhbm5vdCBoYW5kbGUgWEwgYm94IG9mIGxlc3MgdGhhbiAxNiBieXRlcwoAQ29tcG9uZW50IGluZGV4ICV1IHVzZWQgc2V2ZXJhbCB0aW1lcwoASW52YWxpZCBQQ0xSIGJveC4gUmVwb3J0cyAlZCBlbnRyaWVzCgBOb3QgZW5vdWdoIG1lbW9yeSB0byBjcmVhdGUgVGFnLXRyZWUgbm9kZXMKAENhbm5vdCB0YWtlIGluIGNoYXJnZSBtY3QgZGF0YSB3aXRoaW4gbXVsdGlwbGUgTUNUIHJlY29yZHMKAENhbm5vdCBkZWNvZGUgdGlsZSwgbWVtb3J5IGVycm9yCgBvcGpfajJrX2FwcGx5X25iX3RpbGVfcGFydHNfY29ycmVjdGlvbiBlcnJvcgoAUHJvYmxlbSB3aXRoIHNraXBwaW5nIEpQRUcyMDAwIGJveCwgc3RyZWFtIGVycm9yCgBQcm9ibGVtIHdpdGggcmVhZGluZyBKUEVHMjAwMCBib3gsIHN0cmVhbSBlcnJvcgoAVW5rbm93biBtYXJrZXIKAE5vdCBlbm91Z2ggbWVtb3J5IHRvIGFkZCB0bCBtYXJrZXIKAE5vdCBlbm91Z2ggbWVtb3J5IHRvIGFkZCBtaCBtYXJrZXIKAE5vdCBlbm91Z2ggbWVtb3J5IHRvIHRha2UgaW4gY2hhcmdlIFNJWiBtYXJrZXIKAEVycm9yIHJlYWRpbmcgUFBUIG1hcmtlcgoATm90IGVub3VnaCBtZW1vcnkgdG8gcmVhZCBQUFQgbWFya2VyCgBFcnJvciByZWFkaW5nIFNPVCBtYXJrZXIKAEVycm9yIHJlYWRpbmcgUExUIG1hcmtlcgoARXJyb3IgcmVhZGluZyBNQ1QgbWFya2VyCgBOb3QgZW5vdWdoIG1lbW9yeSB0byByZWFkIE1DVCBtYXJrZXIKAE5vdCBlbm91Z2ggc3BhY2UgZm9yIGV4cGVjdGVkIFNPUCBtYXJrZXIKAEV4cGVjdGVkIFNPUCBtYXJrZXIKAEVycm9yIHJlYWRpbmcgTUNPIG1hcmtlcgoARXJyb3IgcmVhZGluZyBSR04gbWFya2VyCgBFcnJvciByZWFkaW5nIFBQTSBtYXJrZXIKAE5vdCBlbm91Z2ggbWVtb3J5IHRvIHJlYWQgUFBNIG1hcmtlcgoARXJyb3IgcmVhZGluZyBUTE0gbWFya2VyCgBFcnJvciByZWFkaW5nIFBMTSBtYXJrZXIKAE5vdCBlbm91Z2ggc3BhY2UgZm9yIGV4cGVjdGVkIEVQSCBtYXJrZXIKAEV4cGVjdGVkIEVQSCBtYXJrZXIKAEVycm9yIHJlYWRpbmcgQ1JHIG1hcmtlcgoAVW5rbm93biBwcm9ncmVzc2lvbiBvcmRlciBpbiBDT0QgbWFya2VyCgBVbmtub3duIFNjb2QgdmFsdWUgaW4gQ09EIG1hcmtlcgoARXJyb3IgcmVhZGluZyBDT0QgbWFya2VyCgBFcnJvciByZWFkaW5nIFFDRCBtYXJrZXIKAENycm9yIHJlYWRpbmcgQ0JEIG1hcmtlcgoARXJyb3IgcmVhZGluZyBQT0MgbWFya2VyCgBFcnJvciByZWFkaW5nIENPQyBtYXJrZXIKAEVycm9yIHJlYWRpbmcgUUNDIG1hcmtlcgoARXJyb3IgcmVhZGluZyBNQ0MgbWFya2VyCgBOb3QgZW5vdWdoIG1lbW9yeSB0byByZWFkIE1DQyBtYXJrZXIKAHJlcXVpcmVkIFNJWiBtYXJrZXIgbm90IGZvdW5kIGluIG1haW4gaGVhZGVyCgByZXF1aXJlZCBDT0QgbWFya2VyIG5vdCBmb3VuZCBpbiBtYWluIGhlYWRlcgoAcmVxdWlyZWQgUUNEIG1hcmtlciBub3QgZm91bmQgaW4gbWFpbiBoZWFkZXIKAE5vdCBlbm91Z2ggbWVtb3J5IHRvIGhhbmRsZSBqcGVnMjAwMCBmaWxlIGhlYWRlcgoATm90IGVub3VnaCBtZW1vcnkgdG8gcmVhZCBoZWFkZXIKAEVycm9yIHdpdGggSlAgU2lnbmF0dXJlIDogYmFkIG1hZ2ljIG51bWJlcgoASW4gU09UIG1hcmtlciwgVFBTb3QgKCVkKSBpcyBub3QgdmFsaWQgcmVnYXJkcyB0byB0aGUgY3VycmVudCBudW1iZXIgb2YgdGlsZS1wYXJ0ICglZCksIGdpdmluZyB1cAoASW4gU09UIG1hcmtlciwgVFBTb3QgKCVkKSBpcyBub3QgdmFsaWQgcmVnYXJkcyB0byB0aGUgcHJldmlvdXMgbnVtYmVyIG9mIHRpbGUtcGFydCAoJWQpLCBnaXZpbmcgdXAKAEluIFNPVCBtYXJrZXIsIFRQU290ICglZCkgaXMgbm90IHZhbGlkIHJlZ2FyZHMgdG8gdGhlIGN1cnJlbnQgbnVtYmVyIG9mIHRpbGUtcGFydCAoaGVhZGVyKSAoJWQpLCBnaXZpbmcgdXAKAHRpbGVzIHJlcXVpcmUgYXQgbGVhc3Qgb25lIHJlc29sdXRpb24KAE1hcmtlciBpcyBub3QgY29tcGxpYW50IHdpdGggaXRzIHBvc2l0aW9uCgBQcm9ibGVtIHdpdGggc2VlayBmdW5jdGlvbgoARXJyb3IgcmVhZGluZyBTUENvZCBTUENvYyBlbGVtZW50LCBJbnZhbGlkIGNibGt3L2NibGtoIGNvbWJpbmF0aW9uCgBJbnZhbGlkIG11bHRpcGxlIGNvbXBvbmVudCB0cmFuc2Zvcm1hdGlvbgoAQ2Fubm90IHRha2UgaW4gY2hhcmdlIGNvbGxlY3Rpb25zIG90aGVyIHRoYW4gYXJyYXkgZGVjb3JyZWxhdGlvbgoAVG9vIGxhcmdlIHZhbHVlIGZvciBOcHBtCgBOb3QgZW5vdWdoIGJ5dGVzIHRvIHJlYWQgTnBwbQoAYmFkIHBsYWNlZCBqcGVnIGNvZGVzdHJlYW0KAAkgTWFpbiBoZWFkZXIgc3RhcnQgcG9zaXRpb249JWxsaQoJIE1haW4gaGVhZGVyIGVuZCBwb3NpdGlvbj0lbGxpCgBNYXJrZXIgc2l6ZSBpbmNvbnNpc3RlbnQgd2l0aCBzdHJlYW0gbGVuZ3RoCgBUaWxlIHBhcnQgbGVuZ3RoIHNpemUgaW5jb25zaXN0ZW50IHdpdGggc3RyZWFtIGxlbmd0aAoAQ2Fubm90IHRha2UgaW4gY2hhcmdlIG11bHRpcGxlIGRhdGEgc3Bhbm5pbmcKAFdyb25nIGZsYWcKAEVycm9yIHdpdGggRlRZUCBzaWduYXR1cmUgQm94IHNpemUKAEVycm9yIHdpdGggSlAgc2lnbmF0dXJlIEJveCBzaXplCgBJbnZhbGlkIHByZWNpbmN0IHNpemUKAEluY29uc2lzdGVudCBtYXJrZXIgc2l6ZQoASW52YWxpZCBtYXJrZXIgc2l6ZQoARXJyb3Igd2l0aCBTSVogbWFya2VyIHNpemUKAE5vdCBlbm91Z2ggbWVtb3J5IHRvIGFkZCBhIG5ldyB2YWxpZGF0aW9uIHByb2NlZHVyZQoATm90IGVub3VnaCBtZW1vcnkgdG8gZGVjb2RlIHRpbGUKAEZhaWxlZCB0byBkZWNvZGUgdGhlIGNvZGVzdHJlYW0gaW4gdGhlIEpQMiBmaWxlCgBDYW5ub3QgdGFrZSBpbiBjaGFyZ2UgY29sbGVjdGlvbnMgd2l0aCBpbmRpeCBzaHVmZmxlCgBDYW5ub3QgYWxsb2NhdGUgVGllciAxIGhhbmRsZQoATm8gZGVjb2RlZCBhcmVhIHBhcmFtZXRlcnMsIHNldCB0aGUgZGVjb2RlZCBhcmVhIHRvIHRoZSB3aG9sZSBpbWFnZQoATm90IGVub3VnaCBtZW1vcnkgdG8gY3JlYXRlIFRhZy10cmVlCgBOb3QgZW5vdWdoIG1lbW9yeSB0byByZWluaXRpYWxpemUgdGhlIHRhZyB0cmVlCgBFcnJvciByZWFkaW5nIFNQQ29kIFNQQ29jIGVsZW1lbnQsIEludmFsaWQgdHJhbnNmb3JtYXRpb24gZm91bmQKAEVycm9yIHJlYWRpbmcgU1BDb2QgU1BDb2MgZWxlbWVudC4gVW5zdXBwb3J0ZWQgTWl4ZWQgSFQgY29kZS1ibG9jayBzdHlsZSBmb3VuZAoAVGlsZSBZIGNvb3JkaW5hdGVzIGFyZSBub3Qgc3VwcG9ydGVkCgBUaWxlIFggY29vcmRpbmF0ZXMgYXJlIG5vdCBzdXBwb3J0ZWQKAEltYWdlIGNvb3JkaW5hdGVzIGFib3ZlIElOVF9NQVggYXJlIG5vdCBzdXBwb3J0ZWQKAEpQRUcyMDAwIEhlYWRlciBib3ggbm90IHJlYWQgeWV0LCAnJWMlYyVjJWMnIGJveCB3aWxsIGJlIGlnbm9yZWQKAG9wal9qMmtfbWVyZ2VfcHB0KCkgaGFzIGFscmVhZHkgYmVlbiBjYWxsZWQKAE5vdCBlbm91Z2ggbWVtb3J5IHRvIHJlYWQgU09UIG1hcmtlci4gVGlsZSBpbmRleCBhbGxvY2F0aW9uIGZhaWxlZAoASWdub3JpbmcgaWhkciBib3guIEZpcnN0IGloZHIgYm94IGFscmVhZHkgcmVhZAoAWnBwdCAldSBhbHJlYWR5IHJlYWQKAFpwcG0gJXUgYWxyZWFkeSByZWFkCgBQVEVSTSBjaGVjayBmYWlsdXJlOiAlZCBzeW50aGV0aXplZCAweEZGIG1hcmtlcnMgcmVhZAoACQkJIGNibGt3PTJeJWQKAAkJCSBjYmxraD0yXiVkCgAJCQkgcW50c3R5PSVkCgAlcyBkeD0lZCwgZHk9JWQKAAkJCSByb2lzaGlmdD0lZAoACQkJIG51bWdiaXRzPSVkCgAJCSBudW1sYXllcnM9JWQKACVzIG51bWNvbXBzPSVkCgBvcGpfanAyX2FwcGx5X2NkZWY6IGFjbj0lZCwgbnVtY29tcHM9JWQKAG9wal9qcDJfYXBwbHlfY2RlZjogY249JWQsIG51bWNvbXBzPSVkCgAJCQkgbnVtcmVzb2x1dGlvbnM9JWQKAAkJIHR5cGU9JSN4LCBwb3M9JWxsaSwgbGVuPSVkCgAlcyBzZ25kPSVkCgAJCQkgcW1mYmlkPSVkCgAlcyBwcmVjPSVkCgAJCSBuYiBvZiB0aWxlLXBhcnQgaW4gdGlsZSBbJWRdPSVkCgAlcyB4MT0lZCwgeTE9JWQKACVzIHgwPSVkLCB5MD0lZAoARmFpbGVkIHRvIGRlY29kZSB0aWxlICVkLyVkCgBTZXR0aW5nIGRlY29kaW5nIGFyZWEgdG8gJWQsJWQsJWQsJWQKAEZhaWxlZCB0byBkZWNvZGUgY29tcG9uZW50ICVkCgBJbnZhbGlkIHZhbHVlIGZvciBudW1yZXNvbHV0aW9ucyA6ICVkLCBtYXggdmFsdWUgaXMgc2V0IGluIG9wZW5qcGVnLmggYXQgJWQKAEludmFsaWQgY29tcG9uZW50IG51bWJlcjogJWQsIHJlZ2FyZGluZyB0aGUgbnVtYmVyIG9mIGNvbXBvbmVudHMgJWQKAFRvbyBtYW55IFBPQ3MgJWQKAEludmFsaWQgdGlsZSBudW1iZXIgJWQKAEludmFsaWQgdGlsZSBwYXJ0IGluZGV4IGZvciB0aWxlIG51bWJlciAlZC4gR290ICVkLCBleHBlY3RlZCAlZAoARXJyb3Igd2l0aCBTSVogbWFya2VyOiBudW1iZXIgb2YgY29tcG9uZW50IGlzIGlsbGVnYWwgLT4gJWQKAE5vdCBlbm91Z2ggbWVtb3J5IGZvciBjaWVsYWIKAENhbm5vdCBhbGxvY2F0ZSBjYmxrLT5kZWNvZGVkX2RhdGEKAEZhaWxlZCB0byBtZXJnZSBQUFQgZGF0YQoARmFpbGVkIHRvIG1lcmdlIFBQTSBkYXRhCgBJbnZhbGlkIG51bWJlciBvZiBsYXllcnMgaW4gQ09EIG1hcmtlciA6ICVkIG5vdCBpbiByYW5nZSBbMS02NTUzNV0KACVzOiVkOmNvbG9yX2NteWtfdG9fcmdiCglDQU4gTk9UIENPTlZFUlQKACVzOiVkOmNvbG9yX2VzeWNjX3RvX3JnYgoJQ0FOIE5PVCBDT05WRVJUCgAlczolZDpjb2xvcl9zeWNjX3RvX3JnYgoJQ0FOIE5PVCBDT05WRVJUCgBTdHJlYW0gdG9vIHNob3J0LCBleHBlY3RlZCBTT1QKAFVuYWJsZSB0byBzZXQgdDEgaGFuZGxlIGFzIFRMUwoAU3RyZWFtIGRvZXMgbm90IGVuZCB3aXRoIEVPQwoAQ2Fubm90IGhhbmRsZSBib3ggc2l6ZXMgaGlnaGVyIHRoYW4gMl4zMgoAb3BqX3BpX25leHRfbHJjcCgpOiBpbnZhbGlkIGNvbXBubzAvY29tcG5vMQoAb3BqX3BpX25leHRfcmxjcCgpOiBpbnZhbGlkIGNvbXBubzAvY29tcG5vMQoAb3BqX3BpX25leHRfY3BybCgpOiBpbnZhbGlkIGNvbXBubzAvY29tcG5vMQoAb3BqX3BpX25leHRfcGNybCgpOiBpbnZhbGlkIGNvbXBubzAvY29tcG5vMQoAb3BqX3BpX25leHRfcnBjbCgpOiBpbnZhbGlkIGNvbXBubzAvY29tcG5vMQoAb3BqX3QxX2RlY29kZV9jYmxrKCk6IHVuc3VwcG9ydGVkIGJwbm9fcGx1c19vbmUgPSAlZCA+PSAzMQoARmFpbGVkIHRvIGRlY29kZSB0aWxlIDEvMQoASW5zdWZmaWNpZW50IGRhdGEgZm9yIENNQVAgYm94LgoATmVlZCB0byByZWFkIGEgUENMUiBib3ggYmVmb3JlIHRoZSBDTUFQIGJveC4KAEluc3VmZmljaWVudCBkYXRhIGZvciBDREVGIGJveC4KAE51bWJlciBvZiBjaGFubmVsIGRlc2NyaXB0aW9uIGlzIGVxdWFsIHRvIHplcm8gaW4gQ0RFRiBib3guCgBTdHJlYW0gZXJyb3Igd2hpbGUgcmVhZGluZyBKUDIgSGVhZGVyIGJveDogbm8gJ2loZHInIGJveC4KAE5vbiBjb25mb3JtYW50IGNvZGVzdHJlYW0gVFBzb3Q9PVROc290LgoAU3RyZWFtIGVycm9yIHdoaWxlIHJlYWRpbmcgSlAyIEhlYWRlciBib3g6IGJveCBsZW5ndGggaXMgaW5jb25zaXN0ZW50LgoAQm94IGxlbmd0aCBpcyBpbmNvbnNpc3RlbnQuCgBSZXNvbHV0aW9uIGZhY3RvciBpcyBncmVhdGVyIHRoYW4gdGhlIG1heGltdW0gcmVzb2x1dGlvbiBpbiB0aGUgY29tcG9uZW50LgoAQ29tcG9uZW50IG1hcHBpbmcgc2VlbXMgd3JvbmcuIFRyeWluZyB0byBjb3JyZWN0LgoASW5jb21wbGV0ZSBjaGFubmVsIGRlZmluaXRpb25zLgoATWFsZm9ybWVkIEhUIGNvZGVibG9jay4gSW52YWxpZCBjb2RlYmxvY2sgbGVuZ3RoIHZhbHVlcy4KAFdlIGRvIG5vdCBzdXBwb3J0IG1vcmUgdGhhbiAzIGNvZGluZyBwYXNzZXMgaW4gYW4gSFQgY29kZWJsb2NrOyBUaGlzIGNvZGVibG9ja3MgaGFzICVkIHBhc3Nlcy4KAE1hbGZvcm1lZCBIVCBjb2RlYmxvY2suIERlY29kaW5nIHRoaXMgY29kZWJsb2NrIGlzIHN0b3BwZWQuIFRoZXJlIGFyZSAlZCB6ZXJvIGJpdHBsYW5lcyBpbiAlZCBiaXRwbGFuZXMuCgBDYW5ub3QgdGFrZSBpbiBjaGFyZ2UgbXVsdGlwbGUgdHJhbnNmb3JtYXRpb24gc3RhZ2VzLgoAVW5rbm93biBtYXJrZXIgaGFzIGJlZW4gZGV0ZWN0ZWQgYW5kIGdlbmVyYXRlZCBlcnJvci4KAENvZGVjIHByb3ZpZGVkIHRvIHRoZSBvcGpfc2V0dXBfZGVjb2RlciBmdW5jdGlvbiBpcyBub3QgYSBkZWNvbXByZXNzb3IgaGFuZGxlci4KAENvZGVjIHByb3ZpZGVkIHRvIHRoZSBvcGpfcmVhZF9oZWFkZXIgZnVuY3Rpb24gaXMgbm90IGEgZGVjb21wcmVzc29yIGhhbmRsZXIuCgBUaWxlcyBkb24ndCBhbGwgaGF2ZSB0aGUgc2FtZSBkaW1lbnNpb24uIFNraXAgdGhlIE1DVCBzdGVwLgoATnVtYmVyIG9mIGNvbXBvbmVudHMgKCVkKSBpcyBpbmNvbnNpc3RlbnQgd2l0aCBhIE1DVC4gU2tpcCB0aGUgTUNUIHN0ZXAuCgBKUDIgYm94IHdoaWNoIGFyZSBhZnRlciB0aGUgY29kZXN0cmVhbSB3aWxsIG5vdCBiZSByZWFkIGJ5IHRoaXMgZnVuY3Rpb24uCgBNYWxmb3JtZWQgSFQgY29kZWJsb2NrLiBXaGVuIHRoZSBudW1iZXIgb2YgemVybyBwbGFuZXMgYml0cGxhbmVzIGlzIGVxdWFsIHRvIHRoZSBudW1iZXIgb2YgYml0cGxhbmVzLCBvbmx5IHRoZSBjbGVhbnVwIHBhc3MgbWFrZXMgc2Vuc2UsIGJ1dCB3ZSBoYXZlICVkIHBhc3NlcyBpbiB0aGlzIGNvZGVibG9jay4gVGhlcmVmb3JlLCBvbmx5IHRoZSBjbGVhbnVwIHBhc3Mgd2lsbCBiZSBkZWNvZGVkLiBUaGlzIG1lc3NhZ2Ugd2lsbCBub3QgYmUgZGlzcGxheWVkIGFnYWluLgoASW1hZ2UgaGFzIGxlc3MgY29tcG9uZW50cyB0aGFuIGNvZGVzdHJlYW0uCgBOZWVkIHRvIGRlY29kZSB0aGUgbWFpbiBoZWFkZXIgYmVmb3JlIGJlZ2luIHRvIGRlY29kZSB0aGUgcmVtYWluaW5nIGNvZGVzdHJlYW0uCgBQc290IHZhbHVlIG9mIHRoZSBjdXJyZW50IHRpbGUtcGFydCBpcyBlcXVhbCB0byB6ZXJvLCB3ZSBhc3N1bWluZyBpdCBpcyB0aGUgbGFzdCB0aWxlLXBhcnQgb2YgdGhlIGNvZGVzdHJlYW0uCgBBIG1hbGZvcm1lZCBjb2RlYmxvY2sgdGhhdCBoYXMgbW9yZSB0aGFuIG9uZSBjb2RpbmcgcGFzcywgYnV0IHplcm8gbGVuZ3RoIGZvciAybmQgYW5kIHBvdGVudGlhbGx5IHRoZSAzcmQgcGFzcyBpbiBhbiBIVCBjb2RlYmxvY2suCgAJCQkgdGlsZS1wYXJ0WyVkXTogc3Rhcl9wb3M9JWxsaSwgZW5kX2hlYWRlcj0lbGxpLCBlbmRfcG9zPSVsbGkuCgBUaWxlICV1IGhhcyBUUHNvdCA9PSAwIGFuZCBUTnNvdCA9PSAwLCBidXQgbm8gb3RoZXIgdGlsZS1wYXJ0cyB3ZXJlIGZvdW5kLiBFT0MgaXMgYWxzbyBtaXNzaW5nLgoAQ29tcG9uZW50ICVkIGRvZXNuJ3QgaGF2ZSBhIG1hcHBpbmcuCgBBIGNvbmZvcm1pbmcgSlAyIHJlYWRlciBzaGFsbCBpZ25vcmUgYWxsIENvbG91ciBTcGVjaWZpY2F0aW9uIGJveGVzIGFmdGVyIHRoZSBmaXJzdCwgc28gd2UgaWdub3JlIHRoaXMgb25lLgoAVGhlIHNpZ25hdHVyZSBib3ggbXVzdCBiZSB0aGUgZmlyc3QgYm94IGluIHRoZSBmaWxlLgoAVGhlICBib3ggbXVzdCBiZSB0aGUgZmlyc3QgYm94IGluIHRoZSBmaWxlLgoAVGhlIGZ0eXAgYm94IG11c3QgYmUgdGhlIHNlY29uZCBib3ggaW4gdGhlIGZpbGUuCgBGYWlsZWQgdG8gZGVjb2RlLgoATWFsZm9ybWVkIEhUIGNvZGVibG9jay4gSW5jb3JyZWN0IE1FTCBzZWdtZW50IHNlcXVlbmNlLgoAQ29tcG9uZW50ICVkIGlzIG1hcHBlZCB0d2ljZS4KAE9ubHkgb25lIENNQVAgYm94IGlzIGFsbG93ZWQuCgBXZSBuZWVkIGFuIGltYWdlIHByZXZpb3VzbHkgY3JlYXRlZC4KAElIRFIgYm94X21pc3NpbmcuIFJlcXVpcmVkLgoASlAySCBib3ggbWlzc2luZy4gUmVxdWlyZWQuCgBOb3Qgc3VyZSBob3cgdGhhdCBoYXBwZW5lZC4KAE1haW4gaGVhZGVyIGhhcyBiZWVuIGNvcnJlY3RseSBkZWNvZGVkLgoAVGlsZSAlZC8lZCBoYXMgYmVlbiBkZWNvZGVkLgoASGVhZGVyIG9mIHRpbGUgJWQgLyAlZCBoYXMgYmVlbiByZWFkLgoARW1wdHkgU09UIG1hcmtlciBkZXRlY3RlZDogUHNvdD0lZC4KAERpcmVjdCB1c2UgYXQgIyVkIGhvd2V2ZXIgcGNvbD0lZC4KAEltcGxlbWVudGF0aW9uIGxpbWl0YXRpb246IGZvciBwYWxldHRlIG1hcHBpbmcsIHBjb2xbJWRdIHNob3VsZCBiZSBlcXVhbCB0byAlZCwgYnV0IGlzIGVxdWFsIHRvICVkLgoASW52YWxpZCBjb21wb25lbnQvcGFsZXR0ZSBpbmRleCBmb3IgZGlyZWN0IG1hcHBpbmcgJWQuCgBJbnZhbGlkIHZhbHVlIGZvciBjbWFwWyVkXS5tdHlwID0gJWQuCgBQc290IHZhbHVlIGlzIG5vdCBjb3JyZWN0IHJlZ2FyZHMgdG8gdGhlIEpQRUcyMDAwIG5vcm06ICVkLgoATWFsZm9ybWVkIEhUIGNvZGVibG9jay4gVkxDIGNvZGUgcHJvZHVjZXMgc2lnbmlmaWNhbnQgc2FtcGxlcyBvdXRzaWRlIHRoZSBjb2RlYmxvY2sgYXJlYS4KAFVuZXhwZWN0ZWQgT09NLgoAMzIgYml0cyBhcmUgbm90IGVub3VnaCB0byBkZWNvZGUgdGhpcyBjb2RlYmxvY2ssIHNpbmNlIHRoZSBudW1iZXIgb2YgYml0cGxhbmUsICVkLCBpcyBsYXJnZXIgdGhhbiAzMC4KAEJvdHRvbSBwb3NpdGlvbiBvZiB0aGUgZGVjb2RlZCBhcmVhIChyZWdpb25feTE9JWQpIHNob3VsZCBiZSA+IDAuCgBSaWdodCBwb3NpdGlvbiBvZiB0aGUgZGVjb2RlZCBhcmVhIChyZWdpb25feDE9JWQpIHNob3VsZCBiZSA+IDAuCgBVcCBwb3NpdGlvbiBvZiB0aGUgZGVjb2RlZCBhcmVhIChyZWdpb25feTA9JWQpIHNob3VsZCBiZSA+PSAwLgoATGVmdCBwb3NpdGlvbiBvZiB0aGUgZGVjb2RlZCBhcmVhIChyZWdpb25feDA9JWQpIHNob3VsZCBiZSA+PSAwLgoARXJyb3IgcmVhZGluZyBQUFQgbWFya2VyOiBwYWNrZXQgaGVhZGVyIGhhdmUgYmVlbiBwcmV2aW91c2x5IGZvdW5kIGluIHRoZSBtYWluIGhlYWRlciAoUFBNIG1hcmtlcikuCgBTdGFydCB0byByZWFkIGoyayBtYWluIGhlYWRlciAoJWxsZCkuCgBCb3R0b20gcG9zaXRpb24gb2YgdGhlIGRlY29kZWQgYXJlYSAocmVnaW9uX3kxPSVkKSBpcyBvdXRzaWRlIHRoZSBpbWFnZSBhcmVhIChZc2l6PSVkKS4KAFVwIHBvc2l0aW9uIG9mIHRoZSBkZWNvZGVkIGFyZWEgKHJlZ2lvbl95MD0lZCkgaXMgb3V0c2lkZSB0aGUgaW1hZ2UgYXJlYSAoWXNpej0lZCkuCgBSaWdodCBwb3NpdGlvbiBvZiB0aGUgZGVjb2RlZCBhcmVhIChyZWdpb25feDE9JWQpIGlzIG91dHNpZGUgdGhlIGltYWdlIGFyZWEgKFhzaXo9JWQpLgoATGVmdCBwb3NpdGlvbiBvZiB0aGUgZGVjb2RlZCBhcmVhIChyZWdpb25feDA9JWQpIGlzIG91dHNpZGUgdGhlIGltYWdlIGFyZWEgKFhzaXo9JWQpLgoAQm90dG9tIHBvc2l0aW9uIG9mIHRoZSBkZWNvZGVkIGFyZWEgKHJlZ2lvbl95MT0lZCkgaXMgb3V0c2lkZSB0aGUgaW1hZ2UgYXJlYSAoWU9zaXo9JWQpLgoAVXAgcG9zaXRpb24gb2YgdGhlIGRlY29kZWQgYXJlYSAocmVnaW9uX3kwPSVkKSBpcyBvdXRzaWRlIHRoZSBpbWFnZSBhcmVhIChZT3Npej0lZCkuCgBSaWdodCBwb3NpdGlvbiBvZiB0aGUgZGVjb2RlZCBhcmVhIChyZWdpb25feDE9JWQpIGlzIG91dHNpZGUgdGhlIGltYWdlIGFyZWEgKFhPc2l6PSVkKS4KAExlZnQgcG9zaXRpb24gb2YgdGhlIGRlY29kZWQgYXJlYSAocmVnaW9uX3gwPSVkKSBpcyBvdXRzaWRlIHRoZSBpbWFnZSBhcmVhIChYT3Npej0lZCkuCgBTaXplIHggb2YgdGhlIGRlY29kZWQgY29tcG9uZW50IGltYWdlIGlzIGluY29ycmVjdCAoY29tcFslZF0udz0lZCkuCgBTaXplIHkgb2YgdGhlIGRlY29kZWQgY29tcG9uZW50IGltYWdlIGlzIGluY29ycmVjdCAoY29tcFslZF0uaD0lZCkuCgBUaWxlIHJlYWQsIGRlY29kZWQgYW5kIHVwZGF0ZWQgaXMgbm90IHRoZSBkZXNpcmVkIG9uZSAoJWQgdnMgJWQpLgoASW52YWxpZCBjb21wb25lbnQgaW5kZXggJWQgKD49ICVkKS4KAG9wal9yZWFkX2hlYWRlcigpIHNob3VsZCBiZSBjYWxsZWQgYmVmb3JlIG9wal9zZXRfZGVjb2RlZF9jb21wb25lbnRzKCkuCgBNZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlIGluIG9wal9qcDJfYXBwbHlfcGNscigpLgoAaW1hZ2UtPmNvbXBzWyVkXS5kYXRhID09IE5VTEwgaW4gb3BqX2pwMl9hcHBseV9wY2xyKCkuCgBpbnZhbGlkIGJveCBzaXplICVkICgleCkKAEZhaWwgdG8gcmVhZCB0aGUgY3VycmVudCBtYXJrZXIgc2VnbWVudCAoJSN4KQoARXJyb3Igd2l0aCBTSVogbWFya2VyOiBJSERSIHcoJXUpIGgoJXUpIHZzLiBTSVogdygldSkgaCgldSkKAEVycm9yIHJlYWRpbmcgQ09DIG1hcmtlciAoYmFkIG51bWJlciBvZiBjb21wb25lbnRzKQoASW52YWxpZCBudW1iZXIgb2YgdGlsZXMgOiAldSB4ICV1IChtYXhpbXVtIGZpeGVkIGJ5IGpwZWcyMDAwIG5vcm0gaXMgNjU1MzUgdGlsZXMpCgBJbnZhbGlkIG51bWJlciBvZiBjb21wb25lbnRzIChpaGRyKQoATm90IGVub3VnaCBtZW1vcnkgdG8gaGFuZGxlIGltYWdlIGhlYWRlciAoaWhkcikKAFdyb25nIHZhbHVlcyBmb3I6IHcoJWQpIGgoJWQpIG51bWNvbXBzKCVkKSAoaWhkcikKAEludmFsaWQgdmFsdWVzIGZvciBjb21wID0gJWQgOiBkeD0ldSBkeT0ldSAoc2hvdWxkIGJlIGJldHdlZW4gMSBhbmQgMjU1IGFjY29yZGluZyB0byB0aGUgSlBFRzIwMDAgbm9ybSkKAEJhZCBpbWFnZSBoZWFkZXIgYm94IChiYWQgc2l6ZSkKAEJhZCBDT0xSIGhlYWRlciBib3ggKGJhZCBzaXplKQoAQmFkIEJQQ0MgaGVhZGVyIGJveCAoYmFkIHNpemUpCgBFcnJvciB3aXRoIFNJWiBtYXJrZXI6IG5lZ2F0aXZlIG9yIHplcm8gaW1hZ2Ugc2l6ZSAoJWxsZCB4ICVsbGQpCgBza2lwOiBzZWdtZW50IHRvbyBsb25nICglZCkgd2l0aCBtYXggKCVkKSBmb3IgY29kZWJsb2NrICVkIChwPSVkLCBiPSVkLCByPSVkLCBjPSVkKQoAcmVhZDogc2VnbWVudCB0b28gbG9uZyAoJWQpIHdpdGggbWF4ICglZCkgZm9yIGNvZGVibG9jayAlZCAocD0lZCwgYj0lZCwgcj0lZCwgYz0lZCkKAERlc3BpdGUgSlAyIEJQQyE9MjU1LCBwcmVjaXNpb24gYW5kL29yIHNnbmQgdmFsdWVzIGZvciBjb21wWyVkXSBpcyBkaWZmZXJlbnQgdGhhbiBjb21wWzBdOgogICAgICAgIFswXSBwcmVjKCVkKSBzZ25kKCVkKSBbJWRdIHByZWMoJWQpIHNnbmQoJWQpCgBiYWQgY29tcG9uZW50IG51bWJlciBpbiBSR04gKCVkIHdoZW4gdGhlcmUgYXJlIG9ubHkgJWQpCgBFcnJvciB3aXRoIFNJWiBtYXJrZXI6IG51bWJlciBvZiBjb21wb25lbnQgaXMgbm90IGNvbXBhdGlibGUgd2l0aCB0aGUgcmVtYWluaW5nIG51bWJlciBvZiBwYXJhbWV0ZXJzICggJWQgdnMgJWQpCgBFcnJvciB3aXRoIFNJWiBtYXJrZXI6IGludmFsaWQgdGlsZSBzaXplICh0ZHg6ICVkLCB0ZHk6ICVkKQoAQmFkIENPTFIgaGVhZGVyIGJveCAoYmFkIHNpemU6ICVkKQoAQmFkIENPTFIgaGVhZGVyIGJveCAoQ0lFTGFiLCBiYWQgc2l6ZTogJWQpCgBQVEVSTSBjaGVjayBmYWlsdXJlOiAlZCByZW1haW5pbmcgYnl0ZXMgaW4gY29kZSBibG9jayAoJWQgdXNlZCAvICVkKQoATWFsZm9ybWVkIEhUIGNvZGVibG9jay4gT25lIG9mIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uIGlzIG5vdCBtZXQ6IDIgPD0gU2N1cCA8PSBtaW4oTGN1cCwgNDA3OSkKAEludmFsaWQgdmFsdWVzIGZvciBjb21wID0gJWQgOiBwcmVjPSV1IChzaG91bGQgYmUgYmV0d2VlbiAxIGFuZCAzOCBhY2NvcmRpbmcgdG8gdGhlIEpQRUcyMDAwIG5vcm0uIE9wZW5KcGVnIG9ubHkgc3VwcG9ydHMgdXAgdG8gMzEpCgBJbnZhbGlkIGJpdCBudW1iZXIgJWQgaW4gb3BqX3QyX3JlYWRfcGFja2V0X2hlYWRlcigpCgBTdHJlYW0gZXJyb3IhCgBFcnJvciBvbiB3cml0aW5nIHN0cmVhbSEKAFN0cmVhbSByZWFjaGVkIGl0cyBlbmQgIQoARXhwZWN0ZWQgYSBTT0MgbWFya2VyIAoASW52YWxpZCBib3ggc2l6ZSAlZCBmb3IgYm94ICclYyVjJWMlYycuIE5lZWQgJWQgYnl0ZXMsICVkIGJ5dGVzIHJlbWFpbmluZyAKAE1hbGZvcm1lZCBIVCBjb2RlYmxvY2suIERlY29kaW5nIHRoaXMgY29kZWJsb2NrIGlzIHN0b3BwZWQuIFVfcSBpcyBsYXJnZXIgdGhhbiB6ZXJvIGJpdHBsYW5lcyArIDEgCgBNYWxmb3JtZWQgSFQgY29kZWJsb2NrLiBEZWNvZGluZyB0aGlzIGNvZGVibG9jayBpcyBzdG9wcGVkLiBVX3EgaXNsYXJnZXIgdGhhbiBiaXRwbGFuZXMgKyAxIAoAQ09MUiBCT1ggbWV0aCB2YWx1ZSBpcyBub3QgYSByZWd1bGFyIHZhbHVlICglZCksIHNvIHdlIHdpbGwgaWdub3JlIHRoZSBlbnRpcmUgQ29sb3VyIFNwZWNpZmljYXRpb24gYm94LiAKAFdoaWxlIHJlYWRpbmcgQ0NQX1FOVFNUWSBlbGVtZW50IGluc2lkZSBRQ0Qgb3IgUUNDIG1hcmtlciBzZWdtZW50LCBudW1iZXIgb2Ygc3ViYmFuZHMgKCVkKSBpcyBncmVhdGVyIHRvIE9QSl9KMktfTUFYQkFORFMgKCVkKS4gU28gd2UgbGltaXQgdGhlIG51bWJlciBvZiBlbGVtZW50cyBzdG9yZWQgdG8gT1BKX0oyS19NQVhCQU5EUyAoJWQpIGFuZCBza2lwIHRoZSByZXN0LiAKAEpQMiBJSERSIGJveDogY29tcHJlc3Npb24gdHlwZSBpbmRpY2F0ZSB0aGF0IHRoZSBmaWxlIGlzIG5vdCBhIGNvbmZvcm1pbmcgSlAyIGZpbGUgKCVkKSAKAFRpbGUgaW5kZXggcHJvdmlkZWQgYnkgdGhlIHVzZXIgaXMgaW5jb3JyZWN0ICVkIChtYXggPSAlZCkgCgBFcnJvciBkZWNvZGluZyBjb21wb25lbnQgJWQuClRoZSBudW1iZXIgb2YgcmVzb2x1dGlvbnMgdG8gcmVtb3ZlICglZCkgaXMgZ3JlYXRlciBvciBlcXVhbCB0aGFuIHRoZSBudW1iZXIgb2YgcmVzb2x1dGlvbnMgb2YgdGhpcyBjb21wb25lbnQg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AAABVAAAAQAAAABQAADAUAAAAUgAAAAAAAAQUAAAsFAAAAFIAAABAAAAIFAAAMBQAAABOAAAAAAAADBQAACwUAAAATgAAAEAAABAUAAAwFAAAAEwAAAAAAAAUFAAABBRAAABMAAAAQAAAGBQAAAgUQAAASQAAAAAAABwUAAAMFEAAAEkAAABAAAAgFAAAEBRAAABHAAAAAAAAJBQAABwUQAAARwAAAEAAACgUAAAgFEAAAEWAAAAAAAAkFIAAJBRAAABFgAAAQAAAKBSAACgUQAAAVYAAAAAAADQUAAAwFAAAAFWAAABAAAA4FAAALBQAAABVAAAAAAAAPBQAACwUAAAAVQAAAEAAAAAUQAAwFAAAAFRAAAAAAAAEFEAANBQAAABUQAAAQAAACBRAADgUAAAAUgAAAAAAAAwUQAA8FAAAAFIAAABAAAAQFEAAABRAAABOAAAAAAAAFBRAAAQUQAAATgAAAEAAABgUQAAIFEAAAE0AAAAAAAAcFEAADBRAAABNAAAAQAAAIBRAABAUQAAATAAAAAAAACQUQAAUFEAAAEwAAABAAAAoFEAAGBRAAABKAAAAAAAALBRAABQUQAAASgAAAEAAADAUQAAYFEAAAEkAAAAAAAA0FEAAHBRAAABJAAAAQAAAOBRAACAUQAAASIAAAAAAADwUQAAkFEAAAEiAAABAAAAAFIAAKBRAAABHAAAAAAAABBSAACwUQAAARwAAAEAAAAgUgAAwFEAAAEYAAAAAAAAMFIAANBRAAABGAAAAQAAAEBSAADgUQAAARYAAAAAAABQUgAA8FEAAAEWAAABAAAAYFIAAABSAAABFAAAAAAAAHBSAAAQUgAAARQAAAEAAACAUgAAIFIAAAESAAAAAAAAkFIAADBSAAABEgAAAQAAAKBSAABAUgAAAREAAAAAAACwUgAAUFIAAAERAAABAAAAwFIAAGBSAADBCgAAAAAAANBSAABwUgAAwQoAAAEAAADgUgAAgFIAAMEJAAAAAAAA8FIAAJBSAADBCQAAAQAAAABTAACgUgAAoQgAAAAAAAAQUwAAsFIAAKEIAAABAAAAIFMAAMBSAAAhBQAAAAAAADBTAADQUgAAIQUAAAEAAABAUwAA4FIAAEEEAAAAAAAAUFMAAPBSAABBBAAAAQAAAGBTAAAAUwAAoQIAAAAAAABwUwAAEFMAAKECAAABAAAAgFMAACBTAAAhAgAAAAAAAJBTAAAwUwAAIQIAAAEAAACgUwAAQFMAAEEBAAAAAAAAsFMAAFBTAABBAQAAAQAAAMBTAABgUwAAEQEAAAAAAADQUwAAcFMAABEBAAABAAAA4FMAAIBTAACFAAAAAAAAAPBTAACQUwAAhQAAAAEAAAAAVAAAoFMAAEkAAAAAAAAAEFQAALBTAABJAAAAAQAAACBUAADAUwAAJQAAAAAAAAAwVAAA0FMAACUAAAABAAAAQFQAAOBTAAAVAAAAAAAAAFBUAADwUwAAFQAAAAEAAABgVAAAAFQAAAkAAAAAAAAAcFQAABBUAAAJAAAAAQAAAIBUAAAgVAAABQAAAAAAAACQVAAAMFQAAAUAAAABAAAAoFQAAEBUAAABAAAAAAAAAJBUAABQVAAAAQAAAAEAAACgVAAAYFQAAAFWAAAAAAAAsFQAALBUAAABVgAAAQAAAMBUAADAVAAAAAEDAwECAwMFBgcHBgYHBwABAwMBAgMDBQYHBwYGBwcFBgcHBgYHBwgICAgICAgIBQYHBwYGBwcICAgICAgICAECAwMCAgMDBgYHBwYGBwcBAgMDAgIDAwYGBwcGBgcHBgYHBwYGBwcICAgICAgICAYGBwcGBgcHCAgICAgICAgDAwQEAwMEBAcHBwcHBwcHAwMEBAMDBAQHBwcHBwcHBwcHBwcHBwcHCAgICAgICAgHBwcHBwcHBwgICAgICAgIAwMEBAMDBAQHBwcHBwcHBwMDBAQDAwQEBwcHBwcHBwcHBwcHBwcHBwgICAgICAgIBwcHBwcHBwcICAgICAgICAECAwMCAgMDBgYHBwYGBwcBAgMDAgIDAwYGBwcGBgcHBgYHBwYGBwcICAgICAgICAYGBwcGBgcHCAgICAgICAgCAgMDAgIDAwYGBwcGBgcHAgIDAwICAwMGBgcHBgYHBwYGBwcGBgcHCAgICAgICAgGBgcHBgYHBwgICAgICAgIAwMEBAMDBAQHBwcHBwcHBwMDBAQDAwQEBwcHBwcHBwcHBwcHBwcHBwgICAgICAgIBwcHBwcHBwcICAgICAgICAMDBAQDAwQEBwcHBwcHBwcDAwQEAwMEBAcHBwcHBwcHBwcHBwcHBwcICAgICAgICAcHBwcHBwcHCAgICAgICAgAAQUGAQIGBgMDBwcDAwcHAAEFBgECBgYDAwcHAwMHBwMDBwcDAwcHBAQHBwQEBwcDAwcHAwMHBwQEBwcEBAcHAQIGBgICBgYDAwcHAwMHBwECBgYCAgYGAwMHBwMDBwcDAwcHAwMHBwQEBwcEBAcHAwMHBwMDBwcEBAcHBAQHBwUGCAgGBggIBwcICAcHCAgFBggIBgYICAcHCAgHBwgIBwcICAcHCAgHBwgIBwcICAcHCAgHBwgIBwcICAcHCAgGBggIBgYICAcHCAgHBwgIBgYICAYGCAgHBwgIBwcICAcHCAgHBwgIBwcICAcHCAgHBwgIBwcICAcHCAgHBwgIAQIGBgICBgYDAwcHAwMHBwECBgYCAgYGAwMHBwMDBwcDAwcHAwMHBwQEBwcEBAcHAwMHBwMDBwcEBAcHBAQHBwICBgYCAgYGAwMHBwMDBwcCAgYGAgIGBgMDBwcDAwcHAwMHBwMDBwcEBAcHBAQHBwMDBwcDAwcHBAQHBwQEBwcGBggIBgYICAcHCAgHBwgIBgYICAYGCAgHBwgIBwcICAcHCAgHBwgIBwcICAcHCAgHBwgIBwcICAcHCAgHBwgIBgYICAYGCAgHBwgIBwcICAYGCAgGBggIBwcICAcHCAgHBwgIBwcICAcHCAgHBwgIBwcICAcHCAgHBwgIBwcICAABAwMBAgMDBQYHBwYGBwcAAQMDAQIDAwUGBwcGBgcHBQYHBwYGBwcICAgICAgICAUGBwcGBgcHCAgICAgICAgBAgMDAgIDAwYGBwcGBgcHAQIDAwICAwMGBgcHBgYHBwYGBwcGBgcHCAgICAgICAgGBgcHBgYHBwgICAgICAgIAwMEBAMDBAQHBwcHBwcHBwMDBAQDAwQEBwcHBwcHBwcHBwcHBwcHBwgICAgICAgIBwcHBwcHBwcICAgICAgICAMDBAQDAwQEBwcHBwcHBwcDAwQEAwMEBAcHBwcHBwcHBwcHBwcHBwcICAgICAgICAcHBwcHBwcHCAgICAgICAgBAgMDAgIDAwYGBwcGBgcHAQIDAwICAwMGBgcHBgYHBwYGBwcGBgcHCAgICAgICAgGBgcHBgYHBwgICAgICAgIAgIDAwICAwMGBgcHBgYHBwICAwMCAgMDBgYHBwYGBwcGBgcHBgYHBwgICAgICAgIBgYHBwYGBwcICAgICAgICAMDBAQDAwQEBwcHBwcHBwcDAwQEAwMEBAcHBwcHBwcHBwcHBwcHBwcICAgICAgICAcHBwcHBwcHCAgICAgICAgDAwQEAwMEBAcHBwcHBwcHAwMEBAMDBAQHBwcHBwcHBwcHBwcHBwcHCAgICAgICAgHBwcHBwcHBwgICAgICAgIAAMBBAMGBAcBBAIFBAcFBwADAQQDBgQHAQQCBQQHBQcBBAIFBAcFBwIFAgUFBwUHAQQCBQQHBQcCBQIFBQcFBwMGBAcGCAcIBAcFBwcIBwgDBgQHBggHCAQHBQcHCAcIBAcFBwcIBwgFBwUHBwgHCAQHBQcHCAcIBQcFBwcIBwgBBAIFBAcFBwIFAgUFBwUHAQQCBQQHBQcCBQIFBQcFBwIFAgUFBwUHAgUCBQUHBQcCBQIFBQcFBwIFAgUFBwUHBAcFBwcIBwgFBwUHBwgHCAQHBQcHCAcIBQcFBwcIBwgFBwUHBwgHCAUHBQcHCAcIBQcFBwcIBwgFBwUHBwgHCAMGBAcGCAcIBAcFBwcIBwgDBgQHBggHCAQHBQcHCAcIBAcFBwcIBwgFBwUHBwgHCAQHBQcHCAcIBQcFBwcIBwgGCAcICAgICAcIBwgICAgIBggHCAgICAgHCAcICAgICAcIBwgICAgIBwgHCAgICAgHCAcICAgICAcIBwgICAgIBAcFBwcIBwgFBwUHBwgHCAQHBQcHCAcIBQcFBwcIBwgFBwUHBwgHCAUHBQcHCAcIBQcFBwcIBwgFBwUHBwgHCAcIBwgICAgIBwgHCAgICAgHCAcICAgICAcIBwgICAgIBwgHCAgICAgHCAcICAgICAcIBwgICAgIBwgHCAgICAgJCQoKCQkKCgwMDQsMDA0LCQkKCgkJCgoMDAsNDAwLDQwMDQ0MDAsLDAkNCgkMCgsMDAsLDAwNDQwJCwoJDAoNCQkKCgkJCgoMDA0LDAwNCwkJCgoJCQoKDAwLDQwMCw0MDA0NDAwLCwwJDQoJDAoLDAwLCwwMDQ0MCQsKCQwKDQoKCgoKCgoKDQsNCw0LDQsKCgkJCgoJCQ0LDAwNCwwMDQ0NDQsLCwsNCg0KCgsKCw0NDAwLCwwMDQoMCQoLCQwKCgkJCgoJCQsNDAwLDQwMCgoKCgoKCgoLDQsNCw0LDQsLDAwNDQwMCwoMCQoNCQwLCwsLDQ0NDQsKCwoKDQoNAEHZuwELNwEAAQABAAEAAAEBAAABAQABAAEAAQABAAAAAAEBAQEAAAAAAAEAAQAAAAABAQEBAAAAAQABAQEAQZm8AQs3AQABAAEAAQAAAQEAAAEBAAEAAQABAAEAAAAAAQEBAQAAAAAAAQABAAAAAAEBAQEAAAABAAEBAQBB2bwBCwcBAAEAAQABAEHpvAELlQIBAAEAAQABAAAAAAEBAQEAAAAAAAEAAQAAAAABAQEBAAAAAAABAAEBAQAAAQEAAAABAAEAAQABAQEBAQEBAQEAAQABAAEAAQAAAAABAQEBAAEAAAEBAAEAAAAAAQEBAQABAAEBAQEBAgAAAAQAAAAEAAAACAAAAJD/AAAMAAAAGAAAAFL/AAAUAAAAGQAAAFP/AAAUAAAAGgAAAF7/AAAUAAAAGwAAAFz/AAAUAAAAHAAAAF3/AAAUAAAAHQAAAF//AAAUAAAAHgAAAFH/AAACAAAAHwAAAFX/AAAEAAAAIAAAAFf/AAAEAAAAIQAAAFj/AAAQAAAAIgAAAGD/AAAEAAAAIwAAAGH/AAAQAAAAJAAAAJH/AEGIvwELZWP/AAAEAAAAJQAAAGT/AAAUAAAAJgAAAHT/AAAUAAAAJwAAAHj/AAAEAAAAKAAAAFD/AAAEAAAAKQAAAFn/AAAEAAAAKgAAAHX/AAAUAAAAKwAAAHf/AAAUAAAALAAAAAAAAAAUAEGAwAELNS0AAAAuAAAALwAAADAAAAAxAAAAMgAAADMAAAA0AAAAICBQajYAAABweXRmNwAAAGgycGo4AEHAwAELMnJkaGk5AAAAcmxvYzoAAABjY3BiOwAAAHJsY3A8AAAAcGFtYz0AAABmZWRjPgAAAPhiAEGAwQELQRkACwAZGRkAAAAABQAAAAAAAAkAAAAACwAAAAAAAAAAGQAKChkZGQMKBwABAAkLGAAACQYLAAALAAYZAAAAGRkZAEHRwQELIQ4AAAAAAAAAABkACw0ZGRkADQAAAgAJDgAAAAkADgAADgBBi8IBCwEMAEGXwgELFRMAAAAAEwAAAAAJDAAAAAAADAAADABBxcIBCwEQAEHRwgELFQ8AAAAEDwAAAAAJEAAAAAAAEAAAEABB/8IBCwESAEGLwwELHhEAAAAAEQAAAAAJEgAAAAAAEgAAEgAAGgAAABoaGgBBwsMBCw4aAAAAGhoaAAAAAAAACQBB88MBCwEUAEH/wwELFRcAAAAAFwAAAAAJFAAAAAAAFAAAFABBrcQBCwEWAEG5xAELJxUAAAAAFQAAAAAJFgAAAAAAFgAAFgAAMDEyMzQ1Njc4OUFCQ0RFRgBB4MQBCwmQbAEAAAAAAAUAQfTEAQsBaQBBjMUBCwpqAAAAawAAAHhoAEGkxQELAQIAQbTFAQsI//////////8AQfjFAQsBBQBBhMYBCwFsAEGcxgELDmoAAABtAAAAiGgAAAAEAEG0xgELAQEAQcTGAQsF/////wo=";return z}var uA;function bA(z){if(z==uA&&d)return new Uint8Array(d);var rA=p(z);if(rA)return rA;if(E)return E(z);throw\'sync fetching of the wasm failed: you can preload it to Module["wasmBinary"] manually, or emcc.py will do that for you when generating HTML (but not JS)\'}function iA(z,rA){var xA,RA=bA(z);xA=new WebAssembly.Module(RA);var YA=new WebAssembly.Instance(xA,rA);return[YA,xA]}function wA(){return{a:du}}function FA(){var z=wA();function rA(RA,YA){return wi=RA.exports,m=wi.p,R(),CA(wi.q),X("wasm-instantiate"),wi}if($("wasm-instantiate"),s.instantiateWasm)try{return s.instantiateWasm(z,rA)}catch(RA){u(`Module.instantiateWasm callback failed with error: ${RA}`),n(RA)}uA||(uA=BA());var xA=iA(uA,z);return rA(xA[0])}var cA=z=>{for(;z.length>0;)z.shift()(s)},yA=s.noExitRuntime||!0,aA=(z,rA,xA)=>w.copyWithin(z,rA,rA+xA);function DA(z,rA){z>>=2;let xA=s.imageData=new Uint8ClampedArray(rA),RA=s.HEAP32.subarray(z,z+rA);xA.set(RA)}function UA(z,rA,xA,RA){z>>=2,rA>>=2,xA>>=2;let YA=s.imageData=new Uint8ClampedArray(RA*3),ae=s.HEAP32.subarray(z,z+RA),ee=s.HEAP32.subarray(rA,rA+RA),Oe=s.HEAP32.subarray(xA,xA+RA);for(let te=0;te>=2,rA>>=2,xA>>=2,RA>>=2;let ae=s.imageData=new Uint8ClampedArray(YA*4),ee=s.HEAP32.subarray(z,z+YA),Oe=s.HEAP32.subarray(rA,rA+YA),te=s.HEAP32.subarray(xA,xA+YA),yi=s.HEAP32.subarray(RA,RA+YA);for(let Xt=0;Xt2147483648,TA=z=>{var rA=m.buffer,xA=(z-rA.byteLength+65535)/65536;try{return m.grow(xA),R(),1}catch(RA){}},LA=z=>{var rA=w.length;z>>>=0;var xA=pA();if(z>xA)return!1;for(var RA=(te,yi)=>te+(yi-te%yi)%yi,YA=1;YA<=4;YA*=2){var ae=rA*(1+.2/YA);ae=Math.min(ae,z+100663296);var ee=Math.min(xA,RA(Math.max(z,ae),65536)),Oe=TA(ee);if(Oe)return!0}return!1},WA={},re=()=>l||"./this.program",De=()=>{if(!De.strings){var z=(typeof navigator=="object"&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8",rA={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:z,_:re()};for(var xA in WA)WA[xA]===void 0?delete rA[xA]:rA[xA]=WA[xA];var RA=[];for(var xA in rA)RA.push(`${xA}=${rA[xA]}`);De.strings=RA}return De.strings},Dn=(z,rA)=>{for(var xA=0;xA{var xA=0;return De().forEach((RA,YA)=>{var ae=rA+xA;Z[z+YA*4>>2]=ae,Dn(RA,ae),xA+=RA.length+1}),0},Sn=(z,rA)=>{var xA=De();Z[z>>2]=xA.length;var RA=0;return xA.forEach(YA=>RA+=YA.length+1),Z[rA>>2]=RA,0},co=z=>52,Iu=(z,rA)=>rA+2097152>>>0<4194305-!!z?(z>>>0)+rA*4294967296:NaN;function cu(z,rA,xA,RA,YA){var ae=Iu(rA,xA);return 70}var lu=[null,[],[]],D1=typeof TextDecoder!="undefined"?new TextDecoder("utf8"):void 0,k1=(z,rA,xA)=>{for(var RA=rA+xA,YA=rA;z[YA]&&!(YA>=RA);)++YA;if(YA-rA>16&&z.buffer&&D1)return D1.decode(z.subarray(rA,YA));for(var ae="";rA>10,56320|yi&1023)}}return ae},hu=(z,rA)=>{var xA=lu[z];rA===0||rA===10?((z===1?f:u)(k1(xA,0)),xA.length=0):xA.push(rA)},S1=(z,rA)=>z?k1(w,z,rA):"",Cu=(z,rA,xA,RA)=>{for(var YA=0,ae=0;ae>2],Oe=Z[rA+4>>2];rA+=8;for(var te=0;te>2]=YA,0};function Bu(z,rA){z>>=2;let xA=s.imageData=new Uint8ClampedArray(rA*4),RA=s.HEAP32.subarray(z,z+rA);for(let YA=0;YA>=2,rA>>=2;let RA=s.imageData=new Uint8ClampedArray(xA*4),YA=s.HEAP32.subarray(z,z+xA),ae=s.HEAP32.subarray(rA,rA+xA);for(let ee=0;ee>=2,rA>>=2,xA>>=2;let YA=s.imageData=new Uint8ClampedArray(RA*4),ae=s.HEAP32.subarray(z,z+RA),ee=s.HEAP32.subarray(rA,rA+RA),Oe=s.HEAP32.subarray(xA,xA+RA);for(let te=0;te0||(V(),H>0))return;function z(){Fn||(Fn=!0,s.calledRun=!0,!D&&(lA(),a(s),s.onRuntimeInitialized&&s.onRuntimeInitialized(),EA()))}s.setStatus?(s.setStatus("Running..."),setTimeout(function(){setTimeout(function(){s.setStatus("")},1),z()},1)):z()}if(s.preInit)for(typeof s.preInit=="function"&&(s.preInit=[s.preInit]);s.preInit.length>0;)s.preInit.pop()();return F1(),i=s,i}})(),Sd=kd,br=class extends At{constructor(A){super(A,"JpxError")}},ms,hs=class{static decode(A,t){t||(t={}),ne(this,ms)||_s(this,ms,Sd({warn:k}));let i=ne(this,ms).decode(A,t);if(typeof i=="string")throw new br(i);return i}static cleanup(){_s(this,ms,null)}static parseImageProperties(A){let t=A.getByte();for(;t>=0;){let i=t;if(t=A.getByte(),(i<<8|t)===65361){A.skip(4);let a=A.getInt32()>>>0,n=A.getInt32()>>>0,r=A.getInt32()>>>0,g=A.getInt32()>>>0;A.skip(16);let o=A.getUint16();return{width:a-r,height:n-g,bitsPerComponent:8,componentsCount:o}}}throw new br("No size marker found in JPX stream")}};ms=new WeakMap,HA(hs,ms,null);var dI=class extends Me{constructor(A,t,i){super(t),this.stream=A,this.dict=A.dict,this.maybeLength=t,this.params=i}get bytes(){return nA(this,"bytes",this.stream.getBytes(this.maybeLength))}ensureBuffer(A){}readBlock(A){this.decodeImage(null,A)}decodeImage(A,t){return this.eof?this.buffer:(A||(A=this.bytes),this.buffer=hs.decode(A,t),this.bufferLength=this.buffer.length,this.eof=!0,this.buffer)}get canAsyncDecodeImageFromBuffer(){return this.stream.isAsync}},Dr=class extends Me{constructor(A,t,i){super(t),this.str=A,this.dict=A.dict,this.cachedData=0,this.bitsCached=0;let s=4096,a={earlyChange:i,codeLength:9,nextCode:258,dictionaryValues:new Uint8Array(s),dictionaryLengths:new Uint16Array(s),dictionaryPrevCodes:new Uint16Array(s),currentSequence:new Uint8Array(s),currentSequenceLength:0};for(let n=0;n<256;++n)a.dictionaryValues[n]=n,a.dictionaryLengths[n]=1;this.lzwState=a}readBits(A){let t=this.bitsCached,i=this.cachedData;for(;t>>t&(1<0;if(d<256)B[0]=d,Q=1;else if(d>=258)if(d=0;a--)B[a]=I[n],n=l[n];else B[Q++]=B[0];else if(d===256){h=9,o=258,Q=0;continue}else{this.eof=!0,delete this.lzwState;break}if(x&&(l[o]=C,c[o]=c[C]+1,I[o]=B[0],o++,h=o+g&o+g-1?h:Math.min(Math.log(o+g)/.6931471805599453+1,12)|0),C=d,E+=Q,i15))throw new v(`Unsupported predictor: ${s}`);this.readBlock=s===2?this.readBlockTiff:this.readBlockPng,this.str=A,this.dict=A.dict;let a=this.colors=i.get("Colors")||1,n=this.bits=i.get("BPC","BitsPerComponent")||8,r=this.columns=i.get("Columns")||1;return this.pixBytes=a*n+7>>3,this.rowBytes=r*a*n+7>>3,this}readBlockTiff(){let A=this.rowBytes,t=this.bufferLength,i=this.ensureBuffer(t+A),s=this.bits,a=this.colors,n=this.str.getBytes(A);if(this.eof=!n.length,this.eof)return;let r=0,g=0,o=0,I=0,c=t,l;if(s===1&&a===1)for(l=0;l>1,h^=h>>2,h^=h>>4,r=(h&1)<<7,i[c++]=h}else if(s===8){for(l=0;l>8&255,i[c++]=C&255}}else{let h=new Uint8Array(a+1),C=(1<>o-s)&C,o-=s,g=g<=8&&(i[Q++]=g>>I-8&255,I-=8);I>0&&(i[Q++]=(g<<8-I)+(r&(1<<8-I)-1))}this.bufferLength+=A}readBlockPng(){let A=this.rowBytes,t=this.pixBytes,i=this.str.getByte(),s=this.str.getBytes(A);if(this.eof=!s.length,this.eof)return;let a=this.bufferLength,n=this.ensureBuffer(a+A),r=n.subarray(a-A,a);r.length===0&&(r=new Uint8Array(A));let g,o=a,I,c;switch(i){case 0:for(g=0;g>1)+s[g];for(;g>1)+s[g]&255,o++;break;case 4:for(g=0;g0){let a=this.str.getBytes(s);t.set(a,i),i+=s}}else{s=257-s;let a=A[1];t=this.ensureBuffer(i+s+1);for(let n=0;n>")&&this.buf1!==Ge;){if(!(this.buf1 instanceof M)){PA("Malformed dictionary: key must be a name object"),this.shift();continue}let a=this.buf1.name;if(this.shift(),this.buf1===Ge)break;s.set(a,this.getObj(A))}if(this.buf1===Ge){if(this.recoveryMode)return s;throw new Sa("End of file inside dictionary.")}return Ne(this.buf2,"stream")?this.allowStreams?this.makeStream(s,A):s:(this.shift(),s);default:return t}if(Number.isInteger(t)){if(Number.isInteger(this.buf1)&&Ne(this.buf2,"R")){let i=oA.get(t,this.buf1);return this.shift(),this.shift(),i}return t}return typeof t=="string"&&A?A.decryptString(t):t}findDefaultInlineStreamEnd(A){let{knownCommands:g}=this.lexer,o=A.pos,I=15,c=0,l,h;for(;(l=A.getByte())!==-1;)if(c===0)c=l===69?1:0;else if(c===1)c=l===73?2:0;else if(l===32||l===10||l===13){h=A.pos;let B=A.peekBytes(I),Q=B.length;if(Q===0)break;for(let u=0;u127)){c=0;break}if(c!==2)continue;if(!g){k("findDefaultInlineStreamEnd - `lexer.knownCommands` is undefined.");continue}let E=new dt(new Ie(B.slice()),g);E._hexStringWarn=()=>{};let f=0;for(;;){let u=E.getObj();if(u===Ge){c=0;break}if(u instanceof fe){let d=g[u.cmd];if(d){if(d.variableArgs?f<=d.numArgs:f===d.numArgs)break}else{c=0;break}f=0;continue}f++}if(c===2)break}else c=0;l===-1&&(k("findDefaultInlineStreamEnd: Reached the end of the stream without finding a valid EI marker"),h&&(k(\'... trying to recover by using the last "EI" occurrence.\'),A.skip(-(A.pos-h))));let C=4;return A.skip(-C),l=A.peekByte(),A.skip(C),pt(l)||C--,A.pos-C-o}findDCTDecodeInlineStreamEnd(A){let t=A.pos,i=!1,s,a;for(;(s=A.getByte())!==-1;)if(s===255){switch(A.getByte()){case 0:break;case 255:A.skip(-1);break;case 217:i=!0;break;case 192:case 193:case 194:case 195:case 197:case 198:case 199:case 201:case 202:case 203:case 205:case 206:case 207:case 196:case 204:case 218:case 219:case 220:case 221:case 222:case 223:case 224:case 225:case 226:case 227:case 228:case 229:case 230:case 231:case 232:case 233:case 234:case 235:case 236:case 237:case 238:case 239:case 254:a=A.getUint16(),a>2?A.skip(a-2):A.skip(-2);break}if(i)break}let n=A.pos-t;return s===-1?(k("Inline DCTDecode image stream: EOI marker not found, searching for /EI/ instead."),A.skip(-n),this.findDefaultInlineStreamEnd(A)):(this.inlineStreamSkipEI(A),n)}findASCII85DecodeInlineStreamEnd(A){let s=A.pos,a;for(;(a=A.getByte())!==-1;)if(a===126){let r=A.pos;for(a=A.peekByte();pt(a);)A.skip(),a=A.peekByte();if(a===62){A.skip();break}if(A.pos>r){let g=A.peekBytes(2);if(g[0]===69&&g[1]===73)break}}let n=A.pos-s;return a===-1?(k("Inline ASCII85Decode image stream: EOD marker not found, searching for /EI/ instead."),A.skip(-n),this.findDefaultInlineStreamEnd(A)):(this.inlineStreamSkipEI(A),n)}findASCIIHexDecodeInlineStreamEnd(A){let i=A.pos,s;for(;(s=A.getByte())!==-1&&s!==62;);let a=A.pos-i;return s===-1?(k("Inline ASCIIHexDecode image stream: EOD marker not found, searching for /EI/ instead."),A.skip(-a),this.findDefaultInlineStreamEnd(A)):(this.inlineStreamSkipEI(A),a)}inlineStreamSkipEI(A){let s=0,a;for(;(a=A.getByte())!==-1;)if(s===0)s=a===69?1:0;else if(s===1)s=a===73?2:0;else if(s===2)break}makeInlineImage(A){let t=this.lexer,i=t.stream,s=Object.create(null),a;for(;!Ne(this.buf1,"ID")&&this.buf1!==Ge;){if(!(this.buf1 instanceof M))throw new v("Dictionary key must be a name object");let h=this.buf1.name;if(this.shift(),this.buf1===Ge)break;s[h]=this.getObj(A)}t.beginInlineImagePos!==-1&&(a=i.pos-t.beginInlineImagePos);let n=this.xref.fetchIfRef(s.F||s.Filter),r;if(n instanceof M)r=n.name;else if(Array.isArray(n)){let h=this.xref.fetchIfRef(n[0]);h instanceof M&&(r=h.name)}let g=i.pos,o;switch(r){case"DCT":case"DCTDecode":o=this.findDCTDecodeInlineStreamEnd(i);break;case"A85":case"ASCII85Decode":o=this.findASCII85DecodeInlineStreamEnd(i);break;case"AHx":case"ASCIIHexDecode":o=this.findASCIIHexDecodeInlineStreamEnd(i);break;default:o=this.findDefaultInlineStreamEnd(i)}let I;if(o0){let h=i.pos;i.pos=t.beginInlineImagePos,I=Rd(i.getBytes(a+o)),i.pos=h;let C=this.imageCache[I];if(C!==void 0)return this.buf2=fe.get("EI"),this.shift(),C.reset(),C}let c=new F(this.xref);for(let h in s)c.set(h,s[h]);let l=i.makeSubStream(g,o,c);return A&&(l=A.createStream(l,o)),l=this.filter(l,c,o),l.dict=c,I!==void 0&&(l.cacheKey=`inline_img_${++this._imageId}`,this.imageCache[I]=l),this.buf2=fe.get("EI"),this.shift(),l}makeStream(A,t){let i=this.lexer,s=i.stream;i.skipToNextLine();let a=s.pos-1,n=A.get("Length");if(Number.isInteger(n)||(PA(`Bad length "${n&&n.toString()}" in stream.`),n=0),s.pos=a+n,i.nextChar(),this.tryShift()&&Ne(this.buf2,"endstream"))this.shift();else{if(n=mA(this,Ug,lf).call(this,a),n<0)throw new v("Missing endstream command.");i.nextChar(),this.shift(),this.shift()}return this.shift(),s=s.makeSubStream(a,n,A),t&&(s=t.createStream(s,n)),s=this.filter(s,A,n),s.dict=A,s}filter(A,t,i){let s=t.get("F","Filter"),a=t.get("DP","DecodeParms");if(s instanceof M)return Array.isArray(a)&&k("/DecodeParms should not be an Array, when /Filter is a Name."),this.makeFilter(A,s.name,i,a);let n=i;if(Array.isArray(s)){let r=s,g=a;for(let o=0,I=r.length;o=n){let h=!1;for(let C of r){let B=C.length,Q=0;for(;Q=g){h=!0;break}if(Q>=B){let E=o[c+l+Q];pt(E)&&(PA(`Found "${Qt([...a,...C])}" when searching for endstream command.`),h=!0);break}}if(h)return t.pos+=c,t.pos-A}c++}t.pos+=I}return-1};var q0=[1,0,0,0,0,0,0,0,0,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,2,0,0,2,2,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,2,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];function Qo(e){return e>=48&&e<=57?e&15:e>=65&&e<=70||e>=97&&e<=102?(e&15)+9:-1}var dt=class{constructor(A,t=null){this.stream=A,this.nextChar(),this.strBuf=[],this.knownCommands=t,this._hexStringNumWarn=0,this.beginInlineImagePos=-1}nextChar(){return this.currentChar=this.stream.getByte()}peekChar(){return this.stream.peekByte()}getNumber(){let A=this.currentChar,t=!1,i=0,s=1;if(A===45?(s=-1,A=this.nextChar(),A===45&&(A=this.nextChar())):A===43&&(A=this.nextChar()),A===10||A===13)do A=this.nextChar();while(A===10||A===13);if(A===46&&(i=10,A=this.nextChar()),A<48||A>57){let g=`Invalid number: ${String.fromCharCode(A)} (charCode ${A})`;if(pt(A)||A===-1)return PA(`Lexer.getNumber - "${g}".`),0;throw new v(g)}let a=A-48,n=0,r=1;for(;(A=this.nextChar())>=0;)if(A>=48&&A<=57){let g=A-48;t?n=n*10+g:(i!==0&&(i*=10),a=a*10+g)}else if(A===46)if(i===0)i=1;else break;else if(A===45)k("Badly formatted number: minus sign in the middle");else if(A===69||A===101){if(A=this.peekChar(),A===43||A===45)r=A===45?-1:1,this.nextChar();else if(A<48||A>57)break;t=!0}else break;return i!==0&&(a/=i),t&&(a*=10**(r*n)),s*a}getString(){let A=1,t=!1,i=this.strBuf;i.length=0;let s=this.nextChar();for(;;){let a=!1;switch(s|0){case-1:k("Unterminated string"),t=!0;break;case 40:++A,i.push("(");break;case 41:--A===0?(this.nextChar(),t=!0):i.push(")");break;case 92:switch(s=this.nextChar(),s){case-1:k("Unterminated string"),t=!0;break;case 110:i.push(`\n`);break;case 114:i.push("\\r");break;case 116:i.push(" ");break;case 98:i.push("\\b");break;case 102:i.push("\\f");break;case 92:case 40:case 41:i.push(String.fromCharCode(s));break;case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:let n=s&15;s=this.nextChar(),a=!0,s>=48&&s<=55&&(n=(n<<3)+(s&15),s=this.nextChar(),s>=48&&s<=55&&(a=!1,n=(n<<3)+(s&15))),i.push(String.fromCharCode(n));break;case 13:this.peekChar()===10&&this.nextChar();break;case 10:break;default:i.push(String.fromCharCode(s));break}break;default:i.push(String.fromCharCode(s));break}if(t)break;a||(s=this.nextChar())}return i.join("")}getName(){let A,t,i=this.strBuf;for(i.length=0;(A=this.nextChar())>=0&&!q0[A];)if(A===35){if(A=this.nextChar(),q0[A]){k("Lexer_getName: NUMBER SIGN (#) should be followed by a hexadecimal number."),i.push("#");break}let s=Qo(A);if(s!==-1){t=A,A=this.nextChar();let a=Qo(A);if(a===-1){if(k(`Lexer_getName: Illegal digit (${String.fromCharCode(A)}) in hexadecimal number.`),i.push("#",String.fromCharCode(t)),q0[A])break;i.push(String.fromCharCode(A));continue}i.push(String.fromCharCode(s<<4|a))}else i.push("#",String.fromCharCode(A))}else i.push(String.fromCharCode(A));return i.length>127&&k(`Name token is longer than allowed by the spec: ${i.length}`),M.get(i.join(""))}_hexStringWarn(A){if(this._hexStringNumWarn++===5){k("getHexString - ignoring additional invalid characters.");return}this._hexStringNumWarn>5||k(`getHexString - ignoring invalid character: ${A}`)}getHexString(){let A=this.strBuf;A.length=0;let t=this.currentChar,i=-1,s=-1;for(this._hexStringNumWarn=0;;)if(t<0){k("Unterminated hex string");break}else if(t===62){this.nextChar();break}else if(q0[t]===1){t=this.nextChar();continue}else s=Qo(t),s===-1?this._hexStringWarn(t):i===-1?i=s:(A.push(String.fromCharCode(i<<4|s)),i=-1),t=this.nextChar();return i!==-1&&A.push(String.fromCharCode(i<<4)),A.join("")}getObj(){let A=!1,t=this.currentChar;for(;;){if(t<0)return Ge;if(A)(t===10||t===13)&&(A=!1);else if(t===37)A=!0;else if(q0[t]!==1)break;t=this.nextChar()}switch(t|0){case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:case 43:case 45:case 46:return this.getNumber();case 40:return this.getString();case 47:return this.getName();case 91:return this.nextChar(),fe.get("[");case 93:return this.nextChar(),fe.get("]");case 60:return t=this.nextChar(),t===60?(this.nextChar(),fe.get("<<")):this.getHexString();case 62:return t=this.nextChar(),t===62?(this.nextChar(),fe.get(">>")):fe.get(">");case 123:return this.nextChar(),fe.get("{");case 125:return this.nextChar(),fe.get("}");case 41:throw this.nextChar(),new v(`Illegal character: ${t}`)}let i=String.fromCharCode(t);if(t<32||t>127){let n=this.peekChar();if(n>=32&&n<=127)return this.nextChar(),fe.get(i)}let s=this.knownCommands,a=(s==null?void 0:s[i])!==void 0;for(;(t=this.nextChar())>=0&&!q0[t];){let n=i+String.fromCharCode(t);if(a&&s[n]===void 0)break;if(i.length===128)throw new v(`Command token too long: ${i.length}`);i=n,a=(s==null?void 0:s[i])!==void 0}return i==="true"?!0:i==="false"?!1:i==="null"?null:(i==="BI"&&(this.beginInlineImagePos=this.stream.pos),fe.get(i))}skipToNextLine(){let A=this.currentChar;for(;A>=0;){if(A===13){A=this.nextChar(),A===10&&this.nextChar();break}else if(A===10){this.nextChar();break}A=this.nextChar()}}},mI=class{static create(A){function t(c,l,h=!1){let C=c.get(l);if(Number.isInteger(C)&&(h?C>=0:C>0))return C;throw new Error(`The "${l}" parameter in the linearization dictionary is invalid.`)}function i(c){let l=c.get("H"),h;if(Array.isArray(l)&&((h=l.length)===2||h===4)){for(let C=0;C0))throw new Error(`Hint (${C}) in the linearization dictionary is invalid.`)}return l}throw new Error("Hint array in the linearization dictionary is invalid.")}let s=new zt({lexer:new dt(A),xref:null}),a=s.getObj(),n=s.getObj(),r=s.getObj(),g=s.getObj(),o,I;if(Number.isInteger(a)&&Number.isInteger(n)&&Ne(r,"obj")&&g instanceof F&&typeof(o=g.get("Linearized"))=="number"&&o>0){if((I=t(g,"L"))!==A.length)throw new Error(\'The "L" parameter in the linearization dictionary does not equal the stream length.\')}else return null;return{length:I,hints:i(g),objectNumberFirst:t(g,"O"),endFirst:t(g,"E"),numPages:t(g,"N"),mainXRefEntriesOffset:t(g,"T"),pageFirst:g.has("P")?t(g,"P",!0):0}}},Nd=["Adobe-GB1-UCS2","Adobe-CNS1-UCS2","Adobe-Japan1-UCS2","Adobe-Korea1-UCS2","78-EUC-H","78-EUC-V","78-H","78-RKSJ-H","78-RKSJ-V","78-V","78ms-RKSJ-H","78ms-RKSJ-V","83pv-RKSJ-H","90ms-RKSJ-H","90ms-RKSJ-V","90msp-RKSJ-H","90msp-RKSJ-V","90pv-RKSJ-H","90pv-RKSJ-V","Add-H","Add-RKSJ-H","Add-RKSJ-V","Add-V","Adobe-CNS1-0","Adobe-CNS1-1","Adobe-CNS1-2","Adobe-CNS1-3","Adobe-CNS1-4","Adobe-CNS1-5","Adobe-CNS1-6","Adobe-GB1-0","Adobe-GB1-1","Adobe-GB1-2","Adobe-GB1-3","Adobe-GB1-4","Adobe-GB1-5","Adobe-Japan1-0","Adobe-Japan1-1","Adobe-Japan1-2","Adobe-Japan1-3","Adobe-Japan1-4","Adobe-Japan1-5","Adobe-Japan1-6","Adobe-Korea1-0","Adobe-Korea1-1","Adobe-Korea1-2","B5-H","B5-V","B5pc-H","B5pc-V","CNS-EUC-H","CNS-EUC-V","CNS1-H","CNS1-V","CNS2-H","CNS2-V","ETHK-B5-H","ETHK-B5-V","ETen-B5-H","ETen-B5-V","ETenms-B5-H","ETenms-B5-V","EUC-H","EUC-V","Ext-H","Ext-RKSJ-H","Ext-RKSJ-V","Ext-V","GB-EUC-H","GB-EUC-V","GB-H","GB-V","GBK-EUC-H","GBK-EUC-V","GBK2K-H","GBK2K-V","GBKp-EUC-H","GBKp-EUC-V","GBT-EUC-H","GBT-EUC-V","GBT-H","GBT-V","GBTpc-EUC-H","GBTpc-EUC-V","GBpc-EUC-H","GBpc-EUC-V","H","HKdla-B5-H","HKdla-B5-V","HKdlb-B5-H","HKdlb-B5-V","HKgccs-B5-H","HKgccs-B5-V","HKm314-B5-H","HKm314-B5-V","HKm471-B5-H","HKm471-B5-V","HKscs-B5-H","HKscs-B5-V","Hankaku","Hiragana","KSC-EUC-H","KSC-EUC-V","KSC-H","KSC-Johab-H","KSC-Johab-V","KSC-V","KSCms-UHC-H","KSCms-UHC-HW-H","KSCms-UHC-HW-V","KSCms-UHC-V","KSCpc-EUC-H","KSCpc-EUC-V","Katakana","NWP-H","NWP-V","RKSJ-H","RKSJ-V","Roman","UniCNS-UCS2-H","UniCNS-UCS2-V","UniCNS-UTF16-H","UniCNS-UTF16-V","UniCNS-UTF32-H","UniCNS-UTF32-V","UniCNS-UTF8-H","UniCNS-UTF8-V","UniGB-UCS2-H","UniGB-UCS2-V","UniGB-UTF16-H","UniGB-UTF16-V","UniGB-UTF32-H","UniGB-UTF32-V","UniGB-UTF8-H","UniGB-UTF8-V","UniJIS-UCS2-H","UniJIS-UCS2-HW-H","UniJIS-UCS2-HW-V","UniJIS-UCS2-V","UniJIS-UTF16-H","UniJIS-UTF16-V","UniJIS-UTF32-H","UniJIS-UTF32-V","UniJIS-UTF8-H","UniJIS-UTF8-V","UniJIS2004-UTF16-H","UniJIS2004-UTF16-V","UniJIS2004-UTF32-H","UniJIS2004-UTF32-V","UniJIS2004-UTF8-H","UniJIS2004-UTF8-V","UniJISPro-UCS2-HW-V","UniJISPro-UCS2-V","UniJISPro-UTF8-V","UniJISX0213-UTF32-H","UniJISX0213-UTF32-V","UniJISX02132004-UTF32-H","UniJISX02132004-UTF32-V","UniKS-UCS2-H","UniKS-UCS2-V","UniKS-UTF16-H","UniKS-UTF16-V","UniKS-UTF32-H","UniKS-UTF32-V","UniKS-UTF8-H","UniKS-UTF8-V","V","WP-Symbol"],Eo=2**24-1,Na=class{constructor(A=!1){this.codespaceRanges=[[],[],[],[]],this.numCodespaceRanges=0,this._map=[],this.name="",this.vertical=!1,this.useCMap=null,this.builtInCMap=A}addCodespaceRange(A,t,i){this.codespaceRanges[A-1].push(t,i),this.numCodespaceRanges++}mapCidRange(A,t,i){if(t-A>Eo)throw new Error("mapCidRange - ignoring data above MAX_MAP_RANGE.");for(;A<=t;)this._map[A++]=i++}mapBfRange(A,t,i){if(t-A>Eo)throw new Error("mapBfRange - ignoring data above MAX_MAP_RANGE.");let s=i.length-1;for(;A<=t;){this._map[A++]=i;let a=i.charCodeAt(s)+1;if(a>255){i=i.substring(0,s-1)+String.fromCharCode(i.charCodeAt(s-1)+1)+"\\0";continue}i=i.substring(0,s)+String.fromCharCode(a)}}mapBfRangeToArray(A,t,i){if(t-A>Eo)throw new Error("mapBfRangeToArray - ignoring data above MAX_MAP_RANGE.");let s=i.length,a=0;for(;A<=t&&a>>0;let g=a[n];for(let o=0,I=g.length;o=c&&s<=l){i.charcode=s,i.length=n+1;return}}}i.charcode=0,i.length=1}getCharCodeLength(A){let t=this.codespaceRanges;for(let i=0,s=t.length;i=g&&A<=o)return i+1}}return 1}get length(){return this._map.length}get isIdentityCMap(){if(!(this.name==="Identity-H"||this.name==="Identity-V")||this._map.length!==65536)return!1;for(let A=0;A<65536;A++)if(this._map[A]!==A)return!1;return!0}},Wi=class extends Na{constructor(A,t){super(),this.vertical=A,this.addCodespaceRange(t,0,65535)}mapCidRange(A,t,i){OA("should not call mapCidRange")}mapBfRange(A,t,i){OA("should not call mapBfRange")}mapBfRangeToArray(A,t,i){OA("should not call mapBfRangeToArray")}mapOne(A,t){OA("should not call mapCidOne")}lookup(A){return Number.isInteger(A)&&A<=65535?A:void 0}contains(A){return Number.isInteger(A)&&A<=65535}forEach(A){for(let t=0;t<=65535;t++)A(t,t)}charCodeOf(A){return Number.isInteger(A)&&A<=65535?A:-1}getMap(){let A=new Array(65536);for(let t=0;t<=65535;t++)A[t]=t;return A}get length(){return 65536}get isIdentityCMap(){OA("should not access .isIdentityCMap")}};function ji(e){let A=0;for(let t=0;t>>0}function y0(e){if(typeof e!="string")throw new v("Malformed CMap: expected string.")}function hf(e){if(!Number.isInteger(e))throw new v("Malformed CMap: expected int.")}function Gd(e,A){for(;;){let t=A.getObj();if(t===Ge)break;if(Ne(t,"endbfchar"))return;y0(t);let i=ji(t);t=A.getObj(),y0(t);let s=t;e.mapOne(i,s)}}function Ud(e,A){for(;;){let t=A.getObj();if(t===Ge)break;if(Ne(t,"endbfrange"))return;y0(t);let i=ji(t);t=A.getObj(),y0(t);let s=ji(t);if(t=A.getObj(),Number.isInteger(t)||typeof t=="string"){let a=Number.isInteger(t)?String.fromCharCode(t):t;e.mapBfRange(i,s,a)}else if(Ne(t,"[")){t=A.getObj();let a=[];for(;!Ne(t,"]")&&t!==Ge;)a.push(t),t=A.getObj();e.mapBfRangeToArray(i,s,a)}else break}throw new v("Invalid bf range.")}function Md(e,A){for(;;){let t=A.getObj();if(t===Ge)break;if(Ne(t,"endcidchar"))return;y0(t);let i=ji(t);t=A.getObj(),hf(t);let s=t;e.mapOne(i,s)}}function Ld(e,A){for(;;){let t=A.getObj();if(t===Ge)break;if(Ne(t,"endcidrange"))return;y0(t);let i=ji(t);t=A.getObj(),y0(t);let s=ji(t);t=A.getObj(),hf(t);let a=t;e.mapCidRange(i,s,a)}}function Hd(e,A){for(;;){let t=A.getObj();if(t===Ge)break;if(Ne(t,"endcodespacerange"))return;if(typeof t!="string")break;let i=ji(t);if(t=A.getObj(),typeof t!="string")break;let s=ji(t);e.addCodespaceRange(t.length,i,s)}throw new v("Invalid codespace range.")}function Jd(e,A){let t=A.getObj();Number.isInteger(t)&&(e.vertical=!!t)}function Yd(e,A){let t=A.getObj();t instanceof M&&(e.name=t.name)}async function Cf(e,A,t,i){let s,a;A:for(;;)try{let n=A.getObj();if(n===Ge)break;if(n instanceof M)n.name==="WMode"?Jd(e,A):n.name==="CMapName"&&Yd(e,A),s=n;else if(n instanceof fe)switch(n.cmd){case"endcmap":break A;case"usecmap":s instanceof M&&(a=s.name);break;case"begincodespacerange":Hd(e,A);break;case"beginbfchar":Gd(e,A);break;case"begincidchar":Md(e,A);break;case"beginbfrange":Ud(e,A);break;case"begincidrange":Ld(e,A);break}}catch(n){if(n instanceof ge)throw n;k("Invalid cMap data: "+n);continue}return!i&&a&&(i=a),i?Bf(e,t,i):e}async function Bf(e,A,t){if(e.useCMap=await pI(t,A),e.numCodespaceRanges===0){let i=e.useCMap.codespaceRanges;for(let s=0;sBf(s,A,a));if(i===Br.NONE){let a=new dt(new Ie(t));return Cf(s,a,A,null)}throw new Error(`Invalid CMap "compressionType" value: ${i}`)}var es=class{static async create({encoding:A,fetchBuiltInCMap:t,useCMap:i}){if(A instanceof M)return pI(A.name,t);if(A instanceof KA){let s=await Cf(new Na,new dt(A),t,i);return s.isIdentityCMap?pI(s.name,t):s}throw new Error("Encoding required.")}},Kd=[".notdef","space","exclam","quotedbl","numbersign","dollar","percent","ampersand","quoteright","parenleft","parenright","asterisk","plus","comma","hyphen","period","slash","zero","one","two","three","four","five","six","seven","eight","nine","colon","semicolon","less","equal","greater","question","at","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","bracketleft","backslash","bracketright","asciicircum","underscore","quoteleft","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","braceleft","bar","braceright","asciitilde","exclamdown","cent","sterling","fraction","yen","florin","section","currency","quotesingle","quotedblleft","guillemotleft","guilsinglleft","guilsinglright","fi","fl","endash","dagger","daggerdbl","periodcentered","paragraph","bullet","quotesinglbase","quotedblbase","quotedblright","guillemotright","ellipsis","perthousand","questiondown","grave","acute","circumflex","tilde","macron","breve","dotaccent","dieresis","ring","cedilla","hungarumlaut","ogonek","caron","emdash","AE","ordfeminine","Lslash","Oslash","OE","ordmasculine","ae","dotlessi","lslash","oslash","oe","germandbls","onesuperior","logicalnot","mu","trademark","Eth","onehalf","plusminus","Thorn","onequarter","divide","brokenbar","degree","thorn","threequarters","twosuperior","registered","minus","eth","multiply","threesuperior","copyright","Aacute","Acircumflex","Adieresis","Agrave","Aring","Atilde","Ccedilla","Eacute","Ecircumflex","Edieresis","Egrave","Iacute","Icircumflex","Idieresis","Igrave","Ntilde","Oacute","Ocircumflex","Odieresis","Ograve","Otilde","Scaron","Uacute","Ucircumflex","Udieresis","Ugrave","Yacute","Ydieresis","Zcaron","aacute","acircumflex","adieresis","agrave","aring","atilde","ccedilla","eacute","ecircumflex","edieresis","egrave","iacute","icircumflex","idieresis","igrave","ntilde","oacute","ocircumflex","odieresis","ograve","otilde","scaron","uacute","ucircumflex","udieresis","ugrave","yacute","ydieresis","zcaron"],vd=[".notdef","space","exclamsmall","Hungarumlautsmall","dollaroldstyle","dollarsuperior","ampersandsmall","Acutesmall","parenleftsuperior","parenrightsuperior","twodotenleader","onedotenleader","comma","hyphen","period","fraction","zerooldstyle","oneoldstyle","twooldstyle","threeoldstyle","fouroldstyle","fiveoldstyle","sixoldstyle","sevenoldstyle","eightoldstyle","nineoldstyle","colon","semicolon","commasuperior","threequartersemdash","periodsuperior","questionsmall","asuperior","bsuperior","centsuperior","dsuperior","esuperior","isuperior","lsuperior","msuperior","nsuperior","osuperior","rsuperior","ssuperior","tsuperior","ff","fi","fl","ffi","ffl","parenleftinferior","parenrightinferior","Circumflexsmall","hyphensuperior","Gravesmall","Asmall","Bsmall","Csmall","Dsmall","Esmall","Fsmall","Gsmall","Hsmall","Ismall","Jsmall","Ksmall","Lsmall","Msmall","Nsmall","Osmall","Psmall","Qsmall","Rsmall","Ssmall","Tsmall","Usmall","Vsmall","Wsmall","Xsmall","Ysmall","Zsmall","colonmonetary","onefitted","rupiah","Tildesmall","exclamdownsmall","centoldstyle","Lslashsmall","Scaronsmall","Zcaronsmall","Dieresissmall","Brevesmall","Caronsmall","Dotaccentsmall","Macronsmall","figuredash","hypheninferior","Ogoneksmall","Ringsmall","Cedillasmall","onequarter","onehalf","threequarters","questiondownsmall","oneeighth","threeeighths","fiveeighths","seveneighths","onethird","twothirds","zerosuperior","onesuperior","twosuperior","threesuperior","foursuperior","fivesuperior","sixsuperior","sevensuperior","eightsuperior","ninesuperior","zeroinferior","oneinferior","twoinferior","threeinferior","fourinferior","fiveinferior","sixinferior","seveninferior","eightinferior","nineinferior","centinferior","dollarinferior","periodinferior","commainferior","Agravesmall","Aacutesmall","Acircumflexsmall","Atildesmall","Adieresissmall","Aringsmall","AEsmall","Ccedillasmall","Egravesmall","Eacutesmall","Ecircumflexsmall","Edieresissmall","Igravesmall","Iacutesmall","Icircumflexsmall","Idieresissmall","Ethsmall","Ntildesmall","Ogravesmall","Oacutesmall","Ocircumflexsmall","Otildesmall","Odieresissmall","OEsmall","Oslashsmall","Ugravesmall","Uacutesmall","Ucircumflexsmall","Udieresissmall","Yacutesmall","Thornsmall","Ydieresissmall"],qd=[".notdef","space","dollaroldstyle","dollarsuperior","parenleftsuperior","parenrightsuperior","twodotenleader","onedotenleader","comma","hyphen","period","fraction","zerooldstyle","oneoldstyle","twooldstyle","threeoldstyle","fouroldstyle","fiveoldstyle","sixoldstyle","sevenoldstyle","eightoldstyle","nineoldstyle","colon","semicolon","commasuperior","threequartersemdash","periodsuperior","asuperior","bsuperior","centsuperior","dsuperior","esuperior","isuperior","lsuperior","msuperior","nsuperior","osuperior","rsuperior","ssuperior","tsuperior","ff","fi","fl","ffi","ffl","parenleftinferior","parenrightinferior","hyphensuperior","colonmonetary","onefitted","rupiah","centoldstyle","figuredash","hypheninferior","onequarter","onehalf","threequarters","oneeighth","threeeighths","fiveeighths","seveneighths","onethird","twothirds","zerosuperior","onesuperior","twosuperior","threesuperior","foursuperior","fivesuperior","sixsuperior","sevensuperior","eightsuperior","ninesuperior","zeroinferior","oneinferior","twoinferior","threeinferior","fourinferior","fiveinferior","sixinferior","seveninferior","eightinferior","nineinferior","centinferior","dollarinferior","periodinferior","commainferior"],Qf=["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","space","exclamsmall","Hungarumlautsmall","","dollaroldstyle","dollarsuperior","ampersandsmall","Acutesmall","parenleftsuperior","parenrightsuperior","twodotenleader","onedotenleader","comma","hyphen","period","fraction","zerooldstyle","oneoldstyle","twooldstyle","threeoldstyle","fouroldstyle","fiveoldstyle","sixoldstyle","sevenoldstyle","eightoldstyle","nineoldstyle","colon","semicolon","commasuperior","threequartersemdash","periodsuperior","questionsmall","","asuperior","bsuperior","centsuperior","dsuperior","esuperior","","","","isuperior","","","lsuperior","msuperior","nsuperior","osuperior","","","rsuperior","ssuperior","tsuperior","","ff","fi","fl","ffi","ffl","parenleftinferior","","parenrightinferior","Circumflexsmall","hyphensuperior","Gravesmall","Asmall","Bsmall","Csmall","Dsmall","Esmall","Fsmall","Gsmall","Hsmall","Ismall","Jsmall","Ksmall","Lsmall","Msmall","Nsmall","Osmall","Psmall","Qsmall","Rsmall","Ssmall","Tsmall","Usmall","Vsmall","Wsmall","Xsmall","Ysmall","Zsmall","colonmonetary","onefitted","rupiah","Tildesmall","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","exclamdownsmall","centoldstyle","Lslashsmall","","","Scaronsmall","Zcaronsmall","Dieresissmall","Brevesmall","Caronsmall","","Dotaccentsmall","","","Macronsmall","","","figuredash","hypheninferior","","","Ogoneksmall","Ringsmall","Cedillasmall","","","","onequarter","onehalf","threequarters","questiondownsmall","oneeighth","threeeighths","fiveeighths","seveneighths","onethird","twothirds","","","zerosuperior","onesuperior","twosuperior","threesuperior","foursuperior","fivesuperior","sixsuperior","sevensuperior","eightsuperior","ninesuperior","zeroinferior","oneinferior","twoinferior","threeinferior","fourinferior","fiveinferior","sixinferior","seveninferior","eightinferior","nineinferior","centinferior","dollarinferior","periodinferior","commainferior","Agravesmall","Aacutesmall","Acircumflexsmall","Atildesmall","Adieresissmall","Aringsmall","AEsmall","Ccedillasmall","Egravesmall","Eacutesmall","Ecircumflexsmall","Edieresissmall","Igravesmall","Iacutesmall","Icircumflexsmall","Idieresissmall","Ethsmall","Ntildesmall","Ogravesmall","Oacutesmall","Ocircumflexsmall","Otildesmall","Odieresissmall","OEsmall","Oslashsmall","Ugravesmall","Uacutesmall","Ucircumflexsmall","Udieresissmall","Yacutesmall","Thornsmall","Ydieresissmall"],Td=["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","space","exclamsmall","Hungarumlautsmall","centoldstyle","dollaroldstyle","dollarsuperior","ampersandsmall","Acutesmall","parenleftsuperior","parenrightsuperior","twodotenleader","onedotenleader","comma","hyphen","period","fraction","zerooldstyle","oneoldstyle","twooldstyle","threeoldstyle","fouroldstyle","fiveoldstyle","sixoldstyle","sevenoldstyle","eightoldstyle","nineoldstyle","colon","semicolon","","threequartersemdash","","questionsmall","","","","","Ethsmall","","","onequarter","onehalf","threequarters","oneeighth","threeeighths","fiveeighths","seveneighths","onethird","twothirds","","","","","","","ff","fi","fl","ffi","ffl","parenleftinferior","","parenrightinferior","Circumflexsmall","hypheninferior","Gravesmall","Asmall","Bsmall","Csmall","Dsmall","Esmall","Fsmall","Gsmall","Hsmall","Ismall","Jsmall","Ksmall","Lsmall","Msmall","Nsmall","Osmall","Psmall","Qsmall","Rsmall","Ssmall","Tsmall","Usmall","Vsmall","Wsmall","Xsmall","Ysmall","Zsmall","colonmonetary","onefitted","rupiah","Tildesmall","","","asuperior","centsuperior","","","","","Aacutesmall","Agravesmall","Acircumflexsmall","Adieresissmall","Atildesmall","Aringsmall","Ccedillasmall","Eacutesmall","Egravesmall","Ecircumflexsmall","Edieresissmall","Iacutesmall","Igravesmall","Icircumflexsmall","Idieresissmall","Ntildesmall","Oacutesmall","Ogravesmall","Ocircumflexsmall","Odieresissmall","Otildesmall","Uacutesmall","Ugravesmall","Ucircumflexsmall","Udieresissmall","","eightsuperior","fourinferior","threeinferior","sixinferior","eightinferior","seveninferior","Scaronsmall","","centinferior","twoinferior","","Dieresissmall","","Caronsmall","osuperior","fiveinferior","","commainferior","periodinferior","Yacutesmall","","dollarinferior","","","Thornsmall","","nineinferior","zeroinferior","Zcaronsmall","AEsmall","Oslashsmall","questiondownsmall","oneinferior","Lslashsmall","","","","","","","Cedillasmall","","","","","","OEsmall","figuredash","hyphensuperior","","","","","exclamdownsmall","","Ydieresissmall","","onesuperior","twosuperior","threesuperior","foursuperior","fivesuperior","sixsuperior","sevensuperior","ninesuperior","zerosuperior","","esuperior","rsuperior","tsuperior","","","isuperior","ssuperior","dsuperior","","","","","","lsuperior","Ogoneksmall","Brevesmall","Macronsmall","bsuperior","nsuperior","msuperior","commasuperior","periodsuperior","Dotaccentsmall","Ringsmall","","","",""],c1=["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","space","exclam","quotedbl","numbersign","dollar","percent","ampersand","quotesingle","parenleft","parenright","asterisk","plus","comma","hyphen","period","slash","zero","one","two","three","four","five","six","seven","eight","nine","colon","semicolon","less","equal","greater","question","at","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","bracketleft","backslash","bracketright","asciicircum","underscore","grave","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","braceleft","bar","braceright","asciitilde","","Adieresis","Aring","Ccedilla","Eacute","Ntilde","Odieresis","Udieresis","aacute","agrave","acircumflex","adieresis","atilde","aring","ccedilla","eacute","egrave","ecircumflex","edieresis","iacute","igrave","icircumflex","idieresis","ntilde","oacute","ograve","ocircumflex","odieresis","otilde","uacute","ugrave","ucircumflex","udieresis","dagger","degree","cent","sterling","section","bullet","paragraph","germandbls","registered","copyright","trademark","acute","dieresis","notequal","AE","Oslash","infinity","plusminus","lessequal","greaterequal","yen","mu","partialdiff","summation","product","pi","integral","ordfeminine","ordmasculine","Omega","ae","oslash","questiondown","exclamdown","logicalnot","radical","florin","approxequal","Delta","guillemotleft","guillemotright","ellipsis","space","Agrave","Atilde","Otilde","OE","oe","endash","emdash","quotedblleft","quotedblright","quoteleft","quoteright","divide","lozenge","ydieresis","Ydieresis","fraction","currency","guilsinglleft","guilsinglright","fi","fl","daggerdbl","periodcentered","quotesinglbase","quotedblbase","perthousand","Acircumflex","Ecircumflex","Aacute","Edieresis","Egrave","Iacute","Icircumflex","Idieresis","Igrave","Oacute","Ocircumflex","apple","Ograve","Uacute","Ucircumflex","Ugrave","dotlessi","circumflex","tilde","macron","breve","dotaccent","ring","cedilla","hungarumlaut","ogonek","caron"],fi=["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","space","exclam","quotedbl","numbersign","dollar","percent","ampersand","quoteright","parenleft","parenright","asterisk","plus","comma","hyphen","period","slash","zero","one","two","three","four","five","six","seven","eight","nine","colon","semicolon","less","equal","greater","question","at","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","bracketleft","backslash","bracketright","asciicircum","underscore","quoteleft","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","braceleft","bar","braceright","asciitilde","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","exclamdown","cent","sterling","fraction","yen","florin","section","currency","quotesingle","quotedblleft","guillemotleft","guilsinglleft","guilsinglright","fi","fl","","endash","dagger","daggerdbl","periodcentered","","paragraph","bullet","quotesinglbase","quotedblbase","quotedblright","guillemotright","ellipsis","perthousand","","questiondown","","grave","acute","circumflex","tilde","macron","breve","dotaccent","dieresis","","ring","cedilla","","hungarumlaut","ogonek","caron","emdash","","","","","","","","","","","","","","","","","AE","","ordfeminine","","","","","Lslash","Oslash","OE","ordmasculine","","","","","","ae","","","","dotlessi","","","lslash","oslash","oe","germandbls","","","",""],Ga=["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","space","exclam","quotedbl","numbersign","dollar","percent","ampersand","quotesingle","parenleft","parenright","asterisk","plus","comma","hyphen","period","slash","zero","one","two","three","four","five","six","seven","eight","nine","colon","semicolon","less","equal","greater","question","at","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","bracketleft","backslash","bracketright","asciicircum","underscore","grave","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","braceleft","bar","braceright","asciitilde","bullet","Euro","bullet","quotesinglbase","florin","quotedblbase","ellipsis","dagger","daggerdbl","circumflex","perthousand","Scaron","guilsinglleft","OE","bullet","Zcaron","bullet","bullet","quoteleft","quoteright","quotedblleft","quotedblright","bullet","endash","emdash","tilde","trademark","scaron","guilsinglright","oe","bullet","zcaron","Ydieresis","space","exclamdown","cent","sterling","currency","yen","brokenbar","section","dieresis","copyright","ordfeminine","guillemotleft","logicalnot","hyphen","registered","macron","degree","plusminus","twosuperior","threesuperior","acute","mu","paragraph","periodcentered","cedilla","onesuperior","ordmasculine","guillemotright","onequarter","onehalf","threequarters","questiondown","Agrave","Aacute","Acircumflex","Atilde","Adieresis","Aring","AE","Ccedilla","Egrave","Eacute","Ecircumflex","Edieresis","Igrave","Iacute","Icircumflex","Idieresis","Eth","Ntilde","Ograve","Oacute","Ocircumflex","Otilde","Odieresis","multiply","Oslash","Ugrave","Uacute","Ucircumflex","Udieresis","Yacute","Thorn","germandbls","agrave","aacute","acircumflex","atilde","adieresis","aring","ae","ccedilla","egrave","eacute","ecircumflex","edieresis","igrave","iacute","icircumflex","idieresis","eth","ntilde","ograve","oacute","ocircumflex","otilde","odieresis","divide","oslash","ugrave","uacute","ucircumflex","udieresis","yacute","thorn","ydieresis"],l1=["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","space","exclam","universal","numbersign","existential","percent","ampersand","suchthat","parenleft","parenright","asteriskmath","plus","comma","minus","period","slash","zero","one","two","three","four","five","six","seven","eight","nine","colon","semicolon","less","equal","greater","question","congruent","Alpha","Beta","Chi","Delta","Epsilon","Phi","Gamma","Eta","Iota","theta1","Kappa","Lambda","Mu","Nu","Omicron","Pi","Theta","Rho","Sigma","Tau","Upsilon","sigma1","Omega","Xi","Psi","Zeta","bracketleft","therefore","bracketright","perpendicular","underscore","radicalex","alpha","beta","chi","delta","epsilon","phi","gamma","eta","iota","phi1","kappa","lambda","mu","nu","omicron","pi","theta","rho","sigma","tau","upsilon","omega1","omega","xi","psi","zeta","braceleft","bar","braceright","similar","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Euro","Upsilon1","minute","lessequal","fraction","infinity","florin","club","diamond","heart","spade","arrowboth","arrowleft","arrowup","arrowright","arrowdown","degree","plusminus","second","greaterequal","multiply","proportional","partialdiff","bullet","divide","notequal","equivalence","approxequal","ellipsis","arrowvertex","arrowhorizex","carriagereturn","aleph","Ifraktur","Rfraktur","weierstrass","circlemultiply","circleplus","emptyset","intersection","union","propersuperset","reflexsuperset","notsubset","propersubset","reflexsubset","element","notelement","angle","gradient","registerserif","copyrightserif","trademarkserif","product","radical","dotmath","logicalnot","logicaland","logicalor","arrowdblboth","arrowdblleft","arrowdblup","arrowdblright","arrowdbldown","lozenge","angleleft","registersans","copyrightsans","trademarksans","summation","parenlefttp","parenleftex","parenleftbt","bracketlefttp","bracketleftex","bracketleftbt","bracelefttp","braceleftmid","braceleftbt","braceex","","angleright","integral","integraltp","integralex","integralbt","parenrighttp","parenrightex","parenrightbt","bracketrighttp","bracketrightex","bracketrightbt","bracerighttp","bracerightmid","bracerightbt",""],h1=["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","space","a1","a2","a202","a3","a4","a5","a119","a118","a117","a11","a12","a13","a14","a15","a16","a105","a17","a18","a19","a20","a21","a22","a23","a24","a25","a26","a27","a28","a6","a7","a8","a9","a10","a29","a30","a31","a32","a33","a34","a35","a36","a37","a38","a39","a40","a41","a42","a43","a44","a45","a46","a47","a48","a49","a50","a51","a52","a53","a54","a55","a56","a57","a58","a59","a60","a61","a62","a63","a64","a65","a66","a67","a68","a69","a70","a71","a72","a73","a74","a203","a75","a204","a76","a77","a78","a79","a81","a82","a83","a84","a97","a98","a99","a100","","a89","a90","a93","a94","a91","a92","a205","a85","a206","a86","a87","a88","a95","a96","","","","","","","","","","","","","","","","","","","","a101","a102","a103","a104","a106","a107","a108","a112","a111","a110","a109","a120","a121","a122","a123","a124","a125","a126","a127","a128","a129","a130","a131","a132","a133","a134","a135","a136","a137","a138","a139","a140","a141","a142","a143","a144","a145","a146","a147","a148","a149","a150","a151","a152","a153","a154","a155","a156","a157","a158","a159","a160","a161","a163","a164","a196","a165","a192","a166","a167","a168","a169","a170","a171","a172","a173","a162","a174","a175","a176","a177","a178","a179","a193","a180","a199","a181","a200","a182","","a201","a183","a184","a197","a185","a194","a198","a186","a195","a187","a188","a189","a190","a191",""];function Ua(e){switch(e){case"WinAnsiEncoding":return Ga;case"StandardEncoding":return fi;case"MacRomanEncoding":return c1;case"SymbolSetEncoding":return l1;case"ZapfDingbatsEncoding":return h1;case"ExpertEncoding":return Qf;case"MacExpertEncoding":return Td;default:return null}}var Pd=10,nr=[".notdef","space","exclam","quotedbl","numbersign","dollar","percent","ampersand","quoteright","parenleft","parenright","asterisk","plus","comma","hyphen","period","slash","zero","one","two","three","four","five","six","seven","eight","nine","colon","semicolon","less","equal","greater","question","at","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","bracketleft","backslash","bracketright","asciicircum","underscore","quoteleft","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","braceleft","bar","braceright","asciitilde","exclamdown","cent","sterling","fraction","yen","florin","section","currency","quotesingle","quotedblleft","guillemotleft","guilsinglleft","guilsinglright","fi","fl","endash","dagger","daggerdbl","periodcentered","paragraph","bullet","quotesinglbase","quotedblbase","quotedblright","guillemotright","ellipsis","perthousand","questiondown","grave","acute","circumflex","tilde","macron","breve","dotaccent","dieresis","ring","cedilla","hungarumlaut","ogonek","caron","emdash","AE","ordfeminine","Lslash","Oslash","OE","ordmasculine","ae","dotlessi","lslash","oslash","oe","germandbls","onesuperior","logicalnot","mu","trademark","Eth","onehalf","plusminus","Thorn","onequarter","divide","brokenbar","degree","thorn","threequarters","twosuperior","registered","minus","eth","multiply","threesuperior","copyright","Aacute","Acircumflex","Adieresis","Agrave","Aring","Atilde","Ccedilla","Eacute","Ecircumflex","Edieresis","Egrave","Iacute","Icircumflex","Idieresis","Igrave","Ntilde","Oacute","Ocircumflex","Odieresis","Ograve","Otilde","Scaron","Uacute","Ucircumflex","Udieresis","Ugrave","Yacute","Ydieresis","Zcaron","aacute","acircumflex","adieresis","agrave","aring","atilde","ccedilla","eacute","ecircumflex","edieresis","egrave","iacute","icircumflex","idieresis","igrave","ntilde","oacute","ocircumflex","odieresis","ograve","otilde","scaron","uacute","ucircumflex","udieresis","ugrave","yacute","ydieresis","zcaron","exclamsmall","Hungarumlautsmall","dollaroldstyle","dollarsuperior","ampersandsmall","Acutesmall","parenleftsuperior","parenrightsuperior","twodotenleader","onedotenleader","zerooldstyle","oneoldstyle","twooldstyle","threeoldstyle","fouroldstyle","fiveoldstyle","sixoldstyle","sevenoldstyle","eightoldstyle","nineoldstyle","commasuperior","threequartersemdash","periodsuperior","questionsmall","asuperior","bsuperior","centsuperior","dsuperior","esuperior","isuperior","lsuperior","msuperior","nsuperior","osuperior","rsuperior","ssuperior","tsuperior","ff","ffi","ffl","parenleftinferior","parenrightinferior","Circumflexsmall","hyphensuperior","Gravesmall","Asmall","Bsmall","Csmall","Dsmall","Esmall","Fsmall","Gsmall","Hsmall","Ismall","Jsmall","Ksmall","Lsmall","Msmall","Nsmall","Osmall","Psmall","Qsmall","Rsmall","Ssmall","Tsmall","Usmall","Vsmall","Wsmall","Xsmall","Ysmall","Zsmall","colonmonetary","onefitted","rupiah","Tildesmall","exclamdownsmall","centoldstyle","Lslashsmall","Scaronsmall","Zcaronsmall","Dieresissmall","Brevesmall","Caronsmall","Dotaccentsmall","Macronsmall","figuredash","hypheninferior","Ogoneksmall","Ringsmall","Cedillasmall","questiondownsmall","oneeighth","threeeighths","fiveeighths","seveneighths","onethird","twothirds","zerosuperior","foursuperior","fivesuperior","sixsuperior","sevensuperior","eightsuperior","ninesuperior","zeroinferior","oneinferior","twoinferior","threeinferior","fourinferior","fiveinferior","sixinferior","seveninferior","eightinferior","nineinferior","centinferior","dollarinferior","periodinferior","commainferior","Agravesmall","Aacutesmall","Acircumflexsmall","Atildesmall","Adieresissmall","Aringsmall","AEsmall","Ccedillasmall","Egravesmall","Eacutesmall","Ecircumflexsmall","Edieresissmall","Igravesmall","Iacutesmall","Icircumflexsmall","Idieresissmall","Ethsmall","Ntildesmall","Ogravesmall","Oacutesmall","Ocircumflexsmall","Otildesmall","Odieresissmall","OEsmall","Oslashsmall","Ugravesmall","Uacutesmall","Ucircumflexsmall","Udieresissmall","Yacutesmall","Thornsmall","Ydieresissmall","001.000","001.001","001.002","001.003","Black","Bold","Book","Light","Medium","Regular","Roman","Semibold"],Kn=391,T0=[null,{id:"hstem",min:2,stackClearing:!0,stem:!0},null,{id:"vstem",min:2,stackClearing:!0,stem:!0},{id:"vmoveto",min:1,stackClearing:!0},{id:"rlineto",min:2,resetStack:!0},{id:"hlineto",min:1,resetStack:!0},{id:"vlineto",min:1,resetStack:!0},{id:"rrcurveto",min:6,resetStack:!0},null,{id:"callsubr",min:1,undefStack:!0},{id:"return",min:0,undefStack:!0},null,null,{id:"endchar",min:0,stackClearing:!0},null,null,null,{id:"hstemhm",min:2,stackClearing:!0,stem:!0},{id:"hintmask",min:0,stackClearing:!0},{id:"cntrmask",min:0,stackClearing:!0},{id:"rmoveto",min:2,stackClearing:!0},{id:"hmoveto",min:1,stackClearing:!0},{id:"vstemhm",min:2,stackClearing:!0,stem:!0},{id:"rcurveline",min:8,resetStack:!0},{id:"rlinecurve",min:8,resetStack:!0},{id:"vvcurveto",min:4,resetStack:!0},{id:"hhcurveto",min:4,resetStack:!0},null,{id:"callgsubr",min:1,undefStack:!0},{id:"vhcurveto",min:4,resetStack:!0},{id:"hvcurveto",min:4,resetStack:!0}],Wd=[null,null,null,{id:"and",min:2,stackDelta:-1},{id:"or",min:2,stackDelta:-1},{id:"not",min:1,stackDelta:0},null,null,null,{id:"abs",min:1,stackDelta:0},{id:"add",min:2,stackDelta:-1,stackFn(e,A){e[A-2]=e[A-2]+e[A-1]}},{id:"sub",min:2,stackDelta:-1,stackFn(e,A){e[A-2]=e[A-2]-e[A-1]}},{id:"div",min:2,stackDelta:-1,stackFn(e,A){e[A-2]=e[A-2]/e[A-1]}},null,{id:"neg",min:1,stackDelta:0,stackFn(e,A){e[A-1]=-e[A-1]}},{id:"eq",min:2,stackDelta:-1},null,null,{id:"drop",min:1,stackDelta:-1},null,{id:"put",min:2,stackDelta:-2},{id:"get",min:1,stackDelta:0},{id:"ifelse",min:4,stackDelta:-3},{id:"random",min:0,stackDelta:1},{id:"mul",min:2,stackDelta:-1,stackFn(e,A){e[A-2]=e[A-2]*e[A-1]}},null,{id:"sqrt",min:1,stackDelta:0},{id:"dup",min:1,stackDelta:1},{id:"exch",min:2,stackDelta:0},{id:"index",min:2,stackDelta:0},{id:"roll",min:3,stackDelta:-2},null,null,null,{id:"hflex",min:7,resetStack:!0},{id:"flex",min:13,resetStack:!0},{id:"hflex1",min:9,resetStack:!0},{id:"flex1",min:11,resetStack:!0}],Ma=class{constructor(A,t,i){this.bytes=A.getBytes(),this.properties=t,this.seacAnalysisEnabled=!!i}parse(){let A=this.properties,t=new Sr;this.cff=t;let i=this.parseHeader(),s=this.parseIndex(i.endPos),a=this.parseIndex(s.endPos),n=this.parseIndex(a.endPos),r=this.parseIndex(n.endPos),g=this.parseDict(a.obj.get(0)),o=this.createDict(b0,g,t.strings);t.header=i.obj,t.names=this.parseNameIndex(s.obj),t.strings=this.parseStringIndex(n.obj),t.topDict=o,t.globalSubrIndex=r.obj,this.parsePrivateDict(t.topDict),t.isCIDFont=o.hasName("ROS");let I=o.getByName("CharStrings"),c=this.parseIndex(I).obj,l=o.getByName("FontMatrix");l&&(A.fontMatrix=l);let h=o.getByName("FontBBox");h&&(A.ascent=Math.max(h[3],h[1]),A.descent=Math.min(h[1],h[3]),A.ascentScaled=!0);let C,B;if(t.isCIDFont){let E=this.parseIndex(o.getByName("FDArray")).obj;for(let f=0,u=E.count;f=t)throw new v("Invalid CFF header");i!==0&&(PA("cff data is shifted"),A=A.subarray(i),this.bytes=A);let s=A[0],a=A[1],n=A[2],r=A[3];return{obj:new Fr(s,a,n,r),endPos:n}}parseDict(A){let t=0;function i(){let g=A[t++];return g===30?s():g===28?(g=A[t++],g=(g<<24|A[t++]<<16)>>16,g):g===29?(g=A[t++],g=g<<8|A[t++],g=g<<8|A[t++],g=g<<8|A[t++],g):g>=32&&g<=246?g-139:g>=247&&g<=250?(g-247)*256+A[t++]+108:g>=251&&g<=254?-((g-251)*256)-A[t++]-108:(k(\'CFFParser_parseDict: "\'+g+\'" is a reserved command.\'),NaN)}function s(){let g="",I=["0","1","2","3","4","5","6","7","8","9",".","E","E-",null,"-"],c=A.length;for(;t>4,C=l&15;if(h===15||(g+=I[h],C===15))break;g+=I[C]}return parseFloat(g)}let a=[],n=[];t=0;let r=A.length;for(;tPd)return!1;let a=A.stackSize,n=A.stack,r=t.length;for(let g=0;g>16,g+=2,a++;else if(o===14){if(a>=4&&(a-=4,this.seacAnalysisEnabled))return A.seac=n.slice(a,a+4),!1;I=T0[o]}else if(o>=32&&o<=246)n[a]=o-139,a++;else if(o>=247&&o<=254)n[a]=o<251?(o-247<<8)+t[g]+108:-(o-251<<8)-t[g]-108,g++,a++;else if(o===255)n[a]=(t[g]<<24|t[g+1]<<16|t[g+2]<<8|t[g+3])/65536,g+=4,a++;else if(o===19||o===20){if(A.hints+=a>>1,A.hints===0){t.copyWithin(g-1,g,-1),g-=1,r-=1;continue}g+=A.hints+7>>3,a%=2,I=T0[o]}else if(o===10||o===29){let c=o===10?i:s;if(!c)return I=T0[o],k("Missing subrsIndex for "+I.id),!1;let l=32768;c.count<1240?l=107:c.count<33900&&(l=1131);let h=n[--a]+l;if(h<0||h>=c.count||isNaN(h))return I=T0[o],k("Out of bounds subrIndex for "+I.id),!1;if(A.stackSize=a,A.callDepth++,!this.parseCharString(A,c.get(h),i,s))return!1;A.callDepth--,a=A.stackSize;continue}else{if(o===11)return A.stackSize=a,!0;if(o===0&&g===t.length)t[g-1]=14,I=T0[14];else if(o===9){t.copyWithin(g-1,g,-1),g-=1,r-=1;continue}else I=T0[o]}if(I){if(I.stem&&(A.hints+=a>>1,o===3||o===23?A.hasVStems=!0:A.hasVStems&&(o===1||o===18)&&(k("CFF stem hints are in wrong order"),t[g-1]=o===1?3:23)),"min"in I&&!A.undefStack&&a=2&&I.stem?a%=2:a>1&&k("Found too many parameters for stack-clearing command"),a>0&&(A.width=n[a-1])),"stackDelta"in I?("stackFn"in I&&I.stackFn(n,a),a+=I.stackDelta):I.stackClearing?a=0:I.resetStack?(a=0,A.undefStack=!1):I.undefStack&&(a=0,A.undefStack=!0,A.firstStackClearing=!1)}}return r=a.length&&(k("Invalid fd index for glyph index."),h=!1),h&&(B=a[Q].privateDict,C=B.subrsIndex)}else t&&(C=t);if(h&&(h=this.parseCharString(l,c,C,i)),l.width!==null){let Q=B.getByName("nominalWidthX");g[I]=Q+l.width}else{let Q=B.getByName("defaultWidthX");g[I]=Q}l.seac!==null&&(r[I]=l.seac),h||A.set(I,new Uint8Array([14]))}return{charStrings:A,seacs:r,widths:g}}emptyPrivateDictionary(A){let t=this.createDict(D0,[],A.strings);A.setByKey(18,[0,0]),A.privateDict=t}parsePrivateDict(A){if(!A.hasName("Private")){this.emptyPrivateDictionary(A);return}let t=A.getByName("Private");if(!Array.isArray(t)||t.length!==2){A.removeByName("Private");return}let i=t[0],s=t[1];if(i===0||s>=this.bytes.length){this.emptyPrivateDictionary(A);return}let a=s+i,n=this.bytes.subarray(s,a),r=this.parseDict(n),g=this.createDict(D0,r,A.strings);if(A.privateDict=g,g.getByName("ExpansionFactor")===0&&g.setByName("ExpansionFactor",.06),!g.getByName("Subrs"))return;let o=g.getByName("Subrs"),I=s+o;if(o===0||I>=this.bytes.length){this.emptyPrivateDictionary(A);return}let c=this.parseIndex(I);g.subrsIndex=c.obj}parseCharsets(A,t,i,s){if(A===0)return new C0(!0,fo.ISO_ADOBE,Kd);if(A===1)return new C0(!0,fo.EXPERT,vd);if(A===2)return new C0(!0,fo.EXPERT_SUBSET,qd);let a=this.bytes,n=A,r=a[A++],g=[s?0:".notdef"],o,I,c;switch(t-=1,r){case 0:for(c=0;c=65535){k("Not enough space in charstrings to duplicate first glyph.");return}let A=this.charStrings.get(0);this.charStrings.add(A),this.isCIDFont&&this.fdSelect.fdSelect.push(this.fdSelect.fdSelect[0])}hasGlyphId(A){return A<0||A>=this.charStrings.count?!1:this.charStrings.get(A).length>0}},Fr=class{constructor(A,t,i,s){this.major=A,this.minor=t,this.hdrSize=i,this.offSize=s}},La=class{constructor(){this.strings=[]}get(A){return A>=0&&A<=Kn-1?nr[A]:A-Kn<=this.strings.length?this.strings[A-Kn]:nr[0]}getSID(A){let t=nr.indexOf(A);return t!==-1?t:(t=this.strings.indexOf(A),t!==-1?t+Kn:-1)}add(A){this.strings.push(A)}get count(){return this.strings.length}},ai=class{constructor(){this.objects=[],this.length=0}add(A){this.length+=A.length,this.objects.push(A)}set(A,t){this.length+=t.length-this.objects[A].length,this.objects[A]=t}get(A){return this.objects[A]}get count(){return this.objects.length}},Rr=class{constructor(A,t){this.keyToNameMap=A.keyToNameMap,this.nameToKeyMap=A.nameToKeyMap,this.defaults=A.defaults,this.types=A.types,this.opcodes=A.opcodes,this.order=A.order,this.strings=t,this.values=Object.create(null)}setByKey(A,t){if(!(A in this.keyToNameMap))return!1;if(t.length===0)return!0;for(let s of t)if(isNaN(s))return k(`Invalid CFFDict value: "${t}" for key "${A}".`),!0;let i=this.types[A];return(i==="num"||i==="sid"||i==="offset")&&(t=t[0]),this.values[A]=t,!0}setByName(A,t){if(!(A in this.nameToKeyMap))throw new v(`Invalid dictionary name "${A}"`);this.values[this.nameToKeyMap[A]]=t}hasName(A){return this.nameToKeyMap[A]in this.values}getByName(A){if(!(A in this.nameToKeyMap))throw new v(`Invalid dictionary name ${A}"`);let t=this.nameToKeyMap[A];return t in this.values?this.values[t]:this.defaults[t]}removeByName(A){delete this.values[this.nameToKeyMap[A]]}static createTables(A){let t={keyToNameMap:{},nameToKeyMap:{},defaults:{},types:{},opcodes:{},order:[]};for(let i of A){let s=Array.isArray(i[0])?(i[0][0]<<8)+i[0][1]:i[0];t.keyToNameMap[s]=i[1],t.nameToKeyMap[i[1]]=s,t.types[s]=i[2],t.defaults[s]=i[3],t.opcodes[s]=Array.isArray(i[0])?i[0]:[i[0]],t.order.push(s)}return t}},Od=[[[12,30],"ROS",["sid","sid","num"],null],[[12,20],"SyntheticBase","num",null],[0,"version","sid",null],[1,"Notice","sid",null],[[12,0],"Copyright","sid",null],[2,"FullName","sid",null],[3,"FamilyName","sid",null],[4,"Weight","sid",null],[[12,1],"isFixedPitch","num",0],[[12,2],"ItalicAngle","num",0],[[12,3],"UnderlinePosition","num",-100],[[12,4],"UnderlineThickness","num",50],[[12,5],"PaintType","num",0],[[12,6],"CharstringType","num",2],[[12,7],"FontMatrix",["num","num","num","num","num","num"],[.001,0,0,.001,0,0]],[13,"UniqueID","num",null],[5,"FontBBox",["num","num","num","num"],[0,0,0,0]],[[12,8],"StrokeWidth","num",0],[14,"XUID","array",null],[15,"charset","offset",0],[16,"Encoding","offset",0],[17,"CharStrings","offset",0],[18,"Private",["offset","offset"],null],[[12,21],"PostScript","sid",null],[[12,22],"BaseFontName","sid",null],[[12,23],"BaseFontBlend","delta",null],[[12,31],"CIDFontVersion","num",0],[[12,32],"CIDFontRevision","num",0],[[12,33],"CIDFontType","num",0],[[12,34],"CIDCount","num",8720],[[12,35],"UIDBase","num",null],[[12,37],"FDSelect","offset",null],[[12,36],"FDArray","offset",null],[[12,38],"FontName","sid",null]],b0=class extends Rr{static get tables(){return nA(this,"tables",this.createTables(Od))}constructor(A){super(b0.tables,A),this.privateDict=null}},Zd=[[6,"BlueValues","delta",null],[7,"OtherBlues","delta",null],[8,"FamilyBlues","delta",null],[9,"FamilyOtherBlues","delta",null],[[12,9],"BlueScale","num",.039625],[[12,10],"BlueShift","num",7],[[12,11],"BlueFuzz","num",1],[10,"StdHW","num",null],[11,"StdVW","num",null],[[12,12],"StemSnapH","delta",null],[[12,13],"StemSnapV","delta",null],[[12,14],"ForceBold","num",0],[[12,17],"LanguageGroup","num",0],[[12,18],"ExpansionFactor","num",.06],[[12,19],"initialRandomSeed","num",0],[20,"defaultWidthX","num",0],[21,"nominalWidthX","num",0],[19,"Subrs","offset",null]],D0=class extends Rr{static get tables(){return nA(this,"tables",this.createTables(Zd))}constructor(A){super(D0.tables,A),this.subrsIndex=null}},fo={ISO_ADOBE:0,EXPERT:1,EXPERT_SUBSET:2},C0=class{constructor(A,t,i,s){this.predefined=A,this.format=t,this.charset=i,this.raw=s}},wI=class{constructor(A,t,i,s){this.predefined=A,this.format=t,this.encoding=i,this.raw=s}},yI=class{constructor(A,t){this.format=A,this.fdSelect=t}getFDIndex(A){return A<0||A>=this.fdSelect.length?-1:this.fdSelect[A]}},Nr=class{constructor(){this.offsets=Object.create(null)}isTracking(A){return A in this.offsets}track(A,t){if(A in this.offsets)throw new v(`Already tracking location of ${A}`);this.offsets[A]=t}offset(A){for(let t in this.offsets)this.offsets[t]+=A}setEntryLocation(A,t,i){if(!(A in this.offsets))throw new v(`Not tracking location of ${A}`);let s=i.data,a=this.offsets[A],n=5;for(let r=0,g=t.length;r>24&255,s[c]=C>>16&255,s[l]=C>>8&255,s[h]=C&255}}},k0=class{constructor(A){this.cff=A}compile(){let A=this.cff,t={data:[],length:0,add(l){try{this.data.push(...l)}catch(h){this.data=this.data.concat(l)}this.length=this.data.length}},i=this.compileHeader(A.header);t.add(i);let s=this.compileNameIndex(A.names);if(t.add(s),A.isCIDFont&&A.topDict.hasName("FontMatrix")){let l=A.topDict.getByName("FontMatrix");A.topDict.removeByName("FontMatrix");for(let h of A.fdArray){let C=l.slice(0);h.hasName("FontMatrix")&&(C=Ce.transform(C,h.getByName("FontMatrix"))),h.setByName("FontMatrix",C)}}let a=A.topDict.getByName("XUID");(a==null?void 0:a.length)>16&&A.topDict.removeByName("XUID"),A.topDict.setByName("charset",0);let n=this.compileTopDicts([A.topDict],t.length,A.isCIDFont);t.add(n.output);let r=n.trackers[0],g=this.compileStringIndex(A.strings.strings);t.add(g);let o=this.compileIndex(A.globalSubrIndex);if(t.add(o),A.encoding&&A.topDict.hasName("Encoding"))if(A.encoding.predefined)r.setEntryLocation("Encoding",[A.encoding.format],t);else{let l=this.compileEncoding(A.encoding);r.setEntryLocation("Encoding",[t.length],t),t.add(l)}let I=this.compileCharset(A.charset,A.charStrings.count,A.strings,A.isCIDFont);r.setEntryLocation("charset",[t.length],t),t.add(I);let c=this.compileCharStrings(A.charStrings);if(r.setEntryLocation("CharStrings",[t.length],t),t.add(c),A.isCIDFont){r.setEntryLocation("FDSelect",[t.length],t);let l=this.compileFDSelect(A.fdSelect);t.add(l),n=this.compileTopDicts(A.fdArray,t.length,!0),r.setEntryLocation("FDArray",[t.length],t),t.add(n.output);let h=n.trackers;this.compilePrivateDicts(A.fdArray,h,t)}return this.compilePrivateDicts([A.topDict],[r],t),t.add([0]),t.data}encodeNumber(A){return Number.isInteger(A)?this.encodeInteger(A):this.encodeFloat(A)}static get EncodeFloatRegExp(){return nA(this,"EncodeFloatRegExp",/\\.(\\d*?)(?:9{5,20}|0{5,20})\\d{0,2}(?:e(.+)|$)/)}encodeFloat(A){let t=A.toString(),i=k0.EncodeFloatRegExp.exec(t);if(i){let g=parseFloat("1e"+((i[2]?+i[2]:0)+i[1].length));t=(Math.round(A*g)/g).toString()}let s="",a,n;for(a=0,n=t.length;a=-107&&A<=107?t=[A+139]:A>=108&&A<=1131?(A-=108,t=[(A>>8)+247,A&255]):A>=-1131&&A<=-108?(A=-A-108,t=[(A>>8)+251,A&255]):A>=-32768&&A<=32767?t=[28,A>>8&255,A&255]:t=[29,A>>24&255,A>>16&255,A>>8&255,A&255],t}compileHeader(A){return[A.major,A.minor,4,A.offSize]}compileNameIndex(A){let t=new ai;for(let i of A){let s=Math.min(i.length,127),a=new Array(s);for(let n=0;n"~"||r==="["||r==="]"||r==="("||r===")"||r==="{"||r==="}"||r==="<"||r===">"||r==="/"||r==="%")&&(r="_"),a[n]=r}a=a.join(""),a===""&&(a="Bad_Font_Name"),t.add(Pe(a))}return this.compileIndex(t)}compileTopDicts(A,t,i){let s=[],a=new ai;for(let n of A){i&&(n.removeByName("CIDFontVersion"),n.removeByName("CIDFontRevision"),n.removeByName("CIDFontType"),n.removeByName("CIDCount"),n.removeByName("UIDBase"));let r=new Nr,g=this.compileDict(n,r);s.push(r),a.add(g),r.offset(t)}return a=this.compileIndex(a,s),{trackers:s,output:a}}compilePrivateDicts(A,t,i){for(let s=0,a=A.length;s>8&255,n&255]);else{let r=1+n*2;a=new Uint8Array(r),a[0]=0;let g=0,o=A.charset.length,I=!1;for(let c=1;c>8&255,a[c+1]=l&255}}return this.compileTypedArray(a)}compileEncoding(A){return this.compileTypedArray(A.raw)}compileFDSelect(A){let t=A.format,i,s;switch(t){case 0:for(i=new Uint8Array(1+A.fdSelect.length),i[0]=t,s=0;s>8&255,a&255,n];for(s=1;s>8&255,s&255,o),n=o)}let g=(r.length-3)/3;r[1]=g>>8&255,r[2]=g&255,r.push(s>>8&255,s&255),i=new Uint8Array(r);break}return this.compileTypedArray(i)}compileTypedArray(A){return Array.from(A)}compileIndex(A,t=[]){let i=A.objects,s=i.length;if(s===0)return[0,0];let a=[s>>8&255,s&255],n=1,r;for(r=0;r>8&255,o&255):g===3?a.push(o>>16&255,o>>8&255,o&255):a.push(o>>>24&255,o>>16&255,o>>8&255,o&255),i[r]&&(o+=i[r].length);for(r=0;r=65520&&e<=65535?0:e>=62976&&e<=63743?Xd()[e]||e:e===173?45:e}function Us(e,A){let t=A[e];if(t!==void 0)return t;if(!e)return-1;if(e[0]==="u"){let i=e.length,s;if(i===7&&e[1]==="n"&&e[2]==="i")s=e.substring(3);else if(i>=5&&i<=7)s=e.substring(1);else return-1;if(s===s.toUpperCase()&&(t=parseInt(s,16),t>=0))return t}return-1}var uo=[[0,127],[128,255],[256,383],[384,591],[592,687,7424,7551,7552,7615],[688,767,42752,42783],[768,879,7616,7679],[880,1023],[11392,11519],[1024,1279,1280,1327,11744,11775,42560,42655],[1328,1423],[1424,1535],[42240,42559],[1536,1791,1872,1919],[1984,2047],[2304,2431],[2432,2559],[2560,2687],[2688,2815],[2816,2943],[2944,3071],[3072,3199],[3200,3327],[3328,3455],[3584,3711],[3712,3839],[4256,4351,11520,11567],[6912,7039],[4352,4607],[7680,7935,11360,11391,42784,43007],[7936,8191],[8192,8303,11776,11903],[8304,8351],[8352,8399],[8400,8447],[8448,8527],[8528,8591],[8592,8703,10224,10239,10496,10623,11008,11263],[8704,8959,10752,11007,10176,10223,10624,10751],[8960,9215],[9216,9279],[9280,9311],[9312,9471],[9472,9599],[9600,9631],[9632,9727],[9728,9983],[9984,10175],[12288,12351],[12352,12447],[12448,12543,12784,12799],[12544,12591,12704,12735],[12592,12687],[43072,43135],[12800,13055],[13056,13311],[44032,55215],[55296,57343],[67840,67871],[19968,40959,11904,12031,12032,12255,12272,12287,13312,19903,131072,173791,12688,12703],[57344,63743],[12736,12783,63744,64255,194560,195103],[64256,64335],[64336,65023],[65056,65071],[65040,65055],[65104,65135],[65136,65279],[65280,65519],[65520,65535],[3840,4095],[1792,1871],[1920,1983],[3456,3583],[4096,4255],[4608,4991,4992,5023,11648,11743],[5024,5119],[5120,5759],[5760,5791],[5792,5887],[6016,6143],[6144,6319],[10240,10495],[40960,42127],[5888,5919,5920,5951,5952,5983,5984,6015],[66304,66351],[66352,66383],[66560,66639],[118784,119039,119040,119295,119296,119375],[119808,120831],[1044480,1048573],[65024,65039,917760,917999],[917504,917631],[6400,6479],[6480,6527],[6528,6623],[6656,6687],[11264,11359],[11568,11647],[19904,19967],[43008,43055],[65536,65663,65664,65791,65792,65855],[65856,65935],[66432,66463],[66464,66527],[66640,66687],[66688,66735],[67584,67647],[68096,68191],[119552,119647],[73728,74751,74752,74879],[119648,119679],[7040,7103],[7168,7247],[7248,7295],[43136,43231],[43264,43311],[43312,43359],[43520,43615],[65936,65999],[66e3,66047],[66208,66271,66176,66207,67872,67903],[127024,127135,126976,127023]];function _d(e,A=-1){if(A!==-1){let t=uo[A];for(let i=0,s=t.length;i=t[i]&&e<=t[i+1])return A}for(let t=0,i=uo.length;t=s[a]&&e<=s[a+1])return t}return-1}var zd=new RegExp("^(\\\\s)|(\\\\p{Mn})|(\\\\p{Cf})$","u"),bI=new Map;function $d(e){let A=bI.get(e);if(A)return A;let t=e.match(zd),i={isWhitespace:!!(t!=null&&t[1]),isZeroWidthDiacritic:!!(t!=null&&t[2]),isInvisibleFormatMark:!!(t!=null&&t[3])};return bI.set(e,i),i}function A2(){bI.clear()}var Cs=!0,Ft={FixedPitch:1,Serif:2,Symbolic:4,Script:8,Nonsymbolic:32,Italic:64,AllCap:65536,SmallCap:131072,ForceBold:262144},O1=[".notdef",".null","nonmarkingreturn","space","exclam","quotedbl","numbersign","dollar","percent","ampersand","quotesingle","parenleft","parenright","asterisk","plus","comma","hyphen","period","slash","zero","one","two","three","four","five","six","seven","eight","nine","colon","semicolon","less","equal","greater","question","at","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","bracketleft","backslash","bracketright","asciicircum","underscore","grave","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","braceleft","bar","braceright","asciitilde","Adieresis","Aring","Ccedilla","Eacute","Ntilde","Odieresis","Udieresis","aacute","agrave","acircumflex","adieresis","atilde","aring","ccedilla","eacute","egrave","ecircumflex","edieresis","iacute","igrave","icircumflex","idieresis","ntilde","oacute","ograve","ocircumflex","odieresis","otilde","uacute","ugrave","ucircumflex","udieresis","dagger","degree","cent","sterling","section","bullet","paragraph","germandbls","registered","copyright","trademark","acute","dieresis","notequal","AE","Oslash","infinity","plusminus","lessequal","greaterequal","yen","mu","partialdiff","summation","product","pi","integral","ordfeminine","ordmasculine","Omega","ae","oslash","questiondown","exclamdown","logicalnot","radical","florin","approxequal","Delta","guillemotleft","guillemotright","ellipsis","nonbreakingspace","Agrave","Atilde","Otilde","OE","oe","endash","emdash","quotedblleft","quotedblright","quoteleft","quoteright","divide","lozenge","ydieresis","Ydieresis","fraction","currency","guilsinglleft","guilsinglright","fi","fl","daggerdbl","periodcentered","quotesinglbase","quotedblbase","perthousand","Acircumflex","Ecircumflex","Aacute","Edieresis","Egrave","Iacute","Icircumflex","Idieresis","Igrave","Oacute","Ocircumflex","apple","Ograve","Uacute","Ucircumflex","Ugrave","dotlessi","circumflex","tilde","macron","breve","dotaccent","ring","cedilla","hungarumlaut","ogonek","caron","Lslash","lslash","Scaron","scaron","Zcaron","zcaron","brokenbar","Eth","eth","Yacute","yacute","Thorn","thorn","minus","multiply","onesuperior","twosuperior","threesuperior","onehalf","onequarter","threequarters","franc","Gbreve","gbreve","Idotaccent","Scedilla","scedilla","Cacute","cacute","Ccaron","ccaron","dcroat"];function Ef(e,A){if(A[e]!==void 0)return e;let t=Us(e,A);if(t!==-1){for(let i in A)if(A[i]===t)return i}return PA("Unable to recover a standard glyph name for: "+e),e}function ff(e,A,t){let i=Object.create(null),s,a,n,r=!!(e.flags&Ft.Symbolic);if(e.isInternalFont)for(n=A,a=0;a=0?s:0;else if(e.baseEncodingName)for(n=Ua(e.baseEncodingName),a=0;a=0?s:0;else if(r)for(a in A)i[a]=A[a];else for(n=fi,a=0;a=0?s:0;let g=e.differences,o;if(g)for(a in g){let I=g[a];if(s=t.indexOf(I),s===-1){o||(o=Ai());let c=Ef(I,o);c!==I&&(s=t.indexOf(c))}i[a]=s>=0?s:0}return i}function pn(e){return e.replaceAll(/[,_]/g,"-").replaceAll(/\\s/g,"")}var e2=he(e=>{e[8211]=65074,e[8212]=65073,e[8229]=65072,e[8230]=65049,e[12289]=65041,e[12290]=65042,e[12296]=65087,e[12297]=65088,e[12298]=65085,e[12299]=65086,e[12300]=65089,e[12301]=65090,e[12302]=65091,e[12303]=65092,e[12304]=65083,e[12305]=65084,e[12308]=65081,e[12309]=65082,e[12310]=65047,e[12311]=65048,e[65103]=65076,e[65281]=65045,e[65288]=65077,e[65289]=65078,e[65292]=65040,e[65306]=65043,e[65307]=65044,e[65311]=65046,e[65339]=65095,e[65341]=65096,e[65343]=65075,e[65371]=65079,e[65373]=65080}),zg=he(function(e){e["Times-Roman"]="Times-Roman",e.Helvetica="Helvetica",e.Courier="Courier",e.Symbol="Symbol",e["Times-Bold"]="Times-Bold",e["Helvetica-Bold"]="Helvetica-Bold",e["Courier-Bold"]="Courier-Bold",e.ZapfDingbats="ZapfDingbats",e["Times-Italic"]="Times-Italic",e["Helvetica-Oblique"]="Helvetica-Oblique",e["Courier-Oblique"]="Courier-Oblique",e["Times-BoldItalic"]="Times-BoldItalic",e["Helvetica-BoldOblique"]="Helvetica-BoldOblique",e["Courier-BoldOblique"]="Courier-BoldOblique",e.ArialNarrow="Helvetica",e["ArialNarrow-Bold"]="Helvetica-Bold",e["ArialNarrow-BoldItalic"]="Helvetica-BoldOblique",e["ArialNarrow-Italic"]="Helvetica-Oblique",e.ArialBlack="Helvetica",e["ArialBlack-Bold"]="Helvetica-Bold",e["ArialBlack-BoldItalic"]="Helvetica-BoldOblique",e["ArialBlack-Italic"]="Helvetica-Oblique",e["Arial-Black"]="Helvetica",e["Arial-Black-Bold"]="Helvetica-Bold",e["Arial-Black-BoldItalic"]="Helvetica-BoldOblique",e["Arial-Black-Italic"]="Helvetica-Oblique",e.Arial="Helvetica",e["Arial-Bold"]="Helvetica-Bold",e["Arial-BoldItalic"]="Helvetica-BoldOblique",e["Arial-Italic"]="Helvetica-Oblique",e.ArialMT="Helvetica",e["Arial-BoldItalicMT"]="Helvetica-BoldOblique",e["Arial-BoldMT"]="Helvetica-Bold",e["Arial-ItalicMT"]="Helvetica-Oblique",e["Arial-BoldItalicMT-BoldItalic"]="Helvetica-BoldOblique",e["Arial-BoldMT-Bold"]="Helvetica-Bold",e["Arial-ItalicMT-Italic"]="Helvetica-Oblique",e.ArialUnicodeMS="Helvetica",e["ArialUnicodeMS-Bold"]="Helvetica-Bold",e["ArialUnicodeMS-BoldItalic"]="Helvetica-BoldOblique",e["ArialUnicodeMS-Italic"]="Helvetica-Oblique",e["Courier-BoldItalic"]="Courier-BoldOblique",e["Courier-Italic"]="Courier-Oblique",e.CourierNew="Courier",e["CourierNew-Bold"]="Courier-Bold",e["CourierNew-BoldItalic"]="Courier-BoldOblique",e["CourierNew-Italic"]="Courier-Oblique",e["CourierNewPS-BoldItalicMT"]="Courier-BoldOblique",e["CourierNewPS-BoldMT"]="Courier-Bold",e["CourierNewPS-ItalicMT"]="Courier-Oblique",e.CourierNewPSMT="Courier",e["Helvetica-BoldItalic"]="Helvetica-BoldOblique",e["Helvetica-Italic"]="Helvetica-Oblique",e["Symbol-Bold"]="Symbol",e["Symbol-BoldItalic"]="Symbol",e["Symbol-Italic"]="Symbol",e.TimesNewRoman="Times-Roman",e["TimesNewRoman-Bold"]="Times-Bold",e["TimesNewRoman-BoldItalic"]="Times-BoldItalic",e["TimesNewRoman-Italic"]="Times-Italic",e.TimesNewRomanPS="Times-Roman",e["TimesNewRomanPS-Bold"]="Times-Bold",e["TimesNewRomanPS-BoldItalic"]="Times-BoldItalic",e["TimesNewRomanPS-BoldItalicMT"]="Times-BoldItalic",e["TimesNewRomanPS-BoldMT"]="Times-Bold",e["TimesNewRomanPS-Italic"]="Times-Italic",e["TimesNewRomanPS-ItalicMT"]="Times-Italic",e.TimesNewRomanPSMT="Times-Roman",e["TimesNewRomanPSMT-Bold"]="Times-Bold",e["TimesNewRomanPSMT-BoldItalic"]="Times-BoldItalic",e["TimesNewRomanPSMT-Italic"]="Times-Italic"}),t2=he(function(e){e.Courier="FoxitFixed.pfb",e["Courier-Bold"]="FoxitFixedBold.pfb",e["Courier-BoldOblique"]="FoxitFixedBoldItalic.pfb",e["Courier-Oblique"]="FoxitFixedItalic.pfb",e.Helvetica="LiberationSans-Regular.ttf",e["Helvetica-Bold"]="LiberationSans-Bold.ttf",e["Helvetica-BoldOblique"]="LiberationSans-BoldItalic.ttf",e["Helvetica-Oblique"]="LiberationSans-Italic.ttf",e["Times-Roman"]="FoxitSerif.pfb",e["Times-Bold"]="FoxitSerifBold.pfb",e["Times-BoldItalic"]="FoxitSerifBoldItalic.pfb",e["Times-Italic"]="FoxitSerifItalic.pfb",e.Symbol="FoxitSymbol.pfb",e.ZapfDingbats="FoxitDingbats.pfb",e["LiberationSans-Regular"]="LiberationSans-Regular.ttf",e["LiberationSans-Bold"]="LiberationSans-Bold.ttf",e["LiberationSans-Italic"]="LiberationSans-Italic.ttf",e["LiberationSans-BoldItalic"]="LiberationSans-BoldItalic.ttf"}),uf=he(function(e){e.Calibri="Helvetica",e["Calibri-Bold"]="Helvetica-Bold",e["Calibri-BoldItalic"]="Helvetica-BoldOblique",e["Calibri-Italic"]="Helvetica-Oblique",e.CenturyGothic="Helvetica",e["CenturyGothic-Bold"]="Helvetica-Bold",e["CenturyGothic-BoldItalic"]="Helvetica-BoldOblique",e["CenturyGothic-Italic"]="Helvetica-Oblique",e.ComicSansMS="Comic Sans MS",e["ComicSansMS-Bold"]="Comic Sans MS-Bold",e["ComicSansMS-BoldItalic"]="Comic Sans MS-BoldItalic",e["ComicSansMS-Italic"]="Comic Sans MS-Italic",e.Impact="Helvetica",e["ItcSymbol-Bold"]="Helvetica-Bold",e["ItcSymbol-BoldItalic"]="Helvetica-BoldOblique",e["ItcSymbol-Book"]="Helvetica",e["ItcSymbol-BookItalic"]="Helvetica-Oblique",e["ItcSymbol-Medium"]="Helvetica",e["ItcSymbol-MediumItalic"]="Helvetica-Oblique",e.LucidaConsole="Courier",e["LucidaConsole-Bold"]="Courier-Bold",e["LucidaConsole-BoldItalic"]="Courier-BoldOblique",e["LucidaConsole-Italic"]="Courier-Oblique",e["LucidaSans-Demi"]="Helvetica-Bold",e["MS-Gothic"]="MS Gothic",e["MS-Gothic-Bold"]="MS Gothic-Bold",e["MS-Gothic-BoldItalic"]="MS Gothic-BoldItalic",e["MS-Gothic-Italic"]="MS Gothic-Italic",e["MS-Mincho"]="MS Mincho",e["MS-Mincho-Bold"]="MS Mincho-Bold",e["MS-Mincho-BoldItalic"]="MS Mincho-BoldItalic",e["MS-Mincho-Italic"]="MS Mincho-Italic",e["MS-PGothic"]="MS PGothic",e["MS-PGothic-Bold"]="MS PGothic-Bold",e["MS-PGothic-BoldItalic"]="MS PGothic-BoldItalic",e["MS-PGothic-Italic"]="MS PGothic-Italic",e["MS-PMincho"]="MS PMincho",e["MS-PMincho-Bold"]="MS PMincho-Bold",e["MS-PMincho-BoldItalic"]="MS PMincho-BoldItalic",e["MS-PMincho-Italic"]="MS PMincho-Italic",e.NuptialScript="Times-Italic",e.SegoeUISymbol="Helvetica"}),C1=he(function(e){e["Adobe Jenson"]=!0,e["Adobe Text"]=!0,e.Albertus=!0,e.Aldus=!0,e.Alexandria=!0,e.Algerian=!0,e["American Typewriter"]=!0,e.Antiqua=!0,e.Apex=!0,e.Arno=!0,e.Aster=!0,e.Aurora=!0,e.Baskerville=!0,e.Bell=!0,e.Bembo=!0,e["Bembo Schoolbook"]=!0,e.Benguiat=!0,e["Berkeley Old Style"]=!0,e["Bernhard Modern"]=!0,e["Berthold City"]=!0,e.Bodoni=!0,e["Bauer Bodoni"]=!0,e["Book Antiqua"]=!0,e.Bookman=!0,e["Bordeaux Roman"]=!0,e["Californian FB"]=!0,e.Calisto=!0,e.Calvert=!0,e.Capitals=!0,e.Cambria=!0,e.Cartier=!0,e.Caslon=!0,e.Catull=!0,e.Centaur=!0,e["Century Old Style"]=!0,e["Century Schoolbook"]=!0,e.Chaparral=!0,e["Charis SIL"]=!0,e.Cheltenham=!0,e["Cholla Slab"]=!0,e.Clarendon=!0,e.Clearface=!0,e.Cochin=!0,e.Colonna=!0,e["Computer Modern"]=!0,e["Concrete Roman"]=!0,e.Constantia=!0,e["Cooper Black"]=!0,e.Corona=!0,e.Ecotype=!0,e.Egyptienne=!0,e.Elephant=!0,e.Excelsior=!0,e.Fairfield=!0,e["FF Scala"]=!0,e.Folkard=!0,e.Footlight=!0,e.FreeSerif=!0,e["Friz Quadrata"]=!0,e.Garamond=!0,e.Gentium=!0,e.Georgia=!0,e.Gloucester=!0,e["Goudy Old Style"]=!0,e["Goudy Schoolbook"]=!0,e["Goudy Pro Font"]=!0,e.Granjon=!0,e["Guardian Egyptian"]=!0,e.Heather=!0,e.Hercules=!0,e["High Tower Text"]=!0,e.Hiroshige=!0,e["Hoefler Text"]=!0,e["Humana Serif"]=!0,e.Imprint=!0,e["Ionic No. 5"]=!0,e.Janson=!0,e.Joanna=!0,e.Korinna=!0,e.Lexicon=!0,e.LiberationSerif=!0,e["Liberation Serif"]=!0,e["Linux Libertine"]=!0,e.Literaturnaya=!0,e.Lucida=!0,e["Lucida Bright"]=!0,e.Melior=!0,e.Memphis=!0,e.Miller=!0,e.Minion=!0,e.Modern=!0,e["Mona Lisa"]=!0,e["Mrs Eaves"]=!0,e["MS Serif"]=!0,e["Museo Slab"]=!0,e["New York"]=!0,e["Nimbus Roman"]=!0,e["NPS Rawlinson Roadway"]=!0,e.NuptialScript=!0,e.Palatino=!0,e.Perpetua=!0,e.Plantin=!0,e["Plantin Schoolbook"]=!0,e.Playbill=!0,e["Poor Richard"]=!0,e["Rawlinson Roadway"]=!0,e.Renault=!0,e.Requiem=!0,e.Rockwell=!0,e.Roman=!0,e["Rotis Serif"]=!0,e.Sabon=!0,e.Scala=!0,e.Seagull=!0,e.Sistina=!0,e.Souvenir=!0,e.STIX=!0,e["Stone Informal"]=!0,e["Stone Serif"]=!0,e.Sylfaen=!0,e.Times=!0,e.Trajan=!0,e.Trinit\\u00E9=!0,e["Trump Mediaeval"]=!0,e.Utopia=!0,e["Vale Type"]=!0,e["Bitstream Vera"]=!0,e["Vera Serif"]=!0,e.Versailles=!0,e.Wanted=!0,e.Weiss=!0,e["Wide Latin"]=!0,e.Windsor=!0,e.XITS=!0}),DI=he(function(e){e.Dingbats=!0,e.Symbol=!0,e.ZapfDingbats=!0,e.Wingdings=!0,e["Wingdings-Bold"]=!0,e["Wingdings-Regular"]=!0}),Z1=he(function(e){e[2]=10,e[3]=32,e[4]=33,e[5]=34,e[6]=35,e[7]=36,e[8]=37,e[9]=38,e[10]=39,e[11]=40,e[12]=41,e[13]=42,e[14]=43,e[15]=44,e[16]=45,e[17]=46,e[18]=47,e[19]=48,e[20]=49,e[21]=50,e[22]=51,e[23]=52,e[24]=53,e[25]=54,e[26]=55,e[27]=56,e[28]=57,e[29]=58,e[30]=894,e[31]=60,e[32]=61,e[33]=62,e[34]=63,e[35]=64,e[36]=65,e[37]=66,e[38]=67,e[39]=68,e[40]=69,e[41]=70,e[42]=71,e[43]=72,e[44]=73,e[45]=74,e[46]=75,e[47]=76,e[48]=77,e[49]=78,e[50]=79,e[51]=80,e[52]=81,e[53]=82,e[54]=83,e[55]=84,e[56]=85,e[57]=86,e[58]=87,e[59]=88,e[60]=89,e[61]=90,e[62]=91,e[63]=92,e[64]=93,e[65]=94,e[66]=95,e[67]=96,e[68]=97,e[69]=98,e[70]=99,e[71]=100,e[72]=101,e[73]=102,e[74]=103,e[75]=104,e[76]=105,e[77]=106,e[78]=107,e[79]=108,e[80]=109,e[81]=110,e[82]=111,e[83]=112,e[84]=113,e[85]=114,e[86]=115,e[87]=116,e[88]=117,e[89]=118,e[90]=119,e[91]=120,e[92]=121,e[93]=122,e[94]=123,e[95]=124,e[96]=125,e[97]=126,e[98]=196,e[99]=197,e[100]=199,e[101]=201,e[102]=209,e[103]=214,e[104]=220,e[105]=225,e[106]=224,e[107]=226,e[108]=228,e[109]=227,e[110]=229,e[111]=231,e[112]=233,e[113]=232,e[114]=234,e[115]=235,e[116]=237,e[117]=236,e[118]=238,e[119]=239,e[120]=241,e[121]=243,e[122]=242,e[123]=244,e[124]=246,e[125]=245,e[126]=250,e[127]=249,e[128]=251,e[129]=252,e[130]=8224,e[131]=176,e[132]=162,e[133]=163,e[134]=167,e[135]=8226,e[136]=182,e[137]=223,e[138]=174,e[139]=169,e[140]=8482,e[141]=180,e[142]=168,e[143]=8800,e[144]=198,e[145]=216,e[146]=8734,e[147]=177,e[148]=8804,e[149]=8805,e[150]=165,e[151]=181,e[152]=8706,e[153]=8721,e[154]=8719,e[156]=8747,e[157]=170,e[158]=186,e[159]=8486,e[160]=230,e[161]=248,e[162]=191,e[163]=161,e[164]=172,e[165]=8730,e[166]=402,e[167]=8776,e[168]=8710,e[169]=171,e[170]=187,e[171]=8230,e[179]=8220,e[180]=8221,e[181]=8216,e[182]=8217,e[200]=193,e[203]=205,e[207]=211,e[210]=218,e[223]=711,e[224]=321,e[225]=322,e[226]=352,e[227]=353,e[228]=381,e[229]=382,e[233]=221,e[234]=253,e[252]=263,e[253]=268,e[254]=269,e[258]=258,e[260]=260,e[261]=261,e[265]=280,e[266]=281,e[267]=282,e[268]=283,e[269]=313,e[275]=323,e[276]=324,e[278]=328,e[283]=344,e[284]=345,e[285]=346,e[286]=347,e[292]=367,e[295]=377,e[296]=378,e[298]=380,e[305]=963,e[306]=964,e[307]=966,e[308]=8215,e[309]=8252,e[310]=8319,e[311]=8359,e[312]=8592,e[313]=8593,e[337]=9552,e[493]=1039,e[494]=1040,e[672]=1488,e[673]=1489,e[674]=1490,e[675]=1491,e[676]=1492,e[677]=1493,e[678]=1494,e[679]=1495,e[680]=1496,e[681]=1497,e[682]=1498,e[683]=1499,e[684]=1500,e[685]=1501,e[686]=1502,e[687]=1503,e[688]=1504,e[689]=1505,e[690]=1506,e[691]=1507,e[692]=1508,e[693]=1509,e[694]=1510,e[695]=1511,e[696]=1512,e[697]=1513,e[698]=1514,e[705]=1524,e[706]=8362,e[710]=64288,e[711]=64298,e[759]=1617,e[761]=1776,e[763]=1778,e[775]=1652,e[777]=1764,e[778]=1780,e[779]=1781,e[780]=1782,e[782]=771,e[783]=64726,e[786]=8363,e[788]=8532,e[790]=768,e[791]=769,e[792]=768,e[795]=803,e[797]=64336,e[798]=64337,e[799]=64342,e[800]=64343,e[801]=64344,e[802]=64345,e[803]=64362,e[804]=64363,e[805]=64364,e[2424]=7821,e[2425]=7822,e[2426]=7823,e[2427]=7824,e[2428]=7825,e[2429]=7826,e[2430]=7827,e[2433]=7682,e[2678]=8045,e[2679]=8046,e[2830]=1552,e[2838]=686,e[2840]=751,e[2842]=753,e[2843]=754,e[2844]=755,e[2846]=757,e[2856]=767,e[2857]=848,e[2858]=849,e[2862]=853,e[2863]=854,e[2864]=855,e[2865]=861,e[2866]=862,e[2906]=7460,e[2908]=7462,e[2909]=7463,e[2910]=7464,e[2912]=7466,e[2913]=7467,e[2914]=7468,e[2916]=7470,e[2917]=7471,e[2918]=7472,e[2920]=7474,e[2921]=7475,e[2922]=7476,e[2924]=7478,e[2925]=7479,e[2926]=7480,e[2928]=7482,e[2929]=7483,e[2930]=7484,e[2932]=7486,e[2933]=7487,e[2934]=7488,e[2936]=7490,e[2937]=7491,e[2938]=7492,e[2940]=7494,e[2941]=7495,e[2942]=7496,e[2944]=7498,e[2946]=7500,e[2948]=7502,e[2950]=7504,e[2951]=7505,e[2952]=7506,e[2954]=7508,e[2955]=7509,e[2956]=7510,e[2958]=7512,e[2959]=7513,e[2960]=7514,e[2962]=7516,e[2963]=7517,e[2964]=7518,e[2966]=7520,e[2967]=7521,e[2968]=7522,e[2970]=7524,e[2971]=7525,e[2972]=7526,e[2974]=7528,e[2975]=7529,e[2976]=7530,e[2978]=1537,e[2979]=1538,e[2980]=1539,e[2982]=1549,e[2983]=1551,e[2984]=1552,e[2986]=1554,e[2987]=1555,e[2988]=1556,e[2990]=1623,e[2991]=1624,e[2995]=1775,e[2999]=1791,e[3002]=64290,e[3003]=64291,e[3004]=64292,e[3006]=64294,e[3007]=64295,e[3008]=64296,e[3011]=1900,e[3014]=8223,e[3015]=8244,e[3017]=7532,e[3018]=7533,e[3019]=7534,e[3075]=7590,e[3076]=7591,e[3079]=7594,e[3080]=7595,e[3083]=7598,e[3084]=7599,e[3087]=7602,e[3088]=7603,e[3091]=7606,e[3092]=7607,e[3095]=7610,e[3096]=7611,e[3099]=7614,e[3100]=7615,e[3103]=7618,e[3104]=7619,e[3107]=8337,e[3108]=8338,e[3116]=1884,e[3119]=1885,e[3120]=1885,e[3123]=1886,e[3124]=1886,e[3127]=1887,e[3128]=1887,e[3131]=1888,e[3132]=1888,e[3135]=1889,e[3136]=1889,e[3139]=1890,e[3140]=1890,e[3143]=1891,e[3144]=1891,e[3147]=1892,e[3148]=1892,e[3153]=580,e[3154]=581,e[3157]=584,e[3158]=585,e[3161]=588,e[3162]=589,e[3165]=891,e[3166]=892,e[3169]=1274,e[3170]=1275,e[3173]=1278,e[3174]=1279,e[3181]=7622,e[3182]=7623,e[3282]=11799,e[3316]=578,e[3379]=42785,e[3393]=1159,e[3416]=8377}),i2=he(function(e){e[227]=322,e[264]=261,e[291]=346}),s2=he(function(e){e[1]=32,e[4]=65,e[5]=192,e[6]=193,e[9]=196,e[17]=66,e[18]=67,e[21]=268,e[24]=68,e[28]=69,e[29]=200,e[30]=201,e[32]=282,e[38]=70,e[39]=71,e[44]=72,e[47]=73,e[48]=204,e[49]=205,e[58]=74,e[60]=75,e[62]=76,e[68]=77,e[69]=78,e[75]=79,e[76]=210,e[80]=214,e[87]=80,e[89]=81,e[90]=82,e[92]=344,e[94]=83,e[97]=352,e[100]=84,e[104]=85,e[109]=220,e[115]=86,e[116]=87,e[121]=88,e[122]=89,e[124]=221,e[127]=90,e[129]=381,e[258]=97,e[259]=224,e[260]=225,e[263]=228,e[268]=261,e[271]=98,e[272]=99,e[273]=263,e[275]=269,e[282]=100,e[286]=101,e[287]=232,e[288]=233,e[290]=283,e[295]=281,e[296]=102,e[336]=103,e[346]=104,e[349]=105,e[350]=236,e[351]=237,e[361]=106,e[364]=107,e[367]=108,e[371]=322,e[373]=109,e[374]=110,e[381]=111,e[382]=242,e[383]=243,e[386]=246,e[393]=112,e[395]=113,e[396]=114,e[398]=345,e[400]=115,e[401]=347,e[403]=353,e[410]=116,e[437]=117,e[442]=252,e[448]=118,e[449]=119,e[454]=120,e[455]=121,e[457]=253,e[460]=122,e[462]=382,e[463]=380,e[853]=44,e[855]=58,e[856]=46,e[876]=47,e[878]=45,e[882]=45,e[894]=40,e[895]=41,e[896]=91,e[897]=93,e[923]=64,e[1004]=48,e[1005]=49,e[1006]=50,e[1007]=51,e[1008]=52,e[1009]=53,e[1010]=54,e[1011]=55,e[1012]=56,e[1013]=57,e[1081]=37,e[1085]=43,e[1086]=45});function j1(e){let A=pn(e);return zg()[A]}function X1(e){let A=pn(e);return!!(zg()[A]||uf()[A]||C1()[A]||DI()[A])}var B0=class{constructor(A=[]){this._map=A}get length(){return this._map.length}forEach(A){for(let t in this._map)A(t,this._map[t].charCodeAt(0))}has(A){return this._map[A]!==void 0}get(A){return this._map[A]}charCodeOf(A){let t=this._map;if(t.length<=65536)return t.indexOf(A);for(let i in t)if(t[i]===A)return i|0;return-1}amend(A){for(let t in A)this._map[t]=A[t]}},Ct=class{constructor(A,t){this.firstChar=A,this.lastChar=t}get length(){return this.lastChar+1-this.firstChar}forEach(A){for(let t=this.firstChar,i=this.lastChar;t<=i;t++)A(t,t)}has(A){return this.firstChar<=A&&A<=this.lastChar}get(A){if(this.firstChar<=A&&A<=this.lastChar)return String.fromCharCode(A)}charCodeOf(A){return Number.isInteger(A)&&A>=this.firstChar&&A<=this.lastChar?A:-1}amend(A){OA("Should not call amend()")}},Ea=class{constructor(A,t){this.properties=t;let i=new Ma(A,t,Cs);this.cff=i.parse(),this.cff.duplicateFirstGlyph();let s=new k0(this.cff);this.seacs=this.cff.seacs;try{this.data=s.compile()}catch(a){k("Failed to compile font "+t.loadedName),this.data=A}this._createBuiltInEncoding()}get numGlyphs(){return this.cff.charStrings.count}getCharset(){return this.cff.charset.charset}getGlyphMapping(){let A=this.cff,t=this.properties,{cidToGidMap:i,cMap:s}=t,a=A.charset.charset,n,r;if(t.composite){let o;if((i==null?void 0:i.length)>0){o=Object.create(null);for(let c=0,l=i.length;c=0){let g=i[r];g&&(a[n]=g)}}a.length>0&&(this.properties.builtInEncoding=a)}};function hi(e,A){return(e[A]<<24|e[A+1]<<16|e[A+2]<<8|e[A+3])>>>0}function Re(e,A){return e[A]<<8|e[A+1]}function V0(e,A){return(e[A]<<24|e[A+1]<<16)>>16}function V1(e,A){return e[A]<<24>>24}function t0(e,A){return V0(e,A)/16384}function kI(e){let A=e.length,t=32768;return A<1240?t=107:A<33900&&(t=1131),t}function a2(e,A,t){let i=Re(e,A+2)===1?hi(e,A+8):hi(e,A+16),s=Re(e,A+i),a,n,r;if(s===4){Re(e,A+i+2);let g=Re(e,A+i+6)>>1;for(n=A+i+14,a=[],r=0;r2*Re(r,g));let a=[],n=s(A,0);for(let r=i;r>1;t0;)Q.push({flags:g})}for(l=0;l>1,B=!0;break;case 3:I+=r.length>>1,B=!0;break;case 4:o+=r.pop(),s(g,o),B=!0;break;case 5:for(;r.length>0;)g+=r.shift(),o+=r.shift(),a(g,o);break;case 6:for(;r.length>0&&(g+=r.shift(),a(g,o),r.length!==0);)o+=r.shift(),a(g,o);break;case 7:for(;r.length>0&&(o+=r.shift(),a(g,o),r.length!==0);)g+=r.shift(),a(g,o);break;case 8:for(;r.length>0;)E=g+r.shift(),u=o+r.shift(),f=E+r.shift(),d=u+r.shift(),g=f+r.shift(),o=d+r.shift(),n(E,u,f,d,g,o);break;case 10:if(D=r.pop(),S=null,t.isCFFCIDFont){let w=t.fdSelect.getFDIndex(i);if(w>=0&&wMath.abs(o-Y)?g+=r.shift():o+=r.shift(),n(E,u,f,d,g,o);break;default:throw new v(`unknown operator: 12 ${Q}`)}break;case 14:if(r.length>=4){let w=r.pop(),Y=r.pop();o=r.pop(),g=r.pop(),A.add(_e.SAVE),A.add(_e.TRANSLATE,[g,o]);let U=Gr(t.cmap,String.fromCharCode(t.glyphNameMap[fi[w]]));SI(t.glyphs[U.glyphId],A,t,U.glyphId),A.add(_e.RESTORE),U=Gr(t.cmap,String.fromCharCode(t.glyphNameMap[fi[Y]])),SI(t.glyphs[U.glyphId],A,t,U.glyphId)}return;case 18:I+=r.length>>1,B=!0;break;case 19:I+=r.length>>1,h+=I+7>>3,B=!0;break;case 20:I+=r.length>>1,h+=I+7>>3,B=!0;break;case 21:o+=r.pop(),g+=r.pop(),s(g,o),B=!0;break;case 22:g+=r.pop(),s(g,o),B=!0;break;case 23:I+=r.length>>1,B=!0;break;case 24:for(;r.length>2;)E=g+r.shift(),u=o+r.shift(),f=E+r.shift(),d=u+r.shift(),g=f+r.shift(),o=d+r.shift(),n(E,u,f,d,g,o);g+=r.shift(),o+=r.shift(),a(g,o);break;case 25:for(;r.length>6;)g+=r.shift(),o+=r.shift(),a(g,o);E=g+r.shift(),u=o+r.shift(),f=E+r.shift(),d=u+r.shift(),g=f+r.shift(),o=d+r.shift(),n(E,u,f,d,g,o);break;case 26:for(r.length%2&&(g+=r.shift());r.length>0;)E=g,u=o+r.shift(),f=E+r.shift(),d=u+r.shift(),g=f,o=d+r.shift(),n(E,u,f,d,g,o);break;case 27:for(r.length%2&&(o+=r.shift());r.length>0;)E=g+r.shift(),u=o,f=E+r.shift(),d=u+r.shift(),g=f+r.shift(),o=d,n(E,u,f,d,g,o);break;case 28:r.push((l[h]<<24|l[h+1]<<16)>>16),h+=2;break;case 29:D=r.pop()+t.gsubrsBias,S=t.gsubrs[D],S&&c(S);break;case 30:for(;r.length>0&&(E=g,u=o+r.shift(),f=E+r.shift(),d=u+r.shift(),g=f+r.shift(),o=d+(r.length===1?r.shift():0),n(E,u,f,d,g,o),r.length!==0);)E=g+r.shift(),u=o,f=E+r.shift(),d=u+r.shift(),o=d+r.shift(),g=f+(r.length===1?r.shift():0),n(E,u,f,d,g,o);break;case 31:for(;r.length>0&&(E=g+r.shift(),u=o,f=E+r.shift(),d=u+r.shift(),o=d+r.shift(),g=f+(r.length===1?r.shift():0),n(E,u,f,d,g,o),r.length!==0);)E=g,u=o+r.shift(),f=E+r.shift(),d=u+r.shift(),g=f+r.shift(),o=d+(r.length===1?r.shift():0),n(E,u,f,d,g,o);break;default:if(Q<32)throw new v(`unknown operator: ${Q}`);Q<247?r.push(Q-139):Q<251?r.push((Q-247)*256+l[h++]+108):Q<255?r.push(-(Q-251)*256-l[h++]-108):(r.push((l[h]<<24|l[h+1]<<16|l[h+2]<<8|l[h+3])/65536),h+=4);break}B&&(r.length=0)}}c(e)}var _1=[],FI=class{constructor(){et(this,"cmds",[])}add(A,t){if(t)if(wt(t,null))this.cmds.push(A,...t);else{k(`Commands.add - "${A}" has at least one non-number arg: "${t}".`);let i=t.map(s=>typeof s=="number"?s:0);this.cmds.push(A,...i)}else this.cmds.push(A)}},Ur=class{constructor(A){this.fontMatrix=A,this.compiledGlyphs=Object.create(null),this.compiledCharCodeToGlyphId=Object.create(null)}getPathJs(A){var n,r;let{charCode:t,glyphId:i}=Gr(this.cmap,A),s=this.compiledGlyphs[i],a;if(!s){try{s=this.compileGlyph(this.glyphs[i],i)}catch(g){s=_1,a=g}this.compiledGlyphs[i]=s}if((r=(n=this.compiledCharCodeToGlyphId)[t])!=null||(n[t]=i),a)throw a;return s}compileGlyph(A,t){if(!A||A.length===0||A[0]===14)return _1;let i=this.fontMatrix;if(this.isCFFCIDFont){let a=this.fdSelect.getFDIndex(t);a>=0&&a{let i=t.getSize();return A+(i+3&-4)},0)}write(){let A=this.getSize(),t=new DataView(new ArrayBuffer(A)),i=A>131070,s=i?4:2,a=new DataView(new ArrayBuffer((this.glyphs.length+1)*s));i?a.setUint32(0,0):a.setUint16(0,0);let n=0,r=0;for(let g of this.glyphs)n+=g.write(n,t),n=n+3&-4,r+=s,i?a.setUint32(r,n):a.setUint16(r,n>>1);return{isLocationLong:i,loca:new Uint8Array(a.buffer),glyf:new Uint8Array(t.buffer)}}scale(A){for(let t=0,i=this.glyphs.length;tt+i.getSize(),0);return this.header.getSize()+A}write(A,t){if(!this.header)return 0;let i=A;if(A+=this.header.write(A,t),this.simple)A+=this.simple.write(A,t);else for(let s of this.composites)A+=s.write(A,t);return A-i}scale(A){if(!this.header)return;let t=(this.header.xMin+this.header.xMax)/2;if(this.header.scale(t,A),this.simple)this.simple.scale(t,A);else for(let i of this.composites)i.scale(t,A)}},Ha=class{constructor({numberOfContours:A,xMin:t,yMin:i,xMax:s,yMax:a}){this.numberOfContours=A,this.xMin=t,this.yMin=i,this.xMax=s,this.yMax=a}static parse(A,t){return[10,new Ha({numberOfContours:t.getInt16(A),xMin:t.getInt16(A+2),yMin:t.getInt16(A+4),xMax:t.getInt16(A+6),yMax:t.getInt16(A+8)})]}getSize(){return 10}write(A,t){return t.setInt16(A,this.numberOfContours),t.setInt16(A+2,this.xMin),t.setInt16(A+4,this.yMin),t.setInt16(A+6,this.xMax),t.setInt16(A+8,this.yMax),10}scale(A,t){this.xMin=Math.round(A+(this.xMin-A)*t),this.xMax=Math.round(A+(this.xMax-A)*t)}},MI=class{constructor({flags:A,xCoordinates:t,yCoordinates:i}){this.xCoordinates=t,this.yCoordinates=i,this.flags=A}},Ja=class{constructor({contours:A,instructions:t}){this.contours=A,this.instructions=t}static parse(A,t,i){let s=[];for(let Q=0;Q255?A+=2:o>0&&(A+=1),t=r,o=Math.abs(g-i),o>255?A+=2:o>0&&(A+=1),i=g}}return A}write(A,t){let i=A,s=[],a=[],n=[],r=0,g=0;for(let o of this.contours){for(let I=0,c=o.xCoordinates.length;I=0?vn|zs:vn,s.push(Q)):s.push(C)}r=h;let B=o.yCoordinates[I];if(C=B-g,C===0)l|=$s,a.push(0);else{let Q=Math.abs(C);Q<=255?(l|=C>=0?qn|$s:qn,a.push(Q)):a.push(C)}g=B,n.push(l)}t.setUint16(A,s.length-1),A+=2}t.setUint16(A,this.instructions.length),A+=2,this.instructions.length&&(new Uint8Array(t.buffer,0,t.buffer.byteLength).set(this.instructions,A),A+=this.instructions.length);for(let o of n)t.setUint8(A++,o);for(let o=0,I=s.length;o=-128&&this.argument1<=127&&this.argument2>=-128&&this.argument2<=127||(A+=2):this.argument1>=0&&this.argument1<=255&&this.argument2>=0&&this.argument2<=255||(A+=2),A}write(A,t){let i=A;return this.flags&Tn?this.argument1>=-128&&this.argument1<=127&&this.argument2>=-128&&this.argument2<=127||(this.flags|=Aa):this.argument1>=0&&this.argument1<=255&&this.argument2>=0&&this.argument2<=255||(this.flags|=Aa),t.setUint16(A,this.flags),t.setUint16(A+2,this.glyphIndex),A+=4,this.flags&Aa?(this.flags&Tn?(t.setInt16(A,this.argument1),t.setInt16(A+2,this.argument2)):(t.setUint16(A,this.argument1),t.setUint16(A+2,this.argument2)),A+=4):(t.setUint8(A,this.argument1),t.setUint8(A+1,this.argument2),A+=2),this.flags&xo&&(t.setUint16(A,this.instructions.length),A+=2,this.instructions.length&&(new Uint8Array(t.buffer,0,t.buffer.byteLength).set(this.instructions,A),A+=this.instructions.length)),A-i}scale(A,t){}};function Pn(e,A,t){e[A]=t>>8&255,e[A+1]=t&255}function mo(e,A,t){e[A]=t>>24&255,e[A+1]=t>>16&255,e[A+2]=t>>8&255,e[A+3]=t&255}function Q2(e,A,t){if(t instanceof Uint8Array)e.set(t,A);else if(typeof t=="string")for(let i=0,s=t.length;ii;)i<<=1,s++;let a=i*t;return{range:a,entry:s,rangeShift:t*A-a}}toArray(){let A=this.sfnt,t=this.tables,i=Object.keys(t);i.sort();let s=i.length,a,n,r,g,o,I=$1+s*AE,c=[I];for(a=0;a>>0;I+=C,c.push(I)}let l=new Uint8Array(I);for(a=0;a>>0}mo(l,I+4,C),mo(l,I+8,c[a]),mo(l,I+12,t[o].length),I+=AE}return l}addTable(A,t){if(A in this.tables)throw new Error("Table "+A+" already exists");this.tables[A]=t}},la=!1,Fe={hstem:[1],vstem:[3],vmoveto:[4],rlineto:[5],hlineto:[6],vlineto:[7],rrcurveto:[8],callsubr:[10],flex:[12,35],drop:[12,18],endchar:[14],rmoveto:[21],hmoveto:[22],vhcurveto:[30],hvcurveto:[31]},LI=class{constructor(){this.width=0,this.lsb=0,this.flexing=!1,this.output=[],this.stack=[]}convert(A,t,i){let s=A.length,a=!1,n,r,g;for(let o=0;os)return!0;let a=s-A;for(let n=a;n>8&255,r&255):(r=65536*r|0,this.output.push(255,r>>24&255,r>>16&255,r>>8&255,r&255))}return this.output.push(...t),i?this.stack.splice(a,A):this.stack.length=0,!1}},eE=55665,E2=4330;function _t(e){return e>=48&&e<=57||e>=65&&e<=70||e>=97&&e<=102}function tE(e,A,t){if(t>=e.length)return new Uint8Array(0);let i=52845,s=22719,a=A|0,n,r;for(n=0;n>8,a=(I+a)*i+s&(1<<16)-1}return o}function f2(e,A,t){let a=A|0,n=e.length,r=n>>>1,g=new Uint8Array(r),o,I;for(o=0,I=0;o>8,a=(h+a)*52845+22719&(1<<16)-1}}return g.slice(t,I)}function iE(e){return e===47||e===91||e===93||e===123||e===125||e===40||e===41}var Mr=class{constructor(A,t,i){if(t){let s=A.getBytes(),a=!((_t(s[0])||pt(s[0]))&&_t(s[1])&&_t(s[2])&&_t(s[3])&&_t(s[4])&&_t(s[5])&&_t(s[6])&&_t(s[7]));A=new Ie(a?tE(s,eE,4):f2(s,eE,4))}this.seacAnalysisEnabled=!!i,this.stream=A,this.nextChar()}readNumberArray(){this.getToken();let A=[];for(;;){let t=this.getToken();if(t===null||t==="]"||t==="}")break;A.push(parseFloat(t||0))}return A}readNumber(){let A=this.getToken();return parseFloat(A||0)}readInt(){let A=this.getToken();return parseInt(A||0,10)|0}readBoolean(){return this.getToken()==="true"?1:0}nextChar(){return this.currentChar=this.stream.getByte()}prevChar(){return this.stream.skip(-2),this.currentChar=this.stream.getByte()}getToken(){let A=!1,t=this.currentChar;for(;;){if(t===-1)return null;if(A)(t===10||t===13)&&(A=!1);else if(t===37)A=!0;else if(!pt(t))break;t=this.nextChar()}if(iE(t))return this.nextChar(),String.fromCharCode(t);let i="";do i+=String.fromCharCode(t),t=this.nextChar();while(t>=0&&!pt(t)&&!iE(t));return i}readCharStrings(A,t){return t===-1?A:tE(A,E2,t)}extractFontProgram(A){let t=this.stream,i=[],s=[],a=Object.create(null);a.lenIV=4;let n={subrs:[],charstrings:[],properties:{privateData:a}},r,g,o,I;for(;(r=this.getToken())!==null;)if(r==="/")switch(r=this.getToken(),r){case"CharStrings":for(this.getToken(),this.getToken(),this.getToken(),this.getToken();r=this.getToken(),!(r===null||r==="end");){if(r!=="/")continue;let l=this.getToken();g=this.readInt(),this.getToken(),o=g>0?t.getBytes(g):new Uint8Array(0),I=n.properties.privateData.lenIV;let h=this.readCharStrings(o,I);this.nextChar(),r=this.getToken(),r==="noaccess"?this.getToken():r==="/"&&this.prevChar(),s.push({glyph:l,encoded:h})}break;case"Subrs":for(this.readInt(),this.getToken();this.getToken()==="dup";){let l=this.readInt();g=this.readInt(),this.getToken(),o=g>0?t.getBytes(g):new Uint8Array(0),I=n.properties.privateData.lenIV;let h=this.readCharStrings(o,I);this.nextChar(),r=this.getToken(),r==="noaccess"&&this.getToken(),i[l]=h}break;case"BlueValues":case"OtherBlues":case"FamilyBlues":case"FamilyOtherBlues":let c=this.readNumberArray();c.length>0&&c.length%2===0&&la&&(n.properties.privateData[r]=c);break;case"StemSnapH":case"StemSnapV":n.properties.privateData[r]=this.readNumberArray();break;case"StdHW":case"StdVW":n.properties.privateData[r]=this.readNumberArray()[0];break;case"BlueShift":case"lenIV":case"BlueFuzz":case"BlueScale":case"LanguageGroup":n.properties.privateData[r]=this.readNumber();break;case"ExpansionFactor":n.properties.privateData[r]=this.readNumber()||.06;break;case"ForceBold":n.properties.privateData[r]=this.readBoolean();break}for(let{encoded:c,glyph:l}of s){let h=new LI,C=h.convert(c,i,this.seacAnalysisEnabled),B=h.output;C&&(B=[14]);let Q={glyphName:l,charstring:B,width:h.width,lsb:h.lsb,seac:h.seac};if(l===".notdef"?n.charstrings.unshift(Q):n.charstrings.push(Q),A.builtInEncoding){let E=A.builtInEncoding.indexOf(l);E>-1&&A.widths[E]===void 0&&E>=A.firstChar&&E<=A.lastChar&&(A.widths[E]=h.width)}}return n}extractFontHeader(A){let t;for(;(t=this.getToken())!==null;)if(t==="/")switch(t=this.getToken(),t){case"FontMatrix":let i=this.readNumberArray();A.fontMatrix=i;break;case"Encoding":let s=this.getToken(),a;if(!/^\\d+$/.test(s))a=Ua(s);else{a=[];let r=parseInt(s,10)|0;this.getToken();for(let g=0;g=s){for(n+=g;n=0&&(s[r]=a)}return ff(A,s,i)}hasGlyphId(A){return A<0||A>=this.numGlyphs?!1:A===0?!0:this.charstrings[A-1].charstring.length>0}getSeacs(A){let t=[];for(let i=0,s=A.length;i0;d--)u[d]-=u[d-1];C.setByName(f,u)}n.topDict.privateDict=C;let Q=new ai;for(c=0,l=s.length;c0&&e.toUnicode.amend(s)}function p2(e,A){if(e.isInternalFont||e.hasIncludedToUnicodeMap||A===e.defaultEncoding||e.toUnicode instanceof Ct)return;let t=[],i=Ai();for(let s in A){if(e.hasEncoding&&(e.baseEncodingName||e.differences[s]!==void 0))continue;let a=A[s],n=Us(a,i);n!==-1&&(t[s]=String.fromCharCode(n))}t.length>0&&e.toUnicode.amend(t)}function nE(e){if(!e.fallbackToUnicode||e.toUnicode instanceof Ct)return;let A=[];for(let t in e.fallbackToUnicode)e.toUnicode.has(t)||(A[t]=e.fallbackToUnicode[t]);A.length>0&&e.toUnicode.amend(A)}var JI=class{constructor(A,t,i,s,a,n,r,g,o){this.originalCharCode=A,this.fontChar=t,this.unicode=i,this.accent=s,this.width=a,this.vmetric=n,this.operatorListId=r,this.isSpace=g,this.isInFont=o}get category(){return nA(this,"category",$d(this.unicode),!0)}};function i0(e,A){return(e<<8)+A}function ea(e,A,t){e[A+1]=t,e[A]=t>>>8}function Dt(e,A){let t=(e<<8)+A;return t&1<<15?t-65536:t}function w2(e,A,t){e[A+3]=t&255,e[A+2]=t>>>8,e[A+1]=t>>>16,e[A]=t>>>24}function y2(e,A,t,i){return(e<<24)+(A<<16)+(t<<8)+i}function zA(e){return String.fromCharCode(e>>8&255,e&255)}function s0(e){return e>32767?e=32767:e<-32768&&(e=-32768),String.fromCharCode(e>>8&255,e&255)}function b2(e){let A=e.peekBytes(4);return le(A,0)===65536||Qt(A)==="true"}function xf(e){let A=e.peekBytes(4);return Qt(A)==="ttcf"}function D2(e){let A=e.peekBytes(4);return Qt(A)==="OTTO"}function k2(e){let A=e.peekBytes(2);return A[0]===37&&A[1]===33||A[0]===128&&A[1]===1}function S2(e){let A=e.peekBytes(4);return A[0]>=1&&A[3]>=1&&A[3]<=4}function F2(e,{type:A,subtype:t,composite:i}){let s,a;return b2(e)||xf(e)?s=i?"CIDFontType2":"TrueType":D2(e)?s=i?"CIDFontType2":"OpenType":k2(e)?i?s="CIDFontType0":s=A==="MMType1"?"MMType1":"Type1":S2(e)?i?(s="CIDFontType0",a="CIDFontType0C"):(s=A==="MMType1"?"MMType1":"Type1",a="Type1C"):(k("getFontFileType: Unable to detect correct font file Type/Subtype."),s=A,a=t),[s,a]}function Wn(e,A){for(let t in A)e[+t]=A[t]}function wo(e,A,t){let i=[],s;for(let a=0,n=e.length;aoi[0][0]<=h&&h<=oi[0][1]||oi[1][0]<=h&&h<=oi[1][1];for(let h in e){let C=e[h];if(!A(C))continue;if(I>c){if(g++,g>=oi.length){k("Ran out of space in font private use area.");break}I=oi[g][0],c=oi[g][1]}let B=I++;C===0&&(C=t);let Q=i.get(h);typeof Q=="string"&&(Q=Q.codePointAt(0)),Q&&!l(Q)&&!r.has(C)&&(a.set(Q,C),r.add(C)),s[B]=C,n[h]=B}return{toFontChar:n,charCodeToGlyphId:s,toUnicodeExtraMap:a,nextAvailableFontCharCode:I}}function N2(e,A,t){let i=[];for(let n in e)e[n]>=t||i.push({fontCharCode:n|0,glyphId:e[n]});if(A)for(let[n,r]of A)r>=t||i.push({fontCharCode:n,glyphId:r});i.length===0&&i.push({fontCharCode:0,glyphId:0}),i.sort(function(r,g){return r.fontCharCode-g.fontCharCode});let s=[],a=i.length;for(let n=0;n65535?2:1,a="\\0\\0"+zA(s)+"\\0\\0"+qe(4+s*8),n,r,g,o;for(n=i.length-1;n>=0&&!(i[n][0]<=65535);--n);let I=n+1;i[n][0]<65535&&i[n][1]===65535&&(i[n][1]=65534);let c=i[n][1]<65535?1:0,l=I+c,h=F0.getSearchParams(l,2),C="",B="",Q="",E="",f="",u=0,d,x,p,m;for(n=0,r=I;n0&&(B+="\\xFF\\xFF",C+="\\xFF\\xFF",Q+="\\0",E+="\\0\\0");let D="\\0\\0"+zA(2*l)+zA(h.range)+zA(h.entry)+zA(h.rangeShift)+B+"\\0\\0"+C+Q+E+f,S="",w="";if(s>1){for(a+=`\\0\\0\n`+qe(4+s*8+4+D.length),S="",n=0,r=i.length;na||(A.skip(6),A.getUint16()===0)?!1:(e.data[8]=e.data[9]=0,!0)}function oE(e,A,t){t||(t={unitsPerEm:0,yMax:0,yMin:0,ascent:0,descent:0});let i=0,s=0,a=0,n=0,r=null,g=0,o=-1;if(A){for(let E in A)if(E|=0,(r>E||!r)&&(r=E),g 123 are reserved for internal usage");g>65535&&(g=65535)}else r=0,g=255;let I=e.bbox||[0,0,0,0],c=t.unitsPerEm||(e.fontMatrix?1/Math.max(...e.fontMatrix.slice(0,4).map(Math.abs)):1e3),l=e.ascentScaled?1:c/n0,h=t.ascent||Math.round(l*(e.ascent||I[3])),C=t.descent||Math.round(l*(e.descent||I[1]));C>0&&e.descent>0&&I[1]<0&&(C=-C);let B=t.yMax||h,Q=-t.yMin||-C;return"\\0$\\xF4\\0\\0\\0\\x8A\\xBB\\0\\0\\0\\x8C\\x8A\\xBB\\0\\0\\xDF\\x001\\0\\0\\0\\0"+String.fromCharCode(e.fixedPitch?9:0)+"\\0\\0\\0\\0\\0\\0"+qe(i)+qe(s)+qe(a)+qe(n)+"*21*"+zA(e.italicAngle?1:0)+zA(r||e.firstChar)+zA(g||e.lastChar)+zA(h)+zA(C)+"\\0d"+zA(B)+zA(Q)+"\\0\\0\\0\\0\\0\\0\\0\\0"+zA(e.xHeight)+zA(e.capHeight)+zA(0)+zA(r||e.firstChar)+"\\0"}function IE(e){let A=Math.floor(e.italicAngle*65536);return"\\0\\0\\0"+qe(A)+"\\0\\0\\0\\0"+qe(e.fixedPitch?1:0)+"\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0"}function U2(e){return e.replaceAll(/[^\\x21-\\x7E]|[[\\](){}<>/%]/g,"").slice(0,63)}function bo(e,A){A||(A=[[],[]]);let t=[A[0][0]||"Original licence",A[0][1]||e,A[0][2]||"Unknown",A[0][3]||"uniqueID",A[0][4]||e,A[0][5]||"Version 0.11",A[0][6]||U2(e),A[0][7]||"Unknown",A[0][8]||"Unknown",A[0][9]||"Unknown"],i=[],s,a,n,r,g;for(s=0,a=t.length;s0,(r||g)&&i==="CIDFontType2"&&this.cidEncoding.startsWith("Identity-")){let l=A.cidToGidMap,h=[];if(Wn(h,Z1()),/Arial-?Black/i.test(t)?Wn(h,i2()):/Calibri/i.test(t)&&Wn(h,s2()),l){for(let C in h){let B=h[C];l[B]!==void 0&&(h[+C]=l[B])}l.length!==this.toUnicode.length&&A.hasIncludedToUnicodeMap&&this.toUnicode instanceof Ct&&this.toUnicode.forEach(function(C,B){let Q=h[C];l[Q]===void 0&&(h[+C]=B)})}this.toUnicode instanceof Ct||this.toUnicode.forEach(function(C,B){h[+C]=B}),this.toFontChar=h,this.toUnicode=new B0(h)}else if(/Symbol/i.test(s))this.toFontChar=wo(l1,Ai(),this.differences);else if(/Dingbats/i.test(s))this.toFontChar=wo(h1,jd(),this.differences);else if(r||g){let l=wo(this.defaultEncoding,Ai(),this.differences);i==="CIDFontType2"&&!this.cidEncoding.startsWith("Identity-")&&!(this.toUnicode instanceof Ct)&&this.toUnicode.forEach(function(h,C){l[+h]=C}),this.toFontChar=l}else{let l=Ai(),h=[];this.toUnicode.forEach((C,B)=>{if(!this.composite){let Q=this.differences[C]||this.defaultEncoding[C],E=Us(Q,l);E!==-1&&(B=E)}h[+C]=B}),this.composite&&this.toUnicode instanceof Ct&&/Tahoma|Verdana/i.test(t)&&Wn(h,Z1()),this.toFontChar=h}nE(A),this.loadedName=s.split("-",1)[0]}checkAndRepair(A,t,i){var EA,fA,CA;let s=["OS/2","cmap","head","hhea","hmtx","maxp","name","post","loca","glyf","fpgm","prep","cvt ","CFF "];function a(N,H){let q=Object.create(null);q["OS/2"]=null,q.cmap=null,q.head=null,q.hhea=null,q.hmtx=null,q.maxp=null,q.name=null,q.post=null;for(let T=0;T>>0,T=N.getInt32()>>>0,$=N.getInt32()>>>0,X=N.pos;N.pos=N.start||0,N.skip(T);let W=N.getBytes($);return N.pos=X,H==="head"&&(W[8]=W[9]=W[10]=W[11]=0,W[17]|=32),{tag:H,checksum:q,length:$,offset:T,data:W}}function r(N){return{version:N.getString(4),numTables:N.getUint16(),searchRange:N.getUint16(),entrySelector:N.getUint16(),rangeShift:N.getUint16()}}function g(N){let H=N.getString(4);gt(H==="ttcf","Must be a TrueType Collection font.");let q=N.getUint16(),T=N.getUint16(),$=N.getInt32()>>>0,X=[];for(let G=0;G<$;G++)X.push(N.getInt32()>>>0);let W={ttcTag:H,majorVersion:q,minorVersion:T,numFonts:$,offsetTable:X};switch(q){case 1:return W;case 2:return W.dsigTag=N.getInt32()>>>0,W.dsigLength=N.getInt32()>>>0,W.dsigOffset=N.getInt32()>>>0,W}throw new v(`Invalid TrueType Collection majorVersion: ${q}.`)}function o(N,H){var W;let{numFonts:q,offsetTable:T}=g(N),$=H.split("+"),X;for(let G=0;G>>0,UA=!1;if(!((G==null?void 0:G.platformId)===yA&&(G==null?void 0:G.encodingId)===aA)){if(yA===0&&(aA===0||aA===1||aA===3))UA=!0;else if(yA===1&&aA===0)UA=!0;else if(yA===3&&aA===1&&(T||!G))UA=!0,q||(BA=!0);else if(q&&yA===3&&aA===0){UA=!0;let Ee=!0;if(cA>3;cA.push(UA),yA=Math.max(UA,yA)}let aA=[];for(let DA=0;DA<=yA;DA++)aA.push({firstCode:H.getUint16(),entryCount:H.getUint16(),idDelta:Dt(H.getByte(),H.getByte()),idRangePos:H.pos+H.getUint16()});for(let DA=0;DA<256;DA++)if(cA[DA]===0)H.pos=aA[0].idRangePos+2*DA,FA=H.getUint16(),iA.push({charCode:DA,glyphId:FA});else{let UA=aA[cA[DA]];for(wA=0;wA>1;H.skip(6);let yA=[],aA;for(aA=0;aA>1)-(cA-aA),$.offsetIndex=UA,DA=Math.max(DA,UA+$.end-$.start+1)}let Ee=[];for(wA=0;wA>>0;for(wA=0;wA>>0,aA=H.getInt32()>>>0,DA=H.getInt32()>>>0;for(let UA=yA;UA<=aA;UA++)iA.push({charCode:UA,glyphId:DA++})}}else return k("cmap table has unsupported format: "+uA),{platformId:-1,encodingId:-1,mappings:[],hasShortCmap:!1};iA.sort(function(cA,yA){return cA.charCode-yA.charCode});for(let cA=1;cA$&&(PA(`The numOfMetrics (${G}) should not be greater than the numGlyphs (${$}).`),G=$,H.data[34]=(G&65280)>>8,H.data[35]=G&255);let uA=$-G-(q.length-G*4>>1);if(uA>0){let bA=new Uint8Array(q.length+uA*2);bA.set(q.data),X&&(bA[q.length]=q.data[2],bA[q.length+1]=q.data[3]),q.data=bA}}function l(N,H,q,T,$,X){let W={length:0,sizeOfInstructions:0};if(H<0||H>=N.length||q>N.length||q-H<=12)return W;let G=N.subarray(H,q),BA=Dt(G[2],G[3]),uA=Dt(G[4],G[5]),bA=Dt(G[6],G[7]),iA=Dt(G[8],G[9]);BA>bA&&(ea(G,2,bA),ea(G,6,BA)),uA>iA&&(ea(G,4,iA),ea(G,8,uA));let wA=Dt(G[0],G[1]);if(wA<0)return wA<-1||(T.set(G,$),W.length=G.length),W;let FA,cA=10,yA=0;for(FA=0;FAG.length?W:!X&&DA>0?(T.set(G.subarray(0,aA),$),T.set([0,0],$+aA),T.set(G.subarray(UA,pA),$+aA+2),pA-=DA,G.length-pA>3&&(pA=pA+3&-4),W.length=pA,W):G.length-pA>3?(pA=pA+3&-4,T.set(G.subarray(0,pA),$),W.length=pA,W):(T.set(G,$),W.length=G.length,W)}function h(N,H,q){let T=N.data,$=y2(T[0],T[1],T[2],T[3]);$>>16!==1&&(PA("Attempting to fix invalid version in head table: "+$),T[0]=0,T[1]=1,T[2]=0,T[3]=0);let X=i0(T[50],T[51]);if(X<0||X>1){PA("Attempting to fix invalid indexToLocFormat in head table: "+X);let W=H+1;if(q===W<<1)T[50]=0,T[51]=0;else if(q===W<<2)T[50]=0,T[51]=1;else throw new v("Could not fix indexToLocFormat: "+X)}}function C(N,H,q,T,$,X,W){let G,BA,uA;T?(G=4,BA=function(WA,re){return WA[re]<<24|WA[re+1]<<16|WA[re+2]<<8|WA[re+3]},uA=function(WA,re,De){WA[re]=De>>>24&255,WA[re+1]=De>>16&255,WA[re+2]=De>>8&255,WA[re+3]=De&255}):(G=2,BA=function(WA,re){return WA[re]<<9|WA[re+1]<<1},uA=function(WA,re,De){WA[re]=De>>9&255,WA[re+1]=De>>1&255});let bA=X?q+1:q,iA=G*(1+bA),wA=new Uint8Array(iA);wA.set(N.data.subarray(0,iA)),N.data=wA;let FA=H.data,cA=FA.length,yA=new Uint8Array(cA),aA,DA,UA=[];for(aA=0,DA=0;aAcA&&(LA=cA),UA.push({index:aA,offset:LA,endOffset:0})}for(UA.sort((LA,WA)=>LA.offset-WA.offset),aA=0;aALA.index-WA.index),aA=0;aAW&&(W=LA.sizeOfInstructions),TA+=WA,uA(wA,DA,TA)}if(TA===0){let LA=new Uint8Array([0,1,0,0,0,0,0,0,0,0,0,0,0,0,49,0]);for(aA=0,DA=G;aALA+TA?H.data=yA.subarray(0,LA+TA):(H.data=new Uint8Array(LA+TA),H.data.set(yA.subarray(0,TA))),H.data.set(yA.subarray(0,LA),TA),uA(N.data,wA.length-G,TA+LA)}else H.data=yA.subarray(0,TA);return{missingGlyphs:pA,maxSizeOfInstructions:W}}function B(N,H,q){let T=(t.start||0)+N.offset;t.pos=T;let $=N.length,X=T+$,W=t.getInt32();t.skip(28);let G,BA=!0,uA;switch(W){case 65536:G=O1;break;case 131072:let bA=t.getUint16();if(bA!==q){BA=!1;break}let iA=[];for(uA=0;uA=32768){BA=!1;break}iA.push(cA)}if(!BA)break;let wA=[],FA=[];for(;t.posX)continue;t.pos=cA;let yA=FA.name;if(FA.encoding){let aA="";for(let DA=0,UA=FA.length;DA0&&(T+=TA-1)}if(!yA&&!DA){let TA=0;for(pA<=142?TA=E[pA]:pA>=192&&pA<=223?TA=-1:pA>=224&&(TA=-2),pA>=113&&pA<=117&&(X=iA.pop(),isNaN(X)||(TA=-X*2));TA<0&&iA.length>0;)iA.pop(),TA++;for(;TA>0;)iA.push(NaN),TA--}}H.tooComplexToFollowFunctions=cA;let UA=[q];T>q.length&&UA.push(new Uint8Array(T-q.length)),bA>uA&&(k("TT: complementing a missing function tail"),UA.push(new Uint8Array([34,45]))),d(N,UA)}function u(N,H){if(!N.tooComplexToFollowFunctions){if(N.functionsDefined.length>H){k("TT: more functions defined than expected"),N.hintsValid=!1;return}for(let q=0,T=N.functionsUsed.length;qH){k("TT: invalid function id: "+q),N.hintsValid=!1;return}if(N.functionsUsed[q]&&!N.functionsDefined[q]){k("TT: undefined function: "+q),N.hintsValid=!1;return}}}}function d(N,H){if(H.length>1){let q=0,T,$;for(T=0,$=H.length;T<$;T++)q+=H[T].length;q=q+3&-4;let X=new Uint8Array(q),W=0;for(T=0,$=H.length;T<$;T++)X.set(H[T],W),W+=H[T].length;N.data=X,N.length=q}}function x(N,H,q,T){let $={functionsDefined:[],functionsUsed:[],functionsStackDeltas:[],tooComplexToFollowFunctions:!1,hintsValid:!0};if(N&&f(N,$),H&&f(H,$),N&&u($,T),q&&q.length&1){let X=new Uint8Array(q.length+1);X.set(q.data),q.data=X}return $.hintsValid}t=new Ie(new Uint8Array(t.getBytes()));let p,m;if(xf(t)){let N=o(t,this.name);p=N.header,m=N.tables}else p=r(t),m=a(t,p.numTables);let D,S,w=!m["CFF "];if(w){if(!m.loca)throw new v(\'Required "loca" table is not found\');m.glyf||(k(\'Required "glyf" table is not found -- trying to recover.\'),m.glyf={tag:"glyf",data:new Uint8Array(0)}),this.isOpenType=!1}else{let N=i.composite&&(((EA=i.cidToGidMap)==null?void 0:EA.length)>0||!(i.cMap instanceof Wi));if(p.version==="OTTO"&&!N||!m.head||!m.hhea||!m.maxp||!m.post)return S=new Ie(m["CFF "].data),D=new Ea(S,i),po(i),this.convert(A,D,i);delete m.glyf,delete m.loca,delete m.fpgm,delete m.prep,delete m["cvt "],this.isOpenType=!0}if(!m.maxp)throw new v(\'Required "maxp" table is not found\');t.pos=(t.start||0)+m.maxp.offset;let Y=t.getInt32(),U=t.getUint16();if(Y!==65536&&Y!==20480){if(m.maxp.length===6)Y=20480;else if(m.maxp.length>=32)Y=65536;else throw new v(\'"maxp" table has a wrong version number\');w2(m.maxp.data,0,Y)}if(((fA=i.scaleFactors)==null?void 0:fA.length)===U&&w){let{scaleFactors:N}=i,H=i0(m.head.data[50],m.head.data[51]),q=new UI({glyfTable:m.glyf.data,isGlyphLocationsLong:H,locaTable:m.loca.data,numGlyphs:U});q.scale(N);let{glyf:T,loca:$,isLocationLong:X}=q.write();m.glyf.data=T,m.loca.data=$,X!==!!H&&(m.head.data[50]=0,m.head.data[51]=X?1:0);let W=m.hmtx.data;for(let G=0;G>8&255,W[BA+1]=uA&255;let bA=Math.round(N[G]*Dt(W[BA+2],W[BA+3]));ea(W,BA+2,bA)}}let K=U+1,Z=!0;K>65535&&(Z=!1,K=U,k("Not enough space in glyfs to duplicate first glyph."));let AA=0,gA=0;Y>=65536&&m.maxp.length>=32&&(t.pos+=8,t.getUint16()>2&&(m.maxp.data[14]=0,m.maxp.data[15]=2),t.pos+=4,AA=t.getUint16(),t.pos+=4,gA=t.getUint16()),m.maxp.data[4]=K>>8,m.maxp.data[5]=K&255;let R=x(m.fpgm,m.prep,m["cvt "],AA);if(R||(delete m.fpgm,delete m.prep,delete m["cvt "]),c(t,m.hhea,m.hmtx,m.head,K,Z),!m.head)throw new v(\'Required "head" table is not found\');h(m.head,U,w?m.loca.length:0);let _=Object.create(null);if(w){let N=i0(m.head.data[50],m.head.data[51]),H=C(m.loca,m.glyf,U,N,R,Z,gA);_=H.missingGlyphs,Y>=65536&&m.maxp.length>=32&&(m.maxp.data[26]=H.maxSizeOfInstructions>>8,m.maxp.data[27]=H.maxSizeOfInstructions&255)}if(!m.hhea)throw new v(\'Required "hhea" table is not found\');m.hhea.data[10]===0&&m.hhea.data[11]===0&&(m.hhea.data[10]=255,m.hhea.data[11]=255);let tA={unitsPerEm:i0(m.head.data[18],m.head.data[19]),yMax:Dt(m.head.data[42],m.head.data[43]),yMin:Dt(m.head.data[38],m.head.data[39]),ascent:Dt(m.hhea.data[4],m.hhea.data[5]),descent:Dt(m.hhea.data[6],m.hhea.data[7]),lineGap:Dt(m.hhea.data[8],m.hhea.data[9])};this.ascent=tA.ascent/tA.unitsPerEm,this.descent=tA.descent/tA.unitsPerEm,this.lineGap=tA.lineGap/tA.unitsPerEm,(CA=this.cssFontInfo)!=null&&CA.lineHeight?(this.lineHeight=this.cssFontInfo.metrics.lineHeight,this.lineGap=this.cssFontInfo.metrics.lineGap):this.lineHeight=this.ascent-this.descent+this.lineGap,m.post&&B(m.post,i,U),m.post={tag:"post",data:IE(i)};let IA=Object.create(null);function QA(N){return!_[N]}if(i.composite){let N=i.cidToGidMap||[],H=N.length===0;i.cMap.forEach(function(q,T){if(typeof T=="string"&&(T=yo(q,T,!0)),T>65535)throw new v("Max size of CID is 65,535");let $=-1;H?$=T:N[T]!==void 0&&($=N[T]),$>=0&&$=61440&&G<=61695&&(G&=255),IA[G]=W.glyphId}else for(let W of T)IA[W.charCode]=W.glyphId;if(i.glyphNames&&($.length||this.differences.length))for(let W=0;W<256;++W){if(!X&&IA[W]!==void 0)continue;let G=this.differences[W]||$[W];if(!G)continue;let BA=i.glyphNames.indexOf(G);BA>0&&QA(BA)&&(IA[W]=BA)}}IA.length===0&&(IA[0]=0);let V=K-1;if(Z||(V=0),!i.cssFontInfo){let N=rE(IA,QA,V,this.toUnicode);this.toFontChar=N.toFontChar,m.cmap={tag:"cmap",data:gE(N.charCodeToGlyphId,N.toUnicodeExtraMap,K)},(!m["OS/2"]||!G2(m["OS/2"],t))&&(m["OS/2"]={tag:"OS/2",data:oE(i,N.charCodeToGlyphId,tA)})}if(!w)try{S=new Ie(m["CFF "].data),D=new Ma(S,i,Cs).parse(),D.duplicateFirstGlyph();let H=new k0(D);m["CFF "].data=H.compile()}catch(N){k("Failed to compile font "+i.loadedName)}if(!m.name)m.name={tag:"name",data:bo(this.name)};else{let[N,H]=Q(m.name);m.name.data=bo(A,N),this.psName=N[0][6]||null,i.composite||m2(i,this.isSymbolicFont,H)}let lA=new F0(p.version);for(let N in m)lA.addTable(N,m[N].data);return lA.toArray()}convert(A,t,i){i.fixedPitch=!1,i.builtInEncoding&&p2(i,i.builtInEncoding);let s=1;t instanceof Ea&&(s=t.numGlyphs-1);let a=t.getGlyphMapping(i),n=null,r=a,g=null;i.cssFontInfo||(n=rE(a,t.hasGlyphId.bind(t),s,this.toUnicode),this.toFontChar=n.toFontChar,r=n.charCodeToGlyphId,g=n.toUnicodeExtraMap);let o=t.numGlyphs;function I(B,Q){let E=null;for(let f in B)Q===B[f]&&(E||(E=[])).push(f|0);return E}function c(B,Q){for(let E in B)if(Q===B[E])return E|0;return n.charCodeToGlyphId[n.nextAvailableFontCharCode]=Q,n.nextAvailableFontCharCode++}let l=t.seacs;if(n&&Cs&&(l!=null&&l.length)){let B=i.fontMatrix||E0,Q=t.getCharset(),E=Object.create(null);for(let f in l){f|=0;let u=l[f],d=fi[u[2]],x=fi[u[3]],p=Q.indexOf(d),m=Q.indexOf(x);if(p<0||m<0)continue;let D={x:u[0]*B[0]+u[1]*B[2]+B[4],y:u[0]*B[1]+u[1]*B[3]+B[5]},S=I(a,f);if(S)for(let w of S){let Y=n.charCodeToGlyphId,U=c(Y,p),K=c(Y,m);E[w]={baseFontCharCode:U,accentFontCharCode:K,accentOffset:D}}}i.seacMap=E}let h=i.fontMatrix?1/Math.max(...i.fontMatrix.slice(0,4).map(Math.abs)):1e3,C=new F0("OTTO");return C.addTable("CFF ",t.data),C.addTable("OS/2",oE(i,r)),C.addTable("cmap",gE(r,g,o)),C.addTable("head","\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0_<\\xF5\\0\\0"+s0(h)+"\\0\\0\\0\\0\\x9E\\v~\'\\0\\0\\0\\0\\x9E\\v~\'\\0\\0"+s0(i.descent)+"\\xFF"+s0(i.ascent)+zA(i.italicAngle?2:0)+"\\0\\0\\0\\0\\0\\0\\0"),C.addTable("hhea","\\0\\0\\0"+s0(i.ascent)+s0(i.descent)+"\\0\\0\\xFF\\xFF\\0\\0\\0\\0\\0\\0"+s0(i.capHeight)+s0(Math.tan(i.italicAngle)*i.xHeight)+"\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0"+zA(o)),C.addTable("hmtx",function(){let Q=t.charstrings,E=t.cff?t.cff.widths:null,f="\\0\\0\\0\\0";for(let u=1,d=o;ut.length%2===1,a=this.toUnicode instanceof Ct?n=>this.toUnicode.charCodeOf(n):n=>this.toUnicode.charCodeOf(String.fromCodePoint(n));for(let n=0,r=A.length;n55295&&(g<57344||g>65533)&&n++,this.toUnicode){let o=a(g);if(o!==-1){s()&&(t.push(i.join("")),i.length=0);let I=this.cMap?this.cMap.getCharCodeLength(o):1;for(let c=I-1;c>=0;c--)i.push(String.fromCharCode(o>>8*c&255));continue}}s()||(t.push(i.join("")),i.length=0),i.push(String.fromCodePoint(g))}return t.push(i.join("")),t}},fa=class{constructor(A){this.error=A,this.loadedName="g_font_error",this.missingFile=!0}charsToGlyphs(){return[]}encodeString(A){return[A]}exportData(A=!1){return{error:this.error}}},nt={FUNCTION_BASED:1,AXIAL:2,RADIAL:3,FREE_FORM_MESH:4,LATTICE_FORM_MESH:5,COONS_PATCH_MESH:6,TENSOR_PATCH_MESH:7},YI=class{constructor(){OA("Cannot initialize Pattern.")}static parseShading(A,t,i,s,a){let n=A instanceof KA?A.dict:A,r=n.get("ShadingType");try{switch(r){case nt.AXIAL:case nt.RADIAL:return new KI(n,t,i,s,a);case nt.FREE_FORM_MESH:case nt.LATTICE_FORM_MESH:case nt.COONS_PATCH_MESH:case nt.TENSOR_PATCH_MESH:return new _0(A,t,i,s,a);default:throw new v("Unsupported ShadingType: "+r)}}catch(g){if(g instanceof ge)throw g;return k(g),new qI}}},Oi=class{getIR(){OA("Abstract method `getIR` called.")}};et(Oi,"SMALL_NUMBER",1e-6);var KI=class extends Oi{constructor(A,t,i,s,a){super(),this.shadingType=A.get("ShadingType");let n=0;if(this.shadingType===nt.AXIAL?n=4:this.shadingType===nt.RADIAL&&(n=6),this.coordsArr=A.getArray("Coords"),!wt(this.coordsArr,n))throw new v("RadialAxialShading: Invalid /Coords array.");let r=JA.parse({cs:A.getRaw("CS")||A.getRaw("ColorSpace"),xref:t,resources:i,pdfFunctionFactory:s,localColorSpaceCache:a});this.bbox=Ei(A.getArray("BBox"),null);let g=0,o=1,I=A.getArray("Domain");wt(I,2)&&([g,o]=I);let c=!1,l=!1,h=A.getArray("Extend");if(Tu(h,2)&&([c,l]=h),this.shadingType===nt.RADIAL&&(!c||!l)){let[tA,IA,QA,V,lA,EA]=this.coordsArr,fA=Math.hypot(tA-V,IA-lA);QA<=EA+fA&&EA<=QA+fA&&k("Unsupported radial gradient.")}this.extendStart=c,this.extendEnd=l;let C=A.getRaw("Function"),B=s.createFromArray(C),Q=840,E=(o-g)/Q,f=this.colorStops=[];if(g>=o||E<=0){PA("Bad shading domain.");return}let u=new Float32Array(r.numComps),d=new Float32Array(1),x,p=0;d[0]=g,B(d,0,u,0);let m=r.getRgb(u,0),D=Ce.makeHexColor(m[0],m[1],m[2]);f.push([0,D]);let S=1;d[0]=g+E,B(d,0,u,0);let w=r.getRgb(u,0),Y=w[0]-m[0]+1,U=w[1]-m[1]+1,K=w[2]-m[2]+1,Z=w[0]-m[0]-1,AA=w[1]-m[1]-1,gA=w[2]-m[2]-1;for(let tA=2;tA0)return!0;let A=this.stream.getByte();return A<0?!1:(this.buffer=A,this.bufferLength=8,!0)}readBits(A){let t=this.buffer,i=this.bufferLength;if(A===32){if(i===0)return(this.stream.getByte()<<24|this.stream.getByte()<<16|this.stream.getByte()<<8|this.stream.getByte())>>>0;t=t<<24|this.stream.getByte()<<16|this.stream.getByte()<<8|this.stream.getByte();let s=this.stream.getByte();return this.buffer=s&(1<>i)>>>0}if(A===8&&i===0)return this.stream.getByte();for(;i>i}align(){this.buffer=0,this.bufferLength=0}readFlag(){return this.readBits(this.context.bitsPerFlag)}readCoordinate(){let A=this.context.bitsPerCoordinate,t=this.readBits(A),i=this.readBits(A),s=this.context.decode,a=A<32?1/((1<r?r:A,t=t>g?g:t,i=io*s[I]):t,n=-2,r,g=[];for(let[o,I]of i.map((c,l)=>[c,l]).sort(([c],[l])=>c-l))o!==-1&&(o===n+1?(r.push(a[I]),n+=1):(n=o,r=[a[I]],g.push(o,r)));return g}function pf(e){let A=Q9(e),t=new F(null);t.set("BaseFont",M.get(e)),t.set("Type",M.get("Font")),t.set("Subtype",M.get("CIDFontType2")),t.set("Encoding",M.get("Identity-H")),t.set("CIDToGIDMap",M.get("Identity")),t.set("W",A),t.set("FirstChar",A[0]),t.set("LastChar",A.at(-2)+A.at(-1).length-1);let i=new F(null);t.set("FontDescriptor",i);let s=new F(null);return s.set("Ordering","Identity"),s.set("Registry","Adobe"),s.set("Supplement",0),t.set("CIDSystemInfo",s),t}var TI=class{constructor(A){this.lexer=A,this.operators=[],this.token=null,this.prev=null}nextToken(){this.prev=this.token,this.token=this.lexer.getToken()}accept(A){return this.token.type===A?(this.nextToken(),!0):!1}expect(A){if(this.accept(A))return!0;throw new v(`Unexpected symbol: found ${this.token.type} expected ${A}.`)}parse(){return this.nextToken(),this.expect(Ve.LBRACE),this.parseBlock(),this.expect(Ve.RBRACE),this.operators}parseBlock(){for(;;)if(this.accept(Ve.NUMBER))this.operators.push(this.prev.value);else if(this.accept(Ve.OPERATOR))this.operators.push(this.prev.value);else if(this.accept(Ve.LBRACE))this.parseCondition();else return}parseCondition(){let A=this.operators.length;if(this.operators.push(null,null),this.parseBlock(),this.expect(Ve.RBRACE),this.accept(Ve.IF))this.operators[A]=this.operators.length,this.operators[A+1]="jz";else if(this.accept(Ve.LBRACE)){let t=this.operators.length;this.operators.push(null,null);let i=this.operators.length;this.parseBlock(),this.expect(Ve.RBRACE),this.expect(Ve.IFELSE),this.operators[t]=this.operators.length,this.operators[t+1]="j",this.operators[A]=i,this.operators[A+1]="jz"}else throw new v("PS Function: error parsing conditional.")}},Ve={LBRACE:0,RBRACE:1,NUMBER:2,OPERATOR:3,IF:4,IFELSE:5},rt=class{static get opCache(){return nA(this,"opCache",Object.create(null))}constructor(A,t){this.type=A,this.value=t}static getOperator(A){var t;return(t=rt.opCache)[A]||(t[A]=new rt(Ve.OPERATOR,A))}static get LBRACE(){return nA(this,"LBRACE",new rt(Ve.LBRACE,"{"))}static get RBRACE(){return nA(this,"RBRACE",new rt(Ve.RBRACE,"}"))}static get IF(){return nA(this,"IF",new rt(Ve.IF,"IF"))}static get IFELSE(){return nA(this,"IFELSE",new rt(Ve.IFELSE,"IFELSE"))}},PI=class{constructor(A){this.stream=A,this.nextChar(),this.strBuf=[]}nextChar(){return this.currentChar=this.stream.getByte()}getToken(){let A=!1,t=this.currentChar;for(;;){if(t<0)return Ge;if(A)(t===10||t===13)&&(A=!1);else if(t===37)A=!0;else if(!pt(t))break;t=this.nextChar()}switch(t|0){case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:case 43:case 45:case 46:return new rt(Ve.NUMBER,this.getNumber());case 123:return this.nextChar(),rt.LBRACE;case 125:return this.nextChar(),rt.RBRACE}let i=this.strBuf;for(i.length=0,i[0]=String.fromCharCode(t);(t=this.nextChar())>=0&&(t>=65&&t<=90||t>=97&&t<=122);)i.push(String.fromCharCode(t));let s=i.join("");switch(s.toLowerCase()){case"if":return rt.IF;case"ifelse":return rt.IFELSE;default:return rt.getOperator(s)}}getNumber(){let A=this.currentChar,t=this.strBuf;for(t.length=0,t[0]=String.fromCharCode(A);(A=this.nextChar())>=0&&(A>=48&&A<=57||A===45||A===46);)t.push(String.fromCharCode(A));let i=parseFloat(t.join(""));if(isNaN(i))throw new v(`Invalid floating point number: ${i}`);return i}},Xi=class{constructor(A){this._onlyRefs=(A==null?void 0:A.onlyRefs)===!0,this._onlyRefs||(this._nameRefMap=new Map,this._imageMap=new Map),this._imageCache=new mt}getByName(A){this._onlyRefs&&OA("Should not call `getByName` method.");let t=this._nameRefMap.get(A);return t?this.getByRef(t):this._imageMap.get(A)||null}getByRef(A){return this._imageCache.get(A)||null}set(A,t,i){OA("Abstract method `set` called.")}},Hr=class extends Xi{set(A,t=null,i){if(typeof A!="string")throw new Error(\'LocalImageCache.set - expected "name" argument.\');if(t){if(this._imageCache.has(t))return;this._nameRefMap.set(A,t),this._imageCache.put(t,i);return}this._imageMap.has(A)||this._imageMap.set(A,i)}},Jr=class extends Xi{set(A=null,t=null,i){if(typeof A!="string"&&!t)throw new Error(\'LocalColorSpaceCache.set - expected "name" and/or "ref" argument.\');if(t){if(this._imageCache.has(t))return;A!==null&&this._nameRefMap.set(A,t),this._imageCache.put(t,i);return}this._imageMap.has(A)||this._imageMap.set(A,i)}},WI=class extends Xi{constructor(A){super({onlyRefs:!0})}set(A=null,t,i){if(!t)throw new Error(\'LocalFunctionCache.set - expected "ref" argument.\');this._imageCache.has(t)||this._imageCache.put(t,i)}},Yr=class extends Xi{set(A,t=null,i){if(typeof A!="string")throw new Error(\'LocalGStateCache.set - expected "name" argument.\');if(t){if(this._imageCache.has(t))return;this._nameRefMap.set(A,t),this._imageCache.put(t,i);return}this._imageMap.has(A)||this._imageMap.set(A,i)}},OI=class extends Xi{constructor(A){super({onlyRefs:!0})}set(A=null,t,i){if(!t)throw new Error(\'LocalTilingPatternCache.set - expected "ref" argument.\');this._imageCache.has(t)||this._imageCache.put(t,i)}},ZI=class extends Xi{constructor(A){super({onlyRefs:!0})}set(A=null,t,i){if(!t)throw new Error(\'RegionalImageCache.set - expected "ref" argument.\');this._imageCache.has(t)||this._imageCache.put(t,i)}},ps,Mg,wf,Bn,jI,os=class{constructor(){HA(this,Mg);HA(this,Bn);HA(this,ps,new be);this._refCache=new mt,this._imageCache=new mt}shouldCache(A,t){let i=this._refCache.get(A);return i||(i=new Set,this._refCache.put(A,i)),i.add(t),!(i.size+A):null}var vr=class{static getSampleArray(A,t,i,s){let a,n,r=1;for(a=0,n=A.length;a>o)*c,I&=(1<w?D=w:D0&&(u=r[f-1]);let d=s[1];f>1,c=a.length>>1,l=new XI(o),h=Object.create(null),B=2048*4,Q=new Float32Array(c);return function(f,u,d,x){let p,m,D="",S=Q;for(p=0;pZ&&(m=Z)),Y[p]=m}B>0&&(B--,h[D]=Y),d.set(Y,x)}}};function Do(e){let A;if(e instanceof F)A=e;else if(e instanceof KA)A=e.dict;else return!1;return A.has("FunctionType")}var Lg=class{constructor(A){this.stack=A?Array.from(A):[]}push(A){if(this.stack.length>=Lg.MAX_STACK_SIZE)throw new Error("PostScript function stack overflow.");this.stack.push(A)}pop(){if(this.stack.length<=0)throw new Error("PostScript function stack underflow.");return this.stack.pop()}copy(A){if(this.stack.length+A>=Lg.MAX_STACK_SIZE)throw new Error("PostScript function stack overflow.");let t=this.stack;for(let i=t.length-A,s=A-1;s>=0;s--,i++)t.push(t[i])}index(A){this.push(this.stack[this.stack.length-A-1])}roll(A,t){let i=this.stack,s=i.length-A,a=i.length-1,n=s+(t-Math.floor(t/A)*A);for(let r=s,g=a;r0?t.push(r<>g);break;case"ceiling":r=t.pop(),t.push(Math.ceil(r));break;case"copy":r=t.pop(),t.copy(r);break;case"cos":r=t.pop(),t.push(Math.cos(r%360/180*Math.PI));break;case"cvi":r=t.pop()|0,t.push(r);break;case"cvr":break;case"div":g=t.pop(),r=t.pop(),t.push(r/g);break;case"dup":t.copy(1);break;case"eq":g=t.pop(),r=t.pop(),t.push(r===g);break;case"exch":t.roll(2,1);break;case"exp":g=t.pop(),r=t.pop(),t.push(r**g);break;case"false":t.push(!1);break;case"floor":r=t.pop(),t.push(Math.floor(r));break;case"ge":g=t.pop(),r=t.pop(),t.push(r>=g);break;case"gt":g=t.pop(),r=t.pop(),t.push(r>g);break;case"idiv":g=t.pop(),r=t.pop(),t.push(r/g|0);break;case"index":r=t.pop(),t.index(r);break;case"le":g=t.pop(),r=t.pop(),t.push(r<=g);break;case"ln":r=t.pop(),t.push(Math.log(r));break;case"log":r=t.pop(),t.push(Math.log10(r));break;case"lt":g=t.pop(),r=t.pop(),t.push(r=A?new ui(A):e.max<=A?e:new _I(e,A)}var zI=class{compile(A,t,i){let s=[],a=[],n=t.length>>1,r=i.length>>1,g=0,o,I,c,l,h,C,B,Q;for(let f=0;fd.min&&(D.unshift("Math.max(",p,", "),D.push(")")),m4?(i=!0,A=0):(i=!1,A=1));let g=[];for(n=0;n=0&&VA[E]==="ET";--E)VA[E]="EN";for(let E=n+1;E0&&(f=VA[n-1]);let u=c;E+1Q&&hE(Q)&&(B=Q);for(Q=C;Q>=B;--Q){let E=-1;for(n=0,r=g.length;n=0&&(CE(ki,E,n),E=-1):E<0&&(E=n);E>=0&&CE(ki,E,g.length)}for(n=0,r=ki.length;n")&&(ki[n]="")}return ko(ki.join(""),i)}var r0={style:"normal",weight:"normal"},o0={style:"normal",weight:"bold"},I0={style:"italic",weight:"normal"},c0={style:"italic",weight:"bold"},ua=new Map([["Times-Roman",{local:["Times New Roman","Times-Roman","Times","Liberation Serif","Nimbus Roman","Nimbus Roman L","Tinos","Thorndale","TeX Gyre Termes","FreeSerif","Linux Libertine O","Libertinus Serif","DejaVu Serif","Bitstream Vera Serif","Ubuntu"],style:r0,ultimate:"serif"}],["Times-Bold",{alias:"Times-Roman",style:o0,ultimate:"serif"}],["Times-Italic",{alias:"Times-Roman",style:I0,ultimate:"serif"}],["Times-BoldItalic",{alias:"Times-Roman",style:c0,ultimate:"serif"}],["Helvetica",{local:["Helvetica","Helvetica Neue","Arial","Arial Nova","Liberation Sans","Arimo","Nimbus Sans","Nimbus Sans L","A030","TeX Gyre Heros","FreeSans","DejaVu Sans","Albany","Bitstream Vera Sans","Arial Unicode MS","Microsoft Sans Serif","Apple Symbols","Cantarell"],path:"LiberationSans-Regular.ttf",style:r0,ultimate:"sans-serif"}],["Helvetica-Bold",{alias:"Helvetica",path:"LiberationSans-Bold.ttf",style:o0,ultimate:"sans-serif"}],["Helvetica-Oblique",{alias:"Helvetica",path:"LiberationSans-Italic.ttf",style:I0,ultimate:"sans-serif"}],["Helvetica-BoldOblique",{alias:"Helvetica",path:"LiberationSans-BoldItalic.ttf",style:c0,ultimate:"sans-serif"}],["Courier",{local:["Courier","Courier New","Liberation Mono","Nimbus Mono","Nimbus Mono L","Cousine","Cumberland","TeX Gyre Cursor","FreeMono","Linux Libertine Mono O","Libertinus Mono"],style:r0,ultimate:"monospace"}],["Courier-Bold",{alias:"Courier",style:o0,ultimate:"monospace"}],["Courier-Oblique",{alias:"Courier",style:I0,ultimate:"monospace"}],["Courier-BoldOblique",{alias:"Courier",style:c0,ultimate:"monospace"}],["ArialBlack",{local:["Arial Black"],style:{style:"normal",weight:"900"},fallback:"Helvetica-Bold"}],["ArialBlack-Bold",{alias:"ArialBlack"}],["ArialBlack-Italic",{alias:"ArialBlack",style:{style:"italic",weight:"900"},fallback:"Helvetica-BoldOblique"}],["ArialBlack-BoldItalic",{alias:"ArialBlack-Italic"}],["ArialNarrow",{local:["Arial Narrow","Liberation Sans Narrow","Helvetica Condensed","Nimbus Sans Narrow","TeX Gyre Heros Cn"],style:r0,fallback:"Helvetica"}],["ArialNarrow-Bold",{alias:"ArialNarrow",style:o0,fallback:"Helvetica-Bold"}],["ArialNarrow-Italic",{alias:"ArialNarrow",style:I0,fallback:"Helvetica-Oblique"}],["ArialNarrow-BoldItalic",{alias:"ArialNarrow",style:c0,fallback:"Helvetica-BoldOblique"}],["Calibri",{local:["Calibri","Carlito"],style:r0,fallback:"Helvetica"}],["Calibri-Bold",{alias:"Calibri",style:o0,fallback:"Helvetica-Bold"}],["Calibri-Italic",{alias:"Calibri",style:I0,fallback:"Helvetica-Oblique"}],["Calibri-BoldItalic",{alias:"Calibri",style:c0,fallback:"Helvetica-BoldOblique"}],["Wingdings",{local:["Wingdings","URW Dingbats"],style:r0}],["Wingdings-Regular",{alias:"Wingdings"}],["Wingdings-Bold",{alias:"Wingdings"}]]),b9=new Map([["Arial-Black","ArialBlack"]]);function D9(e){switch(e){case o0:return"Bold";case I0:return"Italic";case c0:return"Bold Italic";default:if((e==null?void 0:e.weight)==="bold")return"Bold";if((e==null?void 0:e.style)==="italic")return"Italic"}return""}function BE(e){let A=new Set(["thin","extralight","ultralight","demilight","semilight","light","book","regular","normal","medium","demibold","semibold","bold","extrabold","ultrabold","black","heavy","extrablack","ultrablack","roman","italic","oblique","ultracondensed","extracondensed","condensed","semicondensed","normal","semiexpanded","expanded","extraexpanded","ultraexpanded","bolditalic"]);return e.split(/[- ,+]+/g).filter(t=>!A.has(t.toLowerCase())).join(" ")}function $I({alias:e,local:A,path:t,fallback:i,style:s,ultimate:a},n,r,g=!0,o=!0,I=""){let c={style:null,ultimate:null};if(A){let l=I?` ${I}`:"";for(let h of A)n.push(`local(${h}${l})`)}if(e){let l=ua.get(e),h=I||D9(s);Object.assign(c,$I(l,n,r,g&&!i,o&&!t,h))}if(s&&(c.style=s),a&&(c.ultimate=a),g&&i){let l=ua.get(i),{ultimate:h}=$I(l,n,r,g,o&&!t,I);c.ultimate||(c.ultimate=h)}return o&&t&&r&&n.push(`url(${r}${t})`),c}function QE(e,A,t,i,s,a){if(i.startsWith("InvalidPDFjsFont_"))return null;(a==="TrueType"||a==="Type1")&&/^[A-Z]{6}\\+/.test(i)&&(i=i.slice(7)),i=pn(i);let n=i,r=e.get(n);if(r)return r;let g=ua.get(i);if(!g){for(let[Q,E]of b9)if(i.startsWith(Q)){i=`${E}${i.substring(Q.length)}`,g=ua.get(i);break}}let o=!1;g||(g=ua.get(s),o=!0);let I=`${A.getDocId()}_s${A.createFontId()}`;if(!g){if(!vo(i))return k(`Cannot substitute the font because of its name: ${i}`),e.set(n,null),null;let Q=/bold/gi.test(i),E=/oblique|italic/gi.test(i),f=Q&&E&&c0||Q&&o0||E&&I0||r0;return r={css:`"${BE(i)}",${I}`,guessFallback:!0,loadedName:I,baseFontName:i,src:`local(${i})`,style:f},e.set(n,r),r}let c=[];o&&vo(i)&&c.push(`local(${i})`);let{style:l,ultimate:h}=$I(g,c,t),C=h===null,B=C?"":`,${h}`;return r={css:`"${BE(i)}",${I}${B}`,guessFallback:C,loadedName:I,baseFontName:i,src:c.join(","),style:l},e.set(n,r),r}var bf=2048,k9=65537,EE=128,at=class{constructor(A,t){this._imgData=A,this._isMask=t}static needsToBeResized(A,t){if(A<=this._goodSquareLength&&t<=this._goodSquareLength)return!1;let{MAX_DIM:i}=this;if(A>i||t>i)return!0;let s=A*t;if(this._hasMaxArea)return s>this.MAX_AREA;if(sa}static get MAX_DIM(){return nA(this,"MAX_DIM",this._guessMax(bf,k9,0,1))}static get MAX_AREA(){return this._hasMaxArea=!0,nA(this,"MAX_AREA",this._guessMax(at._goodSquareLength,this.MAX_DIM,EE,0)**2)}static set MAX_AREA(A){A>=0&&(this._hasMaxArea=!0,nA(this,"MAX_AREA",A))}static setMaxArea(A){this._hasMaxArea||(this.MAX_AREA=A>>2)}static _areGoodDims(A,t){try{let i=new OffscreenCanvas(A,t),s=i.getContext("2d");s.fillRect(0,0,1,1);let a=s.getImageData(0,0,1,1).data[3];return i.width=i.height=1,a!==0}catch(i){return!1}}static _guessMax(A,t,i,s){for(;A+i+1>3,Q=B+3&-4;if(B!==Q){let E=new Uint8Array(Q*t),f=0;for(let u=0,d=t*B;u>>8,t[i++]=E&255)}}else if(ArrayBuffer.isView(A))t=A.slice(),i=t.byteLength;else throw new Error("Invalid data format, must be a string or TypedArray.");let s=i>>2,a=i-s*4,n=new Uint32Array(t.buffer,0,s),r=0,g=0,o=this.h1,I=this.h2,c=3432918353,l=461845907,h=c&Vt,C=l&Vt;for(let B=0;B>>17,r=r*l&St|r*C&Vt,o^=r,o=o<<13|o>>>19,o=o*5+3864292196):(g=n[B],g=g*c&St|g*h&Vt,g=g<<15|g>>>17,g=g*l&St|g*C&Vt,I^=g,I=I<<13|I>>>19,I=I*5+3864292196);switch(r=0,a){case 3:r^=t[s*4+2]<<16;case 2:r^=t[s*4+1]<<8;case 1:r^=t[s*4],r=r*c&St|r*h&Vt,r=r<<15|r>>>17,r=r*l&St|r*C&Vt,s&1?o^=r:I^=r}this.h1=o,this.h2=I}hexdigest(){let A=this.h1,t=this.h2;return A^=t>>>1,A=A*3981806797&St|A*36045&Vt,t=t*4283543511&St|((t<<16|A>>>16)*2950163797&St)>>>16,A^=t>>>1,A=A*444984403&St|A*60499&Vt,t=t*3301882366&St|((t<<16|A>>>16)*3120437893&St)>>>16,A^=t>>>1,(A>>>0).toString(16).padStart(8,"0")+(t>>>0).toString(16).padStart(8,"0")}};function $g(e,A,t,i,s){let a=e;for(let n=0,r=A.length-1;n1e3&&(C=Math.max(C,E),f+=Q+2*1,E=0,Q=0),B.push({transform:S,x:E,y:f,w:w.width,h:w.height}),E+=w.width+2*1,Q=Math.max(Q,w.height)}let u=Math.max(C,E)+1,d=f+Q+1,x=new Uint8Array(u*d*4),p=u<<2;for(let D=0;D=0;)S[U-4]=S[U],S[U-3]=S[U+1],S[U-2]=S[U+2],S[U-1]=S[U+3],S[U+w]=S[U+w-4],S[U+w+1]=S[U+w-3],S[U+w+2]=S[U+w-2],S[U+w+3]=S[U+w-1],U-=p}let m={width:u,height:d};if(A.isOffscreenCanvasSupported){let D=new OffscreenCanvas(u,d);D.getContext("2d").putImageData(new ImageData(new Uint8ClampedArray(x.buffer),u,d),0,0),m.bitmap=D.transferToImageBitmap(),m.data=null}else m.kind=Ke.RGBA_32BPP,m.data=x;return r.splice(I,h*4,y.paintInlineImageXObjectGroup),g.splice(I,h*4,[m,B]),I+1});$g(Ms,[y.save,y.transform,y.paintImageMaskXObject,y.restore],null,function(A,t){let i=A.fnArray,s=A.iCurr-3,a=(t-s)%4;switch(a){case 0:return i[t]===y.save;case 1:return i[t]===y.transform;case 2:return i[t]===y.paintImageMaskXObject;case 3:return i[t]===y.restore}throw new Error(`iterateImageMaskGroup - invalid pos: ${a}`)},function(A,t){let n=A.fnArray,r=A.argsArray,g=A.iCurr,o=g-3,I=g-2,c=g-1,l=Math.floor((t-o)/4);if(l<10)return t-(t-o)%4;let h=!1,C,B,Q=r[c][0],E=r[I][0],f=r[I][1],u=r[I][2],d=r[I][3];if(f===u){h=!0,C=I+4;let x=c+4;for(let p=1;p=4&&s[r-4]===s[g]&&s[r-3]===s[o]&&s[r-2]===s[I]&&s[r-1]===s[c]&&a[r-4][0]===l&&a[r-4][1]===h&&(C++,B-=5);let Q=B+4;for(let E=1;E=i)break}if(s=(s||Ms)[A[t]],!s||Array.isArray(s)){t++;continue}if(n.iCurr=t,t++,s.checkFn&&!(0,s.checkFn)(n)){s=null;continue}a=s,s=null}this.state=s,this.match=a,this.lastProcessed=t}flush(){for(;this.match;){let A=this.queue.fnArray.length;this.lastProcessed=(0,this.match.processFn)(this.context,A),this.match=null,this.state=null,this._optimize()}}reset(){this.state=null,this.match=null,this.lastProcessed=0}},Is=class{constructor(A=0,t){this._streamSink=t,this.fnArray=[],this.argsArray=[],this.optimizer=t&&!(A&st.OPLIST)?new ec(this):new Wr(this),this.dependencies=new Set,this._totalLength=0,this.weight=0,this._resolved=t?null:Promise.resolve()}set isOffscreenCanvasSupported(A){this.optimizer.isOffscreenCanvasSupported=A}get length(){return this.argsArray.length}get ready(){return this._resolved||this._streamSink.ready}get totalLength(){return this._totalLength+this.length}addOp(A,t){this.optimizer.push(A,t),this.weight++,this._streamSink&&(this.weight>=Is.CHUNK_SIZE?this.flush():this.weight>=Is.CHUNK_SIZE_ABOUT&&(A===y.restore||A===y.endText)&&this.flush())}addImageOps(A,t,i){i!==void 0&&this.addOp(y.beginMarkedContentProps,["OC",i]),this.addOp(A,t),i!==void 0&&this.addOp(y.endMarkedContent,[])}addDependency(A){this.dependencies.has(A)||(this.dependencies.add(A),this.addOp(y.dependency,[A]))}addDependencies(A){for(let t of A)this.addDependency(t)}addOpList(A){if(!(A instanceof Is)){k(\'addOpList - ignoring invalid "opList" parameter.\');return}for(let t of A.dependencies)this.dependencies.add(t);for(let t=0,i=A.length;ti&&(e=i),e}function uE(e,A,t,i,s,a){let n=s*a,r;A<=8?r=new Uint8Array(n):A<=16?r=new Uint16Array(n):r=new Uint32Array(n);let g=t/s,o=i/a,I,c,l,h=0,C,B=new Uint16Array(s),Q=t;for(I=0;I0&&Number.isInteger(i.height)&&i.height>0&&(i.width!==h||i.height!==C)&&(k("PDFImage - using the Width/Height of the image data, rather than the image dictionary."),h=i.width,C=i.height),h<1||C<1)throw new v(`Invalid image width: ${h} or height: ${C}`);this.width=h,this.height=C,this.interpolate=I.get("I","Interpolate"),this.imageMask=I.get("IM","ImageMask")||!1,this.matte=I.get("Matte")||!1;let B=i.bitsPerComponent;if(!B&&(B=I.get("BPC","BitsPerComponent"),!B))if(this.imageMask)B=1;else throw new v(`Bits per component missing in image: ${this.imageMask}`);if(this.bpc=B,!this.imageMask){let f=I.getRaw("CS")||I.getRaw("ColorSpace"),u=!!f;if(u)(Q=this.jpxDecoderOptions)!=null&&Q.smaskInData&&(f=M.get("DeviceRGBA"));else if(this.jpxDecoderOptions)f=M.get("DeviceRGBA");else switch(i.numComps){case 1:f=M.get("DeviceGray");break;case 3:f=M.get("DeviceRGB");break;case 4:f=M.get("DeviceCMYK");break;default:throw new Error(`Images with ${i.numComps} color components not supported.`)}this.colorSpace=JA.parse({cs:f,xref:A,resources:s?t:null,pdfFunctionFactory:g,localColorSpaceCache:o}),this.numComps=this.colorSpace.numComps,this.jpxDecoderOptions&&(this.jpxDecoderOptions.numComponents=u?this.numComp:0,this.jpxDecoderOptions.isIndexedColormap=this.colorSpace.name==="Indexed")}if(this.decode=I.getArray("D","Decode"),this.needsDecode=!1,this.decode&&(this.colorSpace&&!this.colorSpace.isDefaultDecode(this.decode,B)||r&&!JA.isDefaultDecode(this.decode,1))){this.needsDecode=!0;let f=(1<>3)*i,g=A.byteLength,o=r===g,I,c;if(s&&(!a||o)?I=A:a?(I=new Uint8Array(r),I.set(A),I.fill(255,g)):I=new Uint8Array(A),a)for(c=0;c>7&1,g[c+1]=h>>6&1,g[c+2]=h>>5&1,g[c+3]=h>>4&1,g[c+4]=h>>3&1,g[c+5]=h>>2&1,g[c+6]=h>>1&1,g[c+7]=h&1,c+=8;if(c>=1}}else{let C=0;for(h=0,c=0,l=n;c>B;Q<0?Q=0:Q>I&&(Q=I),g[c]=Q,h&=(1<r[f+1]){B=255;break}}g[c]=B}}else throw new v("Unknown mask format.");if(g)for(c=0,h=3,l=t*s;c>3,c=t&&at.needsToBeResized(i,s);if(this.colorSpace.name==="DeviceRGBA"){a.kind=Ke.RGBA_32BPP;let x=a.data=await this.getImageBytes(g*r*4,{});return t?c?at.createImage(a,!1):this.createBitmap(Ke.RGBA_32BPP,i,s,x):a}if(!A){let x;if(this.colorSpace.name==="DeviceGray"&&o===1?x=Ke.GRAYSCALE_1BPP:this.colorSpace.name==="DeviceRGB"&&o===8&&!this.needsDecode&&(x=Ke.RGB_24BPP),x&&!this.smask&&!this.mask&&i===r&&s===g){let p=await this.getImageBytes(g*I,{});if(t)return c?at.createImage({data:p,kind:x,width:i,height:s,interpolate:this.interpolate},this.needsDecode):this.createBitmap(x,r,g,p);if(a.kind=x,a.data=p,this.needsDecode){gt(x===Ke.GRAYSCALE_1BPP,"PDFImage.createImageData: The image must be grayscale.");let m=a.data;for(let D=0,S=m.length;D>3,r=await this.getImageBytes(s*n,{internal:!0}),g=this.getComponents(r),o,I;if(a===1){if(I=i*s,this.needsDecode)for(o=0;o0&&A.args[0].count++}var Hg=class{constructor(){this.reset()}check(){return++this.checkedl){let d="Image exceeded maximum allowed size and was removed.";if(this.options.ignoreErrors){k(d);return}throw new Error(d)}let h;g.has("OC")&&(h=await this.parseMarkedContentProps(g.get("OC"),A));let C=g.get("IM","ImageMask")||!1,B,Q;if(C){let d=g.get("I","Interpolate"),x=I+7>>3,p=t.getBytes(x*c),m=g.getArray("D","Decode");if(this.parsingType3Font){if(B=Pt.createRawMask({imgArray:p,width:I,height:c,imageIsFromDecodeStream:t instanceof Me,inverseDecode:(m==null?void 0:m[0])>0,interpolate:d}),B.cached=!!a,Q=[B],s.addImageOps(y.paintImageMaskXObject,Q,h),a){let S={fn:y.paintImageMaskXObject,args:Q,optionalContent:h};n.set(a,o,S),o&&this._regionalImageCache.set(null,o,S)}return}if(B=await Pt.createMask({imgArray:p,width:I,height:c,imageIsFromDecodeStream:t instanceof Me,inverseDecode:(m==null?void 0:m[0])>0,interpolate:d,isOffscreenCanvasSupported:this.options.isOffscreenCanvasSupported}),B.isSingleOpaquePixel){if(s.addImageOps(y.paintSolidColorImageMask,[],h),a){let S={fn:y.paintSolidColorImageMask,args:[],optionalContent:h};n.set(a,o,S),o&&this._regionalImageCache.set(null,o,S)}return}let D=`mask_${this.idFactory.createObjId()}`;if(s.addDependency(D),B.dataLen=B.bitmap?B.width*B.height*4:B.data.length,this._sendImgData(D,B),Q=[{data:D,width:B.width,height:B.height,interpolate:B.interpolate,count:1}],s.addImageOps(y.paintImageMaskXObject,Q,h),a){let S={objId:D,fn:y.paintImageMaskXObject,args:Q,optionalContent:h};n.set(a,o,S),o&&this._regionalImageCache.set(null,o,S)}return}let E=200;if(i&&I+c25e4||g.has("SMask")||g.has("Mask")){let d=await this.handler.sendWithPromise("commonobj",[f,"CopyLocalImage",{imageRef:o}]);if(d){this.globalImageCache.setData(o,{objId:f,fn:y.paintImageXObject,args:Q,optionalContent:h,byteSize:0}),this.globalImageCache.addByteSize(o,d);return}}}if(Pt.buildImage({xref:this.xref,res:A,image:t,isInline:i,pdfFunctionFactory:this._pdfFunctionFactory,localColorSpaceCache:r}).then(async d=>(B=await d.createImageData(!1,this.options.isOffscreenCanvasSupported),B.dataLen=B.bitmap?B.width*B.height*4:B.data.length,B.ref=o,u&&this.globalImageCache.addByteSize(o,B.dataLen),this._sendImgData(f,B,u))).catch(d=>(k(`Unable to decode image "${f}": "${d}".`),o&&this.globalImageCache.addDecodeFailed(o),this._sendImgData(f,null,u))),a){let d={objId:f,fn:y.paintImageXObject,args:Q,optionalContent:h};n.set(a,o,d),o&&(this._regionalImageCache.set(null,o,d),u&&this.globalImageCache.setData(o,{objId:f,fn:y.paintImageXObject,args:Q,optionalContent:h,byteSize:0}))}}handleSMask(A,t,i,s,a,n){let r=A.get("G"),g={subtype:A.get("S").name,backdrop:A.get("BC")},o=A.get("TR");if(Do(o)){let I=this._pdfFunctionFactory.create(o),c=new Uint8Array(256),l=new Float32Array(1);for(let h=0;h<256;h++)l[0]=h/255,I(l,0,l,0),c[h]=l[0]*255|0;g.transferMap=c}return this.buildFormXObject(t,r,g,i,s,a.state.clone(),n)}handleTransferFunction(A){let t;if(Array.isArray(A))t=A;else if(Do(A))t=[A];else return null;let i=[],s=0,a=0;for(let n of t){let r=this.xref.fetchIfRef(n);if(s++,ye(r,"Identity")){i.push(null);continue}else if(!Do(r))return null;let g=this._pdfFunctionFactory.create(r),o=new Uint8Array(256),I=new Float32Array(1);for(let c=0;c<256;c++)I[0]=c/255,g(I,0,I,0),o[c]=I[0]*255|0;i.push(o),a++}return!(s===1||s===4)||a===0?null:i}handleTilingType(A,t,i,s,a,n,r,g){let o=new ze,I=F.merge({xref:this.xref,dictArray:[a.get("Resources"),i]});return this.getOperatorList({stream:s,task:r,resources:I,operatorList:o}).then(function(){let c=o.getIR(),l=lE(c,a,t);n.addDependencies(o.dependencies),n.addOp(A,l),a.objId&&g.set(null,a.objId,{operatorListIR:c,dict:a})}).catch(c=>{if(!(c instanceof ve)){if(this.options.ignoreErrors){k(`handleTilingType - ignoring pattern: "${c}".`);return}throw c}})}async handleSetFont(A,t,i,s,a,n,r=null,g=null){let o=(t==null?void 0:t[0])instanceof M?t[0].name:null,I=await this.loadFont(o,i,A,r,g);if(I.font.isType3Font)try{await I.loadType3Data(this,A,a),s.addDependencies(I.type3Dependencies)}catch(c){I=new is({loadedName:"g_font_error",font:new fa(`Type3 font load error: ${c}`),dict:I.font,evaluatorOptions:this.options})}return n.font=I.font,I.send(this.handler),I.loadedName}handleText(A,t){let i=t.font,s=i.charsToGlyphs(A);return i.data&&(t.textRenderingMode&PE.ADD_TO_PATH_FLAG||t.fillColorSpace.name==="Pattern"||i.disableFontFace||this.options.disableFontFace)&&Lt.buildFontPaths(i,s,this.handler,this.options),s}ensureStateFont(A){if(A.font)return;let t=new v("Missing setFont (Tf) operator before text rendering operator.");if(this.options.ignoreErrors){k(`ensureStateFont: "${t}".`);return}throw t}async setGState({resources:A,gState:t,operatorList:i,cacheKey:s,task:a,stateManager:n,localGStateCache:r,localColorSpaceCache:g}){let o=t.objId,I=!0,c=[],l=Promise.resolve();for(let h of t.getKeys()){let C=t.get(h);switch(h){case"Type":break;case"LW":case"LC":case"LJ":case"ML":case"D":case"RI":case"FL":case"CA":case"ca":c.push([h,C]);break;case"Font":I=!1,l=l.then(()=>this.handleSetFont(A,null,C[0],i,a,n.state).then(function(Q){i.addDependency(Q),c.push([h,[Q,C[1]]])}));break;case"BM":c.push([h,kf(C)]);break;case"SMask":if(ye(C,"None")){c.push([h,!1]);break}C instanceof F?(I=!1,l=l.then(()=>this.handleSMask(C,A,i,a,n,g)),c.push([h,!0])):k("Unsupported SMask type");break;case"TR":let B=this.handleTransferFunction(C);c.push([h,B]);break;case"OP":case"op":case"OPM":case"BG":case"BG2":case"UCR":case"UCR2":case"TR2":case"HT":case"SM":case"SA":case"AIS":case"TK":PA("graphic state operator "+h);break;default:PA("Unknown graphic state operator "+h);break}}await l,c.length>0&&i.addOp(y.setGState,[c]),I&&r.set(s,o,c)}loadFont(A,t,i,s=null,a=null){var B;let n=async()=>new is({loadedName:"g_font_error",font:new fa(`Font "${A}" is not available.`),dict:t,evaluatorOptions:this.options}),r;if(t)t instanceof oA&&(r=t);else{let Q=i.get("Font");Q&&(r=Q.getRaw(A))}if(r){if((B=this.type3FontRefs)!=null&&B.has(r))return n();if(this.fontCache.has(r))return this.fontCache.get(r);try{t=this.xref.fetchIfRef(r)}catch(Q){k(`loadFont - lookup failed: "${Q}".`)}}if(!(t instanceof F)){if(!this.options.ignoreErrors&&!this.parsingType3Font)return k(`Font "${A}" is not available.`),n();k(`Font "${A}" is not available -- attempting to fallback to a default font.`),t=s||Lt.fallbackFontDict}if(t.cacheKey&&this.fontCache.has(t.cacheKey))return this.fontCache.get(t.cacheKey);let{promise:g,resolve:o}=Promise.withResolvers(),I;try{I=this.preEvaluateFont(t),I.cssFontInfo=a}catch(Q){return k(`loadFont - preEvaluateFont failed: "${Q}".`),n()}let{descriptor:c,hash:l}=I,h=r instanceof oA,C;if(l&&c instanceof F){let Q=c.fontAliases||(c.fontAliases=Object.create(null));if(Q[l]){let E=Q[l].aliasRef;if(h&&E&&this.fontCache.has(E))return this.fontCache.putAlias(r,E),this.fontCache.get(r)}else Q[l]={fontID:this.idFactory.createFontId()};h&&(Q[l].aliasRef=r),C=Q[l].fontID}else C=this.idFactory.createFontId();return gt(C==null?void 0:C.startsWith("f"),\'The "fontID" must be (correctly) defined.\'),h?this.fontCache.put(r,g):(t.cacheKey=`cacheKey_${C}`,this.fontCache.put(t.cacheKey,g)),t.loadedName=`${this.idFactory.getDocId()}_${C}`,this.translateFont(I).then(Q=>{o(new is({loadedName:t.loadedName,font:Q,dict:t,evaluatorOptions:this.options}))}).catch(Q=>{k(`loadFont - translateFont failed: "${Q}".`),o(new is({loadedName:t.loadedName,font:new fa(Q instanceof Error?Q.message:Q),dict:t,evaluatorOptions:this.options}))}),g}buildPath(A,t,i,s=!1){let a=A.length-1;if(i||(i=[]),a<0||A.fnArray[a]!==y.constructPath){s&&(k(`Encountered path operator "${t}" inside of a text object.`),A.addOp(y.save,null));let n;switch(t){case y.rectangle:let r=i[0]+i[2],g=i[1]+i[3];n=[Math.min(i[0],r),Math.min(i[1],g),Math.max(i[0],r),Math.max(i[1],g)];break;case y.moveTo:case y.lineTo:n=[i[0],i[1],i[0],i[1]];break;default:n=[1/0,1/0,-1/0,-1/0];break}A.addOp(y.constructPath,[[t],i,n]),s&&A.addOp(y.restore,null)}else{let n=A.argsArray[a];n[0].push(t),n[1].push(...i);let r=n[2];switch(t){case y.rectangle:let g=i[0]+i[2],o=i[1]+i[3];r[0]=Math.min(r[0],i[0],g),r[1]=Math.min(r[1],i[1],o),r[2]=Math.max(r[2],i[0],g),r[3]=Math.max(r[3],i[1],o);break;case y.moveTo:case y.lineTo:r[0]=Math.min(r[0],i[0]),r[1]=Math.min(r[1],i[1]),r[2]=Math.max(r[2],i[0]),r[3]=Math.max(r[3],i[1]);break}}}parseColorSpace({cs:A,resources:t,localColorSpaceCache:i}){return JA.parseAsync({cs:A,xref:this.xref,resources:t,pdfFunctionFactory:this._pdfFunctionFactory,localColorSpaceCache:i}).catch(s=>{if(s instanceof ve)return null;if(this.options.ignoreErrors)return k(`parseColorSpace - ignoring ColorSpace: "${s}".`),null;throw s})}parseShading({shading:A,resources:t,localColorSpaceCache:i,localShadingPatternCache:s}){let a=s.get(A);if(a)return a;let n;try{n=YI.parseShading(A,this.xref,t,this._pdfFunctionFactory,i).getIR()}catch(r){if(r instanceof ve)return null;if(this.options.ignoreErrors)return k(`parseShading - ignoring shading: "${r}".`),s.set(A,null),null;throw r}return a=`pattern_${this.idFactory.createObjId()}`,this.parsingType3Font&&(a=`${this.idFactory.getDocId()}_type3_${a}`),s.set(A,a),this.parsingType3Font?this.handler.send("commonobj",[a,"Pattern",n]):this.handler.send("obj",[a,this.pageIndex,"Pattern",n]),a}handleColorN(A,t,i,s,a,n,r,g,o,I){let c=i.pop();if(c instanceof M){let l=a.getRaw(c.name),h=l instanceof oA&&o.getByRef(l);if(h)try{let B=s.base?s.base.getRgb(i,0):null,Q=lE(h.operatorListIR,h.dict,B);A.addOp(t,Q);return}catch(B){}let C=this.xref.fetchIfRef(l);if(C){let B=C instanceof KA?C.dict:C,Q=B.get("PatternType");if(Q===dE.TILING){let E=s.base?s.base.getRgb(i,0):null;return this.handleTilingType(t,E,n,C,B,A,r,o)}else if(Q===dE.SHADING){let E=B.get("Shading"),f=this.parseShading({shading:E,resources:n,localColorSpaceCache:g,localShadingPatternCache:I});if(f){let u=Ki(B.getArray("Matrix"),null);A.addOp(t,["Shading",f,u])}return}throw new v(`Unknown PatternType: ${Q}`)}}throw new v(`Unknown PatternName: ${c}`)}_parseVisibilityExpression(A,t,i){if(++t>10){k("Visibility expression is too deeply nested");return}let a=A.length,n=this.xref.fetchIfRef(A[0]);if(a<2||!(n instanceof M)){k("Invalid visibility expression");return}switch(n.name){case"And":case"Or":case"Not":i.push(n.name);break;default:k(`Invalid operator ${n.name} in visibility expression`);return}for(let r=1;r0)return{type:"OCMD",expression:g}}let r=i.get("OCGs");if(Array.isArray(r)||r instanceof F){let g=[];if(Array.isArray(r))for(let o of r)g.push(o.toString());else g.push(r.objId);return{type:s,ids:g,policy:i.get("P")instanceof M?i.get("P").name:null,expression:null}}else if(r instanceof oA)return{type:s,id:r.toString()}}return null}getOperatorList({stream:A,task:t,resources:i,operatorList:s,initialState:a=null,fallbackFontDict:n=null}){if(i||(i=F.empty),a||(a=new Or),!s)throw new Error(\'getOperatorList: missing "operatorList" parameter\');let r=this,g=this.xref,o=!1,I=new Hr,c=new Jr,l=new Yr,h=new OI,C=new Map,B=i.get("XObject")||F.empty,Q=i.get("Pattern")||F.empty,E=new Bs(a),f=new f0(A,g,E),u=new ts;function d(x){for(let p=0,m=f.savedStatesDepth;p0&&s.addOp(y.setGState,[fA]),V=null;continue}}D(new Promise(function(fA,CA){if(!AA)throw new v("GState must be referred to by name.");let N=i.get("ExtGState");if(!(N instanceof F))throw new v("ExtGState should be a dictionary.");let H=N.get(Z);if(!(H instanceof F))throw new v("GState should be a dictionary.");r.setGState({resources:i,gState:H,operatorList:s,cacheKey:Z,task:t,stateManager:E,localGStateCache:l,localColorSpaceCache:c}).then(fA,CA)}).catch(function(fA){if(!(fA instanceof ve)){if(r.options.ignoreErrors){k(`getOperatorList - ignoring ExtGState: "${fA}".`);return}throw fA}}));return;case y.moveTo:case y.lineTo:case y.curveTo:case y.curveTo2:case y.curveTo3:case y.closePath:case y.rectangle:r.buildPath(s,lA,V,o);continue;case y.markPoint:case y.markPointProps:case y.beginCompat:case y.endCompat:continue;case y.beginMarkedContentProps:if(!(V[0]instanceof M)){k(`Expected name for beginMarkedContentProps arg0=${V[0]}`),s.addOp(y.beginMarkedContentProps,["OC",null]);continue}if(V[0].name==="OC"){D(r.parseMarkedContentProps(V[1],i).then(fA=>{s.addOp(y.beginMarkedContentProps,["OC",fA])}).catch(fA=>{if(!(fA instanceof ve)){if(r.options.ignoreErrors){k(`getOperatorList - ignoring beginMarkedContentProps: "${fA}".`),s.addOp(y.beginMarkedContentProps,["OC",null]);return}throw fA}}));return}V=[V[0].name,V[1]instanceof F?V[1].get("MCID"):null];break;case y.beginMarkedContent:case y.endMarkedContent:default:if(V!==null){for(Y=0,U=V.length;Y{if(!(x instanceof ve)){if(this.options.ignoreErrors){k(`getOperatorList - ignoring errors during "${t.name}" task: "${x}".`),d();return}throw x}})}getTextContent({stream:A,task:t,resources:i,stateManager:s=null,includeMarkedContent:a=!1,sink:n,seenStyles:r=new Set,viewBox:g,lang:o=null,markedContentData:I=null,disableNormalization:c=!1,keepWhiteSpace:l=!1}){i||(i=F.empty),s||(s=new Bs(new tc)),a&&(I||(I={level:0}));let h={items:[],styles:Object.create(null),lang:o},C={initialized:!1,str:[],totalWidth:0,totalHeight:0,width:0,height:0,vertical:!1,prevTransform:null,textAdvanceScale:0,spaceInFlowMin:0,spaceInFlowMax:0,trackingSpaceMin:1/0,negativeSpaceMax:-1/0,notASpace:-1/0,transform:null,fontName:null,hasEOL:!1},B=[" "," "],Q=0;function E(X){let W=(Q+1)%2,G=B[Q]!==" "&&B[W]===" ";return B[Q]=X,Q=W,!l&&G}function f(){return!l&&B[Q]!==" "&&B[(Q+1)%2]===" "}function u(){B[0]=B[1]=" ",Q=0}let d=.102,x=.03,p=-.2,m=.102,D=.6,S=.25,w=this,Y=this.xref,U=[],K=null,Z=new Hr,AA=new Yr,gA=new f0(A,Y,s),R;function _({width:X=0,height:W=0,transform:G=C.prevTransform,fontName:BA=C.fontName}){h.items.push({str:" ",dir:"ltr",width:X,height:W,transform:G,fontName:BA,hasEOL:!1})}function tA(){let X=R.font,W=[R.fontSize*R.textHScale,0,0,R.fontSize,0,R.textRise];if(X.isType3Font&&(R.fontSize<=1||X.isCharBBox)&&!Ss(R.fontMatrix,E0)){let G=X.bbox[3]-X.bbox[1];G>0&&(W[3]*=G*R.fontMatrix[3])}return Ce.transform(R.ctm,Ce.transform(R.textMatrix,W))}function IA(){if(C.initialized)return C;let{font:X,loadedName:W}=R;if(!r.has(W)&&(r.add(W),h.styles[W]={fontFamily:X.fallbackName,ascent:X.ascent,descent:X.descent,vertical:X.vertical},w.options.fontExtraProperties&&X.systemFontInfo)){let iA=h.styles[W];iA.fontSubstitution=X.systemFontInfo.css,iA.fontSubstitutionLoadedName=X.systemFontInfo.loadedName}C.fontName=W;let G=C.transform=tA();X.vertical?(C.width=C.totalWidth=Math.hypot(G[0],G[1]),C.height=C.totalHeight=0,C.vertical=!0):(C.width=C.totalWidth=0,C.height=C.totalHeight=Math.hypot(G[2],G[3]),C.vertical=!1);let BA=Math.hypot(R.textLineMatrix[0],R.textLineMatrix[1]),uA=Math.hypot(R.ctm[0],R.ctm[1]);C.textAdvanceScale=uA*BA;let{fontSize:bA}=R;return C.trackingSpaceMin=bA*d,C.notASpace=bA*x,C.negativeSpaceMax=bA*p,C.spaceInFlowMin=bA*m,C.spaceInFlowMax=bA*D,C.hasEOL=!1,C.initialized=!0,C}function QA(){if(!C.initialized)return;let X=Math.hypot(R.textLineMatrix[0],R.textLineMatrix[1]),G=Math.hypot(R.ctm[0],R.ctm[1])*X;G!==C.textAdvanceScale&&(C.vertical?(C.totalHeight+=C.height*C.textAdvanceScale,C.height=0):(C.totalWidth+=C.width*C.textAdvanceScale,C.width=0),C.textAdvanceScale=G)}function V(X){let W=X.str.join("");c||(W=Ju(W));let G=yf(W,-1,X.vertical);return{str:G.str,dir:G.dir,width:Math.abs(X.totalWidth),height:Math.abs(X.totalHeight),transform:X.transform,fontName:X.fontName,hasEOL:X.hasEOL}}async function lA(X,W){let G=await w.loadFont(X,W,i);if(G.font.isType3Font)try{await G.loadType3Data(w,i,t)}catch(BA){}R.loadedName=G.loadedName,R.font=G.font,R.fontMatrix=G.font.fontMatrix||E0}function EA(X,W,G){let BA=Math.hypot(G[0],G[1]);return[(G[0]*X+G[1]*W)/BA,(G[2]*X+G[3]*W)/BA]}function fA(X){var yA;let W=tA(),G=W[4],BA=W[5];if((yA=R.font)!=null&&yA.vertical){if(Gg[2]||BA+Xg[3])return!1}else if(G+Xg[2]||BAg[3])return!1;if(!R.font||!C.prevTransform)return!0;let uA=C.prevTransform[4],bA=C.prevTransform[5];if(uA===G&&bA===BA)return!0;let iA=-1;switch(W[0]&&W[1]===0&&W[2]===0?iA=W[0]>0?0:180:W[1]&&W[0]===0&&W[3]===0&&(iA=W[1]>0?90:270),iA){case 0:break;case 90:[G,BA]=[BA,G],[uA,bA]=[bA,uA];break;case 180:[G,BA,uA,bA]=[-G,-BA,-uA,-bA];break;case 270:[G,BA]=[-BA,-G],[uA,bA]=[-bA,-uA];break;default:[G,BA]=EA(G,BA,W),[uA,bA]=EA(uA,bA,C.prevTransform)}if(R.font.vertical){let aA=(bA-BA)/C.textAdvanceScale,DA=G-uA,UA=Math.sign(C.height);return aA.5*C.width?(N(),!0):(u(),q(),!0):Math.abs(DA)>C.width?(N(),!0):(aA<=UA*C.notASpace&&u(),aA<=UA*C.trackingSpaceMin?f()?(u(),q(),_({height:Math.abs(aA)})):C.height+=aA:H(aA,C.prevTransform,UA)||(C.str.length===0?(u(),_({height:Math.abs(aA)})):C.height+=aA),Math.abs(DA)>C.width*S&&q(),!0)}let wA=(G-uA)/C.textAdvanceScale,FA=BA-bA,cA=Math.sign(C.width);return wA.5*C.height?(N(),!0):(u(),q(),!0):Math.abs(FA)>C.height?(N(),!0):(wA<=cA*C.notASpace&&u(),wA<=cA*C.trackingSpaceMin?f()?(u(),q(),_({width:Math.abs(wA)})):C.width+=wA:H(wA,C.prevTransform,cA)||(C.str.length===0?(u(),_({width:Math.abs(wA)})):C.width+=wA),Math.abs(FA)>C.height*S&&q(),!0)}function CA({chars:X,extraSpacing:W}){let G=R.font;if(!X){let bA=R.charSpacing+W;bA&&(G.vertical?R.translateTextMatrix(0,-bA):R.translateTextMatrix(bA*R.textHScale,0)),l&&fA(0);return}let BA=G.charsToGlyphs(X),uA=R.fontMatrix[0]*R.fontSize;for(let bA=0,iA=BA.length;bA0){let pA=U.join("");U.length=0,CA({chars:pA,extraSpacing:0})}break;case y.showText:if(!s.state.font){w.ensureStateFont(s.state);continue}CA({chars:iA[0],extraSpacing:0});break;case y.nextLineShowText:if(!s.state.font){w.ensureStateFont(s.state);continue}R.carriageReturn(),CA({chars:iA[0],extraSpacing:0});break;case y.nextLineSetSpacingShowText:if(!s.state.font){w.ensureStateFont(s.state);continue}R.wordSpacing=iA[0],R.charSpacing=iA[1],R.carriageReturn(),CA({chars:iA[2],extraSpacing:0});break;case y.paintXObject:q(),K||(K=i.get("XObject")||F.empty);var cA=iA[0]instanceof M,yA=iA[0].name;if(cA&&Z.getByName(yA))break;BA(new Promise(function(pA,TA){if(!cA)throw new v("XObject must be referred to by name.");let LA=K.getRaw(yA);if(LA instanceof oA){if(Z.getByRef(LA)){pA();return}if(w.globalImageCache.getData(LA,w.pageIndex)){pA();return}LA=Y.fetch(LA)}if(!(LA instanceof KA))throw new v("XObject should be a stream");let WA=LA.dict.get("Subtype");if(!(WA instanceof M))throw new v("XObject should have a Name subtype");if(WA.name!=="Form"){Z.set(yA,LA.dict.objId,!0),pA();return}let re=s.state.clone(),De=new Bs(re),Dn=Ki(LA.dict.getArray("Matrix"),null);Dn&&De.transform(Dn),T();let kn={enqueueInvoked:!1,enqueue(Sn,co){this.enqueueInvoked=!0,n.enqueue(Sn,co)},get desiredSize(){return n.desiredSize},get ready(){return n.ready}};w.getTextContent({stream:LA,task:t,resources:LA.dict.get("Resources")||i,stateManager:De,includeMarkedContent:a,sink:kn,seenStyles:r,viewBox:g,lang:o,markedContentData:I,disableNormalization:c,keepWhiteSpace:l}).then(function(){kn.enqueueInvoked||Z.set(yA,LA.dict.objId,!0),pA()},TA)}).catch(function(pA){if(!(pA instanceof ve)){if(w.options.ignoreErrors){k(`getTextContent - ignoring XObject: "${pA}".`);return}throw pA}}));return;case y.setGState:if(cA=iA[0]instanceof M,yA=iA[0].name,cA&&AA.getByName(yA))break;BA(new Promise(function(pA,TA){if(!cA)throw new v("GState must be referred to by name.");let LA=i.get("ExtGState");if(!(LA instanceof F))throw new v("ExtGState should be a dictionary.");let WA=LA.get(yA);if(!(WA instanceof F))throw new v("GState should be a dictionary.");let re=WA.get("Font");if(!re){AA.set(yA,WA.objId,!0),pA();return}q(),R.fontName=null,R.fontSize=re[1],lA(null,re[0]).then(pA,TA)}).catch(function(pA){if(!(pA instanceof ve)){if(w.options.ignoreErrors){k(`getTextContent - ignoring ExtGState: "${pA}".`);return}throw pA}}));return;case y.beginMarkedContent:q(),a&&(I.level++,h.items.push({type:"beginMarkedContent",tag:iA[0]instanceof M?iA[0].name:null}));break;case y.beginMarkedContentProps:if(q(),a){I.level++;let pA=null;iA[1]instanceof F&&(pA=iA[1].get("MCID")),h.items.push({type:"beginMarkedContentProps",id:Number.isInteger(pA)?`${w.idFactory.getPageObjId()}_mc${pA}`:null,tag:iA[0]instanceof M?iA[0].name:null})}break;case y.endMarkedContent:if(q(),a){if(I.level===0)break;I.level--,h.items.push({type:"endMarkedContent"})}break;case y.restore:aA&&(aA.font!==R.font||aA.fontSize!==R.fontSize||aA.fontName!==R.fontName)&&q();break}if(h.items.length>=n.desiredSize){bA=!0;break}}if(bA){BA(xE);return}q(),T(),W()}).catch(X=>{if(!(X instanceof ve)){if(this.options.ignoreErrors){k(`getTextContent - ignoring errors during "${t.name}" task: "${X}".`),q(),T();return}throw X}})}async extractDataStructures(A,t){let i=this.xref,s,a=this.readToUnicode(t.toUnicode);if(t.composite){let l=A.get("CIDSystemInfo");l instanceof F&&(t.cidSystemInfo={registry:jA(l.get("Registry")),ordering:jA(l.get("Ordering")),supplement:l.get("Supplement")});try{let h=A.get("CIDToGIDMap");h instanceof KA&&(s=h.getBytes())}catch(h){if(!this.options.ignoreErrors)throw h;k(`extractDataStructures - ignoring CIDToGIDMap data: "${h}".`)}}let n=[],r=null,g;if(A.has("Encoding")){if(g=A.get("Encoding"),g instanceof F){if(r=g.get("BaseEncoding"),r=r instanceof M?r.name:null,g.has("Differences")){let l=g.get("Differences"),h=0;for(let C of l){let B=i.fetchIfRef(C);if(typeof B=="number")h=B;else if(B instanceof M)n[h++]=B.name;else throw new v(`Invalid entry in \'Differences\' array: ${B}`)}}}else if(g instanceof M)r=g.name;else{let l="Encoding is not a Name nor a Dict";if(!this.options.ignoreErrors)throw new v(l);k(l)}r!=="MacRomanEncoding"&&r!=="MacExpertEncoding"&&r!=="WinAnsiEncoding"&&(r=null)}let o=!t.file||t.isInternalFont,I=DI()[t.name];if(r&&o&&I&&(r=null),r)t.defaultEncoding=Ua(r);else{let l=!!(t.flags&Ft.Symbolic),h=!!(t.flags&Ft.Nonsymbolic);g=fi,t.type==="TrueType"&&!h&&(g=Ga),(l||I)&&(g=c1,o&&(/Symbol/i.test(t.name)?g=l1:/Dingbats/i.test(t.name)?g=h1:/Wingdings/i.test(t.name)&&(g=Ga))),t.defaultEncoding=g}t.differences=n,t.baseEncodingName=r,t.hasEncoding=!!r||n.length>0,t.dict=A,t.toUnicode=await a;let c=await this.buildToUnicode(t);return t.toUnicode=c,s&&(t.cidToGidMap=this.readCidToGidMap(s,c)),t}_simpleFontToUnicode(A,t=!1){gt(!A.composite,"Must be a simple font.");let i=[],s=A.defaultEncoding.slice(),a=A.baseEncodingName,n=A.differences;for(let g in n){let o=n[g];o!==".notdef"&&(s[g]=o)}let r=Ai();for(let g in s){let o=s[g];if(o==="")continue;let I=r[o];if(I!==void 0){i[g]=String.fromCharCode(I);continue}let c=0;switch(o[0]){case"G":o.length===3&&(c=parseInt(o.substring(1),16));break;case"g":o.length===5&&(c=parseInt(o.substring(1),16));break;case"C":case"c":if(o.length>=3&&o.length<=4){let l=o.substring(1);if(t){c=parseInt(l,16);break}if(c=+l,Number.isNaN(c)&&Number.isInteger(parseInt(l,16)))return this._simpleFontToUnicode(A,!0)}break;case"u":I=Us(o,r),I!==-1&&(c=I);break;default:switch(o){case"f_h":case"f_t":case"T_h":i[g]=o.replaceAll("_","");continue}break}if(c>0&&c<=1114111&&Number.isInteger(c)){if(a&&c===+g){let l=Ua(a);if(l&&(o=l[g])){i[g]=String.fromCharCode(r[o]);continue}}i[g]=String.fromCodePoint(c)}}return i}async buildToUnicode(A){var t,i;if(A.hasIncludedToUnicodeMap=((t=A.toUnicode)==null?void 0:t.length)>0,A.hasIncludedToUnicodeMap)return!A.composite&&A.hasEncoding&&(A.fallbackToUnicode=this._simpleFontToUnicode(A)),A.toUnicode;if(!A.composite)return new B0(this._simpleFontToUnicode(A));if(A.composite&&(A.cMap.builtInCMap&&!(A.cMap instanceof Wi)||((i=A.cidSystemInfo)==null?void 0:i.registry)==="Adobe"&&(A.cidSystemInfo.ordering==="GB1"||A.cidSystemInfo.ordering==="CNS1"||A.cidSystemInfo.ordering==="Japan1"||A.cidSystemInfo.ordering==="Korea1"))){let{registry:s,ordering:a}=A.cidSystemInfo,n=M.get(`${s}-${a}-UCS2`),r=await es.create({encoding:n,fetchBuiltInCMap:this._fetchBuiltInCMapBound,useCMap:null}),g=[],o=[];return A.cMap.forEach(function(I,c){if(c>65535)throw new v("Max size of CID is 65,535");let l=r.lookup(c);if(l){o.length=0;for(let h=0,C=l.length;h>1;n===0&&!t.has(r)||(i[r]=n)}return i}extractWidths(A,t,i){let s=this.xref,a=[],n=0,r=[],g;if(i.composite){let c=A.get("DW");n=typeof c=="number"?Math.ceil(c):1e3;let l=A.get("W");if(Array.isArray(l))for(let h=0,C=l.length;h{let E=o.get(Q),f=new ze;return s.getOperatorList({stream:E,task:i,resources:I,operatorList:f}).then(()=>{f.fnArray[0]===y.setCharWidthAndBounds&&this._removeType3ColorOperators(f,B),c[Q]=f.getIR();for(let u of f.dependencies)r.add(u)}).catch(function(u){k(`Type3 font resource "${Q}" is not available.`);let d=new ze;c[Q]=d.getIR()})});return this.type3Loaded=g.then(()=>{n.charProcOperatorList=c,this._bbox&&(n.isCharBBox=!0,n.bbox=this._bbox)}),this.type3Loaded}_removeType3ColorOperators(A,t=NaN){let i=Ce.normalizeRect(A.argsArray[0].slice(2)),s=i[2]-i[0],a=i[3]-i[1],n=Math.hypot(s,a);s===0||a===0?(A.fnArray.splice(0,1),A.argsArray.splice(0,1)):(t===0||Math.round(n/t)>=10)&&(this._bbox||(this._bbox=[1/0,1/0,-1/0,-1/0]),this._bbox[0]=Math.min(this._bbox[0],i[0]),this._bbox[1]=Math.min(this._bbox[1],i[1]),this._bbox[2]=Math.max(this._bbox[2],i[2]),this._bbox[3]=Math.max(this._bbox[3],i[3]));let r=0,g=A.length;for(;r=y.moveTo&&n<=y.endPath,a.variableArgs)g>r&&PA(`Command ${s}: expected [0, ${r}] args, but received ${g} args.`);else{if(g!==r){let o=this.nonProcessedArgs;for(;g>r;)o.push(t.shift()),g--;for(;gba.MAX_INVALID_PATH_OPS)throw new v(`Invalid ${o}`);k(`Skipping ${o}`),t!==null&&(t.length=0);continue}}return this.preprocessCommand(n,t),A.fn=n,A.args=t,!0}if(i===Ge)return!1;if(i!==null&&(t===null&&(t=[]),t.push(i),t.length>33))throw new v("Too many arguments")}}preprocessCommand(A,t){switch(A|0){case y.save:this.stateManager.save();break;case y.restore:this.stateManager.restore();break;case y.transform:this.stateManager.transform(t);break}}},f0=ba;et(f0,"MAX_INVALID_PATH_OPS",10);var ic=class extends f0{constructor(A){super(new It(A))}parse(){let A={fn:0,args:[]},t={fontSize:0,fontName:"",fontColor:new Uint8ClampedArray(3)};try{for(;A.args.length=0,!!this.read(A);){if(this.savedStatesDepth!==0)continue;let{fn:i,args:s}=A;switch(i|0){case y.setFont:let[a,n]=s;a instanceof M&&(t.fontName=a.name),typeof n=="number"&&n>0&&(t.fontSize=n);break;case y.setFillRGBColor:JA.singletons.rgb.getRgbItem(s,0,t.fontColor,0);break;case y.setFillGray:JA.singletons.gray.getRgbItem(s,0,t.fontColor,0);break;case y.setFillCMYKColor:JA.singletons.cmyk.getRgbItem(s,0,t.fontColor,0);break}}}catch(i){k(`parseDefaultAppearance - ignoring errors: "${i}".`)}return t}};function Q1(e){return new ic(e).parse()}var sc=class extends f0{constructor(A,t,i){var s;super(A),this.stream=A,this.evaluatorOptions=t,this.xref=i,this.resources=(s=A.dict)==null?void 0:s.get("Resources")}parse(){let A={fn:0,args:[]},t={scaleFactor:1,fontSize:0,fontName:"",fontColor:new Uint8ClampedArray(3),fillColorSpace:JA.singletons.gray},i=!1,s=[];try{for(;A.args.length=0,!(i||!this.read(A));){let{fn:a,args:n}=A;switch(a|0){case y.save:s.push({scaleFactor:t.scaleFactor,fontSize:t.fontSize,fontName:t.fontName,fontColor:t.fontColor.slice(),fillColorSpace:t.fillColorSpace});break;case y.restore:t=s.pop()||t;break;case y.setTextMatrix:t.scaleFactor*=Math.hypot(n[0],n[1]);break;case y.setFont:let[r,g]=n;r instanceof M&&(t.fontName=r.name),typeof g=="number"&&g>0&&(t.fontSize=g*t.scaleFactor);break;case y.setFillColorSpace:t.fillColorSpace=JA.parse({cs:n[0],xref:this.xref,resources:this.resources,pdfFunctionFactory:this._pdfFunctionFactory,localColorSpaceCache:this._localColorSpaceCache});break;case y.setFillColor:t.fillColorSpace.getRgbItem(n,0,t.fontColor,0);break;case y.setFillRGBColor:JA.singletons.rgb.getRgbItem(n,0,t.fontColor,0);break;case y.setFillGray:JA.singletons.gray.getRgbItem(n,0,t.fontColor,0);break;case y.setFillCMYKColor:JA.singletons.cmyk.getRgbItem(n,0,t.fontColor,0);break;case y.showText:case y.showSpacedText:case y.nextLineShowText:case y.nextLineSetSpacingShowText:i=!0;break}}}catch(a){k(`parseAppearanceStream - ignoring errors: "${a}".`)}return this.stream.reset(),delete t.scaleFactor,delete t.fillColorSpace,t}get _localColorSpaceCache(){return nA(this,"_localColorSpaceCache",new Jr)}get _pdfFunctionFactory(){let A=new Kr({xref:this.xref,isEvalSupported:this.evaluatorOptions.isEvalSupported});return nA(this,"_pdfFunctionFactory",A)}};function R9(e,A,t){return new sc(e,A,t).parse()}function mi(e,A){if(e[0]===e[1]&&e[1]===e[2]){let t=e[0]/255;return`${Ae(t)} ${A?"g":"G"}`}return Array.from(e,t=>Ae(t/255)).join(" ")+` ${A?"rg":"RG"}`}function N9({fontSize:e,fontName:A,fontColor:t}){return`/${o1(A)} ${e} Tf ${mi(t,!0)}`}var Ut=class{constructor(A,t){this.xref=A,this.widths=null,this.firstChar=1/0,this.lastChar=-1/0,this.fontFamily=t;let i=new OffscreenCanvas(1,1);this.ctxMeasure=i.getContext("2d",{willReadFrequently:!0}),Ut._fontNameId||(Ut._fontNameId=1),this.fontName=M.get(`InvalidPDFjsFont_${t}_${Ut._fontNameId++}`)}get fontDescriptorRef(){if(!Ut._fontDescriptorRef){let A=new F(this.xref);A.set("Type",M.get("FontDescriptor")),A.set("FontName",this.fontName),A.set("FontFamily","MyriadPro Regular"),A.set("FontBBox",[0,0,0,0]),A.set("FontStretch",M.get("Normal")),A.set("FontWeight",400),A.set("ItalicAngle",0),Ut._fontDescriptorRef=this.xref.getNewPersistentRef(A)}return Ut._fontDescriptorRef}get descendantFontRef(){let A=new F(this.xref);A.set("BaseFont",this.fontName),A.set("Type",M.get("Font")),A.set("Subtype",M.get("CIDFontType0")),A.set("CIDToGIDMap",M.get("Identity")),A.set("FirstChar",this.firstChar),A.set("LastChar",this.lastChar),A.set("FontDescriptor",this.fontDescriptorRef),A.set("DW",1e3);let t=[],i=[...this.widths.entries()].sort(),s=null,a=null;for(let[r,g]of i){if(!s){s=r,a=[g];continue}r===s+a.length?a.push(g):(t.push(s,a),s=r,a=[g])}s&&t.push(s,a),A.set("W",t);let n=new F(this.xref);return n.set("Ordering","Identity"),n.set("Registry","Adobe"),n.set("Supplement",0),A.set("CIDSystemInfo",n),this.xref.getNewPersistentRef(A)}get baseFontRef(){let A=new F(this.xref);return A.set("BaseFont",this.fontName),A.set("Type",M.get("Font")),A.set("Subtype",M.get("Type0")),A.set("Encoding",M.get("Identity-H")),A.set("DescendantFonts",[this.descendantFontRef]),A.set("ToUnicode",M.get("Identity-H")),this.xref.getNewPersistentRef(A)}get resources(){let A=new F(this.xref),t=new F(this.xref);return t.set(this.fontName.name,this.baseFontRef),A.set("Font",t),A}_createContext(){return this.widths=new Map,this.ctxMeasure.font=`1000px ${this.fontFamily}`,this.ctxMeasure}createFontResources(A){let t=this._createContext();for(let i of A.split(/\\r\\n?|\\n/))for(let s of i.split("")){let a=s.charCodeAt(0);if(this.widths.has(a))continue;let n=t.measureText(s),r=Math.ceil(n.width);this.widths.set(a,r),this.firstChar=Math.min(a,this.firstChar),this.lastChar=Math.max(a,this.lastChar)}return this.resources}static getFirstPositionInfo(A,t,i){let[s,a,n,r]=A,g=n-s,o=r-a;t%180!==0&&([g,o]=[o,g]);let I=Qi*i,c=Cr*i;return{coords:[0,o+c-I],bbox:[0,0,g,o],matrix:t!==0?xr(t,o,I):void 0}}createAppearance(A,t,i,s,a,n){let r=this._createContext(),g=[],o=-1/0;for(let K of A.split(/\\r\\n?|\\n/)){g.push(K);let Z=r.measureText(K).width;o=Math.max(o,Z);for(let AA of Wu(K)){let gA=String.fromCodePoint(AA),R=this.widths.get(AA);if(R===void 0){let _=r.measureText(gA);R=Math.ceil(_.width),this.widths.set(AA,R),this.firstChar=Math.min(AA,this.firstChar),this.lastChar=Math.max(AA,this.lastChar)}}}o*=s/1e3;let[I,c,l,h]=t,C=l-I,B=h-c;i%180!==0&&([C,B]=[B,C]);let Q=1;o>C&&(Q=C/o);let E=1,f=Qi*s,u=Cr*s,d=f*g.length;d>B&&(E=B/d);let x=Math.min(Q,E),p=s*x,m=["q",`0 0 ${Ae(C)} ${Ae(B)} re W n`,"BT",`1 0 0 1 0 ${Ae(B+u)} Tm 0 Tc ${mi(a,!0)}`,`/${this.fontName.name} ${Ae(p)} Tf`],{resources:D}=this;if(n=typeof n=="number"&&n>=0&&n<=1?n:1,n!==1){m.push("/R0 gs");let K=new F(this.xref),Z=new F(this.xref);Z.set("ca",n),Z.set("CA",n),Z.set("Type",M.get("ExtGState")),K.set("R0",Z),D.set("ExtGState",K)}let S=Ae(f);for(let K of g)m.push(`0 -${S} Td <${ju(K)}> Tj`);m.push("ET","Q");let w=m.join(`\n`),Y=new F(this.xref);if(Y.set("Subtype",M.get("Form")),Y.set("Type",M.get("XObject")),Y.set("BBox",[0,0,C,B]),Y.set("Length",w.length),Y.set("Resources",D),i){let K=xr(i,C,B);Y.set("Matrix",K)}let U=new It(w);return U.dict=Y,U}},Zr=class{constructor(A,t,i){this.root=A,this.xref=t,this._type=i}getAll(){let A=new Map;if(!this.root)return A;let t=this.xref,i=new be;i.put(this.root);let s=[this.root];for(;s.length>0;){let a=t.fetchIfRef(s.shift());if(!(a instanceof F))continue;if(a.has("Kids")){let r=a.get("Kids");if(!Array.isArray(r))continue;for(let g of r){if(i.has(g))throw new v(`Duplicate entry in "${this._type}" tree.`);s.push(g),i.put(g)}continue}let n=a.get(this._type);if(Array.isArray(n))for(let r=0,g=n.length;ra)return k(`Search depth limit reached for "${this._type}" tree.`),null;let r=i.get("Kids");if(!Array.isArray(r))return null;let g=0,o=r.length-1;for(;g<=o;){let I=g+o>>1,c=t.fetchIfRef(r[I]),l=c.get("Limits");if(At.fetchIfRef(l[1]))g=I+1;else{i=c;break}}if(g>o)return null}let n=i.get(this._type);if(Array.isArray(n)){let r=0,g=n.length-2;for(;r<=g;){let o=r+g>>1,I=o+(o&1),c=t.fetchIfRef(n[I]);if(Ac)r=I+2;else return t.fetchIfRef(n[I+1])}}return null}},Fi=class extends Zr{constructor(A,t){super(A,t,"Names")}},va=class extends Zr{constructor(A,t){super(A,t,"Nums")}};function E1(){L2(),vu(),A2(),hs.cleanup()}function mE(e){return e instanceof F?e.has("UF")?e.get("UF"):e.has("F")?e.get("F"):e.has("Unix")?e.get("Unix"):e.has("Mac")?e.get("Mac"):e.has("DOS")?e.get("DOS"):null:null}function G9(e){return e.substring(e.lastIndexOf("/")+1)}var Qn,qa=class{constructor(A,t,i=!1){HA(this,Qn,!1);A instanceof F&&(this.xref=t,this.root=A,A.has("FS")&&(this.fs=A.get("FS")),A.has("RF")&&k("Related file specifications are not supported"),i||(A.has("EF")?_s(this,Qn,!0):k("Non-embedded file specifications are not supported")))}get filename(){let A="",t=mE(this.root);return t&&typeof t=="string"&&(A=jA(t).replaceAll("\\\\\\\\","\\\\").replaceAll("\\\\/","/").replaceAll("\\\\","/")),nA(this,"filename",A||"unnamed")}get content(){var t;if(!ne(this,Qn))return null;this._contentRef||(this._contentRef=mE((t=this.root)==null?void 0:t.get("EF")));let A=null;if(this._contentRef){let i=this.xref.fetchIfRef(this._contentRef);i instanceof KA?A=i.getBytes():k("Embedded file specification points to non-existing/invalid content")}else k("Embedded file specification does not have any content");return A}get description(){var i;let A="",t=(i=this.root)==null?void 0:i.get("Desc");return t&&typeof t=="string"&&(A=jA(t)),nA(this,"description",A)}get serializable(){return{rawFilename:this.filename,filename:G9(this.filename),content:this.content,description:this.description}}};Qn=new WeakMap;var ht={NoError:0,EndOfDocument:-1,UnterminatedCdat:-2,UnterminatedXmlDeclaration:-3,UnterminatedDoctypeDeclaration:-4,UnterminatedComment:-5,MalformedElement:-6,OutOfMemory:-7,UnterminatedAttributeValue:-8,UnterminatedElement:-9,ElementNeverBegun:-10};function $0(e,A){let t=e[A];return t===" "||t===`\n`||t==="\\r"||t===" "}function U9(e){for(let A=0,t=e.length;A{if(i.substring(0,2)==="#x")return String.fromCodePoint(parseInt(i.substring(2),16));if(i.substring(0,1)==="#")return String.fromCodePoint(parseInt(i.substring(1),10));switch(i){case"lt":return"<";case"gt":return">";case"amp":return"&";case"quot":return\'"\';case"apos":return"\'"}return this.onResolveEntity(i)})}_parseContent(A,t){let i=[],s=t;function a(){for(;s"&&A[s]!=="/";)++s;let n=A.substring(t,s);for(a();s"&&A[s]!=="/"&&A[s]!=="?";){a();let r="",g="";for(;s"&&A[i]!=="?"&&A[i]!=="/";)++i;let a=A.substring(t,i);s();let n=i;for(;i");)++i;let r=A.substring(n,i);return{name:a,value:r,parsed:i-t}}parseXml(A){let t=0;for(;t",s),n<0){this.onError(ht.UnterminatedElement);return}this.onEndElement(A.substring(s,n)),s=n+1;break;case"?":++s;let r=this._parseProcessingInstruction(A,s);if(A.substring(s+r.parsed,s+r.parsed+2)!=="?>"){this.onError(ht.UnterminatedXmlDeclaration);return}this.onPi(r.name,r.value),s+=r.parsed+2;break;case"!":if(A.substring(s+1,s+3)==="--"){if(n=A.indexOf("-->",s+3),n<0){this.onError(ht.UnterminatedComment);return}this.onComment(A.substring(s+3,n)),s=n+3}else if(A.substring(s+1,s+8)==="[CDATA["){if(n=A.indexOf("]]>",s+8),n<0){this.onError(ht.UnterminatedCdat);return}this.onCdata(A.substring(s+8,n)),s=n+3}else if(A.substring(s+1,s+8)==="DOCTYPE"){let I=A.indexOf("[",s+8),c=!1;if(n=A.indexOf(">",s+8),n<0){this.onError(ht.UnterminatedDoctypeDeclaration);return}if(I>0&&n>I){if(n=A.indexOf("]>",s+8),n<0){this.onError(ht.UnterminatedDoctypeDeclaration);return}c=!0}let l=A.substring(s+8,n+(c?1:0));this.onDoctype(l),s=n+(c?2:1)}else{this.onError(ht.MalformedElement);return}break;default:let g=this._parseContent(A,s);if(g===null){this.onError(ht.MalformedElement);return}let o=!1;if(A.substring(s+g.parsed,s+g.parsed+2)==="/>")o=!0;else if(A.substring(s+g.parsed,s+g.parsed+1)!==">"){this.onError(ht.UnterminatedElement);return}this.onBeginElement(g.name,g.attributes,o),s+=g.parsed+(o?2:1);break}}else{for(;s0}searchNode(A,t){var n;if(t>=A.length)return this;let i=A[t];if(i.name.startsWith("#")&&t0)s.push([a,0]),a=a.childNodes[0];else{if(s.length===0)return null;for(;s.length!==0;){let[r,g]=s.pop(),o=g+1;if(o");for(let t of this.childNodes)t.dump(A);A.push(``)}else this.nodeValue?A.push(`>${ls(this.nodeValue)}`):A.push("/>")}},Ls=class extends jr{constructor({hasAttributes:A=!1,lowerCaseName:t=!1}){super(),this._currentFragment=null,this._stack=null,this._errorCode=ht.NoError,this._hasAttributes=A,this._lowerCaseName=t}parseFromString(A){if(this._currentFragment=[],this._stack=[],this._errorCode=ht.NoError,this.parseXml(A),this._errorCode!==ht.NoError)return;let[t]=this._currentFragment;if(t)return{documentElement:t}}onText(A){if(U9(A))return;let t=new u0("#text",A);this._currentFragment.push(t)}onCdata(A){let t=new u0("#text",A);this._currentFragment.push(t)}onBeginElement(A,t,i){this._lowerCaseName&&(A=A.toLowerCase());let s=new u0(A);s.childNodes=[],this._hasAttributes&&(s.attributes=t),this._currentFragment.push(s),!i&&(this._stack.push(this._currentFragment),this._currentFragment=s.childNodes)}onEndElement(A){this._currentFragment=this._stack.pop()||[];let t=this._currentFragment.at(-1);if(!t)return null;for(let i of t.childNodes)i.parentNode=t;return t}onError(A){this._errorCode=A}},ac=class{constructor(A){A=this._repair(A);let i=new Ls({lowerCaseName:!0}).parseFromString(A);this._metadataMap=new Map,this._data=A,i&&this._parse(i)}_repair(A){return A.replace(/^[^<]+/,"").replaceAll(/>\\\\376\\\\377([^<]+)/g,function(t,i){let s=i.replaceAll(/\\\\([0-3])([0-7])([0-7])/g,function(n,r,g,o){return String.fromCharCode(r*64+g*8+o*1)}).replaceAll(/&(amp|apos|gt|lt|quot);/g,function(n,r){switch(r){case"amp":return"&";case"apos":return"\'";case"gt":return">";case"lt":return"<";case"quot":return\'"\'}throw new Error(`_repair: ${r} isn\'t defined.`)}),a=[">"];for(let n=0,r=s.length;n=32&&g<127&&g!==60&&g!==62&&g!==38?a.push(String.fromCharCode(g)):a.push("&#x"+(65536+g).toString(16).substring(1)+";")}return a.join("")})}_getSequence(A){let t=A.nodeName;return t!=="rdf:bag"&&t!=="rdf:seq"&&t!=="rdf:alt"?null:A.childNodes.filter(i=>i.nodeName==="rdf:li")}_parseArray(A){if(!A.hasChildNodes())return;let[t]=A.childNodes,i=this._getSequence(t)||[];this._metadataMap.set(A.nodeName,i.map(s=>s.textContent.trim()))}_parse(A){let t=A.documentElement;if(t.nodeName!=="rdf:rdf")for(t=t.firstChild;t&&t.nodeName!=="rdf:rdf";)t=t.nextSibling;if(!(!t||t.nodeName!=="rdf:rdf"||!t.hasChildNodes())){for(let i of t.childNodes)if(i.nodeName==="rdf:description")for(let s of i.childNodes){let a=s.nodeName;switch(a){case"#text":continue;case"dc:creator":case"dc:subject":this._parseArray(s);continue}this._metadataMap.set(a,s.textContent.trim())}}}get serializable(){return{parsedData:this._metadataMap,rawData:this._data}}},pE=512,nc=class extends Me{constructor(A,t,i){super(t),this.str=A,this.dict=A.dict,this.decrypt=i,this.nextChunk=null,this.initialized=!1}readBlock(){var r;let A;if(this.initialized?A=this.nextChunk:(A=this.str.getBytes(pE),this.initialized=!0),!A||A.length===0){this.eof=!0;return}this.nextChunk=this.str.getBytes(pE);let t=((r=this.nextChunk)==null?void 0:r.length)>0,i=this.decrypt;A=i(A,!t);let s=this.bufferLength,a=s+A.length;this.ensureBuffer(a).set(A,s),this.bufferLength=a}},ci=class{constructor(A){this.a=0,this.b=0;let t=new Uint8Array(256),i=A.length;for(let s=0;s<256;++s)t[s]=s;for(let s=0,a=0;s<256;++s){let n=t[s];a=a+n+A[s%i]&255,t[s]=t[a],t[a]=n}this.s=t}encryptBlock(A){let t=this.a,i=this.b,s=this.s,a=A.length,n=new Uint8Array(a);for(let r=0;r>5&255,l[h++]=n>>13&255,l[h++]=n>>21&255,l[h++]=n>>>29&255,l[h++]=0,l[h++]=0,l[h++]=0;let Q=new Int32Array(16);for(h=0;h>>32-S)|0,E=m}r=r+E|0,g=g+f|0,o=o+u|0,I=I+d|0}return new Uint8Array([r&255,r>>8&255,r>>16&255,r>>>24&255,g&255,g>>8&255,g>>16&255,g>>>24&255,o&255,o>>8&255,o>>16&255,o>>>24&255,I&255,I>>8&255,I>>16&255,I>>>24&255])}return i}(),sA=class{constructor(A,t){this.high=A|0,this.low=t|0}and(A){this.high&=A.high,this.low&=A.low}xor(A){this.high^=A.high,this.low^=A.low}or(A){this.high|=A.high,this.low|=A.low}shiftRight(A){A>=32?(this.low=this.high>>>A-32|0,this.high=0):(this.low=this.low>>>A|this.high<<32-A,this.high=this.high>>>A|0)}shiftLeft(A){A>=32?(this.high=this.low<>>32-A,this.low<<=A)}rotateRight(A){let t,i;A&32?(i=this.low,t=this.high):(t=this.low,i=this.high),A&=31,this.low=t>>>A|i<<32-A,this.high=i>>>A|t<<32-A}not(){this.high=~this.high,this.low=~this.low}add(A){let t=(this.low>>>0)+(A.low>>>0),i=(this.high>>>0)+(A.high>>>0);t>4294967295&&(i+=1),this.low=t|0,this.high=i|0}copyTo(A,t){A[t]=this.high>>>24&255,A[t+1]=this.high>>16&255,A[t+2]=this.high>>8&255,A[t+3]=this.high&255,A[t+4]=this.low>>>24&255,A[t+5]=this.low>>16&255,A[t+6]=this.low>>8&255,A[t+7]=this.low&255}assign(A){this.high=A.high,this.low=A.low}},ss=function(){function A(I,c){return I>>>c|I<<32-c}function t(I,c,l){return I&c^~I&l}function i(I,c,l){return I&c^I&l^c&l}function s(I){return A(I,2)^A(I,13)^A(I,22)}function a(I){return A(I,6)^A(I,11)^A(I,25)}function n(I){return A(I,7)^A(I,18)^I>>>3}function r(I){return A(I,17)^A(I,19)^I>>>10}let g=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298];function o(I,c,l){let h=1779033703,C=3144134277,B=1013904242,Q=2773480762,E=1359893119,f=2600822924,u=528734635,d=1541459225,x=Math.ceil((l+9)/64)*64,p=new Uint8Array(x),m,D;for(m=0;m>>29&255,p[m++]=l>>21&255,p[m++]=l>>13&255,p[m++]=l>>5&255,p[m++]=l<<3&255;let w=new Uint32Array(64);for(m=0;m>24&255,h>>16&255,h>>8&255,h&255,C>>24&255,C>>16&255,C>>8&255,C&255,B>>24&255,B>>16&255,B>>8&255,B&255,Q>>24&255,Q>>16&255,Q>>8&255,Q&255,E>>24&255,E>>16&255,E>>8&255,E&255,f>>24&255,f>>16&255,f>>8&255,f&255,u>>24&255,u>>16&255,u>>8&255,u&255,d>>24&255,d>>16&255,d>>8&255,d&255])}return o}(),Sf=function(){function A(o,I,c,l,h){o.assign(I),o.and(c),h.assign(I),h.not(),h.and(l),o.xor(h)}function t(o,I,c,l,h){o.assign(I),o.and(c),h.assign(I),h.and(l),o.xor(h),h.assign(c),h.and(l),o.xor(h)}function i(o,I,c){o.assign(I),o.rotateRight(28),c.assign(I),c.rotateRight(34),o.xor(c),c.assign(I),c.rotateRight(39),o.xor(c)}function s(o,I,c){o.assign(I),o.rotateRight(14),c.assign(I),c.rotateRight(18),o.xor(c),c.assign(I),c.rotateRight(41),o.xor(c)}function a(o,I,c){o.assign(I),o.rotateRight(1),c.assign(I),c.rotateRight(8),o.xor(c),c.assign(I),c.shiftRight(7),o.xor(c)}function n(o,I,c){o.assign(I),o.rotateRight(19),c.assign(I),c.rotateRight(61),o.xor(c),c.assign(I),c.shiftRight(6),o.xor(c)}let r=[new sA(1116352408,3609767458),new sA(1899447441,602891725),new sA(3049323471,3964484399),new sA(3921009573,2173295548),new sA(961987163,4081628472),new sA(1508970993,3053834265),new sA(2453635748,2937671579),new sA(2870763221,3664609560),new sA(3624381080,2734883394),new sA(310598401,1164996542),new sA(607225278,1323610764),new sA(1426881987,3590304994),new sA(1925078388,4068182383),new sA(2162078206,991336113),new sA(2614888103,633803317),new sA(3248222580,3479774868),new sA(3835390401,2666613458),new sA(4022224774,944711139),new sA(264347078,2341262773),new sA(604807628,2007800933),new sA(770255983,1495990901),new sA(1249150122,1856431235),new sA(1555081692,3175218132),new sA(1996064986,2198950837),new sA(2554220882,3999719339),new sA(2821834349,766784016),new sA(2952996808,2566594879),new sA(3210313671,3203337956),new sA(3336571891,1034457026),new sA(3584528711,2466948901),new sA(113926993,3758326383),new sA(338241895,168717936),new sA(666307205,1188179964),new sA(773529912,1546045734),new sA(1294757372,1522805485),new sA(1396182291,2643833823),new sA(1695183700,2343527390),new sA(1986661051,1014477480),new sA(2177026350,1206759142),new sA(2456956037,344077627),new sA(2730485921,1290863460),new sA(2820302411,3158454273),new sA(3259730800,3505952657),new sA(3345764771,106217008),new sA(3516065817,3606008344),new sA(3600352804,1432725776),new sA(4094571909,1467031594),new sA(275423344,851169720),new sA(430227734,3100823752),new sA(506948616,1363258195),new sA(659060556,3750685593),new sA(883997877,3785050280),new sA(958139571,3318307427),new sA(1322822218,3812723403),new sA(1537002063,2003034995),new sA(1747873779,3602036899),new sA(1955562222,1575990012),new sA(2024104815,1125592928),new sA(2227730452,2716904306),new sA(2361852424,442776044),new sA(2428436474,593698344),new sA(2756734187,3733110249),new sA(3204031479,2999351573),new sA(3329325298,3815920427),new sA(3391569614,3928383900),new sA(3515267271,566280711),new sA(3940187606,3454069534),new sA(4118630271,4000239992),new sA(116418474,1914138554),new sA(174292421,2731055270),new sA(289380356,3203993006),new sA(460393269,320620315),new sA(685471733,587496836),new sA(852142971,1086792851),new sA(1017036298,365543100),new sA(1126000580,2618297676),new sA(1288033470,3409855158),new sA(1501505948,4234509866),new sA(1607167915,987167468),new sA(1816402316,1246189591)];function g(o,I,c,l=!1){let h,C,B,Q,E,f,u,d;l?(h=new sA(3418070365,3238371032),C=new sA(1654270250,914150663),B=new sA(2438529370,812702999),Q=new sA(355462360,4144912697),E=new sA(1731405415,4290775857),f=new sA(2394180231,1750603025),u=new sA(3675008525,1694076839),d=new sA(1203062813,3204075428)):(h=new sA(1779033703,4089235720),C=new sA(3144134277,2227873595),B=new sA(1013904242,4271175723),Q=new sA(2773480762,1595750129),E=new sA(1359893119,2917565137),f=new sA(2600822924,725511199),u=new sA(528734635,4215389547),d=new sA(1541459225,327033209));let x=Math.ceil((c+17)/128)*128,p=new Uint8Array(x),m,D;for(m=0;m>>29&255,p[m++]=c>>21&255,p[m++]=c>>13&255,p[m++]=c>>5&255,p[m++]=c<<3&255;let w=new Array(80);for(m=0;m<80;m++)w[m]=new sA(0,0);let Y=new sA(0,0),U=new sA(0,0),K=new sA(0,0),Z=new sA(0,0),AA=new sA(0,0),gA=new sA(0,0),R=new sA(0,0),_=new sA(0,0),tA=new sA(0,0),IA=new sA(0,0),QA=new sA(0,0),V=new sA(0,0),lA;for(m=0;m=1;--r){i=n[13],n[13]=n[9],n[9]=n[5],n[5]=n[1],n[1]=i,i=n[14],s=n[10],n[14]=n[6],n[10]=n[2],n[6]=i,n[2]=s,i=n[15],s=n[11],a=n[7],n[15]=n[3],n[11]=i,n[7]=s,n[3]=a;for(let g=0;g<16;++g)n[g]=this._inv_s[n[g]];for(let g=0,o=r*16;g<16;++g,++o)n[g]^=t[o];for(let g=0;g<16;g+=4){let o=this._mix[n[g]],I=this._mix[n[g+1]],c=this._mix[n[g+2]],l=this._mix[n[g+3]];i=o^I>>>8^I<<24^c>>>16^c<<16^l>>>24^l<<8,n[g]=i>>>24&255,n[g+1]=i>>16&255,n[g+2]=i>>8&255,n[g+3]=i&255}}i=n[13],n[13]=n[9],n[9]=n[5],n[5]=n[1],n[1]=i,i=n[14],s=n[10],n[14]=n[6],n[10]=n[2],n[6]=i,n[2]=s,i=n[15],s=n[11],a=n[7],n[15]=n[3],n[11]=i,n[7]=s,n[3]=a;for(let r=0;r<16;++r)n[r]=this._inv_s[n[r]],n[r]^=t[r];return n}_encrypt(A,t){let i=this._s,s,a,n,r=new Uint8Array(16);r.set(A);for(let g=0;g<16;++g)r[g]^=t[g];for(let g=1;g=h;--l)if(I[l]!==c){c=0;break}g-=c,n[n.length-1]=I.subarray(0,16-c)}}let o=new Uint8Array(g);for(let I=0,c=0,l=n.length;I=256&&(a=(a^27)&255));for(let l=0;l<4;++l)s[I]=n^=s[I-32],I++,s[I]=r^=s[I-32],I++,s[I]=g^=s[I-32],I++,s[I]=o^=s[I-32],I++}return s}},gc=class{checkOwnerPassword(A,t,i,s){let a=new Uint8Array(A.length+56);a.set(A,0),a.set(t,A.length),a.set(i,A.length+t.length);let n=ss(a,0,a.length);return Ss(n,s)}checkUserPassword(A,t,i){let s=new Uint8Array(A.length+8);s.set(A,0),s.set(t,A.length);let a=ss(s,0,s.length);return Ss(a,i)}getOwnerKey(A,t,i,s){let a=new Uint8Array(A.length+56);a.set(A,0),a.set(t,A.length),a.set(i,A.length+t.length);let n=ss(a,0,a.length);return new R0(n).decryptBlock(s,!1,new Uint8Array(16))}getUserKey(A,t,i){let s=new Uint8Array(A.length+8);s.set(A,0),s.set(t,A.length);let a=ss(s,0,s.length);return new R0(a).decryptBlock(i,!1,new Uint8Array(16))}},oc=class{_hash(A,t,i){let s=ss(t,0,t.length).subarray(0,32),a=[0],n=0;for(;n<64||a.at(-1)>n-32;){let r=A.length+s.length+i.length,g=new Uint8Array(r),o=0;g.set(A,o),o+=A.length,g.set(s,o),o+=s.length,g.set(i,o);let I=new Uint8Array(r*64);for(let h=0,C=0;h<64;h++,C+=r)I.set(g,C);a=new Xr(s.subarray(0,16)).encrypt(I,s.subarray(16,32));let l=a.slice(0,16).reduce((h,C)=>h+C,0)%3;l===0?s=ss(a,0,a.length):l===1?s=M9(a,0,a.length):l===2&&(s=Sf(a,0,a.length)),n++}return s.subarray(0,32)}checkOwnerPassword(A,t,i,s){let a=new Uint8Array(A.length+56);a.set(A,0),a.set(t,A.length),a.set(i,A.length+t.length);let n=this._hash(A,a,i);return Ss(n,s)}checkUserPassword(A,t,i){let s=new Uint8Array(A.length+8);s.set(A,0),s.set(t,A.length);let a=this._hash(A,s,[]);return Ss(a,i)}getOwnerKey(A,t,i,s){let a=new Uint8Array(A.length+56);a.set(A,0),a.set(t,A.length),a.set(i,A.length+t.length);let n=this._hash(A,a,i);return new R0(n).decryptBlock(s,!1,new Uint8Array(16))}getUserKey(A,t,i){let s=new Uint8Array(A.length+8);s.set(A,0),s.set(t,A.length);let a=this._hash(A,s,[]);return new R0(a).decryptBlock(i,!1,new Uint8Array(16))}},Vr=class{constructor(A,t){this.StringCipherConstructor=A,this.StreamCipherConstructor=t}createStream(A,t){let i=new this.StreamCipherConstructor;return new nc(A,t,function(a,n){return i.decryptBlock(a,n)})}decryptString(A){let t=new this.StringCipherConstructor,i=Pe(A);return i=t.decryptBlock(i,!0),Qt(i)}encryptString(A){let t=new this.StringCipherConstructor;if(t instanceof Ta){let a=16-A.length%16;A+=String.fromCharCode(a).repeat(a);let n=new Uint8Array(16);if(typeof crypto!="undefined")crypto.getRandomValues(n);else for(let o=0;o<16;o++)n[o]=Math.floor(256*Math.random());let r=Pe(A);r=t.encrypt(r,n);let g=new Uint8Array(16+r.length);return g.set(n),g.set(r,16),Qt(g)}let i=Pe(A);return i=t.encrypt(i),Qt(i)}},Q0,Jg,Ff,En,Ic,Yg,Rf,ws,Ir,fn,cc,cs=class{constructor(A,t,i){HA(this,Jg);HA(this,En);HA(this,Yg);HA(this,ws);HA(this,fn);let s=A.get("Filter");if(!ye(s,"Standard"))throw new v("unknown encryption method");this.filterName=s.name,this.dict=A;let a=A.get("V");if(!Number.isInteger(a)||a!==1&&a!==2&&a!==4&&a!==5)throw new v("unsupported encryption algorithm");this.algorithm=a;let n=A.get("Length");if(!n)if(a<=3)n=40;else{let E=A.get("CF"),f=A.get("StmF");if(E instanceof F&&f instanceof M){E.suppressEncryption=!0;let u=E.get(f.name);n=(u==null?void 0:u.get("Length"))||128,n<40&&(n<<=3)}}if(!Number.isInteger(n)||n<40||n%8!==0)throw new v("invalid key length");let r=Pe(A.get("O")),g=Pe(A.get("U")),o=r.subarray(0,32),I=g.subarray(0,32),c=A.get("P"),l=A.get("R"),h=(a===4||a===5)&&A.get("EncryptMetadata")!==!1;this.encryptMetadata=h;let C=Pe(t),B;if(i){if(l===6)try{i=Yo(i)}catch(E){k("CipherTransformFactory: Unable to convert UTF8 encoded password.")}B=Pe(i)}let Q;if(a!==5)Q=mA(this,En,Ic).call(this,C,B,o,I,c,l,n,h);else{let E=r.subarray(32,40),f=r.subarray(40,48),u=g.subarray(0,48),d=g.subarray(32,40),x=g.subarray(40,48),p=Pe(A.get("OE")),m=Pe(A.get("UE")),D=Pe(A.get("Perms"));Q=mA(this,Jg,Ff).call(this,l,B,o,E,f,u,I,d,x,p,m,D)}if(!Q&&!i)throw new bs("No password given",G1.NEED_PASSWORD);if(!Q&&i){let E=mA(this,Yg,Rf).call(this,B,o,l,n);Q=mA(this,En,Ic).call(this,C,E,o,I,c,l,n,h)}if(!Q)throw new bs("Incorrect Password",G1.INCORRECT_PASSWORD);if(this.encryptionKey=Q,a>=4){let E=A.get("CF");E instanceof F&&(E.suppressEncryption=!0),this.cf=E,this.stmf=A.get("StmF")||M.get("Identity"),this.strf=A.get("StrF")||M.get("Identity"),this.eff=A.get("EFF")||this.stmf}}createCipherTransform(A,t){if(this.algorithm===4||this.algorithm===5)return new Vr(mA(this,fn,cc).call(this,this.cf,this.strf,A,t,this.encryptionKey),mA(this,fn,cc).call(this,this.cf,this.stmf,A,t,this.encryptionKey));let i=mA(this,ws,Ir).call(this,A,t,this.encryptionKey,!1),s=function(){return new ci(i)};return new Vr(s,s)}},or=cs;Q0=new WeakMap,Jg=new WeakSet,Ff=function(A,t,i,s,a,n,r,g,o,I,c,l){if(t){let C=Math.min(127,t.length);t=t.subarray(0,C)}else t=[];let h=A===6?new oc:new gc;return h.checkUserPassword(t,g,r)?h.getUserKey(t,o,c):t.length&&h.checkOwnerPassword(t,s,n,i)?h.getOwnerKey(t,a,n,I):null},En=new WeakSet,Ic=function(A,t,i,s,a,n,r,g){let o=40+i.length+A.length,I=new Uint8Array(o),c=0,l,h;if(t)for(h=Math.min(32,t.length);c>8&255,I[c++]=a>>16&255,I[c++]=a>>>24&255,l=0,h=A.length;l=4&&!g&&(I[c++]=255,I[c++]=255,I[c++]=255,I[c++]=255);let C=Ri(I,0,c),B=r>>3;if(n>=3)for(l=0;l<50;++l)C=Ri(C,0,B);let Q=C.subarray(0,B),E,f;if(n>=3){for(c=0;c<32;++c)I[c]=ne(cs,Q0)[c];for(l=0,h=A.length;l>3;if(i>=3)for(g=0;g<50;++g)o=Ri(o,0,o.length);let c,l;if(i>=3){l=t;let h=new Uint8Array(I);for(g=19;g>=0;g--){for(let C=0;C>8&255,a[r++]=A>>16&255,a[r++]=t&255,a[r++]=t>>8&255,s&&(a[r++]=115,a[r++]=65,a[r++]=108,a[r++]=84),Ri(a,0,r).subarray(0,Math.min(i.length+5,16))},fn=new WeakSet,cc=function(A,t,i,s,a){if(!(t instanceof M))throw new v("Invalid crypt filter name.");let n=this,r=A.get(t.name),g=r==null?void 0:r.get("CFM");if(!g||g.name==="None")return function(){return new rc};if(g.name==="V2")return function(){var o;return new ci(mA(o=n,ws,Ir).call(o,i,s,a,!1))};if(g.name==="AESV2")return function(){var o;return new Xr(mA(o=n,ws,Ir).call(o,i,s,a,!0))};if(g.name==="AESV3")return function(){return new R0(a)};throw new v("Unknown crypto method")},HA(or,Q0,new Uint8Array([40,191,78,94,78,117,138,65,100,0,78,86,255,250,1,8,46,46,0,182,208,104,62,128,47,12,169,254,100,83,105,122]));async function ot(e,A,t,{encrypt:i=null}){let s=i==null?void 0:i.createCipherTransform(e.num,e.gen);t.push(`${e.num} ${e.gen} obj\n`),A instanceof F?await Ao(A,t,s):A instanceof KA?await Nf(A,t,s):(Array.isArray(A)||ArrayBuffer.isView(A))&&await Gf(A,t,s),t.push(`\nendobj\n`)}async function Ao(e,A,t){A.push("<<");for(let i of e.getKeys())A.push(` /${o1(i)} `),await Uf(e.getRaw(i),A,t);A.push(">>")}async function Nf(e,A,t){let i=e.getBytes(),{dict:s}=e,[a,n]=await Promise.all([s.getAsync("Filter"),s.getAsync("DecodeParms")]),r=Array.isArray(a)?await s.xref.fetchIfRefAsync(a[0]):a,g=ye(r,"FlateDecode"),o=256;if(i.length>=o||g)try{let c=new CompressionStream("deflate"),l=c.writable.getWriter();l.write(i),l.close();let h=await new Response(c.readable).arrayBuffer();i=new Uint8Array(h);let C,B;a?g||(C=Array.isArray(a)?[M.get("FlateDecode"),...a]:[M.get("FlateDecode"),a],n&&(B=Array.isArray(n)?[null,...n]:[null,n])):C=M.get("FlateDecode"),C&&s.set("Filter",C),B&&s.set("DecodeParms",B)}catch(c){PA(`writeStream - cannot compress data: "${c}".`)}let I=Qt(i);t&&(I=t.encryptString(I)),s.set("Length",I.length),await Ao(s,A,t),A.push(` stream\n`,I,`\nendstream`)}async function Gf(e,A,t){A.push("[");let i=!0;for(let s of e)i?i=!1:A.push(" "),await Uf(s,A,t);A.push("]")}async function Uf(e,A,t){e instanceof M?A.push(`/${o1(e.name)}`):e instanceof oA?A.push(`${e.num} ${e.gen} R`):Array.isArray(e)||ArrayBuffer.isView(e)?await Gf(e,A,t):typeof e=="string"?(t&&(e=t.encryptString(e)),A.push(`(${Fs(e)})`)):typeof e=="number"?A.push(Ae(e)):typeof e=="boolean"?A.push(e.toString()):e instanceof F?await Ao(e,A,t):e instanceof KA?await Nf(e,A,t):e===null?A.push("null"):k(`Unhandled value in writer: ${typeof e}, please file a bug.`)}function Fo(e,A,t,i){for(let s=A+t-1;s>t-1;s--)i[s]=e&255,e>>=8;return t+A}function Mf(e,A,t){for(let i=0,s=e.length;ig+o.length,0);for(let g of Object.values(A.info))s.push(g),a+=g.length;let n=new Uint8Array(a),r=0;for(let g of s)Mf(g,r,n),r+=g.length;return Qt(Ri(n))}function H9(e,A){let t=new Ls({hasAttributes:!0}).parseFromString(e);for(let{xfa:s}of A){if(!s)continue;let{path:a,value:n}=s;if(!a)continue;let r=_E(a),g=t.documentElement.searchNode(r,0);!g&&r.length>1&&(g=t.documentElement.searchNode([r.at(-1)],0)),g?g.childNodes=Array.isArray(n)?n.map(o=>new u0("value",o)):[new u0("#text",n)]:k(`Node not found for path: ${a}`)}let i=[];return t.documentElement.dump(i),i.join("")}async function J9({xref:e,acroForm:A,acroFormRef:t,hasXfa:i,hasXfaDatasetsEntry:s,xfaDatasetsRef:a,needAppearances:n,newRefs:r}){if(i&&!s&&!a&&k("XFA - Cannot save it"),!n&&(!i||!a||s))return;let g=A.clone();if(i&&!s){let I=A.get("XFA").slice();I.splice(2,0,"datasets"),I.splice(3,0,a),g.set("XFA",I)}n&&g.set("NeedAppearances",!0);let o=[];await ot(t,g,o,e),r.push({ref:t,data:o.join("")})}function Y9({xfaData:e,xfaDatasetsRef:A,newRefs:t,xref:i}){if(e===null){let n=i.fetchIfRef(A);e=H9(n.getString(),t)}let s=i.encrypt;s&&(e=s.createCipherTransform(A.num,A.gen).encryptString(e));let a=`${A.num} ${A.gen} obj\n<< /Type /EmbeddedFile /Length ${e.length}>>\nstream\n`+e+`\nendstream\nendobj\n`;t.push({ref:A,data:a})}async function K9(e,A,t,i,s){s.push(`xref\n`);let a=Lf(t),n=0;for(let{ref:r,data:g}of t)r.num===a[n]&&(s.push(`${a[n]} ${a[n+1]}\n`),n+=2),g!==null?(s.push(`${A.toString().padStart(10,"0")} ${Math.min(r.gen,65535).toString().padStart(5,"0")} n\\r\n`),A+=g.length):s.push(`0000000000 ${Math.min(r.gen+1,65535).toString().padStart(5,"0")} f\\r\n`);Hf(A,e,i),s.push(`trailer\n`),await Ao(i,s),s.push(`\nstartxref\n`,A.toString(),`\n%%EOF\n`)}function Lf(e){let A=[];for(let{ref:t}of e)t.num===A.at(-2)+A.at(-1)?A[A.length-1]+=1:A.push(t.num,1);return A}async function v9(e,A,t,i,s){let a=[],n=0,r=0;for(let{ref:B,data:Q}of t){let E;n=Math.max(n,A),Q!==null?(E=Math.min(B.gen,65535),a.push([1,A,E]),A+=Q.length):(E=Math.min(B.gen+1,65535),a.push([0,0,E])),r=Math.max(r,E)}i.set("Index",Lf(t));let g=M1(n),o=M1(r),I=[1,g,o];i.set("W",I),Hf(A,e,i);let c=I.reduce((B,Q)=>B+Q,0),l=new Uint8Array(c*a.length),h=new Ie(l);h.dict=i;let C=0;for(let[B,Q,E]of a)C=Fo(B,I[0],C,l),C=Fo(Q,I[1],C,l),C=Fo(E,I[2],C,l);await ot(e.newRef,h,s,{}),s.push(`startxref\n`,A.toString(),`\n%%EOF\n`)}function Hf(e,A,t){if(Array.isArray(A.fileIds)&&A.fileIds.length>0){let i=L9(e,A);t.set("ID",[A.fileIds[0],i])}}function q9(e,A,t){let i=new F(null);i.set("Prev",e.startXRef);let s=e.newRef;return t?(A.push({ref:s,data:""}),i.set("Size",s.num+1),i.set("Type",M.get("XRef"))):i.set("Size",s.num),e.rootRef!==null&&i.set("Root",e.rootRef),e.infoRef!==null&&i.set("Info",e.infoRef),e.encryptRef!==null&&i.set("Encrypt",e.encryptRef),i}async function T9({originalData:e,xrefInfo:A,newRefs:t,xref:i=null,hasXfa:s=!1,xfaDatasetsRef:a=null,hasXfaDatasetsEntry:n=!1,needAppearances:r,acroFormRef:g=null,acroForm:o=null,xfaData:I=null,useXrefStream:c=!1}){await J9({xref:i,acroForm:o,acroFormRef:g,hasXfa:s,hasXfaDatasetsEntry:n,xfaDatasetsRef:a,needAppearances:r,newRefs:t}),s&&Y9({xfaData:I,xfaDatasetsRef:a,newRefs:t,xref:i});let l=[],h=e.length,C=e.at(-1);C!==10&&C!==13&&(l.push(`\n`),h+=1);let B=q9(A,t,c);t=t.sort((u,d)=>u.ref.num-d.ref.num);for(let{data:u}of t)u!==null&&l.push(u);await(c?v9(A,h,t,B,l):K9(A,h,t,B,l));let Q=l.reduce((u,d)=>u+d.length,e.length),E=new Uint8Array(Q);E.set(e);let f=e.length;for(let u of l)Mf(u,f,E),f+=u.length;return E}var wE=40,Nt={PAGE_CONTENT:1,STREAM_CONTENT:2,OBJECT:3,ANNOTATION:4,ELEMENT:5},Kg,Jf,un,lc,vg,Yf,qg,Kf,Tg=class{constructor(A,t){HA(this,Kg);this.dict=A,this.ref=t instanceof oA?t:null,this.roleMap=new Map,this.structParentIds=null}init(){this.readRoleMap()}addAnnotationIdToPage(A,t){mA(this,Kg,Jf).call(this,A,t,Nt.ANNOTATION)}readRoleMap(){let A=this.dict.get("RoleMap");A instanceof F&&A.forEach((t,i)=>{i instanceof M&&this.roleMap.set(t,i.name)})}static async canCreateStructureTree({catalogRef:A,pdfManager:t,newAnnotationsByPage:i}){var n;if(!(A instanceof oA))return k("Cannot save the struct tree: no catalog reference."),!1;let s=0,a=!0;for(let[r,g]of i){let{ref:o}=await t.getPage(r);if(!(o instanceof oA)){k(`Cannot save the struct tree: page ${r} has no ref.`),a=!0;break}for(let I of g)(n=I.accessibilityData)!=null&&n.type&&(I.parentTreeId=s++,a=!1)}if(a){for(let r of i.values())for(let g of r)delete g.parentTreeId;return!1}return!0}static async createStructureTree({newAnnotationsByPage:A,xref:t,catalogRef:i,pdfManager:s,newRefs:a}){let n=s.catalog.cloneDict(),r=new mt;r.put(i,n);let g=t.getNewTemporaryRef();n.set("StructTreeRoot",g);let o=new F(t);o.set("Type",M.get("StructTreeRoot"));let I=t.getNewTemporaryRef();o.set("ParentTree",I);let c=[];o.set("K",c),r.put(g,o);let l=new F(t),h=[];l.set("Nums",h);let C=await mA(this,un,lc).call(this,{newAnnotationsByPage:A,structTreeRootRef:g,kids:c,nums:h,xref:t,pdfManager:s,cache:r});o.set("ParentTreeNextKey",C),r.put(I,l);let B=[];for(let[Q,E]of r.items())B.length=0,await ot(Q,E,B,t),a.push({ref:Q,data:B.join("")})}async canUpdateStructTree({pdfManager:A,xref:t,newAnnotationsByPage:i}){var o,I;if(!this.ref)return k("Cannot update the struct tree: no root reference."),!1;let s=this.dict.get("ParentTreeNextKey");if(!Number.isInteger(s)||s<0)return k("Cannot update the struct tree: invalid next key."),!1;let a=this.dict.get("ParentTree");if(!(a instanceof F))return k("Cannot update the struct tree: ParentTree isn\'t a dict."),!1;let n=a.get("Nums");if(!Array.isArray(n))return k("Cannot update the struct tree: nums isn\'t an array."),!1;let r=new va(a,t);for(let c of i.keys()){let{pageDict:l}=await A.getPage(c);if(!l.has("StructParents"))continue;let h=l.get("StructParents");if(!Number.isInteger(h)||!Array.isArray(r.get(h)))return k(`Cannot save the struct tree: page ${c} has a wrong id.`),!1}let g=!0;for(let[c,l]of i){let{pageDict:h}=await A.getPage(c);mA(o=Tg,vg,Yf).call(o,{elements:l,xref:this.dict.xref,pageDict:h,numberTree:r});for(let C of l)(I=C.accessibilityData)!=null&&I.type&&(C.parentTreeId=s++,g=!1)}if(g){for(let c of i.values())for(let l of c)delete l.parentTreeId,delete l.structTreeParent;return!1}return!0}async updateStructureTree({newAnnotationsByPage:A,pdfManager:t,newRefs:i}){var C;let s=this.dict.xref,a=this.dict.clone(),n=this.ref,r=new mt;r.put(n,a);let g=a.getRaw("ParentTree"),o;g instanceof oA?o=s.fetch(g):(o=g,g=s.getNewTemporaryRef(),a.set("ParentTree",g)),o=o.clone(),r.put(g,o);let I=o.getRaw("Nums"),c=null;I instanceof oA&&(c=I,I=s.fetch(c)),I=I.slice(),c||o.set("Nums",I);let l=await mA(C=Tg,un,lc).call(C,{newAnnotationsByPage:A,structTreeRootRef:n,kids:null,nums:I,xref:s,pdfManager:t,cache:r});a.set("ParentTreeNextKey",l),c&&r.put(c,I);let h=[];for(let[B,Q]of r.items())h.length=0,await ot(B,Q,h,s),i.push({ref:B,data:h.join("")})}},Ui=Tg;Kg=new WeakSet,Jf=function(A,t,i){if(!(A instanceof oA)||t<0)return;this.structParentIds||(this.structParentIds=new mt);let s=this.structParentIds.get(A);s||(s=[],this.structParentIds.put(A,s)),s.push([t,i])},un=new WeakSet,lc=async function({newAnnotationsByPage:A,structTreeRootRef:t,kids:i,nums:s,xref:a,pdfManager:n,cache:r}){let g=M.get("OBJR"),o=-1/0;for(let[I,c]of A){let{ref:l}=await n.getPage(I),h=l instanceof oA;for(let{accessibilityData:C,ref:B,parentTreeId:Q,structTreeParent:E}of c){if(!(C!=null&&C.type))continue;let{type:f,title:u,lang:d,alt:x,expanded:p,actualText:m}=C;o=Math.max(o,Q);let D=a.getNewTemporaryRef(),S=new F(a);S.set("S",M.get(f)),u&&S.set("T",ii(u)),d&&S.set("Lang",d),x&&S.set("Alt",ii(x)),p&&S.set("E",ii(p)),m&&S.set("ActualText",ii(m)),await mA(this,qg,Kf).call(this,{structTreeParent:E,tagDict:S,newTagRef:D,structTreeRootRef:t,fallbackKids:i,xref:a,cache:r});let w=new F(a);S.set("K",w),w.set("Type",g),h&&w.set("Pg",l),w.set("Obj",B),r.put(D,S),s.push(Q,D)}}return o+1},vg=new WeakSet,Yf=function({elements:A,xref:t,pageDict:i,numberTree:s}){let a=new Map;for(let o of A)if(o.structTreeParentId){let I=parseInt(o.structTreeParentId.split("_mc")[1],10),c=a.get(I);c||(c=[],a.set(I,c)),c.push(o)}let n=i.get("StructParents");if(!Number.isInteger(n))return;let r=s.get(n),g=(o,I,c)=>{let l=a.get(o);if(l){let h=I.getRaw("P"),C=t.fetchIfRef(h);if(h instanceof oA&&C instanceof F){let B={ref:c,dict:I};for(let Q of l)Q.structTreeParent=B}return!0}return!1};for(let o of r){if(!(o instanceof oA))continue;let I=t.fetch(o),c=I.get("K");if(Number.isInteger(c)){g(c,I,o);continue}if(Array.isArray(c))for(let l of c){if(l=t.fetchIfRef(l),Number.isInteger(l)&&g(l,I,o))break;if(!(l instanceof F))continue;if(!ye(l.get("Type"),"MCR"))break;let h=l.get("MCID");if(Number.isInteger(h)&&g(h,I,o))break}}},qg=new WeakSet,Kf=async function({structTreeParent:A,tagDict:t,newTagRef:i,structTreeRootRef:s,fallbackKids:a,xref:n,cache:r}){let g=null,o;A?({ref:g}=A,o=A.dict.getRaw("P")||s):o=s,t.set("P",o);let I=n.fetchIfRef(o);if(!I){a.push(i);return}let c=r.get(o);c||(c=I.clone(),r.put(o,c));let l=c.getRaw("K"),h=l instanceof oA?r.get(l):null;if(!h){h=n.fetchIfRef(l),h=Array.isArray(h)?h.slice():[l];let B=n.getNewTemporaryRef();c.set("K",B),r.put(B,h)}let C=h.indexOf(g);h.splice(C>=0?C+1:h.length,0,i)},HA(Ui,un),HA(Ui,vg),HA(Ui,qg);var hc=class{constructor(A,t){this.tree=A,this.dict=t,this.kids=[],this.parseKids()}get role(){let A=this.dict.get("S"),t=A instanceof M?A.name:"",{root:i}=this.tree;return i.roleMap.has(t)?i.roleMap.get(t):t}parseKids(){let A=null,t=this.dict.getRaw("Pg");t instanceof oA&&(A=t.toString());let i=this.dict.get("K");if(Array.isArray(i))for(let s of i){let a=this.parseKid(A,s);a&&this.kids.push(a)}else{let s=this.parseKid(A,i);s&&this.kids.push(s)}}parseKid(A,t){if(Number.isInteger(t))return this.tree.pageDict.objId!==A?null:new as({type:Nt.PAGE_CONTENT,mcid:t,pageObjId:A});let i=null;if(t instanceof oA?i=this.dict.xref.fetch(t):t instanceof F&&(i=t),!i)return null;let s=i.getRaw("Pg");s instanceof oA&&(A=s.toString());let a=i.get("Type")instanceof M?i.get("Type").name:null;if(a==="MCR"){if(this.tree.pageDict.objId!==A)return null;let n=i.getRaw("Stm");return new as({type:Nt.STREAM_CONTENT,refObjId:n instanceof oA?n.toString():null,pageObjId:A,mcid:i.get("MCID")})}if(a==="OBJR"){if(this.tree.pageDict.objId!==A)return null;let n=i.getRaw("Obj");return new as({type:Nt.OBJECT,refObjId:n instanceof oA?n.toString():null,pageObjId:A})}return new as({type:Nt.ELEMENT,dict:i})}},as=class{constructor({type:A,dict:t=null,mcid:i=null,pageObjId:s=null,refObjId:a=null}){this.type=A,this.dict=t,this.mcid=i,this.pageObjId=s,this.refObjId=a,this.parentNode=null}},Cc=class{constructor(A,t){this.root=A,this.rootDict=A?A.dict:null,this.pageDict=t,this.nodes=[]}parse(A){var r,g;if(!this.root||!this.rootDict)return;let t=this.rootDict.get("ParentTree");if(!t)return;let i=this.pageDict.get("StructParents"),s=A instanceof oA&&((r=this.root.structParentIds)==null?void 0:r.get(A));if(!Number.isInteger(i)&&!s)return;let a=new Map,n=new va(t,this.rootDict.xref);if(Number.isInteger(i)){let o=n.get(i);if(Array.isArray(o))for(let I of o)I instanceof oA&&this.addNode(this.rootDict.xref.fetch(I),a)}if(s)for(let[o,I]of s){let c=n.get(o);if(c){let l=this.addNode(this.rootDict.xref.fetchIfRef(c),a);((g=l==null?void 0:l.kids)==null?void 0:g.length)===1&&l.kids[0].type===Nt.OBJECT&&(l.kids[0].type=I)}}}addNode(A,t,i=0){if(i>wE)return k("StructTree MAX_DEPTH reached."),null;if(!(A instanceof F))return null;if(t.has(A))return t.get(A);let s=new hc(this,A);t.set(A,s);let a=A.get("P");if(!a||ye(a.get("Type"),"StructTreeRoot"))return this.addTopLevelNode(A,s)||t.delete(A),s;let n=this.addNode(a,t,i+1);if(!n)return s;let r=!1;for(let g of n.kids)g.type===Nt.ELEMENT&&g.dict===A&&(g.parentNode=s,r=!0);return r||t.delete(A),s}addTopLevelNode(A,t){let i=this.rootDict.get("K");if(!i)return!1;if(i instanceof F)return i.objId!==A.objId?!1:(this.nodes[0]=t,!0);if(!Array.isArray(i))return!0;let s=!1;for(let a=0;awE){k("StructTree too deep to be fully serialized.");return}let n=Object.create(null);n.role=i.role,n.children=[],s.children.push(n);let r=i.dict.get("Alt");typeof r=="string"&&(n.alt=jA(r));let g=i.dict.get("Lang");typeof g=="string"&&(n.lang=jA(g));for(let o of i.kids){let I=o.type===Nt.ELEMENT?o.parentNode:null;if(I){A(I,n,a+1);continue}else o.type===Nt.PAGE_CONTENT||o.type===Nt.STREAM_CONTENT?n.children.push({type:"content",id:`p${o.pageObjId}_mc${o.mcid}`}):o.type===Nt.OBJECT?n.children.push({type:"object",id:o.refObjId}):o.type===Nt.ANNOTATION&&n.children.push({type:"annotation",id:`${Yu}${o.refObjId}`})}}let t=Object.create(null);t.children=[],t.role="Root";for(let i of this.nodes)i&&A(i,t);return t}};function f1(e){if(!Array.isArray(e)||e.length<2)return!1;let[A,t,...i]=e;if(!(A instanceof oA)&&!Number.isInteger(A)||!(t instanceof M))return!1;let s=i.length,a=!0;switch(t.name){case"XYZ":if(s<2||s>3)return!1;break;case"Fit":case"FitB":return s===0;case"FitH":case"FitBH":case"FitV":case"FitBV":if(s>1)return!1;break;case"FitR":if(s!==4)return!1;a=!1;break;default:return!1}for(let n of i)if(!(typeof n=="number"||a&&n===null))return!1;return!0}function On(e){return e instanceof F&&(e=e.get("D")),f1(e)?e:null}function yE(e){let A=e.get("D");if(A){if(A instanceof M&&(A=A.name),typeof A=="string")return jA(A);if(f1(A))return JSON.stringify(A)}return null}var Pg,vf,Wg,qf,Og=class{constructor(A,t){HA(this,Pg);HA(this,Wg);if(this.pdfManager=A,this.xref=t,this._catDict=t.getCatalogObj(),!(this._catDict instanceof F))throw new v("Catalog object is not a dictionary.");this.toplevelPagesDict,this._actualNumPages=null,this.fontCache=new mt,this.builtInCMapCache=new Map,this.standardFontDataCache=new Map,this.globalImageCache=new z0,this.pageKidsCountCache=new mt,this.pageIndexCache=new mt,this.pageDictCache=new mt,this.nonBlendModesSet=new be,this.systemFontCache=new Map}cloneDict(){return this._catDict.clone()}get version(){let A=this._catDict.get("Version");if(A instanceof M){if(XE.test(A.name))return nA(this,"version",A.name);k(`Invalid PDF catalog version: ${A.name}`)}return nA(this,"version",null)}get lang(){let A=this._catDict.get("Lang");return nA(this,"lang",A&&typeof A=="string"?jA(A):null)}get needsRendering(){let A=this._catDict.get("NeedsRendering");return nA(this,"needsRendering",typeof A=="boolean"?A:!1)}get collection(){let A=null;try{let t=this._catDict.get("Collection");t instanceof F&&t.size>0&&(A=t)}catch(t){if(t instanceof ge)throw t;PA("Cannot fetch Collection entry; assuming no collection is present.")}return nA(this,"collection",A)}get acroForm(){let A=null;try{let t=this._catDict.get("AcroForm");t instanceof F&&t.size>0&&(A=t)}catch(t){if(t instanceof ge)throw t;PA("Cannot fetch AcroForm entry; assuming no forms are present.")}return nA(this,"acroForm",A)}get acroFormRef(){let A=this._catDict.getRaw("AcroForm");return nA(this,"acroFormRef",A instanceof oA?A:null)}get metadata(){var i;let A=this._catDict.getRaw("Metadata");if(!(A instanceof oA))return nA(this,"metadata",null);let t=null;try{let s=this.xref.fetch(A,!((i=this.xref.encrypt)!=null&&i.encryptMetadata));if(s instanceof KA&&s.dict instanceof F){let a=s.dict.get("Type"),n=s.dict.get("Subtype");if(ye(a,"Metadata")&&ye(n,"XML")){let r=ka(s.getString());r&&(t=new ac(r).serializable)}}}catch(s){if(s instanceof ge)throw s;PA(`Skipping invalid Metadata: "${s}".`)}return nA(this,"metadata",t)}get markInfo(){let A=null;try{A=this._readMarkInfo()}catch(t){if(t instanceof ge)throw t;k("Unable to read mark info.")}return nA(this,"markInfo",A)}_readMarkInfo(){let A=this._catDict.get("MarkInfo");if(!(A instanceof F))return null;let t={Marked:!1,UserProperties:!1,Suspects:!1};for(let i in t){let s=A.get(i);typeof s=="boolean"&&(t[i]=s)}return t}get structTreeRoot(){let A=null;try{A=this._readStructTreeRoot()}catch(t){if(t instanceof ge)throw t;k("Unable read to structTreeRoot info.")}return nA(this,"structTreeRoot",A)}_readStructTreeRoot(){let A=this._catDict.getRaw("StructTreeRoot"),t=this.xref.fetchIfRef(A);if(!(t instanceof F))return null;let i=new Ui(t,A);return i.init(),i}get toplevelPagesDict(){let A=this._catDict.get("Pages");if(!(A instanceof F))throw new v("Invalid top-level pages dictionary.");return nA(this,"toplevelPagesDict",A)}get documentOutline(){let A=null;try{A=this._readDocumentOutline()}catch(t){if(t instanceof ge)throw t;k("Unable to read document outline.")}return nA(this,"documentOutline",A)}_readDocumentOutline(){let A=this._catDict.get("Outlines");if(!(A instanceof F)||(A=A.getRaw("First"),!(A instanceof oA)))return null;let t={items:[]},i=[{obj:A,parent:t}],s=new be;s.put(A);let a=this.xref,n=new Uint8ClampedArray(3);for(;i.length>0;){let r=i.shift(),g=a.fetchIfRef(r.obj);if(g===null)continue;g.has("Title")||k("Invalid outline item encountered.");let o={url:null,dest:null,action:null};Og.parseDestDictionary({destDict:g,resultObj:o,docBaseUrl:this.baseUrl,docAttachments:this.attachments});let I=g.get("Title"),c=g.get("F")||0,l=g.getArray("C"),h=g.get("Count"),C=n;wt(l,3)&&(l[0]!==0||l[1]!==0||l[2]!==0)&&(C=JA.singletons.rgb.getRgb(l,0));let B={action:o.action,attachment:o.attachment,dest:o.dest,url:o.url,unsafeUrl:o.unsafeUrl,newWindow:o.newWindow,setOCGState:o.setOCGState,title:typeof I=="string"?jA(I):"",color:C,count:Number.isInteger(h)?h:void 0,bold:!!(c&2),italic:!!(c&1),items:[]};r.parent.items.push(B),A=g.getRaw("First"),A instanceof oA&&!s.has(A)&&(i.push({obj:A,parent:B}),s.put(A)),A=g.getRaw("Next"),A instanceof oA&&!s.has(A)&&(i.push({obj:A,parent:r.parent}),s.put(A))}return t.items.length>0?t.items:null}get permissions(){let A=null;try{A=this._readPermissions()}catch(t){if(t instanceof ge)throw t;k("Unable to read permissions.")}return nA(this,"permissions",A)}_readPermissions(){let A=this.xref.trailer.get("Encrypt");if(!(A instanceof F))return null;let t=A.get("P");if(typeof t!="number")return null;t+=2**32;let i=[];for(let s in N1){let a=N1[s];t&a&&i.push(a)}return i}get optionalContentConfig(){let A=null;try{let t=this._catDict.get("OCProperties");if(!t)return nA(this,"optionalContentConfig",null);let i=t.get("D");if(!i)return nA(this,"optionalContentConfig",null);let s=t.get("OCGs");if(!Array.isArray(s))return nA(this,"optionalContentConfig",null);let a=[],n=new be;for(let r of s)!(r instanceof oA)||n.has(r)||(n.put(r),a.push(mA(this,Pg,vf).call(this,r)));A=mA(this,Wg,qf).call(this,i,n),A.groups=a}catch(t){if(t instanceof ge)throw t;k(`Unable to read optional content config: ${t}`)}return nA(this,"optionalContentConfig",A)}setActualNumPages(A=null){this._actualNumPages=A}get hasActualNumPages(){return this._actualNumPages!==null}get _pagesCount(){let A=this.toplevelPagesDict.get("Count");if(!Number.isInteger(A))throw new v("Page count in top-level pages dictionary is not an integer.");return nA(this,"_pagesCount",A)}get numPages(){return this.hasActualNumPages?this._actualNumPages:this._pagesCount}get destinations(){let A=this._readDests(),t=Object.create(null);if(A instanceof Fi)for(let[i,s]of A.getAll()){let a=On(s);a&&(t[jA(i)]=a)}else A instanceof F&&A.forEach(function(i,s){let a=On(s);a&&(t[i]=a)});return nA(this,"destinations",t)}getDestination(A){let t=this._readDests();if(t instanceof Fi){let i=On(t.get(A));if(i)return i;let s=this.destinations[A];if(s)return k(`Found "${A}" at an incorrect position in the NameTree.`),s}else if(t instanceof F){let i=On(t.get(A));if(i)return i}return null}_readDests(){let A=this._catDict.get("Names");if(A!=null&&A.has("Dests"))return new Fi(A.getRaw("Dests"),this.xref);if(this._catDict.has("Dests"))return this._catDict.get("Dests")}get pageLabels(){let A=null;try{A=this._readPageLabels()}catch(t){if(t instanceof ge)throw t;k("Unable to read page labels.")}return nA(this,"pageLabels",A)}_readPageLabels(){let A=this._catDict.getRaw("PageLabels");if(!A)return null;let t=new Array(this.numPages),i=null,s="",n=new va(A,this.xref).getAll(),r="",g=1;for(let o=0,I=this.numPages;o=1))throw new v("Invalid start in PageLabel dictionary.");g=l}else g=1}switch(i){case"D":r=g;break;case"R":case"r":r=qu(g,i==="r");break;case"A":case"a":let l=26,B=i==="a"?97:65,Q=g-1;r=String.fromCharCode(B+Q%l).repeat(Math.floor(Q/l)+1);break;default:if(i)throw new v(`Invalid style "${i}" in PageLabel dictionary.`);r=""}t[o]=s+r,g++}return t}get pageLayout(){let A=this._catDict.get("PageLayout"),t="";if(A instanceof M)switch(A.name){case"SinglePage":case"OneColumn":case"TwoColumnLeft":case"TwoColumnRight":case"TwoPageLeft":case"TwoPageRight":t=A.name}return nA(this,"pageLayout",t)}get pageMode(){let A=this._catDict.get("PageMode"),t="UseNone";if(A instanceof M)switch(A.name){case"UseNone":case"UseOutlines":case"UseThumbs":case"FullScreen":case"UseOC":case"UseAttachments":t=A.name}return nA(this,"pageMode",t)}get viewerPreferences(){let A=this._catDict.get("ViewerPreferences");if(!(A instanceof F))return nA(this,"viewerPreferences",null);let t=null;for(let i of A.getKeys()){let s=A.get(i),a;switch(i){case"HideToolbar":case"HideMenubar":case"HideWindowUI":case"FitWindow":case"CenterWindow":case"DisplayDocTitle":case"PickTrayByPDFSize":typeof s=="boolean"&&(a=s);break;case"NonFullScreenPageMode":if(s instanceof M)switch(s.name){case"UseNone":case"UseOutlines":case"UseThumbs":case"UseOC":a=s.name;break;default:a="UseNone"}break;case"Direction":if(s instanceof M)switch(s.name){case"L2R":case"R2L":a=s.name;break;default:a="L2R"}break;case"ViewArea":case"ViewClip":case"PrintArea":case"PrintClip":if(s instanceof M)switch(s.name){case"MediaBox":case"CropBox":case"BleedBox":case"TrimBox":case"ArtBox":a=s.name;break;default:a="CropBox"}break;case"PrintScaling":if(s instanceof M)switch(s.name){case"None":case"AppDefault":a=s.name;break;default:a="AppDefault"}break;case"Duplex":if(s instanceof M)switch(s.name){case"Simplex":case"DuplexFlipShortEdge":case"DuplexFlipLongEdge":a=s.name;break;default:a="None"}break;case"PrintPageRange":Array.isArray(s)&&s.length%2===0&&s.every((r,g,o)=>Number.isInteger(r)&&r>0&&(g===0||r>=o[g-1])&&r<=this.numPages)&&(a=s);break;case"NumCopies":Number.isInteger(s)&&s>0&&(a=s);break;default:k(`Ignoring non-standard key in ViewerPreferences: ${i}.`);continue}if(a===void 0){k(`Bad value, for key "${i}", in ViewerPreferences: ${s}.`);continue}t||(t=Object.create(null)),t[i]=a}return nA(this,"viewerPreferences",t)}get openAction(){let A=this._catDict.get("OpenAction"),t=Object.create(null);if(A instanceof F){let i=new F(this.xref);i.set("A",A);let s={url:null,dest:null,action:null};Og.parseDestDictionary({destDict:i,resultObj:s}),Array.isArray(s.dest)?t.dest=s.dest:s.action&&(t.action=s.action)}else Array.isArray(A)&&(t.dest=A);return nA(this,"openAction",OE(t)>0?t:null)}get attachments(){let A=this._catDict.get("Names"),t=null;if(A instanceof F&&A.has("EmbeddedFiles")){let i=new Fi(A.getRaw("EmbeddedFiles"),this.xref);for(let[s,a]of i.getAll()){let n=new qa(a,this.xref);t||(t=Object.create(null)),t[jA(s)]=n.serializable}}return nA(this,"attachments",t)}get xfaImages(){let A=this._catDict.get("Names"),t=null;if(A instanceof F&&A.has("XFAImages")){let i=new Fi(A.getRaw("XFAImages"),this.xref);for(let[s,a]of i.getAll())t||(t=new F(this.xref)),t.set(jA(s),a)}return nA(this,"xfaImages",t)}_collectJavaScript(){let A=this._catDict.get("Names"),t=null;function i(a,n){if(!(n instanceof F)||!ye(n.get("S"),"JavaScript"))return;let r=n.get("JS");if(r instanceof KA)r=r.getString();else if(typeof r!="string")return;r=jA(r).replaceAll("\\0",""),r&&(t||(t=new Map)).set(a,r)}if(A instanceof F&&A.has("JavaScript")){let a=new Fi(A.getRaw("JavaScript"),this.xref);for(let[n,r]of a.getAll())i(jA(n),r)}let s=this._catDict.get("OpenAction");return s&&i("OpenAction",s),t}get jsActions(){let A=this._collectJavaScript(),t=Vg(this.xref,this._catDict,Fu);if(A){t||(t=Object.create(null));for(let[i,s]of A)i in t?t[i].push(s):t[i]=[s]}return nA(this,"jsActions",t)}async fontFallback(A,t){let i=await Promise.all(this.fontCache);for(let s of i)if(s.loadedName===A){s.fallback(t);return}}async cleanup(A=!1){E1(),this.globalImageCache.clear(A),this.pageKidsCountCache.clear(),this.pageIndexCache.clear(),this.pageDictCache.clear(),this.nonBlendModesSet.clear();let t=await Promise.all(this.fontCache);for(let{dict:i}of t)delete i.cacheKey;this.fontCache.clear(),this.builtInCMapCache.clear(),this.standardFontDataCache.clear(),this.systemFontCache.clear()}async getPageDict(A){let t=[this.toplevelPagesDict],i=new be,s=this._catDict.getRaw("Pages");s instanceof oA&&i.put(s);let a=this.xref,n=this.pageKidsCountCache,r=this.pageIndexCache,g=this.pageDictCache,o=0;for(;t.length;){let I=t.pop();if(I instanceof oA){let C=n.get(I);if(C>=0&&o+C<=A){o+=C;continue}if(i.has(I))throw new v("Pages tree contains circular reference.");i.put(I);let B=await(g.get(I)||a.fetchAsync(I));if(B instanceof F){let Q=B.getRaw("Type");if(Q instanceof oA&&(Q=await a.fetchAsync(Q)),ye(Q,"Page")||!B.has("Kids")){if(n.has(I)||n.put(I,1),r.has(I)||r.put(I,o),o===A)return[B,I];o++;continue}}t.push(B);continue}if(!(I instanceof F))throw new v("Page dictionary kid reference points to wrong type of object.");let{objId:c}=I,l=I.getRaw("Count");if(l instanceof oA&&(l=await a.fetchAsync(l)),Number.isInteger(l)&&l>=0&&(c&&!n.has(c)&&n.put(c,l),o+l<=A)){o+=l;continue}let h=I.getRaw("Kids");if(h instanceof oA&&(h=await a.fetchAsync(h)),!Array.isArray(h)){let C=I.getRaw("Type");if(C instanceof oA&&(C=await a.fetchAsync(C)),ye(C,"Page")||!I.has("Kids")){if(o===A)return[I,null];o++;continue}throw new v("Page dictionary kids object is not an array.")}for(let C=h.length-1;C>=0;C--){let B=h[C];t.push(B),I===this.toplevelPagesDict&&B instanceof oA&&!g.has(B)&&g.put(B,a.fetchAsync(B))}}throw new Error(`Page index ${A} not found.`)}async getAllPageDicts(A=!1){let{ignoreErrors:t}=this.pdfManager.evaluatorOptions,i=[{currentNode:this.toplevelPagesDict,posInKids:0}],s=new be,a=this._catDict.getRaw("Pages");a instanceof oA&&s.put(a);let n=new Map,r=this.xref,g=this.pageIndexCache,o=0;function I(l,h){h&&!g.has(h)&&g.put(h,o),n.set(o++,[l,h])}function c(l){if(l instanceof ti&&!A)throw l;A&&t&&o===0&&(k(`getAllPageDicts - Skipping invalid first page: "${l}".`),l=F.empty),n.set(o++,[l,null])}for(;i.length>0;){let l=i.at(-1),{currentNode:h,posInKids:C}=l,B=h.getRaw("Kids");if(B instanceof oA)try{B=await r.fetchAsync(B)}catch(u){c(u);break}if(!Array.isArray(B)){c(new v("Page dictionary kids object is not an array."));break}if(C>=B.length){i.pop();continue}let Q=B[C],E;if(Q instanceof oA){if(s.has(Q)){c(new v("Pages tree contains circular reference."));break}s.put(Q);try{E=await r.fetchAsync(Q)}catch(u){c(u);break}}else E=Q;if(!(E instanceof F)){c(new v("Page dictionary kid reference points to wrong type of object."));break}let f=E.getRaw("Type");if(f instanceof oA)try{f=await r.fetchAsync(f)}catch(u){c(u);break}ye(f,"Page")||!E.has("Kids")?I(E,Q instanceof oA?Q:null):i.push({currentNode:E,posInKids:0}),l.posInKids++}return n}getPageIndex(A){let t=this.pageIndexCache.get(A);if(t!==void 0)return Promise.resolve(t);let i=this.xref;function s(r){let g=0,o;return i.fetchAsync(r).then(function(I){if(ur(r,A)&&!jE(I,"Page")&&!(I instanceof F&&!I.has("Type")&&I.has("Contents")))throw new v("The reference does not point to a /Page dictionary.");if(!I)return null;if(!(I instanceof F))throw new v("Node must be a dictionary.");return o=I.getRaw("Parent"),I.getAsync("Parent")}).then(function(I){if(!I)return null;if(!(I instanceof F))throw new v("Parent must be a dictionary.");return I.getAsync("Kids")}).then(function(I){if(!I)return null;let c=[],l=!1;for(let h of I){if(!(h instanceof oA))throw new v("Kid must be a reference.");if(ur(h,r)){l=!0;break}c.push(i.fetchAsync(h).then(function(C){if(!(C instanceof F))throw new v("Kid node must be a dictionary.");C.has("Count")?g+=C.get("Count"):g++}))}if(!l)throw new v("Kid reference not found in parent\'s kids.");return Promise.all(c).then(function(){return[g,o]})})}let a=0,n=r=>s(r).then(g=>{if(!g)return this.pageIndexCache.put(A,a),a;let[o,I]=g;return a+=o,n(I)});return n(A)}get baseUrl(){let A=this._catDict.get("URI");if(A instanceof F){let t=A.get("Base");if(typeof t=="string"){let i=Qr(t,null,{tryConvertEncoding:!0});if(i)return nA(this,"baseUrl",i.href)}}return nA(this,"baseUrl",this.pdfManager.docBaseUrl)}static parseDestDictionary({destDict:A,resultObj:t,docBaseUrl:i=null,docAttachments:s=null}){if(!(A instanceof F)){k("parseDestDictionary: `destDict` must be a dictionary.");return}let a=A.get("A"),n,r;if(a instanceof F||(A.has("Dest")?a=A.get("Dest"):(a=A.get("AA"),a instanceof F&&(a.has("D")?a=a.get("D"):a.has("U")&&(a=a.get("U"))))),a instanceof F){let g=a.get("S");if(!(g instanceof M)){k("parseDestDictionary: Invalid type in Action dictionary.");return}let o=g.name;switch(o){case"ResetForm":let I=a.get("Flags"),c=((typeof I=="number"?I:0)&1)===0,l=[],h=[];for(let w of a.get("Fields")||[])w instanceof oA?h.push(w.toString()):typeof w=="string"&&l.push(jA(w));t.resetForm={fields:l,refs:h,include:c};break;case"URI":n=a.get("URI"),n instanceof M&&(n="/"+n.name);break;case"GoTo":r=a.get("D");break;case"Launch":case"GoToR":let C=a.get("F");if(C instanceof F){let w=new qa(C,null,!0),{rawFilename:Y}=w.serializable;n=Y}else typeof C=="string"&&(n=C);let B=yE(a);B&&typeof n=="string"&&(n=n.split("#",1)[0]+"#"+B);let Q=a.get("NewWindow");typeof Q=="boolean"&&(t.newWindow=Q);break;case"GoToE":let E=a.get("T"),f;if(s&&E instanceof F){let w=E.get("R"),Y=E.get("N");ye(w,"C")&&typeof Y=="string"&&(f=s[jA(Y)])}if(f){t.attachment=f;let w=yE(a);w&&(t.attachmentDest=w)}else k(\'parseDestDictionary - unimplemented "GoToE" action.\');break;case"Named":let u=a.get("N");u instanceof M&&(t.action=u.name);break;case"SetOCGState":let d=a.get("State"),x=a.get("PreserveRB");if(!Array.isArray(d)||d.length===0)break;let p=[];for(let w of d)if(w instanceof M)switch(w.name){case"ON":case"OFF":case"Toggle":p.push(w.name);break}else w instanceof oA&&p.push(w.toString());if(p.length!==d.length)break;t.setOCGState={state:p,preserveRB:typeof x=="boolean"?x:!0};break;case"JavaScript":let m=a.get("JS"),D;m instanceof KA?D=m.getString():typeof m=="string"&&(D=m);let S=D&&zE(jA(D));if(S){n=S.url,t.newWindow=S.newWindow;break}default:if(o==="JavaScript"||o==="SubmitForm")break;k(`parseDestDictionary - unsupported action: "${o}".`);break}}else A.has("Dest")&&(r=A.get("Dest"));if(typeof n=="string"){let g=Qr(n,i,{addDefaultProtocol:!0,tryConvertEncoding:!0});g&&(t.url=g.href),t.unsafeUrl=n}r&&(r instanceof M&&(r=r.name),typeof r=="string"?t.dest=jA(r):f1(r)&&(t.dest=r))}},Pa=Og;Pg=new WeakSet,vf=function(A){let t=this.xref.fetch(A),i={id:A.toString(),name:null,intent:null,usage:{print:null,view:null}},s=t.get("Name");typeof s=="string"&&(i.name=jA(s));let a=t.getArray("Intent");Array.isArray(a)||(a=[a]),a.every(I=>I instanceof M)&&(i.intent=a.map(I=>I.name));let n=t.get("Usage");if(!(n instanceof F))return i;let r=i.usage,g=n.get("Print");if(g instanceof F){let I=g.get("PrintState");if(I instanceof M)switch(I.name){case"ON":case"OFF":r.print={printState:I.name}}}let o=n.get("View");if(o instanceof F){let I=o.get("ViewState");if(I instanceof M)switch(I.name){case"ON":case"OFF":r.view={viewState:I.name}}}return i},Wg=new WeakSet,qf=function(A,t){function i(o){let I=[];if(Array.isArray(o))for(let c of o)c instanceof oA&&t.has(c)&&I.push(c.toString());return I}function s(o,I=0){if(!Array.isArray(o))return null;let c=[];for(let h of o){if(h instanceof oA&&t.has(h)){r.put(h),c.push(h.toString());continue}let C=a(h,I);C&&c.push(C)}if(I>0)return c;let l=[];for(let h of t)r.has(h)||l.push(h.toString());return l.length&&c.push({name:null,order:l}),c}function a(o,I){if(++I>g)return k("parseNestedOrder - reached MAX_NESTED_LEVELS."),null;let c=n.fetchIfRef(o);if(!Array.isArray(c))return null;let l=n.fetchIfRef(c[0]);if(typeof l!="string")return null;let h=s(c.slice(1),I);return!h||!h.length?null:{name:jA(l),order:h}}let n=this.xref,r=new be,g=10;return{name:typeof A.get("Name")=="string"?jA(A.get("Name")):null,creator:typeof A.get("Creator")=="string"?jA(A.get("Creator")):null,baseState:A.get("BaseState")instanceof M?A.get("BaseState").name:null,on:i(A.get("ON")),off:i(A.get("OFF")),order:s(A.get("Order")),groups:null}};function P9(e){return e instanceof oA||e instanceof F||e instanceof KA||Array.isArray(e)}function W9(e,A){if(e instanceof F)e=e.getRawValues();else if(e instanceof KA)e=e.dict.getRawValues();else if(!Array.isArray(e))return;for(let t of e)P9(t)&&A.push(t)}var Hs=class{constructor(A,t,i){this.dict=A,this.keys=t,this.xref=i,this.refSet=null}async load(){if(this.xref.stream.isDataLoaded)return;let{keys:A,dict:t}=this;this.refSet=new be;let i=[];for(let s of A){let a=t.getRaw(s);a!==void 0&&i.push(a)}return this._walk(i)}async _walk(A){let t=[],i=[];for(;A.length;){let s=A.pop();if(s instanceof oA){if(this.refSet.has(s))continue;try{this.refSet.put(s),s=this.xref.fetch(s)}catch(a){if(!(a instanceof ge)){k(`ObjectLoader._walk - requesting all data: "${a}".`),this.refSet=null;let{manager:n}=this.xref.stream;return n.requestAllChunks()}t.push(s),i.push({begin:a.begin,end:a.end})}}if(s instanceof KA){let a=s.getBaseStreams();if(a){let n=!1;for(let r of a)r.isDataLoaded||(n=!0,i.push({begin:r.start,end:r.end}));n&&t.push(s)}}W9(s,A)}if(i.length){await this.xref.stream.manager.requestRanges(i);for(let s of t)s instanceof oA&&this.refSet.remove(s);return this._walk(t)}this.refSet=null}},eo=Symbol(),d0=Symbol(),Be=Symbol(),_i=Symbol(),Yt=Symbol(),ns=Symbol(),cr=Symbol(),Tt=Symbol(),$t=Symbol(),P=Symbol("content"),Ht=Symbol("data"),Js=Symbol(),L=Symbol("extra"),se=Symbol(),wn=Symbol(),Bc=Symbol(),Tf=Symbol(),x0=Symbol(),to=Symbol(),Wa=Symbol(),da=Symbol(),u1=Symbol(),We=Symbol(),xa=Symbol(),Ue=Symbol(),Ys=Symbol(),Ci=Symbol(),xe=Symbol(),MA=Symbol(),ue=Symbol(),ie=Symbol(),Oa=Symbol(),As=Symbol(),Qc=Symbol(),lr=Symbol(),d1=Symbol(),J0=Symbol(),rs=Symbol(),Mi=Symbol(),ma=Symbol(),di=Symbol(),pi=Symbol(),Za=Symbol(),ja=Symbol(),O9=Symbol(),de=Symbol("namespaceId"),XA=Symbol("nodeName"),qi=Symbol(),ni=Symbol(),Ec=Symbol(),xi=Symbol(),ri=Symbol(),Bt=Symbol(),Xs=Symbol(),Ti=Symbol(),Pf=Symbol("root"),ha=Symbol(),Bi=Symbol(),fc=Symbol(),Wf=Symbol(),Et=Symbol(),qt=Symbol(),Se=Symbol(),Of=Symbol(),SA=Symbol(),pa=Symbol(),ZA=Symbol(),$A=Symbol("uid"),Zt=Symbol(),me={config:{id:0,check:e=>e.startsWith("http://www.xfa.org/schema/xci/")},connectionSet:{id:1,check:e=>e.startsWith("http://www.xfa.org/schema/xfa-connection-set/")},datasets:{id:2,check:e=>e.startsWith("http://www.xfa.org/schema/xfa-data/")},form:{id:3,check:e=>e.startsWith("http://www.xfa.org/schema/xfa-form/")},localeSet:{id:4,check:e=>e.startsWith("http://www.xfa.org/schema/xfa-locale-set/")},pdf:{id:5,check:e=>e==="http://ns.adobe.com/xdp/pdf/"},signature:{id:6,check:e=>e==="http://www.w3.org/2000/09/xmldsig#"},sourceSet:{id:7,check:e=>e.startsWith("http://www.xfa.org/schema/xfa-source-set/")},stylesheet:{id:8,check:e=>e==="http://www.w3.org/1999/XSL/Transform"},template:{id:9,check:e=>e.startsWith("http://www.xfa.org/schema/xfa-template/")},xdc:{id:10,check:e=>e.startsWith("http://www.xfa.org/schema/xdc/")},xdp:{id:11,check:e=>e==="http://ns.adobe.com/xdp/"},xfdf:{id:12,check:e=>e==="http://ns.adobe.com/xfdf/"},xhtml:{id:13,check:e=>e==="http://www.w3.org/1999/xhtml"},xmpmeta:{id:14,check:e=>e==="http://ns.adobe.com/xmpmeta/"}},Z9={pt:e=>e,cm:e=>e/2.54*72,mm:e=>e/(10*2.54)*72,in:e=>e*72,px:e=>e},j9=/([+-]?\\d+\\.?\\d*)(.*)/;function io(e){return e.startsWith("\'")||e.startsWith(\'"\')?e.slice(1,-1):e}function GA({data:e,defaultValue:A,validate:t}){if(!e)return A;e=e.trim();let i=parseInt(e,10);return!isNaN(i)&&t(i)?i:A}function _r({data:e,defaultValue:A,validate:t}){if(!e)return A;e=e.trim();let i=parseFloat(e);return!isNaN(i)&&t(i)?i:A}function so({data:e,defaultValue:A,validate:t}){return e?(e=e.trim(),t(e)?e:A):A}function O(e,A){return so({data:e,defaultValue:A[0],validate:t=>A.includes(t)})}function hA(e,A="0"){if(A||(A="0"),!e)return hA(A);let t=e.trim().match(j9);if(!t)return hA(A);let[,i,s]=t,a=parseFloat(i);if(isNaN(a))return hA(A);if(a===0)return 0;let n=Z9[s];return n?n(a):a}function bE(e){if(!e)return{num:1,den:1};let A=e.trim().split(/\\s*:\\s*/).map(s=>parseFloat(s)).filter(s=>!isNaN(s));if(A.length===1&&A.push(1),A.length===0)return{num:1,den:1};let[t,i]=A;return{num:t,den:i}}function jt(e){return e?e.trim().split(/\\s+/).map(A=>({excluded:A[0]==="-",viewname:A.substring(1)})):[]}function X9(e,A=[0,0,0]){let[t,i,s]=A;if(!e)return{r:t,g:i,b:s};let a=e.trim().split(/\\s*,\\s*/).map(n=>Math.min(Math.max(0,parseInt(n.trim(),10)),255)).map(n=>isNaN(n)?0:n);return a.length<3?{r:t,g:i,b:s}:([t,i,s]=a,{r:t,g:i,b:s})}function V9(e){if(!e)return{x:-1,y:-1,width:-1,height:-1};let t=e.trim().split(/\\s*,\\s*/).map(r=>hA(r,"-1"));if(t.length<4||t[2]<0||t[3]<0)return{x:-1,y:-1,width:-1,height:-1};let[i,s,a,n]=t;return{x:i,y:s,width:a,height:n}}var dA=class{static get FAILURE(){return nA(this,"FAILURE",new dA(!1,null,null,null))}static get EMPTY(){return nA(this,"EMPTY",new dA(!0,null,null,null))}constructor(A,t,i,s){this.success=A,this.html=t,this.bbox=i,this.breakNode=s}isBreak(){return!!this.breakNode}static breakNode(A){return new dA(!1,null,null,A)}static success(A,t=null){return new dA(!0,A,t,null)}},uc=class{constructor(A){this.fonts=new Map,this.cache=new Map,this.warned=new Set,this.defaultFont=null,this.add(A)}add(A,t=null){for(let s of A)this.addPdfFont(s);for(let s of this.fonts.values())s.regular||(s.regular=s.italic||s.bold||s.bolditalic);if(!t||t.size===0)return;let i=this.fonts.get("PdfJS-Fallback-PdfJS-XFA");for(let s of t)this.fonts.set(s,i)}addPdfFont(A){var r,g,o;let t=A.cssFontInfo,i=t.fontFamily,s=this.fonts.get(i);s||(s=Object.create(null),this.fonts.set(i,s),this.defaultFont||(this.defaultFont=s));let a="",n=parseFloat(t.fontWeight);parseFloat(t.italicAngle)!==0?a=n>=700?"bolditalic":"italic":n>=700&&(a="bold"),a||((A.name.includes("Bold")||(r=A.psName)!=null&&r.includes("Bold"))&&(a="bold"),(A.name.includes("Italic")||A.name.endsWith("It")||(g=A.psName)!=null&&g.includes("Italic")||(o=A.psName)!=null&&o.endsWith("It"))&&(a+="italic")),a||(a="regular"),s[a]=A}getDefault(){return this.defaultFont}find(A,t=!0){var r,g;let i=this.fonts.get(A)||this.cache.get(A);if(i)return i;let s=/,|-|_| |bolditalic|bold|italic|regular|it/gi,a=A.replaceAll(s,"");if(i=this.fonts.get(a),i)return this.cache.set(A,i),i;a=a.toLowerCase();let n=[];for(let[o,I]of this.fonts.entries())o.replaceAll(s,"").toLowerCase().startsWith(a)&&n.push(I);if(n.length===0)for(let[,o]of this.fonts.entries())(r=o.regular.name)!=null&&r.replaceAll(s,"").toLowerCase().startsWith(a)&&n.push(o);if(n.length===0){a=a.replaceAll(/psmt|mt/gi,"");for(let[o,I]of this.fonts.entries())o.replaceAll(s,"").toLowerCase().startsWith(a)&&n.push(I)}if(n.length===0)for(let o of this.fonts.values())(g=o.regular.name)!=null&&g.replaceAll(s,"").toLowerCase().startsWith(a)&&n.push(o);return n.length>=1?(n.length!==1&&t&&k(`XFA - Too many choices to guess the correct font: ${A}`),this.cache.set(A,n[0]),n[0]):(t&&!this.warned.has(A)&&(this.warned.add(A),k(`XFA - Cannot find the font: ${A}`)),null)}};function x1(e,A){return e.posture==="italic"?e.weight==="bold"?A.bolditalic:A.italic:e.weight==="bold"?A.bold:A.regular}function _9(e,A=!1){let t=null;if(e){let n=io(e.typeface),r=e[ie].fontFinder.find(n);t=x1(e,r)}if(!t)return{lineHeight:12,lineGap:2,lineNoGap:10};let i=e.size||10,s=t.lineHeight?Math.max(A?0:1.2,t.lineHeight):1.2,a=t.lineGap===void 0?.2:t.lineGap;return{lineHeight:s*i,lineGap:a*i,lineNoGap:Math.max(1,s-a)*i}}var z9=1.02,zr=class{constructor(A,t,i,s){if(this.lineHeight=i,this.paraMargin=t||{top:0,bottom:0,left:0,right:0},!A){[this.pdfFont,this.xfaFont]=this.defaultFont(s);return}this.xfaFont={typeface:A.typeface,posture:A.posture,weight:A.weight,size:A.size,letterSpacing:A.letterSpacing};let a=s.find(A.typeface);if(!a){[this.pdfFont,this.xfaFont]=this.defaultFont(s);return}this.pdfFont=x1(A,a),this.pdfFont||([this.pdfFont,this.xfaFont]=this.defaultFont(s))}defaultFont(A){let t=A.find("Helvetica",!1)||A.find("Myriad Pro",!1)||A.find("Arial",!1)||A.getDefault();if(t!=null&&t.regular){let s=t.regular,n={typeface:s.cssFontInfo.fontFamily,posture:"normal",weight:"normal",size:10,letterSpacing:0};return[s,n]}return[null,{typeface:"Courier",posture:"normal",weight:"normal",size:10,letterSpacing:0}]}},dc=class{constructor(A,t,i,s){this.fontFinder=s,this.stack=[new zr(A,t,i,s)]}pushData(A,t,i){let s=this.stack.at(-1);for(let n of["typeface","posture","weight","size","letterSpacing"])A[n]||(A[n]=s.xfaFont[n]);for(let n of["top","bottom","left","right"])isNaN(t[n])&&(t[n]=s.paraMargin[n]);let a=new zr(A,t,i||s.lineHeight,this.fontFinder);a.pdfFont||(a.pdfFont=s.pdfFont),this.stack.push(a)}popFont(){this.stack.pop()}topFont(){return this.stack.at(-1)}},xc=class{constructor(A,t,i,s){this.glyphs=[],this.fontSelector=new dc(A,t,i,s),this.extraHeight=0}pushData(A,t,i){this.fontSelector.pushData(A,t,i)}popFont(A){return this.fontSelector.popFont()}addPara(){let A=this.fontSelector.topFont();this.extraHeight+=A.paraMargin.top+A.paraMargin.bottom}addString(A){if(!A)return;let t=this.fontSelector.topFont(),i=t.xfaFont.size;if(t.pdfFont){let s=t.xfaFont.letterSpacing,a=t.pdfFont,n=a.lineHeight||1.2,r=t.lineHeight||Math.max(1.2,n)*i,g=a.lineGap===void 0?.2:a.lineGap,o=n-g,I=Math.max(1,o)*i,c=i/1e3,l=a.defaultWidth||a.charsToGlyphs(" ")[0].width;for(let h of A.split(/[\\u2029\\n]/)){let C=a.encodeString(h).join(""),B=a.charsToGlyphs(C);for(let Q of B){let E=Q.width||l;this.glyphs.push([E*c+s,r,I,Q.unicode,!1])}this.glyphs.push([0,0,0,`\n`,!0])}this.glyphs.pop();return}for(let s of A.split(/[\\u2029\\n]/)){for(let a of s.split(""))this.glyphs.push([i,1.2*i,i,a,!1]);this.glyphs.push([0,0,0,`\n`,!0])}this.glyphs.pop()}compute(A){let t=-1,i=0,s=0,a=0,n=0,r=0,g=!1,o=!0;for(let I=0,c=this.glyphs.length;IA?(s=Math.max(s,n),n=0,a+=r,r=f,t=-1,i=0,g=!0,o=!1):(r=Math.max(f,r),i=n,n+=l,t=I);continue}if(n+l>A){a+=r,r=f,t!==-1?(I=t,s=Math.max(s,i),n=0,t=-1,i=0):(s=Math.max(s,n),n=l),g=!0,o=!1;continue}n+=l,r=Math.max(f,r)}return s=Math.max(s,n),a+=r+this.extraHeight,{width:z9*s,height:a,isBroken:g}}},DE=/^[^.[]+/,$9=/^[^\\]]+/,xt={dot:0,dotDot:1,dotHash:2,dotBracket:3,dotParen:4},Zf=new Map([["$data",(e,A)=>e.datasets?e.datasets.data:e],["$record",(e,A)=>(e.datasets?e.datasets.data:e)[Ue]()[0]],["$template",(e,A)=>e.template],["$connectionSet",(e,A)=>e.connectionSet],["$form",(e,A)=>e.form],["$layout",(e,A)=>e.layout],["$host",(e,A)=>e.host],["$dataWindow",(e,A)=>e.dataWindow],["$event",(e,A)=>e.event],["!",(e,A)=>e.datasets],["$xfa",(e,A)=>e],["xfa",(e,A)=>e],["$",(e,A)=>A]]),kE=new WeakMap;function Ax(e){return e=e.trim(),e==="*"?1/0:parseInt(e,10)||0}function jf(e,A,t=!0){let i=e.match(DE);if(!i)return null;let[s]=i,a=[{name:s,cacheName:"."+s,index:0,js:null,formCalc:null,operator:xt.dot}],n=s.length;for(;n0&&C.push(Q)}if(C.length===0&&!g&&r===0){if(A=A[MA](),!A)return null;r=-1,e=[A];continue}e=isFinite(h)?C.filter(B=>hB[h]):C.flat()}return e.length===0?null:e}function ex(e,A,t){let i=jf(t);if(!i||i.some(n=>n.operator===xt.dotDot))return null;let s=Zf.get(i[0].name),a=0;s?(e=s(e,A),a=1):e=A||e;for(let n=i.length;aA[Se]()).join("")}get[P0](){let A=Object.getPrototypeOf(this);if(!A._attributes){let t=A._attributes=new Set;for(let i of Object.getOwnPropertyNames(this)){if(this[i]===null||this[i]instanceof J||this[i]instanceof b)break;t.add(i)}}return nA(this,P0,A._attributes)}[Mi](A){let t=this;for(;t;){if(t===A)return!0;t=t[MA]()}return!1}[MA](){return this[Rt]}[xe](){return this[MA]()}[Ue](A=null){return A?this[A]:this[vA]}[Js](){let A=Object.create(null);this[P]&&(A.$content=this[P]);for(let t of Object.getOwnPropertyNames(this)){let i=this[t];i!==null&&(i instanceof J?A[t]=i[Js]():i instanceof b?i.isEmpty()||(A[t]=i.dump()):A[t]=i)}return A}[ZA](){return null}[SA](){return dA.EMPTY}*[Ys](){for(let A of this[Ue]())yield A}*[SE](A,t){for(let i of this[Ys]())if(!A||t===A.has(i[XA])){let s=this[x0](),a=i[SA](s);a.success||(this[L].failingNode=i),yield a}}[wn](){return null}[d0](A,t){this[L].children.push(A)}[x0](){}[_i]({filter:A=null,include:t=!0}){if(!this[L].generator)this[L].generator=this[SE](A,t);else{let i=this[x0](),s=this[L].failingNode[SA](i);if(!s.success)return s;s.html&&this[d0](s.html,s.bbox),delete this[L].failingNode}for(;;){let i=this[L].generator.next();if(i.done)break;let s=i.value;if(!s.success)return s;s.html&&this[d0](s.html,s.bbox)}return this[L].generator=null,dA.EMPTY}[Wf](A){this[ca]=new Set(Object.keys(A))}[FE](A){let t=this[P0],i=this[ca];return[...A].filter(s=>t.has(s)&&!i.has(s))}[ha](A,t=new Set){for(let i of this[vA])i[Ia](A,t)}[Ia](A,t){let i=this[Go](A,t);i?this[Zn](i,A,t):this[ha](A,t)}[Go](A,t){let{use:i,usehref:s}=this;if(!i&&!s)return null;let a=null,n=null,r=null,g=i;if(s?(g=s,s.startsWith("#som(")&&s.endsWith(")")?n=s.slice(5,-1):s.startsWith(".#som(")&&s.endsWith(")")?n=s.slice(6,-1):s.startsWith("#")?r=s.slice(1):s.startsWith(".#")&&(r=s.slice(2))):i.startsWith("#")?r=i.slice(1):n=i,this.use=this.usehref="",r?a=A.get(r):(a=Ni(A.get(Pf),this,n,!0,!1),a&&(a=a[0])),!a)return k(`XFA - Invalid prototype reference: ${g}.`),null;if(a[XA]!==this[XA])return k(`XFA - Incompatible prototype: ${a[XA]} !== ${this[XA]}.`),null;if(t.has(a))return k("XFA - Cycle detected in prototypes use."),null;t.add(a);let o=a[Go](A,t);return o&&a[Zn](o,A,t),a[ha](A,t),t.delete(a),a}[Zn](A,t,i){if(i.has(A)){k("XFA - Cycle detected in prototypes use.");return}!this[P]&&A[P]&&(this[P]=A[P]),new Set(i).add(A);for(let a of this[FE](A[ca]))this[a]=A[a],this[ca]&&this[ca].add(a);for(let a of Object.getOwnPropertyNames(this)){if(this[P0].has(a))continue;let n=this[a],r=A[a];if(n instanceof b){for(let g of n[vA])g[Ia](t,i);for(let g=n[vA].length,o=r[vA].length;gJ[Ro](t)):typeof A=="object"&&A!==null?Object.assign({},A):A}[Tt](){let A=Object.create(Object.getPrototypeOf(this));for(let t of Object.getOwnPropertySymbols(this))try{A[t]=this[t]}catch(i){nA(A,t,this[t])}A[$A]=`${A[XA]}${mc++}`,A[vA]=[];for(let t of Object.getOwnPropertyNames(this)){if(this[P0].has(t)){A[t]=J[Ro](this[t]);continue}let i=this[t];A[t]=i instanceof b?new b(i[Ca]):null}for(let t of this[vA]){let i=t[XA],s=t[Tt]();A[vA].push(s),s[Rt]=A,A[i]===null?A[i]=s:A[i][vA].push(s)}return A}[Ue](A=null){return A?this[vA].filter(t=>t[XA]===A):this[vA]}[to](A){return this[A]}[Wa](A,t,i=!0){return Array.from(this[da](A,t,i))}*[da](A,t,i=!0){if(A==="parent"){yield this[Rt];return}for(let s of this[vA])s[XA]===A&&(yield s),s.name===A&&(yield s),(t||s[Za]())&&(yield*s[da](A,t,!1));i&&this[P0].has(A)&&(yield new Xa(this,A,this[A]))}},b=class{constructor(A=1/0){this[Ca]=A,this[vA]=[]}get isXFAObject(){return!1}get isXFAObjectArray(){return!0}push(A){return this[vA].length<=this[Ca]?(this[vA].push(A),!0):(k(`XFA - node "${A[XA]}" accepts no more than ${this[Ca]} children`),!1)}isEmpty(){return this[vA].length===0}dump(){return this[vA].length===1?this[vA][0][Js]():this[vA].map(A=>A[Js]())}[Tt](){let A=new b(this[Ca]);return A[vA]=this[vA].map(t=>t[Tt]()),A}get children(){return this[vA]}clear(){this[vA].length=0}},Xa=class{constructor(A,t,i){this[Rt]=A,this[XA]=t,this[P]=i,this[$t]=!1,this[$A]=`attribute${mc++}`}[MA](){return this[Rt]}[rs](){return!0}[u1](){return this[P].trim()}[Et](A){A=A.value||"",this[P]=A.toString()}[Se](){return this[P]}[Mi](A){return this[Rt]===A||this[Rt][Mi](A)}},Jt=class extends J{constructor(A,t,i={}){if(super(A,t),this[P]="",this[Si]=null,t!=="#text"){let s=new Map;this[a0]=s;for(let[a,n]of Object.entries(i))s.set(a,new Xa(this,a,n));if(i.hasOwnProperty(qi)){let a=i[qi].xfa.dataNode;a!==void 0&&(a==="dataGroup"?this[Si]=!1:a==="dataValue"&&(this[Si]=!0))}}this[$t]=!1}[pa](A){let t=this[XA];if(t==="#text"){A.push(ls(this[P]));return}let i=Yo(t),s=this[de]===Xf?"xfa:":"";A.push(`<${s}${i}`);for(let[a,n]of this[a0].entries()){let r=Yo(a);A.push(` ${r}="${ls(n[P])}"`)}if(this[Si]!==null&&(this[Si]?A.push(\' xfa:dataNode="dataValue"\'):A.push(\' xfa:dataNode="dataGroup"\')),!this[P]&&this[vA].length===0){A.push("/>");return}if(A.push(">"),this[P])typeof this[P]=="string"?A.push(ls(this[P])):this[P][pa](A);else for(let a of this[vA])a[pa](A);A.push(``)}[ni](A){if(this[P]){let t=new Jt(this[de],"#text");this[Be](t),t[P]=this[P],this[P]=""}return this[Be](A),!0}[xi](A){this[P]+=A}[se](){if(this[P]&&this[vA].length>0){let A=new Jt(this[de],"#text");this[Be](A),A[P]=this[P],delete this[P]}}[SA](){return this[XA]==="#text"?dA.success({name:"#text",value:this[P]}):dA.EMPTY}[Ue](A=null){return A?this[vA].filter(t=>t[XA]===A):this[vA]}[Tf](){return this[a0]}[to](A){let t=this[a0].get(A);return t!==void 0?t:this[Ue](A)}*[da](A,t){let i=this[a0].get(A);i&&(yield i);for(let s of this[vA])s[XA]===A&&(yield s),t&&(yield*s[da](A,t))}*[Bc](A,t){let i=this[a0].get(A);i&&(!t||!i[$t])&&(yield i);for(let s of this[vA])yield*s[Bc](A,t)}*[xa](A,t,i){for(let s of this[vA])s[XA]===A&&(!i||!s[$t])&&(yield s),t&&(yield*s[xa](A,t,i))}[rs](){return this[Si]===null?this[vA].length===0||this[vA][0][de]===me.xhtml.id:this[Si]}[u1](){return this[Si]===null?this[vA].length===0?this[P].trim():this[vA][0][de]===me.xhtml.id?this[vA][0][Se]().trim():null:this[P].trim()}[Et](A){A=A.value||"",this[P]=A.toString()}[Js](A=!1){let t=Object.create(null);A&&(t.$ns=this[de]),this[P]&&(t.$content=this[P]),t.$name=this[XA],t.children=[];for(let i of this[vA])t.children.push(i[Js](A));t.attributes=Object.create(null);for(let[i,s]of this[a0])t.attributes[i]=s[P];return t}},ce=class extends J{constructor(A,t){super(A,t),this[P]=""}[xi](A){this[P]+=A}[se](){}},_A=class extends ce{constructor(A,t,i){super(A,t),this[jn]=i}[se](){this[P]=so({data:this[P],defaultValue:this[jn][0],validate:A=>this[jn].includes(A)})}[Yt](A){super[Yt](A),delete this[jn]}},qA=class extends ce{[se](){this[P]=this[P].trim()}},yt=class extends ce{constructor(A,t,i,s){super(A,t),this[No]=i,this[Mo]=s}[se](){this[P]=GA({data:this[P],defaultValue:this[No],validate:this[Mo]})}[Yt](A){super[Yt](A),delete this[No],delete this[Mo]}},pe=class extends yt{constructor(A,t){super(A,t,0,i=>i===1)}},$r=class extends yt{constructor(A,t){super(A,t,1,i=>i===0)}};function NA(e){return typeof e=="string"?"0px":Number.isInteger(e)?`${e}px`:`${e.toFixed(2)}px`}var RE={anchorType(e,A){let t=e[xe]();if(!(!t||t.layout&&t.layout!=="position"))switch("transform"in A||(A.transform=""),e.anchorType){case"bottomCenter":A.transform+="translate(-50%, -100%)";break;case"bottomLeft":A.transform+="translate(0,-100%)";break;case"bottomRight":A.transform+="translate(-100%,-100%)";break;case"middleCenter":A.transform+="translate(-50%,-50%)";break;case"middleLeft":A.transform+="translate(0,-50%)";break;case"middleRight":A.transform+="translate(-100%,-50%)";break;case"topCenter":A.transform+="translate(-50%,0)";break;case"topRight":A.transform+="translate(-100%,0)";break}},dimensions(e,A){var a;let t=e[xe](),i=e.w,s=e.h;if((a=t.layout)!=null&&a.includes("row")){let n=t[L],r=e.colSpan,g;r===-1?(g=n.columnWidths.slice(n.currentColumn).reduce((o,I)=>o+I,0),n.currentColumn=0):(g=n.columnWidths.slice(n.currentColumn,n.currentColumn+r).reduce((o,I)=>o+I,0),n.currentColumn=(n.currentColumn+e.colSpan)%n.columnWidths.length),isNaN(g)||(i=e.w=g)}A.width=i!==""?NA(i):"auto",A.height=s!==""?NA(s):"auto"},position(e,A){let t=e[xe]();t!=null&&t.layout&&t.layout!=="position"||(A.position="absolute",A.left=NA(e.x),A.top=NA(e.y))},rotate(e,A){e.rotate&&("transform"in A||(A.transform=""),A.transform+=`rotate(-${e.rotate}deg)`,A.transformOrigin="top left")},presence(e,A){switch(e.presence){case"invisible":A.visibility="hidden";break;case"hidden":case"inactive":A.display="none";break}},hAlign(e,A){if(e[XA]==="para")switch(e.hAlign){case"justifyAll":A.textAlign="justify-all";break;case"radix":A.textAlign="left";break;default:A.textAlign=e.hAlign}else switch(e.hAlign){case"left":A.alignSelf="start";break;case"center":A.alignSelf="center";break;case"right":A.alignSelf="end";break}},margin(e,A){e.margin&&(A.margin=e.margin[ZA]().margin)}};function Vf(e,A){e[xe]().layout==="position"&&(e.minW>0&&(A.minWidth=NA(e.minW)),e.maxW>0&&(A.maxWidth=NA(e.maxW)),e.minH>0&&(A.minHeight=NA(e.minH)),e.maxH>0&&(A.maxHeight=NA(e.maxH)))}function NE(e,A,t,i,s,a){let n=new xc(A,t,i,s);return typeof e=="string"?n.addString(e):e[ri](n),n.compute(a)}function m1(e,A){let t=null,i=null,s=!1;if((!e.w||!e.h)&&e.value){let a=0,n=0;e.margin&&(a=e.margin.leftInset+e.margin.rightInset,n=e.margin.topInset+e.margin.bottomInset);let r=null,g=null;e.para&&(g=Object.create(null),r=e.para.lineHeight===""?null:e.para.lineHeight,g.top=e.para.spaceAbove===""?0:e.para.spaceAbove,g.bottom=e.para.spaceBelow===""?0:e.para.spaceBelow,g.left=e.para.marginLeft===""?0:e.para.marginLeft,g.right=e.para.marginRight===""?0:e.para.marginRight);let o=e.font;if(!o){let l=e[ue](),h=e[MA]();for(;h&&h!==l;){if(h.font){o=h.font;break}h=h[MA]()}}let I=(e.w||A.width)-a,c=e[ie].fontFinder;if(e.value.exData&&e.value.exData[P]&&e.value.exData.contentType==="text/html"){let l=NE(e.value.exData[P],o,g,r,c,I);i=l.width,t=l.height,s=l.isBroken}else{let l=e.value[Se]();if(l){let h=NE(l,o,g,r,c,I);i=h.width,t=h.height,s=h.isBroken}}i!==null&&!e.w&&(i+=a),t!==null&&!e.h&&(t+=n)}return{w:i,h:t,isBroken:s}}function _f(e,A,t){let i;if(e.w!==""&&e.h!=="")i=[e.x,e.y,e.w,e.h];else{if(!t)return null;let s=e.w;if(s===""){if(e.maxW===0){let n=e[xe]();s=n.layout==="position"&&n.w!==""?0:e.minW}else s=Math.min(e.maxW,t.width);A.attributes.style.width=NA(s)}let a=e.h;if(a===""){if(e.maxH===0){let n=e[xe]();a=n.layout==="position"&&n.h!==""?0:e.minH}else a=Math.min(e.maxH,t.height);A.attributes.style.height=NA(a)}i=[e.x,e.y,s,a]}return i}function ao(e){var t;let A=e[xe]();if((t=A.layout)!=null&&t.includes("row")){let i=A[L],s=e.colSpan,a;s===-1?a=i.columnWidths.slice(i.currentColumn).reduce((n,r)=>n+r,0):a=i.columnWidths.slice(i.currentColumn,i.currentColumn+s).reduce((n,r)=>n+r,0),isNaN(a)||(e.w=a)}A.layout&&A.layout!=="position"&&(e.x=e.y=0),e.layout==="table"&&e.w===""&&Array.isArray(e.columnWidths)&&(e.w=e.columnWidths.reduce((i,s)=>i+s,0))}function zf(e){switch(e.layout){case"position":return"xfaPosition";case"lr-tb":return"xfaLrTb";case"rl-row":return"xfaRlRow";case"rl-tb":return"xfaRlTb";case"row":return"xfaRow";case"table":return"xfaTable";case"tb":return"xfaTb";default:return"xfaPosition"}}function lt(e,...A){let t=Object.create(null);for(let i of A){let s=e[i];if(s!==null){if(RE.hasOwnProperty(i)){RE[i](e,t);continue}if(s instanceof J){let a=s[ZA]();a?Object.assign(t,a):k(`(DEBUG) - XFA - style for ${i} not implemented yet`)}}}return t}function m0(e,A){let{attributes:t}=A,{style:i}=t,s={name:"div",attributes:{class:["xfaWrapper"],style:Object.create(null)},children:[]};if(t.class.push("xfaWrapped"),e.border){let{widths:a,insets:n}=e.border[L],r,g,o=n[0],I=n[3],c=n[0]+n[2],l=n[1]+n[3];switch(e.border.hand){case"even":o-=a[0]/2,I-=a[3]/2,r=`calc(100% + ${(a[1]+a[3])/2-l}px)`,g=`calc(100% + ${(a[0]+a[2])/2-c}px)`;break;case"left":o-=a[0],I-=a[3],r=`calc(100% + ${a[1]+a[3]-l}px)`,g=`calc(100% + ${a[0]+a[2]-c}px)`;break;case"right":r=l?`calc(100% - ${l}px)`:"100%",g=c?`calc(100% - ${c}px)`:"100%";break}let h=["xfaBorder"];Vs(e.border)&&h.push("xfaPrintOnly");let C={name:"div",attributes:{class:h,style:{top:`${o}px`,left:`${I}px`,width:r,height:g}},children:[]};for(let B of["border","borderWidth","borderColor","borderRadius","borderStyle"])i[B]!==void 0&&(C.attributes.style[B]=i[B],delete i[B]);s.children.push(C,A)}else s.children.push(A);for(let a of["background","backgroundClip","top","left","width","height","minWidth","minHeight","maxWidth","maxHeight","transform","transformOrigin","visibility"])i[a]!==void 0&&(s.attributes.style[a]=i[a],delete i[a]);return s.attributes.style.position=i.position==="absolute"?"absolute":"relative",delete i.position,i.alignSelf&&(s.attributes.style.alignSelf=i.alignSelf,delete i.alignSelf),s}function $f(e){let A=hA(e.textIndent,"0px");if(A>=0)return;let i="padding"+((e.textAlign==="right"?"right":"left")==="left"?"Left":"Right"),s=hA(e[i],"0px");e[i]=`${s-A}px`}function p1(e,A){switch(e.access){case"nonInteractive":A.push("xfaNonInteractive");break;case"readOnly":A.push("xfaReadOnly");break;case"protected":A.push("xfaDisabled");break}}function Vs(e){return e.relevant.length>0&&!e.relevant[0].excluded&&e.relevant[0].viewname==="print"}function Au(e){let A=e[ue]()[L].paraStack;return A.length?A.at(-1):null}function eu(e,A,t){var i;if((i=t.attributes.class)!=null&&i.includes("xfaRich")){A&&(e.h===""&&(A.height="auto"),e.w===""&&(A.width="auto"));let s=Au(e);if(s){let a=t.attributes.style;switch(a.display="flex",a.flexDirection="column",s.vAlign){case"top":a.justifyContent="start";break;case"bottom":a.justifyContent="end";break;case"middle":a.justifyContent="center";break}let n=s[ZA]();for(let[r,g]of Object.entries(n))r in a||(a[r]=g)}}}function tu(e,A,t,i){if(!t){delete i.fontFamily;return}let s=io(e.typeface);i.fontFamily=`"${s}"`;let a=t.find(s);if(a){let{fontFamily:n}=a.regular.cssFontInfo;n!==s&&(i.fontFamily=`"${n}"`);let r=Au(A);if(r&&r.lineHeight!==""||i.lineHeight)return;let g=x1(e,a);g&&(i.lineHeight=Math.max(1.2,g.lineHeight))}}function iu(e){let A=Qr(e,null,{addDefaultProtocol:!0,tryConvertEncoding:!0});return A?A.href:null}function su(e,A){return{name:"div",attributes:{class:[e.layout==="lr-tb"?"xfaLr":"xfaRl"]},children:A}}function au(e){if(!e[L])return null;let t={name:"div",attributes:e[L].attributes,children:e[L].children};if(e[L].failingNode){let i=e[L].failingNode[wn]();i&&(e.layout.endsWith("-tb")?t.children.push(su(e,[i])):t.children.push(i))}return t.children.length===0?null:t}function nu(e,A,t){let i=e[L],s=i.availableSpace,[a,n,r,g]=t;switch(e.layout){case"position":{i.width=Math.max(i.width,a+r),i.height=Math.max(i.height,n+g),i.children.push(A);break}case"lr-tb":case"rl-tb":(!i.line||i.attempt===1)&&(i.line=su(e,[]),i.children.push(i.line),i.numberInLine=0),i.numberInLine+=1,i.line.children.push(A),i.attempt===0?(i.currentWidth+=r,i.height=Math.max(i.height,i.prevHeight+g)):(i.currentWidth=r,i.prevHeight=i.height,i.height+=g,i.attempt=0),i.width=Math.max(i.width,i.currentWidth);break;case"rl-row":case"row":{i.children.push(A),i.width+=r,i.height=Math.max(i.height,g);let o=NA(i.height);for(let I of i.children)I.attributes.style.height=o;break}case"table":{i.width=Math.min(s.width,Math.max(i.width,r)),i.height+=g,i.children.push(A);break}case"tb":{i.width=Math.min(s.width,Math.max(i.width,r)),i.height+=g,i.children.push(A);break}}}function ru(e){let A=e[L].availableSpace,t=e.margin?e.margin.topInset+e.margin.bottomInset:0,i=e.margin?e.margin.leftInset+e.margin.rightInset:0;switch(e.layout){case"lr-tb":case"rl-tb":return e[L].attempt===0?{width:A.width-i-e[L].currentWidth,height:A.height-t-e[L].prevHeight}:{width:A.width-i,height:A.height-t-e[L].height};case"rl-row":case"row":return{width:e[L].columnWidths.slice(e[L].currentColumn).reduce((a,n)=>a+n),height:A.height-i};case"table":case"tb":return{width:A.width-i,height:A.height-t-e[L].height};case"position":default:return A}}function tx(e){let A=e.w===""?NaN:e.w,t=e.h===""?NaN:e.h,[i,s]=[0,0];switch(e.anchorType||""){case"bottomCenter":[i,s]=[A/2,t];break;case"bottomLeft":[i,s]=[0,t];break;case"bottomRight":[i,s]=[A,t];break;case"middleCenter":[i,s]=[A/2,t/2];break;case"middleLeft":[i,s]=[0,t/2];break;case"middleRight":[i,s]=[A,t/2];break;case"topCenter":[i,s]=[A/2,0];break;case"topRight":[i,s]=[A,0];break}let a,n;switch(e.rotate||0){case 0:[a,n]=[-i,-s];break;case 90:[a,n]=[-s,i],[A,t]=[t,-A];break;case 180:[a,n]=[i,s],[A,t]=[-A,-t];break;case 270:[a,n]=[s,-i],[A,t]=[-t,A];break}return[e.x+a+Math.min(0,A),e.y+n+Math.min(0,t),Math.abs(A),Math.abs(t)]}function no(e,A){var g;if(e[ue]()[L].firstUnsplittable===null||e.w===0||e.h===0)return!0;let t=2,i=e[xe](),s=((g=i[L])==null?void 0:g.attempt)||0,[,a,n,r]=tx(e);switch(i.layout){case"lr-tb":case"rl-tb":return s===0?e[ue]()[L].noLayoutFailure?e.w!==""?Math.round(n-A.width)<=t:A.width>t:e.h!==""&&Math.round(r-A.height)>t?!1:e.w!==""?Math.round(n-A.width)<=t?!0:i[L].numberInLine===0?A.height>t:!1:A.width>t:e[ue]()[L].noLayoutFailure?!0:e.h!==""&&Math.round(r-A.height)>t?!1:e.w===""||Math.round(n-A.width)<=t?A.height>t:i[pi]()?!1:A.height>t;case"table":case"tb":return e[ue]()[L].noLayoutFailure?!0:e.h!==""&&!e[di]()?Math.round(r-A.height)<=t:e.w===""||Math.round(n-A.width)<=t?A.height>t:i[pi]()?!1:A.height>t;case"position":if(e[ue]()[L].noLayoutFailure||e.h===""||Math.round(r+a-A.height)<=t)return!0;let o=e[ue]()[L].currentContentArea;return r+a>o.h;case"rl-row":case"row":return e[ue]()[L].noLayoutFailure?!0:e.h!==""?Math.round(r-A.height)<=t:!0;default:return!0}}var eA=me.template.id,p0="http://www.w3.org/2000/svg",Ag=2,ix=3,sx=5e3,ax=/^H(\\d+)$/,nx=new Set(["image/gif","image/jpeg","image/jpg","image/pjpeg","image/png","image/apng","image/x-png","image/bmp","image/x-ms-bmp","image/tiff","image/tif","application/octet-stream"]),rx=[[[66,77],"image/bmp"],[[255,216,255],"image/jpeg"],[[73,73,42,0],"image/tiff"],[[77,77,0,42],"image/tiff"],[[71,73,70,56,57,97],"image/gif"],[[137,80,78,71,13,10,26,10],"image/png"]];function GE(e){if(!e||!e.border)return{w:0,h:0};let A=e.border[We]();return A?{w:A.widths[0]+A.widths[2]+A.insets[0]+A.insets[2],h:A.widths[1]+A.widths[3]+A.insets[1]+A.insets[3]}:{w:0,h:0}}function w1(e){return e.margin&&(e.margin.topInset||e.margin.rightInset||e.margin.bottomInset||e.margin.leftInset)}function y1(e,A){if(!e.value){let t=new an({});e[Be](t),e.value=t}e.value[Et](A)}function*b1(e){for(let A of e[Ue]()){if(A instanceof en){yield*A[Ys]();continue}yield A}}function yn(e){var A;return((A=e.validate)==null?void 0:A.nullTest)==="error"}function ro(e){for(;e;){if(!e.traversal){e[qt]=e[MA]()[qt];return}if(e[qt])return;let A=null;for(let s of e.traversal[Ue]())if(s.operation==="next"){A=s;break}if(!A||!A.ref){e[qt]=e[MA]()[qt];return}let t=e[ue]();e[qt]=++t[qt];let i=t[Bi](A.ref,e);if(!i)return;e=i[0]}}function go(e,A){var i;let t=e.assist;if(t){let s=t[SA]();s&&(A.title=s);let n=t.role.match(ax);if(n){let r="heading",g=n[1];A.role=r,A["aria-level"]=g}}if(e.layout==="table")A.role="table";else if(e.layout==="row")A.role="row";else{let s=e[MA]();s.layout==="row"&&(A.role=((i=s.assist)==null?void 0:i.role)==="TH"?"columnheader":"cell")}}function N0(e){if(!e.assist)return null;let A=e.assist;return A.speak&&A.speak[P]!==""?A.speak[P]:A.toolTip?A.toolTip[P]:null}function A0(e){return dA.success({name:"div",attributes:{class:["xfaRich"],style:Object.create(null)},children:[{name:"span",attributes:{style:Object.create(null)},value:e}]})}function oo(e){let A=e[ue]();A[L].firstUnsplittable===null&&(A[L].firstUnsplittable=e,A[L].noLayoutFailure=!0)}function Io(e){let A=e[ue]();A[L].firstUnsplittable===e&&(A[L].noLayoutFailure=!1)}function UE(e){if(e[L]||(e[L]=Object.create(null),e.targetType==="auto"))return!1;let A=e[ue](),t=null;if(e.target){if(t=A[Bi](e.target,e[MA]()),!t)return!1;t=t[0]}let{currentPageArea:i,currentContentArea:s}=A[L];if(e.targetType==="pageArea")return t instanceof zi||(t=null),e.startNew?(e[L].target=t||i,!0):t&&t!==i?(e[L].target=t,!0):!1;t instanceof _a||(t=null);let a=t&&t[MA](),n,r=a;if(e.startNew)if(t){let g=a.contentArea.children,o=g.indexOf(s),I=g.indexOf(t);o!==-1&&oe,i[L].noLayoutFailure=!0;let n=A[SA](t);e[d0](n.html,n.bbox),i[L].noLayoutFailure=s,A[xe]=a}var pc=class extends qA{constructor(A){super(eA,"appearanceFilter"),this.id=A.id||"",this.type=O(A.type,["optional","required"]),this.use=A.use||"",this.usehref=A.usehref||""}},eg=class extends J{constructor(A){super(eA,"arc",!0),this.circular=GA({data:A.circular,defaultValue:0,validate:t=>t===1}),this.hand=O(A.hand,["even","left","right"]),this.id=A.id||"",this.startAngle=_r({data:A.startAngle,defaultValue:0,validate:t=>!0}),this.sweepAngle=_r({data:A.sweepAngle,defaultValue:360,validate:t=>!0}),this.use=A.use||"",this.usehref=A.usehref||"",this.edge=null,this.fill=null}[SA](){var g;let A=this.edge||new G0({}),t=A[ZA](),i=Object.create(null);((g=this.fill)==null?void 0:g.presence)==="visible"?Object.assign(i,this.fill[ZA]()):i.fill="transparent",i.strokeWidth=NA(A.presence==="visible"?A.thickness:0),i.stroke=t.color;let s,a={xmlns:p0,style:{width:"100%",height:"100%",overflow:"visible"}};if(this.sweepAngle===360)s={name:"ellipse",attributes:{xmlns:p0,cx:"50%",cy:"50%",rx:"50%",ry:"50%",style:i}};else{let o=this.startAngle*Math.PI/180,I=this.sweepAngle*Math.PI/180,c=this.sweepAngle>180?1:0,[l,h,C,B]=[50*(1+Math.cos(o)),50*(1-Math.sin(o)),50*(1+Math.cos(o+I)),50*(1-Math.sin(o+I))];s={name:"path",attributes:{xmlns:p0,d:`M ${l} ${h} A 50 50 0 ${c} 0 ${C} ${B}`,vectorEffect:"non-scaling-stroke",style:i}},Object.assign(a,{viewBox:"0 0 100 100",preserveAspectRatio:"none"})}let n={name:"svg",children:[s],attributes:a},r=this[MA]()[MA]();return w1(r)?dA.success({name:"div",attributes:{style:{display:"inline",width:"100%",height:"100%"}},children:[n]}):(n.attributes.style.position="absolute",dA.success(n))}},wc=class extends J{constructor(A){super(eA,"area",!0),this.colSpan=GA({data:A.colSpan,defaultValue:1,validate:t=>t>=1||t===-1}),this.id=A.id||"",this.name=A.name||"",this.relevant=jt(A.relevant),this.use=A.use||"",this.usehref=A.usehref||"",this.x=hA(A.x,"0pt"),this.y=hA(A.y,"0pt"),this.desc=null,this.extras=null,this.area=new b,this.draw=new b,this.exObject=new b,this.exclGroup=new b,this.field=new b,this.subform=new b,this.subformSet=new b}*[Ys](){yield*b1(this)}[Za](){return!0}[J0](){return!0}[d0](A,t){let[i,s,a,n]=t;this[L].width=Math.max(this[L].width,i+a),this[L].height=Math.max(this[L].height,s+n),this[L].children.push(A)}[x0](){return this[L].availableSpace}[SA](A){let t=lt(this,"position"),i={style:t,id:this[$A],class:["xfaArea"]};Vs(this)&&i.class.push("xfaPrintOnly"),this.name&&(i.xfaName=this.name);let s=[];this[L]={children:s,width:0,height:0,availableSpace:A};let a=this[_i]({filter:new Set(["area","draw","field","exclGroup","subform","subformSet"]),include:!0});if(!a.success)return a.isBreak()?a:(delete this[L],dA.FAILURE);t.width=NA(this[L].width),t.height=NA(this[L].height);let n={name:"div",attributes:i,children:s},r=[this.x,this.y,this[L].width,this[L].height];return delete this[L],dA.success(n,r)}},yc=class extends J{constructor(A){super(eA,"assist",!0),this.id=A.id||"",this.role=A.role||"",this.use=A.use||"",this.usehref=A.usehref||"",this.speak=null,this.toolTip=null}[SA](){var A;return((A=this.toolTip)==null?void 0:A[P])||null}},bc=class extends J{constructor(A){super(eA,"barcode",!0),this.charEncoding=so({data:A.charEncoding?A.charEncoding.toLowerCase():"",defaultValue:"",validate:t=>["utf-8","big-five","fontspecific","gbk","gb-18030","gb-2312","ksc-5601","none","shift-jis","ucs-2","utf-16"].includes(t)||t.match(/iso-8859-\\d{2}/)}),this.checksum=O(A.checksum,["none","1mod10","1mod10_1mod11","2mod10","auto"]),this.dataColumnCount=GA({data:A.dataColumnCount,defaultValue:-1,validate:t=>t>=0}),this.dataLength=GA({data:A.dataLength,defaultValue:-1,validate:t=>t>=0}),this.dataPrep=O(A.dataPrep,["none","flateCompress"]),this.dataRowCount=GA({data:A.dataRowCount,defaultValue:-1,validate:t=>t>=0}),this.endChar=A.endChar||"",this.errorCorrectionLevel=GA({data:A.errorCorrectionLevel,defaultValue:-1,validate:t=>t>=0&&t<=8}),this.id=A.id||"",this.moduleHeight=hA(A.moduleHeight,"5mm"),this.moduleWidth=hA(A.moduleWidth,"0.25mm"),this.printCheckDigit=GA({data:A.printCheckDigit,defaultValue:0,validate:t=>t===1}),this.rowColumnRatio=bE(A.rowColumnRatio),this.startChar=A.startChar||"",this.textLocation=O(A.textLocation,["below","above","aboveEmbedded","belowEmbedded","none"]),this.truncate=GA({data:A.truncate,defaultValue:0,validate:t=>t===1}),this.type=O(A.type?A.type.toLowerCase():"",["aztec","codabar","code2of5industrial","code2of5interleaved","code2of5matrix","code2of5standard","code3of9","code3of9extended","code11","code49","code93","code128","code128a","code128b","code128c","code128sscc","datamatrix","ean8","ean8add2","ean8add5","ean13","ean13add2","ean13add5","ean13pwcd","fim","logmars","maxicode","msi","pdf417","pdf417macro","plessey","postauscust2","postauscust3","postausreplypaid","postausstandard","postukrm4scc","postusdpbc","postusimb","postusstandard","postus5zip","qrcode","rfid","rss14","rss14expanded","rss14limited","rss14stacked","rss14stackedomni","rss14truncated","telepen","ucc128","ucc128random","ucc128sscc","upca","upcaadd2","upcaadd5","upcapwcd","upce","upceadd2","upceadd5","upcean2","upcean5","upsmaxicode"]),this.upsMode=O(A.upsMode,["usCarrier","internationalCarrier","secureSymbol","standardSymbol"]),this.use=A.use||"",this.usehref=A.usehref||"",this.wideNarrowRatio=bE(A.wideNarrowRatio),this.encrypt=null,this.extras=null}},Dc=class extends J{constructor(A){super(eA,"bind",!0),this.match=O(A.match,["once","dataRef","global","none"]),this.ref=A.ref||"",this.picture=null}},Va=class extends J{constructor(A){super(eA,"bindItems"),this.connection=A.connection||"",this.labelRef=A.labelRef||"",this.ref=A.ref||"",this.valueRef=A.valueRef||""}},kc=class extends J{constructor(A){super(eA,"bookend"),this.id=A.id||"",this.leader=A.leader||"",this.trailer=A.trailer||"",this.use=A.use||"",this.usehref=A.usehref||""}},Sc=class extends pe{constructor(A){super(eA,"boolean"),this.id=A.id||"",this.name=A.name||"",this.use=A.use||"",this.usehref=A.usehref||""}[SA](A){return A0(this[P]===1?"1":"0")}},tg=class extends J{constructor(A){super(eA,"border",!0),this.break=O(A.break,["close","open"]),this.hand=O(A.hand,["even","left","right"]),this.id=A.id||"",this.presence=O(A.presence,["visible","hidden","inactive","invisible"]),this.relevant=jt(A.relevant),this.use=A.use||"",this.usehref=A.usehref||"",this.corner=new b(4),this.edge=new b(4),this.extras=null,this.fill=null,this.margin=null}[We](){if(!this[L]){let A=this.edge.children.slice();if(A.length<4){let s=A.at(-1)||new G0({});for(let a=A.length;a<4;a++)A.push(s)}let t=A.map(s=>s.thickness),i=[0,0,0,0];this.margin&&(i[0]=this.margin.topInset,i[1]=this.margin.rightInset,i[2]=this.margin.bottomInset,i[3]=this.margin.leftInset),this[L]={widths:t,insets:i,edges:A}}return this[L]}[ZA](){var s;let{edges:A}=this[We](),t=A.map(a=>{let n=a[ZA]();return n.color||(n.color="#000000"),n}),i=Object.create(null);if(this.margin&&Object.assign(i,this.margin[ZA]()),((s=this.fill)==null?void 0:s.presence)==="visible"&&Object.assign(i,this.fill[ZA]()),this.corner.children.some(a=>a.radius!==0)){let a=this.corner.children.map(n=>n[ZA]());if(a.length===2||a.length===3){let n=a.at(-1);for(let r=a.length;r<4;r++)a.push(n)}i.borderRadius=a.map(n=>n.radius).join(" ")}switch(this.presence){case"invisible":case"hidden":i.borderStyle="";break;case"inactive":i.borderStyle="none";break;default:i.borderStyle=t.map(a=>a.style).join(" ");break}return i.borderWidth=t.map(a=>a.width).join(" "),i.borderColor=t.map(a=>a.color).join(" "),i}},Fc=class extends J{constructor(A){super(eA,"break",!0),this.after=O(A.after,["auto","contentArea","pageArea","pageEven","pageOdd"]),this.afterTarget=A.afterTarget||"",this.before=O(A.before,["auto","contentArea","pageArea","pageEven","pageOdd"]),this.beforeTarget=A.beforeTarget||"",this.bookendLeader=A.bookendLeader||"",this.bookendTrailer=A.bookendTrailer||"",this.id=A.id||"",this.overflowLeader=A.overflowLeader||"",this.overflowTarget=A.overflowTarget||"",this.overflowTrailer=A.overflowTrailer||"",this.startNew=GA({data:A.startNew,defaultValue:0,validate:t=>t===1}),this.use=A.use||"",this.usehref=A.usehref||"",this.extras=null}},ig=class extends J{constructor(A){super(eA,"breakAfter",!0),this.id=A.id||"",this.leader=A.leader||"",this.startNew=GA({data:A.startNew,defaultValue:0,validate:t=>t===1}),this.target=A.target||"",this.targetType=O(A.targetType,["auto","contentArea","pageArea"]),this.trailer=A.trailer||"",this.use=A.use||"",this.usehref=A.usehref||"",this.script=null}},sg=class extends J{constructor(A){super(eA,"breakBefore",!0),this.id=A.id||"",this.leader=A.leader||"",this.startNew=GA({data:A.startNew,defaultValue:0,validate:t=>t===1}),this.target=A.target||"",this.targetType=O(A.targetType,["auto","contentArea","pageArea"]),this.trailer=A.trailer||"",this.use=A.use||"",this.usehref=A.usehref||"",this.script=null}[SA](A){return this[L]={},dA.FAILURE}},Rc=class extends J{constructor(A){super(eA,"button",!0),this.highlight=O(A.highlight,["inverted","none","outline","push"]),this.id=A.id||"",this.use=A.use||"",this.usehref=A.usehref||"",this.extras=null}[SA](A){let i=this[MA]()[MA](),s={name:"button",attributes:{id:this[$A],class:["xfaButton"],style:{}},children:[]};for(let a of i.event.children){if(a.activity!=="click"||!a.script)continue;let n=zE(a.script[P]);if(!n)continue;let r=iu(n.url);r&&s.children.push({name:"a",attributes:{id:"link"+this[$A],href:r,newWindow:n.newWindow,class:["xfaLink"],style:{}},children:[]})}return dA.success(s)}},Nc=class extends J{constructor(A){super(eA,"calculate",!0),this.id=A.id||"",this.override=O(A.override,["disabled","error","ignore","warning"]),this.use=A.use||"",this.usehref=A.usehref||"",this.extras=null,this.message=null,this.script=null}},Gc=class extends J{constructor(A){super(eA,"caption",!0),this.id=A.id||"",this.placement=O(A.placement,["left","bottom","inline","right","top"]),this.presence=O(A.presence,["visible","hidden","inactive","invisible"]),this.reserve=Math.ceil(hA(A.reserve)),this.use=A.use||"",this.usehref=A.usehref||"",this.extras=null,this.font=null,this.margin=null,this.para=null,this.value=null}[Et](A){y1(this,A)}[We](A){if(!this[L]){let{width:t,height:i}=A;switch(this.placement){case"left":case"right":case"inline":t=this.reserve<=0?t:this.reserve;break;case"top":case"bottom":i=this.reserve<=0?i:this.reserve;break}this[L]=m1(this,{width:t,height:i})}return this[L]}[SA](A){if(!this.value)return dA.EMPTY;this[Xs]();let t=this.value[SA](A).html;if(!t)return this[Bt](),dA.EMPTY;let i=this.reserve;if(this.reserve<=0){let{w:n,h:r}=this[We](A);switch(this.placement){case"left":case"right":case"inline":this.reserve=n;break;case"top":case"bottom":this.reserve=r;break}}let s=[];typeof t=="string"?s.push({name:"#text",value:t}):s.push(t);let a=lt(this,"font","margin","visibility");switch(this.placement){case"left":case"right":this.reserve>0&&(a.width=NA(this.reserve));break;case"top":case"bottom":this.reserve>0&&(a.height=NA(this.reserve));break}return eu(this,null,t),this[Bt](),this.reserve=i,dA.success({name:"div",attributes:{style:a,class:["xfaCaption"]},children:s})}},Uc=class extends qA{constructor(A){super(eA,"certificate"),this.id=A.id||"",this.name=A.name||"",this.use=A.use||"",this.usehref=A.usehref||""}},Mc=class extends J{constructor(A){super(eA,"certificates",!0),this.credentialServerPolicy=O(A.credentialServerPolicy,["optional","required"]),this.id=A.id||"",this.url=A.url||"",this.urlPolicy=A.urlPolicy||"",this.use=A.use||"",this.usehref=A.usehref||"",this.encryption=null,this.issuers=null,this.keyUsage=null,this.oids=null,this.signing=null,this.subjectDNs=null}},ag=class extends J{constructor(A){super(eA,"checkButton",!0),this.id=A.id||"",this.mark=O(A.mark,["default","check","circle","cross","diamond","square","star"]),this.shape=O(A.shape,["square","round"]),this.size=hA(A.size,"10pt"),this.use=A.use||"",this.usehref=A.usehref||"",this.border=null,this.extras=null,this.margin=null}[SA](A){var Q,E,f;let t=lt("margin"),i=NA(this.size);t.width=t.height=i;let s,a,n,r=this[MA]()[MA](),g=r.items.children.length&&r.items.children[0][SA]().html||[],o={on:(g[0]!==void 0?g[0]:"on").toString(),off:(g[1]!==void 0?g[1]:"off").toString()},c=(((Q=r.value)==null?void 0:Q[Se]())||"off")===o.on||void 0,l=r[xe](),h=r[$A],C;l instanceof og?(n=l[$A],s="radio",a="xfaRadio",C=((E=l[Ht])==null?void 0:E[$A])||l[$A]):(s="checkbox",a="xfaCheckbox",C=((f=r[Ht])==null?void 0:f[$A])||r[$A]);let B={name:"input",attributes:{class:[a],style:t,fieldId:h,dataId:C,type:s,checked:c,xfaOn:o.on,xfaOff:o.off,"aria-label":N0(r),"aria-required":!1}};return n&&(B.attributes.name=n),yn(r)&&(B.attributes["aria-required"]=!0,B.attributes.required=!0),dA.success({name:"label",attributes:{class:["xfaLabel"]},children:[B]})}},ng=class extends J{constructor(A){super(eA,"choiceList",!0),this.commitOn=O(A.commitOn,["select","exit"]),this.id=A.id||"",this.open=O(A.open,["userControl","always","multiSelect","onEntry"]),this.textEntry=GA({data:A.textEntry,defaultValue:0,validate:t=>t===1}),this.use=A.use||"",this.usehref=A.usehref||"",this.border=null,this.extras=null,this.margin=null}[SA](A){var o,I,c;let t=lt(this,"border","margin"),s=this[MA]()[MA](),n={fontSize:`calc(${((o=s.font)==null?void 0:o.size)||10}px * var(--scale-factor))`},r=[];if(s.items.children.length>0){let l=s.items,h=0,C=0;l.children.length===2&&(h=l.children[0].save,C=1-h);let B=l.children[h][SA]().html,Q=l.children[C][SA]().html,E=!1,f=((I=s.value)==null?void 0:I[Se]())||"";for(let u=0,d=B.length;ut>=0}),this.use=A.use||"",this.usehref=A.usehref||""}},Jc=class extends J{constructor(A){super(eA,"connect",!0),this.connection=A.connection||"",this.id=A.id||"",this.ref=A.ref||"",this.usage=O(A.usage,["exportAndImport","exportOnly","importOnly"]),this.use=A.use||"",this.usehref=A.usehref||"",this.picture=null}},_a=class extends J{constructor(A){super(eA,"contentArea",!0),this.h=hA(A.h),this.id=A.id||"",this.name=A.name||"",this.relevant=jt(A.relevant),this.use=A.use||"",this.usehref=A.usehref||"",this.w=hA(A.w),this.x=hA(A.x,"0pt"),this.y=hA(A.y,"0pt"),this.desc=null,this.extras=null}[SA](A){let t=NA(this.x),i=NA(this.y),s={left:t,top:i,width:NA(this.w),height:NA(this.h)},a=["xfaContentarea"];return Vs(this)&&a.push("xfaPrintOnly"),dA.success({name:"div",children:[],attributes:{style:s,class:a,id:this[$A]}})}},rg=class extends J{constructor(A){super(eA,"corner",!0),this.id=A.id||"",this.inverted=GA({data:A.inverted,defaultValue:0,validate:t=>t===1}),this.join=O(A.join,["square","round"]),this.presence=O(A.presence,["visible","hidden","inactive","invisible"]),this.radius=hA(A.radius),this.stroke=O(A.stroke,["solid","dashDot","dashDotDot","dashed","dotted","embossed","etched","lowered","raised"]),this.thickness=hA(A.thickness,"0.5pt"),this.use=A.use||"",this.usehref=A.usehref||"",this.color=null,this.extras=null}[ZA](){let A=lt(this,"visibility");return A.radius=NA(this.join==="square"?0:this.radius),A}},Yc=class extends ce{constructor(A){super(eA,"date"),this.id=A.id||"",this.name=A.name||"",this.use=A.use||"",this.usehref=A.usehref||""}[se](){let A=this[P].trim();this[P]=A?new Date(A):null}[SA](A){return A0(this[P]?this[P].toString():"")}},Kc=class extends ce{constructor(A){super(eA,"dateTime"),this.id=A.id||"",this.name=A.name||"",this.use=A.use||"",this.usehref=A.usehref||""}[se](){let A=this[P].trim();this[P]=A?new Date(A):null}[SA](A){return A0(this[P]?this[P].toString():"")}},vc=class extends J{constructor(A){super(eA,"dateTimeEdit",!0),this.hScrollPolicy=O(A.hScrollPolicy,["auto","off","on"]),this.id=A.id||"",this.picker=O(A.picker,["host","none"]),this.use=A.use||"",this.usehref=A.usehref||"",this.border=null,this.comb=null,this.extras=null,this.margin=null}[SA](A){var a;let t=lt(this,"border","font","margin"),i=this[MA]()[MA](),s={name:"input",attributes:{type:"text",fieldId:i[$A],dataId:((a=i[Ht])==null?void 0:a[$A])||i[$A],class:["xfaTextfield"],style:t,"aria-label":N0(i),"aria-required":!1}};return yn(i)&&(s.attributes["aria-required"]=!0,s.attributes.required=!0),dA.success({name:"label",attributes:{class:["xfaLabel"]},children:[s]})}},qc=class extends ce{constructor(A){super(eA,"decimal"),this.fracDigits=GA({data:A.fracDigits,defaultValue:2,validate:t=>!0}),this.id=A.id||"",this.leadDigits=GA({data:A.leadDigits,defaultValue:-1,validate:t=>!0}),this.name=A.name||"",this.use=A.use||"",this.usehref=A.usehref||""}[se](){let A=parseFloat(this[P].trim());this[P]=isNaN(A)?null:A}[SA](A){return A0(this[P]!==null?this[P].toString():"")}},Tc=class extends J{constructor(A){super(eA,"defaultUi",!0),this.id=A.id||"",this.use=A.use||"",this.usehref=A.usehref||"",this.extras=null}},Pc=class extends J{constructor(A){super(eA,"desc",!0),this.id=A.id||"",this.use=A.use||"",this.usehref=A.usehref||"",this.boolean=new b,this.date=new b,this.dateTime=new b,this.decimal=new b,this.exData=new b,this.float=new b,this.image=new b,this.integer=new b,this.text=new b,this.time=new b}},Wc=class extends _A{constructor(A){super(eA,"digestMethod",["","SHA1","SHA256","SHA512","RIPEMD160"]),this.id=A.id||"",this.use=A.use||"",this.usehref=A.usehref||""}},Oc=class extends J{constructor(A){super(eA,"digestMethods",!0),this.id=A.id||"",this.type=O(A.type,["optional","required"]),this.use=A.use||"",this.usehref=A.usehref||"",this.digestMethod=new b}},gg=class extends J{constructor(A){super(eA,"draw",!0),this.anchorType=O(A.anchorType,["topLeft","bottomCenter","bottomLeft","bottomRight","middleCenter","middleLeft","middleRight","topCenter","topRight"]),this.colSpan=GA({data:A.colSpan,defaultValue:1,validate:t=>t>=1||t===-1}),this.h=A.h?hA(A.h):"",this.hAlign=O(A.hAlign,["left","center","justify","justifyAll","radix","right"]),this.id=A.id||"",this.locale=A.locale||"",this.maxH=hA(A.maxH,"0pt"),this.maxW=hA(A.maxW,"0pt"),this.minH=hA(A.minH,"0pt"),this.minW=hA(A.minW,"0pt"),this.name=A.name||"",this.presence=O(A.presence,["visible","hidden","inactive","invisible"]),this.relevant=jt(A.relevant),this.rotate=GA({data:A.rotate,defaultValue:0,validate:t=>t%90===0}),this.use=A.use||"",this.usehref=A.usehref||"",this.w=A.w?hA(A.w):"",this.x=hA(A.x,"0pt"),this.y=hA(A.y,"0pt"),this.assist=null,this.border=null,this.caption=null,this.desc=null,this.extras=null,this.font=null,this.keep=null,this.margin=null,this.para=null,this.traversal=null,this.ui=null,this.value=null,this.setProperty=new b}[Et](A){y1(this,A)}[SA](A){if(ro(this),this.presence==="hidden"||this.presence==="inactive")return dA.EMPTY;ao(this),this[Xs]();let t=this.w,i=this.h,{w:s,h:a,isBroken:n}=m1(this,A);if(s&&this.w===""){if(n&&this[xe]()[pi]())return this[Bt](),dA.FAILURE;this.w=s}if(a&&this.h===""&&(this.h=a),oo(this),!no(this,A))return this.w=t,this.h=i,this[Bt](),dA.FAILURE;Io(this);let r=lt(this,"font","hAlign","dimensions","position","presence","rotate","anchorType","border","margin");Vf(this,r),r.margin&&(r.padding=r.margin,delete r.margin);let g=["xfaDraw"];this.font&&g.push("xfaFont"),Vs(this)&&g.push("xfaPrintOnly");let o={style:r,id:this[$A],class:g};this.name&&(o.xfaName=this.name);let I={name:"div",attributes:o,children:[]};go(this,o);let c=_f(this,I,A),l=this.value?this.value[SA](A).html:null;return l===null?(this.w=t,this.h=i,this[Bt](),dA.success(m0(this,I),c)):(I.children.push(l),eu(this,r,l),this.w=t,this.h=i,this[Bt](),dA.success(m0(this,I),c))}},G0=class extends J{constructor(A){super(eA,"edge",!0),this.cap=O(A.cap,["square","butt","round"]),this.id=A.id||"",this.presence=O(A.presence,["visible","hidden","inactive","invisible"]),this.stroke=O(A.stroke,["solid","dashDot","dashDotDot","dashed","dotted","embossed","etched","lowered","raised"]),this.thickness=hA(A.thickness,"0.5pt"),this.use=A.use||"",this.usehref=A.usehref||"",this.color=null,this.extras=null}[ZA](){let A=lt(this,"visibility");if(Object.assign(A,{linecap:this.cap,width:NA(this.thickness),color:this.color?this.color[ZA]():"#000000",style:""}),this.presence!=="visible")A.style="none";else switch(this.stroke){case"solid":A.style="solid";break;case"dashDot":A.style="dashed";break;case"dashDotDot":A.style="dashed";break;case"dashed":A.style="dashed";break;case"dotted":A.style="dotted";break;case"embossed":A.style="ridge";break;case"etched":A.style="groove";break;case"lowered":A.style="inset";break;case"raised":A.style="outset";break}return A}},Zc=class extends _A{constructor(A){super(eA,"encoding",["adbe.x509.rsa_sha1","adbe.pkcs7.detached","adbe.pkcs7.sha1"]),this.id=A.id||"",this.use=A.use||"",this.usehref=A.usehref||""}},jc=class extends J{constructor(A){super(eA,"encodings",!0),this.id=A.id||"",this.type=O(A.type,["optional","required"]),this.use=A.use||"",this.usehref=A.usehref||"",this.encoding=new b}},Xc=class extends J{constructor(A){super(eA,"encrypt",!0),this.id=A.id||"",this.use=A.use||"",this.usehref=A.usehref||"",this.certificate=null}},Vc=class extends J{constructor(A){super(eA,"encryptData",!0),this.id=A.id||"",this.operation=O(A.operation,["encrypt","decrypt"]),this.target=A.target||"",this.use=A.use||"",this.usehref=A.usehref||"",this.filter=null,this.manifest=null}},_c=class extends J{constructor(A){super(eA,"encryption",!0),this.id=A.id||"",this.type=O(A.type,["optional","required"]),this.use=A.use||"",this.usehref=A.usehref||"",this.certificate=new b}},zc=class extends _A{constructor(A){super(eA,"encryptionMethod",["","AES256-CBC","TRIPLEDES-CBC","AES128-CBC","AES192-CBC"]),this.id=A.id||"",this.use=A.use||"",this.usehref=A.usehref||""}},$c=class extends J{constructor(A){super(eA,"encryptionMethods",!0),this.id=A.id||"",this.type=O(A.type,["optional","required"]),this.use=A.use||"",this.usehref=A.usehref||"",this.encryptionMethod=new b}},Al=class extends J{constructor(A){super(eA,"event",!0),this.activity=O(A.activity,["click","change","docClose","docReady","enter","exit","full","indexChange","initialize","mouseDown","mouseEnter","mouseExit","mouseUp","postExecute","postOpen","postPrint","postSave","postSign","postSubmit","preExecute","preOpen","prePrint","preSave","preSign","preSubmit","ready","validationState"]),this.id=A.id||"",this.listen=O(A.listen,["refOnly","refAndDescendents"]),this.name=A.name||"",this.ref=A.ref||"",this.use=A.use||"",this.usehref=A.usehref||"",this.extras=null,this.encryptData=null,this.execute=null,this.script=null,this.signData=null,this.submit=null}},el=class extends ce{constructor(A){super(eA,"exData"),this.contentType=A.contentType||"",this.href=A.href||"",this.id=A.id||"",this.maxLength=GA({data:A.maxLength,defaultValue:-1,validate:t=>t>=-1}),this.name=A.name||"",this.rid=A.rid||"",this.transferEncoding=O(A.transferEncoding,["none","base64","package"]),this.use=A.use||"",this.usehref=A.usehref||""}[d1](){return this.contentType==="text/html"}[ni](A){return this.contentType==="text/html"&&A[de]===me.xhtml.id?(this[P]=A,!0):this.contentType==="text/xml"?(this[P]=A,!0):!1}[SA](A){return this.contentType!=="text/html"||!this[P]?dA.EMPTY:this[P][SA](A)}},tl=class extends J{constructor(A){super(eA,"exObject",!0),this.archive=A.archive||"",this.classId=A.classId||"",this.codeBase=A.codeBase||"",this.codeType=A.codeType||"",this.id=A.id||"",this.name=A.name||"",this.use=A.use||"",this.usehref=A.usehref||"",this.extras=null,this.boolean=new b,this.date=new b,this.dateTime=new b,this.decimal=new b,this.exData=new b,this.exObject=new b,this.float=new b,this.image=new b,this.integer=new b,this.text=new b,this.time=new b}},og=class extends J{constructor(A){super(eA,"exclGroup",!0),this.access=O(A.access,["open","nonInteractive","protected","readOnly"]),this.accessKey=A.accessKey||"",this.anchorType=O(A.anchorType,["topLeft","bottomCenter","bottomLeft","bottomRight","middleCenter","middleLeft","middleRight","topCenter","topRight"]),this.colSpan=GA({data:A.colSpan,defaultValue:1,validate:t=>t>=1||t===-1}),this.h=A.h?hA(A.h):"",this.hAlign=O(A.hAlign,["left","center","justify","justifyAll","radix","right"]),this.id=A.id||"",this.layout=O(A.layout,["position","lr-tb","rl-row","rl-tb","row","table","tb"]),this.maxH=hA(A.maxH,"0pt"),this.maxW=hA(A.maxW,"0pt"),this.minH=hA(A.minH,"0pt"),this.minW=hA(A.minW,"0pt"),this.name=A.name||"",this.presence=O(A.presence,["visible","hidden","inactive","invisible"]),this.relevant=jt(A.relevant),this.use=A.use||"",this.usehref=A.usehref||"",this.w=A.w?hA(A.w):"",this.x=hA(A.x,"0pt"),this.y=hA(A.y,"0pt"),this.assist=null,this.bind=null,this.border=null,this.calculate=null,this.caption=null,this.desc=null,this.extras=null,this.margin=null,this.para=null,this.traversal=null,this.validate=null,this.connect=new b,this.event=new b,this.field=new b,this.setProperty=new b}[J0](){return!0}[Oa](){return!0}[Et](A){for(let t of this.field.children){if(!t.value){let i=new an({});t[Be](i),t.value=i}t.value[Et](A)}}[pi](){return this.layout.endsWith("-tb")&&this[L].attempt===0&&this[L].numberInLine>0||this[MA]()[pi]()}[di](){var t;let A=this[xe]();return A[di]()?this[L]._isSplittable!==void 0?this[L]._isSplittable:this.layout==="position"||this.layout.includes("row")?(this[L]._isSplittable=!1,!1):(t=A.layout)!=null&&t.endsWith("-tb")&&A[L].numberInLine!==0?!1:(this[L]._isSplittable=!0,!0):!1}[wn](){return au(this)}[d0](A,t){nu(this,A,t)}[x0](){return ru(this)}[SA](A){if(ro(this),this.presence==="hidden"||this.presence==="inactive"||this.h===0||this.w===0)return dA.EMPTY;ao(this);let t=[],i={id:this[$A],class:[]};p1(this,i.class),this[L]||(this[L]=Object.create(null)),Object.assign(this[L],{children:t,attributes:i,attempt:0,line:null,numberInLine:0,availableSpace:{width:Math.min(this.w||1/0,A.width),height:Math.min(this.h||1/0,A.height)},width:0,height:0,prevHeight:0,currentWidth:0});let s=this[di]();if(s||oo(this),!no(this,A))return dA.FAILURE;let a=new Set(["field"]);if(this.layout.includes("row")){let E=this[xe]().columnWidths;Array.isArray(E)&&E.length>0&&(this[L].columnWidths=E,this[L].currentColumn=0)}let n=lt(this,"anchorType","dimensions","position","presence","border","margin","hAlign"),r=["xfaExclgroup"],g=zf(this);g&&r.push(g),Vs(this)&&r.push("xfaPrintOnly"),i.style=n,i.class=r,this.name&&(i.xfaName=this.name),this[Xs]();let o=this.layout==="lr-tb"||this.layout==="rl-tb",I=o?Ag:1;for(;this[L].attemptt>=1||t===-1}),this.h=A.h?hA(A.h):"",this.hAlign=O(A.hAlign,["left","center","justify","justifyAll","radix","right"]),this.id=A.id||"",this.locale=A.locale||"",this.maxH=hA(A.maxH,"0pt"),this.maxW=hA(A.maxW,"0pt"),this.minH=hA(A.minH,"0pt"),this.minW=hA(A.minW,"0pt"),this.name=A.name||"",this.presence=O(A.presence,["visible","hidden","inactive","invisible"]),this.relevant=jt(A.relevant),this.rotate=GA({data:A.rotate,defaultValue:0,validate:t=>t%90===0}),this.use=A.use||"",this.usehref=A.usehref||"",this.w=A.w?hA(A.w):"",this.x=hA(A.x,"0pt"),this.y=hA(A.y,"0pt"),this.assist=null,this.bind=null,this.border=null,this.calculate=null,this.caption=null,this.desc=null,this.extras=null,this.font=null,this.format=null,this.items=new b(2),this.keep=null,this.margin=null,this.para=null,this.traversal=null,this.ui=null,this.validate=null,this.value=null,this.bindItems=new b,this.connect=new b,this.event=new b,this.setProperty=new b}[J0](){return!0}[Et](A){y1(this,A)}[SA](A){var E,f,u;if(ro(this),!this.ui){this.ui=new sn({}),this.ui[ie]=this[ie],this[Be](this.ui);let d;switch(this.items.children.length){case 0:d=new Bg({}),this.ui.textEdit=d;break;case 1:d=new ag({}),this.ui.checkButton=d;break;case 2:d=new ng({}),this.ui.choiceList=d;break}this.ui[Be](d)}if(!this.ui||this.presence==="hidden"||this.presence==="inactive"||this.h===0||this.w===0)return dA.EMPTY;this.caption&&delete this.caption[L],this[Xs]();let t=this.caption?this.caption[SA](A).html:null,i=this.w,s=this.h,a=0,n=0;this.margin&&(a=this.margin.leftInset+this.margin.rightInset,n=this.margin.topInset+this.margin.bottomInset);let r=null;if(this.w===""||this.h===""){let d=null,x=null,p=0,m=0;if(this.ui.checkButton)p=m=this.ui.checkButton.size;else{let{w:D,h:S}=m1(this,A);D!==null?(p=D,m=S):m=_9(this.font,!0).lineNoGap}if(r=GE(this.ui[We]()),p+=r.w,m+=r.h,this.caption){let{w:D,h:S,isBroken:w}=this.caption[We](A);if(w&&this[xe]()[pi]())return this[Bt](),dA.FAILURE;switch(d=D,x=S,this.caption.placement){case"left":case"right":case"inline":d+=p;break;case"top":case"bottom":x+=m;break}}else d=p,x=m;d&&this.w===""&&(d+=a,this.w=Math.min(this.maxW<=0?1/0:this.maxW,this.minW+1t>=1&&t<=5}),this.appearanceFilter=null,this.certificates=null,this.digestMethods=null,this.encodings=null,this.encryptionMethods=null,this.handler=null,this.lockDocument=null,this.mdp=null,this.reasons=null,this.timeStamp=null}},rl=class extends ce{constructor(A){super(eA,"float"),this.id=A.id||"",this.name=A.name||"",this.use=A.use||"",this.usehref=A.usehref||""}[se](){let A=parseFloat(this[P].trim());this[P]=isNaN(A)?null:A}[SA](A){return A0(this[P]!==null?this[P].toString():"")}},gl=class extends J{constructor(A){super(eA,"font",!0),this.baselineShift=hA(A.baselineShift),this.fontHorizontalScale=_r({data:A.fontHorizontalScale,defaultValue:100,validate:t=>t>=0}),this.fontVerticalScale=_r({data:A.fontVerticalScale,defaultValue:100,validate:t=>t>=0}),this.id=A.id||"",this.kerningMode=O(A.kerningMode,["none","pair"]),this.letterSpacing=hA(A.letterSpacing,"0"),this.lineThrough=GA({data:A.lineThrough,defaultValue:0,validate:t=>t===1||t===2}),this.lineThroughPeriod=O(A.lineThroughPeriod,["all","word"]),this.overline=GA({data:A.overline,defaultValue:0,validate:t=>t===1||t===2}),this.overlinePeriod=O(A.overlinePeriod,["all","word"]),this.posture=O(A.posture,["normal","italic"]),this.size=hA(A.size,"10pt"),this.typeface=A.typeface||"Courier",this.underline=GA({data:A.underline,defaultValue:0,validate:t=>t===1||t===2}),this.underlinePeriod=O(A.underlinePeriod,["all","word"]),this.use=A.use||"",this.usehref=A.usehref||"",this.weight=O(A.weight,["normal","bold"]),this.extras=null,this.fill=null}[Yt](A){super[Yt](A),this[ie].usedTypefaces.add(this.typeface)}[ZA](){let A=lt(this,"fill"),t=A.color;return t&&(t==="#000000"?delete A.color:t.startsWith("#")||(A.background=t,A.backgroundClip="text",A.color="transparent")),this.baselineShift&&(A.verticalAlign=NA(this.baselineShift)),A.fontKerning=this.kerningMode==="none"?"none":"normal",A.letterSpacing=NA(this.letterSpacing),this.lineThrough!==0&&(A.textDecoration="line-through",this.lineThrough===2&&(A.textDecorationStyle="double")),this.overline!==0&&(A.textDecoration="overline",this.overline===2&&(A.textDecorationStyle="double")),A.fontStyle=this.posture,A.fontSize=NA(.99*this.size),tu(this,this,this[ie].fontFinder,A),this.underline!==0&&(A.textDecoration="underline",this.underline===2&&(A.textDecorationStyle="double")),A.fontWeight=this.weight,A}},ol=class extends J{constructor(A){super(eA,"format",!0),this.id=A.id||"",this.use=A.use||"",this.usehref=A.usehref||"",this.extras=null,this.picture=null}},Il=class extends qA{constructor(A){super(eA,"handler"),this.id=A.id||"",this.type=O(A.type,["optional","required"]),this.use=A.use||"",this.usehref=A.usehref||""}},cl=class extends J{constructor(A){super(eA,"hyphenation"),this.excludeAllCaps=GA({data:A.excludeAllCaps,defaultValue:0,validate:t=>t===1}),this.excludeInitialCap=GA({data:A.excludeInitialCap,defaultValue:0,validate:t=>t===1}),this.hyphenate=GA({data:A.hyphenate,defaultValue:0,validate:t=>t===1}),this.id=A.id||"",this.pushCharacterCount=GA({data:A.pushCharacterCount,defaultValue:3,validate:t=>t>=0}),this.remainCharacterCount=GA({data:A.remainCharacterCount,defaultValue:3,validate:t=>t>=0}),this.use=A.use||"",this.usehref=A.usehref||"",this.wordCharacterCount=GA({data:A.wordCharacterCount,defaultValue:7,validate:t=>t>=0})}},Ig=class extends qA{constructor(A){super(eA,"image"),this.aspect=O(A.aspect,["fit","actual","height","none","width"]),this.contentType=A.contentType||"",this.href=A.href||"",this.id=A.id||"",this.name=A.name||"",this.transferEncoding=O(A.transferEncoding,["base64","none","package"]),this.use=A.use||"",this.usehref=A.usehref||""}[SA](){if(this.contentType&&!nx.has(this.contentType.toLowerCase()))return dA.EMPTY;let A=this[ie].images&&this[ie].images.get(this.href);if(!A&&(this.href||!this[P])||(!A&&this.transferEncoding==="base64"&&(A=Pe(atob(this[P]))),!A))return dA.EMPTY;if(!this.contentType){for(let[a,n]of rx)if(A.length>a.length&&a.every((r,g)=>r===A[g])){this.contentType=n;break}if(!this.contentType)return dA.EMPTY}let t=new Blob([A],{type:this.contentType}),i;switch(this.aspect){case"fit":case"actual":break;case"height":i={height:"100%",objectFit:"fill"};break;case"none":i={width:"100%",height:"100%",objectFit:"fill"};break;case"width":i={width:"100%",objectFit:"fill"};break}let s=this[MA]();return dA.success({name:"img",attributes:{class:["xfaImage"],style:i,src:URL.createObjectURL(t),alt:s?N0(s[MA]()):null}})}},ll=class extends J{constructor(A){super(eA,"imageEdit",!0),this.data=O(A.data,["link","embed"]),this.id=A.id||"",this.use=A.use||"",this.usehref=A.usehref||"",this.border=null,this.extras=null,this.margin=null}[SA](A){return this.data==="embed"?dA.success({name:"div",children:[],attributes:{}}):dA.EMPTY}},hl=class extends ce{constructor(A){super(eA,"integer"),this.id=A.id||"",this.name=A.name||"",this.use=A.use||"",this.usehref=A.usehref||""}[se](){let A=parseInt(this[P].trim(),10);this[P]=isNaN(A)?null:A}[SA](A){return A0(this[P]!==null?this[P].toString():"")}},Cl=class extends J{constructor(A){super(eA,"issuers",!0),this.id=A.id||"",this.type=O(A.type,["optional","required"]),this.use=A.use||"",this.usehref=A.usehref||"",this.certificate=new b}},$a=class extends J{constructor(A){super(eA,"items",!0),this.id=A.id||"",this.name=A.name||"",this.presence=O(A.presence,["visible","hidden","inactive","invisible"]),this.ref=A.ref||"",this.save=GA({data:A.save,defaultValue:0,validate:t=>t===1}),this.use=A.use||"",this.usehref=A.usehref||"",this.boolean=new b,this.date=new b,this.dateTime=new b,this.decimal=new b,this.exData=new b,this.float=new b,this.image=new b,this.integer=new b,this.text=new b,this.time=new b}[SA](){let A=[];for(let t of this[Ue]())A.push(t[Se]());return dA.success(A)}},Bl=class extends J{constructor(A){super(eA,"keep",!0),this.id=A.id||"";let t=["none","contentArea","pageArea"];this.intact=O(A.intact,t),this.next=O(A.next,t),this.previous=O(A.previous,t),this.use=A.use||"",this.usehref=A.usehref||"",this.extras=null}},Ql=class extends J{constructor(A){super(eA,"keyUsage");let t=["","yes","no"];this.crlSign=O(A.crlSign,t),this.dataEncipherment=O(A.dataEncipherment,t),this.decipherOnly=O(A.decipherOnly,t),this.digitalSignature=O(A.digitalSignature,t),this.encipherOnly=O(A.encipherOnly,t),this.id=A.id||"",this.keyAgreement=O(A.keyAgreement,t),this.keyCertSign=O(A.keyCertSign,t),this.keyEncipherment=O(A.keyEncipherment,t),this.nonRepudiation=O(A.nonRepudiation,t),this.type=O(A.type,["optional","required"]),this.use=A.use||"",this.usehref=A.usehref||""}},El=class extends J{constructor(A){super(eA,"line",!0),this.hand=O(A.hand,["even","left","right"]),this.id=A.id||"",this.slope=O(A.slope,["\\\\","/"]),this.use=A.use||"",this.usehref=A.usehref||"",this.edge=null}[SA](){let A=this[MA]()[MA](),t=this.edge||new G0({}),i=t[ZA](),s=Object.create(null),a=t.presence==="visible"?t.thickness:0;s.strokeWidth=NA(a),s.stroke=i.color;let n,r,g,o,I="100%",c="100%";A.w<=a?([n,r,g,o]=["50%",0,"50%","100%"],I=s.strokeWidth):A.h<=a?([n,r,g,o]=[0,"50%","100%","50%"],c=s.strokeWidth):this.slope==="\\\\"?[n,r,g,o]=[0,0,"100%","100%"]:[n,r,g,o]=[0,"100%","100%",0];let h={name:"svg",children:[{name:"line",attributes:{xmlns:p0,x1:n,y1:r,x2:g,y2:o,style:s}}],attributes:{xmlns:p0,width:I,height:c,style:{overflow:"visible"}}};return w1(A)?dA.success({name:"div",attributes:{style:{display:"inline",width:"100%",height:"100%"}},children:[h]}):(h.attributes.style.position="absolute",dA.success(h))}},fl=class extends J{constructor(A){super(eA,"linear",!0),this.id=A.id||"",this.type=O(A.type,["toRight","toBottom","toLeft","toTop"]),this.use=A.use||"",this.usehref=A.usehref||"",this.color=null,this.extras=null}[ZA](A){A=A?A[ZA]():"#FFFFFF";let t=this.type.replace(/([RBLT])/," $1").toLowerCase(),i=this.color?this.color[ZA]():"#000000";return`linear-gradient(${t}, ${A}, ${i})`}},ul=class extends ce{constructor(A){super(eA,"lockDocument"),this.id=A.id||"",this.type=O(A.type,["optional","required"]),this.use=A.use||"",this.usehref=A.usehref||""}[se](){this[P]=O(this[P],["auto","0","1"])}},dl=class extends J{constructor(A){super(eA,"manifest",!0),this.action=O(A.action,["include","all","exclude"]),this.id=A.id||"",this.name=A.name||"",this.use=A.use||"",this.usehref=A.usehref||"",this.extras=null,this.ref=new b}},xl=class extends J{constructor(A){super(eA,"margin",!0),this.bottomInset=hA(A.bottomInset,"0"),this.id=A.id||"",this.leftInset=hA(A.leftInset,"0"),this.rightInset=hA(A.rightInset,"0"),this.topInset=hA(A.topInset,"0"),this.use=A.use||"",this.usehref=A.usehref||"",this.extras=null}[ZA](){return{margin:NA(this.topInset)+" "+NA(this.rightInset)+" "+NA(this.bottomInset)+" "+NA(this.leftInset)}}},ml=class extends J{constructor(A){super(eA,"mdp"),this.id=A.id||"",this.permissions=GA({data:A.permissions,defaultValue:2,validate:t=>t===1||t===3}),this.signatureType=O(A.signatureType,["filler","author"]),this.use=A.use||"",this.usehref=A.usehref||""}},pl=class extends J{constructor(A){super(eA,"medium"),this.id=A.id||"",this.imagingBBox=V9(A.imagingBBox),this.long=hA(A.long),this.orientation=O(A.orientation,["portrait","landscape"]),this.short=hA(A.short),this.stock=A.stock||"",this.trayIn=O(A.trayIn,["auto","delegate","pageFront"]),this.trayOut=O(A.trayOut,["auto","delegate"]),this.use=A.use||"",this.usehref=A.usehref||""}},wl=class extends J{constructor(A){super(eA,"message",!0),this.id=A.id||"",this.use=A.use||"",this.usehref=A.usehref||"",this.text=new b}},yl=class extends J{constructor(A){super(eA,"numericEdit",!0),this.hScrollPolicy=O(A.hScrollPolicy,["auto","off","on"]),this.id=A.id||"",this.use=A.use||"",this.usehref=A.usehref||"",this.border=null,this.comb=null,this.extras=null,this.margin=null}[SA](A){var a;let t=lt(this,"border","font","margin"),i=this[MA]()[MA](),s={name:"input",attributes:{type:"text",fieldId:i[$A],dataId:((a=i[Ht])==null?void 0:a[$A])||i[$A],class:["xfaTextfield"],style:t,"aria-label":N0(i),"aria-required":!1}};return yn(i)&&(s.attributes["aria-required"]=!0,s.attributes.required=!0),dA.success({name:"label",attributes:{class:["xfaLabel"]},children:[s]})}},bl=class extends J{constructor(A){super(eA,"occur",!0),this.id=A.id||"",this.initial=A.initial!==""?GA({data:A.initial,defaultValue:"",validate:t=>!0}):"",this.max=A.max!==""?GA({data:A.max,defaultValue:1,validate:t=>!0}):"",this.min=A.min!==""?GA({data:A.min,defaultValue:1,validate:t=>!0}):"",this.use=A.use||"",this.usehref=A.usehref||"",this.extras=null}[Yt](){let A=this[MA](),t=this.min;this.min===""&&(this.min=A instanceof zi||A instanceof U0?0:1),this.max===""&&(t===""?this.max=A instanceof zi||A instanceof U0?-1:1:this.max=this.min),this.max!==-1&&this.max!0}),this.name=A.name||"",this.numbered=GA({data:A.numbered,defaultValue:1,validate:t=>!0}),this.oddOrEven=O(A.oddOrEven,["any","even","odd"]),this.pagePosition=O(A.pagePosition,["any","first","last","only","rest"]),this.relevant=jt(A.relevant),this.use=A.use||"",this.usehref=A.usehref||"",this.desc=null,this.extras=null,this.medium=null,this.occur=null,this.area=new b,this.contentArea=new b,this.draw=new b,this.exclGroup=new b,this.field=new b,this.subform=new b}[ja](){return this[L]?!this.occur||this.occur.max===-1||this[L].numberOfUsea.oddOrEven===t&&a.pagePosition===i);return s||(s=this.pageArea.children.find(a=>a.oddOrEven==="any"&&a.pagePosition===i),s)||(s=this.pageArea.children.find(a=>a.oddOrEven==="any"&&a.pagePosition==="any"),s)?s:this.pageArea.children[0]}},Sl=class extends J{constructor(A){super(eA,"para",!0),this.hAlign=O(A.hAlign,["left","center","justify","justifyAll","radix","right"]),this.id=A.id||"",this.lineHeight=A.lineHeight?hA(A.lineHeight,"0pt"):"",this.marginLeft=A.marginLeft?hA(A.marginLeft,"0pt"):"",this.marginRight=A.marginRight?hA(A.marginRight,"0pt"):"",this.orphans=GA({data:A.orphans,defaultValue:0,validate:t=>t>=0}),this.preserve=A.preserve||"",this.radixOffset=A.radixOffset?hA(A.radixOffset,"0pt"):"",this.spaceAbove=A.spaceAbove?hA(A.spaceAbove,"0pt"):"",this.spaceBelow=A.spaceBelow?hA(A.spaceBelow,"0pt"):"",this.tabDefault=A.tabDefault?hA(this.tabDefault):"",this.tabStops=(A.tabStops||"").trim().split(/\\s+/).map((t,i)=>i%2===1?hA(t):t),this.textIndent=A.textIndent?hA(A.textIndent,"0pt"):"",this.use=A.use||"",this.usehref=A.usehref||"",this.vAlign=O(A.vAlign,["top","bottom","middle"]),this.widows=GA({data:A.widows,defaultValue:0,validate:t=>t>=0}),this.hyphenation=null}[ZA](){let A=lt(this,"hAlign");return this.marginLeft!==""&&(A.paddingLeft=NA(this.marginLeft)),this.marginRight!==""&&(A.paddingight=NA(this.marginRight)),this.spaceAbove!==""&&(A.paddingTop=NA(this.spaceAbove)),this.spaceBelow!==""&&(A.paddingBottom=NA(this.spaceBelow)),this.textIndent!==""&&(A.textIndent=NA(this.textIndent),$f(A)),this.lineHeight>0&&(A.lineHeight=NA(this.lineHeight)),this.tabDefault!==""&&(A.tabSize=NA(this.tabDefault)),this.tabStops.length>0,this.hyphenatation&&Object.assign(A,this.hyphenatation[ZA]()),A}},Fl=class extends J{constructor(A){super(eA,"passwordEdit",!0),this.hScrollPolicy=O(A.hScrollPolicy,["auto","off","on"]),this.id=A.id||"",this.passwordChar=A.passwordChar||"*",this.use=A.use||"",this.usehref=A.usehref||"",this.border=null,this.extras=null,this.margin=null}},Rl=class extends J{constructor(A){super(eA,"pattern",!0),this.id=A.id||"",this.type=O(A.type,["crossHatch","crossDiagonal","diagonalLeft","diagonalRight","horizontal","vertical"]),this.use=A.use||"",this.usehref=A.usehref||"",this.color=null,this.extras=null}[ZA](A){A=A?A[ZA]():"#FFFFFF";let t=this.color?this.color[ZA]():"#000000",i=5,s="repeating-linear-gradient",a=`${A},${A} ${i}px,${t} ${i}px,${t} ${2*i}px`;switch(this.type){case"crossHatch":return`${s}(to top,${a}) ${s}(to right,${a})`;case"crossDiagonal":return`${s}(45deg,${a}) ${s}(-45deg,${a})`;case"diagonalLeft":return`${s}(45deg,${a})`;case"diagonalRight":return`${s}(-45deg,${a})`;case"horizontal":return`${s}(to top,${a})`;case"vertical":return`${s}(to right,${a})`}return""}},Nl=class extends qA{constructor(A){super(eA,"picture"),this.id=A.id||"",this.use=A.use||"",this.usehref=A.usehref||""}},Gl=class extends J{constructor(A){super(eA,"proto",!0),this.appearanceFilter=new b,this.arc=new b,this.area=new b,this.assist=new b,this.barcode=new b,this.bindItems=new b,this.bookend=new b,this.boolean=new b,this.border=new b,this.break=new b,this.breakAfter=new b,this.breakBefore=new b,this.button=new b,this.calculate=new b,this.caption=new b,this.certificate=new b,this.certificates=new b,this.checkButton=new b,this.choiceList=new b,this.color=new b,this.comb=new b,this.connect=new b,this.contentArea=new b,this.corner=new b,this.date=new b,this.dateTime=new b,this.dateTimeEdit=new b,this.decimal=new b,this.defaultUi=new b,this.desc=new b,this.digestMethod=new b,this.digestMethods=new b,this.draw=new b,this.edge=new b,this.encoding=new b,this.encodings=new b,this.encrypt=new b,this.encryptData=new b,this.encryption=new b,this.encryptionMethod=new b,this.encryptionMethods=new b,this.event=new b,this.exData=new b,this.exObject=new b,this.exclGroup=new b,this.execute=new b,this.extras=new b,this.field=new b,this.fill=new b,this.filter=new b,this.float=new b,this.font=new b,this.format=new b,this.handler=new b,this.hyphenation=new b,this.image=new b,this.imageEdit=new b,this.integer=new b,this.issuers=new b,this.items=new b,this.keep=new b,this.keyUsage=new b,this.line=new b,this.linear=new b,this.lockDocument=new b,this.manifest=new b,this.margin=new b,this.mdp=new b,this.medium=new b,this.message=new b,this.numericEdit=new b,this.occur=new b,this.oid=new b,this.oids=new b,this.overflow=new b,this.pageArea=new b,this.pageSet=new b,this.para=new b,this.passwordEdit=new b,this.pattern=new b,this.picture=new b,this.radial=new b,this.reason=new b,this.reasons=new b,this.rectangle=new b,this.ref=new b,this.script=new b,this.setProperty=new b,this.signData=new b,this.signature=new b,this.signing=new b,this.solid=new b,this.speak=new b,this.stipple=new b,this.subform=new b,this.subformSet=new b,this.subjectDN=new b,this.subjectDNs=new b,this.submit=new b,this.text=new b,this.textEdit=new b,this.time=new b,this.timeStamp=new b,this.toolTip=new b,this.traversal=new b,this.traverse=new b,this.ui=new b,this.validate=new b,this.value=new b,this.variables=new b}},Ul=class extends J{constructor(A){super(eA,"radial",!0),this.id=A.id||"",this.type=O(A.type,["toEdge","toCenter"]),this.use=A.use||"",this.usehref=A.usehref||"",this.color=null,this.extras=null}[ZA](A){A=A?A[ZA]():"#FFFFFF";let t=this.color?this.color[ZA]():"#000000";return`radial-gradient(circle at center, ${this.type==="toEdge"?`${A},${t}`:`${t},${A}`})`}},Ml=class extends qA{constructor(A){super(eA,"reason"),this.id=A.id||"",this.name=A.name||"",this.use=A.use||"",this.usehref=A.usehref||""}},Ll=class extends J{constructor(A){super(eA,"reasons",!0),this.id=A.id||"",this.type=O(A.type,["optional","required"]),this.use=A.use||"",this.usehref=A.usehref||"",this.reason=new b}},lg=class extends J{constructor(A){super(eA,"rectangle",!0),this.hand=O(A.hand,["even","left","right"]),this.id=A.id||"",this.use=A.use||"",this.usehref=A.usehref||"",this.corner=new b(4),this.edge=new b(4),this.fill=null}[SA](){var o;let A=this.edge.children.length?this.edge.children[0]:new G0({}),t=A[ZA](),i=Object.create(null);((o=this.fill)==null?void 0:o.presence)==="visible"?Object.assign(i,this.fill[ZA]()):i.fill="transparent",i.strokeWidth=NA(A.presence==="visible"?A.thickness:0),i.stroke=t.color;let a=(this.corner.children.length?this.corner.children[0]:new rg({}))[ZA](),r={name:"svg",children:[{name:"rect",attributes:{xmlns:p0,width:"100%",height:"100%",x:0,y:0,rx:a.radius,ry:a.radius,style:i}}],attributes:{xmlns:p0,style:{overflow:"visible"},width:"100%",height:"100%"}},g=this[MA]()[MA]();return w1(g)?dA.success({name:"div",attributes:{style:{display:"inline",width:"100%",height:"100%"}},children:[r]}):(r.attributes.style.position="absolute",dA.success(r))}},Hl=class extends qA{constructor(A){super(eA,"ref"),this.id=A.id||"",this.use=A.use||"",this.usehref=A.usehref||""}},Jl=class extends qA{constructor(A){super(eA,"script"),this.binding=A.binding||"",this.contentType=A.contentType||"",this.id=A.id||"",this.name=A.name||"",this.runAt=O(A.runAt,["client","both","server"]),this.use=A.use||"",this.usehref=A.usehref||""}},An=class extends J{constructor(A){super(eA,"setProperty"),this.connection=A.connection||"",this.ref=A.ref||"",this.target=A.target||""}},Yl=class extends J{constructor(A){super(eA,"signData",!0),this.id=A.id||"",this.operation=O(A.operation,["sign","clear","verify"]),this.ref=A.ref||"",this.target=A.target||"",this.use=A.use||"",this.usehref=A.usehref||"",this.filter=null,this.manifest=null}},Kl=class extends J{constructor(A){super(eA,"signature",!0),this.id=A.id||"",this.type=O(A.type,["PDF1.3","PDF1.6"]),this.use=A.use||"",this.usehref=A.usehref||"",this.border=null,this.extras=null,this.filter=null,this.manifest=null,this.margin=null}},vl=class extends J{constructor(A){super(eA,"signing",!0),this.id=A.id||"",this.type=O(A.type,["optional","required"]),this.use=A.use||"",this.usehref=A.usehref||"",this.certificate=new b}},ql=class extends J{constructor(A){super(eA,"solid",!0),this.id=A.id||"",this.use=A.use||"",this.usehref=A.usehref||"",this.extras=null}[ZA](A){return A?A[ZA]():"#FFFFFF"}},Tl=class extends qA{constructor(A){super(eA,"speak"),this.disable=GA({data:A.disable,defaultValue:0,validate:t=>t===1}),this.id=A.id||"",this.priority=O(A.priority,["custom","caption","name","toolTip"]),this.rid=A.rid||"",this.use=A.use||"",this.usehref=A.usehref||""}},Pl=class extends J{constructor(A){super(eA,"stipple",!0),this.id=A.id||"",this.rate=GA({data:A.rate,defaultValue:50,validate:t=>t>=0&&t<=100}),this.use=A.use||"",this.usehref=A.usehref||"",this.color=null,this.extras=null}[ZA](A){let t=this.rate/100;return Ce.makeHexColor(Math.round(A.value.r*(1-t)+this.value.r*t),Math.round(A.value.g*(1-t)+this.value.g*t),Math.round(A.value.b*(1-t)+this.value.b*t))}},hg=class extends J{constructor(A){super(eA,"subform",!0),this.access=O(A.access,["open","nonInteractive","protected","readOnly"]),this.allowMacro=GA({data:A.allowMacro,defaultValue:0,validate:t=>t===1}),this.anchorType=O(A.anchorType,["topLeft","bottomCenter","bottomLeft","bottomRight","middleCenter","middleLeft","middleRight","topCenter","topRight"]),this.colSpan=GA({data:A.colSpan,defaultValue:1,validate:t=>t>=1||t===-1}),this.columnWidths=(A.columnWidths||"").trim().split(/\\s+/).map(t=>t==="-1"?-1:hA(t)),this.h=A.h?hA(A.h):"",this.hAlign=O(A.hAlign,["left","center","justify","justifyAll","radix","right"]),this.id=A.id||"",this.layout=O(A.layout,["position","lr-tb","rl-row","rl-tb","row","table","tb"]),this.locale=A.locale||"",this.maxH=hA(A.maxH,"0pt"),this.maxW=hA(A.maxW,"0pt"),this.mergeMode=O(A.mergeMode,["consumeData","matchTemplate"]),this.minH=hA(A.minH,"0pt"),this.minW=hA(A.minW,"0pt"),this.name=A.name||"",this.presence=O(A.presence,["visible","hidden","inactive","invisible"]),this.relevant=jt(A.relevant),this.restoreState=O(A.restoreState,["manual","auto"]),this.scope=O(A.scope,["name","none"]),this.use=A.use||"",this.usehref=A.usehref||"",this.w=A.w?hA(A.w):"",this.x=hA(A.x,"0pt"),this.y=hA(A.y,"0pt"),this.assist=null,this.bind=null,this.bookend=null,this.border=null,this.break=null,this.calculate=null,this.desc=null,this.extras=null,this.keep=null,this.margin=null,this.occur=null,this.overflow=null,this.pageSet=null,this.para=null,this.traversal=null,this.validate=null,this.variables=null,this.area=new b,this.breakAfter=new b,this.breakBefore=new b,this.connect=new b,this.draw=new b,this.event=new b,this.exObject=new b,this.exclGroup=new b,this.field=new b,this.proto=new b,this.setProperty=new b,this.subform=new b,this.subformSet=new b}[xe](){let A=this[MA]();return A instanceof en?A[xe]():A}[J0](){return!0}[pi](){return this.layout.endsWith("-tb")&&this[L].attempt===0&&this[L].numberInLine>0||this[MA]()[pi]()}*[Ys](){yield*b1(this)}[wn](){return au(this)}[d0](A,t){nu(this,A,t)}[x0](){return ru(this)}[di](){var t;let A=this[xe]();return A[di]()?this[L]._isSplittable!==void 0?this[L]._isSplittable:this.layout==="position"||this.layout.includes("row")?(this[L]._isSplittable=!1,!1):this.keep&&this.keep.intact!=="none"?(this[L]._isSplittable=!1,!1):(t=A.layout)!=null&&t.endsWith("-tb")&&A[L].numberInLine!==0?!1:(this[L]._isSplittable=!0,!0):!1}[SA](A){var d;if(ro(this),this.break){if(this.break.after!=="auto"||this.break.afterTarget!==""){let x=new ig({targetType:this.break.after,target:this.break.afterTarget,startNew:this.break.startNew.toString()});x[ie]=this[ie],this[Be](x),this.breakAfter.push(x)}if(this.break.before!=="auto"||this.break.beforeTarget!==""){let x=new sg({targetType:this.break.before,target:this.break.beforeTarget,startNew:this.break.startNew.toString()});x[ie]=this[ie],this[Be](x),this.breakBefore.push(x)}if(this.break.overflowTarget!==""){let x=new cg({target:this.break.overflowTarget,leader:this.break.overflowLeader,trailer:this.break.overflowTrailer});x[ie]=this[ie],this[Be](x),this.overflow.push(x)}this[Ti](this.break),this.break=null}if(this.presence==="hidden"||this.presence==="inactive")return dA.EMPTY;if((this.breakBefore.children.length>1||this.breakAfter.children.length>1)&&k("XFA - Several breakBefore or breakAfter in subforms: please file a bug."),this.breakBefore.children.length>=1){let x=this.breakBefore.children[0];if(UE(x))return dA.breakNode(x)}if((d=this[L])!=null&&d.afterBreakAfter)return dA.EMPTY;ao(this);let t=[],i={id:this[$A],class:[]};p1(this,i.class),this[L]||(this[L]=Object.create(null)),Object.assign(this[L],{children:t,line:null,attributes:i,attempt:0,numberInLine:0,availableSpace:{width:Math.min(this.w||1/0,A.width),height:Math.min(this.h||1/0,A.height)},width:0,height:0,prevHeight:0,currentWidth:0});let s=this[ue](),a=s[L].noLayoutFailure,n=this[di]();if(n||oo(this),!no(this,A))return dA.FAILURE;let r=new Set(["area","draw","exclGroup","field","subform","subformSet"]);if(this.layout.includes("row")){let x=this[xe]().columnWidths;Array.isArray(x)&&x.length>0&&(this[L].columnWidths=x,this[L].currentColumn=0)}let g=lt(this,"anchorType","dimensions","position","presence","border","margin","hAlign"),o=["xfaSubform"],I=zf(this);if(I&&o.push(I),i.style=g,i.class=o,this.name&&(i.xfaName=this.name),this.overflow){let x=this.overflow[We]();x.addLeader&&(x.addLeader=!1,ME(this,x.leader,A))}this[Xs]();let c=this.layout==="lr-tb"||this.layout==="rl-tb",l=c?Ag:1;for(;this[L].attempt=1){let x=this.breakAfter.children[0];if(UE(x))return this[L].afterBreakAfter=u,dA.breakNode(x)}return delete this[L],u}},en=class extends J{constructor(A){super(eA,"subformSet",!0),this.id=A.id||"",this.name=A.name||"",this.relation=O(A.relation,["ordered","choice","unordered"]),this.relevant=jt(A.relevant),this.use=A.use||"",this.usehref=A.usehref||"",this.bookend=null,this.break=null,this.desc=null,this.extras=null,this.occur=null,this.overflow=null,this.breakAfter=new b,this.breakBefore=new b,this.subform=new b,this.subformSet=new b}*[Ys](){yield*b1(this)}[xe](){let A=this[MA]();for(;!(A instanceof hg);)A=A[MA]();return A}[J0](){return!0}},Wl=class extends ce{constructor(A){super(eA,"subjectDN"),this.delimiter=A.delimiter||",",this.id=A.id||"",this.name=A.name||"",this.use=A.use||"",this.usehref=A.usehref||""}[se](){this[P]=new Map(this[P].split(this.delimiter).map(A=>(A=A.split("=",2),A[0]=A[0].trim(),A)))}},Ol=class extends J{constructor(A){super(eA,"subjectDNs",!0),this.id=A.id||"",this.type=O(A.type,["optional","required"]),this.use=A.use||"",this.usehref=A.usehref||"",this.subjectDN=new b}},Zl=class extends J{constructor(A){super(eA,"submit",!0),this.embedPDF=GA({data:A.embedPDF,defaultValue:0,validate:t=>t===1}),this.format=O(A.format,["xdp","formdata","pdf","urlencoded","xfd","xml"]),this.id=A.id||"",this.target=A.target||"",this.textEncoding=so({data:A.textEncoding?A.textEncoding.toLowerCase():"",defaultValue:"",validate:t=>["utf-8","big-five","fontspecific","gbk","gb-18030","gb-2312","ksc-5601","none","shift-jis","ucs-2","utf-16"].includes(t)||t.match(/iso-8859-\\d{2}/)}),this.use=A.use||"",this.usehref=A.usehref||"",this.xdpContent=A.xdpContent||"",this.encrypt=null,this.encryptData=new b,this.signData=new b}},tn=class extends J{constructor(A){super(eA,"template",!0),this.baseProfile=O(A.baseProfile,["full","interactiveForms"]),this.extras=null,this.subform=new b}[se](){this.subform.children.length===0&&k("XFA - No subforms in template node."),this.subform.children.length>=2&&k("XFA - Several subforms in template node: please file a bug."),this[qt]=sx}[di](){return!0}[Bi](A,t){return A.startsWith("#")?[this[As].get(A.slice(1))]:Ni(this,t,A,!0,!0)}*[Of](){var C,B,Q;if(!this.subform.children.length)return dA.success({name:"div",children:[]});this[L]={overflowNode:null,firstUnsplittable:null,currentContentArea:null,currentPageArea:null,noLayoutFailure:!1,pageNumber:1,pagePosition:"first",oddOrEven:"odd",blankOrNotBlank:"nonBlank",paraStack:[]};let A=this.subform.children[0];A.pageSet[ns]();let t=A.pageSet.pageArea.children,i={name:"div",children:[]},s=null,a=null,n=null;if(A.breakBefore.children.length>=1?(a=A.breakBefore.children[0],n=a.target):A.subform.children.length>=1&&A.subform.children[0].breakBefore.children.length>=1?(a=A.subform.children[0].breakBefore.children[0],n=a.target):(C=A.break)!=null&&C.beforeTarget?(a=A.break,n=a.beforeTarget):A.subform.children.length>=1&&((B=A.subform.children[0].break)!=null&&B.beforeTarget)&&(a=A.subform.children[0].break,n=a.beforeTarget),a){let E=this[Bi](n,a[MA]());E instanceof zi&&(s=E,a[L]={})}s||(s=t[0]),s[L]={numberOfUse:1};let r=s[MA]();r[L]={numberOfUse:1,pageIndex:r.pageArea.children.indexOf(s),pageSetIndex:0};let g,o=null,I=null,c=!0,l=0,h=0;for(;;){if(c)l=0;else if(i.children.pop(),++l===ix)return k("XFA - Something goes wrong: please file a bug."),i;g=null,this[L].currentPageArea=s;let E=s[SA]().html;i.children.push(E),o&&(this[L].noLayoutFailure=!0,E.children.push(o[SA](s[L].space).html),o=null),I&&(this[L].noLayoutFailure=!0,E.children.push(I[SA](s[L].space).html),I=null);let f=s.contentArea.children,u=E.children.filter(x=>x.attributes.class.includes("xfaContentarea"));c=!1,this[L].firstUnsplittable=null,this[L].noLayoutFailure=!1;let d=x=>{var m;let p=A[wn]();p&&(c||(c=((m=p.children)==null?void 0:m.length)>0),u[x].children.push(p))};for(let x=h,p=f.length;x0),u[x].children.push(S.html)):!c&&i.children.length>1&&i.children.pop(),i;if(S.isBreak()){let w=S.breakNode;if(d(x),w.targetType==="auto")continue;w.leader&&(o=this[Bi](w.leader,w[MA]()),o=o?o[0]:null),w.trailer&&(I=this[Bi](w.trailer,w[MA]()),I=I?I[0]:null),w.targetType==="pageArea"?(g=w[L].target,x=1/0):w[L].target?(g=w[L].target,h=w[L].index+1,x=1/0):x=w[L].index;continue}if(this[L].overflowNode){let w=this[L].overflowNode;this[L].overflowNode=null;let Y=w[We](),U=Y.target;Y.addLeader=Y.leader!==null,Y.addTrailer=Y.trailer!==null,d(x);let K=x;if(x=1/0,U instanceof zi)g=U;else if(U instanceof _a){let Z=f.indexOf(U);Z!==-1?Z>K?x=Z-1:h=Z:(g=U[MA](),h=g.contentArea.children.indexOf(U))}continue}d(x)}this[L].pageNumber+=1,g&&(g[ja]()?g[L].numberOfUse+=1:g=null),s=g||s[Ci](),yield null}}},Cg=class extends ce{constructor(A){super(eA,"text"),this.id=A.id||"",this.maxChars=GA({data:A.maxChars,defaultValue:0,validate:t=>t>=0}),this.name=A.name||"",this.rid=A.rid||"",this.use=A.use||"",this.usehref=A.usehref||""}[eo](){return!0}[ni](A){return A[de]===me.xhtml.id?(this[P]=A,!0):(k(`XFA - Invalid content in Text: ${A[XA]}.`),!1)}[xi](A){this[P]instanceof J||super[xi](A)}[se](){typeof this[P]=="string"&&(this[P]=this[P].replaceAll(`\\r\n`,`\n`))}[We](){return typeof this[P]=="string"?this[P].split(/[\\u2029\\u2028\\n]/).reduce((A,t)=>(t&&A.push(t),A),[]).join(`\n`):this[P][Se]()}[SA](A){if(typeof this[P]=="string"){let t=A0(this[P]).html;return this[P].includes("\\u2029")?(t.name="div",t.children=[],this[P].split("\\u2029").map(i=>i.split(/[\\u2028\\n]/).reduce((s,a)=>(s.push({name:"span",value:a},{name:"br"}),s),[])).forEach(i=>{t.children.push({name:"p",children:i})})):/[\\u2028\\n]/.test(this[P])&&(t.name="div",t.children=[],this[P].split(/[\\u2028\\n]/).forEach(i=>{t.children.push({name:"span",value:i},{name:"br"})})),dA.success(t)}return this[P][SA](A)}},Bg=class extends J{constructor(A){super(eA,"textEdit",!0),this.allowRichText=GA({data:A.allowRichText,defaultValue:0,validate:t=>t===1}),this.hScrollPolicy=O(A.hScrollPolicy,["auto","off","on"]),this.id=A.id||"",this.multiLine=GA({data:A.multiLine,defaultValue:"",validate:t=>t===0||t===1}),this.use=A.use||"",this.usehref=A.usehref||"",this.vScrollPolicy=O(A.vScrollPolicy,["auto","off","on"]),this.border=null,this.comb=null,this.extras=null,this.margin=null}[SA](A){var a,n;let t=lt(this,"border","font","margin"),i,s=this[MA]()[MA]();return this.multiLine===""&&(this.multiLine=s instanceof gg?1:0),this.multiLine===1?i={name:"textarea",attributes:{dataId:((a=s[Ht])==null?void 0:a[$A])||s[$A],fieldId:s[$A],class:["xfaTextfield"],style:t,"aria-label":N0(s),"aria-required":!1}}:i={name:"input",attributes:{type:"text",dataId:((n=s[Ht])==null?void 0:n[$A])||s[$A],fieldId:s[$A],class:["xfaTextfield"],style:t,"aria-label":N0(s),"aria-required":!1}},yn(s)&&(i.attributes["aria-required"]=!0,i.attributes.required=!0),dA.success({name:"label",attributes:{class:["xfaLabel"]},children:[i]})}},jl=class extends qA{constructor(A){super(eA,"time"),this.id=A.id||"",this.name=A.name||"",this.use=A.use||"",this.usehref=A.usehref||""}[se](){let A=this[P].trim();this[P]=A?new Date(A):null}[SA](A){return A0(this[P]?this[P].toString():"")}},Xl=class extends J{constructor(A){super(eA,"timeStamp"),this.id=A.id||"",this.server=A.server||"",this.type=O(A.type,["optional","required"]),this.use=A.use||"",this.usehref=A.usehref||""}},Vl=class extends qA{constructor(A){super(eA,"toolTip"),this.id=A.id||"",this.rid=A.rid||"",this.use=A.use||"",this.usehref=A.usehref||""}},_l=class extends J{constructor(A){super(eA,"traversal",!0),this.id=A.id||"",this.use=A.use||"",this.usehref=A.usehref||"",this.extras=null,this.traverse=new b}},zl=class extends J{constructor(A){super(eA,"traverse",!0),this.id=A.id||"",this.operation=O(A.operation,["next","back","down","first","left","right","up"]),this.ref=A.ref||"",this.use=A.use||"",this.usehref=A.usehref||"",this.extras=null,this.script=null}get name(){return this.operation}[Za](){return!1}},sn=class extends J{constructor(A){super(eA,"ui",!0),this.id=A.id||"",this.use=A.use||"",this.usehref=A.usehref||"",this.extras=null,this.picture=null,this.barcode=null,this.button=null,this.checkButton=null,this.choiceList=null,this.dateTimeEdit=null,this.defaultUi=null,this.imageEdit=null,this.numericEdit=null,this.passwordEdit=null,this.signature=null,this.textEdit=null}[We](){if(this[L]===void 0){for(let A of Object.getOwnPropertyNames(this)){if(A==="extras"||A==="picture")continue;let t=this[A];if(t instanceof J)return this[L]=t,t}this[L]=null}return this[L]}[SA](A){let t=this[We]();return t?t[SA](A):dA.EMPTY}},$l=class extends J{constructor(A){super(eA,"validate",!0),this.formatTest=O(A.formatTest,["warning","disabled","error"]),this.id=A.id||"",this.nullTest=O(A.nullTest,["disabled","error","warning"]),this.scriptTest=O(A.scriptTest,["error","disabled","warning"]),this.use=A.use||"",this.usehref=A.usehref||"",this.extras=null,this.message=null,this.picture=null,this.script=null}},an=class extends J{constructor(A){super(eA,"value",!0),this.id=A.id||"",this.override=GA({data:A.override,defaultValue:0,validate:t=>t===1}),this.relevant=jt(A.relevant),this.use=A.use||"",this.usehref=A.usehref||"",this.arc=null,this.boolean=null,this.date=null,this.dateTime=null,this.decimal=null,this.exData=null,this.float=null,this.image=null,this.integer=null,this.line=null,this.rectangle=null,this.text=null,this.time=null}[Et](A){var s;let t=this[MA]();if(t instanceof za&&(s=t.ui)!=null&&s.imageEdit){this.image||(this.image=new Ig({}),this[Be](this.image)),this.image[P]=A[P];return}let i=A[XA];if(this[i]!==null){this[i][P]=A[P];return}for(let a of Object.getOwnPropertyNames(this)){let n=this[a];n instanceof J&&(this[a]=null,this[Ti](n))}this[A[XA]]=A,this[Be](A)}[Se](){if(this.exData)return typeof this.exData[P]=="string"?this.exData[P].trim():this.exData[P][Se]().trim();for(let A of Object.getOwnPropertyNames(this)){if(A==="image")continue;let t=this[A];if(t instanceof J)return(t[P]||"").toString().trim()}return null}[SA](A){for(let t of Object.getOwnPropertyNames(this)){let i=this[t];if(i instanceof J)return i[SA](A)}return dA.EMPTY}},Ah=class extends J{constructor(A){super(eA,"variables",!0),this.id=A.id||"",this.use=A.use||"",this.usehref=A.usehref||"",this.boolean=new b,this.date=new b,this.dateTime=new b,this.decimal=new b,this.exData=new b,this.float=new b,this.image=new b,this.integer=new b,this.manifest=new b,this.script=new b,this.text=new b,this.time=new b}[Za](){return!0}},Ks=class{static[Zt](A,t){if(Ks.hasOwnProperty(A)){let i=Ks[A](t);return i[Wf](t),i}}static appearanceFilter(A){return new pc(A)}static arc(A){return new eg(A)}static area(A){return new wc(A)}static assist(A){return new yc(A)}static barcode(A){return new bc(A)}static bind(A){return new Dc(A)}static bindItems(A){return new Va(A)}static bookend(A){return new kc(A)}static boolean(A){return new Sc(A)}static border(A){return new tg(A)}static break(A){return new Fc(A)}static breakAfter(A){return new ig(A)}static breakBefore(A){return new sg(A)}static button(A){return new Rc(A)}static calculate(A){return new Nc(A)}static caption(A){return new Gc(A)}static certificate(A){return new Uc(A)}static certificates(A){return new Mc(A)}static checkButton(A){return new ag(A)}static choiceList(A){return new ng(A)}static color(A){return new Lc(A)}static comb(A){return new Hc(A)}static connect(A){return new Jc(A)}static contentArea(A){return new _a(A)}static corner(A){return new rg(A)}static date(A){return new Yc(A)}static dateTime(A){return new Kc(A)}static dateTimeEdit(A){return new vc(A)}static decimal(A){return new qc(A)}static defaultUi(A){return new Tc(A)}static desc(A){return new Pc(A)}static digestMethod(A){return new Wc(A)}static digestMethods(A){return new Oc(A)}static draw(A){return new gg(A)}static edge(A){return new G0(A)}static encoding(A){return new Zc(A)}static encodings(A){return new jc(A)}static encrypt(A){return new Xc(A)}static encryptData(A){return new Vc(A)}static encryption(A){return new _c(A)}static encryptionMethod(A){return new zc(A)}static encryptionMethods(A){return new $c(A)}static event(A){return new Al(A)}static exData(A){return new el(A)}static exObject(A){return new tl(A)}static exclGroup(A){return new og(A)}static execute(A){return new il(A)}static extras(A){return new sl(A)}static field(A){return new za(A)}static fill(A){return new al(A)}static filter(A){return new nl(A)}static float(A){return new rl(A)}static font(A){return new gl(A)}static format(A){return new ol(A)}static handler(A){return new Il(A)}static hyphenation(A){return new cl(A)}static image(A){return new Ig(A)}static imageEdit(A){return new ll(A)}static integer(A){return new hl(A)}static issuers(A){return new Cl(A)}static items(A){return new $a(A)}static keep(A){return new Bl(A)}static keyUsage(A){return new Ql(A)}static line(A){return new El(A)}static linear(A){return new fl(A)}static lockDocument(A){return new ul(A)}static manifest(A){return new dl(A)}static margin(A){return new xl(A)}static mdp(A){return new ml(A)}static medium(A){return new pl(A)}static message(A){return new wl(A)}static numericEdit(A){return new yl(A)}static occur(A){return new bl(A)}static oid(A){return new Dl(A)}static oids(A){return new kl(A)}static overflow(A){return new cg(A)}static pageArea(A){return new zi(A)}static pageSet(A){return new U0(A)}static para(A){return new Sl(A)}static passwordEdit(A){return new Fl(A)}static pattern(A){return new Rl(A)}static picture(A){return new Nl(A)}static proto(A){return new Gl(A)}static radial(A){return new Ul(A)}static reason(A){return new Ml(A)}static reasons(A){return new Ll(A)}static rectangle(A){return new lg(A)}static ref(A){return new Hl(A)}static script(A){return new Jl(A)}static setProperty(A){return new An(A)}static signData(A){return new Yl(A)}static signature(A){return new Kl(A)}static signing(A){return new vl(A)}static solid(A){return new ql(A)}static speak(A){return new Tl(A)}static stipple(A){return new Pl(A)}static subform(A){return new hg(A)}static subformSet(A){return new en(A)}static subjectDN(A){return new Wl(A)}static subjectDNs(A){return new Ol(A)}static submit(A){return new Zl(A)}static template(A){return new tn(A)}static text(A){return new Cg(A)}static textEdit(A){return new Bg(A)}static time(A){return new jl(A)}static timeStamp(A){return new Xl(A)}static toolTip(A){return new Vl(A)}static traversal(A){return new _l(A)}static traverse(A){return new zl(A)}static ui(A){return new sn(A)}static validate(A){return new $l(A)}static value(A){return new an(A)}static variables(A){return new Ah(A)}},LE=me.datasets.id;function Xn(e){let A=new Cg({});return A[P]=e,A}var eh=class{constructor(A){var t;this.root=A,this.datasets=A.datasets,this.data=((t=A.datasets)==null?void 0:t.data)||new Jt(me.datasets.id,"data"),this.emptyMerge=this.data[Ue]().length===0,this.root.form=this.form=A.template[Tt]()}_isConsumeData(){return!this.emptyMerge&&this._mergeMode}_isMatchTemplate(){return!this._isConsumeData()}bind(){return this._bindElement(this.form,this.data),this.form}getData(){return this.data}_bindValue(A,t,i){var s,a;if(A[Ht]=t,A[Oa]())if(t[rs]()){let n=t[u1]();A[Et](Xn(n))}else if(A instanceof za&&((a=(s=A.ui)==null?void 0:s.choiceList)==null?void 0:a.open)==="multiSelect"){let n=t[Ue]().map(r=>r[P].trim()).join(`\n`);A[Et](Xn(n))}else this._isConsumeData()&&k("XFA - Nodes haven\'t the same type.");else!t[rs]()||this._isMatchTemplate()?this._bindElement(A,t):k("XFA - Nodes haven\'t the same type.")}_findDataByNameToConsume(A,t,i,s){if(!A)return null;let a,n;for(let r=0;r<3;r++){for(a=i[xa](A,!1,!0);n=a.next().value,!!n;)if(t===n[rs]())return n;if(i[de]===me.datasets.id&&i[XA]==="data")break;i=i[MA]()}return s?(a=this.data[xa](A,!0,!1),n=a.next().value,n||(a=this.data[Bc](A,!0),n=a.next().value,n!=null&&n[rs]())?n:null):null}_setProperties(A,t){if(A.hasOwnProperty("setProperty"))for(let{ref:i,target:s,connection:a}of A.setProperty.children){if(a||!i)continue;let n=Ni(this.root,t,i,!1,!1);if(!n){k(`XFA - Invalid reference: ${i}.`);continue}let[r]=n;if(!r[Mi](this.data)){k("XFA - Invalid node: must be a data node.");continue}let g=Ni(this.root,A,s,!1,!1);if(!g){k(`XFA - Invalid target: ${s}.`);continue}let[o]=g;if(!o[Mi](A)){k("XFA - Invalid target: must be a property or subproperty.");continue}let I=o[MA]();if(o instanceof An||I instanceof An){k("XFA - Invalid target: cannot be a setProperty or one of its properties.");continue}if(o instanceof Va||I instanceof Va){k("XFA - Invalid target: cannot be a bindItems or one of its properties.");continue}let c=r[Se](),l=o[XA];if(o instanceof Xa){let h=Object.create(null);h[l]=c;let C=Reflect.construct(Object.getPrototypeOf(I).constructor,[h]);I[l]=C[l];continue}if(!o.hasOwnProperty(P)){k("XFA - Invalid node to use in setProperty");continue}o[Ht]=r,o[P]=c,o[se]()}}_bindItems(A,t){if(!A.hasOwnProperty("items")||!A.hasOwnProperty("bindItems")||A.bindItems.isEmpty())return;for(let a of A.items.children)A[Ti](a);A.items.clear();let i=new $a({}),s=new $a({});A[Be](i),A.items.push(i),A[Be](s),A.items.push(s);for(let{ref:a,labelRef:n,valueRef:r,connection:g}of A.bindItems.children){if(g||!a)continue;let o=Ni(this.root,t,a,!1,!1);if(!o){k(`XFA - Invalid reference: ${a}.`);continue}for(let I of o){if(!I[Mi](this.datasets)){k(`XFA - Invalid ref (${a}): must be a datasets child.`);continue}let c=Ni(this.root,I,n,!0,!1);if(!c){k(`XFA - Invalid label: ${n}.`);continue}let[l]=c;if(!l[Mi](this.datasets)){k("XFA - Invalid label: must be a datasets child.");continue}let h=Ni(this.root,I,r,!0,!1);if(!h){k(`XFA - Invalid value: ${r}.`);continue}let[C]=h;if(!C[Mi](this.datasets)){k("XFA - Invalid value: must be a datasets child.");continue}let B=Xn(l[Se]()),Q=Xn(C[Se]());i[Be](B),i.text.push(B),s[Be](Q),s.text.push(Q)}}}_bindOccurrences(A,t,i){let s;if(t.length>1&&(s=A[Tt](),s[Ti](s.occur),s.occur=null),this._bindValue(A,t[0],i),this._setProperties(A,t[0]),this._bindItems(A,t[0]),t.length===1)return;let a=A[MA](),n=A[XA],r=a[Qc](A);for(let g=1,o=t.length;gg.name===A.name).length:a=i[s].children.length;let n=i[Qc](A)+1,r=t.initial-a;if(r){let g=A[Tt]();g[Ti](g.occur),g.occur=null,i[s].push(g),i[lr](n,g);for(let o=1;o0)this._bindOccurrences(s,[c[0]],null);else if(this.emptyMerge){let l=t[de]===LE?-1:t[de],h=s[Ht]=new Jt(l,s.name||"root");t[Be](h),this._bindElement(s,h)}continue}if(!s[J0]())continue;let a=!1,n=null,r=null,g=null;if(s.bind){switch(s.bind.match){case"none":this._setAndBind(s,t);continue;case"global":a=!0;break;case"dataRef":if(!s.bind.ref){k(`XFA - ref is empty in node ${s[XA]}.`),this._setAndBind(s,t);continue}r=s.bind.ref;break;default:break}s.bind.picture&&(n=s.bind.picture[P])}let[o,I]=this._getOccurInfo(s);if(r)if(g=Ni(this.root,t,r,!0,!1),g===null){if(g=ex(this.data,t,r),!g)continue;this._isConsumeData()&&(g[$t]=!0),this._setAndBind(s,g);continue}else this._isConsumeData()&&(g=g.filter(c=>!c[$t])),g.length>I?g=g.slice(0,I):g.length===0&&(g=null),g&&this._isConsumeData()&&g.forEach(c=>{c[$t]=!0});else{if(!s.name){this._setAndBind(s,t);continue}if(this._isConsumeData()){let c=[];for(;c.length0?c:null}else{if(g=t[xa](s.name,!1,this.emptyMerge).next().value,!g){if(o===0){i.push(s);continue}let c=t[de]===LE?-1:t[de];g=s[Ht]=new Jt(c,s.name),this.emptyMerge&&(g[$t]=!0),t[Be](g),this._setAndBind(s,g);continue}this.emptyMerge&&(g[$t]=!0),g=[g]}}g?this._bindOccurrences(s,g,n):o>0?this._setAndBind(s,t):i.push(s)}i.forEach(s=>s[MA]()[Ti](s))}},th=class{constructor(A,t){this.data=t,this.dataset=A.datasets||null}serialize(A){let t=[[-1,this.data[Ue]()]];for(;t.length>0;){let s=t.at(-1),[a,n]=s;if(a+1===n.length){t.pop();continue}let r=n[++s[0]],g=A.get(r[$A]);if(g)r[Et](g);else{let I=r[Tf]();for(let c of I.values()){let l=A.get(c[$A]);if(l){c[Et](l);break}}}let o=r[Ue]();o.length>0&&t.push([-1,o])}let i=[\'\'];if(this.dataset)for(let s of this.dataset[Ue]())s[XA]!=="data"&&s[pa](i);return this.data[pa](i),i.push(""),i.join("")}},j=me.config.id,ih=class extends J{constructor(A){super(j,"acrobat",!0),this.acrobat7=null,this.autoSave=null,this.common=null,this.validate=null,this.validateApprovalSignatures=null,this.submitUrl=new b}},sh=class extends J{constructor(A){super(j,"acrobat7",!0),this.dynamicRender=null}},ah=class extends _A{constructor(A){super(j,"ADBE_JSConsole",["delegate","Enable","Disable"])}},nh=class extends _A{constructor(A){super(j,"ADBE_JSDebugger",["delegate","Enable","Disable"])}},rh=class extends pe{constructor(A){super(j,"addSilentPrint")}},gh=class extends pe{constructor(A){super(j,"addViewerPreferences")}},oh=class extends $r{constructor(A){super(j,"adjustData")}},Ih=class extends yt{constructor(A){super(j,"adobeExtensionLevel",0,t=>t>=1&&t<=8)}},ch=class extends J{constructor(A){super(j,"agent",!0),this.name=A.name?A.name.trim():"",this.common=new b}},lh=class extends ce{constructor(A){super(j,"alwaysEmbed")}},hh=class extends qA{constructor(A){super(j,"amd")}},Ch=class extends J{constructor(A){super(j,"area"),this.level=GA({data:A.level,defaultValue:0,validate:t=>t>=1&&t<=3}),this.name=O(A.name,["","barcode","coreinit","deviceDriver","font","general","layout","merge","script","signature","sourceSet","templateCache"])}},Bh=class extends _A{constructor(A){super(j,"attributes",["preserve","delegate","ignore"])}},Qh=class extends _A{constructor(A){super(j,"autoSave",["disabled","enabled"])}},Eh=class extends qA{constructor(A){super(j,"base")}},fh=class extends J{constructor(A){super(j,"batchOutput"),this.format=O(A.format,["none","concat","zip","zipCompress"])}},uh=class extends ce{constructor(A){super(j,"behaviorOverride")}[se](){this[P]=new Map(this[P].trim().split(/\\s+/).filter(A=>A.includes(":")).map(A=>A.split(":",2)))}},dh=class extends J{constructor(A){super(j,"cache",!0),this.templateCache=null}},xh=class extends pe{constructor(A){super(j,"change")}},mh=class extends J{constructor(A){super(j,"common",!0),this.data=null,this.locale=null,this.localeSet=null,this.messaging=null,this.suppressBanner=null,this.template=null,this.validationMessaging=null,this.versionControl=null,this.log=new b}},ph=class extends J{constructor(A){super(j,"compress"),this.scope=O(A.scope,["imageOnly","document"])}},wh=class extends pe{constructor(A){super(j,"compressLogicalStructure")}},yh=class extends $r{constructor(A){super(j,"compressObjectStream")}},bh=class extends J{constructor(A){super(j,"compression",!0),this.compressLogicalStructure=null,this.compressObjectStream=null,this.level=null,this.type=null}},Dh=class extends J{constructor(A){super(j,"config",!0),this.acrobat=null,this.present=null,this.trace=null,this.agent=new b}},kh=class extends _A{constructor(A){super(j,"conformance",["A","B"])}},Sh=class extends pe{constructor(A){super(j,"contentCopy")}},Fh=class extends yt{constructor(A){super(j,"copies",1,t=>t>=1)}},Rh=class extends qA{constructor(A){super(j,"creator")}},Nh=class extends yt{constructor(A){super(j,"currentPage",0,t=>t>=0)}},Gh=class extends J{constructor(A){super(j,"data",!0),this.adjustData=null,this.attributes=null,this.incrementalLoad=null,this.outputXSL=null,this.range=null,this.record=null,this.startNode=null,this.uri=null,this.window=null,this.xsl=null,this.excludeNS=new b,this.transform=new b}},Uh=class extends J{constructor(A){super(j,"debug",!0),this.uri=null}},Mh=class extends ce{constructor(A){super(j,"defaultTypeface"),this.writingScript=O(A.writingScript,["*","Arabic","Cyrillic","EastEuropeanRoman","Greek","Hebrew","Japanese","Korean","Roman","SimplifiedChinese","Thai","TraditionalChinese","Vietnamese"])}},Lh=class extends _A{constructor(A){super(j,"destination",["pdf","pcl","ps","webClient","zpl"])}},Hh=class extends pe{constructor(A){super(j,"documentAssembly")}},Jh=class extends J{constructor(A){super(j,"driver",!0),this.name=A.name?A.name.trim():"",this.fontInfo=null,this.xdc=null}},Yh=class extends _A{constructor(A){super(j,"duplexOption",["simplex","duplexFlipLongEdge","duplexFlipShortEdge"])}},Kh=class extends _A{constructor(A){super(j,"dynamicRender",["forbidden","required"])}},vh=class extends pe{constructor(A){super(j,"embed")}},qh=class extends pe{constructor(A){super(j,"encrypt")}},Th=class extends J{constructor(A){super(j,"encryption",!0),this.encrypt=null,this.encryptionLevel=null,this.permissions=null}},Ph=class extends _A{constructor(A){super(j,"encryptionLevel",["40bit","128bit"])}},Wh=class extends qA{constructor(A){super(j,"enforce")}},Oh=class extends J{constructor(A){super(j,"equate"),this.force=GA({data:A.force,defaultValue:1,validate:t=>t===0}),this.from=A.from||"",this.to=A.to||""}},Zh=class extends J{constructor(A){super(j,"equateRange"),this.from=A.from||"",this.to=A.to||"",this._unicodeRange=A.unicodeRange||""}get unicodeRange(){let A=[],t=/U\\+([0-9a-fA-F]+)/,i=this._unicodeRange;for(let s of i.split(",").map(a=>a.trim()).filter(a=>!!a))s=s.split("-",2).map(a=>{let n=a.match(t);return n?parseInt(n[1],16):0}),s.length===1&&s.push(s[0]),A.push(s);return nA(this,"unicodeRange",A)}},jh=class extends ce{constructor(A){super(j,"exclude")}[se](){this[P]=this[P].trim().split(/\\s+/).filter(A=>A&&["calculate","close","enter","exit","initialize","ready","validate"].includes(A))}},Xh=class extends qA{constructor(A){super(j,"excludeNS")}},Vh=class extends _A{constructor(A){super(j,"flipLabel",["usePrinterSetting","on","off"])}},_h=class extends J{constructor(A){super(j,"fontInfo",!0),this.embed=null,this.map=null,this.subsetBelow=null,this.alwaysEmbed=new b,this.defaultTypeface=new b,this.neverEmbed=new b}},zh=class extends pe{constructor(A){super(j,"formFieldFilling")}},$h=class extends qA{constructor(A){super(j,"groupParent")}},AC=class extends _A{constructor(A){super(j,"ifEmpty",["dataValue","dataGroup","ignore","remove"])}},eC=class extends qA{constructor(A){super(j,"includeXDPContent")}},tC=class extends _A{constructor(A){super(j,"incrementalLoad",["none","forwardOnly"])}},iC=class extends pe{constructor(A){super(j,"incrementalMerge")}},sC=class extends pe{constructor(A){super(j,"interactive")}},aC=class extends _A{constructor(A){super(j,"jog",["usePrinterSetting","none","pageSet"])}},nC=class extends J{constructor(A){super(j,"labelPrinter",!0),this.name=O(A.name,["zpl","dpl","ipl","tcpl"]),this.batchOutput=null,this.flipLabel=null,this.fontInfo=null,this.xdc=null}},rC=class extends _A{constructor(A){super(j,"layout",["paginate","panel"])}},gC=class extends yt{constructor(A){super(j,"level",0,t=>t>0)}},oC=class extends pe{constructor(A){super(j,"linearized")}},IC=class extends qA{constructor(A){super(j,"locale")}},cC=class extends qA{constructor(A){super(j,"localeSet")}},lC=class extends J{constructor(A){super(j,"log",!0),this.mode=null,this.threshold=null,this.to=null,this.uri=null}},hC=class extends J{constructor(A){super(j,"map",!0),this.equate=new b,this.equateRange=new b}},CC=class extends J{constructor(A){super(j,"mediumInfo",!0),this.map=null}},BC=class extends J{constructor(A){super(j,"message",!0),this.msgId=null,this.severity=null}},QC=class extends J{constructor(A){super(j,"messaging",!0),this.message=new b}},EC=class extends _A{constructor(A){super(j,"mode",["append","overwrite"])}},fC=class extends pe{constructor(A){super(j,"modifyAnnots")}},uC=class extends yt{constructor(A){super(j,"msgId",1,t=>t>=1)}},dC=class extends qA{constructor(A){super(j,"nameAttr")}},xC=class extends ce{constructor(A){super(j,"neverEmbed")}},mC=class extends yt{constructor(A){super(j,"numberOfCopies",null,t=>t>=2&&t<=5)}},pC=class extends J{constructor(A){super(j,"openAction",!0),this.destination=null}},wC=class extends J{constructor(A){super(j,"output",!0),this.to=null,this.type=null,this.uri=null}},yC=class extends qA{constructor(A){super(j,"outputBin")}},bC=class extends J{constructor(A){super(j,"outputXSL",!0),this.uri=null}},DC=class extends _A{constructor(A){super(j,"overprint",["none","both","draw","field"])}},kC=class extends qA{constructor(A){super(j,"packets")}[se](){this[P]!=="*"&&(this[P]=this[P].trim().split(/\\s+/).filter(A=>["config","datasets","template","xfdf","xslt"].includes(A)))}},SC=class extends J{constructor(A){super(j,"pageOffset"),this.x=GA({data:A.x,defaultValue:"useXDCSetting",validate:t=>!0}),this.y=GA({data:A.y,defaultValue:"useXDCSetting",validate:t=>!0})}},FC=class extends qA{constructor(A){super(j,"pageRange")}[se](){let A=this[P].trim().split(/\\s+/).map(i=>parseInt(i,10)),t=[];for(let i=0,s=A.length;i!1)}},UC=class extends J{constructor(A){super(j,"pcl",!0),this.name=A.name||"",this.batchOutput=null,this.fontInfo=null,this.jog=null,this.mediumInfo=null,this.outputBin=null,this.pageOffset=null,this.staple=null,this.xdc=null}},MC=class extends J{constructor(A){super(j,"pdf",!0),this.name=A.name||"",this.adobeExtensionLevel=null,this.batchOutput=null,this.compression=null,this.creator=null,this.encryption=null,this.fontInfo=null,this.interactive=null,this.linearized=null,this.openAction=null,this.pdfa=null,this.producer=null,this.renderPolicy=null,this.scriptModel=null,this.silentPrint=null,this.submitFormat=null,this.tagged=null,this.version=null,this.viewerPreferences=null,this.xdc=null}},LC=class extends J{constructor(A){super(j,"pdfa",!0),this.amd=null,this.conformance=null,this.includeXDPContent=null,this.part=null}},HC=class extends J{constructor(A){super(j,"permissions",!0),this.accessibleContent=null,this.change=null,this.contentCopy=null,this.documentAssembly=null,this.formFieldFilling=null,this.modifyAnnots=null,this.plaintextMetadata=null,this.print=null,this.printHighQuality=null}},JC=class extends pe{constructor(A){super(j,"pickTrayByPDFSize")}},YC=class extends qA{constructor(A){super(j,"picture")}},KC=class extends pe{constructor(A){super(j,"plaintextMetadata")}},vC=class extends _A{constructor(A){super(j,"presence",["preserve","dissolve","dissolveStructure","ignore","remove"])}},qC=class extends J{constructor(A){super(j,"present",!0),this.behaviorOverride=null,this.cache=null,this.common=null,this.copies=null,this.destination=null,this.incrementalMerge=null,this.layout=null,this.output=null,this.overprint=null,this.pagination=null,this.paginationOverride=null,this.script=null,this.validate=null,this.xdp=null,this.driver=new b,this.labelPrinter=new b,this.pcl=new b,this.pdf=new b,this.ps=new b,this.submitUrl=new b,this.webClient=new b,this.zpl=new b}},TC=class extends pe{constructor(A){super(j,"print")}},PC=class extends pe{constructor(A){super(j,"printHighQuality")}},WC=class extends _A{constructor(A){super(j,"printScaling",["appdefault","noScaling"])}},OC=class extends qA{constructor(A){super(j,"printerName")}},ZC=class extends qA{constructor(A){super(j,"producer")}},jC=class extends J{constructor(A){super(j,"ps",!0),this.name=A.name||"",this.batchOutput=null,this.fontInfo=null,this.jog=null,this.mediumInfo=null,this.outputBin=null,this.staple=null,this.xdc=null}},XC=class extends ce{constructor(A){super(j,"range")}[se](){this[P]=this[P].trim().split(/\\s*,\\s*/,2).map(A=>A.split("-").map(t=>parseInt(t.trim(),10))).filter(A=>A.every(t=>!isNaN(t))).map(A=>(A.length===1&&A.push(A[0]),A))}},VC=class extends ce{constructor(A){super(j,"record")}[se](){this[P]=this[P].trim();let A=parseInt(this[P],10);!isNaN(A)&&A>=0&&(this[P]=A)}},_C=class extends ce{constructor(A){super(j,"relevant")}[se](){this[P]=this[P].trim().split(/\\s+/)}},zC=class extends ce{constructor(A){super(j,"rename")}[se](){this[P]=this[P].trim(),(this[P].toLowerCase().startsWith("xml")||new RegExp("[\\\\p{L}_][\\\\p{L}\\\\d._\\\\p{M}-]*","u").test(this[P]))&&k("XFA - Rename: invalid XFA name")}},$C=class extends _A{constructor(A){super(j,"renderPolicy",["server","client"])}},AB=class extends _A{constructor(A){super(j,"runScripts",["both","client","none","server"])}},eB=class extends J{constructor(A){super(j,"script",!0),this.currentPage=null,this.exclude=null,this.runScripts=null}},tB=class extends _A{constructor(A){super(j,"scriptModel",["XFA","none"])}},iB=class extends _A{constructor(A){super(j,"severity",["ignore","error","information","trace","warning"])}},sB=class extends J{constructor(A){super(j,"silentPrint",!0),this.addSilentPrint=null,this.printerName=null}},aB=class extends J{constructor(A){super(j,"staple"),this.mode=O(A.mode,["usePrinterSetting","on","off"])}},nB=class extends qA{constructor(A){super(j,"startNode")}},rB=class extends yt{constructor(A){super(j,"startPage",0,t=>!0)}},gB=class extends _A{constructor(A){super(j,"submitFormat",["html","delegate","fdf","xml","pdf"])}},oB=class extends qA{constructor(A){super(j,"submitUrl")}},IB=class extends yt{constructor(A){super(j,"subsetBelow",100,t=>t>=0&&t<=100)}},cB=class extends pe{constructor(A){super(j,"suppressBanner")}},lB=class extends pe{constructor(A){super(j,"tagged")}},hB=class extends J{constructor(A){super(j,"template",!0),this.base=null,this.relevant=null,this.startPage=null,this.uri=null,this.xsl=null}},CB=class extends _A{constructor(A){super(j,"threshold",["trace","error","information","warning"])}},BB=class extends _A{constructor(A){super(j,"to",["null","memory","stderr","stdout","system","uri"])}},QB=class extends J{constructor(A){super(j,"templateCache"),this.maxEntries=GA({data:A.maxEntries,defaultValue:5,validate:t=>t>=0})}},EB=class extends J{constructor(A){super(j,"trace",!0),this.area=new b}},fB=class extends J{constructor(A){super(j,"transform",!0),this.groupParent=null,this.ifEmpty=null,this.nameAttr=null,this.picture=null,this.presence=null,this.rename=null,this.whitespace=null}},uB=class extends _A{constructor(A){super(j,"type",["none","ascii85","asciiHex","ccittfax","flate","lzw","runLength","native","xdp","mergedXDP"])}},dB=class extends qA{constructor(A){super(j,"uri")}},xB=class extends _A{constructor(A){super(j,"validate",["preSubmit","prePrint","preExecute","preSave"])}},mB=class extends ce{constructor(A){super(j,"validateApprovalSignatures")}[se](){this[P]=this[P].trim().split(/\\s+/).filter(A=>["docReady","postSign"].includes(A))}},pB=class extends _A{constructor(A){super(j,"validationMessaging",["allMessagesIndividually","allMessagesTogether","firstMessageOnly","noMessages"])}},wB=class extends _A{constructor(A){super(j,"version",["1.7","1.6","1.5","1.4","1.3","1.2"])}},yB=class extends J{constructor(A){super(j,"VersionControl"),this.outputBelow=O(A.outputBelow,["warn","error","update"]),this.sourceAbove=O(A.sourceAbove,["warn","error"]),this.sourceBelow=O(A.sourceBelow,["update","maintain"])}},bB=class extends J{constructor(A){super(j,"viewerPreferences",!0),this.ADBE_JSConsole=null,this.ADBE_JSDebugger=null,this.addViewerPreferences=null,this.duplexOption=null,this.enforce=null,this.numberOfCopies=null,this.pageRange=null,this.pickTrayByPDFSize=null,this.printScaling=null}},DB=class extends J{constructor(A){super(j,"webClient",!0),this.name=A.name?A.name.trim():"",this.fontInfo=null,this.xdc=null}},kB=class extends _A{constructor(A){super(j,"whitespace",["preserve","ltrim","normalize","rtrim","trim"])}},SB=class extends ce{constructor(A){super(j,"window")}[se](){let A=this[P].trim().split(/\\s*,\\s*/,2).map(t=>parseInt(t,10));if(A.some(t=>isNaN(t))){this[P]=[0,0];return}A.length===1&&A.push(A[0]),this[P]=A}},FB=class extends J{constructor(A){super(j,"xdc",!0),this.uri=new b,this.xsl=new b}},RB=class extends J{constructor(A){super(j,"xdp",!0),this.packets=null}},NB=class extends J{constructor(A){super(j,"xsl",!0),this.debug=null,this.uri=null}},GB=class extends J{constructor(A){super(j,"zpl",!0),this.name=A.name?A.name.trim():"",this.batchOutput=null,this.flipLabel=null,this.fontInfo=null,this.xdc=null}},vs=class{static[Zt](A,t){if(vs.hasOwnProperty(A))return vs[A](t)}static acrobat(A){return new ih(A)}static acrobat7(A){return new sh(A)}static ADBE_JSConsole(A){return new ah(A)}static ADBE_JSDebugger(A){return new nh(A)}static addSilentPrint(A){return new rh(A)}static addViewerPreferences(A){return new gh(A)}static adjustData(A){return new oh(A)}static adobeExtensionLevel(A){return new Ih(A)}static agent(A){return new ch(A)}static alwaysEmbed(A){return new lh(A)}static amd(A){return new hh(A)}static area(A){return new Ch(A)}static attributes(A){return new Bh(A)}static autoSave(A){return new Qh(A)}static base(A){return new Eh(A)}static batchOutput(A){return new fh(A)}static behaviorOverride(A){return new uh(A)}static cache(A){return new dh(A)}static change(A){return new xh(A)}static common(A){return new mh(A)}static compress(A){return new ph(A)}static compressLogicalStructure(A){return new wh(A)}static compressObjectStream(A){return new yh(A)}static compression(A){return new bh(A)}static config(A){return new Dh(A)}static conformance(A){return new kh(A)}static contentCopy(A){return new Sh(A)}static copies(A){return new Fh(A)}static creator(A){return new Rh(A)}static currentPage(A){return new Nh(A)}static data(A){return new Gh(A)}static debug(A){return new Uh(A)}static defaultTypeface(A){return new Mh(A)}static destination(A){return new Lh(A)}static documentAssembly(A){return new Hh(A)}static driver(A){return new Jh(A)}static duplexOption(A){return new Yh(A)}static dynamicRender(A){return new Kh(A)}static embed(A){return new vh(A)}static encrypt(A){return new qh(A)}static encryption(A){return new Th(A)}static encryptionLevel(A){return new Ph(A)}static enforce(A){return new Wh(A)}static equate(A){return new Oh(A)}static equateRange(A){return new Zh(A)}static exclude(A){return new jh(A)}static excludeNS(A){return new Xh(A)}static flipLabel(A){return new Vh(A)}static fontInfo(A){return new _h(A)}static formFieldFilling(A){return new zh(A)}static groupParent(A){return new $h(A)}static ifEmpty(A){return new AC(A)}static includeXDPContent(A){return new eC(A)}static incrementalLoad(A){return new tC(A)}static incrementalMerge(A){return new iC(A)}static interactive(A){return new sC(A)}static jog(A){return new aC(A)}static labelPrinter(A){return new nC(A)}static layout(A){return new rC(A)}static level(A){return new gC(A)}static linearized(A){return new oC(A)}static locale(A){return new IC(A)}static localeSet(A){return new cC(A)}static log(A){return new lC(A)}static map(A){return new hC(A)}static mediumInfo(A){return new CC(A)}static message(A){return new BC(A)}static messaging(A){return new QC(A)}static mode(A){return new EC(A)}static modifyAnnots(A){return new fC(A)}static msgId(A){return new uC(A)}static nameAttr(A){return new dC(A)}static neverEmbed(A){return new xC(A)}static numberOfCopies(A){return new mC(A)}static openAction(A){return new pC(A)}static output(A){return new wC(A)}static outputBin(A){return new yC(A)}static outputXSL(A){return new bC(A)}static overprint(A){return new DC(A)}static packets(A){return new kC(A)}static pageOffset(A){return new SC(A)}static pageRange(A){return new FC(A)}static pagination(A){return new RC(A)}static paginationOverride(A){return new NC(A)}static part(A){return new GC(A)}static pcl(A){return new UC(A)}static pdf(A){return new MC(A)}static pdfa(A){return new LC(A)}static permissions(A){return new HC(A)}static pickTrayByPDFSize(A){return new JC(A)}static picture(A){return new YC(A)}static plaintextMetadata(A){return new KC(A)}static presence(A){return new vC(A)}static present(A){return new qC(A)}static print(A){return new TC(A)}static printHighQuality(A){return new PC(A)}static printScaling(A){return new WC(A)}static printerName(A){return new OC(A)}static producer(A){return new ZC(A)}static ps(A){return new jC(A)}static range(A){return new XC(A)}static record(A){return new VC(A)}static relevant(A){return new _C(A)}static rename(A){return new zC(A)}static renderPolicy(A){return new $C(A)}static runScripts(A){return new AB(A)}static script(A){return new eB(A)}static scriptModel(A){return new tB(A)}static severity(A){return new iB(A)}static silentPrint(A){return new sB(A)}static staple(A){return new aB(A)}static startNode(A){return new nB(A)}static startPage(A){return new rB(A)}static submitFormat(A){return new gB(A)}static submitUrl(A){return new oB(A)}static subsetBelow(A){return new IB(A)}static suppressBanner(A){return new cB(A)}static tagged(A){return new lB(A)}static template(A){return new hB(A)}static templateCache(A){return new QB(A)}static threshold(A){return new CB(A)}static to(A){return new BB(A)}static trace(A){return new EB(A)}static transform(A){return new fB(A)}static type(A){return new uB(A)}static uri(A){return new dB(A)}static validate(A){return new xB(A)}static validateApprovalSignatures(A){return new mB(A)}static validationMessaging(A){return new pB(A)}static version(A){return new wB(A)}static versionControl(A){return new yB(A)}static viewerPreferences(A){return new bB(A)}static webClient(A){return new DB(A)}static whitespace(A){return new kB(A)}static window(A){return new SB(A)}static xdc(A){return new FB(A)}static xdp(A){return new RB(A)}static xsl(A){return new NB(A)}static zpl(A){return new GB(A)}},Kt=me.connectionSet.id,UB=class extends J{constructor(A){super(Kt,"connectionSet",!0),this.wsdlConnection=new b,this.xmlConnection=new b,this.xsdConnection=new b}},MB=class extends J{constructor(A){super(Kt,"effectiveInputPolicy"),this.id=A.id||"",this.name=A.name||"",this.use=A.use||"",this.usehref=A.usehref||""}},LB=class extends J{constructor(A){super(Kt,"effectiveOutputPolicy"),this.id=A.id||"",this.name=A.name||"",this.use=A.use||"",this.usehref=A.usehref||""}},HB=class extends qA{constructor(A){super(Kt,"operation"),this.id=A.id||"",this.input=A.input||"",this.name=A.name||"",this.output=A.output||"",this.use=A.use||"",this.usehref=A.usehref||""}},JB=class extends qA{constructor(A){super(Kt,"rootElement"),this.id=A.id||"",this.name=A.name||"",this.use=A.use||"",this.usehref=A.usehref||""}},YB=class extends qA{constructor(A){super(Kt,"soapAction"),this.id=A.id||"",this.name=A.name||"",this.use=A.use||"",this.usehref=A.usehref||""}},KB=class extends qA{constructor(A){super(Kt,"soapAddress"),this.id=A.id||"",this.name=A.name||"",this.use=A.use||"",this.usehref=A.usehref||""}},vB=class extends qA{constructor(A){super(Kt,"uri"),this.id=A.id||"",this.name=A.name||"",this.use=A.use||"",this.usehref=A.usehref||""}},qB=class extends qA{constructor(A){super(Kt,"wsdlAddress"),this.id=A.id||"",this.name=A.name||"",this.use=A.use||"",this.usehref=A.usehref||""}},TB=class extends J{constructor(A){super(Kt,"wsdlConnection",!0),this.dataDescription=A.dataDescription||"",this.name=A.name||"",this.effectiveInputPolicy=null,this.effectiveOutputPolicy=null,this.operation=null,this.soapAction=null,this.soapAddress=null,this.wsdlAddress=null}},PB=class extends J{constructor(A){super(Kt,"xmlConnection",!0),this.dataDescription=A.dataDescription||"",this.name=A.name||"",this.uri=null}},WB=class extends J{constructor(A){super(Kt,"xsdConnection",!0),this.dataDescription=A.dataDescription||"",this.name=A.name||"",this.rootElement=null,this.uri=null}},qs=class{static[Zt](A,t){if(qs.hasOwnProperty(A))return qs[A](t)}static connectionSet(A){return new UB(A)}static effectiveInputPolicy(A){return new MB(A)}static effectiveOutputPolicy(A){return new LB(A)}static operation(A){return new HB(A)}static rootElement(A){return new JB(A)}static soapAction(A){return new YB(A)}static soapAddress(A){return new KB(A)}static uri(A){return new vB(A)}static wsdlAddress(A){return new qB(A)}static wsdlConnection(A){return new TB(A)}static xmlConnection(A){return new PB(A)}static xsdConnection(A){return new WB(A)}},OB=me.datasets.id,ZB=class extends Jt{constructor(A){super(OB,"data",A)}[ma](){return!0}},jB=class extends J{constructor(A){super(OB,"datasets",!0),this.data=null,this.Signature=null}[ni](A){let t=A[XA];(t==="data"&&A[de]===OB||t==="Signature"&&A[de]===me.signature.id)&&(this[t]=A),this[Be](A)}},Ts=class{static[Zt](A,t){if(Ts.hasOwnProperty(A))return Ts[A](t)}static datasets(A){return new jB(A)}static data(A){return new ZB(A)}},Qe=me.localeSet.id,XB=class extends J{constructor(A){super(Qe,"calendarSymbols",!0),this.name="gregorian",this.dayNames=new b(2),this.eraNames=null,this.meridiemNames=null,this.monthNames=new b(2)}},VB=class extends qA{constructor(A){super(Qe,"currencySymbol"),this.name=O(A.name,["symbol","isoname","decimal"])}},_B=class extends J{constructor(A){super(Qe,"currencySymbols",!0),this.currencySymbol=new b(3)}},zB=class extends qA{constructor(A){super(Qe,"datePattern"),this.name=O(A.name,["full","long","med","short"])}},$B=class extends J{constructor(A){super(Qe,"datePatterns",!0),this.datePattern=new b(4)}},AQ=class extends ce{constructor(A){super(Qe,"dateTimeSymbols")}},eQ=class extends qA{constructor(A){super(Qe,"day")}},tQ=class extends J{constructor(A){super(Qe,"dayNames",!0),this.abbr=GA({data:A.abbr,defaultValue:0,validate:t=>t===1}),this.day=new b(7)}},iQ=class extends qA{constructor(A){super(Qe,"era")}},sQ=class extends J{constructor(A){super(Qe,"eraNames",!0),this.era=new b(2)}},aQ=class extends J{constructor(A){super(Qe,"locale",!0),this.desc=A.desc||"",this.name="isoname",this.calendarSymbols=null,this.currencySymbols=null,this.datePatterns=null,this.dateTimeSymbols=null,this.numberPatterns=null,this.numberSymbols=null,this.timePatterns=null,this.typeFaces=null}},nQ=class extends J{constructor(A){super(Qe,"localeSet",!0),this.locale=new b}},rQ=class extends qA{constructor(A){super(Qe,"meridiem")}},gQ=class extends J{constructor(A){super(Qe,"meridiemNames",!0),this.meridiem=new b(2)}},oQ=class extends qA{constructor(A){super(Qe,"month")}},IQ=class extends J{constructor(A){super(Qe,"monthNames",!0),this.abbr=GA({data:A.abbr,defaultValue:0,validate:t=>t===1}),this.month=new b(12)}},cQ=class extends qA{constructor(A){super(Qe,"numberPattern"),this.name=O(A.name,["full","long","med","short"])}},lQ=class extends J{constructor(A){super(Qe,"numberPatterns",!0),this.numberPattern=new b(4)}},hQ=class extends qA{constructor(A){super(Qe,"numberSymbol"),this.name=O(A.name,["decimal","grouping","percent","minus","zero"])}},CQ=class extends J{constructor(A){super(Qe,"numberSymbols",!0),this.numberSymbol=new b(5)}},BQ=class extends qA{constructor(A){super(Qe,"timePattern"),this.name=O(A.name,["full","long","med","short"])}},QQ=class extends J{constructor(A){super(Qe,"timePatterns",!0),this.timePattern=new b(4)}},EQ=class extends J{constructor(A){super(Qe,"typeFace",!0),this.name=A.name|""}},fQ=class extends J{constructor(A){super(Qe,"typeFaces",!0),this.typeFace=new b}},Ps=class{static[Zt](A,t){if(Ps.hasOwnProperty(A))return Ps[A](t)}static calendarSymbols(A){return new XB(A)}static currencySymbol(A){return new VB(A)}static currencySymbols(A){return new _B(A)}static datePattern(A){return new zB(A)}static datePatterns(A){return new $B(A)}static dateTimeSymbols(A){return new AQ(A)}static day(A){return new eQ(A)}static dayNames(A){return new tQ(A)}static era(A){return new iQ(A)}static eraNames(A){return new sQ(A)}static locale(A){return new aQ(A)}static localeSet(A){return new nQ(A)}static meridiem(A){return new rQ(A)}static meridiemNames(A){return new gQ(A)}static month(A){return new oQ(A)}static monthNames(A){return new IQ(A)}static numberPattern(A){return new cQ(A)}static numberPatterns(A){return new lQ(A)}static numberSymbol(A){return new hQ(A)}static numberSymbols(A){return new CQ(A)}static timePattern(A){return new BQ(A)}static timePatterns(A){return new QQ(A)}static typeFace(A){return new EQ(A)}static typeFaces(A){return new fQ(A)}},gx=me.signature.id,uQ=class extends J{constructor(A){super(gx,"signature",!0)}},Ws=class{static[Zt](A,t){if(Ws.hasOwnProperty(A))return Ws[A](t)}static signature(A){return new uQ(A)}},ox=me.stylesheet.id,dQ=class extends J{constructor(A){super(ox,"stylesheet",!0)}},Os=class{static[Zt](A,t){if(Os.hasOwnProperty(A))return Os[A](t)}static stylesheet(A){return new dQ(A)}},Ix=me.xdp.id,xQ=class extends J{constructor(A){super(Ix,"xdp",!0),this.uuid=A.uuid||"",this.timeStamp=A.timeStamp||"",this.config=null,this.connectionSet=null,this.datasets=null,this.localeSet=null,this.stylesheet=new b,this.template=null}[Ec](A){let t=me[A[XA]];return t&&A[de]===t.id}},Zs=class{static[Zt](A,t){if(Zs.hasOwnProperty(A))return Zs[A](t)}static xdp(A){return new xQ(A)}},cx=me.xhtml.id,Vn=Symbol(),lx=new Set(["color","font","font-family","font-size","font-stretch","font-style","font-weight","margin","margin-bottom","margin-left","margin-right","margin-top","letter-spacing","line-height","orphans","page-break-after","page-break-before","page-break-inside","tab-interval","tab-stop","text-align","text-decoration","text-indent","vertical-align","widows","kerning-mode","xfa-font-horizontal-scale","xfa-font-vertical-scale","xfa-spacerun","xfa-tab-stops"]),hx=new Map([["page-break-after","breakAfter"],["page-break-before","breakBefore"],["page-break-inside","breakInside"],["kerning-mode",e=>e==="none"?"none":"normal"],["xfa-font-horizontal-scale",e=>`scaleX(${Math.max(0,Math.min(parseInt(e)/100)).toFixed(2)})`],["xfa-font-vertical-scale",e=>`scaleY(${Math.max(0,Math.min(parseInt(e)/100)).toFixed(2)})`],["xfa-spacerun",""],["xfa-tab-stops",""],["font-size",(e,A)=>(e=A.fontSize=hA(e),NA(.99*e))],["letter-spacing",e=>NA(hA(e))],["line-height",e=>NA(hA(e))],["margin",e=>NA(hA(e))],["margin-bottom",e=>NA(hA(e))],["margin-left",e=>NA(hA(e))],["margin-right",e=>NA(hA(e))],["margin-top",e=>NA(hA(e))],["text-indent",e=>NA(hA(e))],["font-family",e=>e],["vertical-align",e=>NA(hA(e))]]),Cx=/\\s+/g,Bx=/[\\r\\n]+/g,Qx=/\\r\\n?/g;function Ex(e,A,t){let i=Object.create(null);if(!e)return i;let s=Object.create(null);for(let[a,n]of e.split(";").map(r=>r.split(":",2))){let r=hx.get(a);if(r==="")continue;let g=n;r&&(g=typeof r=="string"?r:r(n,s)),a.endsWith("scale")?i.transform=i.transform?`${i[a]} ${g}`:g:i[a.replaceAll(/-([a-zA-Z])/g,(o,I)=>I.toUpperCase())]=g}if(i.fontFamily&&tu({typeface:i.fontFamily,weight:i.fontWeight||"normal",posture:i.fontStyle||"normal",size:s.fontSize||0},A,A[ie].fontFinder,i),t&&i.verticalAlign&&i.verticalAlign!=="0px"&&i.fontSize){let r=hA(i.fontSize);i.fontSize=NA(r*.583),i.verticalAlign=NA(Math.sign(hA(i.verticalAlign))*r*.333)}return t&&i.fontSize&&(i.fontSize=`calc(${i.fontSize} * var(--scale-factor))`),$f(i),i}function fx(e){return e.style?e.style.trim().split(/\\s*;\\s*/).filter(A=>!!A).map(A=>A.split(/\\s*:\\s*/,2)).filter(([A,t])=>(A==="font-family"&&e[ie].usedTypefaces.add(t),lx.has(A))).map(A=>A.join(":")).join(";"):""}var ux=new Set(["body","html"]),ct=class extends Jt{constructor(A,t){super(cx,t),this[Vn]=!1,this.style=A.style||""}[Yt](A){super[Yt](A),this.style=fx(this)}[eo](){return!ux.has(this[XA])}[xi](A,t=!1){t?this[Vn]=!0:(A=A.replaceAll(Bx,""),this.style.includes("xfa-spacerun:yes")||(A=A.replaceAll(Cx," "))),A&&(this[P]+=A)}[ri](A,t=!0){let i=Object.create(null),s={top:NaN,bottom:NaN,left:NaN,right:NaN},a=null;for(let[n,r]of this.style.split(";").map(g=>g.split(":",2)))switch(n){case"font-family":i.typeface=io(r);break;case"font-size":i.size=hA(r);break;case"font-weight":i.weight=r;break;case"font-style":i.posture=r;break;case"letter-spacing":i.letterSpacing=hA(r);break;case"margin":let g=r.split(/ \\t/).map(o=>hA(o));switch(g.length){case 1:s.top=s.bottom=s.left=s.right=g[0];break;case 2:s.top=s.bottom=g[0],s.left=s.right=g[1];break;case 3:s.top=g[0],s.bottom=g[2],s.left=s.right=g[1];break;case 4:s.top=g[0],s.left=g[1],s.bottom=g[2],s.right=g[3];break}break;case"margin-top":s.top=hA(r);break;case"margin-bottom":s.bottom=hA(r);break;case"margin-left":s.left=hA(r);break;case"margin-right":s.right=hA(r);break;case"line-height":a=hA(r);break}if(A.pushData(i,s,a),this[P])A.addString(this[P]);else for(let n of this[Ue]()){if(n[XA]==="#text"){A.addString(n[P]);continue}n[ri](A)}t&&A.popFont()}[SA](A){let t=[];if(this[L]={children:t},this[_i]({}),t.length===0&&!this[P])return dA.EMPTY;let i;return this[Vn]?i=this[P]?this[P].replaceAll(Qx,`\n`):void 0:i=this[P]||void 0,dA.success({name:this[XA],attributes:{href:this.href,style:Ex(this.style,this,this[Vn])},children:t,value:i})}},mQ=class extends ct{constructor(A){super(A,"a"),this.href=iu(A.href)||""}},pQ=class extends ct{constructor(A){super(A,"b")}[ri](A){A.pushFont({weight:"bold"}),super[ri](A),A.popFont()}},wQ=class extends ct{constructor(A){super(A,"body")}[SA](A){let t=super[SA](A),{html:i}=t;return i?(i.name="div",i.attributes.class=["xfaRich"],t):dA.EMPTY}},yQ=class extends ct{constructor(A){super(A,"br")}[Se](){return`\n`}[ri](A){A.addString(`\n`)}[SA](A){return dA.success({name:"br"})}},bQ=class extends ct{constructor(A){super(A,"html")}[SA](A){var i;let t=[];if(this[L]={children:t},this[_i]({}),t.length===0)return dA.success({name:"div",attributes:{class:["xfaRich"],style:{}},value:this[P]||""});if(t.length===1){let s=t[0];if((i=s.attributes)!=null&&i.class.includes("xfaRich"))return dA.success(s)}return dA.success({name:"div",attributes:{class:["xfaRich"],style:{}},children:t})}},DQ=class extends ct{constructor(A){super(A,"i")}[ri](A){A.pushFont({posture:"italic"}),super[ri](A),A.popFont()}},kQ=class extends ct{constructor(A){super(A,"li")}},SQ=class extends ct{constructor(A){super(A,"ol")}},FQ=class extends ct{constructor(A){super(A,"p")}[ri](A){super[ri](A,!1),A.addString(`\n`),A.addPara(),A.popFont()}[Se](){return this[MA]()[Ue]().at(-1)===this?super[Se]():super[Se]()+`\n`}},RQ=class extends ct{constructor(A){super(A,"span")}},NQ=class extends ct{constructor(A){super(A,"sub")}},GQ=class extends ct{constructor(A){super(A,"sup")}},UQ=class extends ct{constructor(A){super(A,"ul")}},$i=class{static[Zt](A,t){if($i.hasOwnProperty(A))return $i[A](t)}static a(A){return new mQ(A)}static b(A){return new pQ(A)}static body(A){return new wQ(A)}static br(A){return new yQ(A)}static html(A){return new bQ(A)}static i(A){return new DQ(A)}static li(A){return new kQ(A)}static ol(A){return new SQ(A)}static p(A){return new FQ(A)}static span(A){return new RQ(A)}static sub(A){return new NQ(A)}static sup(A){return new GQ(A)}static ul(A){return new UQ(A)}},HE={config:vs,connection:qs,datasets:Ts,localeSet:Ps,signature:Ws,stylesheet:Os,template:Ks,xdp:Zs,xhtml:$i},Qg=class{constructor(A){this.namespaceId=A}[Zt](A,t){return new Jt(this.namespaceId,A,t)}},MQ=class extends J{constructor(A){super(-1,"root",Object.create(null)),this.element=null,this[As]=A}[ni](A){return this.element=A,!0}[se](){super[se](),this.element.template instanceof tn&&(this[As].set(Pf,this.element),this.element.template[ha](this[As]),this.element.template[As]=this[As])}},LQ=class extends J{constructor(){super(-1,"",Object.create(null))}[ni](A){return!1}},HQ=class{constructor(A=null){this._namespaceStack=[],this._nsAgnosticLevel=0,this._namespacePrefixes=new Map,this._namespaces=new Map,this._nextNsId=Math.max(...Object.values(me).map(({id:t})=>t)),this._currentNamespace=A||new Qg(++this._nextNsId)}buildRoot(A){return new MQ(A)}build({nsPrefix:A,name:t,attributes:i,namespace:s,prefixes:a}){let n=s!==null;if(n&&(this._namespaceStack.push(this._currentNamespace),this._currentNamespace=this._searchNamespace(s)),a&&this._addNamespacePrefix(a),i.hasOwnProperty(qi)){let o=HE.datasets,I=i[qi],c=null;for(let[l,h]of Object.entries(I))if(this._getNamespaceToUse(l)===o){c={xfa:h};break}c?i[qi]=c:delete i[qi]}let r=this._getNamespaceToUse(A),g=(r==null?void 0:r[Zt](t,i))||new LQ;return g[ma]()&&this._nsAgnosticLevel++,(n||a||g[ma]())&&(g[cr]={hasNamespace:n,prefixes:a,nsAgnostic:g[ma]()}),g}isNsAgnostic(){return this._nsAgnosticLevel>0}_searchNamespace(A){let t=this._namespaces.get(A);if(t)return t;for(let[i,{check:s}]of Object.entries(me))if(s(A)){if(t=HE[i],t)return this._namespaces.set(A,t),t;break}return t=new Qg(++this._nextNsId),this._namespaces.set(A,t),t}_addNamespacePrefix(A){for(let{prefix:t,value:i}of A){let s=this._searchNamespace(i),a=this._namespacePrefixes.get(t);a||(a=[],this._namespacePrefixes.set(t,a)),a.push(s)}}_getNamespaceToUse(A){if(!A)return this._currentNamespace;let t=this._namespacePrefixes.get(A);return(t==null?void 0:t.length)>0?t.at(-1):(k(`Unknown namespace prefix: ${A}.`),null)}clean(A){let{hasNamespace:t,prefixes:i,nsAgnostic:s}=A;t&&(this._currentNamespace=this._namespaceStack.pop()),i&&i.forEach(({prefix:a})=>{this._namespacePrefixes.get(a).pop()}),s&&this._nsAgnosticLevel--}},js=class extends jr{constructor(A=null,t=!1){super(),this._builder=new HQ(A),this._stack=[],this._globalData={usedTypefaces:new Set},this._ids=new Map,this._current=this._builder.buildRoot(this._ids),this._errorCode=ht.NoError,this._whiteRegex=/^\\s+$/,this._nbsps=/\\xa0+/g,this._richText=t}parse(A){if(this.parseXml(A),this._errorCode===ht.NoError)return this._current[se](),this._current.element}onText(A){if(A=A.replace(this._nbsps,t=>t.slice(1)+" "),this._richText||this._current[eo]()){this._current[xi](A,this._richText);return}this._whiteRegex.test(A)||this._current[xi](A.trim())}onCdata(A){this._current[xi](A)}_mkAttributes(A,t){let i=null,s=null,a=Object.create({});for(let{name:n,value:r}of A)if(n==="xmlns")i?k(`XFA - multiple namespace definition in <${t}>`):i=r;else if(n.startsWith("xmlns:")){let g=n.substring(6);s||(s=[]),s.push({prefix:g,value:r})}else{let g=n.indexOf(":");if(g===-1)a[n]=r;else{let o=a[qi];o||(o=a[qi]=Object.create(null));let[I,c]=[n.slice(0,g),n.slice(g+1)],l=o[I]||(o[I]=Object.create(null));l[c]=r}}return[i,s,a]}_getNameAndPrefix(A,t){let i=A.indexOf(":");return i===-1?[A,null]:[A.substring(i+1),t?"":A.substring(0,i)]}onBeginElement(A,t,i){let[s,a,n]=this._mkAttributes(t,A),[r,g]=this._getNameAndPrefix(A,this._builder.isNsAgnostic()),o=this._builder.build({nsPrefix:g,name:r,attributes:n,namespace:s,prefixes:a});if(o[ie]=this._globalData,i){o[se](),this._current[ni](o)&&o[fc](this._ids),o[Yt](this._builder);return}this._stack.push(this._current),this._current=o}onEndElement(A){let t=this._current;if(t[d1]()&&typeof t[P]=="string"){let i=new js;i._globalData=this._globalData;let s=i.parse(t[P]);t[P]=null,t[ni](s)}t[se](),this._current=this._stack.pop(),this._current[ni](t)&&t[fc](this._ids),t[Yt](this._builder)}onError(A){this._errorCode=A}},M0=class{constructor(A){try{this.root=new js().parse(M0._createDocument(A));let t=new eh(this.root);this.form=t.bind(),this.dataHandler=new th(this.root,t.getData()),this.form[ie].template=this.form}catch(t){k(`XFA - an error occurred during parsing and binding: ${t}`)}}isValid(){return this.root&&this.form}_createPagesHelper(){let A=this.form[Of]();return new Promise((t,i)=>{let s=()=>{try{let a=A.next();a.done?t(a.value):setTimeout(s,0)}catch(a){i(a)}};setTimeout(s,0)})}async _createPages(){try{this.pages=await this._createPagesHelper(),this.dims=this.pages.children.map(A=>{let{width:t,height:i}=A.attributes.style;return[0,0,parseInt(t),parseInt(i)]})}catch(A){k(`XFA - an error occurred during layout: ${A}`)}}getBoundingBox(A){return this.dims[A]}async getNumPages(){return this.pages||await this._createPages(),this.dims.length}setImages(A){this.form[ie].images=A}setFonts(A){this.form[ie].fontFinder=new uc(A);let t=[];for(let i of this.form[ie].usedTypefaces)i=io(i),this.form[ie].fontFinder.find(i)||t.push(i);return t.length>0?t:null}appendFonts(A,t){this.form[ie].fontFinder.add(A,t)}async getPages(){this.pages||await this._createPages();let A=this.pages;return this.pages=null,A}serializeData(A){return this.dataHandler.serialize(A)}static _createDocument(A){return A["/xdp:xdp"]?Object.values(A).join(""):A["xdp:xdp"]}static getRichTextAsHtml(A){if(!A||typeof A!="string")return null;try{let t=new js($i,!0).parse(A);if(!["body","xhtml"].includes(t[XA])){let n=$i.body({});n[Be](t),t=n}let i=t[SA]();if(!i.success)return null;let{html:s}=i,{attributes:a}=s;return a&&(a.class&&(a.class=a.class.filter(n=>!n.startsWith("xfa"))),a.dir="auto"),{html:s,str:t[Se]()}}catch(t){k(`XFA - an error occurred during parsing of rich text: ${t}`)}return null}},ei=class{static createGlobals(A){return Promise.all([A.ensureCatalog("acroForm"),A.ensureDoc("xfaDatasets"),A.ensureCatalog("structTreeRoot"),A.ensureCatalog("baseUrl"),A.ensureCatalog("attachments")]).then(([t,i,s,a,n])=>({pdfManager:A,acroForm:t instanceof F?t:F.empty,xfaDatasets:i,structTreeRoot:s,baseUrl:a,attachments:n}),t=>(k(`createGlobals: "${t}".`),null))}static async create(A,t,i,s,a,n){let r=a?await this._getPageIndex(A,t,i.pdfManager):null;return i.pdfManager.ensure(this,"_create",[A,t,i,s,a,r,n])}static _create(A,t,i,s,a=!1,n=null,r=null){let g=A.fetchIfRef(t);if(!(g instanceof F))return;let{acroForm:o,pdfManager:I}=i,c=t instanceof oA?t.toString():`annot_${s.createObjId()}`,l=g.get("Subtype");l=l instanceof M?l.name:null;let h={xref:A,ref:t,dict:g,subtype:l,id:c,annotationGlobals:i,collectFields:a,needAppearances:!a&&o.get("NeedAppearances")===!0,pageIndex:n,evaluatorOptions:I.evaluatorOptions,pageRef:r};switch(l){case"Link":return new PQ(h);case"Text":return new TQ(h);case"Widget":let C=Mt({dict:g,key:"FT"});switch(C=C instanceof M?C.name:null,C){case"Tx":return new KQ(h);case"Btn":return new vQ(h);case"Ch":return new qQ(h);case"Sig":return new Eg(h)}return k(`Unimplemented widget field type "${C}", falling back to base field type.`),new bt(h);case"Popup":return new fg(h);case"FreeText":return new wa(h);case"Line":return new WQ(h);case"Square":return new OQ(h);case"Circle":return new ZQ(h);case"PolyLine":return new ug(h);case"Polygon":return new dg(h);case"Caret":return new jQ(h);case"Ink":return new l0(h);case"Highlight":return new ya(h);case"Underline":return new XQ(h);case"Squiggly":return new VQ(h);case"StrikeOut":return new _Q(h);case"Stamp":return new gs(h);case"FileAttachment":return new zQ(h);default:return a||k(l?`Unimplemented annotation type "${l}", falling back to base annotation.`:"Annotation is missing the required /Subtype."),new L0(h)}}static async _getPageIndex(A,t,i){try{let s=await A.fetchIfRefAsync(t);if(!(s instanceof F))return-1;let a=s.getRaw("P");if(a instanceof oA)try{return await i.ensureCatalog("getPageIndex",[a])}catch(r){PA(`_getPageIndex -- not a valid page reference: "${r}".`)}if(s.has("Kids"))return-1;let n=await i.ensureDoc("numPages");for(let r=0;rA/255)}function bn(e,A){let t=e.getArray("QuadPoints");if(!wt(t,null)||t.length===0||t.length%8>0)return null;let i=new Float32Array(t.length);for(let s=0,a=t.length;sA[2]||QA[3]))return null;i.set([C,E,B,E,C,Q,B,Q],s)}return i}function JQ(e,A,t){let[i,s,a,n]=Ce.getAxialAlignedBoundingBox(A,t);if(i===a||s===n)return[1,0,0,1,e[0],e[1]];let r=(e[2]-e[0])/(a-i),g=(e[3]-e[1])/(n-s);return[r,0,0,g,e[0]-i*r,e[1]-s*g]}var L0=class{constructor(A){let{dict:t,xref:i,annotationGlobals:s}=A;this.setTitle(t.get("T")),this.setContents(t.get("Contents")),this.setModificationDate(t.get("M")),this.setFlags(t.get("F")),this.setRectangle(t.getArray("Rect")),this.setColor(t.getArray("C")),this.setBorderStyle(t),this.setAppearance(t),this.setOptionalContent(t);let a=t.get("MK");this.setBorderAndBackgroundColors(a),this.setRotation(a,t),this.ref=A.ref instanceof oA?A.ref:null,this._streams=[],this.appearance&&this._streams.push(this.appearance);let n=!!(this.flags&it.LOCKED),r=!!(this.flags&it.LOCKEDCONTENTS);if(s.structTreeRoot){let g=t.get("StructParent");g=Number.isInteger(g)&&g>=0?g:-1,s.structTreeRoot.addAnnotationIdToPage(A.pageRef,g)}if(this.data={annotationFlags:this.flags,borderStyle:this.borderStyle,color:this.color,backgroundColor:this.backgroundColor,borderColor:this.borderColor,rotation:this.rotation,contentsObj:this._contents,hasAppearance:!!this.appearance,id:A.id,modificationDate:this.modificationDate,rect:this.rectangle,subtype:A.subtype,hasOwnCanvas:!1,noRotate:!!(this.flags&it.NOROTATE),noHTML:n&&r,isEditable:!1},A.collectFields){let g=t.get("Kids");if(Array.isArray(g)){let o=[];for(let I of g)I instanceof oA&&o.push(I.toString());o.length!==0&&(this.data.kidIds=o)}this.data.actions=Vg(i,t,WE),this.data.fieldName=this._constructFieldName(t),this.data.pageIndex=A.pageIndex}this._isOffscreenCanvasSupported=A.evaluatorOptions.isOffscreenCanvasSupported,this._fallbackFontDict=null,this._needAppearances=!1}_hasFlag(A,t){return!!(A&t)}_isViewable(A){return!this._hasFlag(A,it.INVISIBLE)&&!this._hasFlag(A,it.NOVIEW)}_isPrintable(A){return this._hasFlag(A,it.PRINT)&&!this._hasFlag(A,it.HIDDEN)&&!this._hasFlag(A,it.INVISIBLE)}mustBeViewed(A,t){var s;let i=(s=A==null?void 0:A.get(this.data.id))==null?void 0:s.noView;return i!==void 0?!i:this.viewable&&!this._hasFlag(this.flags,it.HIDDEN)}mustBePrinted(A){var i;let t=(i=A==null?void 0:A.get(this.data.id))==null?void 0:i.noPrint;return t!==void 0?!t:this.printable}mustBeViewedWhenEditing(A,t=null){return A?!this.data.isEditable:!(t!=null&&t.has(this.data.id))}get viewable(){return this.data.quadPoints===null?!1:this.flags===0?!0:this._isViewable(this.flags)}get printable(){return this.data.quadPoints===null||this.flags===0?!1:this._isPrintable(this.flags)}_parseStringHelper(A){let t=typeof A=="string"?jA(A):"",i=t&&yf(t).dir==="rtl"?"rtl":"ltr";return{str:t,dir:i}}setDefaultAppearance(A){let{dict:t,annotationGlobals:i}=A,s=Mt({dict:t,key:"DA"})||i.acroForm.get("DA");this._defaultAppearance=typeof s=="string"?s:"",this.data.defaultAppearanceData=Q1(this._defaultAppearance)}setTitle(A){this._title=this._parseStringHelper(A)}setContents(A){this._contents=this._parseStringHelper(A)}setModificationDate(A){this.modificationDate=typeof A=="string"?A:null}setFlags(A){this.flags=Number.isInteger(A)&&A>0?A:0,this.flags&it.INVISIBLE&&this.constructor.name!=="Annotation"&&(this.flags^=it.INVISIBLE)}hasFlag(A){return this._hasFlag(this.flags,A)}setRectangle(A){this.rectangle=Ei(A,[0,0,0,0])}setColor(A){this.color=Qs(A)}setLineEndings(A){if(this.lineEndings=["None","None"],Array.isArray(A)&&A.length===2)for(let t=0;t<2;t++){let i=A[t];if(i instanceof M)switch(i.name){case"None":continue;case"Square":case"Circle":case"Diamond":case"OpenArrow":case"ClosedArrow":case"Butt":case"ROpenArrow":case"RClosedArrow":case"Slash":this.lineEndings[t]=i.name;continue}k(`Ignoring invalid lineEnding: ${i}`)}}setRotation(A,t){this.rotation=0;let i=A instanceof F?A.get("R")||0:t.get("Rotate")||0;Number.isInteger(i)&&i!==0&&(i%=360,i<0&&(i+=360),i%90===0&&(this.rotation=i))}setBorderAndBackgroundColors(A){A instanceof F?(this.borderColor=Qs(A.getArray("BC"),null),this.backgroundColor=Qs(A.getArray("BG"),null)):this.borderColor=this.backgroundColor=null}setBorderStyle(A){if(this.borderStyle=new YQ,A instanceof F)if(A.has("BS")){let t=A.get("BS");if(t instanceof F){let i=t.get("Type");(!i||ye(i,"Border"))&&(this.borderStyle.setWidth(t.get("W"),this.rectangle),this.borderStyle.setStyle(t.get("S")),this.borderStyle.setDashArray(t.getArray("D")))}}else if(A.has("Border")){let t=A.getArray("Border");Array.isArray(t)&&t.length>=3&&(this.borderStyle.setHorizontalCornerRadius(t[0]),this.borderStyle.setVerticalCornerRadius(t[1]),this.borderStyle.setWidth(t[2],this.rectangle),t.length===4&&this.borderStyle.setDashArray(t[3],!0))}else this.borderStyle.setWidth(0)}setAppearance(A){this.appearance=null;let t=A.get("AP");if(!(t instanceof F))return;let i=t.get("N");if(i instanceof KA){this.appearance=i;return}if(!(i instanceof F))return;let s=A.get("AS");if(!(s instanceof M)||!i.has(s.name))return;let a=i.get(s.name);a instanceof KA&&(this.appearance=a)}setOptionalContent(A){this.oc=null;let t=A.get("OC");t instanceof M?k("setOptionalContent: Support for /Name-entry is not implemented."):t instanceof F&&(this.oc=t)}loadResources(A,t){return t.dict.getAsync("Resources").then(i=>i?new Hs(i,A,i.xref).load().then(function(){return i}):void 0)}async getOperatorList(A,t,i,s){let{hasOwnCanvas:a,id:n,rect:r}=this.data,g=this.appearance,o=!!(a&&i&st.DISPLAY);if(o&&(r[0]===r[2]||r[1]===r[3]))return this.data.hasOwnCanvas=!1,{opList:new ze,separateForm:!1,separateCanvas:!1};if(!g){if(!o)return{opList:new ze,separateForm:!1,separateCanvas:!1};g=new It(""),g.dict=new F}let I=g.dict,c=await this.loadResources(["ExtGState","ColorSpace","Pattern","Shading","XObject","Font"],g),l=Ko(I.getArray("BBox"),[0,0,1,1]),h=Ki(I.getArray("Matrix"),Wt),C=JQ(r,l,h),B=new ze,Q;return this.oc&&(Q=await A.parseMarkedContentProps(this.oc,null)),Q!==void 0&&B.addOp(y.beginMarkedContentProps,["OC",Q]),B.addOp(y.beginAnnotation,[n,r,C,h,o]),await A.getOperatorList({stream:g,task:t,resources:c,operatorList:B,fallbackFontDict:this._fallbackFontDict}),B.addOp(y.endAnnotation,[]),Q!==void 0&&B.addOp(y.endMarkedContent,[]),this.reset(),{opList:B,separateForm:!1,separateCanvas:o}}async save(A,t,i){return null}get hasTextContent(){return!1}async extractTextContent(A,t,i){if(!this.appearance)return;let s=await this.loadResources(["ExtGState","Font","Properties","XObject"],this.appearance),a=[],n=[],r=null,g={desiredSize:Math.Infinity,ready:!0,enqueue(o,I){for(let c of o.items)c.str!==void 0&&(r||(r=c.transform.slice(-2)),n.push(c.str),c.hasEOL&&(a.push(n.join("").trimEnd()),n.length=0))}};if(await A.getTextContent({stream:this.appearance,task:t,resources:s,includeMarkedContent:!0,keepWhiteSpace:!0,sink:g,viewBox:i}),this.reset(),n.length&&a.push(n.join("").trimEnd()),a.length>1||a[0]){let o=this.appearance.dict,I=Ko(o.getArray("BBox"),null),c=Ki(o.getArray("Matrix"),null);this.data.textPosition=this._transformPoint(r,I,c),this.data.textContent=a}}_transformPoint(A,t,i){let{rect:s}=this.data;t||(t=[0,0,1,1]),i||(i=[1,0,0,1,0,0]);let a=JQ(s,t,i);return a[4]-=s[0],a[5]-=s[1],A=Ce.applyTransform(A,a),Ce.applyTransform(A,i)}getFieldObject(){return this.data.kidIds?{id:this.data.id,actions:this.data.actions,name:this.data.fieldName,strokeColor:this.data.borderColor,fillColor:this.data.backgroundColor,type:"",kidIds:this.data.kidIds,page:this.data.pageIndex,rotation:this.rotation}:null}reset(){for(let A of this._streams)A.reset()}_constructFieldName(A){if(!A.has("T")&&!A.has("Parent"))return k("Unknown field name, falling back to empty field name."),"";if(!A.has("Parent"))return jA(A.get("T"));let t=[];A.has("T")&&t.unshift(jA(A.get("T")));let i=A,s=new be;for(A.objId&&s.put(A.objId);i.has("Parent")&&(i=i.get("Parent"),!(!(i instanceof F)||i.objId&&s.has(i.objId)));)i.objId&&s.put(i.objId),i.has("T")&&t.unshift(jA(i.get("T")));return t.join(".")}},YQ=class{constructor(){this.width=1,this.style=Y0.SOLID,this.dashArray=[3],this.horizontalCornerRadius=0,this.verticalCornerRadius=0}setWidth(A,t=[0,0,0,0]){if(A instanceof M){this.width=0;return}if(typeof A=="number"){if(A>0){let i=(t[2]-t[0])/2,s=(t[3]-t[1])/2;i>0&&s>0&&(A>i||A>s)&&(k(`AnnotationBorderStyle.setWidth - ignoring width: ${A}`),A=1)}this.width=A}}setStyle(A){if(A instanceof M)switch(A.name){case"S":this.style=Y0.SOLID;break;case"D":this.style=Y0.DASHED;break;case"B":this.style=Y0.BEVELED;break;case"I":this.style=Y0.INSET;break;case"U":this.style=Y0.UNDERLINE;break;default:break}}setDashArray(A,t=!1){if(Array.isArray(A)){let i=!0,s=!0;for(let a of A)if(+a>=0)a>0&&(s=!1);else{i=!1;break}A.length===0||i&&!s?(this.dashArray=A,t&&this.setStyle(M.get("D"))):this.width=0}else A&&(this.width=0)}setHorizontalCornerRadius(A){Number.isInteger(A)&&(this.horizontalCornerRadius=A)}setVerticalCornerRadius(A){Number.isInteger(A)&&(this.verticalCornerRadius=A)}},$e=class extends L0{constructor(A){super(A);let{dict:t}=A;if(t.has("IRT")){let s=t.getRaw("IRT");this.data.inReplyTo=s instanceof oA?s.toString():null;let a=t.get("RT");this.data.replyType=a instanceof M?a.name:Ho.REPLY}let i=null;if(this.data.replyType===Ho.GROUP){let s=t.get("IRT");this.setTitle(s.get("T")),this.data.titleObj=this._title,this.setContents(s.get("Contents")),this.data.contentsObj=this._contents,s.has("CreationDate")?(this.setCreationDate(s.get("CreationDate")),this.data.creationDate=this.creationDate):this.data.creationDate=null,s.has("M")?(this.setModificationDate(s.get("M")),this.data.modificationDate=this.modificationDate):this.data.modificationDate=null,i=s.getRaw("Popup"),s.has("C")?(this.setColor(s.getArray("C")),this.data.color=this.color):this.data.color=null}else this.data.titleObj=this._title,this.setCreationDate(t.get("CreationDate")),this.data.creationDate=this.creationDate,i=t.getRaw("Popup"),t.has("C")||(this.data.color=null);this.data.popupRef=i instanceof oA?i.toString():null,t.has("RC")&&(this.data.richText=M0.getRichTextAsHtml(t.get("RC")))}setCreationDate(A){this.creationDate=typeof A=="string"?A:null}_setDefaultAppearance({xref:A,extra:t,strokeColor:i,fillColor:s,blendMode:a,strokeAlpha:n,fillAlpha:r,pointsCallback:g}){let o=Number.MAX_VALUE,I=Number.MAX_VALUE,c=Number.MIN_VALUE,l=Number.MIN_VALUE,h=["q"];t&&h.push(t),i&&h.push(`${i[0]} ${i[1]} ${i[2]} RG`),s&&h.push(`${s[0]} ${s[1]} ${s[2]} rg`);let C=this.data.quadPoints;C||(C=Float32Array.from([this.rectangle[0],this.rectangle[3],this.rectangle[2],this.rectangle[3],this.rectangle[0],this.rectangle[1],this.rectangle[2],this.rectangle[1]]));for(let m=0,D=C.length;mtypeof t=="string").map(t=>jA(t)):A instanceof M?jA(A.name):typeof A=="string"?jA(A):null}hasFieldFlag(A){return!!(this.data.fieldFlags&A)}_isViewable(A){return!0}mustBeViewed(A,t){return t?this.viewable:super.mustBeViewed(A,t)&&!this._hasFlag(this.flags,it.NOVIEW)}getRotationMatrix(A){var a;let t=(a=A==null?void 0:A.get(this.data.id))==null?void 0:a.rotation;if(t===void 0&&(t=this.rotation),t===0)return Wt;let i=this.data.rect[2]-this.data.rect[0],s=this.data.rect[3]-this.data.rect[1];return xr(t,i,s)}getBorderAndBackgroundAppearances(A){var r;let t=(r=A==null?void 0:A.get(this.data.id))==null?void 0:r.rotation;if(t===void 0&&(t=this.rotation),!this.backgroundColor&&!this.borderColor)return"";let i=this.data.rect[2]-this.data.rect[0],s=this.data.rect[3]-this.data.rect[1],a=t===0||t===180?`0 0 ${i} ${s} re`:`0 0 ${s} ${i} re`,n="";if(this.backgroundColor&&(n=`${mi(this.backgroundColor,!0)} ${a} f `),this.borderColor){let g=this.borderStyle.width||1;n+=`${g} w ${mi(this.borderColor,!1)} ${a} S `}return n}async getOperatorList(A,t,i,s){if(i&st.ANNOTATIONS_FORMS&&!(this instanceof Eg)&&!this.data.noHTML&&!this.data.hasOwnCanvas)return{opList:new ze,separateForm:!0,separateCanvas:!1};if(!this._hasText)return super.getOperatorList(A,t,i,s);let a=await this._getAppearance(A,t,i,s);if(this.appearance&&a===null)return super.getOperatorList(A,t,i,s);let n=new ze;if(!this._defaultAppearance||a===null)return{opList:n,separateForm:!1,separateCanvas:!1};let r=!!(this.data.hasOwnCanvas&&i&st.DISPLAY),g=[1,0,0,1,0,0],o=[0,0,this.data.rect[2]-this.data.rect[0],this.data.rect[3]-this.data.rect[1]],I=JQ(this.data.rect,o,g),c;this.oc&&(c=await A.parseMarkedContentProps(this.oc,null)),c!==void 0&&n.addOp(y.beginMarkedContentProps,["OC",c]),n.addOp(y.beginAnnotation,[this.data.id,this.data.rect,I,this.getRotationMatrix(s),r]);let l=new It(a);return await A.getOperatorList({stream:l,task:t,resources:this._fieldResources.mergedResources,operatorList:n}),n.addOp(y.endAnnotation,[]),c!==void 0&&n.addOp(y.endMarkedContent,[]),{opList:n,separateForm:!1,separateCanvas:r}}_getMKDict(A){let t=new F(null);return A&&t.set("R",A),this.borderColor&&t.set("BC",ft(this.borderColor)),this.backgroundColor&&t.set("BG",ft(this.backgroundColor)),t.size>0?t:null}amendSavedDict(A,t){}async save(A,t,i){let s=i==null?void 0:i.get(this.data.id),a=s==null?void 0:s.value,n=s==null?void 0:s.rotation;if(a===this.data.fieldValue||a===void 0){if(!this._hasValueFromXFA&&n===void 0)return null;a||(a=this.data.fieldValue)}if(n===void 0&&!this._hasValueFromXFA&&Array.isArray(a)&&Array.isArray(this.data.fieldValue)&&a.length===this.data.fieldValue.length&&a.every((Q,E)=>Q===this.data.fieldValue[E]))return null;n===void 0&&(n=this.rotation);let r=null;if(!this._needAppearances&&(r=await this._getAppearance(A,t,st.SAVE,i),r===null))return null;let g=!1;r!=null&&r.needAppearances&&(g=!0,r=null);let{xref:o}=A,I=o.fetchIfRef(this.ref);if(!(I instanceof F))return null;let c=new F(o);for(let Q of I.getKeys())Q!=="AP"&&c.set(Q,I.getRaw(Q));let l={path:this.data.fieldName,value:a};c.set("V",Array.isArray(a)?a.map(ii):ii(a)),this.amendSavedDict(i,c);let h=this._getMKDict(n);h&&c.set("MK",h);let C=[],B=[{ref:this.ref,data:"",xfa:l,needAppearances:g}];if(r!==null){let Q=o.getNewTemporaryRef(),E=new F(o);c.set("AP",E),E.set("N",Q);let f=this._getSaveFieldResources(o),u=new It(r),d=u.dict=new F(o);d.set("Subtype",M.get("Form")),d.set("Resources",f),d.set("BBox",[0,0,this.data.rect[2]-this.data.rect[0],this.data.rect[3]-this.data.rect[1]]);let x=this.getRotationMatrix(i);x!==Wt&&d.set("Matrix",x),await ot(Q,u,C,o),B.push({ref:Q,data:C.join(""),xfa:null,needAppearances:!1}),C.length=0}return c.set("M",`D:${Zi()}`),await ot(this.ref,c,C,o),B[0].data=C.join(""),B}async _getAppearance(A,t,i,s){if(this.hasFieldFlag(Te.PASSWORD))return null;let n=s==null?void 0:s.get(this.data.id),r,g;if(n&&(r=n.formattedValue||n.value,g=n.rotation),g===void 0&&r===void 0&&!this._needAppearances&&(!this._hasValueFromXFA||this.appearance))return null;let o=this.getBorderAndBackgroundAppearances(s);if(r===void 0&&(r=this.data.fieldValue,!r))return`/Tx BMC q ${o}Q EMC`;if(Array.isArray(r)&&r.length===1&&(r=r[0]),gt(typeof r=="string","Expected `value` to be a string."),r=r.trim(),this.data.combo){let U=this.data.options.find(({exportValue:K})=>r===K);r=(U==null?void 0:U.displayValue)||r}if(r==="")return`/Tx BMC q ${o}Q EMC`;g===void 0&&(g=this.rotation);let I=-1,c;this.data.multiLine?(c=r.split(/\\r\\n?|\\n/).map(U=>U.normalize("NFC")),I=c.length):c=[r.replace(/\\r\\n?|\\n/,"").normalize("NFC")];let l=1,h=2,C=this.data.rect[3]-this.data.rect[1],B=this.data.rect[2]-this.data.rect[0];(g===90||g===270)&&([B,C]=[C,B]),this._defaultAppearance||(this.data.defaultAppearanceData=Q1(this._defaultAppearance="/Helvetica 0 Tf 0 g"));let Q=await bt._getFontData(A,t,this.data.defaultAppearanceData,this._fieldResources.mergedResources),E,f,u,d=[],x=!1;for(let U of c){let K=Q.encodeString(U);K.length>1&&(x=!0),d.push(K.join(""))}if(x&&i&st.SAVE)return{needAppearances:!0};if(x&&this._isOffscreenCanvasSupported){let U=this.data.comb?"monospace":"sans-serif",K=new Ut(A.xref,U),Z=K.createFontResources(c.join("")),AA=Z.getRaw("Font");if(this._fieldResources.mergedResources.has("Font")){let _=this._fieldResources.mergedResources.get("Font");for(let tA of AA.getKeys())_.set(tA,AA.getRaw(tA))}else this._fieldResources.mergedResources.set("Font",AA);let gA=K.fontName.name;Q=await bt._getFontData(A,t,{fontName:gA,fontSize:0},Z);for(let _=0,tA=d.length;_2)return`/Tx BMC q ${o}BT `+E+` 1 0 0 1 ${Ae(h)} ${Ae(S)} Tm (${Fs(d[0])}) Tj ET Q EMC`;let w={shift:0},Y=this._renderText(d[0],Q,f,B,D,w,h,S);return`/Tx BMC q ${o}BT `+E+` 1 0 0 1 0 0 Tm ${Y} ET Q EMC`}static async _getFontData(A,t,i,s){let a=new ze,n={font:null,clone(){return this}},{fontName:r,fontSize:g}=i;return await A.handleSetFont(s,[r&&M.get(r),g],null,a,t,n,null),n.font}_getTextWidth(A,t){return t.charsToGlyphs(A).reduce((i,s)=>i+s.width,0)/1e3}_computeFontSize(A,t,i,s,a){let{fontSize:n}=this.data.defaultAppearanceData,r=(n||12)*Qi,g=Math.round(A/r);if(!n){let o=l=>Math.floor(l*100)/100;if(a===-1){let l=this._getTextWidth(i,s);n=o(Math.min(A/Qi,l>t?t/l:1/0)),g=1}else{let l=i.split(/\\r\\n?|\\n/),h=[];for(let B of l){let Q=s.encodeString(B).join(""),E=s.charsToGlyphs(Q),f=s.getCharPositions(Q);h.push({line:Q,glyphs:E,positions:f})}let C=B=>{let Q=0;for(let E of h){let f=this._splitLine(null,s,B,t,E);if(Q+=f.length*B,Q>A)return!0}return!1};for(g=Math.max(g,a);;){if(r=A/g,n=o(r/Qi),C(n)){g++;continue}break}}let{fontName:I,fontColor:c}=this.data.defaultAppearanceData;this._defaultAppearance=N9({fontSize:n,fontName:I,fontColor:c})}return[this._defaultAppearance,n,A/g]}_renderText(A,t,i,s,a,n,r,g){let o;if(a===1){let c=this._getTextWidth(A,t)*i;o=(s-c)/2}else if(a===2){let c=this._getTextWidth(A,t)*i;o=s-c-r}else o=r;let I=Ae(o-n.shift);return n.shift=o,g=Ae(g),`${I} ${g} Td (${Fs(A)}) Tj`}_getSaveFieldResources(A){var n;let{localResources:t,appearanceResources:i,acroFormResources:s}=this._fieldResources,a=(n=this.data.defaultAppearanceData)==null?void 0:n.fontName;if(!a)return t||F.empty;for(let r of[t,i])if(r instanceof F){let g=r.get("Font");if(g instanceof F&&g.has(a))return r}if(s instanceof F){let r=s.get("Font");if(r instanceof F&&r.has(a)){let g=new F(A);g.set(a,r.getRaw(a));let o=new F(A);return o.set("Font",g),F.merge({xref:A,dictArray:[o,t],mergeSubDicts:!0})}}return t||F.empty}getFieldObject(){return null}},KQ=class extends bt{constructor(A){super(A);let{dict:t}=A;t.has("PMD")&&(this.flags|=it.HIDDEN,this.data.hidden=!0,k("Barcodes are not supported")),this.data.hasOwnCanvas=this.data.readOnly&&!this.data.noHTML,this._hasText=!0,typeof this.data.fieldValue!="string"&&(this.data.fieldValue="");let i=Mt({dict:t,key:"Q"});(!Number.isInteger(i)||i<0||i>2)&&(i=null),this.data.textAlignment=i;let s=Mt({dict:t,key:"MaxLen"});(!Number.isInteger(s)||s<0)&&(s=0),this.data.maxLen=s,this.data.multiLine=this.hasFieldFlag(Te.MULTILINE),this.data.comb=this.hasFieldFlag(Te.COMB)&&!this.hasFieldFlag(Te.MULTILINE)&&!this.hasFieldFlag(Te.PASSWORD)&&!this.hasFieldFlag(Te.FILESELECT)&&this.data.maxLen!==0,this.data.doNotScroll=this.hasFieldFlag(Te.DONOTSCROLL)}get hasTextContent(){return!!this.appearance&&!this._needAppearances}_getCombAppearance(A,t,i,s,a,n,r,g,o,I,c){let l=a/this.data.maxLen,h=this.getBorderAndBackgroundAppearances(c),C=[],B=t.getCharPositions(i);for(let[E,f]of B)C.push(`(${Fs(i.substring(E,f))}) Tj`);let Q=C.join(` ${Ae(l)} 0 Td `);return`/Tx BMC q ${h}BT `+A+` 1 0 0 1 ${Ae(r)} ${Ae(g+o)} Tm ${Q} ET Q EMC`}_getMultilineAppearance(A,t,i,s,a,n,r,g,o,I,c,l){let h=[],C=a-2*g,B={shift:0};for(let f=0,u=t.length;fs?(o.push(A.substring(h,E)),h=E,C=d,I=-1,l=-1):(C+=d,I=E,c=f,l=B):C+d>s?I!==-1?(o.push(A.substring(h,c)),h=c,B=l+1,I=-1,C=0):(o.push(A.substring(h,E)),h=E,C=d):C+=d}return hI!=="Off");n.length=0,n.push("Off",o)}n.includes(this.data.fieldValue)||(this.data.fieldValue="Off"),this.data.exportValue=n[1];let r=i.get(this.data.exportValue);this.checkedAppearance=r instanceof KA?r:null;let g=i.get("Off");this.uncheckedAppearance=g instanceof KA?g:null,this.checkedAppearance?this._streams.push(this.checkedAppearance):this._getDefaultCheckedAppearance(A,"check"),this.uncheckedAppearance&&this._streams.push(this.uncheckedAppearance),this._fallbackFontDict=this.fallbackFontDict,this.data.defaultFieldValue===null&&(this.data.defaultFieldValue="Off")}_processRadioButton(A){this.data.buttonValue=null;let t=A.dict.get("Parent");if(t instanceof F){this.parent=A.dict.getRaw("Parent");let r=t.get("V");r instanceof M&&(this.data.fieldValue=this._decodeFormValue(r))}let i=A.dict.get("AP");if(!(i instanceof F))return;let s=i.get("N");if(!(s instanceof F))return;for(let r of s.getKeys())if(r!=="Off"){this.data.buttonValue=this._decodeFormValue(r);break}let a=s.get(this.data.buttonValue);this.checkedAppearance=a instanceof KA?a:null;let n=s.get("Off");this.uncheckedAppearance=n instanceof KA?n:null,this.checkedAppearance?this._streams.push(this.checkedAppearance):this._getDefaultCheckedAppearance(A,"disc"),this.uncheckedAppearance&&this._streams.push(this.uncheckedAppearance),this._fallbackFontDict=this.fallbackFontDict,this.data.defaultFieldValue===null&&(this.data.defaultFieldValue="Off")}_processPushButton(A){let{dict:t,annotationGlobals:i}=A;if(!t.has("A")&&!t.has("AA")&&!this.data.alternativeText){k("Push buttons without action dictionaries are not supported");return}this.data.isTooltipOnly=!t.has("A")&&!t.has("AA"),Pa.parseDestDictionary({destDict:t,resultObj:this.data,docBaseUrl:i.baseUrl,docAttachments:i.attachments})}getFieldObject(){let A="button",t;return this.data.checkBox?(A="checkbox",t=this.data.exportValue):this.data.radioButton&&(A="radiobutton",t=this.data.buttonValue),{id:this.data.id,value:this.data.fieldValue||"Off",defaultValue:this.data.defaultFieldValue,exportValues:t,editable:!this.data.readOnly,name:this.data.fieldName,rect:this.data.rect,hidden:this.data.hidden,actions:this.data.actions,page:this.data.pageIndex,strokeColor:this.data.borderColor,fillColor:this.data.backgroundColor,rotation:this.rotation,type:A}}get fallbackFontDict(){let A=new F;return A.set("BaseFont",M.get("ZapfDingbats")),A.set("Type",M.get("FallbackType")),A.set("Subtype",M.get("FallbackType")),A.set("Encoding",M.get("ZapfDingbatsEncoding")),nA(this,"fallbackFontDict",A)}},qQ=class extends bt{constructor(A){super(A);let{dict:t,xref:i}=A;this.indices=t.getArray("I"),this.hasIndices=Array.isArray(this.indices)&&this.indices.length>0,this.data.options=[];let s=Mt({dict:t,key:"Opt"});if(Array.isArray(s))for(let a=0,n=s.length;a=0&&n0?this.data.fieldValue[0]:null;return{id:this.data.id,value:t,defaultValue:this.data.defaultFieldValue,editable:!this.data.readOnly,name:this.data.fieldName,rect:this.data.rect,numItems:this.data.fieldValue.length,multipleSelection:this.data.multiSelect,hidden:this.data.hidden,actions:this.data.actions,items:this.data.options,page:this.data.pageIndex,strokeColor:this.data.borderColor,fillColor:this.data.backgroundColor,rotation:this.rotation,type:A}}amendSavedDict(A,t){var n;if(!this.hasIndices)return;let i=(n=A==null?void 0:A.get(this.data.id))==null?void 0:n.value;Array.isArray(i)||(i=[i]);let s=[],{options:a}=this.data;for(let r=0,g=0,o=a.length;rS&&(S=U,w=Y)}[B,Q]=this._computeFontSize(D,c-2*o,w,C,-1)}let E=Q*Qi,f=(E-Q)/2,u=Math.floor(I/E),d=0;if(h.length>0){let D=Math.min(...h),S=Math.max(...h);d=Math.max(0,S-u+1),d>D&&(d=D)}let x=Math.min(d+u+1,l),p=["/Tx BMC q",`1 1 ${c} ${I} re W n`];if(h.length){p.push("0.600006 0.756866 0.854904 rg");for(let D of h)d<=D&&DI.trimEnd());let{coords:r,bbox:g,matrix:o}=Ut.getFirstPositionInfo(this.rectangle,this.rotation,n);this.data.textPosition=this._transformPoint(r,g,o)}if(this._isOffscreenCanvasSupported){let r=A.dict.get("CA"),g=new Ut(i,"sans-serif");this.appearance=g.createAppearance(this._contents.str,this.rectangle,this.rotation,n,a,r),this._streams.push(this.appearance)}else k("FreeTextAnnotation: OffscreenCanvas is not supported, annotation may not render correctly.")}}get hasTextContent(){return this._hasAppearance}static createNewDict(A,t,{apRef:i,ap:s,oldAnnotation:a}){let{color:n,fontSize:r,rect:g,rotation:o,user:I,value:c}=A,l=a||new F(t);l.set("Type",M.get("Annot")),l.set("Subtype",M.get("FreeText")),a?(l.set("M",`D:${Zi()}`),l.delete("RC")):l.set("CreationDate",`D:${Zi()}`),l.set("Rect",g);let h=`/Helv ${r} Tf ${mi(n,!0)}`;if(l.set("DA",h),l.set("Contents",ii(c)),l.set("F",4),l.set("Border",[0,0,0]),l.set("Rotate",o),I&&l.set("T",ii(I)),i||s){let C=new F(t);l.set("AP",C),i?C.set("N",i):C.set("N",s)}return l}static async createNewAppearanceStream(A,t,i){let{baseFontRef:s,evaluator:a,task:n}=i,{color:r,fontSize:g,rect:o,rotation:I,value:c}=A,l=new F(t),h=new F(t);if(s)h.set("Helv",s);else{let EA=new F(t);EA.set("BaseFont",M.get("Helvetica")),EA.set("Type",M.get("Font")),EA.set("Subtype",M.get("Type1")),EA.set("Encoding",M.get("WinAnsiEncoding")),h.set("Helv",EA)}l.set("Font",h);let C=await bt._getFontData(a,n,{fontName:"Helv",fontSize:g},l),[B,Q,E,f]=o,u=E-B,d=f-Q;I%180!==0&&([u,d]=[d,u]);let x=c.split(`\n`),p=g/1e3,m=-1/0,D=[];for(let EA of x){let fA=C.encodeString(EA);if(fA.length>1)return null;EA=fA.join(""),D.push(EA);let CA=0,N=C.charsToGlyphs(EA);for(let H of N)CA+=H.width*p;m=Math.max(m,CA)}let S=1;m>u&&(S=u/m);let w=1,Y=Qi*g,U=(Qi-Cr)*g,K=Y*x.length;K>d&&(w=d/K);let Z=Math.min(S,w),AA=g*Z,gA,R,_;switch(I){case 0:_=[1,0,0,1],R=[o[0],o[1],u,d],gA=[o[0],o[3]-U];break;case 90:_=[0,1,-1,0],R=[o[1],-o[2],u,d],gA=[o[1],-o[0]-U];break;case 180:_=[-1,0,0,-1],R=[-o[2],-o[3],u,d],gA=[-o[2],-o[1]-U];break;case 270:_=[0,-1,1,0],R=[-o[3],o[0],u,d],gA=[-o[3],o[2]-U];break}let tA=["q",`${_.join(" ")} 0 0 cm`,`${R.join(" ")} re W n`,"BT",`${mi(r,!0)}`,`0 Tc /Helv ${Ae(AA)} Tf`];tA.push(`${gA.join(" ")} Td (${Fs(D[0])}) Tj`);let IA=Ae(Y);for(let EA=1,fA=D.length;EA(h.push(`${s[0]} ${s[1]} m`,`${s[2]} ${s[3]} l`,"S"),[C[0]-I,C[2]+I,C[7]-I,C[3]+I])})}}},OQ=class extends $e{constructor(A){super(A);let{dict:t,xref:i}=A;if(this.data.annotationType=Le.SQUARE,this.data.hasOwnCanvas=this.data.noRotate,this.data.noHTML=!1,!this.appearance){let s=this.color?ft(this.color):[0,0,0],a=t.get("CA"),n=Qs(t.getArray("IC"),null),r=n?ft(n):null,g=r?a:null;if(this.borderStyle.width===0&&!r)return;this._setDefaultAppearance({xref:i,extra:`${this.borderStyle.width} w`,strokeColor:s,fillColor:r,strokeAlpha:a,fillAlpha:g,pointsCallback:(o,I)=>{let c=I[4]+this.borderStyle.width/2,l=I[5]+this.borderStyle.width/2,h=I[6]-I[4]-this.borderStyle.width,C=I[3]-I[7]-this.borderStyle.width;return o.push(`${c} ${l} ${h} ${C} re`),r?o.push("B"):o.push("S"),[I[0],I[2],I[7],I[3]]}})}}},ZQ=class extends $e{constructor(A){super(A);let{dict:t,xref:i}=A;if(this.data.annotationType=Le.CIRCLE,!this.appearance){let s=this.color?ft(this.color):[0,0,0],a=t.get("CA"),n=Qs(t.getArray("IC"),null),r=n?ft(n):null,g=r?a:null;if(this.borderStyle.width===0&&!r)return;let o=4/3*Math.tan(Math.PI/(2*4));this._setDefaultAppearance({xref:i,extra:`${this.borderStyle.width} w`,strokeColor:s,fillColor:r,strokeAlpha:a,fillAlpha:g,pointsCallback:(I,c)=>{let l=c[0]+this.borderStyle.width/2,h=c[1]-this.borderStyle.width/2,C=c[6]-this.borderStyle.width/2,B=c[7]+this.borderStyle.width/2,Q=l+(C-l)/2,E=h+(B-h)/2,f=(C-l)/2*o,u=(B-h)/2*o;return I.push(`${Q} ${B} m`,`${Q+f} ${B} ${C} ${E+u} ${C} ${E} c`,`${C} ${E-u} ${Q+f} ${h} ${Q} ${h} c`,`${Q-f} ${h} ${l} ${E-u} ${l} ${E} c`,`${l} ${E+u} ${Q-f} ${B} ${Q} ${B} c`,"h"),r?I.push("B"):I.push("S"),[c[0],c[2],c[7],c[3]]}})}}},ug=class extends $e{constructor(A){super(A);let{dict:t,xref:i}=A;this.data.annotationType=Le.POLYLINE,this.data.hasOwnCanvas=this.data.noRotate,this.data.noHTML=!1,this.data.vertices=null,this instanceof dg||(this.setLineEndings(t.getArray("LE")),this.data.lineEndings=this.lineEndings);let s=t.getArray("Vertices");if(!wt(s,null))return;let a=this.data.vertices=Float32Array.from(s);if(!this.appearance){let n=this.color?ft(this.color):[0,0,0],r=t.get("CA"),g=this.borderStyle.width||1,o=2*g,I=[1/0,1/0,-1/0,-1/0];for(let c=0,l=a.length;c{for(let h=0,C=a.length;h{for(let l of this.data.inkLists){for(let h=0,C=l.length;hB.points)),l.set("F",4),l.set("Rotate",I),g&&l.set("IT",M.get("InkHighlight"));let h=new F(t);l.set("BS",h),h.set("W",c),l.set("C",Array.from(a,B=>B/255)),l.set("CA",n);let C=new F(t);return l.set("AP",C),i?C.set("N",i):C.set("N",s),l}static async createNewAppearanceStream(A,t,i){if(A.outlines)return this.createNewAppearanceStreamForHighlight(A,t,i);let{color:s,rect:a,paths:n,thickness:r,opacity:g}=A,o=[`${r} w 1 J 1 j`,`${mi(s,!1)}`];g!==1&&o.push("/R0 gs");let I=[];for(let{bezier:C}of n){if(I.length=0,I.push(`${Ae(C[0])} ${Ae(C[1])} m`),C.length===2)I.push(`${Ae(C[0])} ${Ae(C[1])} l S`);else{for(let B=2,Q=C.length;B(o.push(`${I[0]} ${I[1]} m`,`${I[2]} ${I[3]} l`,`${I[6]} ${I[7]} l`,`${I[4]} ${I[5]} l`,"f"),[I[0],I[2],I[7],I[3]])})}}else this.data.popupRef=null}static createNewDict(A,t,{apRef:i,ap:s}){let{color:a,opacity:n,rect:r,rotation:g,user:o,quadPoints:I}=A,c=new F(t);if(c.set("Type",M.get("Annot")),c.set("Subtype",M.get("Highlight")),c.set("CreationDate",`D:${Zi()}`),c.set("Rect",r),c.set("F",4),c.set("Border",[0,0,0]),c.set("Rotate",g),c.set("QuadPoints",I),c.set("C",Array.from(a,l=>l/255)),c.set("CA",n),o&&c.set("T",ii(o)),i||s){let l=new F(t);c.set("AP",l),l.set("N",i||s)}return c}static async createNewAppearanceStream(A,t,i){let{color:s,rect:a,outlines:n,opacity:r}=A,g=[`${mi(s,!0)}`,"/R0 gs"],o=[];for(let Q of n){o.length=0,o.push(`${Ae(Q[0])} ${Ae(Q[1])} m`);for(let E=2,f=Q.length;E(r.push(`${g[4]} ${g[5]+1.3} m`,`${g[6]} ${g[7]+1.3} l`,"S"),[g[0],g[2],g[7],g[3]])})}}else this.data.popupRef=null}},VQ=class extends $e{constructor(A){super(A);let{dict:t,xref:i}=A;if(this.data.annotationType=Le.SQUIGGLY,this.data.quadPoints=bn(t,null)){if(!this.appearance){let a=this.color?ft(this.color):[0,0,0],n=t.get("CA");this._setDefaultAppearance({xref:i,extra:"[] 0 d 1 w",strokeColor:a,strokeAlpha:n,pointsCallback:(r,g)=>{let o=(g[1]-g[5])/6,I=o,c=g[4],l=g[5],h=g[6];r.push(`${c} ${l+I} m`);do c+=2,I=I===0?o:0,r.push(`${c} ${l+I} l`);while(c(r.push(`${(g[0]+g[4])/2} ${(g[1]+g[5])/2} m`,`${(g[2]+g[6])/2} ${(g[3]+g[7])/2} l`,"S"),[g[0],g[2],g[7],g[3]])})}}else this.data.popupRef=null}},gs=class extends $e{constructor(A){super(A),this.data.annotationType=Le.STAMP,this.data.hasOwnCanvas=this.data.noRotate,this.data.noHTML=!1}static async createImage(A,t){let{width:i,height:s}=A,a=new OffscreenCanvas(i,s),n=a.getContext("2d",{alpha:!0});n.drawImage(A,0,0);let r=n.getImageData(0,0,i,s).data,g=new Uint32Array(r.buffer),o=g.some(Ot.isLittleEndian?Q=>Q>>>24!==255:Q=>(Q&255)!==255);o&&(n.fillStyle="white",n.fillRect(0,0,i,s),n.drawImage(A,0,0));let I=a.convertToBlob({type:"image/jpeg",quality:1}).then(Q=>Q.arrayBuffer()),c=M.get("XObject"),l=M.get("Image"),h=new F(t);h.set("Type",c),h.set("Subtype",l),h.set("BitsPerComponent",8),h.set("ColorSpace",M.get("DeviceRGB")),h.set("Filter",M.get("DCTDecode")),h.set("BBox",[0,0,i,s]),h.set("Width",i),h.set("Height",s);let C=null;if(o){let Q=new Uint8Array(g.length);if(Ot.isLittleEndian)for(let f=0,u=g.length;f>>24;else for(let f=0,u=g.length;f=0&&n<=1?n:null}};function JE(e){try{return ka(e)}catch(A){return k(`UTF-8 decoding failed: "${A}".`),e}}var $Q=class extends Ls{constructor(A){super(A),this.node=null}onEndElement(A){let t=super.onEndElement(A);if(t&&A==="xfa:datasets")throw this.node=t,new Error("Aborting DatasetXMLParser.")}},A1=class{constructor(A){if(A.datasets)this.node=new Ls({hasAttributes:!0}).parseFromString(A.datasets).documentElement;else{let t=new $Q({hasAttributes:!0});try{t.parseFromString(A["xdp:xdp"])}catch(i){}this.node=t.node}}getValue(A){if(!this.node||!A)return"";let t=this.node.searchNode(_E(A),0);if(!t)return"";let i=t.firstChild;return(i==null?void 0:i.nodeName)==="value"?t.children.map(s=>JE(s.textContent)):JE(t.textContent)}},dn,e1=class{constructor(A,t){HA(this,dn,null);this.stream=A,this.pdfManager=t,this.entries=[],this._xrefStms=new Set,this._cacheMap=new Map,this._pendingRefs=new be,this._newPersistentRefNum=null,this._newTemporaryRefNum=null,this._persistentRefsCache=null}getNewPersistentRef(A){this._newPersistentRefNum===null&&(this._newPersistentRefNum=this.entries.length||1);let t=this._newPersistentRefNum++;return this._cacheMap.set(t,A),oA.get(t,0)}getNewTemporaryRef(){if(this._newTemporaryRefNum===null&&(this._newTemporaryRefNum=this.entries.length||1,this._newPersistentRefNum)){this._persistentRefsCache=new Map;for(let A=this._newTemporaryRefNum;A0;){let[r,g]=n;if(!Number.isInteger(r)||!Number.isInteger(g))throw new v(`Invalid XRef range fields: ${r}, ${g}`);if(!Number.isInteger(i)||!Number.isInteger(s)||!Number.isInteger(a))throw new v(`Invalid XRef entry fields length: ${r}, ${g}`);for(let o=t.entryNum;o=w.length);)U+=String.fromCharCode(K),K=w[Y];return U}function g(w,Y,U){let K=U.length,Z=w.length,AA=0;for(;Y=K)break;Y++,AA++}return AA}let o=/\\b(endobj|\\d+\\s+\\d+\\s+obj|xref|trailer\\s*<<)\\b/g,I=/\\b(startxref|\\d+\\s+\\d+\\s+obj)\\b/g,c=/^(\\d+)\\s+(\\d+)\\s+obj\\b/,l=new Uint8Array([116,114,97,105,108,101,114]),h=new Uint8Array([115,116,97,114,116,120,114,101,102]),C=new Uint8Array([47,88,82,101,102]);this.entries.length=0,this._cacheMap.clear();let B=this.stream;B.pos=0;let Q=B.getBytes(),E=Qt(Q),f=Q.length,u=B.start,d=[],x=[];for(;u=f)break;w=Q[u]}while(w!==10&&w!==13);continue}let Y=r(Q,u),U;if(Y.startsWith("xref")&&(Y.length===4||/\\s/.test(Y[4])))u+=g(Q,u,l),d.push(u),u+=g(Q,u,h);else if(U=c.exec(Y)){let K=U[1]|0,Z=U[2]|0,AA=u+Y.length,gA,R=!1;if(!this.entries[K])R=!0;else if(this.entries[K].gen===Z)try{new zt({lexer:new dt(B.makeSubStream(AA))}).getObj(),R=!0}catch(QA){QA instanceof Sa?k(`indexObjects -- checking object (${Y}): "${QA}".`):R=!0}R&&(this.entries[K]={offset:u-B.start,gen:Z,uncompressed:!0}),o.lastIndex=AA;let _=o.exec(E);_?(gA=o.lastIndex+1-u,_[1]!=="endobj"&&(k(`indexObjects: Found "${_[1]}" inside of another "obj", caused by missing "endobj" -- trying to recover.`),gA-=_[1].length+1)):gA=f-u;let tA=Q.subarray(u,u+gA),IA=g(tA,0,C);IA0?Math.max(...this._xrefStms):null}getEntry(A){let t=this.entries[A];return t&&!t.free&&t.offset?t:null}fetchIfRef(A,t=!1){return A instanceof oA?this.fetch(A,t):A}fetch(A,t=!1){if(!(A instanceof oA))throw new Error("ref object is not a reference");let i=A.num,s=this._cacheMap.get(i);if(s!==void 0)return s instanceof F&&!s.objId&&(s.objId=A.toString()),s;let a=this.getEntry(i);if(a===null)return this._cacheMap.set(i,a),a;if(this._pendingRefs.has(A))return this._pendingRefs.remove(A),k(`Ignoring circular reference: ${A}.`),Ku;this._pendingRefs.put(A);try{a=a.uncompressed?this.fetchUncompressed(A,a,t):this.fetchCompressed(A,a,t),this._pendingRefs.remove(A)}catch(n){throw this._pendingRefs.remove(A),n}return a instanceof F?a.objId=A.toString():a instanceof KA&&(a.dict.objId=A.toString()),a}fetchUncompressed(A,t,i=!1){let s=A.gen,a=A.num;if(t.gen!==s){let c=`Inconsistent generation in XRef: ${A}`;if(this._generationFallback&&t.gen0&&t[3]-t[1]>0)return t;k(`Empty, or invalid, /${A} entry.`)}return null}get mediaBox(){return nA(this,"mediaBox",this._getBoundingBox("MediaBox")||xx)}get cropBox(){return nA(this,"cropBox",this._getBoundingBox("CropBox")||this.mediaBox)}get userUnit(){let A=this.pageDict.get("UserUnit");return(typeof A!="number"||A<=0)&&(A=dx),nA(this,"userUnit",A)}get view(){let{cropBox:A,mediaBox:t}=this;if(A!==t&&!Ss(A,t)){let i=Ce.intersect(A,t);if(i&&i[2]-i[0]>0&&i[3]-i[1]>0)return nA(this,"view",i);k("Empty /CropBox and /MediaBox intersection.")}return nA(this,"view",t)}get rotate(){let A=this._getInheritableProperty("Rotate")||0;return A%90!==0?A=0:A>=360?A%=360:A<0&&(A=(A%360+360)%360),nA(this,"rotate",A)}_onSubStreamError(A,t){if(this.evaluatorOptions.ignoreErrors){k(`getContentStream - ignoring sub-stream (${t}): "${A}".`);return}throw A}getContentStream(){return this.pdfManager.ensure(this,"content").then(A=>A instanceof KA?A:Array.isArray(A)?new sI(A,this._onSubStreamError.bind(this)):new Rs)}get xfaData(){return nA(this,"xfaData",this.xfaFactory?{bbox:this.xfaFactory.getBoundingBox(this.pageIndex)}:null)}async saveNewAnnotations(A,t,i,s){if(this.xfaFactory)throw new Error("XFA: Cannot save new annotations.");let a=new Lt({xref:this.xref,handler:A,pageIndex:this.pageIndex,idFactory:this._localIdFactory,fontCache:this.fontCache,builtInCMapCache:this.builtInCMapCache,standardFontDataCache:this.standardFontDataCache,globalImageCache:this.globalImageCache,systemFontCache:this.systemFontCache,options:this.evaluatorOptions}),n=new mt,r=new be;mA(this,xn,t1).call(this,i,n,r);let g=this.pageDict,o=this.annotations.filter(C=>!(C instanceof oA&&n.has(C))),I=await ei.saveNewAnnotations(a,t,i,s);for(let{ref:C}of I.annotations)C instanceof oA&&!r.has(C)&&o.push(C);let c=g.get("Annots");g.set("Annots",o);let l=[];await ot(this.ref,g,l,this.xref),c&&g.set("Annots",c);let h=I.dependencies;h.push({ref:this.ref,data:l.join("")},...I.annotations);for(let C of n)h.push({ref:C,data:null});return h}save(A,t,i){let s=new Lt({xref:this.xref,handler:A,pageIndex:this.pageIndex,idFactory:this._localIdFactory,fontCache:this.fontCache,builtInCMapCache:this.builtInCMapCache,standardFontDataCache:this.standardFontDataCache,globalImageCache:this.globalImageCache,systemFontCache:this.systemFontCache,options:this.evaluatorOptions});return this._parsedAnnotations.then(function(a){let n=[];for(let r of a)r.mustBePrinted(i)&&n.push(r.save(s,t,i).catch(function(g){return k(`save - ignoring annotation data during "${t.name}" task: "${g}".`),null}));return Promise.all(n).then(function(r){return r.filter(g=>!!g)})})}loadResources(A){return this.resourcesPromise||(this.resourcesPromise=this.pdfManager.ensure(this,"resources")),this.resourcesPromise.then(()=>new Hs(this.resources,A,this.xref).load())}getOperatorList({handler:A,sink:t,task:i,intent:s,cacheKey:a,annotationStorage:n=null,modifiedIds:r=null}){let g=this.getContentStream(),o=this.loadResources(["ColorSpace","ExtGState","Font","Pattern","Properties","Shading","XObject"]),I=new Lt({xref:this.xref,handler:A,pageIndex:this.pageIndex,idFactory:this._localIdFactory,fontCache:this.fontCache,builtInCMapCache:this.builtInCMapCache,standardFontDataCache:this.standardFontDataCache,globalImageCache:this.globalImageCache,systemFontCache:this.systemFontCache,options:this.evaluatorOptions}),c=this.xfaFactory?null:$E(n),l=c==null?void 0:c.get(this.pageIndex),h=Promise.resolve(null),C=null;if(l){let Q=this.pdfManager.ensureDoc("annotationGlobals"),E,f=new Set;for(let{bitmapId:d,bitmap:x}of l)d&&!x&&!f.has(d)&&f.add(d);let{isOffscreenCanvasSupported:u}=this.evaluatorOptions;if(f.size>0){let d=l.slice();for(let[x,p]of n)x.startsWith(TE)&&p.bitmap&&f.has(p.bitmapId)&&d.push(p);E=ei.generateImages(d,this.xref,u)}else E=ei.generateImages(l,this.xref,u);C=new be,mA(this,xn,t1).call(this,l,C,null),h=Q.then(d=>d?ei.printNewAnnotations(d,I,i,l,E):null)}let B=Promise.all([g,o]).then(([Q])=>{let E=new ze(s,t);return A.send("StartRenderPage",{transparency:I.hasBlendModes(this.resources,this.nonBlendModesSet),pageIndex:this.pageIndex,cacheKey:a}),I.getOperatorList({stream:Q,task:i,resources:this.resources,operatorList:E}).then(function(){return E})});return Promise.all([B,this._parsedAnnotations,h]).then(function([Q,E,f]){if(f){E=E.filter(S=>!(S.ref&&C.has(S.ref)));for(let S=0,w=f.length;SK.ref&&ur(K.ref,Y.refToReplace));U>=0&&(E.splice(U,1,Y),f.splice(S--,1),w--)}}E=E.concat(f)}if(E.length===0||s&st.ANNOTATIONS_DISABLE)return Q.flush(!0),{length:Q.totalLength};let u=!!(s&st.ANNOTATIONS_FORMS),d=!!(s&st.IS_EDITING),x=!!(s&st.ANY),p=!!(s&st.DISPLAY),m=!!(s&st.PRINT),D=[];for(let S of E)(x||p&&S.mustBeViewed(n,u)&&S.mustBeViewedWhenEditing(d,r)||m&&S.mustBePrinted(n))&&D.push(S.getOperatorList(I,i,s,n).catch(function(w){return k(`getOperatorList - ignoring annotation data during "${i.name}" task: "${w}".`),{opList:null,separateForm:!1,separateCanvas:!1}}));return Promise.all(D).then(function(S){let w=!1,Y=!1;for(let{opList:U,separateForm:K,separateCanvas:Z}of S)Q.addOpList(U),w||(w=K),Y||(Y=Z);return Q.flush(!0,{form:w,canvas:Y}),{length:Q.totalLength}})})}async extractTextContent({handler:A,task:t,includeMarkedContent:i,disableNormalization:s,sink:a}){let n=this.getContentStream(),r=this.loadResources(["ExtGState","Font","Properties","XObject"]),g=this.pdfManager.ensureCatalog("lang"),[o,,I]=await Promise.all([n,r,g]);return new Lt({xref:this.xref,handler:A,pageIndex:this.pageIndex,idFactory:this._localIdFactory,fontCache:this.fontCache,builtInCMapCache:this.builtInCMapCache,standardFontDataCache:this.standardFontDataCache,globalImageCache:this.globalImageCache,systemFontCache:this.systemFontCache,options:this.evaluatorOptions}).getTextContent({stream:o,task:t,resources:this.resources,includeMarkedContent:i,disableNormalization:s,sink:a,viewBox:this.view,lang:I})}async getStructTree(){let A=await this.pdfManager.ensureCatalog("structTreeRoot");return A?(await this._parsedAnnotations,(await this.pdfManager.ensure(this,"_parseStructTree",[A])).serializable):null}_parseStructTree(A){let t=new Cc(A,this.pageDict);return t.parse(this.ref),t}async getAnnotationsData(A,t,i){let s=await this._parsedAnnotations;if(s.length===0)return s;let a=[],n=[],r,g=!!(i&st.ANY),o=!!(i&st.DISPLAY),I=!!(i&st.PRINT);for(let c of s){let l=g||o&&c.viewable;(l||I&&c.printable)&&a.push(c.data),c.hasTextContent&&l&&(r||(r=new Lt({xref:this.xref,handler:A,pageIndex:this.pageIndex,idFactory:this._localIdFactory,fontCache:this.fontCache,builtInCMapCache:this.builtInCMapCache,standardFontDataCache:this.standardFontDataCache,globalImageCache:this.globalImageCache,systemFontCache:this.systemFontCache,options:this.evaluatorOptions})),n.push(c.extractTextContent(r,t,[-1/0,-1/0,1/0,1/0]).catch(function(h){k(`getAnnotationsData - ignoring textContent during "${t.name}" task: "${h}".`)})))}return await Promise.all(n),a}get annotations(){let A=this._getInheritableProperty("Annots");return nA(this,"annotations",Array.isArray(A)?A:[])}get _parsedAnnotations(){let A=this.pdfManager.ensure(this,"annotations").then(async t=>{if(t.length===0)return t;let i=await this.pdfManager.ensureDoc("annotationGlobals");if(!i)return[];let s=[];for(let g of t)s.push(ei.create(this.xref,g,i,this._localIdFactory,!1,this.ref).catch(function(o){return k(`_parsedAnnotations: "${o}".`),null}));let a=[],n,r;for(let g of await Promise.all(s))if(g){if(g instanceof bt){(r||(r=[])).push(g);continue}if(g instanceof fg){(n||(n=[])).push(g);continue}a.push(g)}return r&&a.push(...r),n&&a.push(...n),a});return nA(this,"_parsedAnnotations",A)}get jsActions(){let A=Vg(this.xref,this.pageDict,Ru);return nA(this,"jsActions",A)}};xn=new WeakSet,t1=function(A,t,i){for(let s of A)if(s.id){let a=oA.fromString(s.id);if(!a){k(`A non-linked annotation cannot be modified: ${s.id}`);continue}if(s.deleted){t.put(a,a);continue}i==null||i.put(a),s.ref=a,delete s.id}};var YE=new Uint8Array([37,80,68,70,45]),KE=new Uint8Array([115,116,97,114,116,120,114,101,102]),mx=new Uint8Array([101,110,100,111,98,106]),vE=1024,px="\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0";function Lo(e,A,t=1024,i=!1){let s=A.length,a=e.peekBytes(t),n=a.length-s;if(n<=0)return!1;if(i){let r=s-1,g=a.length-1;for(;g>=r;){let o=0;for(;o=s)return e.pos+=g-r,!0;g--}}else{let r=0;for(;r<=n;){let g=0;for(;g=s)return e.pos+=r,!0;r++}}return!1}var mn,i1,mg=class{constructor(A,t){HA(this,mn);if(t.length<=0)throw new ks("The PDF file is empty, i.e. its size is zero bytes.");this.pdfManager=A,this.stream=t,this.xref=new e1(t,A),this._pagePromises=new Map,this._version=null;let i={font:0};this._globalIdFactory=class{static getDocId(){return`g_${A.docId}`}static createFontId(){return`f${++i.font}`}static createObjId(){OA("Abstract method `createObjId` called.")}static getPageObjId(){OA("Abstract method `getPageObjId` called.")}}}parse(A){this.xref.parse(A),this.catalog=new Pa(this.pdfManager,this.xref)}get linearization(){let A=null;try{A=mI.create(this.stream)}catch(t){if(t instanceof ge)throw t;PA(t)}return nA(this,"linearization",A)}get startXRef(){let A=this.stream,t=0;if(this.linearization){if(A.reset(),Lo(A,mx)){A.skip(6);let i=A.peekByte();for(;pt(i);)A.pos++,i=A.peekByte();t=A.pos-A.start}}else{let s=KE.length,a=!1,n=A.end;for(;!a&&n>0;)n-=1024-s,n<0&&(n=0),A.pos=n,a=Lo(A,KE,1024,!0);if(a){A.skip(9);let r;do r=A.getByte();while(pt(r));let g="";for(;r>=32&&r<=57;)g+=String.fromCharCode(r),r=A.getByte();t=parseInt(g,10),isNaN(t)&&(t=0)}}return nA(this,"startXRef",t)}checkHeader(){let A=this.stream;if(A.reset(),!Lo(A,YE))return;A.moveStart(),A.skip(YE.length);let t="",i;for(;(i=A.getByte())>32&&t.length<7;)t+=String.fromCharCode(i);XE.test(t)?this._version=t:k(`Invalid PDF header version: ${t}`)}parseStartXRef(){this.xref.setStartXRef(this.startXRef)}get numPages(){let A=0;return this.catalog.hasActualNumPages?A=this.catalog.numPages:this.xfaFactory?A=this.xfaFactory.getNumPages():this.linearization?A=this.linearization.numPages:A=this.catalog.numPages,nA(this,"numPages",A)}_hasOnlyDocumentSignatures(A,t=0){return Array.isArray(A)?A.every(s=>{if(s=this.xref.fetchIfRef(s),!(s instanceof F))return!1;if(s.has("Kids"))return++t>10?(k("_hasOnlyDocumentSignatures: maximum recursion depth reached"),!1):this._hasOnlyDocumentSignatures(s.get("Kids"),t);let a=ye(s.get("FT"),"Sig"),n=s.get("Rect"),r=Array.isArray(n)&&n.every(g=>g===0);return a&&r}):!1}get _xfaStreams(){let A=this.catalog.acroForm;if(!A)return null;let t=A.get("XFA"),i={"xdp:xdp":"",template:"",datasets:"",config:"",connectionSet:"",localeSet:"",stylesheet:"","/xdp:xdp":""};if(t instanceof KA&&!t.isEmpty)return i["xdp:xdp"]=t,i;if(!Array.isArray(t)||t.length===0)return null;for(let s=0,a=t.length;s{l.set(Q,E)});let h=[];for(let[Q,E]of l){let f=E.get("FontDescriptor");if(!(f instanceof F))continue;let u=f.get("FontFamily");u=u.replaceAll(/[ ]+(\\d)/g,"$1");let d=f.get("FontWeight"),x=-f.get("ItalicAngle"),p={fontFamily:u,fontWeight:d,italicAngle:x};Ou(p)&&h.push(g.handleSetFont(s,[M.get(Q),1],null,o,t,c,null,p).catch(function(m){return k(`loadXfaFonts: "${m}".`),null}))}await Promise.all(h);let C=this.xfaFactory.setFonts(I);if(!C)return;r.ignoreErrors=!0,h.length=0,I.length=0;let B=new Set;for(let Q of C)B1(`${Q}-Regular`)||B.add(Q);B.size&&C.push("PdfJS-Fallback");for(let Q of C)if(!B.has(Q))for(let E of[{name:"Regular",fontWeight:400,italicAngle:0},{name:"Bold",fontWeight:700,italicAngle:0},{name:"Italic",fontWeight:400,italicAngle:12},{name:"BoldItalic",fontWeight:700,italicAngle:12}]){let f=`${Q}-${E.name}`,u=pf(f);h.push(g.handleSetFont(s,[M.get(f),1],null,o,t,c,u,{fontFamily:Q,fontWeight:E.fontWeight,italicAngle:E.italicAngle}).catch(function(d){return k(`loadXfaFonts: "${d}".`),null}))}await Promise.all(h),this.xfaFactory.appendFonts(I,B)}async serializeXfaData(A){return this.xfaFactory?this.xfaFactory.serializeData(A):null}get version(){return this.catalog.version||this._version}get formInfo(){let A={hasFields:!1,hasAcroForm:!1,hasXfa:!1,hasSignatures:!1},t=this.catalog.acroForm;if(!t)return nA(this,"formInfo",A);try{let i=t.get("Fields"),s=Array.isArray(i)&&i.length>0;A.hasFields=s;let a=t.get("XFA");A.hasXfa=Array.isArray(a)&&a.length>0||a instanceof KA&&!a.isEmpty;let r=!!(t.get("SigFlags")&1),g=r&&this._hasOnlyDocumentSignatures(i);A.hasAcroForm=s&&!g,A.hasSignatures=r}catch(i){if(i instanceof ge)throw i;k(`Cannot fetch form information: "${i}".`)}return nA(this,"formInfo",A)}get documentInfo(){let A={PDFFormatVersion:this.version,Language:this.catalog.lang,EncryptFilterName:this.xref.encrypt?this.xref.encrypt.filterName:null,IsLinearized:!!this.linearization,IsAcroFormPresent:this.formInfo.hasAcroForm,IsXFAPresent:this.formInfo.hasXfa,IsCollectionPresent:!!this.catalog.collection,IsSignaturesPresent:this.formInfo.hasSignatures},t;try{t=this.xref.trailer.get("Info")}catch(i){if(i instanceof ge)throw i;PA("The document information dictionary is invalid.")}if(!(t instanceof F))return nA(this,"documentInfo",A);for(let i of t.getKeys()){let s=t.get(i);switch(i){case"Title":case"Author":case"Subject":case"Keywords":case"Creator":case"Producer":case"CreationDate":case"ModDate":if(typeof s=="string"){A[i]=jA(s);continue}break;case"Trapped":if(s instanceof M){A[i]=s;continue}break;default:let a;switch(typeof s){case"string":a=jA(s);break;case"number":case"boolean":a=s;break;default:s instanceof M&&(a=s);break}if(a===void 0){k(`Bad value, for custom key "${i}", in Info: ${s}.`);continue}A.Custom||(A.Custom=Object.create(null)),A.Custom[i]=a;continue}k(`Bad value, for key "${i}", in Info: ${s}.`)}return nA(this,"documentInfo",A)}get fingerprints(){function A(n){return typeof n=="string"&&n.length>0&&n!==px}function t(n){let r=[];for(let g of n){let o=g.toString(16);r.push(o.padStart(2,"0"))}return r.join("")}let i=this.xref.trailer.get("ID"),s,a;return Array.isArray(i)&&A(i[0])?(s=Pe(i[0]),i[1]!==i[0]&&A(i[1])&&(a=Pe(i[1]))):s=Ri(this.stream.getByteRange(0,vE),0,vE),nA(this,"fingerprints",[t(s),a?t(a):null])}async _getLinearizationPage(A){let{catalog:t,linearization:i,xref:s}=this,a=oA.get(i.objectNumberFirst,0);try{let n=await s.fetchAsync(a);if(n instanceof F){let r=n.getRaw("Type");if(r instanceof oA&&(r=await s.fetchAsync(r)),ye(r,"Page")||!n.has("Type")&&!n.has("Kids")&&n.has("Contents"))return t.pageKidsCountCache.has(a)||t.pageKidsCountCache.put(a,1),t.pageIndexCache.has(a)||t.pageIndexCache.put(a,0),[n,a]}throw new v("The Linearization dictionary doesn\'t point to a valid Page dictionary.")}catch(n){return k(`_getLinearizationPage: "${n.message}".`),t.getPageDict(A)}}getPage(A){let t=this._pagePromises.get(A);if(t)return t;let{catalog:i,linearization:s,xfaFactory:a}=this,n;return a?n=Promise.resolve([F.empty,null]):(s==null?void 0:s.pageFirst)===A?n=this._getLinearizationPage(A):n=i.getPageDict(A),n=n.then(([r,g])=>new xg({pdfManager:this.pdfManager,xref:this.xref,pageIndex:A,pageDict:r,ref:g,globalIdFactory:this._globalIdFactory,fontCache:i.fontCache,builtInCMapCache:i.builtInCMapCache,standardFontDataCache:i.standardFontDataCache,globalImageCache:i.globalImageCache,systemFontCache:i.systemFontCache,nonBlendModesSet:i.nonBlendModesSet,xfaFactory:a})),this._pagePromises.set(A,n),n}async checkFirstPage(A=!1){if(!A)try{await this.getPage(0)}catch(t){if(t instanceof ti)throw this._pagePromises.delete(0),await this.cleanup(),new Pi}}async checkLastPage(A=!1){let{catalog:t,pdfManager:i}=this;t.setActualNumPages();let s;try{if(await Promise.all([i.ensureDoc("xfaFactory"),i.ensureDoc("linearization"),i.ensureCatalog("numPages")]),this.xfaFactory)return;if(this.linearization?s=this.linearization.numPages:s=t.numPages,Number.isInteger(s)){if(s<=1)return}else throw new v("Page count is not an integer.");await this.getPage(s-1)}catch(a){if(this._pagePromises.delete(s-1),await this.cleanup(),a instanceof ti&&!A)throw new Pi;k(`checkLastPage - invalid /Pages tree /Count: ${s}.`);let n;try{n=await t.getAllPageDicts(A)}catch(r){if(r instanceof ti&&!A)throw new Pi;t.setActualNumPages(1);return}for(let[r,[g,o]]of n){let I;g instanceof Error?(I=Promise.reject(g),I.catch(()=>{})):I=Promise.resolve(new xg({pdfManager:i,xref:this.xref,pageIndex:r,pageDict:g,ref:o,globalIdFactory:this._globalIdFactory,fontCache:t.fontCache,builtInCMapCache:t.builtInCMapCache,standardFontDataCache:t.standardFontDataCache,globalImageCache:t.globalImageCache,systemFontCache:t.systemFontCache,nonBlendModesSet:t.nonBlendModesSet,xfaFactory:null})),this._pagePromises.set(r,I)}t.setActualNumPages(n.size)}}fontFallback(A,t){return this.catalog.fontFallback(A,t)}async cleanup(A=!1){return this.catalog?this.catalog.cleanup(A):E1()}get fieldObjects(){if(!this.formInfo.hasFields)return nA(this,"fieldObjects",Promise.resolve(null));let A=Promise.all([this.pdfManager.ensureDoc("annotationGlobals"),this.pdfManager.ensureCatalog("acroForm")]).then(async([t,i])=>{if(!t)return null;let s=new be,a=Object.create(null),n=new Map;for(let g of await i.getAsync("Fields"))await mA(this,mn,i1).call(this,"",g,n,t,s);let r=[];for(let[g,o]of n)r.push(Promise.all(o).then(I=>{I=I.filter(c=>!!c),I.length>0&&(a[g]=I)}));return await Promise.all(r),a});return nA(this,"fieldObjects",A)}get hasJSActions(){let A=this.pdfManager.ensureDoc("_parseHasJSActions");return nA(this,"hasJSActions",A)}async _parseHasJSActions(){let[A,t]=await Promise.all([this.pdfManager.ensureCatalog("jsActions"),this.pdfManager.ensureDoc("fieldObjects")]);return A?!0:t?Object.values(t).some(i=>i.some(s=>s.actions!==null)):!1}get calculationOrderIds(){let A=this.catalog.acroForm;if(!(A!=null&&A.has("CO")))return nA(this,"calculationOrderIds",null);let t=A.get("CO");if(!Array.isArray(t)||t.length===0)return nA(this,"calculationOrderIds",null);let i=[];for(let s of t)s instanceof oA&&i.push(s.toString());return i.length===0?nA(this,"calculationOrderIds",null):nA(this,"calculationOrderIds",i)}get annotationGlobals(){return nA(this,"annotationGlobals",ei.createGlobals(this.pdfManager))}};mn=new WeakSet,i1=async function(A,t,i,s,a){let{xref:n}=this;if(!(t instanceof oA)||a.has(t))return;a.put(t);let r=await n.fetchAsync(t);if(!(r instanceof F))return;if(r.has("T")){let o=jA(await r.getAsync("T"));A=A===""?o:`${A}.${o}`}else{let o=r;for(;;){if(o=o.getRaw("Parent"),o instanceof oA){if(a.has(o))break;o=await n.fetchAsync(o)}if(!(o instanceof F))break;if(o.has("T")){let I=jA(await o.getAsync("T"));A=A===""?I:`${A}.${I}`;break}}}if(i.has(A)||i.set(A,[]),i.get(A).push(ei.create(n,t,s,null,!0,null).then(o=>o==null?void 0:o.getFieldObject()).catch(function(o){return k(`#collectFieldObjects: "${o}".`),null})),!r.has("Kids"))return;let g=await r.getAsync("Kids");if(Array.isArray(g))for(let o of g)await mA(this,mn,i1).call(this,A,o,i,s,a)};function wx(e){if(e){let A=Qr(e);if(A)return A.href;k(`Invalid absolute docBaseUrl: "${e}".`)}return null}var pg=class{constructor(A){var t;this._docBaseUrl=wx(A.docBaseUrl),this._docId=A.docId,this._password=A.password,this.enableXfa=A.enableXfa,(t=A.evaluatorOptions).isOffscreenCanvasSupported&&(t.isOffscreenCanvasSupported=Ot.isOffscreenCanvasSupported),this.evaluatorOptions=Object.freeze(A.evaluatorOptions)}get docId(){return this._docId}get password(){return this._password}get docBaseUrl(){return this._docBaseUrl}get catalog(){return this.pdfDocument.catalog}ensureDoc(A,t){return this.ensure(this.pdfDocument,A,t)}ensureXRef(A,t){return this.ensure(this.pdfDocument.xref,A,t)}ensureCatalog(A,t){return this.ensure(this.pdfDocument.catalog,A,t)}getPage(A){return this.pdfDocument.getPage(A)}fontFallback(A,t){return this.pdfDocument.fontFallback(A,t)}loadXfaFonts(A,t){return this.pdfDocument.loadXfaFonts(A,t)}loadXfaImages(){return this.pdfDocument.loadXfaImages()}serializeXfaData(A){return this.pdfDocument.serializeXfaData(A)}cleanup(A=!1){return this.pdfDocument.cleanup(A)}async ensure(A,t,i){OA("Abstract method `ensure` called")}requestRange(A,t){OA("Abstract method `requestRange` called")}requestLoadedStream(A=!1){OA("Abstract method `requestLoadedStream` called")}sendProgressiveData(A){OA("Abstract method `sendProgressiveData` called")}updatePassword(A){this._password=A}terminate(A){OA("Abstract method `terminate` called")}},wg=class extends pg{constructor(A){super(A);let t=new Ie(A.source);this.pdfDocument=new mg(this,t),this._loadedStreamPromise=Promise.resolve(t)}async ensure(A,t,i){let s=A[t];return typeof s=="function"?s.apply(A,i):s}requestRange(A,t){return Promise.resolve()}requestLoadedStream(A=!1){return this._loadedStreamPromise}terminate(A){}},s1=class extends pg{constructor(A){super(A),this.streamManager=new To(A.source,{msgHandler:A.handler,length:A.length,disableAutoFetch:A.disableAutoFetch,rangeChunkSize:A.rangeChunkSize}),this.pdfDocument=new mg(this,this.streamManager.getStream())}async ensure(A,t,i){try{let s=A[t];return typeof s=="function"?s.apply(A,i):s}catch(s){if(!(s instanceof ge))throw s;return await this.requestRange(s.begin,s.end),this.ensure(A,t,i)}}requestRange(A,t){return this.streamManager.requestRange(A,t)}requestLoadedStream(A=!1){return this.streamManager.requestAllChunks(A)}sendProgressiveData(A){this.streamManager.onReceiveData({chunk:A})}terminate(A){this.streamManager.abort(A)}},_n={UNKNOWN:0,DATA:1,ERROR:2},ke={UNKNOWN:0,CANCEL:1,CANCEL_COMPLETE:2,CLOSE:3,ENQUEUE:4,ERROR:5,PULL:6,PULL_COMPLETE:7,START_COMPLETE:8};function ut(e){switch(e instanceof Error||typeof e=="object"&&e!==null||OA(\'wrapReason: Expected "reason" to be a (possibly cloned) Error.\'),e.name){case"AbortException":return new ve(e.message);case"MissingPDFException":return new Er(e.message);case"PasswordException":return new bs(e.message,e.code);case"UnexpectedResponseException":return new fr(e.message,e.status);case"UnknownErrorException":return new Ds(e.message,e.details);default:return new Ds(e.message,e.toString())}}var Zg,gu,jg,ou,ys,hr,yg=class{constructor(A,t,i){HA(this,Zg);HA(this,jg);HA(this,ys);this.sourceName=A,this.targetName=t,this.comObj=i,this.callbackId=1,this.streamId=1,this.streamSinks=Object.create(null),this.streamControllers=Object.create(null),this.callbackCapabilities=Object.create(null),this.actionHandler=Object.create(null),this._onComObjOnMessage=s=>{let a=s.data;if(a.targetName!==this.sourceName)return;if(a.stream){mA(this,jg,ou).call(this,a);return}if(a.callback){let r=a.callbackId,g=this.callbackCapabilities[r];if(!g)throw new Error(`Cannot resolve callback ${r}`);if(delete this.callbackCapabilities[r],a.callback===_n.DATA)g.resolve(a.data);else if(a.callback===_n.ERROR)g.reject(ut(a.reason));else throw new Error("Unexpected callback case");return}let n=this.actionHandler[a.action];if(!n)throw new Error(`Unknown action from worker: ${a.action}`);if(a.callbackId){let r=this.sourceName,g=a.sourceName;new Promise(function(o){o(n(a.data))}).then(function(o){i.postMessage({sourceName:r,targetName:g,callback:_n.DATA,callbackId:a.callbackId,data:o})},function(o){i.postMessage({sourceName:r,targetName:g,callback:_n.ERROR,callbackId:a.callbackId,reason:ut(o)})});return}if(a.streamId){mA(this,Zg,gu).call(this,a);return}n(a.data)},i.addEventListener("message",this._onComObjOnMessage)}on(A,t){let i=this.actionHandler;if(i[A])throw new Error(`There is already an actionName called "${A}"`);i[A]=t}send(A,t,i){this.comObj.postMessage({sourceName:this.sourceName,targetName:this.targetName,action:A,data:t},i)}sendWithPromise(A,t,i){let s=this.callbackId++,a=Promise.withResolvers();this.callbackCapabilities[s]=a;try{this.comObj.postMessage({sourceName:this.sourceName,targetName:this.targetName,action:A,callbackId:s,data:t},i)}catch(n){a.reject(n)}return a.promise}sendWithStream(A,t,i,s){let a=this.streamId++,n=this.sourceName,r=this.targetName,g=this.comObj;return new ReadableStream({start:o=>{let I=Promise.withResolvers();return this.streamControllers[a]={controller:o,startCall:I,pullCall:null,cancelCall:null,isClosed:!1},g.postMessage({sourceName:n,targetName:r,action:A,streamId:a,data:t,desiredSize:o.desiredSize},s),I.promise},pull:o=>{let I=Promise.withResolvers();return this.streamControllers[a].pullCall=I,g.postMessage({sourceName:n,targetName:r,stream:ke.PULL,streamId:a,desiredSize:o.desiredSize}),I.promise},cancel:o=>{gt(o instanceof Error,"cancel must have a valid reason");let I=Promise.withResolvers();return this.streamControllers[a].cancelCall=I,this.streamControllers[a].isClosed=!0,g.postMessage({sourceName:n,targetName:r,stream:ke.CANCEL,streamId:a,reason:ut(o)}),I.promise}},i)}destroy(){this.comObj.removeEventListener("message",this._onComObjOnMessage)}};Zg=new WeakSet,gu=function(A){let t=A.streamId,i=this.sourceName,s=A.sourceName,a=this.comObj,n=this,r=this.actionHandler[A.action],g={enqueue(o,I=1,c){if(this.isCancelled)return;let l=this.desiredSize;this.desiredSize-=I,l>0&&this.desiredSize<=0&&(this.sinkCapability=Promise.withResolvers(),this.ready=this.sinkCapability.promise),a.postMessage({sourceName:i,targetName:s,stream:ke.ENQUEUE,streamId:t,chunk:o},c)},close(){this.isCancelled||(this.isCancelled=!0,a.postMessage({sourceName:i,targetName:s,stream:ke.CLOSE,streamId:t}),delete n.streamSinks[t])},error(o){gt(o instanceof Error,"error must have a valid reason"),!this.isCancelled&&(this.isCancelled=!0,a.postMessage({sourceName:i,targetName:s,stream:ke.ERROR,streamId:t,reason:ut(o)}))},sinkCapability:Promise.withResolvers(),onPull:null,onCancel:null,isCancelled:!1,desiredSize:A.desiredSize,ready:null};g.sinkCapability.resolve(),g.ready=g.sinkCapability.promise,this.streamSinks[t]=g,new Promise(function(o){o(r(A.data,g))}).then(function(){a.postMessage({sourceName:i,targetName:s,stream:ke.START_COMPLETE,streamId:t,success:!0})},function(o){a.postMessage({sourceName:i,targetName:s,stream:ke.START_COMPLETE,streamId:t,reason:ut(o)})})},jg=new WeakSet,ou=function(A){let t=A.streamId,i=this.sourceName,s=A.sourceName,a=this.comObj,n=this.streamControllers[t],r=this.streamSinks[t];switch(A.stream){case ke.START_COMPLETE:A.success?n.startCall.resolve():n.startCall.reject(ut(A.reason));break;case ke.PULL_COMPLETE:A.success?n.pullCall.resolve():n.pullCall.reject(ut(A.reason));break;case ke.PULL:if(!r){a.postMessage({sourceName:i,targetName:s,stream:ke.PULL_COMPLETE,streamId:t,success:!0});break}r.desiredSize<=0&&A.desiredSize>0&&r.sinkCapability.resolve(),r.desiredSize=A.desiredSize,new Promise(function(g){var o;g((o=r.onPull)==null?void 0:o.call(r))}).then(function(){a.postMessage({sourceName:i,targetName:s,stream:ke.PULL_COMPLETE,streamId:t,success:!0})},function(g){a.postMessage({sourceName:i,targetName:s,stream:ke.PULL_COMPLETE,streamId:t,reason:ut(g)})});break;case ke.ENQUEUE:if(gt(n,"enqueue should have stream controller"),n.isClosed)break;n.controller.enqueue(A.chunk);break;case ke.CLOSE:if(gt(n,"close should have stream controller"),n.isClosed)break;n.isClosed=!0,n.controller.close(),mA(this,ys,hr).call(this,n,t);break;case ke.ERROR:gt(n,"error should have stream controller"),n.controller.error(ut(A.reason)),mA(this,ys,hr).call(this,n,t);break;case ke.CANCEL_COMPLETE:A.success?n.cancelCall.resolve():n.cancelCall.reject(ut(A.reason)),mA(this,ys,hr).call(this,n,t);break;case ke.CANCEL:if(!r)break;new Promise(function(g){var o;g((o=r.onCancel)==null?void 0:o.call(r,ut(A.reason)))}).then(function(){a.postMessage({sourceName:i,targetName:s,stream:ke.CANCEL_COMPLETE,streamId:t,success:!0})},function(g){a.postMessage({sourceName:i,targetName:s,stream:ke.CANCEL_COMPLETE,streamId:t,reason:ut(g)})}),r.sinkCapability.reject(ut(A.reason)),r.isCancelled=!0,delete this.streamSinks[t];break;default:throw new Error("Unexpected stream case")}},ys=new WeakSet,hr=async function(A,t){var i,s,a;await Promise.allSettled([(i=A.startCall)==null?void 0:i.promise,(s=A.pullCall)==null?void 0:s.promise,(a=A.cancelCall)==null?void 0:a.promise]),delete this.streamControllers[t]};var a1=class{constructor(A){this._msgHandler=A,this._contentLength=null,this._fullRequestReader=null,this._rangeRequestReaders=[]}getFullReader(){return gt(!this._fullRequestReader,"PDFWorkerStream.getFullReader can only be called once."),this._fullRequestReader=new n1(this._msgHandler),this._fullRequestReader}getRangeReader(A,t){let i=new r1(A,t,this._msgHandler);return this._rangeRequestReaders.push(i),i}cancelAllRequests(A){var t;(t=this._fullRequestReader)==null||t.cancel(A);for(let i of this._rangeRequestReaders.slice(0))i.cancel(A)}},n1=class{constructor(A){this._msgHandler=A,this.onProgress=null,this._contentLength=null,this._isRangeSupported=!1,this._isStreamingSupported=!1;let t=this._msgHandler.sendWithStream("GetReader");this._reader=t.getReader(),this._headersReady=this._msgHandler.sendWithPromise("ReaderHeadersReady").then(i=>{this._isStreamingSupported=i.isStreamingSupported,this._isRangeSupported=i.isRangeSupported,this._contentLength=i.contentLength})}get headersReady(){return this._headersReady}get contentLength(){return this._contentLength}get isStreamingSupported(){return this._isStreamingSupported}get isRangeSupported(){return this._isRangeSupported}async read(){let{value:A,done:t}=await this._reader.read();return t?{value:void 0,done:!0}:{value:A.buffer,done:!1}}cancel(A){this._reader.cancel(A)}},r1=class{constructor(A,t,i){this._msgHandler=i,this.onProgress=null;let s=this._msgHandler.sendWithStream("GetRangeReader",{begin:A,end:t});this._reader=s.getReader()}get isStreamingSupported(){return!1}async read(){let{value:A,done:t}=await this._reader.read();return t?{value:void 0,done:!0}:{value:A.buffer,done:!1}}cancel(A){this._reader.cancel(A)}},li=class{constructor(A){this.name=A,this.terminated=!1,this._capability=Promise.withResolvers()}get finished(){return this._capability.promise}finish(){this._capability.resolve()}terminate(){this.terminated=!0}ensureNotTerminated(){if(this.terminated)throw new Error("Worker task was terminated")}},H0=class{static setup(A,t){let i=!1;A.on("test",function(s){i||(i=!0,A.send("test",s instanceof Uint8Array))}),A.on("configure",function(s){Nu(s.verbosity)}),A.on("GetDocRequest",function(s){return H0.createDocumentHandler(s,t)})}static createDocumentHandler(A,t){let i,s=!1,a=null,n=new Set,r=Gu(),{docId:g,apiVersion:o}=A,I="4.6.82";if(o!==I)throw new Error(`The API version "${o}" does not match the Worker version "${I}".`);let c=[];for(let d in[])c.push(d);if(c.length)throw new Error("The `Array.prototype` contains unexpected enumerable properties: "+c.join(", ")+"; thus breaking e.g. `for...in` iteration of `Array`s.");let l=g+"_worker",h=new yg(l,g,t);function C(){if(s)throw new Error("Worker was terminated")}function B(d){n.add(d)}function Q(d){d.finish(),n.delete(d)}async function E(d){await i.ensureDoc("checkHeader"),await i.ensureDoc("parseStartXRef"),await i.ensureDoc("parse",[d]),await i.ensureDoc("checkFirstPage",[d]),await i.ensureDoc("checkLastPage",[d]);let x=await i.ensureDoc("isPureXfa");if(x){let S=new li("loadXfaFonts");B(S),await Promise.all([i.loadXfaFonts(h,S).catch(w=>{}).then(()=>Q(S)),i.loadXfaImages()])}let[p,m]=await Promise.all([i.ensureDoc("numPages"),i.ensureDoc("fingerprints")]),D=x?await i.ensureDoc("htmlForXfa"):null;return{numPages:p,fingerprints:m,htmlForXfa:D}}function f({data:d,password:x,disableAutoFetch:p,rangeChunkSize:m,length:D,docBaseUrl:S,enableXfa:w,evaluatorOptions:Y}){let U={source:null,disableAutoFetch:p,docBaseUrl:S,docId:g,enableXfa:w,evaluatorOptions:Y,handler:h,length:D,password:x,rangeChunkSize:m},K=Promise.withResolvers(),Z;if(d){try{U.source=d,Z=new wg(U),K.resolve(Z)}catch(IA){K.reject(IA)}return K.promise}let AA,gA=[];try{AA=new a1(h)}catch(IA){return K.reject(IA),K.promise}let R=AA.getFullReader();R.headersReady.then(function(){if(R.isRangeSupported){U.source=AA,U.length=R.contentLength,U.disableAutoFetch||(U.disableAutoFetch=R.isStreamingSupported),Z=new s1(U);for(let IA of gA)Z.sendProgressiveData(IA);gA=[],K.resolve(Z),a=null}}).catch(function(IA){K.reject(IA),a=null});let _=0,tA=function(){let IA=VE(gA);D&&IA.length!==D&&k("reported HTTP length is different from actual");try{U.source=IA,Z=new wg(U),K.resolve(Z)}catch(QA){K.reject(QA)}gA=[]};return new Promise(function(IA,QA){let V=function({value:lA,done:EA}){try{if(C(),EA){Z||tA(),a=null;return}_+=lA.byteLength,R.isStreamingSupported||h.send("DocProgress",{loaded:_,total:Math.max(_,R.contentLength||0)}),Z?Z.sendProgressiveData(lA):gA.push(lA),R.read().then(V,QA)}catch(fA){QA(fA)}};R.read().then(V,QA)}).catch(function(IA){K.reject(IA),a=null}),a=function(IA){AA.cancelAllRequests(IA)},K.promise}function u(d){function x(D){C(),h.send("GetDoc",{pdfInfo:D})}function p(D){if(C(),D instanceof bs){let S=new li(`PasswordException: response ${D.code}`);B(S),h.sendWithPromise("PasswordRequest",D).then(function({password:w}){Q(S),i.updatePassword(w),m()}).catch(function(){Q(S),h.send("DocException",D)})}else D instanceof ks||D instanceof Er||D instanceof fr||D instanceof Ds?h.send("DocException",D):h.send("DocException",new Ds(D.message,D.toString()))}function m(){C(),E(!1).then(x,function(D){if(C(),!(D instanceof Pi)){p(D);return}i.requestLoadedStream().then(function(){C(),E(!0).then(x,p)})})}C(),f(d).then(function(D){if(s)throw D.terminate(new ve("Worker was terminated.")),new Error("Worker was terminated");i=D,i.requestLoadedStream(!0).then(S=>{h.send("DataLoaded",{length:S.bytes.byteLength})})}).then(m,p)}return h.on("GetPage",function(d){return i.getPage(d.pageIndex).then(function(x){return Promise.all([i.ensure(x,"rotate"),i.ensure(x,"ref"),i.ensure(x,"userUnit"),i.ensure(x,"view")]).then(function([p,m,D,S]){var w;return{rotate:p,ref:m,refStr:(w=m==null?void 0:m.toString())!=null?w:null,userUnit:D,view:S}})})}),h.on("GetPageIndex",function(d){let x=oA.get(d.num,d.gen);return i.ensureCatalog("getPageIndex",[x])}),h.on("GetDestinations",function(d){return i.ensureCatalog("destinations")}),h.on("GetDestination",function(d){return i.ensureCatalog("getDestination",[d.id])}),h.on("GetPageLabels",function(d){return i.ensureCatalog("pageLabels")}),h.on("GetPageLayout",function(d){return i.ensureCatalog("pageLayout")}),h.on("GetPageMode",function(d){return i.ensureCatalog("pageMode")}),h.on("GetViewerPreferences",function(d){return i.ensureCatalog("viewerPreferences")}),h.on("GetOpenAction",function(d){return i.ensureCatalog("openAction")}),h.on("GetAttachments",function(d){return i.ensureCatalog("attachments")}),h.on("GetDocJSActions",function(d){return i.ensureCatalog("jsActions")}),h.on("GetPageJSActions",function({pageIndex:d}){return i.getPage(d).then(function(x){return i.ensure(x,"jsActions")})}),h.on("GetOutline",function(d){return i.ensureCatalog("documentOutline")}),h.on("GetOptionalContentConfig",function(d){return i.ensureCatalog("optionalContentConfig")}),h.on("GetPermissions",function(d){return i.ensureCatalog("permissions")}),h.on("GetMetadata",function(d){return Promise.all([i.ensureDoc("documentInfo"),i.ensureCatalog("metadata")])}),h.on("GetMarkInfo",function(d){return i.ensureCatalog("markInfo")}),h.on("GetData",function(d){return i.requestLoadedStream().then(function(x){return x.bytes})}),h.on("GetAnnotations",function({pageIndex:d,intent:x}){return i.getPage(d).then(function(p){let m=new li(`GetAnnotations: page ${d}`);return B(m),p.getAnnotationsData(h,m,x).then(D=>(Q(m),D),D=>{throw Q(m),D})})}),h.on("GetFieldObjects",function(d){return i.ensureDoc("fieldObjects")}),h.on("HasJSActions",function(d){return i.ensureDoc("hasJSActions")}),h.on("GetCalculationOrderIds",function(d){return i.ensureDoc("calculationOrderIds")}),h.on("SaveDocument",async function({isPureXfa:d,numPages:x,annotationStorage:p,filename:m}){var H;let D=[i.requestLoadedStream(),i.ensureCatalog("acroForm"),i.ensureCatalog("acroFormRef"),i.ensureDoc("startXRef"),i.ensureDoc("xref"),i.ensureDoc("linearization"),i.ensureCatalog("structTreeRoot")],S=[],w=d?null:$E(p),[Y,U,K,Z,AA,gA,R]=await Promise.all(D),_=AA.trailer.getRaw("Root")||null,tA;if(w){R?await R.canUpdateStructTree({pdfManager:i,xref:AA,newAnnotationsByPage:w})&&(tA=R):await Ui.canCreateStructureTree({catalogRef:_,pdfManager:i,newAnnotationsByPage:w})&&(tA=null);let q=ei.generateImages(p.values(),AA,i.evaluatorOptions.isOffscreenCanvasSupported),T=tA===void 0?S:[];for(let[$,X]of w)T.push(i.getPage($).then(W=>{let G=new li(`Save (editor): page ${$}`);return W.saveNewAnnotations(h,G,X,q).finally(function(){Q(G)})}));tA===null?S.push(Promise.all(T).then(async $=>(await Ui.createStructureTree({newAnnotationsByPage:w,xref:AA,catalogRef:_,pdfManager:i,newRefs:$}),$))):tA&&S.push(Promise.all(T).then(async $=>(await tA.updateStructureTree({newAnnotationsByPage:w,pdfManager:i,newRefs:$}),$)))}if(d)S.push(i.serializeXfaData(p));else for(let q=0;qq.needAppearances),EA=U instanceof F&&U.get("XFA")||null,fA=null,CA=!1;if(Array.isArray(EA)){for(let q=0,T=EA.length;q{typeof X=="string"&&(q[$]=jA(X))}),N={rootRef:_,encryptRef:AA.trailer.getRaw("Encrypt")||null,newRef:AA.getNewTemporaryRef(),infoRef:AA.trailer.getRaw("Info")||null,info:q,fileIds:AA.trailer.get("ID")||null,startXRef:gA?Z:(H=AA.lastXRefStreamPos)!=null?H:Z,filename:m}}return T9({originalData:Y.bytes,xrefInfo:N,newRefs:QA,xref:AA,hasXfa:!!EA,xfaDatasetsRef:fA,hasXfaDatasetsEntry:CA,needAppearances:lA,acroFormRef:K,acroForm:U,xfaData:V,useXrefStream:jE(AA.topDict,"XRef")}).finally(()=>{AA.resetNewTemporaryRef()})}),h.on("GetOperatorList",function(d,x){let p=d.pageIndex;i.getPage(p).then(function(m){let D=new li(`GetOperatorList: page ${p}`);B(D);let S=r>=Da.INFOS?Date.now():0;m.getOperatorList({handler:h,sink:x,task:D,intent:d.intent,cacheKey:d.cacheKey,annotationStorage:d.annotationStorage,modifiedIds:d.modifiedIds}).then(function(w){Q(D),S&&PA(`page=${p+1} - getOperatorList: time=${Date.now()-S}ms, len=${w.length}`),x.close()},function(w){Q(D),!D.terminated&&x.error(w)})})}),h.on("GetTextContent",function(d,x){let{pageIndex:p,includeMarkedContent:m,disableNormalization:D}=d;i.getPage(p).then(function(S){let w=new li("GetTextContent: page "+p);B(w);let Y=r>=Da.INFOS?Date.now():0;S.extractTextContent({handler:h,task:w,sink:x,includeMarkedContent:m,disableNormalization:D}).then(function(){Q(w),Y&&PA(`page=${p+1} - getTextContent: time=${Date.now()-Y}ms`),x.close()},function(U){Q(w),!w.terminated&&x.error(U)})})}),h.on("GetStructTree",function(d){return i.getPage(d.pageIndex).then(function(x){return i.ensure(x,"getStructTree")})}),h.on("FontFallback",function(d){return i.fontFallback(d.id,h)}),h.on("Cleanup",function(d){return i.cleanup(!0)}),h.on("Terminate",function(d){s=!0;let x=[];if(i){i.terminate(new ve("Worker was terminated."));let p=i.cleanup();x.push(p),i=null}else E1();a&&a(new ve("Worker was terminated."));for(let p of n)x.push(p.finished),p.terminate();return Promise.all(x).then(function(){h.destroy(),h=null})}),h.on("Ready",function(d){u(A),A=null}),l}static initializeFromPort(A){let t=new yg("worker","main",A);H0.setup(t,A),t.send("ready",null)}};function yx(e){return typeof e.postMessage=="function"&&"onmessage"in e}typeof window=="undefined"&&!ku&&typeof self!="undefined"&&yx(self)&&H0.initializeFromPort(self);var bx=qE.WorkerMessageHandler;\n'); +} + +// src/processors/pdf.ts +var isWorkerInitialized = false; +function initializeWorker() { + if (!isWorkerInitialized) { + __webpack_exports__GlobalWorkerOptions.workerPort = new Worker2(); + isWorkerInitialized = true; + } +} +async function extractTextFromPDF(arrayBuffer) { + logger.time("Extracting text from PDF"); + try { + initializeWorker(); + const pdf = await __webpack_exports__getDocument({ data: arrayBuffer }).promise; + const numPages = pdf.numPages; + const textContents = await Promise.all( + Array.from({ length: numPages }, (_, i) => getPageText(pdf, i + 1)) + ); + const fullText = textContents.join("\n\n"); + logger.table("Extracted text from PDF", { + textLength: fullText.length + }); + logger.timeEnd("Extracting text from PDF"); + return fullText; + } catch (error) { + logger.error("Error extracting text from PDF", { error }); + throw new Error(`Failed to extract text from PDF: ${error.message}`); + } +} +async function getPageText(pdf, pageNum) { + const page = await pdf.getPage(pageNum); + const content = await page.getTextContent(); + let lastY; + const textItems = []; + for (const item of content.items) { + if ("str" in item) { + if (lastY === item.transform[5] || !lastY) { + textItems.push(item.str); + } else { + textItems.push(` +${item.str}`); + } + lastY = item.transform[5]; + } + } + return textItems.join("") + "\n\n"; +} + +// node_modules/idb/build/index.js +var instanceOfAny = (object, constructors) => constructors.some((c) => object instanceof c); +var idbProxyableTypes; +var cursorAdvanceMethods; +function getIdbProxyableTypes() { + return idbProxyableTypes || (idbProxyableTypes = [ + IDBDatabase, + IDBObjectStore, + IDBIndex, + IDBCursor, + IDBTransaction + ]); +} +function getCursorAdvanceMethods() { + return cursorAdvanceMethods || (cursorAdvanceMethods = [ + IDBCursor.prototype.advance, + IDBCursor.prototype.continue, + IDBCursor.prototype.continuePrimaryKey + ]); +} +var transactionDoneMap = /* @__PURE__ */ new WeakMap(); +var transformCache = /* @__PURE__ */ new WeakMap(); +var reverseTransformCache = /* @__PURE__ */ new WeakMap(); +function promisifyRequest(request) { + const promise = new Promise((resolve, reject) => { + const unlisten = () => { + request.removeEventListener("success", success); + request.removeEventListener("error", error); + }; + const success = () => { + resolve(wrap(request.result)); + unlisten(); + }; + const error = () => { + reject(request.error); + unlisten(); + }; + request.addEventListener("success", success); + request.addEventListener("error", error); + }); + reverseTransformCache.set(promise, request); + return promise; +} +function cacheDonePromiseForTransaction(tx) { + if (transactionDoneMap.has(tx)) + return; + const done = new Promise((resolve, reject) => { + const unlisten = () => { + tx.removeEventListener("complete", complete); + tx.removeEventListener("error", error); + tx.removeEventListener("abort", error); + }; + const complete = () => { + resolve(); + unlisten(); + }; + const error = () => { + reject(tx.error || new DOMException("AbortError", "AbortError")); + unlisten(); + }; + tx.addEventListener("complete", complete); + tx.addEventListener("error", error); + tx.addEventListener("abort", error); + }); + transactionDoneMap.set(tx, done); +} +var idbProxyTraps = { + get(target, prop, receiver) { + if (target instanceof IDBTransaction) { + if (prop === "done") + return transactionDoneMap.get(target); + if (prop === "store") { + return receiver.objectStoreNames[1] ? void 0 : receiver.objectStore(receiver.objectStoreNames[0]); + } + } + return wrap(target[prop]); + }, + set(target, prop, value) { + target[prop] = value; + return true; + }, + has(target, prop) { + if (target instanceof IDBTransaction && (prop === "done" || prop === "store")) { + return true; + } + return prop in target; + } +}; +function replaceTraps(callback) { + idbProxyTraps = callback(idbProxyTraps); +} +function wrapFunction(func) { + if (getCursorAdvanceMethods().includes(func)) { + return function(...args) { + func.apply(unwrap(this), args); + return wrap(this.request); + }; + } + return function(...args) { + return wrap(func.apply(unwrap(this), args)); + }; +} +function transformCachableValue(value) { + if (typeof value === "function") + return wrapFunction(value); + if (value instanceof IDBTransaction) + cacheDonePromiseForTransaction(value); + if (instanceOfAny(value, getIdbProxyableTypes())) + return new Proxy(value, idbProxyTraps); + return value; +} +function wrap(value) { + if (value instanceof IDBRequest) + return promisifyRequest(value); + if (transformCache.has(value)) + return transformCache.get(value); + const newValue = transformCachableValue(value); + if (newValue !== value) { + transformCache.set(value, newValue); + reverseTransformCache.set(newValue, value); + } + return newValue; +} +var unwrap = (value) => reverseTransformCache.get(value); +function openDB(name, version2, { blocked, upgrade, blocking, terminated } = {}) { + const request = indexedDB.open(name, version2); + const openPromise = wrap(request); + if (upgrade) { + request.addEventListener("upgradeneeded", (event) => { + upgrade(wrap(request.result), event.oldVersion, event.newVersion, wrap(request.transaction), event); + }); + } + if (blocked) { + request.addEventListener("blocked", (event) => blocked( + // Casting due to https://github.com/microsoft/TypeScript-DOM-lib-generator/pull/1405 + event.oldVersion, + event.newVersion, + event + )); + } + openPromise.then((db) => { + if (terminated) + db.addEventListener("close", () => terminated()); + if (blocking) { + db.addEventListener("versionchange", (event) => blocking(event.oldVersion, event.newVersion, event)); + } + }).catch(() => { + }); + return openPromise; +} +var readMethods = ["get", "getKey", "getAll", "getAllKeys", "count"]; +var writeMethods = ["put", "add", "delete", "clear"]; +var cachedMethods = /* @__PURE__ */ new Map(); +function getMethod(target, prop) { + if (!(target instanceof IDBDatabase && !(prop in target) && typeof prop === "string")) { + return; + } + if (cachedMethods.get(prop)) + return cachedMethods.get(prop); + const targetFuncName = prop.replace(/FromIndex$/, ""); + const useIndex = prop !== targetFuncName; + const isWrite = writeMethods.includes(targetFuncName); + if ( + // Bail if the target doesn't exist on the target. Eg, getAll isn't in Edge. + !(targetFuncName in (useIndex ? IDBIndex : IDBObjectStore).prototype) || !(isWrite || readMethods.includes(targetFuncName)) + ) { + return; + } + const method = async function(storeName, ...args) { + const tx = this.transaction(storeName, isWrite ? "readwrite" : "readonly"); + let target2 = tx.store; + if (useIndex) + target2 = target2.index(args.shift()); + return (await Promise.all([ + target2[targetFuncName](...args), + isWrite && tx.done + ]))[0]; + }; + cachedMethods.set(prop, method); + return method; +} +replaceTraps((oldTraps) => ({ + ...oldTraps, + get: (target, prop, receiver) => getMethod(target, prop) || oldTraps.get(target, prop, receiver), + has: (target, prop) => !!getMethod(target, prop) || oldTraps.has(target, prop) +})); +var advanceMethodProps = ["continue", "continuePrimaryKey", "advance"]; +var methodMap = {}; +var advanceResults = /* @__PURE__ */ new WeakMap(); +var ittrProxiedCursorToOriginalProxy = /* @__PURE__ */ new WeakMap(); +var cursorIteratorTraps = { + get(target, prop) { + if (!advanceMethodProps.includes(prop)) + return target[prop]; + let cachedFunc = methodMap[prop]; + if (!cachedFunc) { + cachedFunc = methodMap[prop] = function(...args) { + advanceResults.set(this, ittrProxiedCursorToOriginalProxy.get(this)[prop](...args)); + }; + } + return cachedFunc; + } +}; +async function* iterate(...args) { + let cursor = this; + if (!(cursor instanceof IDBCursor)) { + cursor = await cursor.openCursor(...args); + } + if (!cursor) + return; + cursor = cursor; + const proxiedCursor = new Proxy(cursor, cursorIteratorTraps); + ittrProxiedCursorToOriginalProxy.set(proxiedCursor, cursor); + reverseTransformCache.set(proxiedCursor, unwrap(cursor)); + while (cursor) { + yield proxiedCursor; + cursor = await (advanceResults.get(proxiedCursor) || cursor.continue()); + advanceResults.delete(proxiedCursor); + } +} +function isIteratorProp(target, prop) { + return prop === Symbol.asyncIterator && instanceOfAny(target, [IDBIndex, IDBObjectStore, IDBCursor]) || prop === "iterate" && instanceOfAny(target, [IDBIndex, IDBObjectStore]); +} +replaceTraps((oldTraps) => ({ + ...oldTraps, + get(target, prop, receiver) { + if (isIteratorProp(target, prop)) + return iterate; + return oldTraps.get(target, prop, receiver); + }, + has(target, prop) { + return isIteratorProp(target, prop) || oldTraps.has(target, prop); + } +})); + +// src/indexedDB.ts +var FileCache = class { + constructor() { + this.db = null; + this.vaultId = ""; + } + async init(vaultId) { + this.vaultId = vaultId; + const dbName = `LocalGPTCache/${this.vaultId}`; + this.db = await openDB(dbName, 3, { + upgrade(db, oldVersion, newVersion) { + if (oldVersion < 1) { + if (!db.objectStoreNames.contains("embeddings")) { + db.createObjectStore("embeddings"); + } + } + if (oldVersion < 2) { + if (!db.objectStoreNames.contains("content")) { + db.createObjectStore("content"); + } + } + if (oldVersion < 3) { + if (db.objectStoreNames.contains("embeddings")) { + db.deleteObjectStore("embeddings"); + } + } + } + }); + } + async getContent(key) { + if (!this.db) + throw new Error("Database not initialized"); + return this.db.get("content", key); + } + async setContent(key, value) { + if (!this.db) + throw new Error("Database not initialized"); + await this.db.put("content", value, key); + } + async clearContent() { + if (!this.db) + throw new Error("Database not initialized"); + await this.db.clear("content"); + } + async clearAll() { + if (!this.db) + throw new Error("Database not initialized"); + await this.db.clear("content"); + } +}; +var fileCache = new FileCache(); + +// src/rag.ts +var MAX_DEPTH = 10; +async function startProcessing(linkedFiles, vault, metadataCache, activeFile, updateCompletedSteps) { + logger.info("Starting RAG processing"); + const processedDocs = /* @__PURE__ */ new Map(); + const context = { vault, metadataCache, activeFile }; + await Promise.all( + linkedFiles.map(async (file) => { + await processDocumentForRAG(file, context, processedDocs, 0, false); + updateCompletedSteps == null ? void 0 : updateCompletedSteps(1); + }) + ); + return processedDocs; +} +async function getFileContent(file, vault) { + if (file.extension === "pdf") { + const cachedContent = await fileCache.getContent(file.path); + if ((cachedContent == null ? void 0 : cachedContent.mtime) === file.stat.mtime) { + return cachedContent.content; + } + const arrayBuffer = await vault.readBinary(file); + const pdfContent = await extractTextFromPDF(arrayBuffer); + await fileCache.setContent(file.path, { + mtime: file.stat.mtime, + content: pdfContent + }); + return pdfContent; + } + return vault.cachedRead(file); +} +async function processDocumentForRAG(file, context, processedDocs, depth, isBacklink) { + if (depth > MAX_DEPTH || processedDocs.has(file.path) || file.path === context.activeFile.path) { + return processedDocs; + } + try { + const content = await getFileContent(file, context.vault); + processedDocs.set(file.path, { + content, + meta: { + source: file.path, + basename: file.basename, + stat: file.stat, + depth, + isBacklink + } + }); + if (file.extension === "md" && !isBacklink) { + const linkedFiles = getLinkedFiles( + content, + context.vault, + context.metadataCache, + file.path + ); + const backlinkFiles = getBacklinkFiles( + file, + context, + processedDocs + ); + await Promise.all([ + ...linkedFiles.map( + (linkedFile) => processDocumentForRAG( + linkedFile, + context, + processedDocs, + depth + 1, + false + ) + ), + ...backlinkFiles.map( + (backlinkFile) => processDocumentForRAG( + backlinkFile, + context, + processedDocs, + depth, + true + ) + ) + ]); + } + } catch (error) { + console.error(`Error processing document ${file.path}:`, error); + } + return processedDocs; +} +function getLinkedFiles(content, vault, metadataCache, currentFilePath) { + const linkRegex = /\[\[([^\]|#]+)(?:#[^\]|]+)?(?:\|[^\]]+)?\]\]/g; + return Array.from(content.matchAll(linkRegex), (match) => match[1]).map((linkText) => { + const linkPath = metadataCache.getFirstLinkpathDest( + linkText, + currentFilePath + ); + return linkPath ? vault.getAbstractFileByPath(linkPath.path) : null; + }).filter( + (file) => file instanceof import_obsidian2.TFile && (file.extension === "md" || file.extension === "pdf") + ); +} +function getBacklinkFiles(file, context, processedDocs) { + return Object.entries(context.metadataCache.resolvedLinks).filter( + ([sourcePath, links]) => links[file.path] && !processedDocs.has(sourcePath) + ).map(([sourcePath]) => context.vault.getAbstractFileByPath(sourcePath)).filter( + (backlinkFile) => backlinkFile instanceof import_obsidian2.TFile && backlinkFile.extension === "md" + ); +} +async function searchDocuments(query, documents, aiProviders, embeddingProvider, abortController, updateCompletedSteps, addTotalProgressSteps, contextLimit) { + if (abortController == null ? void 0 : abortController.signal.aborted) + return ""; + try { + let lastProcessedChunks = 0; + let initialized = false; + logger.info("Passed contextLimit for context", contextLimit); + const results = await aiProviders.retrieve({ + query, + documents, + embeddingProvider, + onProgress: (progress) => { + var _a2; + if (abortController == null ? void 0 : abortController.signal.aborted) + return; + if (!initialized) { + initialized = true; + addTotalProgressSteps == null ? void 0 : addTotalProgressSteps(progress.totalChunks || 0); + } + const processed = ((_a2 = progress.processedChunks) == null ? void 0 : _a2.length) || 0; + if (processed > lastProcessedChunks) { + updateCompletedSteps(processed - lastProcessedChunks); + lastProcessedChunks = processed; + } + }, + abortController + }); + if (!initialized && (results == null ? void 0 : results.length)) { + updateCompletedSteps(1); + } + return formatResults(results, contextLimit); + } catch (error) { + if (!(abortController == null ? void 0 : abortController.signal.aborted)) { + console.error("Error in searchDocuments:", error); + } + return ""; + } +} +function formatResults(results, contextLimit) { + var _a2; + if (!(results == null ? void 0 : results.length)) + return ""; + const groupedResults = /* @__PURE__ */ new Map(); + for (const result of results) { + const basename = (_a2 = result.document.meta) == null ? void 0 : _a2.basename; + if (!groupedResults.has(basename)) { + groupedResults.set(basename, []); + } + groupedResults.get(basename).push(result); + } + const sortedGroups = Array.from(groupedResults.entries()).sort( + (a, b) => { + var _a3, _b, _c, _d, _e, _f; + return (((_c = (_b = (_a3 = b[1][0]) == null ? void 0 : _a3.document.meta) == null ? void 0 : _b.stat) == null ? void 0 : _c.ctime) || 0) - (((_f = (_e = (_d = a[1][0]) == null ? void 0 : _d.document.meta) == null ? void 0 : _e.stat) == null ? void 0 : _f.ctime) || 0); + } + ); + let formattedResults = ""; + let totalLength = 0; + for (const [basename, groupResults] of sortedGroups) { + if (totalLength >= contextLimit) + break; + formattedResults += `[[${basename}]] +`; + const sortedResults = groupResults.sort((a, b) => b.score - a.score); + for (const result of sortedResults) { + const content = result.content.trim(); + if (content && totalLength + content.length < contextLimit) { + formattedResults += `${content} + +`; + totalLength += content.length + 2; + } + } + } + formattedResults = formattedResults.trim(); + logger.info("Total length of context", formattedResults.length); + return formattedResults; +} + +// src/main.ts +var import_sdk2 = __toESM(require_dist()); + +// src/utils.ts +function preparePrompt(prompt = "", selectedText, context) { + if (prompt.includes(SELECTION_KEYWORD)) { + prompt = prompt.replace(SELECTION_KEYWORD, selectedText || ""); + } else { + prompt = [prompt, selectedText].filter(Boolean).join("\n\n"); + } + if (prompt.includes(CONTEXT_KEYWORD)) { + prompt = prompt.replace(CONTEXT_KEYWORD, context || ""); + } else { + if (context.trim()) { + prompt = [prompt, "Context:\n" + context].filter(Boolean).join("\n\n"); + } + } + if (prompt.includes(CONTEXT_CONDITION_START) && prompt.includes(CONTEXT_CONDITION_END)) { + const start = prompt.indexOf(CONTEXT_CONDITION_START) - 1; + const end = prompt.indexOf(CONTEXT_CONDITION_END); + if (start !== -1 && end !== -1 && start < end) { + let contextBlock = prompt.substring( + start + CONTEXT_CONDITION_START.length + 1, + end + ); + if (!context.trim()) { + contextBlock = ""; + } + prompt = prompt.substring(0, start) + contextBlock + prompt.substring(end + CONTEXT_CONDITION_END.length + 1); + } + } + return prompt; +} + +// src/main.ts +function removeThinkingTags(text2) { + return text2.replace(/^[\s\S]*?<\/think>\s*/, ""); +} +var LocalGPT = class extends import_obsidian3.Plugin { + constructor() { + super(...arguments); + this.abortControllers = []; + this.currentPercentage = 0; + this.targetPercentage = 0; + this.frameId = null; + this.lastFrameTime = null; + this.displayedPercentage = 0; + // fractional internal value + this.baseSpeed = 0; + // percent per ms (smoothed) + this.lastTargetUpdateTime = null; + this.progressFinished = false; + // controls when we can show 100% + this.totalProgressSteps = 0; + this.completedProgressSteps = 0; + this.escapeHandler = (event) => { + if (event.key === "Escape") { + this.abortControllers.forEach( + (abortControllers) => { + abortControllers.abort(); + } + ); + this.abortControllers = []; + } + }; + this.animationLoop = (time) => { + if (this.lastFrameTime === null) { + this.lastFrameTime = time; + } + const delta = time - this.lastFrameTime; + this.lastFrameTime = time; + const target = this.targetPercentage; + if (delta > 0 && this.displayedPercentage < target) { + let speed = this.baseSpeed; + if (speed === 0) { + speed = (target - this.displayedPercentage) / 400; + } + this.displayedPercentage = Math.min( + target, + this.displayedPercentage + speed * delta + ); + const rounded = Math.floor(this.displayedPercentage); + if (rounded !== this.currentPercentage) { + this.currentPercentage = rounded; + this.updateStatusBar(); + } + } + if (this.displayedPercentage >= target) { + this.displayedPercentage = target; + this.currentPercentage = target; + this.updateStatusBar(); + } + if (this.currentPercentage < this.targetPercentage || this.displayedPercentage < this.targetPercentage) { + this.frameId = requestAnimationFrame(this.animationLoop); + return; + } + this.stopAnimation(); + }; + } + async onload() { + (0, import_sdk2.initAI)(this.app, this, async () => { + await this.loadSettings(); + this.addSettingTab(new LocalGPTSettingTab(this.app, this)); + this.reload(); + this.app.workspace.onLayoutReady(async () => { + await fileCache.init(this.app.appId); + window.setTimeout(() => { + this.checkUpdates(); + }, 5e3); + }); + this.registerEditorExtension(spinnerPlugin); + this.registerEditorExtension(actionPalettePlugin); + this.initializeStatusBar(); + }); + } + initializeStatusBar() { + this.statusBarItem = this.addStatusBarItem(); + this.statusBarItem.addClass("local-gpt-status"); + this.statusBarItem.hide(); + } + processText(text2, selectedText) { + if (!text2.trim()) { + return ""; + } + const cleanText = removeThinkingTags(text2).trim(); + return ["\n", cleanText.replace(selectedText, "").trim(), "\n"].join( + "" + ); + } + addCommands() { + this.addCommand({ + id: "context-menu", + name: I18n.t("commands.showContextMenu"), + editorCallback: (editor) => { + const editorView = editor.cm; + const cursorPositionFrom = editor.getCursor("from"); + const cursorPositionTo = editor.getCursor("to"); + const contextMenu = new import_obsidian3.Menu(); + this.settings.actions.forEach((action) => { + contextMenu.addItem((item) => { + item.setTitle(action.name).onClick( + this.runAction.bind(this, action, editor) + ); + }); + }); + const fromRect = editorView.coordsAtPos( + editor.posToOffset(cursorPositionFrom) + ); + const toRect = editorView.coordsAtPos( + editor.posToOffset(cursorPositionTo) + ); + contextMenu.showAtPosition({ + x: fromRect.left, + y: toRect.top + (editorView.defaultLineHeight || 0) + }); + } + }); + this.settings.actions.forEach((action, index) => { + this.addCommand({ + id: `quick-access-${index + 1}`, + name: `${index + 1} | ${action.name}`, + editorCallback: (editor) => { + this.runAction(action, editor); + } + }); + }); + this.addCommand({ + id: "local-gpt-action-palette", + name: I18n.t("commands.actionPalette.name"), + editorCallback: async (editor) => { + const editorView = editor.cm; + const cursorPositionFrom = editor.getCursor("from"); + const insertPos = editor.posToOffset({ + line: cursorPositionFrom.line, + ch: 0 + }); + let modelLabel = ""; + try { + const aiRequestWaiter = await (0, import_sdk2.waitForAI)(); + const aiProviders = await aiRequestWaiter.promise; + const provider = aiProviders.providers.find( + (p) => p.id === this.settings.aiProviders.main + ); + if (provider) { + modelLabel = [provider.name, provider.model].filter(Boolean).join(" \xB7 "); + } + } catch (e) { + } + showActionPalette(editorView, insertPos, { + onSubmit: (text2) => { + this.runFreeform(editor, text2).finally(() => { + }); + hideActionPalette(editorView); + this.app.workspace.updateOptions(); + }, + onCancel: () => { + hideActionPalette(editorView); + this.app.workspace.updateOptions(); + }, + placeholder: I18n.t("commands.actionPalette.placeholder"), + modelLabel + }); + this.app.workspace.updateOptions(); + } + }); + } + async runFreeform(editor, userInput) { + return this.executeAction( + { + prompt: userInput, + system: void 0, + replace: false + }, + editor + ); + } + async runAction(action, editor) { + return this.executeAction( + { + prompt: action.prompt, + system: action.system, + replace: !!action.replace, + temperature: action.temperature || CREATIVITY[this.settings.defaults.creativity].temperature + }, + editor + ); + } + async executeAction(params, editor) { + const editorView = editor.cm; + const selection = editor.getSelection(); + let selectedText = selection || editor.getValue(); + const cursorPositionFrom = editor.getCursor("from"); + const cursorPositionTo = editor.getCursor("to"); + const abortController = new AbortController(); + this.abortControllers.push(abortController); + const spinner = editorView.plugin(spinnerPlugin) || void 0; + const hideSpinner = spinner == null ? void 0 : spinner.show(editor.posToOffset(cursorPositionTo)); + this.app.workspace.updateOptions(); + abortController.signal.addEventListener("abort", () => { + hideSpinner && hideSpinner(); + this.app.workspace.updateOptions(); + }); + const onUpdate = (updatedString) => { + spinner.processText( + updatedString, + (text2) => this.processText(text2, selectedText) + ); + this.app.workspace.updateOptions(); + }; + const regexp = /!\[\[(.+?\.(?:png|jpe?g))]]/gi; + const fileNames = Array.from( + selectedText.matchAll(regexp), + (match) => match[1] + ); + selectedText = selectedText.replace(regexp, ""); + const imagesInBase64 = (await Promise.all( + fileNames.map((fileName) => { + const filePath = this.app.metadataCache.getFirstLinkpathDest( + fileName, + // @ts-ignore + this.app.workspace.getActiveFile().path + ); + if (!filePath) { + return Promise.resolve(""); + } + return this.app.vault.adapter.readBinary(filePath.path).then((buffer) => { + const extension = filePath.extension.toLowerCase(); + const mimeType = extension === "jpg" ? "jpeg" : extension; + const blob = new Blob([buffer], { + type: `image/${mimeType}` + }); + return new Promise((resolve) => { + const reader = new FileReader(); + reader.onloadend = () => resolve(reader.result); + reader.readAsDataURL(blob); + }); + }); + }) + )).filter(Boolean) || []; + logger.time("Processing Embeddings"); + logger.timeEnd("Processing Embeddings"); + logger.debug("Selected text", selectedText); + const aiRequestWaiter = await (0, import_sdk2.waitForAI)(); + const aiProviders = await aiRequestWaiter.promise; + const context = await this.enhanceWithContext( + selectedText, + aiProviders, + aiProviders.providers.find( + (provider2) => provider2.id === this.settings.aiProviders.embedding + ), + abortController + ); + let provider = aiProviders.providers.find( + (p) => p.id === this.settings.aiProviders.main + ); + if (imagesInBase64.length) { + provider = aiProviders.providers.find( + (p) => p.id === this.settings.aiProviders.vision + ) || provider; + } + if (!provider) { + throw new Error("No AI provider found"); + } + let fullText = ""; + try { + fullText = await aiProviders.execute({ + provider, + prompt: preparePrompt(params.prompt, selectedText, context), + images: imagesInBase64, + systemPrompt: params.system, + options: { + temperature: params.temperature || CREATIVITY[this.settings.defaults.creativity].temperature + }, + onProgress: (chunk, accumulatedText) => { + onUpdate(accumulatedText); + }, + abortController + }); + } catch (error) { + if (!abortController.signal.aborted) { + new import_obsidian3.Notice( + I18n.t("notices.errorGenerating", { + message: error.message + }) + ); + } + logger.separator(); + } finally { + hideSpinner && hideSpinner(); + this.app.workspace.updateOptions(); + } + if (abortController.signal.aborted) { + return; + } + const finalText = removeThinkingTags(fullText).trim(); + if (params.replace) { + editor.replaceRange( + finalText, + cursorPositionFrom, + cursorPositionTo + ); + } else { + const isLastLine = editor.lastLine() === cursorPositionTo.line; + const text2 = this.processText(finalText, selectedText); + editor.replaceRange(isLastLine ? "\n" + text2 : text2, { + ch: 0, + line: cursorPositionTo.line + 1 + }); + } + } + async enhanceWithContext(selectedText, aiProviders, aiProvider, abortController) { + const activeFile = this.app.workspace.getActiveFile(); + if (!activeFile || !aiProvider || (abortController == null ? void 0 : abortController.signal.aborted)) { + return ""; + } + const linkedFiles = getLinkedFiles( + selectedText, + this.app.vault, + this.app.metadataCache, + activeFile.path + ); + if (linkedFiles.length === 0) { + return ""; + } + try { + this.initializeProgress(); + const processedDocs = await startProcessing( + linkedFiles, + this.app.vault, + this.app.metadataCache, + activeFile, + this.updateCompletedSteps.bind(this) + ); + if (processedDocs.size === 0 || (abortController == null ? void 0 : abortController.signal.aborted)) { + this.hideStatusBar(); + return ""; + } + const retrieveDocuments = Array.from(processedDocs.values()); + if (abortController == null ? void 0 : abortController.signal.aborted) { + this.hideStatusBar(); + return ""; + } + const contextLimit = (() => { + var _a2, _b; + const preset = (_b = (_a2 = this.settings) == null ? void 0 : _a2.defaults) == null ? void 0 : _b.contextLimit; + const map = { + local: 1e4, + cloud: 32e3, + advanced: 1e5, + max: 3e6 + }; + return map[preset]; + })(); + const relevantContext = await searchDocuments( + selectedText, + retrieveDocuments, + aiProviders, + aiProvider, + abortController, + this.updateCompletedSteps.bind(this), + this.addTotalProgressSteps.bind(this), + contextLimit + ); + this.hideStatusBar(); + return relevantContext.trim() || ""; + } catch (error) { + this.hideStatusBar(); + if (!(abortController == null ? void 0 : abortController.signal.aborted)) { + console.error("Error processing RAG:", error); + new import_obsidian3.Notice( + I18n.t("notices.errorProcessingRag", { + message: error.message + }) + ); + } + return ""; + } + } + onunload() { + document.removeEventListener("keydown", this.escapeHandler); + window.clearInterval(this.updatingInterval); + if (this.frameId !== null) { + cancelAnimationFrame(this.frameId); + } + } + async loadSettings() { + const loadedData = await this.loadData(); + let needToSave = false; + if (loadedData) { + const oldDefaultProviders = { + ollama: { + url: "http://localhost:11434", + defaultModel: "gemma2", + embeddingModel: "", + type: "ollama" + }, + ollama_fallback: { + url: "http://localhost:11434", + defaultModel: "gemma2", + embeddingModel: "", + type: "ollama" + }, + openaiCompatible: { + url: "http://localhost:8080/v1", + apiKey: "", + embeddingModel: "", + type: "openaiCompatible" + }, + openaiCompatible_fallback: { + url: "http://localhost:8080/v1", + apiKey: "", + embeddingModel: "", + type: "openaiCompatible" + } + }; + if (!loadedData._version || loadedData._version < 1) { + needToSave = true; + loadedData.providers = oldDefaultProviders; + loadedData.providers.ollama.ollamaUrl = loadedData.ollamaUrl; + delete loadedData.ollamaUrl; + loadedData.providers.ollama.defaultModel = loadedData.defaultModel; + delete loadedData.defaultModel; + loadedData.providers.openaiCompatible && (loadedData.providers.openaiCompatible.apiKey = ""); + loadedData._version = 2; + } + if (loadedData._version < 3) { + needToSave = true; + loadedData.defaultProvider = loadedData.selectedProvider || "ollama"; + delete loadedData.selectedProvider; + const providers = loadedData.providers; + if (providers) { + Object.keys(providers).forEach((key) => { + providers[key].type = key; + }); + } + loadedData._version = 3; + } + if (loadedData._version < 4) { + needToSave = true; + loadedData.defaults = { + provider: loadedData.defaultProvider || "ollama", + fallbackProvider: loadedData.fallbackProvider || "", + creativity: "low" + }; + delete loadedData.defaultProvider; + delete loadedData.fallbackProvider; + loadedData._version = 4; + } + if (loadedData._version < 5) { + needToSave = true; + const providers = loadedData.providers; + if (providers) { + Object.keys(oldDefaultProviders).forEach((provider) => { + if (providers[provider]) { + providers[provider].embeddingModel = oldDefaultProviders[provider].embeddingModel; + } + }); + } + loadedData._version = 5; + setTimeout(() => { + new import_obsidian3.Notice( + `\u{1F389} LocalGPT can finally use +context from links! +Check the Settings!`, + 0 + ); + }, 1e4); + } + if (loadedData._version < 6) { + needToSave = true; + const providers = loadedData.providers; + if (providers) { + Object.keys(oldDefaultProviders).forEach((provider) => { + var _a2, _b; + if (((_a2 = providers[provider]) == null ? void 0 : _a2.type) === "ollama") { + providers[provider].url = providers[provider].ollamaUrl; + delete providers[provider].ollamaUrl; + } + if (((_b = providers[provider]) == null ? void 0 : _b.type) === "openaiCompatible") { + providers[provider].url = providers[provider].url.replace(/\/+$/i, "") + "/v1"; + } + }); + } + loadedData._version = 6; + } + if (loadedData._version < 7) { + needToSave = true; + new import_obsidian3.Notice(I18n.t("notices.importantUpdate"), 0); + const aiRequestWaiter = await (0, import_sdk2.waitForAI)(); + const aiProviders = await aiRequestWaiter.promise; + loadedData.aiProviders = { + main: null, + embedding: null, + vision: null + }; + const oldProviders = loadedData.providers; + const oldDefaults = loadedData.defaults; + if (oldProviders && (oldDefaults == null ? void 0 : oldDefaults.provider)) { + const provider = oldDefaults.provider; + const typesMap = { + ollama: "ollama", + openaiCompatible: "openai" + }; + const providerConfig = oldProviders[provider]; + if (providerConfig) { + const type = typesMap[providerConfig.type]; + if (providerConfig.defaultModel) { + let model = providerConfig.defaultModel; + if (type === "ollama" && !model.endsWith(":latest")) { + model = model + ":latest"; + } + const id = `id-${Date.now().toString()}`; + const newProvider = await aiProviders.migrateProvider({ + id, + name: `Local GPT ${provider}`, + apiKey: providerConfig.apiKey, + url: providerConfig.url, + type, + model + }); + if (newProvider) { + loadedData.aiProviders.main = newProvider.id; + } + } + if (providerConfig.embeddingModel) { + let model = providerConfig.embeddingModel; + if (type === "ollama" && !model.endsWith(":latest")) { + model = model + ":latest"; + } + const id = `id-${Date.now().toString()}`; + const newProvider = await aiProviders.migrateProvider({ + id, + name: `Local GPT ${provider} embeddings`, + apiKey: providerConfig.apiKey, + url: providerConfig.url, + type, + model + }); + if (newProvider) { + loadedData.aiProviders.embedding = newProvider.id; + } + } + } + } + delete loadedData.defaults; + delete loadedData.providers; + loadedData._version = 7; + } + if (loadedData._version < 8) { + needToSave = true; + loadedData.defaults = loadedData.defaults || {}; + loadedData.defaults.contextLimit = loadedData.defaults.contextLimit || "local"; + loadedData._version = 8; + } + } + this.settings = Object.assign({}, DEFAULT_SETTINGS, loadedData); + if (needToSave) { + await this.saveData(this.settings); + } + } + async checkUpdates() { + try { + const { json: response } = await (0, import_obsidian3.requestUrl)({ + url: "https://api.github.com/repos/pfrankov/obsidian-local-gpt/releases/latest", + method: "GET", + headers: { + "Content-Type": "application/json" + }, + contentType: "application/json" + }); + if (response.tag_name !== this.manifest.version) { + new import_obsidian3.Notice(I18n.t("notices.newVersion")); + } + } catch (error) { + console.error("Error checking for updates:", error); + } + } + reload() { + this.onunload(); + this.addCommands(); + this.abortControllers = []; + this.updatingInterval = window.setInterval( + this.checkUpdates.bind(this), + 108e5 + ); + document.addEventListener("keydown", this.escapeHandler); + } + async saveSettings() { + await this.saveData(this.settings); + this.reload(); + } + initializeProgress() { + this.totalProgressSteps = 0; + this.completedProgressSteps = 0; + this.currentPercentage = 0; + this.targetPercentage = 0; + this.displayedPercentage = 0; + this.baseSpeed = 0; + this.lastTargetUpdateTime = null; + this.lastFrameTime = null; + this.progressFinished = false; + this.stopAnimation(); + this.statusBarItem.show(); + this.updateStatusBar(); + } + addTotalProgressSteps(steps) { + this.totalProgressSteps += steps; + this.updateProgressBar(); + } + updateCompletedSteps(steps) { + this.completedProgressSteps += steps; + if (this.completedProgressSteps > this.totalProgressSteps) { + this.totalProgressSteps = this.completedProgressSteps; + } + this.updateProgressBar(); + } + updateProgressBar() { + let ratio = 0; + if (this.totalProgressSteps > 0) { + ratio = this.completedProgressSteps / this.totalProgressSteps; + } + if (ratio > 1) { + ratio = 1; + } + const newTarget = Math.floor(ratio * 100); + if (newTarget === this.targetPercentage) { + return; + } + const now2 = performance.now(); + if (this.lastTargetUpdateTime !== null) { + const dt = now2 - this.lastTargetUpdateTime; + const diff = newTarget - this.targetPercentage; + if (dt > 0 && diff > 0) { + const instantaneous = diff / dt; + const alpha = 0.25; + if (this.baseSpeed === 0) { + this.baseSpeed = instantaneous; + } else { + this.baseSpeed = this.baseSpeed * (1 - alpha) + instantaneous * alpha; + } + const MIN = 0.02 / 16; + const MAX = 3 / 16; + if (this.baseSpeed < MIN) { + this.baseSpeed = MIN; + } + if (this.baseSpeed > MAX) { + this.baseSpeed = MAX; + } + } + } + this.targetPercentage = newTarget; + this.lastTargetUpdateTime = now2; + if (this.frameId === null) { + this.lastFrameTime = null; + this.frameId = requestAnimationFrame(this.animationLoop); + } + } + updateStatusBar() { + const shown = this.progressFinished ? this.currentPercentage : Math.min(this.currentPercentage, 99); + this.statusBarItem.setAttr( + "data-text", + shown ? I18n.t("statusBar.enhancingWithProgress", { + percent: String(shown) + }) : I18n.t("statusBar.enhancing") + ); + this.statusBarItem.setText(` `); + } + stopAnimation() { + if (this.frameId !== null) { + cancelAnimationFrame(this.frameId); + } + this.frameId = null; + this.lastFrameTime = null; + } + hideStatusBar() { + this.statusBarItem.hide(); + this.totalProgressSteps = 0; + this.completedProgressSteps = 0; + this.currentPercentage = 0; + this.targetPercentage = 0; + this.displayedPercentage = 0; + this.baseSpeed = 0; + this.lastTargetUpdateTime = null; + this.lastFrameTime = null; + this.progressFinished = false; + this.stopAnimation(); + } + markProgressFinished() { + if (this.progressFinished) { + return; + } + this.progressFinished = true; + this.currentPercentage = 100; + this.displayedPercentage = 100; + this.targetPercentage = 100; + this.updateStatusBar(); + } +}; + +/* nosourcemap */ \ No newline at end of file diff --git a/.obsidian/plugins/local-gpt/manifest.json b/.obsidian/plugins/local-gpt/manifest.json new file mode 100644 index 00000000..24220da0 --- /dev/null +++ b/.obsidian/plugins/local-gpt/manifest.json @@ -0,0 +1,13 @@ +{ + "id": "local-gpt", + "name": "Local GPT", + "version": "3.2.2", + "minAppVersion": "0.15.0", + "description": "Local GPT assistance for maximum privacy and offline access", + "author": "Pavel Frankov", + "authorUrl": "https://github.com/pfrankov", + "isDesktopOnly": false, + "css": [ + "styles.css" + ] +} \ No newline at end of file diff --git a/.obsidian/plugins/local-gpt/styles.css b/.obsidian/plugins/local-gpt/styles.css new file mode 100644 index 00000000..3e858d21 --- /dev/null +++ b/.obsidian/plugins/local-gpt/styles.css @@ -0,0 +1,292 @@ +/* node_modules/@obsidian-ai-providers/sdk/dist/styles.css */ +.ai-providers-notice { + margin: 0 -1em 1em; + padding: 1em; + border: 1px solid var(--background-modifier-border); + border-radius: var(--radius-m); + background-color: var(--background-secondary); + color: var(--text-muted); + font-size: var(--font-small); + line-height: var(--line-height-tight); +} +.ai-providers-notice p { + margin: 0; + margin-bottom: 0.5em; +} +.ai-providers-notice p:last-child { + margin-bottom: 0; +} +.ai-providers-select > .setting-item-info { + flex-grow: 1; + flex-shrink: 1; +} +.ai-providers-select > .setting-item-control { + flex-grow: 0; + flex-shrink: 1; + flex-basis: 50%; + max-width: 50%; +} +.ai-providers-select > .setting-item-control .dropdown { + max-width: 100%; +} + +/* styles.css */ +.local-gpt-settings-separator { + margin: 1em 0; + height: 1em; +} +.local-gpt-advanced-toggle { + margin-top: 1.5em; + border: 0; +} +.local-gpt-advanced-group { + margin-top: 0.75em; + padding: 1em; + border: 1px solid var(--background-modifier-border); + border-radius: var(--radius-m); +} +.local-gpt-advanced-group > h4 { + margin: 0 0 0.75em; + font-weight: 700; +} +.local-gpt-advanced-group .setting-item { + border-top: 1px solid var(--background-modifier-border); + margin-top: 0.5em; + padding-top: 0.5em; +} +.local-gpt-content { + color: var(--text-faint); + display: block; + white-space: pre-wrap; + word-break: break-word; +} +.local-gpt-content > span:last-child { + display: inline; + background-image: linear-gradient(to right, var(--text-faint) 0%, var(--interactive-accent) 100%); + background-clip: text; + -webkit-text-fill-color: transparent; + box-decoration-break: slice; +} +.local-gpt-loading { + display: inline-block; + overflow: hidden; + height: 1.3em; + line-height: 1.5em; + vertical-align: text-bottom; + margin: -0.3em 0.3em 0; +} +.local-gpt-thinking-container { + display: block; + opacity: 0; + animation: local-gpt-fadeIn 0.1s ease-out forwards; +} +@keyframes local-gpt-fadeIn { + from { + opacity: 0; + } + to { + opacity: 1; + } +} +.local-gpt-thinking { + position: relative; + display: inline-block; + color: var(--interactive-accent); + font-style: italic; + animation: local-gpt-pulse 1.7s ease-in-out infinite; +} +.local-gpt-thinking::before { + content: attr(data-text); + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + color: var(--interactive-accent-hover); + display: inline-block; + white-space: nowrap; + filter: blur(2px); + mask-image: linear-gradient(to right, transparent 30%, black 50%, transparent 70%); + mask-size: 200% 100%; + mask-position: -50% 0; + animation: local-gpt-maskMove 1.7s linear infinite reverse; + mix-blend-mode: color-dodge; +} +.local-gpt-thinking::after { + content: ""; + display: inline-block; + width: 1em; + text-align: left; + animation: local-gpt-dots 1.7s infinite; + opacity: 1; +} +.cm-editor .local-gpt-action-palette-container { + position: relative; + display: block; + padding: 0; + text-indent: 0; +} +.markdown-source-view.mod-cm6 .cm-content > .local-gpt-action-palette-container[contenteditable=false] { + contain: none !important; + overflow: visible; + margin: 0.3rem -10px 1.5rem !important; +} +.cm-editor .local-gpt-action-palette-shell { + display: inline-flex; + width: 100%; + padding: 2px 0; + position: relative; +} +.cm-editor .local-gpt-action-palette { + width: 100%; + box-sizing: border-box; + padding: 8px 10px; + border-radius: 8px; + border: 2px solid var(--background-modifier-border); + background: var(--background-primary); + color: var(--text-normal); + font: inherit; + outline: none; + box-shadow: 0 2px 10px rgba(0, 0, 0, 0.15); + transition: border-color .12s ease, box-shadow .12s ease; +} +.cm-editor .local-gpt-model-badge { + position: absolute; + left: 0; + right: 0; + bottom: calc(var(--line-height-normal) * -1em); + padding: 2px 6px; + border-radius: var(--radius-m); + color: var(--text-faint); + background: var(--background-secondary); + border: 1px solid var(--background-modifier-border); + font-size: var(--font-ui-small); + font-weight: 300; + pointer-events: none; + z-index: -1; + display: grid; + align-items: end; + justify-items: end; + height: 3em; +} +.cm-editor .local-gpt-model-badge-label { + justify-self: end; + align-self: end; + font-size: var(--font-smallest); + line-height: var(--line-height-normal); +} +.cm-editor .local-gpt-action-palette:focus { + border-color: var(--interactive-accent); + box-shadow: 0 0 0 2px color-mix(in srgb, var(--interactive-accent) 20%, transparent), 0 4px 18px rgba(0, 0, 0, 0.18); +} +.cm-editor .local-gpt-fake-selection { + box-shadow: inset 0 0 0 9999px var(--text-selection), 0 0 0 calc((var(--line-height-normal) - 1) / 4 * 1em) var(--text-selection); + -webkit-box-decoration-break: clone; + box-decoration-break: clone; +} +@keyframes local-gpt-dots { + 0% { + content: ""; + opacity: 1; + } + 59% { + content: ""; + opacity: 1; + } + 60% { + content: "."; + opacity: 1; + } + 70% { + content: ".."; + opacity: 1; + } + 80% { + content: "..."; + opacity: 1; + } + 100% { + opacity: 0.5; + content: "..."; + } +} +@keyframes local-gpt-pulse { + 0% { + opacity: 0.8; + } + 50% { + opacity: 1; + } + 100% { + opacity: 0.8; + } +} +.local-gpt-loading::after { + display: inline-table; + white-space: pre; + text-align: left; +} +.local-gpt-loading.local-gpt-dots::after { + content: "\280b\a\2819\a\2839\a\2838\a\283c\a\2834\a\2826\a\2827\a\2807\a\280f"; + animation: local-gpt-spin10 1s steps(10) infinite; +} +.local-gpt-status { + position: relative; +} +.local-gpt-status::before { + content: attr(data-text); + background-image: linear-gradient(to right, var(--status-bar-text-color) 30%, var(--interactive-accent-hover) 50%, var(--status-bar-text-color) 70%); + background-clip: text; + -webkit-text-fill-color: transparent; + box-decoration-break: slice; + display: inline-block; + overflow: hidden; + white-space: nowrap; + animation: local-gpt-expandText 0.3s ease-out forwards, local-gpt-gradientMove 1.7s linear infinite; + background-size: 200% 100%; + background-position: -50% 0; +} +.local-gpt-status::after { + content: attr(data-text); + position: absolute; + padding: 10px; + margin-left: -10px; + color: var(--interactive-accent-hover); + display: inline-block; + white-space: nowrap; + filter: blur(1px); + mask-image: linear-gradient(to right, transparent 30%, black 50%, transparent 70%); + mask-size: 200% 100%; + mask-position: -50% 0; + animation: local-gpt-maskMove 1.7s linear infinite; + mix-blend-mode: color-dodge; +} +@keyframes local-gpt-spin10 { + to { + transform: translateY(-15em); + } +} +@keyframes local-gpt-expandText { + from { + max-width: 0; + } + to { + max-width: 100%; + } +} +@keyframes local-gpt-gradientMove { + 0% { + background-position: -50% 0; + } + 100% { + background-position: 150% 0; + } +} +@keyframes local-gpt-maskMove { + 0% { + mask-position: -50% 0; + } + 100% { + mask-position: 150% 0; + } +} diff --git a/.obsidian/plugins/recent-files-obsidian/data.json b/.obsidian/plugins/recent-files-obsidian/data.json index 1fac77a0..a1fe4e92 100644 --- a/.obsidian/plugins/recent-files-obsidian/data.json +++ b/.obsidian/plugins/recent-files-obsidian/data.json @@ -1,13 +1,49 @@ { "recentFiles": [ { - "basename": "每周小结", - "path": "09-Templates/每周小结.md" + "basename": "Changsha_Summer_Attractions_Guide@20250831_095229", + "path": "60-Imports/64-AI/Changsha_Summer_Attractions_Guide@20250831_095229.md" + }, + { + "basename": "长沙夏季旅游推荐@20250831_095229", + "path": "60-Imports/64-AI/长沙夏季旅游推荐@20250831_095229.md" + }, + { + "basename": "成都旅游亮点@20250831_104638", + "path": "60-Imports/64-AI/成都旅游亮点@20250831_104638.md" + }, + { + "basename": "Data_Backup_Standard_Operating_Procedures", + "path": "60-Imports/64-AI/Data_Backup_Standard_Operating_Procedures.md" + }, + { + "basename": "August_Diary_Summary_Report@20250901_121407", + "path": "60-Imports/64-AI/August_Diary_Summary_Report@20250901_121407.md" + }, + { + "basename": "八月工作学习总结@20250903_153656", + "path": "60-Imports/64-AI/八月工作学习总结@20250903_153656.md" }, { "basename": "2025-09-03", "path": "01-工作日记/2025-09-03.md" }, + { + "basename": "2025-08-31", + "path": "80-日记归档/81-工作日记/202508/2025-08-31.md" + }, + { + "basename": "2025-09-02", + "path": "01-工作日记/2025-09-02.md" + }, + { + "basename": "2025-09-01", + "path": "01-工作日记/2025-09-01.md" + }, + { + "basename": "每周小结", + "path": "09-Templates/每周小结.md" + }, { "basename": "AI使用评测", "path": "02-技术评测/AI专题/AI使用评测.md" @@ -52,18 +88,10 @@ "basename": "2025-08-30", "path": "80-日记归档/81-工作日记/202508/2025-08-30.md" }, - { - "basename": "2025-08-31", - "path": "80-日记归档/81-工作日记/202508/2025-08-31.md" - }, { "basename": "2025-08-07", "path": "80-日记归档/2025-08-07.md" }, - { - "basename": "2025-09-02", - "path": "01-工作日记/2025-09-02.md" - }, { "basename": "新疆好玩吗?", "path": "60-Imports/新疆好玩吗?.md" @@ -120,14 +148,6 @@ "basename": "1d0fabe426dcca2d0fb84820f1be9b6872aeede8_2_434x500", "path": "10-WebClipper/assets/1d0fabe426dcca2d0fb84820f1be9b6872aeede8_2_434x500.jpg" }, - { - "basename": "Data_Backup_Standard_Operating_Procedures", - "path": "60-Imports/64-AI/Data_Backup_Standard_Operating_Procedures.md" - }, - { - "basename": "August_Diary_Summary_Report@20250901_121407", - "path": "60-Imports/64-AI/August_Diary_Summary_Report@20250901_121407.md" - }, { "basename": "群晖Active backup for Businese全系统备份套件详细使用指南 增量备份 多平台支持虚拟机_NAS存储", "path": "60-Imports/63-WuCai/2025/08/群晖Active backup for Businese全系统备份套件详细使用指南 增量备份 多平台支持虚拟机_NAS存储.md" @@ -152,10 +172,6 @@ "basename": "s3 docker搭建教程", "path": "03-学习笔记/s3 docker搭建教程.md" }, - { - "basename": "2025-09-01", - "path": "01-工作日记/2025-09-01.md" - }, { "basename": "会见莫迪,中方这三句话很意味深长_手机新浪网-2025-09-01", "path": "60-Imports/61-CuboX/会见莫迪,中方这三句话很意味深长_手机新浪网-2025-09-01.md" @@ -183,22 +199,6 @@ { "basename": "心绪有点乱,不知道是不是失去督导心里不舒服,还是obsidian-oonlyoffice没有调试成功... (2025-08-29 20-38)", "path": "50-Memos/2025/08/心绪有点乱,不知道是不是失去督导心里不舒服,还是obsidian-oonlyoffice没有调试成功... (2025-08-29 20-38).md" - }, - { - "basename": "党员组织看山河为证2个多小时 晚上在最大的杨裕兴面馆吃面 (2025-08-25 19-25)", - "path": "50-Memos/2025/08/党员组织看山河为证2个多小时 晚上在最大的杨裕兴面馆吃面 (2025-08-25 19-25).md" - }, - { - "basename": "高铁去上海的路上,参加全国桥牌比赛 (2025-08-13 11-08)", - "path": "50-Memos/2025/08/高铁去上海的路上,参加全国桥牌比赛 (2025-08-13 11-08).md" - }, - { - "basename": "长沙的街上现在已经很凉爽了! (2025-08-22 20-46)", - "path": "50-Memos/2025/08/长沙的街上现在已经很凉爽了! (2025-08-22 20-46).md" - }, - { - "basename": "督导任职期限已到(7月),收入要下降很多,今后要靠自己努力挣钱了! 花钱也要谨慎行事! 也许是个好事... (2025-08-21 18-21)", - "path": "50-Memos/2025/08/督导任职期限已到(7月),收入要下降很多,今后要靠自己努力挣钱了! 花钱也要谨慎行事! 也许是个好事... (2025-08-21 18-21).md" } ], "omittedPaths": [], diff --git a/.obsidian/plugins/rss-reader/data.json b/.obsidian/plugins/rss-reader/data.json index 18b52291..d9ae773e 100644 --- a/.obsidian/plugins/rss-reader/data.json +++ b/.obsidian/plugins/rss-reader/data.json @@ -996,28 +996,6 @@ "hash": "a69000218a0741f002c3db166fccef12", "highlights": [] }, - { - "title": "001FRONT - TORTURE ORDEAL SPURRED COURAGE OF RESISTANCE FIGHTERS", - "description": "

Online See more by scanning the code.

\n

Lam Chun holds a photo of herself, her older sister Lam Chin and brother taken at Sung Wong Toi Park before the Japanese invasion.

\n

Lam Chin (second from right) poses for a photo with Dongjiang Column Commander Tsang Sang (center) and other guerrilla leaders.

\n

Lam Chun and her mother in Hong Kong on Nov 11, 1945.

\n

Primary school students present flowers to veterans of the Hong Kong Independent Battalion of the Dongjiang Column during a Victory Day commemoration in Hong Kong on Aug 15.

\n

Law King-fai, a member of the Hong Kong Independent Battalion.

\n

The agonized cry, "If I die, avenge me!" has echoed in Lam Chun's mind for 82 years.

\n

It was May 1943 in Kowloon City, when Japanese soldiers dragged her 23-year-old sister, Lam Chin, into their home. The accusation was theft — a charge fabricated after she rejected a soldier's advances.

\n

A laundry worker at the Japanese barracks, Lam Chin was subjected to a relentless beating, with rifle butts smashing against her bones.

\n

Eight-year-old Lam Chun stood frozen. Her sister was tied to the staircase, her shirt staining redder with each blow.

\n

Soldiers demanded stolen military currency she had never touched. When she fainted, they revived her with water. When their mother lunged forward, a soldier threw the older woman to the ground. A blade was pressed to Lam Chin's throat — yet she never yielded.

\n

"That day left a deep impression on me," Lam Chun, now 90, recalled. "It wasn't a day for just our family's shame, but also the nation's suffering."

\n

The torture lasted hours, finally ending at lunchtime. Having found nothing, the soldiers left — but not before stealing a pair of military binoculars that had belonged to Lam Chun's late father, a Kuomintang officer.

\n

What her tormentors didn't know was that Lam Chin was secretly smuggling intelligence for guerrillas led by the Communist Party of China in their fight to liberate Hong Kong.

\n

That night, as her family dressed her wounds, Lam Chin revealed her secret. A former leader in the student movement supporting the Chinese People's War of Resistance Against Japanese Aggression (1931-45), she had long been fighting back.

\n

Her suffering, coupled with this revelation, became a call to arms — not just for vengeance, but for victory.

\n

"'If we're beaten for no reason at home, we might as well fight,'" Lam Chun remembered her mother declaring.

\n

Family became comrades

\n

Within months, Lam Chun, her mother, and her brother joined the Hong Kong Independent Battalion — her sister's unit. They fled to its Pingshan headquarters in rural Shenzhen in Guangdong province. Lam Chun's two other older sisters stayed behind in occupied Hong Kong; one worked at a bookstore by day and taught night classes for female factory workers, while the other, recently married, was unable to join them.

\n

Nearly 1,000 strong and composed almost entirely of locals, the battalion became a relentless foe to Japan after its Dec 8, 1941, invasion of Hong Kong.

\n

The then-British colony's defenses collapsed in just 18 days — a swift defeat that historians, including Hong Kong Chronicles Institute Deputy Chief Editor Liu Shuyong, see as emblematic of Britain's halfhearted commitment to defending the colony.

\n

Now, as the last survivors fade, their stories — once buried under colonial and wartime politics have resurfaced. Their resistance played a crucial role in the broader Allied effort to defeat fascism and weaken the Japanese war machine, and their heroics in the liberation of Hong Kong cannot be underestimated.

\n

Dark chapter

\n

Dec 8, 1941, began like any ordinary morning in Hong Kong — until warplanes tore through the dawn sky. The Lam family had just finished breakfast when air raid sirens shattered the calm. Lam Chun and her mother were on their way to church when the first bombs fell.

\n

Their home, directly across from Kai Tak airfield, placed them in the crosshairs. "When the bombing started, my mother ran back to check on my siblings," Lam Chun recalled. "The streets had already descended into chaos."

\n

The Japanese occupation shattered their lives overnight. The family school, run by her mother, was forced to close, leaving them with no income. To survive, they sold desks and chairs, piece by piece.

\n

From their balcony overlooking Tak Ku Ling Road, Kowloon City, they witnessed the war's merciless toll. "Refugees huddled beneath our building, clutching children or meager bundles," she said. "Days later, garbage trucks would arrive. The same people lay wrapped in straw mats — dead from starvation."

\n

Civilian networks

\n

The Hong Kong Independent Battalion traces its roots to the Guangdong People's Guerrilla Force resisting Japanese aggression — specifically its 3rd and 5th Companies, the precursors to the famed Dongjiang (East River) Column. From the earliest days of occupation, these fighters waged a relentless campaign against Japanese forces stretching from Kowloon to the New Territories.

\n

For three years and eight months, they stood as Hong Kong's only organized armed resistance — a lifeline sustained by civilian networks that included the likes of the Lam family.

\n

"Many Hong Kong families joined the resistance together — fighting as one," said Lam Chun, now president of the Society of the Veterans of the Original Hong Kong Independent Battalion of the Dongjiang Column, which documents this wartime heroism.

\n

Few embodied this spirit more than the Law family of Sha Tau Kok, with nine of its 11 members taking up arms as guerrillas.

\n

Born in 1930, Law King-fai grew up amid the resistance efforts. His childhood was defined by the cause and even as a toddler, he was taught patriotic songs.

\n

"Fight the Japanese, fight the Japanese! Down with Japanese imperialism, protect our homeland!" the 95-year-old recalled, singing along.

\n

He remembered the Japanese frequently seizing villagers for forced labor, including his father. In 1943, aged just 13, Law followed his uncles into the guerrilla battalion's sea detachment, which conducted maritime attacks with rudimentary weapons.

\n

His most harrowing mission occurred off the coast of Shenzhen that same year. His unit ambushed a Japanese supply ship that had strayed off course and run aground. As they chased the fleeing Japanese soldiers, Law lost two comrades in the fierce fighting.

\n

"We eventually sank the ship," said Law, noting that his detachment was instrumental in intercepting Japanese logistics convoys carrying supplies, armaments and food in international waters.

\n

Collective resistance

\n

The Lams' journey mirrored this collective resistance.

\n

By 1943, Lam Chin was already a member of the battalion's international work division in charge of translation and intelligence. She kept working in the unit until she became chief of the enemy operations department, where she used her self-taught Japanese to reeducate Japanese prisoners of war. She served as a personal interpreter for Dongjiang Column Commander, Tsang Sang.

\n

Her mother was involved in military logistics, proving that even those who'd never held a gun could contribute to the fight.

\n

Lam Chun, just a child at the time, was a messenger, threading her way through enemy lines with matchstick-sized intelligence scrolls tucked into her collar or hidden among fruit baskets. She mastered the Hakka dialect and learned to decipher secret trail markers that included scratched tree trunks and arranged stones.

\n

"We received tremendous support from local farmers," she recalled. "They helped not just with our missions, but also with our personal hardships."

\n

After six months as a courier, Lam was assigned to a guerrilla field hospital. She started with basics like feeding patients and soon progressed to dressing wounds and reusing sterilized gauze, a grim necessity.

\n

The worst were the surgeries without anesthesia. She'd clutch her hands as doctors dug bullets from screaming soldiers-only to hear some of those men days later, insisting: "Don't worry, Ah Chun. We'll win this war."

\n

Great rescue

\n

In one of the war's boldest missions, the battalion smuggled over 800 Chinese cultural figures, their relatives, and soldiers of international allies out of occupied Hong Kong.

\n

The city had been a precarious refuge since 1937, when artists, writers, and scholars from the Chinese mainland fled there to avoid Japan's invasion. They published underground newspapers, staged anti-fascist plays and broadcast messages of defiance. This made them prime targets.

\n

When Hong Kong fell to Japanese invasion forces in 1941, the occupiers moved swiftly to crush China's intellectual resistance. Propaganda flooded the streets, and cinema screens ordered prominent figures to report for "collaboration".

\n

Peking Opera legend Mei Lanfang, filmmakers Cai Chusheng and Situ Huimin, and writer Mao Dun were summoned by occupiers under the guise of an invitation.

\n

Trapped in a Cantonese-speaking city where their accents marked them out, escape seemed impossible. Yet a covert network of guerrillas, fishermen and locals orchestrated their evacuation — sneaking them past checkpoints and through jungle to Free China.

\n

"It was an epic operation — moving 800 people under the noses of the Japanese, undetected for over 200 days," said Chan Hoi-lun, daughter of guerrilla leader Chan Leung-ming.

\n

Her mother, Tsau Sheung-ling, played a key role. At 20, she disguised herself as filmmaker Cai's niece, guiding him and his wife past patrols with acting so convincing she fooled the soldiers. They reached a safe house in Central and later escaped to Guilin in Guangxi via Macao.

\n

Her bravery came with a high price. After helping run a Lantau Island resistance base, Tsau was betrayed by a traitor and arrested by the Japanese. Right after giving birth to her daughter, she was seized and tortured. She watched the 12-day-old girl die of malnutrition in prison. Her in-laws were later executed by Japanese troops.

\n

"Patriotism has always been here in Hong Kong," Chan Hoi-lun said. "This rescue was fought and won here."

\n

Remembrance

\n

Hong Kong is launching a series of events to educate its youth on national history and commemorate the 80th anniversary of the victory in the war. The initiative includes exhibitions, workshops, film screenings, and exchange tours to historical sites on the Chinese mainland.

\n

The need for such education is felt personally by the likes of Chan Hoi-lun, who says she was exhilarated to hear about the new memorial started on Aug 12 at Silvermine Bay.

\n

The site on Lantau Island is where her father once organized guerrilla fighting and where a tragic massacre unfolded from Aug 19 to 26, 1945. Even after Japan's surrender, Japanese troops accused villagers of harboring guerrillas, arresting 300 and killing 11 of the bay's 500 residents.

\n

Upon its completion in October, the Silvermine Bay memorial will join other commemorative sites, including those in Sha Tau Kok in the New Territories, and in Sai Kung's Wong Mo Ying village and Tsam Chuk Wan.

\n

"It's not fair for those who gave their lives decades ago that today's Hong Kong youth don't even know the history," Chan said, citing the colonial-era authorities' neglect of local efforts to fight Japanese aggression.

\n

She highlighted the importance of physical memorials erected where battles were fought, calling them the basic infrastructure for patriotism education. "They can help tell the stories that unfolded there across time," she said.

\n

At a recent forum, Hong Kong Special Administrative Region Chief Executive John Lee Ka-chiu underscored the city's significant role in China's war efforts. He cited the city's work in shipping war supplies, rescue operations, and front-line defense, embodied by brave groups like the Hong Kong Independent Battalion.

\n

Lee called the victory a hard-won lesson in the importance of peace. He urged the public to honor these historical sacrifices and firmly oppose any distortion of history or glorification of aggression.

\n

In a recent interview with China Daily, Hong Kong lawmaker Chan Yung said that while history education has improved significantly since the 1997 handover, more must be done to strengthen the understanding of national history — particularly amid current global tensions.

\n

This history remains etched in the memory of Lam Chun. Holding a black-and-white photograph of herself with her older sister and brother taken at Sung Wong Toi Park before the Japanese invasion, Lam recalled how her sister Lam Chin would constantly bring home friends to sing:

\n

My home is on the Songhua River in the Northeast,

\n

Where there are forests and coal mines,

\n

And soybeans and sorghum all over the mountains and fields.

\n

"I would listen and sing along, but couldn't understand at the time," she said. "It was not until the 1941 invasion started that I realized they were songs of resistance against Japanese aggression."

\n

lilei@chinadailyhk.com

\n



", - "content": "

Online See more by scanning the code.

\n

Lam Chun holds a photo of herself, her older sister Lam Chin and brother taken at Sung Wong Toi Park before the Japanese invasion.

\n

Lam Chin (second from right) poses for a photo with Dongjiang Column Commander Tsang Sang (center) and other guerrilla leaders.

\n

Lam Chun and her mother in Hong Kong on Nov 11, 1945.

\n

Primary school students present flowers to veterans of the Hong Kong Independent Battalion of the Dongjiang Column during a Victory Day commemoration in Hong Kong on Aug 15.

\n

Law King-fai, a member of the Hong Kong Independent Battalion.

\n

The agonized cry, "If I die, avenge me!" has echoed in Lam Chun's mind for 82 years.

\n

It was May 1943 in Kowloon City, when Japanese soldiers dragged her 23-year-old sister, Lam Chin, into their home. The accusation was theft — a charge fabricated after she rejected a soldier's advances.

\n

A laundry worker at the Japanese barracks, Lam Chin was subjected to a relentless beating, with rifle butts smashing against her bones.

\n

Eight-year-old Lam Chun stood frozen. Her sister was tied to the staircase, her shirt staining redder with each blow.

\n

Soldiers demanded stolen military currency she had never touched. When she fainted, they revived her with water. When their mother lunged forward, a soldier threw the older woman to the ground. A blade was pressed to Lam Chin's throat — yet she never yielded.

\n

"That day left a deep impression on me," Lam Chun, now 90, recalled. "It wasn't a day for just our family's shame, but also the nation's suffering."

\n

The torture lasted hours, finally ending at lunchtime. Having found nothing, the soldiers left — but not before stealing a pair of military binoculars that had belonged to Lam Chun's late father, a Kuomintang officer.

\n

What her tormentors didn't know was that Lam Chin was secretly smuggling intelligence for guerrillas led by the Communist Party of China in their fight to liberate Hong Kong.

\n

That night, as her family dressed her wounds, Lam Chin revealed her secret. A former leader in the student movement supporting the Chinese People's War of Resistance Against Japanese Aggression (1931-45), she had long been fighting back.

\n

Her suffering, coupled with this revelation, became a call to arms — not just for vengeance, but for victory.

\n

"'If we're beaten for no reason at home, we might as well fight,'" Lam Chun remembered her mother declaring.

\n

Family became comrades

\n

Within months, Lam Chun, her mother, and her brother joined the Hong Kong Independent Battalion — her sister's unit. They fled to its Pingshan headquarters in rural Shenzhen in Guangdong province. Lam Chun's two other older sisters stayed behind in occupied Hong Kong; one worked at a bookstore by day and taught night classes for female factory workers, while the other, recently married, was unable to join them.

\n

Nearly 1,000 strong and composed almost entirely of locals, the battalion became a relentless foe to Japan after its Dec 8, 1941, invasion of Hong Kong.

\n

The then-British colony's defenses collapsed in just 18 days — a swift defeat that historians, including Hong Kong Chronicles Institute Deputy Chief Editor Liu Shuyong, see as emblematic of Britain's halfhearted commitment to defending the colony.

\n

Now, as the last survivors fade, their stories — once buried under colonial and wartime politics have resurfaced. Their resistance played a crucial role in the broader Allied effort to defeat fascism and weaken the Japanese war machine, and their heroics in the liberation of Hong Kong cannot be underestimated.

\n

Dark chapter

\n

Dec 8, 1941, began like any ordinary morning in Hong Kong — until warplanes tore through the dawn sky. The Lam family had just finished breakfast when air raid sirens shattered the calm. Lam Chun and her mother were on their way to church when the first bombs fell.

\n

Their home, directly across from Kai Tak airfield, placed them in the crosshairs. "When the bombing started, my mother ran back to check on my siblings," Lam Chun recalled. "The streets had already descended into chaos."

\n

The Japanese occupation shattered their lives overnight. The family school, run by her mother, was forced to close, leaving them with no income. To survive, they sold desks and chairs, piece by piece.

\n

From their balcony overlooking Tak Ku Ling Road, Kowloon City, they witnessed the war's merciless toll. "Refugees huddled beneath our building, clutching children or meager bundles," she said. "Days later, garbage trucks would arrive. The same people lay wrapped in straw mats — dead from starvation."

\n

Civilian networks

\n

The Hong Kong Independent Battalion traces its roots to the Guangdong People's Guerrilla Force resisting Japanese aggression — specifically its 3rd and 5th Companies, the precursors to the famed Dongjiang (East River) Column. From the earliest days of occupation, these fighters waged a relentless campaign against Japanese forces stretching from Kowloon to the New Territories.

\n

For three years and eight months, they stood as Hong Kong's only organized armed resistance — a lifeline sustained by civilian networks that included the likes of the Lam family.

\n

"Many Hong Kong families joined the resistance together — fighting as one," said Lam Chun, now president of the Society of the Veterans of the Original Hong Kong Independent Battalion of the Dongjiang Column, which documents this wartime heroism.

\n

Few embodied this spirit more than the Law family of Sha Tau Kok, with nine of its 11 members taking up arms as guerrillas.

\n

Born in 1930, Law King-fai grew up amid the resistance efforts. His childhood was defined by the cause and even as a toddler, he was taught patriotic songs.

\n

"Fight the Japanese, fight the Japanese! Down with Japanese imperialism, protect our homeland!" the 95-year-old recalled, singing along.

\n

He remembered the Japanese frequently seizing villagers for forced labor, including his father. In 1943, aged just 13, Law followed his uncles into the guerrilla battalion's sea detachment, which conducted maritime attacks with rudimentary weapons.

\n

His most harrowing mission occurred off the coast of Shenzhen that same year. His unit ambushed a Japanese supply ship that had strayed off course and run aground. As they chased the fleeing Japanese soldiers, Law lost two comrades in the fierce fighting.

\n

"We eventually sank the ship," said Law, noting that his detachment was instrumental in intercepting Japanese logistics convoys carrying supplies, armaments and food in international waters.

\n

Collective resistance

\n

The Lams' journey mirrored this collective resistance.

\n

By 1943, Lam Chin was already a member of the battalion's international work division in charge of translation and intelligence. She kept working in the unit until she became chief of the enemy operations department, where she used her self-taught Japanese to reeducate Japanese prisoners of war. She served as a personal interpreter for Dongjiang Column Commander, Tsang Sang.

\n

Her mother was involved in military logistics, proving that even those who'd never held a gun could contribute to the fight.

\n

Lam Chun, just a child at the time, was a messenger, threading her way through enemy lines with matchstick-sized intelligence scrolls tucked into her collar or hidden among fruit baskets. She mastered the Hakka dialect and learned to decipher secret trail markers that included scratched tree trunks and arranged stones.

\n

"We received tremendous support from local farmers," she recalled. "They helped not just with our missions, but also with our personal hardships."

\n

After six months as a courier, Lam was assigned to a guerrilla field hospital. She started with basics like feeding patients and soon progressed to dressing wounds and reusing sterilized gauze, a grim necessity.

\n

The worst were the surgeries without anesthesia. She'd clutch her hands as doctors dug bullets from screaming soldiers-only to hear some of those men days later, insisting: "Don't worry, Ah Chun. We'll win this war."

\n

Great rescue

\n

In one of the war's boldest missions, the battalion smuggled over 800 Chinese cultural figures, their relatives, and soldiers of international allies out of occupied Hong Kong.

\n

The city had been a precarious refuge since 1937, when artists, writers, and scholars from the Chinese mainland fled there to avoid Japan's invasion. They published underground newspapers, staged anti-fascist plays and broadcast messages of defiance. This made them prime targets.

\n

When Hong Kong fell to Japanese invasion forces in 1941, the occupiers moved swiftly to crush China's intellectual resistance. Propaganda flooded the streets, and cinema screens ordered prominent figures to report for "collaboration".

\n

Peking Opera legend Mei Lanfang, filmmakers Cai Chusheng and Situ Huimin, and writer Mao Dun were summoned by occupiers under the guise of an invitation.

\n

Trapped in a Cantonese-speaking city where their accents marked them out, escape seemed impossible. Yet a covert network of guerrillas, fishermen and locals orchestrated their evacuation — sneaking them past checkpoints and through jungle to Free China.

\n

"It was an epic operation — moving 800 people under the noses of the Japanese, undetected for over 200 days," said Chan Hoi-lun, daughter of guerrilla leader Chan Leung-ming.

\n

Her mother, Tsau Sheung-ling, played a key role. At 20, she disguised herself as filmmaker Cai's niece, guiding him and his wife past patrols with acting so convincing she fooled the soldiers. They reached a safe house in Central and later escaped to Guilin in Guangxi via Macao.

\n

Her bravery came with a high price. After helping run a Lantau Island resistance base, Tsau was betrayed by a traitor and arrested by the Japanese. Right after giving birth to her daughter, she was seized and tortured. She watched the 12-day-old girl die of malnutrition in prison. Her in-laws were later executed by Japanese troops.

\n

"Patriotism has always been here in Hong Kong," Chan Hoi-lun said. "This rescue was fought and won here."

\n

Remembrance

\n

Hong Kong is launching a series of events to educate its youth on national history and commemorate the 80th anniversary of the victory in the war. The initiative includes exhibitions, workshops, film screenings, and exchange tours to historical sites on the Chinese mainland.

\n

The need for such education is felt personally by the likes of Chan Hoi-lun, who says she was exhilarated to hear about the new memorial started on Aug 12 at Silvermine Bay.

\n

The site on Lantau Island is where her father once organized guerrilla fighting and where a tragic massacre unfolded from Aug 19 to 26, 1945. Even after Japan's surrender, Japanese troops accused villagers of harboring guerrillas, arresting 300 and killing 11 of the bay's 500 residents.

\n

Upon its completion in October, the Silvermine Bay memorial will join other commemorative sites, including those in Sha Tau Kok in the New Territories, and in Sai Kung's Wong Mo Ying village and Tsam Chuk Wan.

\n

"It's not fair for those who gave their lives decades ago that today's Hong Kong youth don't even know the history," Chan said, citing the colonial-era authorities' neglect of local efforts to fight Japanese aggression.

\n

She highlighted the importance of physical memorials erected where battles were fought, calling them the basic infrastructure for patriotism education. "They can help tell the stories that unfolded there across time," she said.

\n

At a recent forum, Hong Kong Special Administrative Region Chief Executive John Lee Ka-chiu underscored the city's significant role in China's war efforts. He cited the city's work in shipping war supplies, rescue operations, and front-line defense, embodied by brave groups like the Hong Kong Independent Battalion.

\n

Lee called the victory a hard-won lesson in the importance of peace. He urged the public to honor these historical sacrifices and firmly oppose any distortion of history or glorification of aggression.

\n

In a recent interview with China Daily, Hong Kong lawmaker Chan Yung said that while history education has improved significantly since the 1997 handover, more must be done to strengthen the understanding of national history — particularly amid current global tensions.

\n

This history remains etched in the memory of Lam Chun. Holding a black-and-white photograph of herself with her older sister and brother taken at Sung Wong Toi Park before the Japanese invasion, Lam recalled how her sister Lam Chin would constantly bring home friends to sing:

\n

My home is on the Songhua River in the Northeast,

\n

Where there are forests and coal mines,

\n

And soybeans and sorghum all over the mountains and fields.

\n

"I would listen and sing along, but couldn't understand at the time," she said. "It was not until the 1941 invasion started that I realized they were songs of resistance against Japanese aggression."

\n

lilei@chinadailyhk.com

\n



", - "category": "", - "link": "https://mobile.chinadaily.com.cn/cn/html5/2025-09/02/content_001_68b60841ed50ccabe151894d.htm#001FRONT", - "creator": "", - "pubDate": "Tue, 02 Sep 2025 00:21:04 +0000", - "enclosure": "", - "enclosureType": "", - "image": "", - "id": "", - "language": "", - "folder": "双语", - "feed": "ChinaDaily", - "read": false, - "favorite": false, - "created": false, - "tags": [], - "hash": "7141ee43ee6eaa969f794439becdee86", - "highlights": [] - }, { "title": "012WORLD - SCO helping forge new type of global ties", "description": "

Guests attending a welcome banquet exchange ideas during the Shanghai Cooperation Organization Summit in Tianjin on Sunday evening.

\n

Chinese President Xi Jinping's emphasis on carrying forward the Shanghai Spirit and advancing cooperation at the 25th Meeting of the Council of Heads of State of the Shanghai Cooperation Organization in Tianjin will further power the SCO's wheels and help forge a new type of international relations, experts say.

\n

In a keynote speech, Xi hailed the SCO's groundbreaking and historic achievements, highlighting the Shanghai Spirit — a set of guiding principles that emphasizes mutual trust, mutual benefit, equality, consultation, respect for diversity of civilizations, and the pursuit of common development.

\n

Rabi Hamamsah, head of media exposure at Deraya Speakers in the United Arab Emirates, said the spirit has created a unique framework that sets the SCO apart from other international organizations.

\n

"The fact that the SCO has grown into the largest regional organization with 26 countries involved shows that its approach resonates strongly, especially in the Global South," he said.

\n

"More and more countries recognize that peace, stability and development can only be achieved through cooperation and dialogue rather than through confrontation."

\n

Founded in Shanghai in 2001, the SCO has expanded from six members into a big family of 10 members, two observers and 14 dialogue partners spanning Asia, Europe and Africa.

\n

Abdulaziz Alshaabani, a researcher at the Al Riyadh Center for Political and Strategic Studies in Saudi Arabia, said the Shanghai Spirit has served as the cornerstone of the SCO's efficiency and resilience.

\n

"Its emphasis on mutual trust, mutual benefit and respect for diversity makes it especially appealing to the Global South, where countries seek partnerships not based on hegemony but on equality and shared growth," he said.

\n

Xi called on SCO members to stay true to the organization's founding mission and promote its sustained development with greater resolve and more practical measures.

\n

Karori Singh, former director and emeritus fellow at the South Asia Study Centre of the University of Rajasthan, India, said the SCO, now the largest regional organization in Eurasia, was founded 24 years ago on the basis of the Shanghai Spirit. Since then, it has steadily expanded its membership and broadened its areas of cooperation.

\n

President Xi's address reflected a pragmatic approach, outlining the SCO's vision for the next decade, Singh said. He emphasized that the organization is advancing from multilateral dialogue to concrete action aimed at safeguarding regional security, advancing prosperity in Eurasia, and contributing meaningfully to global peace, stability, and the building of a community with shared future for humanity.

\n

Peaceful cooperation

\n

Lawrence Loh, director of the Center for Governance and Sustainability at the National University of Singapore, said the unity demonstrated at the SCO Tianjin Summit signifies fresh hope for a new future of peaceful global cooperation.

\n

"President Xi's momentous call for openness in a multipolar world is both pressing and urgent. The world cannot afford to backpedal in its progress due to any country's self-interest," he said.

\n

Xi also unveiled China's new measures to support the SCO's development and win-win cooperation among members. "We need to better align our development strategies and promote the high-quality implementation of the Belt and Road Initiative," the president said.

\n

Alshaabani said Saudi Arabia's Vision 2030 and the SCO's development concepts converge on diversification, connectivity and sustainable growth. "The Tianjin summit provides a unique chance for Saudi Arabia to deepen cooperation with SCO countries."

\n

Xi said SCO members need to enhance mutual understanding and friendship through people-to-people exchanges and cultivate a garden of civilizations in which all cultures flourish in prosperity and harmony.

\n

Mohammad Ghazal, managing editor of English news at Aletihad News Center in the UAE, said civilizations grow stronger by learning from one another, not by isolating themselves — a principle embodied and advanced by the Shanghai Spirit.

\n

"The history of exchange between China and the Arab world shows how dialogue creates prosperity as cooperation dates back to centuries and this, for example, can inspire others today to embrace diversity and build peaceful coexistence," he said.

\n

As the world is faced with mounting security challenges, geopolitical rivalries and economic uncertainties, Ananda Goonatilleke, president of the Sri Lanka-China Friendship Association, said the Tianjin summit stands as a powerful platform for solidarity.

\n

He also welcomed the discussions between China and India during the summit.

\n

"The understanding that bilateral differences should not overshadow the greater goal of partnership reflects the wisdom of statesmanship and offers hope for broader regional harmony," he said.

\n

Contact the writers at cuihaipei@chinadaily.com.cn

\n

", @@ -1040,28 +1018,6 @@ "hash": "215fcb266d249d2161d39b433dd7255d", "highlights": [] }, - { - "title": "017CULTURE - Celebrating China's theater legacy with veteran artists and new talents", - "description": "

A scene from the dance drama Cavalry, by the Inner Mongolia Art Theatre.

\n

Hangzhou, Zhejiang province, will become a vibrant stage for the 19th China Theatre Festival from Friday to Sept 25. The festival is a grand cultural event organized by the China Federation of Literary and Art Circles and the China Theatre Association.

\n

This year's event aims to showcase the rich diversity of China's theater landscape, bringing together a stunning array of performances from across the nation.

\n

Founded in 1988, the festival has become a cornerstone of Chinese theatrical culture, fostering talent, encouraging creation, and promoting excellence in drama.

\n

Held every two years, it has grown into one of the most prestigious platforms for both established and emerging artists to showcase their work. This year, the festival will present 42 theatrical productions out of 73 selected from across China, spanning 31 provinces, autonomous regions and municipalities.

\n

The performances will encompass a diverse range of genres, including traditional Chinese opera, modern drama, ballet and opera. Puppetry will also be included in the festival for the first time.

\n

According to the organizers, what sets this edition apart is the festival's focus on striking a balance between tradition and innovation. One of the key highlights is the celebration of the spirit of "10 years to perfect a play", which encourages the long-term development and refinement of works.

\n

Productions for the festival include the Peking Opera Qi Baishi by the Jingju Theater Company of Beijing, which follows the life story of art master Qi Baishi (1864-1957), one of the country's most celebrated artists; and the dance drama Cavalry, by the Inner Mongolia Art Theatre, which tells the story of a young man who grows from a village student into a courageous hero of the cavalry during wartime in the 1940s. Both productions have evolved over the years, winning national accolades, and are ready to return to the stage with further refinements.

\n

The festival's organizing committee notes that this edition of the festival will highlight traditional Chinese operas, including Qinqiang Opera, Cantonese Opera, and Kunqu Opera. These productions are adapted from well-known folk legends, which are grounded in the country's cultural heritage and aim to offer both nostalgic value and artistic depth.

\n

While preserving tradition, the event will also showcase technological innovation in Chinese theatrical productions. Productions such as The Great National Craftsmen and Two Capitals, Fifteen Days integrate multimedia elements to enhance their storytelling.

\n

The festival also features experimental productions, such as Star Returning, a collaborative work by artists from home and abroad, which honors Yi ethnic culture and breaks geographical and cultural barriers to offer a cross-regional perspective on stage.

\n

In addition to live performances, the festival will feature renowned performers and winners of top Chinese theater awards, including China's Plum Blossom Award and Wenhua Award. These celebrated artists will be joined by emerging talents, making for a dynamic blend of seasoned expertise and youthful energy.

\n

The festival's commitment to nurturing new talent is also reflected in its training programs, which aim to cultivate the next generation of theater talent.

\n

", - "content": "

A scene from the dance drama Cavalry, by the Inner Mongolia Art Theatre.

\n

Hangzhou, Zhejiang province, will become a vibrant stage for the 19th China Theatre Festival from Friday to Sept 25. The festival is a grand cultural event organized by the China Federation of Literary and Art Circles and the China Theatre Association.

\n

This year's event aims to showcase the rich diversity of China's theater landscape, bringing together a stunning array of performances from across the nation.

\n

Founded in 1988, the festival has become a cornerstone of Chinese theatrical culture, fostering talent, encouraging creation, and promoting excellence in drama.

\n

Held every two years, it has grown into one of the most prestigious platforms for both established and emerging artists to showcase their work. This year, the festival will present 42 theatrical productions out of 73 selected from across China, spanning 31 provinces, autonomous regions and municipalities.

\n

The performances will encompass a diverse range of genres, including traditional Chinese opera, modern drama, ballet and opera. Puppetry will also be included in the festival for the first time.

\n

According to the organizers, what sets this edition apart is the festival's focus on striking a balance between tradition and innovation. One of the key highlights is the celebration of the spirit of "10 years to perfect a play", which encourages the long-term development and refinement of works.

\n

Productions for the festival include the Peking Opera Qi Baishi by the Jingju Theater Company of Beijing, which follows the life story of art master Qi Baishi (1864-1957), one of the country's most celebrated artists; and the dance drama Cavalry, by the Inner Mongolia Art Theatre, which tells the story of a young man who grows from a village student into a courageous hero of the cavalry during wartime in the 1940s. Both productions have evolved over the years, winning national accolades, and are ready to return to the stage with further refinements.

\n

The festival's organizing committee notes that this edition of the festival will highlight traditional Chinese operas, including Qinqiang Opera, Cantonese Opera, and Kunqu Opera. These productions are adapted from well-known folk legends, which are grounded in the country's cultural heritage and aim to offer both nostalgic value and artistic depth.

\n

While preserving tradition, the event will also showcase technological innovation in Chinese theatrical productions. Productions such as The Great National Craftsmen and Two Capitals, Fifteen Days integrate multimedia elements to enhance their storytelling.

\n

The festival also features experimental productions, such as Star Returning, a collaborative work by artists from home and abroad, which honors Yi ethnic culture and breaks geographical and cultural barriers to offer a cross-regional perspective on stage.

\n

In addition to live performances, the festival will feature renowned performers and winners of top Chinese theater awards, including China's Plum Blossom Award and Wenhua Award. These celebrated artists will be joined by emerging talents, making for a dynamic blend of seasoned expertise and youthful energy.

\n

The festival's commitment to nurturing new talent is also reflected in its training programs, which aim to cultivate the next generation of theater talent.

\n

", - "category": "", - "link": "https://mobile.chinadaily.com.cn/cn/html5/2025-09/02/content_017_68b6090eed50ccabe151897f.htm#017CULTURE", - "creator": "", - "pubDate": "Tue, 02 Sep 2025 00:21:04 +0000", - "enclosure": "", - "enclosureType": "", - "image": "", - "id": "", - "language": "", - "folder": "双语", - "feed": "ChinaDaily", - "read": false, - "favorite": false, - "created": false, - "tags": [], - "hash": "4b9c014ca0cfbdfeaf6a0d63e3617d58", - "highlights": [] - }, { "title": "009ADVERTORIAL - Türkiye and China forging strategic partnership at 'nexus of the world'", "description": "

A China Railway Express freight train crosses through Istanbul's Marmaray subsea tunnel on Nov 7, 2019, marking the first time a cargo train from China reached Europe via this route under the Marmara Sea.

\n

Türkiye's unique geographic position — connecting Europe, Asia and the Middle East — has established the country as the "nexus of the world". Its strategic location, coupled with a dynamic economy, makes Türkiye a natural partner for China in advancing mutually beneficial cooperation.

\n

Over the decades, Türkiye-China relations have evolved into a comprehensive strategic partnership spanning trade, investment, technology, and infrastructure.

\n

Strong foundation

\n

China is Türkiye's largest source of imports and a key trading partner. Data from the Turkish Statistical Institute show that their bilateral trade volume reached $48.3 billion in 2024, reflecting mutual development.

\n

The countries' economic complementarity is evident: China supplies machinery, electronics, and industrial inputs, while Türkiye offers food products, chemicals, and manufactured goods.

\n

This partnership is reinforced by an alignment between the China-proposed Belt and Road Initiative and Türkiye's Middle Corridor strategy, creating a seamless east-west route that enhances global supply chains.

\n

Business cooperation

\n

According to official data from Türkiye, China has invested approximately $1.2 billion in Türkiye since 2002, while Turkish companies have invested more than $300 million in China. Today, more than 1,400 Chinese companies operate in Türkiye across diverse sectors.

\n

Energy and the automotive industry stand out as strategic cooperation areas, reflecting Türkiye's established role as a key supplier to global value chains. Major battery plant projects, including partnerships with Togg, Türkiye's domestic electric vehicle manufacturer, represent landmark investments boosting the country's EV ecosystem and integrating advanced battery technology into European and regional markets.

\n

These are complemented by significant EV manufacturing facilities serving both domestic and European markets, alongside local production plans to meet rising regional demand.

\n

Notable Chinese investments span multiple sectors: major research and development centers in Istanbul, driving innovations in AI, cloud, and 5G technologies; manufacturing plants for household appliances, reinforcing Türkiye's role as a global white goods exporter; strategic acquisitions in e-commerce platforms, transforming Türkiye's digital commerce landscape; and key investments in logistics and finance, including port facilities and banking operations.

\n

These investments generate economic value while fostering technology transfer, employment, and sustainable growth, positioning Türkiye as the nexus of the world for Chinese enterprises seeking global expansion.

\n

Key sectors

\n

Infrastructure, energy, and technology stand out as priority cooperation areas. Chinese companies have invested in major power projects, renewable energy facilities, and transport hubs in Türkiye.

\n

At the same time, Turkish enterprises are exploring opportunities in China's fast-growing consumer and industrial markets.

\n

The synergy between the Middle Corridor and BRI creates unparalleled opportunities in logistics, enabling Türkiye to serve as a hub for goods flowing between Asia, Europe and Africa. This is matched by collaboration in emerging industries such as green energy, fintech, and smart cities.

\n

As both nations pursue sustainable and innovation-driven growth, the scope for cooperation will continue to expand. Türkiye's competitive advantages — strategic location, skilled workforce and diversified economy — align with China's vision of high-quality, outward-looking development.

\n

Looking ahead, Türkiye-China relations are poised to deepen, anchored by shared commitments to connectivity, technological advancement, and economic resilience.

\n

At the nexus of the world, Türkiye stands ready to work with China to shape a more integrated, prosperous, and sustainable future for both nations and the broader region.

\n

", @@ -1084,28 +1040,6 @@ "hash": "7dd59215092185ff0432f2a0faeb3717", "highlights": [] }, - { - "title": "017MOTORING - Chengdu's show: where tech meets local flavor", - "description": "

Visitors take pictures of models displayed at Mercedes-Benz's booth at the Chengdu Motor Show on Aug 29.

\n

Chengdu, capital of Southwest China's Sichuan province, has a way of making the unexpected feel natural: pandas, sizzling hotpot, and high-tech cars all converge as the city's annual motor show is underway from Aug 29 to Sept 7.

\n

Unlike the tense, media-focused atmosphere of Beijing or Shanghai auto shows, the Chengdu Motor Show has carved out its own identity: a citywide celebration where serious automotive technology meets playful local culture.

\n

Even the most serious journalists often skip hotel buffets to enjoy hotpot, proving that cars and local culture mix effortlessly here.

\n

Walking through the exhibition, the first impression is one of accessibility and fun.

\n

At MG's booth, attendees could pick up a set of mahjong tiles, a nod to Chengdu's iconic pastime.

\n

Across the halls, brands from FAW Toyota to 212 handed out roses on the opening day, which coincided with China's Qixi Festival, adding a romantic seasonal touch.

\n

Voyah's booth highlights its collaboration with Peppa Pig, the famous British animated television series.

\n

Another Chinese startup, Avatr, features China's latest cartoon movie Nobody, a modern interpretation based on one of China's top four classic novels Journey to the West.

\n

Inside the very exhibition center, visitors can get a panda toy from the on-site panda post office, a perfect keepsake from a city that proves you can enjoy cutting-edge cars and cultural fun in equal measure.

\n

But the show does not stop there. Even for serious tech enthusiasts, Chengdu offers plenty of surprises.

\n

Around 120 Chinese and overseas car brands are participating this year, covering 220,000 square meters of exhibition space, according to Liu Guoliang, president of Hannover Milano Fairs Shanghai, one of the organizers.

\n

Some of the luxury brands, including Bentley and Lamborghini, are absent, but overseas premium and volume brands are making their marks.

\n

Mercedes-Benz is showcasing the AMG CLE 53 4MATIC+ convertible and the all-electric CLA; FAW-Audi is presenting 27 models including the PPE-based Q6L e-tron; and Ford is wooing visitors with its first smart electric off-road SUV, the Bronco EV.

\n

However, domestic brands take center stage, as NEVs are becoming mainstream: advanced battery systems, smart driver-assistance features, and luxury interiors rivaling global competitors signal a new era for Chinese automotive engineering.

\n

BYD dominates Hall 9 with its full lineup: Dynasty, Ocean, Denza, Fangchengbao, and premium Yangwang models. At the entrance to the hall is a wall decorated with over 35,000 patents, showcasing the automaker's dedication to NEVs.

\n

A walk from Mercedes-Benz to the Nio booth says it all: Nio's space is packed, while Mercedes' area looks comparatively quiet.

\n

"You can really see how Chinese electric and hybrid brands are maturing, both in technology and appeal," noted one industry analyst.

\n

Chengdu's motor show is not limited to the venue, with excitement spilling throughout the city.

\n

The pre-show week was already bustling with events around the city.

\n

Huawei-backed Harmony Intelligent Mobility Alliance gathered its five sub-brands days before the show.

\n

Volvo launched the XC70, a model it is betting on to defend its shrinking market share, and Great Wall Motors unveiled the Tank 500 with its Hi4-Z hybrid system at Dujiang Weir, the oldest extant irrigation system in China or even the world.

\n

The place was chosen for the event because Great Wall Motors wants to explain how its engine powers electricity generation while driving — delivering strong acceleration, high efficiency, and a fuel-saving edge simultaneously, much like how Dujiang Weir tames floods while ensuring the irrigation of the Chengdu Plain.

\n

"The show has evolved beyond a platform for new product launches, becoming both a symbol of urban culture and a key consumption driver for the region," Liu said.

\n

Last year, attendees placed over 33,000 orders during the event, with a combined transaction volume of 5.8 billion yuan ($80.8 million).

\n

From January to July this year, the city achieved 90.73 billion yuan in car retail sales, up 3.2 percent year-on-year, with 327,000 new car registrations.

\n

"Chengdu and the wider Chengdu-Chongqing economic circle are among the most dynamic car markets in China," Liu added.

\n

Liu was not exaggerating. Among other things, Volkswagen's largest showroom for its expensive Phaeton was in Chengdu, before production ended in 2016.

\n

The German group is now eyeing new collaboration with the city. On Thursday, Volkswagen, FAW Group and the Chengdu Economic and Technological Development Zone inked a deal to advance the electrification of its Jetta brand.

\n

According to the announcement, leveraging the long-term layout of its Chengdu production base, the Jetta brand will establish a new company.

\n

The new company will fully integrate Jetta's existing resources and attract local investment to further leverage regional industrial synergies and accelerate market responsiveness.

\n

Under the plan, by 2030, the new Jetta company aims to build a 100-billion-yuan-level industrial value chain covering R&D, production, supply, and sales.

\n

This initiative will deepen the integration of the Jetta brand into Sichuan province's and Southwest China's automotive ecosystem, consolidating its position as a leading player in the region's automotive industry.

\n

For general visitors, though, there are more practical considerations. To energize buyers, the municipal government has launched "purchase subsidies", offering trade-in support of up to 20,000 yuan per vehicle.

\n

lifusheng@chinadaily.com.cn

\n

", - "content": "

Visitors take pictures of models displayed at Mercedes-Benz's booth at the Chengdu Motor Show on Aug 29.

\n

Chengdu, capital of Southwest China's Sichuan province, has a way of making the unexpected feel natural: pandas, sizzling hotpot, and high-tech cars all converge as the city's annual motor show is underway from Aug 29 to Sept 7.

\n

Unlike the tense, media-focused atmosphere of Beijing or Shanghai auto shows, the Chengdu Motor Show has carved out its own identity: a citywide celebration where serious automotive technology meets playful local culture.

\n

Even the most serious journalists often skip hotel buffets to enjoy hotpot, proving that cars and local culture mix effortlessly here.

\n

Walking through the exhibition, the first impression is one of accessibility and fun.

\n

At MG's booth, attendees could pick up a set of mahjong tiles, a nod to Chengdu's iconic pastime.

\n

Across the halls, brands from FAW Toyota to 212 handed out roses on the opening day, which coincided with China's Qixi Festival, adding a romantic seasonal touch.

\n

Voyah's booth highlights its collaboration with Peppa Pig, the famous British animated television series.

\n

Another Chinese startup, Avatr, features China's latest cartoon movie Nobody, a modern interpretation based on one of China's top four classic novels Journey to the West.

\n

Inside the very exhibition center, visitors can get a panda toy from the on-site panda post office, a perfect keepsake from a city that proves you can enjoy cutting-edge cars and cultural fun in equal measure.

\n

But the show does not stop there. Even for serious tech enthusiasts, Chengdu offers plenty of surprises.

\n

Around 120 Chinese and overseas car brands are participating this year, covering 220,000 square meters of exhibition space, according to Liu Guoliang, president of Hannover Milano Fairs Shanghai, one of the organizers.

\n

Some of the luxury brands, including Bentley and Lamborghini, are absent, but overseas premium and volume brands are making their marks.

\n

Mercedes-Benz is showcasing the AMG CLE 53 4MATIC+ convertible and the all-electric CLA; FAW-Audi is presenting 27 models including the PPE-based Q6L e-tron; and Ford is wooing visitors with its first smart electric off-road SUV, the Bronco EV.

\n

However, domestic brands take center stage, as NEVs are becoming mainstream: advanced battery systems, smart driver-assistance features, and luxury interiors rivaling global competitors signal a new era for Chinese automotive engineering.

\n

BYD dominates Hall 9 with its full lineup: Dynasty, Ocean, Denza, Fangchengbao, and premium Yangwang models. At the entrance to the hall is a wall decorated with over 35,000 patents, showcasing the automaker's dedication to NEVs.

\n

A walk from Mercedes-Benz to the Nio booth says it all: Nio's space is packed, while Mercedes' area looks comparatively quiet.

\n

"You can really see how Chinese electric and hybrid brands are maturing, both in technology and appeal," noted one industry analyst.

\n

Chengdu's motor show is not limited to the venue, with excitement spilling throughout the city.

\n

The pre-show week was already bustling with events around the city.

\n

Huawei-backed Harmony Intelligent Mobility Alliance gathered its five sub-brands days before the show.

\n

Volvo launched the XC70, a model it is betting on to defend its shrinking market share, and Great Wall Motors unveiled the Tank 500 with its Hi4-Z hybrid system at Dujiang Weir, the oldest extant irrigation system in China or even the world.

\n

The place was chosen for the event because Great Wall Motors wants to explain how its engine powers electricity generation while driving — delivering strong acceleration, high efficiency, and a fuel-saving edge simultaneously, much like how Dujiang Weir tames floods while ensuring the irrigation of the Chengdu Plain.

\n

"The show has evolved beyond a platform for new product launches, becoming both a symbol of urban culture and a key consumption driver for the region," Liu said.

\n

Last year, attendees placed over 33,000 orders during the event, with a combined transaction volume of 5.8 billion yuan ($80.8 million).

\n

From January to July this year, the city achieved 90.73 billion yuan in car retail sales, up 3.2 percent year-on-year, with 327,000 new car registrations.

\n

"Chengdu and the wider Chengdu-Chongqing economic circle are among the most dynamic car markets in China," Liu added.

\n

Liu was not exaggerating. Among other things, Volkswagen's largest showroom for its expensive Phaeton was in Chengdu, before production ended in 2016.

\n

The German group is now eyeing new collaboration with the city. On Thursday, Volkswagen, FAW Group and the Chengdu Economic and Technological Development Zone inked a deal to advance the electrification of its Jetta brand.

\n

According to the announcement, leveraging the long-term layout of its Chengdu production base, the Jetta brand will establish a new company.

\n

The new company will fully integrate Jetta's existing resources and attract local investment to further leverage regional industrial synergies and accelerate market responsiveness.

\n

Under the plan, by 2030, the new Jetta company aims to build a 100-billion-yuan-level industrial value chain covering R&D, production, supply, and sales.

\n

This initiative will deepen the integration of the Jetta brand into Sichuan province's and Southwest China's automotive ecosystem, consolidating its position as a leading player in the region's automotive industry.

\n

For general visitors, though, there are more practical considerations. To energize buyers, the municipal government has launched "purchase subsidies", offering trade-in support of up to 20,000 yuan per vehicle.

\n

lifusheng@chinadaily.com.cn

\n

", - "category": "", - "link": "https://mobile.chinadaily.com.cn/cn/html5/2025-09/01/content_017_68b4b759ed50ccabe1518882.htm#017MOTORING", - "creator": "", - "pubDate": "Mon, 01 Sep 2025 00:21:04 +0000", - "enclosure": "", - "enclosureType": "", - "image": "", - "id": "", - "language": "", - "folder": "双语", - "feed": "ChinaDaily", - "read": false, - "favorite": false, - "created": false, - "tags": [], - "hash": "a5a9022903bfdb1e8a400ac4a5c8bb4a", - "highlights": [] - }, { "title": "打仗缺钱怎么办?宋朝皇帝:快让仪仗队的大象出去卖艺!", "description": "


本 文 约 3500字
阅 读 需 要 12 分钟


我们读范仲淹“浊酒一杯家万里,燕然未勒归无计”,感受其戍边艰辛;看《杨家将》浴血抗辽、狄青征讨西夏,知其惨烈。但支撑前线“金戈铁马”的巨额军费从何而来?答案之一,竟藏在北宋皇家养象所的“门票”里!



当市民花几个铜板,争相围观东南亚进贡的珍稀大象表演跪拜、吼叫、驮人时,门票收入正涓涓流入国库。这些本该只在皇家典礼上露脸的“祥瑞”,被逼转型“卖艺”,成了特殊的“筹款大使”。


一边是边疆烽火与财政重压,一边是皇家动物园里的萌兽“营业”,北宋朝廷在困局中展现的务实与灵活,尽显于此。



仪仗以外的“副业”

御象的商业化表演


北宋皇家仪仗队中,来自东南亚的巨象可以说是皇家威严的象征。这些由占城、真腊等东南亚国家进贡的“祥瑞”大象,专司重大典礼仪仗。在宋朝隆重的典礼——南郊祭天大礼上,驯象的地位十分突出,戏分较重。在北宋熙宁六年(1073)的郊祀之前,宋神宗专门诏颁《南郊教象仪制》:


“所用转光旗十五,铜沙罗一,鼓十,乘骑人七,簇引旗鼓人三十一。排引日,选驯象六,在六引之前,行中道,分左右,各备鞍、莲花座、紫罗绣鞔、蕉盘、钤铎、杏叶络头。一人骑,四人簇引,并花脚乌巾、乘徘绝青樱桃锦络缝四衣,涂金双鹿带。一内侍押象,绣衣执挝。”


仪仗中有六象,另备用一象,称“副象”。围绕六象的有旗帜、锣鼓器乐,每象一人骑乘,四人在前引导,另有宦官一人穿绣衣执兵械担任主管。辽宁博物馆藏“北宋卤簿钟”上,即有驯象仪仗的图像。这意味着,作为仪仗的驯象队伍,本身还有一套仪仗,其中仅人员至少就有三十九人。而且单独制定、皇帝亲自颁布《南郊教象仪制》,其在典礼中的作用之大、地位之高可想而知。类似情况为后代继承,一直延续到清朝。



但御象在担任皇家仪仗队的职责以外,其实也进行专门的娱乐表演,甚至收取相应的门票收入。北宋熙宁五年(1072)十月七日,一位名叫成寻的日本僧人,路过应天府养象所时,观看驯象表演,载入日记:


到象厩。一屋有三头象,东一屋有四头象。先见三头象,有饲象人教象,有外国僧等来见,可拜。第一象屈后二足,垂头拜踞。次教可称诺由,即出气、出声。高一丈二尺许,长一丈六尺许,鼻长六尺许,牙长七尺,曲向上,以鼻卷取刍食之。象师与钱五十文了。望第二象所,象师又乞钱,五文与了。拜诺同前,高一丈,长一丈三尺,有牙。次至第三象所,高长同第一象,拜诺同前,与钱同前。三象皆男象也。至四头屋,第一象高长同前,第一象拜诺、与钱同前,女象也。有左牙,一尺五寸许,右无牙。第二象无女象牙,拜诺、与钱如前。第三象,牡象也。高一丈三尺,长一丈七尺许,屈四足拜诺,声极高,人人大惊,三声出之,与钱同前。第四象,牡象也。与钱五文。后象师从牙登顶上,举牙,令登人,是希有事也。高一丈四尺许,长一丈八尺许,屈后二足,拜诺同前。皆黑象也。后二足付绳系也。


这七头驯象,日常为游客表演跪拜、唱喏、象牙载人等节目,均为有偿演出。成寻一行总共付费七次,大概是入场费五十文,每表演一次再交五文,凡六次三十文,共八十文钱。朝廷养象所显然又是皇家动物园和马戏团,毕竟充当仪仗的时间有限,有条件在大部分业余时间内通过表演赚钱。而且,这些大象是按照性别分屋饲养,例如“三头屋”为雄象、“四头屋”含雌象,可以看出宋人对大象的科学管理。


这种让尊贵的皇家仪仗象“屈尊”卖艺的做法,背后是北宋王朝沉重的财政包袱——“三冗”(冗兵、冗官、冗费)。庞大的军费、高昂的官俸、沉重的岁币,让国库常年吃紧。同时,传统的田赋、专卖收入捉襟见肘,朝廷必须绞尽脑汁开源。



这种将皇家象征转化为商业资源的做法,可以说是北宋朝廷在财政压力下的一种尝试。随着疆域收缩和战事频发,传统的赋税收入难以填补军费窟窿,统治者不得不将目光投向皇家资产的“闲置价值”。养象所的日常开销本就由国库承担,而让大象在非仪仗时段进行表演,既能增加收入以补贴财政,又能让这些珍稀动物发挥额外作用,可谓一举两得。这种“以象创收”的模式,在当时或许面临着一些关于皇家体面的争议,但从实际效果来看,确为朝廷开辟了一条新的财源,也让普通市民有机会近距离接触到原本遥不可及的皇家“祥瑞”,在一定程度上拉近了皇家与民间的距离。而这种务实的经济思维,也为后来南宋时期皇家园林等资源的商业化利用提供了早期的借鉴。


动物园创收

玉津园与公共开放的财政潜力


宋人,除了可以在应天府养象所看到贡象的娱乐表演外,还可以在“动物园”定期参观它们以及其他奇珍异兽。以东京玉津园为例,作为著名的动物园,东京玉津园饲养着犀牛、孔雀、驯象等动物。据《玉海》载:


“(北宋)乾德五年八月,有象自岭南来,至都城外获之。其后吴越、广南、交州继献驯象四十五头,于南熏门外玉津园东北置养象所,作驯象旗。”


乾德五年(967),一头野生象从岭南北迁至北宋都城开封,被官方捕获。吴越、广南、交州等南方政权为示臣服,接连进贡45头驯象,显示北宋对南方的政治影响力。朝廷在南薰门外的玉津园东北处设立了养象所,并创制了用于仪仗的旗帜“驯象旗”。



北宋大中祥符五年(1012),宋真宗正式下诏:


“诏诸国狮子、驯象、奇兽列于外苑,谕群臣就苑中游宴。”


玉津园就变成了汇集诸国狮子、大象、灵犀等海外奇兽的皇家宠物乐园。而且每年三四月份,玉津园还对所有人开放,洪迈《夷坚志》写道:


“大观中,宿州士人钱君兄弟游上庠。方春月,待试,因休暇出游玉津园。”


钱君兄弟还在待试,暂无功名在身,此时应当是一般的市民身份,可见宋代平民也可以到玉津园内观赏这些奇珍异兽,这些大象、狮子就成了大宋百姓也可以参观的“宠物”,与此同时,玉津园也从皇家兽苑转向公共空间。


如果只是说到饲养各种奇珍动物的皇家园林,实际上可以追溯到商朝,商纣建造的沙丘苑台、周文王修建的灵囿等园林。但是,宋代“玉津园”有别于前者的一点,则是前面提到的,它在每年三四月份会对所有人开放,其中体现的“公共性”与我们现在所提到的“动物园”更有相似之处,在某种意义上,宋代“玉津园”已经具备现代动物园的雏形。



其实,包括“玉津园”在内的宋代园林,无论是皇家园林还是私人园林,都有对市民开放的传统,这使得宋代园林从某种程度上成了宋代市民的“公园”。每年三月,春暖花开时节,各个私家园林打开院门迎接往来市民游玩,史料记载,司马光的独乐园是时人春游必到之处,看园的园丁曾将收得门票钱数千交予司马光,司马光坚辞不受。除了私家园林,每年皇家园林也会开园供市民游玩,如金明池、琼林苑、玉津园等。据《东京梦华录》卷七记载:


“三月一日,州西顺天门外开金明池、球林苑,每日教习车驾上池仪范,虽禁从,士庶许纵赏,御史台有榜不得弹劾。”



虽然史料中未明确记载玉津园收取门票的具体数额,但从私家园林如独乐园园丁能收得数千门票钱来看,皇家园林凭借其珍稀的动物资源和独特的皇家背景,在开放期间所产生的经济效益应该不容小觑。市民入园观赏奇珍异兽,除了可能直接支付的“入园费”,园内或许还存在售卖饮食、玩具等周边商品的摊位,这些收入也能为朝廷带来额外的财政补充。例如南宋临安预演象仪时:


“又命象院教前导朱旗,以二金三鼓为节,各有幞头紫衣蛮奴乘之,手执短钁,旋转跪起,悉如人意。” ——《武林旧事》


“御街观者如堵。市井扑卖土木粉捏妆彩小象儿,并纸画者,外郡人市去,为土宜遗送。” ——《梦粱录》


两地的商人们利用这个商机,开发销售彩塑小象或驯象图画,作为都城的特产被外地游客买走,当作礼品馈送亲友。


这种将皇家禁地适度向公众开放并从中获取收益的方式,打破了以往皇家资源的封闭性,属于北宋朝廷有别于前朝的一种创新尝试。这种做法与御象的商业化表演一脉相承,都是在财政重压下,对皇家资源进行商业化开发的具体体现,共同构成了北宋朝廷独特的“经济智慧”。



参考资料:

《宋史》

《宋会要辑稿》

袁一堂:《论北宋中期的财政危机》,《史学月刊》,1990年第3期。

菅明军:《北宋中期的财政危机及其振兴之道》,《中州今古》,1994年第1期。

王德利:《宋代的玉津园》,《黄河科技大学学报》,2012年第5期。

王风扬:《宋人动物饲养与休闲生活》,华东师范大学硕士学位论文,2014年4月25日。

程民生:《宋代大象的自然与社会生态》,《中原文化研究》,2021年5月14日。


*本文系“国家人文历史”独家稿件,欢迎读者转发朋友圈。


END
作者 | 易北
编辑 | 胡心雅
 主编 | 周斌
排版 | 徐沁(实习)
校对 | 张斌
\"图片\"

国历好物
\"图片\"

进击的士族

旁落的皇权

跨越五百年的权力对抗史

国民历史读物《国家人文历史》专业团队

最新力作

展现士族潮起潮落的史诗级历史画卷

\"图片\"


点击下方封面,即可购买



↓↓↓

\"图片\"

\"图片\"

\"图片\"
“在看”的永远18岁~

\n \n\n \n
\n\n \n 文章原文\n
\n \n\n \n\n \"\"
", diff --git a/.obsidian/plugins/update-time-on-edit/data.json b/.obsidian/plugins/update-time-on-edit/data.json index 5204b698..8a82cfc8 100644 --- a/.obsidian/plugins/update-time-on-edit/data.json +++ b/.obsidian/plugins/update-time-on-edit/data.json @@ -43,7 +43,7 @@ "01-工作日记/2025-09-02.md": "a7f645fd2a60125b54ed6338055e59e9453eb0a7afe760f53914986e5cffc714", "08-Inbox/2025年8月工作与技术实践总结.md": "1f4d810de6d86b9a43105f50a6105c5ec0ff12e07870d816a86186ddf59b11eb", "60-Imports/新疆好玩吗?.md": "19aa7b1d7e4c4712ee65a1e3d14a40b1cf3ac5f32958abb12487e1ba0ba2686a", - "01-工作日记/2025-09-03.md": "064a712c6e21195065895168f7675140e28901c43b42fe8980de4fb36ecb4c24", + "01-工作日记/2025-09-03.md": "4f82ba1d22f2dc793212a806f5245b36065c7fa0503d61504db87439b1069f61", "70-SimpRead/Inbox/11-Ollama 完整教程:本地 LLM 管理、WebUI 对话、Python_Java 客户端 API 应用 - 老牛啊 - 博客园@annote.md": "c06f2a997c6d310c1c90a646c1243d73658133a3a362e026a2f14ddf8cefe18f", "70-SimpRead/Inbox/6-微信剪藏与网页剪藏工具 FlowUS_wolai_ 妙记多_ 新枝_ Mindbox_ 收藏家_ 五彩_ cubox_notion_ 印象笔记_ 有道云笔记_ 为知笔记_ 知了 zKnown 横评 _ 二丫讲梵@annote.md": "3b0d5701cfc28c4fc6e84942530ec673e104fca83188483aa2f849928639f700", "80-日记归档/81-工作日记/202508/2025-08-31.md": "bc72e6b2d40cf8a9b57a23219cbbe4687c2e1601f6dd9529b6210f391758a92e", diff --git a/.obsidian/workspace.json b/.obsidian/workspace.json index f5dda06a..491f1222 100644 --- a/.obsidian/workspace.json +++ b/.obsidian/workspace.json @@ -13,12 +13,12 @@ "state": { "type": "markdown", "state": { - "file": "09-Templates/每周小结.md", + "file": "60-Imports/64-AI/Changsha_Summer_Attractions_Guide@20250831_095229.md", "mode": "source", "source": false }, "icon": "lucide-file", - "title": "每周小结" + "title": "Changsha_Summer_Attractions_Guide@20250831_095229" } } ] @@ -310,7 +310,16 @@ }, "active": "b98b48d9165a0618", "lastOpenFiles": [ + "60-Imports/64-AI/长沙夏季旅游推荐@20250831_095229.md", + "60-Imports/64-AI/成都旅游亮点@20250831_104638.md", + "60-Imports/64-AI/Data_Backup_Standard_Operating_Procedures.md", + "60-Imports/64-AI/August_Diary_Summary_Report@20250901_121407.md", + "60-Imports/64-AI/八月工作学习总结@20250903_153656.md", "01-工作日记/2025-09-03.md", + "80-日记归档/81-工作日记/202508/2025-08-31.md", + "01-工作日记/2025-09-02.md", + "01-工作日记/2025-09-01.md", + "09-Templates/每周小结.md", "02-技术评测/AI专题/AI使用评测.md", "02-技术评测/AI专题/免费使用Gemini 2.5 Pro的完整教程.md", "00-待办计划/2025-09 待办事宜.md", @@ -322,27 +331,18 @@ "80-日记归档/81-工作日记/202508/2025-08-01.md", "80-日记归档/81-工作日记/202508/2025-08-29.md", "80-日记归档/81-工作日记/202508/2025-08-30.md", - "80-日记归档/81-工作日记/202508/2025-08-31.md", "80-日记归档/81-工作日记/202508/2025-08-07.md", "50-Memos/2025/09/LNDrh7edRF8LW9PHVDJemL (2025-09-03 09-23).md", "50-Memos/2025/09/resources/d3ptZQNSu9DACsGefoZ9r3_6BA5BC2D-31A7-42EA-A0BE-C5D39133E9A2.jpg", "50-Memos/2025/09/resources", - "01-工作日记/2025-09-02.md", "60-Imports/新疆好玩吗?.md", "08-Inbox/2025年8月工作与技术实践总结.md", "10-WebClipper/Obsidian笔记多端同步解决办法 | DiyBeta's Blog.md", - "10-WebClipper/Linux查看某个程序占用的端口号_linux查询某个程序的端口号-CSDN博客.md", - "10-WebClipper/新手需要知道的 DEVONthink 知识-2-AI 技术 - 分享 - #UNTAG 官方社区.md", - "10-WebClipper/感谢DeepSeek,1天就赚了3100.md", - "10-WebClipper/基于文档在线编辑和协同编辑的WebOffice产品选型 - 知乎.md", - "10-WebClipper/扩展无限可能:Obsidian Web Viewer插件解析.md", - "10-WebClipper/Windows电脑与iPhone数据完美同步教程 - 知乎.md", "10-WebClipper/assets/2d67ddd6bdcc608dda41f63dacfabc5f5496a07f_2_646x500.jpg", "10-WebClipper/assets/92a79f0f85dd5e387eaef13aad40098bdfff1e2c_2_439x500.jpg", "10-WebClipper/assets/a36c04464840dc226e55680098e2419b4220f0f6_2_569x500.png", "10-WebClipper/assets/6927935afe518f6fd85635d21a63078deb39161b_2_642x500.png", "10-WebClipper/assets/1d0fabe426dcca2d0fb84820f1be9b6872aeede8_2_434x500.jpg", - "50-Memos/2025/09/小苹果八上入学考试由154下降到189名,总分才235.5,不爱学习,整个8月份只要有时间就在玩游戏... (2025-09-02 19-05).md", "50-Memos/2025/09", "08-Inbox/知识库分类导图.smm", "08-Inbox/数据备份实现流程.smm", diff --git a/01-工作日记/2025-09-03.md b/01-工作日记/2025-09-03.md index de29b1ad..a4862a6d 100644 --- a/01-工作日记/2025-09-03.md +++ b/01-工作日记/2025-09-03.md @@ -6,7 +6,7 @@ tags: rating: ⭐️ excerpt: created: 2025-09-03T08:57 -updated: 2025-09-03T12:22 +updated: 2025-09-03T15:46 --- ## 1TODO - [ ] 多喝水,避免久坐不动 @@ -19,7 +19,14 @@ updated: 2025-09-03T12:22 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 可用! 每天限制50次! +- copilot:关于源文件或者目录的加入,可以使用Addcontext,也可以使用描述语言,告诉bot上哪里找文件,生成了一个8月工作总结还可以! + +- LocalGPT+Ollama:很慢!还要装一个AI Providor插件,通过命令来工作 + + ## 3 Tips +- Embedding模型:大模型的一种,可以将文本转换为数值向量的技术,使得计算机能够更好地理解和处理文本内容。 +- ## 4 Questions diff --git a/60-Imports/64-AI/八月工作学习总结@20250903_153656.md b/60-Imports/64-AI/八月工作学习总结@20250903_153656.md new file mode 100644 index 00000000..14ea0121 --- /dev/null +++ b/60-Imports/64-AI/八月工作学习总结@20250903_153656.md @@ -0,0 +1,84 @@ +--- +epoch: 1756885016827 +modelKey: deepseek-ai/Deepseek-V3|openai +topic: "八月工作学习总结" + + +tags: + - copilot-conversation +--- + +**user**: 请帮我编写一个阅读工作总结,基于80-日记归档/81-工作日记/202508目录下的所有2025年8月日记 +[Timestamp: 2025/09/03 15:36:56] + +**ai**: 根据提供的2025年8月日记内容,以下是阅读工作总结: + +### 2025年8月工作总结 + +#### 一、学习与技术探索 +1. **已完成事项**: + - 成功学习并部署了多个工具: + - Duplicati(备份工具) + - Bitwarden(密码管理) + - 自建密码管理系统(作为1Password替代) + - MiniDocker搭建(缓解DSM压力) + - 技术实践: + - 测试了Copilot插件(使用siliconflow API) + - 更新Ollama并添加deepseek-V3模型(377G大模型) + - 尝试集成AI模型工具(GPT4ALL/LM Studio/OLLAMA) + +2. **进行中事项**: + - Joplin Server搭建(自7月延续) + - Tasks和看板使用方法学习 + - LinuxNAS下图床服务器PicList搭建 + - Github Fork保持更新方法研究 + - AList收购后的备选方案 + - Google Gemini学习申请 + - Share Note backend server部署(note.sx) + - 知识库系列文章编写 + - Netlify部署(静态站点托管) + - 黑群晖方案研究 + - 自建S3服务器 + +3. **技术难点**: + - OnlyOffice AI安装问题(不支持Thinking) + - Ollama模型运行内存要求高(deepseek-V3需396G) + - OBAI插件配置困难(Smart Second Brain/Smart Connections) + +#### 二、日常工作与健康管理 +- 坚持健康习惯:多喝水、避免久坐、跑步计划 +- 技能提升:打字/英语/练字日常安排 +- 博客维护:发布计划待完成 + +#### 三、系统优化发现 +1. Copilot使用问题: + - 历史记录保存机制需手动清理 + - 笔记更新缺乏版本提示 +2. AI工具实践: + - Deepseek-R1实际使用速度慢 + - 本地模型运行资源占用大 + +#### 四、9月工作计划建议 +1. 优先完成: + - Openlist修复 + - WordPress+OnlyOffice集成 + - 9月待办计划制定 +2. 技术方向: + - 继续解决AI工具集成问题 + - 推进自建服务部署(S3/ShareNote) +3. 文档整理: + - 配置数据清单 + - 知识库文章 + +#### 五、改进建议 +1. 建立技术实验记录模板 +2. 对大型模型使用制定资源分配计划 +3. 完善笔记版本管理机制 + +(注:总结基于现有日记片段,如需更完整评估建议补充查看完整日记文件) + +#### Sources: + +- [[2025-08-31]] +- [[2025-08 待办事宜]] +[Timestamp: 2025/09/03 15:37:23] \ No newline at end of file